public ServiceResponseData PrintInvoiceAgainSave() { try { int costHeadID = requestData.GetData <int>(0); string newInvoiceNO = requestData.GetData <string>(1); int operatoreid = requestData.GetData <int>(2); List <OP_FeeItemHead> feeItems = NewObject <OP_FeeItemHead>().getlist <OP_FeeItemHead>(" costHeadID=" + costHeadID + string.Empty); DateTime printData = DateTime.Now; foreach (OP_FeeItemHead feeItemHead in feeItems) { OP_PrintInvoiceInfo printInvoice = new OP_PrintInvoiceInfo(); printInvoice.FeeItemHeadID = feeItemHead.FeeItemHeadID; printInvoice.OldInvoiceNumber = feeItemHead.InvoiceNO; printInvoice.NewInvoiceNumber = newInvoiceNO; printInvoice.PrintDate = printData; printInvoice.PrintEmpID = operatoreid; printInvoice.PrintType = 0; printInvoice.InvoiceFee = feeItemHead.TotalFee; printInvoice.PatListID = feeItemHead.PatListID; printInvoice.PatName = feeItemHead.PatName; printInvoice.CostHeadID = feeItemHead.CostHeadID; this.BindDb(printInvoice); printInvoice.save(); feeItemHead.InvoiceNO = newInvoiceNO; feeItemHead.ReciptNO = newInvoiceNO; this.BindDb(feeItemHead); feeItemHead.save(); } OP_CostHead costHead = NewObject <OP_CostHead>().getmodel(costHeadID) as OP_CostHead; costHead.RecipeFlag = 1; this.BindDb(costHead); costHead.save(); responseData.AddData(true); return(responseData); } catch (Exception err) { throw new Exception(err.Message); } }
/// <summary> /// 挂号提交 /// </summary> /// <param name="curPatlist">病人对象</param> /// <param name="paymentInfoList">支付对象</param> /// <param name="totalFee">总金额</param> /// <param name="cashFee">现金金额</param> /// <param name="posFee">POS金额</param> /// <param name="dtPrint">返回的打印数据</param> /// <param name="promFee">优惠金额</param> /// <returns>true成功false失败</returns> public bool SaveRegInfo(OP_PatList curPatlist, PayMentInfoList paymentInfoList, decimal totalFee, decimal cashFee, decimal posFee, out DataTable dtPrint, decimal promFee) { try { dtPrint = new DataTable(); bool result = false; //插入挂号就诊表记录 #region 插入挂号就诊表记录 SerialNumberSource serialNumberSource = NewObject <SerialNumberSource>(); curPatlist.VisitNO = serialNumberSource.GetSerialNumber(SnType.门诊流水号); curPatlist.CureDeptID = curPatlist.RegDeptID; curPatlist.CureEmpID = curPatlist.RegEmpID; curPatlist.RegDate = DateTime.Now; curPatlist.VisitStatus = 0; curPatlist.RegStatus = 0; curPatlist.RegCategory = 0; DataTable dtOld = NewObject <OP_PatList>().gettable(" MemberID=" + curPatlist.MemberID); if (dtOld != null && dtOld.Rows.Count > 0) { curPatlist.IsNew = 0; } else { curPatlist.IsNew = 1; } this.BindDb(curPatlist); curPatlist.save(); #endregion int iAccountType = 0; //得到当前结账ID int curAccountId = NewObject <CommonMethod>().GetAccountId(curPatlist.OperatorID, iAccountType); //插入结算主表对象 #region 插入结算主表对象 OP_CostHead costHead = new OP_CostHead(); SetRegCostHead(costHead, curPatlist); costHead.CashFee = cashFee; costHead.PosFee = posFee; costHead.TotalFee = totalFee; costHead.PromFee = promFee; costHead.AccountID = curAccountId; this.BindDb(costHead); costHead.save(); #endregion #region 插入费用表 //插入费用主表 OP_FeeItemHead OP_FeeItemHead feeItemHead = new OP_FeeItemHead(); SetRegFeeHeadValue(feeItemHead, costHead, curPatlist); this.BindDb(feeItemHead); feeItemHead.save(); //插入费用明细表 OP_FeeItemDetail List <OP_FeeItemDetail> feeDetials = SetRegFeeDetailValue(feeItemHead.FeeItemHeadID, curPatlist); foreach (OP_FeeItemDetail feeDetial in feeDetials) { this.BindDb(feeDetial); feeDetial.save(); } #endregion //插入结算明细表 #region 插入结算明细表 DataTable dtRegFeeDetail = NewDao <IOPManageDao>().GetRegItemFeeByStat(curPatlist.RegTypeID); for (int rowindex = 0; rowindex < dtRegFeeDetail.Rows.Count; rowindex++) { OP_CostDetail costDetail = new OP_CostDetail(); costDetail.CostHeadID = costHead.CostHeadID; costDetail.FeeItemHeadID = feeItemHead.FeeItemHeadID; costDetail.ExeDeptID = curPatlist.RegDeptID; costDetail.PresEmpID = curPatlist.RegEmpID; costDetail.PresDeptID = curPatlist.RegDeptID; costDetail.TotalFee = Convert.ToDecimal(dtRegFeeDetail.Rows[rowindex]["statFee"]); costDetail.StatID = Convert.ToInt32(dtRegFeeDetail.Rows[rowindex]["statId"]); this.BindDb(costDetail); costDetail.save(); } #endregion //插入结算支付方式明细表 #region 插入结算支付方式明细表 foreach (OP_CostPayMentInfo costpaymentinfo in paymentInfoList.paymentInfolist) { if (costpaymentinfo.PayMentMoney > 0) { costpaymentinfo.AccountID = curAccountId; costpaymentinfo.CostHeadID = costHead.CostHeadID; costpaymentinfo.PatListID = curPatlist.PatListID; costpaymentinfo.PatName = curPatlist.PatName; costpaymentinfo.PatType = costHead.PatTypeID.ToString(); this.BindDb(costpaymentinfo); costpaymentinfo.save(); } } #endregion //挂号记录表回写costheadid curPatlist.CostHeadID = costHead.CostHeadID; curPatlist.ChargeFlag = 1; this.BindDb(curPatlist); curPatlist.save(); //结账表插入汇总金额 NewObject <CommonMethod>().AddAccoutFee(costHead, curAccountId, 1, 0); //查数据库得到打印dtPrint dtPrint = NewObject <IOPManageDao>().GetRegPrint(curPatlist.PatListID); result = true; return(result); } catch (Exception err) { throw new Exception(err.Message); } }
/// <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); }
/// <summary> /// 收费预算 /// </summary> /// <param name="prescriptions">处方对象</param> /// <returns>返回预算对象</returns> public override List <ChargeInfo> Budget(List <Prescription> prescriptions) { List <ChargeInfo> listChargeInfos = new List <ChargeInfo>(); decimal toTalFee = prescriptions.Sum(p => p.TotalFee); OP_CostHead costHead = new OP_CostHead(); //插入结算头表 costHead.MemberID = GetPatient.MemberID; costHead.CardNO = GetPatient.CardNO; costHead.PatListID = GetPatient.PatListID; costHead.MemberAccountID = GetPatient.MemberAccountID; costHead.PatName = GetPatient.PatName; costHead.PatTypeID = CostTypeid;//结算时选择的病人类型ID costHead.BeInvoiceNO = string.Empty; costHead.EndInvoiceNO = string.Empty; costHead.ChargeEmpID = GetOperatorId; costHead.TotalFee = toTalFee; costHead.CashFee = 0; costHead.PosFee = 0; costHead.PromFee = 0; costHead.RecipeFlag = 0; costHead.CostStatus = 9;//修改预算状态为9 costHead.OldID = 0; costHead.AccountID = 0; costHead.RegFlag = 0; this.BindDb(costHead); costHead.save(); List <int> feeHeadIDs = new List <int>(); for (int groupIndex = 0; groupIndex < BudgeGroupID.Count; groupIndex++) { int groupid = BudgeGroupID[groupIndex]; List <Prescription> presDetails = prescriptions.Where(p => p.PrescGroupID == groupid).ToList(); var result = from p in presDetails.AsEnumerable() group p by p.StatID into g select new { g.Key, SumValue = g.Sum(p => p.TotalFee) }; foreach (var stat in result) { OP_CostDetail costDetail = new OP_CostDetail(); costDetail.StatID = stat.Key; costDetail.TotalFee = Convert.ToDecimal(stat.SumValue); costDetail.CostHeadID = costHead.CostHeadID; costDetail.FeeItemHeadID = presDetails[0].FeeItemHeadID; costDetail.PresEmpID = presDetails[0].PresEmpID; costDetail.PresDeptID = presDetails[0].PresDeptID; costDetail.ExeDeptID = presDetails[0].ExecDeptID; this.BindDb(costDetail); costDetail.save(); } feeHeadIDs.Add(presDetails[0].FeeItemHeadID);//记录费用头ID OP_FeeItemHead feeItemHead = NewObject <OP_FeeItemHead>().getmodel(presDetails[0].FeeItemHeadID) as OP_FeeItemHead; if (feeItemHead.ChargeFlag == 1) { throw new Exception("处方已被别的收费员收费,请确认!"); } //如果是医生站处方,要判断医生站处方状态,防止医生站已经修改 feeItemHead.CostHeadID = costHead.CostHeadID; feeItemHead.ChargeStatus = 0;//处方状态不修改 this.BindDb(feeItemHead); feeItemHead.save(); } ChargeInfo chargeInfo = new ChargeInfo(); chargeInfo.TotalFee = toTalFee; //结算总金额 chargeInfo.CostHeadID = costHead.CostHeadID; //结算ID chargeInfo.FeeItemHeadIDs = feeHeadIDs.ToArray(); //一次结算对应的费用头表ID listChargeInfos.Add(chargeInfo); return(listChargeInfos); }
/// <summary> /// 处方正式结算 /// </summary> /// <param name="curPatlist">当前病人对象</param> /// <param name="operatoreid">操作员ID</param> /// <param name="budgeInfo">预算对象</param> /// <param name="prescriptions">处方对象</param> public override void Balance(OP_PatList curPatlist, int operatoreid, List <ChargeInfo> budgeInfo, List <Prescription> prescriptions) { #region 医生站处方判断和状态修改,医技确费状态修改 CheckDocPrsc(prescriptions); #endregion DateTime chargedate = DateTime.Now; int iAccountType = 0; //得到当前结账ID int curAccountId = NewObject <CommonMethod>().GetAccountId(operatoreid, iAccountType); //实际上多张处方一次结算只有一条记录 foreach (ChargeInfo chargeInfo in budgeInfo) { string invoiceNo = string.Empty; Basic_Invoice basicInvoice = NewObject <CommonMethod>().GetCurInvoice(InvoiceType.门诊收费, operatoreid); string perfChar = string.Empty; invoiceNo = NewObject <InvoiceManagement>().GetInvoiceCurNOAndUse(InvoiceType.门诊收费, operatoreid, out perfChar); invoiceNo = perfChar + invoiceNo; //多张处方一张票号 int costheadid = chargeInfo.CostHeadID; int[] feeHeadids = chargeInfo.FeeItemHeadIDs; chargeInfo.InvoiceCount = 1; chargeInfo.ChargeDate = chargedate; OP_CostHead costHead = NewObject <OP_CostHead>().getmodel(costheadid) as OP_CostHead; if (costHead != null && costHead.CostHeadID > 0) { //结算主表状态和金额写入 costHead.ChargeEmpID = operatoreid; costHead.CostStatus = 0;//正常收费标志改为0 costHead.CostDate = chargedate; costHead.CashFee = chargeInfo.CashFee; costHead.PosFee = chargeInfo.PosFee; costHead.PromFee = chargeInfo.FavorableTotalFee; costHead.RoundingFee = chargeInfo.RoundFee; costHead.EndInvoiceNO = invoiceNo; costHead.BeInvoiceNO = invoiceNo; costHead.AccountID = curAccountId; costHead.InvoiceID = basicInvoice.ID;//保存使用票据的发票卷序号 this.BindDb(costHead); costHead.save(); //费用主表状态修改 NewDao <IOPManageDao>().UpdateFeeItemHeadStatus(costHead.CostHeadID, invoiceNo, chargedate, operatoreid); //插入结算支付方式表 foreach (OP_CostPayMentInfo payment in chargeInfo.PayInfoList) { payment.PatListID = curPatlist.PatListID; payment.PatName = curPatlist.PatName; payment.PatType = costHead.PatTypeID.ToString(); payment.AccountID = curAccountId; payment.CostHeadID = costHead.CostHeadID; Basic_Payment basePayment = NewObject <Basic_Payment>().getmodel(payment.PayMentID) as Basic_Payment; payment.PayMentCode = basePayment.PayCode; payment.PayMentName = basePayment.PayName; this.BindDb(payment); payment.save(); } //减虚拟库存 MinisStorage(prescriptions, false); //会员积分 AddScore(curPatlist.MemberAccountID, costHead.TotalFee, costHead.CostHeadID.ToString(), operatoreid); if (chargeInfo.FavorableTotalFee > 0) { SavePromData(costHead.PatTypeID, costHead.MemberAccountID, costHead.TotalFee, prescriptions, operatoreid, costHead.CostHeadID); } AddAccoutFee(costHead, curAccountId, 1, 0); } else { throw new Exception("没有找到结算号的记录!"); } } }
/// <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="curPatlist">病人对象</param> /// <param name="operatoreid">操作员ID</param> /// <param name="budgeInfo">预算对象</param> /// <param name="prescriptions">处方对象</param> public override void Balance(OP_PatList curPatlist, int operatoreid, List <ChargeInfo> budgeInfo, List <Prescription> prescriptions) { #region 医生站处方判断和状态修改,医技确费状态修改 CheckDocPrsc(prescriptions); #endregion DateTime chargedate = DateTime.Now; int iAccountType = 0; //得到当前结账ID int curAccountId = NewObject <CommonMethod>().GetAccountId(operatoreid, iAccountType); //实际上一次结算只有一条记录结算表只一条记录 foreach (ChargeInfo chargeInfo in budgeInfo) { int costheadid = chargeInfo.CostHeadID; int[] feeHeadids = chargeInfo.FeeItemHeadIDs; //int invoiceNum= NewObject<CommonMethod>().GetInvoiceInfo(InvoiceType.门诊收费, operatoreid, out curInvoiceNO); //if (invoiceNum < feeHeadids.Length) //{ // throw new Exception("本次收费需要"+feeHeadids.Length+"张票,您的可用票据张数不足"); //} chargeInfo.InvoiceCount = feeHeadids.Length; chargeInfo.ChargeDate = chargedate; OP_CostHead costHead = NewObject <OP_CostHead>().getmodel(costheadid) as OP_CostHead; if (costHead != null && costHead.CostHeadID > 0) { string bInvoiceNo = string.Empty; string eInvoiceNo = string.Empty; Basic_Invoice basicInvoice = NewObject <CommonMethod>().GetCurInvoice(InvoiceType.门诊收费, operatoreid); if (basicInvoice.EndNO - basicInvoice.CurrentNO + 1 < feeHeadids.Length) { throw new Exception("本次收费需要" + feeHeadids.Length + "张票,您当前使用发票卷的可用票据张数不足"); } for (int feeIndex = 0; feeIndex < feeHeadids.Length; feeIndex++) { //费用主表状态修改 OP_FeeItemHead feeItemHead = NewObject <OP_FeeItemHead>().getmodel(feeHeadids[feeIndex]) as OP_FeeItemHead; string invoiceNo = string.Empty; string perfChar = string.Empty; invoiceNo = NewObject <InvoiceManagement>().GetInvoiceCurNOAndUse(InvoiceType.门诊收费, operatoreid, out perfChar); invoiceNo = perfChar + invoiceNo; //一张处方一张票号 feeItemHead.InvoiceNO = invoiceNo; feeItemHead.ChargeDate = chargedate; feeItemHead.ChargeFlag = 1; feeItemHead.ChargeStatus = 0; feeItemHead.ChargeEmpID = operatoreid; feeItemHead.save(); if (feeIndex == 0) { bInvoiceNo = invoiceNo; } else if (feeIndex == feeHeadids.Length - 1) { eInvoiceNo = invoiceNo; } } //结算主表状态和金额写入 costHead.ChargeEmpID = operatoreid; costHead.CostStatus = 0;//正常收费标志改为0 costHead.CostDate = chargedate; costHead.CashFee = chargeInfo.CashFee; costHead.PosFee = chargeInfo.PosFee; costHead.PromFee = chargeInfo.FavorableTotalFee; costHead.RoundingFee = chargeInfo.RoundFee; costHead.EndInvoiceNO = bInvoiceNo; costHead.BeInvoiceNO = eInvoiceNo; costHead.AccountID = curAccountId; costHead.InvoiceID = basicInvoice.ID;//写入发票卷序号 this.BindDb(costHead); costHead.save(); //插入结算支付方式表 foreach (OP_CostPayMentInfo payment in chargeInfo.PayInfoList) { payment.PatListID = curPatlist.PatListID; payment.PatName = curPatlist.PatName; payment.PatType = costHead.PatTypeID.ToString(); payment.AccountID = curAccountId; payment.CostHeadID = costHead.CostHeadID; Basic_Payment basePayment = NewObject <Basic_Payment>().getmodel(payment.PayMentID) as Basic_Payment; payment.PayMentCode = basePayment.PayCode; payment.PayMentName = basePayment.PayName; this.BindDb(payment); payment.save(); } //减虚拟库存 MinisStorage(prescriptions, false); AddScore(curPatlist.MemberAccountID, costHead.TotalFee, costHead.CostHeadID.ToString(), operatoreid); AddAccoutFee(costHead, curAccountId, feeHeadids.Length, 0); } else { throw new Exception("没有找到结算号的记录!"); } } }