/// <summary> /// 退号提交 /// </summary> /// <param name="invoiceNO">票据号</param> /// <param name="operatorID">操作员ID</param> public void BackReg(string invoiceNO, int operatorID) { int iAccountType = 0; List <OP_CostHead> costList = NewObject <OP_CostHead>().getlist <OP_CostHead>(" endInvoiceNO='" + invoiceNO + "' and regFlag=1"); if (costList == null || costList.Count == 0) { throw new Exception("找不到该票据号信息"); } else if (costList[0].CostStatus != 0) { throw new Exception("该票据号已经退费,不能再退"); } else if (costList[0].CostStatus == 0 && costList[0].CostDate.ToString("yyyy-MM-dd") != DateTime.Now.ToString("yyyy-MM-dd")) { throw new Exception("已超过退号日期,只能退当天挂的号"); } //原op_patlist变化 OP_PatList patlist = NewObject <OP_PatList>().getmodel(costList[0].PatListID) as OP_PatList; if (patlist.VisitStatus != 0) { throw new Exception("您已就诊,不能再退号"); } patlist.RegStatus = 1;//原挂号记录状态置1 this.BindDb(patlist); patlist.save(); //得到当前结账ID int curAccountId = NewObject <CommonMethod>().GetAccountId(operatorID, iAccountType); //原op_costHead变化 OP_CostHead oldCostHead = costList[0].Clone() as OP_CostHead; oldCostHead.CostStatus = 1;//原有记录状态改为1 this.BindDb(oldCostHead); oldCostHead.save(); //生成新op_costHead变化 OP_CostHead newCostHead = costList[0].Clone() as OP_CostHead; newCostHead.CostHeadID = 0; newCostHead.CostDate = DateTime.Now; newCostHead.CostStatus = 2;//新增记录状态为2 newCostHead.ChargeEmpID = operatorID; newCostHead.AccountID = curAccountId; newCostHead.CashFee = (oldCostHead.CashFee + oldCostHead.PosFee) * (-1);//退金额,POS金额退现金 newCostHead.PosFee = 0; newCostHead.PromFee = oldCostHead.PromFee * (-1); newCostHead.OldID = oldCostHead.CostHeadID;//写入原退记录ID newCostHead.TotalFee = newCostHead.TotalFee * (-1); this.BindDb(newCostHead); newCostHead.save(); //得到原来OP_FeeItemHead List <OP_FeeItemHead> listFeeitemHead = NewObject <OP_FeeItemHead>().getlist <OP_FeeItemHead>(" costheadid=" + oldCostHead.CostHeadID); OP_FeeItemHead newFeeItemHead = new OP_FeeItemHead(); if (listFeeitemHead != null && listFeeitemHead.Count > 0) { OP_FeeItemHead oldFeeItemHead = listFeeitemHead[0].Clone() as OP_FeeItemHead; oldFeeItemHead.ChargeStatus = 1;//原有记录状态改为1 this.BindDb(oldFeeItemHead); oldFeeItemHead.save(); //生成新OP_FeeItemHead变化 newFeeItemHead = listFeeitemHead[0].Clone() as OP_FeeItemHead; newFeeItemHead.FeeItemHeadID = 0; newFeeItemHead.ChargeStatus = 2; newFeeItemHead.CostHeadID = newCostHead.CostHeadID; newFeeItemHead.TotalFee = newFeeItemHead.TotalFee * (-1); newFeeItemHead.OldID = oldFeeItemHead.FeeItemHeadID;//写入原退记录ID this.BindDb(newFeeItemHead); newFeeItemHead.save(); List <OP_FeeItemDetail> listFeeItemDetail = NewObject <OP_FeeItemDetail>().getlist <OP_FeeItemDetail>(" FeeItemHeadID=" + oldFeeItemHead.FeeItemHeadID); foreach (OP_FeeItemDetail oldfeeitemDetail in listFeeItemDetail) { OP_FeeItemDetail newfeeitemDetail = oldfeeitemDetail.Clone() as OP_FeeItemDetail; newfeeitemDetail.PresDetailID = 0; newfeeitemDetail.FeeItemHeadID = newFeeItemHead.FeeItemHeadID; newfeeitemDetail.TotalFee = newfeeitemDetail.TotalFee * (-1); newfeeitemDetail.Amount = oldfeeitemDetail.Amount * (-1); this.BindDb(newfeeitemDetail); newfeeitemDetail.save(); } } //生成新op_costDetail List <OP_CostDetail> costDetailList = NewObject <OP_CostDetail>().getlist <OP_CostDetail>(" costheadid=" + oldCostHead.CostHeadID); foreach (OP_CostDetail oldcostDetail in costDetailList) { OP_CostDetail newCostDetail = oldcostDetail.Clone() as OP_CostDetail; newCostDetail.CostHeadID = newCostHead.CostHeadID; newCostDetail.FeeItemHeadID = newFeeItemHead.FeeItemHeadID; newCostDetail.TotalFee = oldcostDetail.TotalFee * (-1); newCostDetail.CostDetailID = 0; this.BindDb(newCostDetail); newCostDetail.save(); } //生成新OP_CostPayMentInfo List <OP_CostPayMentInfo> costPayMentInfoList = NewObject <OP_CostPayMentInfo>().getlist <OP_CostPayMentInfo>(" costheadid=" + oldCostHead.CostHeadID); decimal oldposfee = 0; foreach (OP_CostPayMentInfo oldCostpayInfo in costPayMentInfoList) { if (oldCostpayInfo.PayMentCode == "02") { oldposfee = oldCostpayInfo.PayMentMoney; } } foreach (OP_CostPayMentInfo oldCostpayInfo in costPayMentInfoList) { OP_CostPayMentInfo newCostPayInfo = oldCostpayInfo.Clone() as OP_CostPayMentInfo; newCostPayInfo.AccountID = curAccountId; newCostPayInfo.ID = 0; newCostPayInfo.CostHeadID = newCostHead.CostHeadID; //POS if (oldCostpayInfo.PayMentCode == "02") { newCostPayInfo.PayMentMoney = 0; } //现金 if (oldCostpayInfo.PayMentCode == "01") { newCostPayInfo.PayMentMoney = (oldCostpayInfo.PayMentMoney + oldposfee) * (-1); } else { newCostPayInfo.PayMentMoney = oldCostpayInfo.PayMentMoney * (-1); } this.BindDb(newCostPayInfo); newCostPayInfo.save(); } //结账表插入汇总金额 NewObject <CommonMethod>().AddAccoutFee(newCostHead, curAccountId, 0, 1); }
public string BalancePres(string visitNO) { try { // string visitNO = "34"; int empid = 100; int deptid = 1048; SysLoginRight sys = new EFWCoreLib.CoreFrame.Business.SysLoginRight(); sys.WorkId = 1; //获取病人信息 Action <ClientRequestData> requestAction = ((ClientRequestData request) => { request.LoginRight = sys; request.AddData(6); request.AddData(visitNO); }); ServiceResponseData retdata = InvokeWcfService("OPProject.Service", "BalanceController", "GetRegPatListByCardNo", requestAction); List <OP_PatList> patlist = retdata.GetData <List <OP_PatList> >(0); if (patlist.Count == 0) { return("Falg:1"); } OP_PatList curPatlist = patlist[0]; //获取处方 requestAction = ((ClientRequestData request) => { request.LoginRight = sys; request.AddData(curPatlist.PatListID); request.AddData(OP_Enum.PresStatus.未收费); }); retdata = InvokeWcfService("OPProject.Service", "BalanceController", "GetPatPrescription", requestAction); DataTable dtPresc = retdata.GetData <DataTable>(0); //预算 List <Prescription> budgePres = new List <Prescription>(); List <int> budgeNums = new List <int>(); List <Prescription> prescriptions = EFWCoreLib.CoreFrame.Common.ConvertExtend.ToList <Prescription>(dtPresc); budgeNums = GetBudgePrescriptionAmbitList(prescriptions); if (budgeNums.Count == 0) { throw new Exception("没有选中的处方需要收费"); } budgePres = prescriptions.Where(p => p.Selected == 1 && p.SubTotalFlag == 0).ToList(); requestAction = ((ClientRequestData request) => { request.LoginRight = sys; request.AddData(budgePres); //处方 request.AddData(empid); //操作员ID request.AddData(curPatlist); //当前病人对象 request.AddData(curPatlist.PatTypeID); //结算病人类型 request.AddData(budgeNums); //选中的处方张数 }); retdata = InvokeWcfService("OPProject.Service", "BalanceController", "BudgeBalance", requestAction); List <ChargeInfo> budgeInfo = retdata.GetData <List <ChargeInfo> >(0); //正式结算 List <OP_CostPayMentInfo> paylist = new List <OP_CostPayMentInfo>(); OP_CostPayMentInfo payment = new OP_CostPayMentInfo(); payment.PayMentID = 1002; payment.PayMentMoney = 600; paylist.Add(payment); budgeInfo[0].PayInfoList = paylist; budgeInfo[0].PayTotalFee = 600; budgeInfo[0].FavorableTotalFee = 0; budgeInfo[0].PosFee = 0; budgeInfo[0].CashFee = 600;//现金 budgeInfo[0].RoundFee = 0; budgeInfo[0].ChangeFee = 0; requestAction = ((ClientRequestData request) => { request.LoginRight = sys; request.AddData(budgePres); //费用明细对象 request.AddData(empid); //操作员ID request.AddData(curPatlist); //当前病人对象 request.AddData(budgeInfo); //预算对象 request.AddData(1); request.AddData(empid); request.AddData(deptid); }); retdata = InvokeWcfService("OPProject.Service", "BalanceController", "Balance", requestAction); return("Falg:0"); } catch (Exception err) { throw new Exception(err.Message); } }
/// <summary> /// 全退处方 /// </summary> /// <param name="costHeadid">结算ID</param> /// <param name="operatoreid">操作员ID</param> /// <param name="refundPrescriptions">退费处方</param> /// <param name="refundInvoiceNO">退费票据号</param> public void AllRefund(int costHeadid, int operatoreid, List <Prescription> refundPrescriptions, string refundInvoiceNO) { /* * 1:获取当前退费操作员结账ID * 2:修改原结算记录OP_CostHead CostStatus=1 * 3:新增红冲结算记录 CostStatus = 2,写入对冲OldID,金额为负 * 4:新增红冲结算明细记录 OP_CostDetail * 5:新增红冲结算支付方式记录 OP_CostPayMentInfo * 6:修改原费用主表 OP_FeeItemHead ChargeStatus=1 * 7:新增红冲费用主表记录ChargeStatus=2,写入对冲OldID,金额为负 * 8:新增红冲费用明细表记录 OP_FeeItemDetail * 9:修改退费消息表OP_FeeRefundHead RefundPayFlag = 1 * 10:减会员积分 * 11:加虚拟库存 * 12:修改op_account汇总金额 */ int iAccountType = 0; DateTime chargedate = DateTime.Now; //获取当前操作员得到当前结账ID int curAccountId = NewObject <CommonMethod>().GetAccountId(operatoreid, iAccountType); OP_CostHead oldCostHead = NewObject <OP_CostHead>().getmodel(costHeadid) as OP_CostHead; if (oldCostHead.CostStatus != 0) { throw new Exception("该处方已经被退费"); } List <OP_FeeRefundHead> feerefundheadlist = NewObject <OP_FeeRefundHead>().getlist <OP_FeeRefundHead>("invoicenum='" + refundInvoiceNO + "' and flag=0"); if (feerefundheadlist == null || feerefundheadlist.Count == 0) { throw new Exception("退费消息已经删除"); } //再次判断退费消息,是不是存在已经删除又修改状态 List <OP_FeeRefundDetail> feerefundDetailList = NewObject <OP_FeeRefundDetail>().getlist <OP_FeeRefundDetail>(" reheadid=" + feerefundheadlist[0].ReHeadID); //返回需要补收的处方记录 foreach (Prescription refundPresc in refundPrescriptions) { foreach (OP_FeeRefundDetail refundDetail in feerefundDetailList) { if (refundPresc.FeeItemHeadID == refundDetail.FeeItemHeadID && refundPresc.PresDetailID == refundDetail.FeeItemDetailID) { if (refundPresc.Refundamount != refundDetail.RefundAmount) { throw new Exception("退费消息已经修改,请重新获取退费消息"); } } } } int refundPosType = Convert.ToInt32(NewObject <CommonMethod>().GetOpConfig(OpConfigConstant.RefundPosType)); //原结算记录状态修改 oldCostHead.CostStatus = 1; //状态变为退费状态 this.BindDb(oldCostHead); oldCostHead.save(); //新结算主表 OP_CostHead newCostHead = oldCostHead.Clone() as OP_CostHead; newCostHead.CostHeadID = 0; newCostHead.CostStatus = 2; //状态为空冲 newCostHead.AccountID = curAccountId; //定入新的结算ID if (refundPosType == 0) //pos退现金 { newCostHead.CashFee = (oldCostHead.CashFee + oldCostHead.PosFee) * -1; newCostHead.PosFee = 0; } else { newCostHead.CashFee = oldCostHead.CashFee * -1; newCostHead.PosFee = oldCostHead.PosFee * -1; } newCostHead.TotalFee = newCostHead.TotalFee * -1; newCostHead.PromFee = newCostHead.PromFee * -1; newCostHead.OldID = oldCostHead.CostHeadID;//写入原costHeadID newCostHead.ChargeEmpID = operatoreid; newCostHead.CostDate = chargedate; newCostHead.RoundingFee = oldCostHead.RoundingFee * -1; this.BindDb(newCostHead); newCostHead.save(); //新结算支付方式表 List <OP_CostPayMentInfo> oldCostPayList = NewObject <OP_CostPayMentInfo>().getlist <OP_CostPayMentInfo>(" costheadid=" + oldCostHead.CostHeadID); if (refundPosType == 0) { oldCostPayList = oldCostPayList.Where(p => p.PayMentCode != "02").ToList(); foreach (OP_CostPayMentInfo oldCostPay in oldCostPayList) { OP_CostPayMentInfo newCostPay = oldCostPay.Clone() as OP_CostPayMentInfo; newCostPay.ID = 0; newCostPay.CostHeadID = newCostHead.CostHeadID; newCostPay.AccountID = curAccountId; //现金 if (oldCostPay.PayMentCode != "01") { //退现金另外处理 newCostPay.PayMentMoney = oldCostPay.PayMentMoney * -1; this.BindDb(newCostPay); newCostPay.save(); } } if (newCostHead.CashFee != 0) { OP_CostPayMentInfo cashCostPay = new OP_CostPayMentInfo(); cashCostPay.CostHeadID = newCostHead.CostHeadID; cashCostPay.AccountID = curAccountId; cashCostPay.PatListID = newCostHead.PatListID; cashCostPay.PatName = newCostHead.PatName; cashCostPay.PatType = newCostHead.PatTypeID.ToString(); cashCostPay.PayMentCode = "01"; cashCostPay.PayMentID = 1002; cashCostPay.PayMentMoney = newCostHead.CashFee; cashCostPay.PayMentName = "现金支付"; this.BindDb(cashCostPay); cashCostPay.save(); } } else if (refundPosType == 1) { foreach (OP_CostPayMentInfo oldCostPay in oldCostPayList) { OP_CostPayMentInfo newCostPay = oldCostPay.Clone() as OP_CostPayMentInfo; newCostPay.ID = 0; newCostPay.CostHeadID = newCostHead.CostHeadID; newCostPay.AccountID = curAccountId; newCostPay.PayMentMoney = oldCostPay.PayMentMoney * -1; this.BindDb(newCostPay); newCostPay.save(); } } //费用表插入红冲记录 List <OP_FeeItemHead> oldFeeItemHeadList = NewObject <OP_FeeItemHead>().getlist <OP_FeeItemHead>(" costheadid=" + oldCostHead.CostHeadID); foreach (OP_FeeItemHead oldFeeHead in oldFeeItemHeadList) { oldFeeHead.ChargeStatus = 1;//退费状态 this.BindDb(oldFeeHead); oldFeeHead.save(); OP_FeeItemHead newFeeHead = oldFeeHead.Clone() as OP_FeeItemHead; newFeeHead.FeeItemHeadID = 0; newFeeHead.CostHeadID = newCostHead.CostHeadID; newFeeHead.OldID = oldFeeHead.FeeItemHeadID; //红冲退记录ID newFeeHead.ChargeStatus = 2; //新插入记录为红冲记录 newFeeHead.ChargeEmpID = operatoreid; newFeeHead.ChargeDate = chargedate; newFeeHead.TotalFee = oldFeeHead.TotalFee * -1; this.BindDb(newFeeHead); newFeeHead.save(); List <OP_FeeItemDetail> oldFeeItemDetailList = NewObject <OP_FeeItemDetail>().getlist <OP_FeeItemDetail>(" feeitemheadid=" + oldFeeHead.FeeItemHeadID); foreach (OP_FeeItemDetail oldFeeItemDetail in oldFeeItemDetailList) { OP_FeeItemDetail newFeeItemDetail = oldFeeItemDetail.Clone() as OP_FeeItemDetail; newFeeItemDetail.PresDetailID = 0; newFeeItemDetail.TotalFee = oldFeeItemDetail.TotalFee * -1; newFeeItemDetail.Amount = oldFeeItemDetail.Amount * -1; newFeeItemDetail.FeeItemHeadID = newFeeHead.FeeItemHeadID; this.BindDb(newFeeItemDetail); newFeeItemDetail.save(); } } //新结算明细表 List <OP_CostDetail> oldCostDetailList = NewObject <OP_CostDetail>().getlist <OP_CostDetail>("costheadid=" + oldCostHead.CostHeadID); foreach (OP_CostDetail oldCostDetail in oldCostDetailList) { OP_CostDetail newCostDetail = oldCostDetail.Clone() as OP_CostDetail; newCostDetail.CostDetailID = 0; newCostDetail.CostHeadID = newCostHead.CostHeadID;//写入新CostHeadID newCostDetail.TotalFee = oldCostDetail.TotalFee * -1; newCostDetail.FeeItemHeadID = NewDao <IOPManageDao>().GetNewFeeItemHeadId(oldCostDetail.FeeItemHeadID); this.BindDb(newCostDetail); newCostDetail.save(); } //退费消息表置退费状态 List <OP_FeeRefundHead> refundHeadList = NewObject <OP_FeeRefundHead>().getlist <OP_FeeRefundHead>(" invoiceNum='" + refundInvoiceNO + "' and flag=0"); if (refundHeadList.Count == 0) { throw new Exception("找不到退费消息"); } OP_FeeRefundHead refundHead = refundHeadList[0] as OP_FeeRefundHead; refundHead.RefundPayFlag = 1;//退费完成状态 this.BindDb(refundHead); refundHead.save(); //减会员积分 AddScore(newCostHead.MemberAccountID, newCostHead.TotalFee, newCostHead.CostHeadID.ToString(), operatoreid); //药品加虚拟库存 MinisStorage(refundPrescriptions, true); AddAccoutFee(newCostHead, curAccountId, 0, 1); //修改医生站处方状态 RefundDocPrsc(refundPrescriptions); }
/// <summary> /// 结算按钮事件 /// </summary> /// <param name="sender">sender</param> /// <param name="e">e</param> private void btnConfirm_Click(object sender, EventArgs e) { if (IsMediaPat) { if (miblancebudgetid <= 0) { MessageBox.Show("医保病人需医保预结算完成才能结算"); return; } } if (CostPayManager.CostFee.ChangeFee < 0) { MessageBox.Show("支付金额不足!"); return; } if (CostPayManager.CostFee.SelfTotalFee + CostPayManager.CostFee.RoundFee < 0) { MessageBox.Show("记账支付金额不能超过总金额!"); return; } if (CostPayManager.CostFee.AccountTotalFee > CostPayManager.CostFee.PayTotalFee) { MessageBox.Show("总记账支付金额不能超过总金额"); return; } List <OP_CostPayMentInfo> paylist = new List <OP_CostPayMentInfo>(); foreach (PayModeFee pay in CostPayManager.CostFee.payList) { if (pay.PayFee != 0) { OP_CostPayMentInfo payment = new OP_CostPayMentInfo(); payment.PayMentID = pay.PayMethodID; payment.PayMentMoney = pay.PayFee; paylist.Add(payment); } } budgeInfo[0].PayInfoList = paylist; budgeInfo[0].PayTotalFee = CostPayManager.CostFee.PayTotalFee; budgeInfo[0].FavorableTotalFee = CostPayManager.CostFee.FavorableTotalFee; budgeInfo[0].PosFee = CostPayManager.CostFee.PosFee; budgeInfo[0].CashFee = CostPayManager.CostFee.CashFee;//现金 budgeInfo[0].RoundFee = CostPayManager.CostFee.RoundFee; budgeInfo[0].ChangeFee = CostPayManager.CostFee.ChangeFee; if ((bool)InvokeController("Balance")) { balanceSuccess = true; InvokeController("BalanceComplete"); this.Close(); InvokeController("BalancePrint"); if (chkFeePrint.Checked) { InvokeController("PresFeePrintDetail"); } } }
public ServiceResponseData SaveRegister() { try { OP_PatList curPatlist = requestData.GetData <OP_PatList>(0); decimal totalFee = requestData.GetData <decimal>(1); //挂号总金额 string paymentCode = requestData.GetData <string>(2); //支付方式Code decimal medicareFee = requestData.GetData <decimal>(3); //医保统筹支付金额 decimal payFee = requestData.GetData <decimal>(4); //应付金额 decimal promFee = requestData.GetData <decimal>(5); //优惠金额 decimal medicarePersFee = requestData.GetData <decimal>(6); //医保个账支付金额 if (string.IsNullOrEmpty(curPatlist.PatName)) { throw new Exception("请先输入病人信息"); } PayMentInfoList payinfoList = new PayMentInfoList(); List <OP_CostPayMentInfo> paymentInfoList = new List <OP_CostPayMentInfo>(); if (medicareFee > 0) { string medicarePayMentCode = NewObject <CommonMethod>().GetOpConfig(OpConfigConstant.RegMedicareCode);//获取医保对应的支付方式Code OP_CostPayMentInfo paymentinfo = new OP_CostPayMentInfo(); paymentinfo.PayMentCode = medicarePayMentCode; paymentinfo.PayMentMoney = medicareFee; Basic_Payment basicPayment = NewObject <CommonMethod>().GetPayMentByCode(paymentinfo.PayMentCode); paymentinfo.PayMentID = basicPayment.PaymentID; paymentinfo.PayMentName = basicPayment.PayName; paymentInfoList.Add(paymentinfo); } if (medicarePersFee > 0) { OP_CostPayMentInfo paymentinfo = new OP_CostPayMentInfo(); paymentinfo.PayMentCode = "04"; paymentinfo.PayMentMoney = medicarePersFee; Basic_Payment basicPayment = NewObject <CommonMethod>().GetPayMentByCode(paymentinfo.PayMentCode); paymentinfo.PayMentID = basicPayment.PaymentID; paymentinfo.PayMentName = basicPayment.PayName; paymentInfoList.Add(paymentinfo); } if (promFee > 0) { OP_CostPayMentInfo paymentinfo = new OP_CostPayMentInfo(); paymentinfo.PayMentCode = "03"; paymentinfo.PayMentMoney = promFee; Basic_Payment basicPayment = NewObject <CommonMethod>().GetPayMentByCode(paymentinfo.PayMentCode); paymentinfo.PayMentID = basicPayment.PaymentID; paymentinfo.PayMentName = basicPayment.PayName; paymentInfoList.Add(paymentinfo); } decimal cashFee = 0; decimal posFee = 0; if (payFee > 0) { OP_CostPayMentInfo paymentinfo = new OP_CostPayMentInfo(); paymentinfo.PayMentCode = paymentCode; paymentinfo.PayMentMoney = payFee; Basic_Payment basicPayment = NewObject <CommonMethod>().GetPayMentByCode(paymentinfo.PayMentCode); paymentinfo.PayMentID = basicPayment.PaymentID; paymentinfo.PayMentName = basicPayment.PayName; paymentInfoList.Add(paymentinfo); //现金 if (paymentCode == "01") { cashFee += payFee; } //POS if (paymentCode == "02") { posFee += posFee; } } payinfoList.paymentInfolist = paymentInfoList; DataTable dtPrint = new DataTable(); NewObject <RegisterProcess>().SaveRegInfo(curPatlist, payinfoList, totalFee, cashFee, posFee, out dtPrint, promFee); responseData.AddData(dtPrint); //打印信息 responseData.AddData(curPatlist); //病人对象 return(responseData); } catch (Exception err) { throw new Exception(err.Message); } }