/// <summary> /// 根据单据信息构造台帐信息 /// </summary> /// <param name="billMaster">单据头</param> /// <param name="billOrder">单据明细信息</param> /// <param name="storeNum">库存处理后药品库存信息</param> /// <param name="accountYear">会计年份</param> /// <param name="accountMonth">会计月份</param> /// <param name="smallUnit">基本单位</param> /// <returns>台帐信息</returns> override protected YP_Account BuildAccount(BillMaster billMaster, BillOrder billOrder, decimal storeNum, int accountYear, int accountMonth, int smallUnit) { YP_DRMaster master = (YP_DRMaster)billMaster; YP_DROrder order = (YP_DROrder)billOrder; YP_Account account = new YP_Account(); account.AccountYear = accountYear; account.AccountMonth = accountMonth;; account.AccountType = 2; account.Balance_Flag = 0; account.BillNum = (master.InvoiceNum != 0 ? master.InvoiceNum : Convert.ToInt32(master.InpatientID)); account.OpType = master.OpType; account.DeptID = master.DeptID; account.LeastUnit = smallUnit; account.UnitNum = order.UnitNum; account.MakerDicID = order.MakerDicID; account.RegTime = master.OPTime; account.RetailPrice = order.RetailPrice; account.StockPrice = order.TradePrice; account.OrderID = order.OrderDrugOCID; if (master.InvoiceNum != 0) { account.DebitFee = order.RetailFee * master.RecipeNum; account.DebitNum = order.DrugOCNum * master.RecipeNum; } else { account.DebitFee = order.RetailFee; account.DebitNum = order.DrugOCNum; } account.OverNum = storeNum; return(account); }
/// <summary> /// 创建门诊退药明细列表 /// </summary> /// <param name="recipeOrder">发药明细表</param> /// <param name="dispMaster">发药表头</param> /// <param name="dispenseModel">发药模式</param> /// <returns>门诊退药明细列表</returns> public override List <BillOrder> BuildNewDispOrder(DataTable recipeOrder, YP_DRMaster dispMaster, int dispenseModel) { List <BillOrder> rtnList = new List <BillOrder>(); for (int index = 0; index < recipeOrder.Rows.Count; index++) { YP_DROrder refOrder = new YP_DROrder(); DataRow dRow = recipeOrder.Rows[index]; if (Convert.ToInt32(dRow["RefundNum"]) != 0 && Convert.ToInt32(dRow["DrugOC_Flag"]) == 1 && Convert.ToInt32(dRow["MasterDrugOCID"]) == dispMaster.MasterDrugOCID) { refOrder = (YP_DROrder)ApiFunction.DataTableToObject(recipeOrder, index, refOrder); refOrder.DrugOCNum = Convert.ToDecimal(dRow["RefundNum"]); refOrder.DeptID = dispMaster.DeptID; //退药部门ID refOrder.DrugOC_Flag = 0; //1表发药,0表退药 refOrder.MasterDrugOCID = 0; refOrder.Refundment_Flag = 1; //1表已退费,0表未退费 //零售金额 refOrder.RetailFee = refOrder.RetailFee * Convert.ToDecimal(dRow["RefundNum"]) / Convert.ToDecimal(dRow["DrugOCNum"]); //批发金额 refOrder.TradeFee = refOrder.TradeFee * Convert.ToDecimal(dRow["RefundNum"]) / Convert.ToDecimal(dRow["DrugOCNum"]); refOrder.DrugOCNum = Convert.ToDecimal(dRow["RefundNum"]); rtnList.Add(refOrder); } } return(rtnList); }
public override Hashtable ChangeStoreNum(BillMaster billMaster, List <BillOrder> orderList) { try { Hashtable storeNumHash = new Hashtable(); YP_DRMaster refMaster = (YP_DRMaster)billMaster; foreach (BillOrder billOrder in orderList) { YP_StoreNum storeNum = new YP_StoreNum(); YP_DROrder order = (YP_DROrder)billOrder; storeNum.makerDicId = order.MakerDicID; storeNum.smallUnit = order.LeastUnit; int addNum = Convert.ToInt32(order.DrugOCNum * refMaster.RecipeNum); decimal rtn = AddStoreNum(order.MakerDicID, order.DeptID, addNum); if (rtn != -1) { storeNum.storeNum = rtn; storeNum.queryKey = storeNum.makerDicId.ToString() + order.OrderRecipeID.ToString(); storeNumHash.Add(storeNum.queryKey, storeNum); } else { throw new Exception(order.ChemName + "药品从未入过库"); } } return(storeNumHash); } catch (Exception error) { throw error; } }
/// <summary> /// 构造发药单表头 /// </summary> /// <param name="obj">处方头</param> /// <param name="deptId">药剂科室ID</param> /// <param name="dispenserId">发药人员ID</param> /// <returns>发药单表头</returns> public override YP_DRMaster BuildNewDispenseMaster(object obj, int deptId, int dispenserId) { HIS.Interface.Structs.Prescription pres = (HIS.Interface.Structs.Prescription)obj; YP_DRMaster dispMaster = new YP_DRMaster(); dispMaster.Charge_Flag = 1; dispMaster.DeptID = deptId; dispMaster.ChargeMan = Convert.ToInt32(pres.ChargeCode); dispMaster.DeptID = deptId; if (pres.PresDocCode != "") { dispMaster.DocID = Convert.ToInt32(pres.PresDocCode); } else { dispMaster.DocID = 0; } dispMaster.DosageMan = 0; dispMaster.DrugOC_Flag = 1; dispMaster.InpatientID = ""; dispMaster.InvoiceNum = Convert.ToInt32(pres.TicketNum); dispMaster.OPPeopleID = dispenserId; dispMaster.OPTime = XcDate.ServerDateTime; dispMaster.OpType = ConfigManager.OP_YF_DISPENSE; dispMaster.PatientID = pres.RegisterID; dispMaster.PatientName = pres.PatientName; dispMaster.PatientNo = ""; dispMaster.ReceiptCode = pres.ChargeID; dispMaster.RecipeID = pres.PrescriptionID; dispMaster.RecipeNum = Convert.ToInt32(pres.presAmount); dispMaster.RetailFee = 0; return(dispMaster); }
/// <summary> /// 创建发药单表头记录对象(临床发药) /// </summary> /// <param name="presInfo"> /// 住院病人对象 /// </param> /// <param name="deptId"> /// 发药部门ID /// </param> /// <param name="dispenserId"> /// 发药人员ID /// </param> /// <returns> /// 新创建的发药表头记录 /// </returns> public YP_DRMaster BuildNewDispenseMaster(ZY_DispPresInfo presInfo, int deptId, int dispenserId) { YP_DRMaster dispMaster = new YP_DRMaster(); dispMaster.Charge_Flag = 0; //记账处方标识,未启用 dispMaster.DeptID = deptId; //发药部门ID if (XcConvert.IsInteger(presInfo.CureDocCode)) { dispMaster.DocID = Convert.ToInt32(presInfo.CureDocCode);//主治医生ID } dispMaster.DrugOC_Flag = presInfo.drFlag; dispMaster.OpType = presInfo.opType; dispMaster.DosageMan = 0; //配药人ID,未启用 dispMaster.InpatientID = presInfo.CureNo; dispMaster.InvoiceNum = 0; //住院发票号默认为0 dispMaster.OPPeopleID = dispenserId; //发药人员ID dispMaster.OPTime = HIS.SYSTEM.PubicBaseClasses.XcDate.ServerDateTime; //发药时间 dispMaster.PatientID = presInfo.PatListId; //病人ID dispMaster.PatientName = presInfo.PatName; //病人姓名 dispMaster.PatientNo = ""; //病历号,未启用 dispMaster.ReceiptCode = 0; //结算收据号 dispMaster.RecipeID = 0; //处方号,住院未启用 dispMaster.RecipeNum = presInfo.recipeNum; //处方贴数 dispMaster.RetailFee = 0; //零售金额,初始化为0 return(dispMaster); }
/// <summary> /// 保存门诊退药单(门诊退药) /// </summary> /// <param name="billMaster">单据表头</param> /// <param name="listOrder">单据明细列表</param> /// <param name="deptId">药剂科室ID</param> public override void SaveBill(BillMaster billMaster, List <BillOrder> listOrder, long deptId) { try { YP_DRMaster refMaster = (YP_DRMaster)billMaster; refMaster.RetailFee = 0; oleDb.BeginTransaction(); //将发药单据表头写入数据库 if (listOrder.Count > 0) { //添加退药表头 BindEntity <HIS.Model.YP_DRMaster> .CreateInstanceDAL(oleDb, Tables.YF_DRMASTER).Add(refMaster); foreach (YP_DROrder order in listOrder) { order.MasterDrugOCID = refMaster.MasterDrugOCID; BindEntity <HIS.Model.YP_DROrder> .CreateInstanceDAL(oleDb, Tables.YF_DRORDER).Add(order); refMaster.RetailFee += order.RetailFee; } refMaster.RetailFee = refMaster.RetailFee * refMaster.RecipeNum; BindEntity <HIS.Model.YP_DRMaster> .CreateInstanceDAL(oleDb, Tables.YF_DRMASTER).Update(refMaster); Hashtable storeTable = StoreFactory.GetProcessor(refMaster.OpType).ChangeStoreNum(billMaster, listOrder); AccountFactory.GetWriter(refMaster.OpType).WriteAccount(billMaster, listOrder, storeTable); } oleDb.CommitTransaction(); } catch (Exception error) { oleDb.RollbackTransaction(); throw error; } }
/// <summary> /// 创建发药表头对象(经管发药) /// </summary> /// <param name="patInfo">住院病人对象</param> /// <param name="deptId">部门ID</param> /// <param name="dispenserId">发药人员ID</param> /// <returns></returns> public YP_DRMaster BuildNewDispenseMaster(ZY_PatList patInfo, int deptId, int dispenserId, int presamount, int groupid) { YP_DRMaster dispMaster = new YP_DRMaster(); dispMaster.Charge_Flag = 0; //记账处方标识,未启用 dispMaster.DeptID = deptId; //发药部门ID if (XcConvert.IsInteger(patInfo.CureDocCode)) { dispMaster.DocID = Convert.ToInt32(XcConvert.IsInteger(patInfo.CureDocCode)); //主治医生ID } dispMaster.DosageMan = 0; //配药人ID,未启用 dispMaster.DrugOC_Flag = presamount > 0 ? 1 : 0; //1表发药,0表退药 //update by heyan 2010.11.22付数大于0表示发药,小于0表退药 dispMaster.InpatientID = patInfo.CureNo; //住院号 dispMaster.InvoiceNum = 0; //住院发票号默认为0 dispMaster.OPPeopleID = dispenserId; //发药人员ID dispMaster.OPTime = HIS.SYSTEM.PubicBaseClasses.XcDate.ServerDateTime; //发药时间 dispMaster.OpType = presamount > 0?ConfigManager.OP_YF_DISPENSE:ConfigManager.OP_YF_REFUND; //业务类型 update by heyan 2010.11.22付数大于0表示发药,小于0表退药 dispMaster.PatientID = patInfo.PatListID; //病人ID dispMaster.PatientName = patInfo.PatientInfo.PatName; //病人姓名 dispMaster.PatientNo = ""; //病历号,未启用 dispMaster.ReceiptCode = 0; //结算收据号 dispMaster.RecipeID = groupid; //处方号,住院未启用 //update by heyan 2010.10.26 中草药的组号 dispMaster.RecipeNum = presamount > 0?presamount:presamount * -1; //处方贴数 //update by heyan 2010.10.26 中草药保存处方数 dispMaster.RetailFee = 0; //零售金额,初始化为0 return(dispMaster); }
/// <summary> /// 住院药品统领 /// </summary> /// <param name="masterList">发药单表头汇总</param> /// <param name="deptId">药剂科室ID</param> /// <param name="dispDt">记账明细信息</param> /// <returns>统领药品历史信息</returns> public override BillMaster SaveBills(List <BillMaster> masterList, long deptId, Hashtable dispDt) { try { if (masterList == null) { throw new Exception("发药汇总失败"); } if (masterList.Count < 1) { throw new Exception("没有药品被选中发送"); } noStoreList = new List <YP_StoreNum>(); YP_DispDeptHis dispDeptHis = new YP_DispDeptHis(); dispDeptHis.DispDept = (int)deptId; YP_DRMaster firstMaster = (YP_DRMaster)(masterList[0]); dispDeptHis.OpMan = firstMaster.OPPeopleID; dispDeptHis.OpTime = firstMaster.OPTime; dispDeptHis.TotalFee = 0; dispDeptHis.DeptId = firstMaster.DeptID; oleDb.BeginTransaction(); BindEntity <YP_DispDeptHis> .CreateInstanceDAL(oleDb).Add(dispDeptHis); foreach (YP_DRMaster dispMaster in masterList) { string hashKey = dispMaster.InpatientID + dispMaster.DrugOC_Flag.ToString(); if (dispDt[hashKey] == null) { break; } DataTable dispRecipeOrder = (DataTable)dispDt[hashKey]; if (dispRecipeOrder.Rows.Count > 0) { List <BillOrder> dispList = this.BuildNewDispOrder(dispRecipeOrder, dispMaster, 2); dispMaster.UniFormId = dispDeptHis.Id; SingleDisp(dispList, dispMaster, dispDeptHis.Id); dispDeptHis.TotalFee += dispMaster.RetailFee; dispDeptHis.PatientNames += (dispMaster.PatientName + ","); } } BindEntity <YP_DispDeptHis> .CreateInstanceDAL(oleDb).Update(dispDeptHis); if (noStoreList.Count > 0) { oleDb.RollbackTransaction(); return(null); } oleDb.CommitTransaction(); return(dispDeptHis); } catch (Exception error) { if (oleDb.IsInTransaction) { oleDb.RollbackTransaction(); } throw error; } }
/// <summary> /// 保存多张住院发药单(住院发药统领) /// </summary> /// <param name="masterList">发药单头表</param> /// <param name="deptId">药剂科室ID</param> /// <param name="dispDt"></param> /// <returns></returns> public override BillMaster SaveBills(List <BillMaster> masterList, long deptId, Hashtable dispDt) { try { YP_DispDeptHis dispDeptHis = new YP_DispDeptHis(); dispDeptHis.DispDept = (int)deptId; YP_DRMaster firstMaster = (YP_DRMaster)(masterList[0]); dispDeptHis.OpMan = firstMaster.OPPeopleID; dispDeptHis.OpTime = firstMaster.OPTime; dispDeptHis.TotalFee = 0; dispDeptHis.DeptId = firstMaster.DeptID; oleDb.BeginTransaction(); BindEntity <YP_DispDeptHis> .CreateInstanceDAL(oleDb).Add(dispDeptHis); foreach (YP_DRMaster dispMaster in masterList) { if (dispDt[dispMaster.InpatientID] == null) { break; } DataTable dispRecipeOrder = (DataTable)dispDt[dispMaster.InpatientID]; if (dispRecipeOrder.Rows.Count > 0) { DataTable dt = dispRecipeOrder.Clone(); dt.Clear(); DataRow[] rows = dispRecipeOrder.Select("group_id=" + dispMaster.RecipeID + ""); if (rows.Length > 0) { for (int index = 0; index < rows.Length; index++) { dt.Rows.Add(rows[index].ItemArray); } List <BillOrder> dispList = this.BuildNewDispOrder(dt, dispMaster, 2); dispMaster.UniFormId = dispDeptHis.Id; SingleDisp(dispList, dispMaster, dispDeptHis.Id); dispDeptHis.TotalFee += dispMaster.RetailFee; dispDeptHis.PatientNames += (dispMaster.PatientName + ","); } //List<BillOrder> dispList = this.BuildNewDispOrder(dispRecipeOrder, dispMaster, 2); //dispMaster.UniFormId = dispDeptHis.Id; //SingleDisp(dispList, dispMaster, dispDeptHis.Id); //dispDeptHis.TotalFee += dispMaster.RetailFee; //dispDeptHis.PatientNames += (dispMaster.PatientName + ","); } } BindEntity <YP_DispDeptHis> .CreateInstanceDAL(oleDb).Update(dispDeptHis); oleDb.CommitTransaction(); return(dispDeptHis); } catch (Exception error) { if (oleDb.IsInTransaction) { oleDb.RollbackTransaction(); } throw error; } }
/// <summary> /// 保存门诊发药单(门诊发药) /// </summary> /// <param name="billMaster">门诊发药单表头</param> /// <param name="listOrder">门诊发药单明细</param> /// <param name="deptId">药剂科室ID</param> public override void SaveBill(BillMaster billMaster, List <BillOrder> listOrder, long deptId) { try { YP_DRMaster dispMaster = (YP_DRMaster)billMaster; dispMaster.RetailFee = 0; YP_Storage store = new YP_Storage(); //将发药单据表头写入数据库 if (listOrder.Count > 0) { //开启发药事务 oleDb.BeginTransaction(); string strWhere = BLL.Tables.yf_drmaster.RECIPEID + oleDb.EuqalTo() + dispMaster.RecipeID.ToString(); if (BindEntity <YP_DRMaster> .CreateInstanceDAL(oleDb, Tables.YF_DRMASTER).Exists(strWhere)) { throw new Exception("该张发票已经发过药品,请刷新病人列表"); } BindEntity <HIS.Model.YP_DRMaster> .CreateInstanceDAL(oleDb, Tables.YF_DRMASTER).Add(dispMaster); //更新处方头 MZ_BLL.YP_Interface.UpdateSendDrugFlag(dispMaster.RecipeID); //将生成的发药单据表头标识ID赋给所有发药明细 foreach (BillOrder baseOrder in listOrder) { YP_DROrder order = (YP_DROrder)baseOrder; order.MasterDrugOCID = dispMaster.MasterDrugOCID; YP_DROrder drOrder = (YP_DROrder)order; BindEntity <HIS.Model.YP_DROrder> .CreateInstanceDAL(oleDb, Tables.YF_DRORDER).Add(order); dispMaster.RetailFee += order.RetailFee; } dispMaster.RetailFee = dispMaster.RetailFee * dispMaster.RecipeNum; BindEntity <HIS.Model.YP_DRMaster> .CreateInstanceDAL(oleDb, Tables.YF_DRMASTER).Update(dispMaster); Hashtable storeTable = StoreFactory.GetProcessor(dispMaster.OpType).ChangeStoreNum(billMaster, listOrder); //foreach (YP_StoreNum storeInfo in storeTable.Values) //{ // if (storeInfo.storeNum == -1) // { // noStoreList.Add(storeInfo); // } //} AccountFactory.GetWriter(dispMaster.OpType).WriteAccount(billMaster, listOrder, storeTable); oleDb.CommitTransaction(); } } catch (Exception error) { if (oleDb.IsInTransaction) { oleDb.RollbackTransaction(); } throw error; } }
private void btnDispense_Click(object sender, EventArgs e) { try { if (ConfigManager.IsChecking(_currentDeptId) == true) { MessageBox.Show("药品正在盘点中......"); return; } if (_currentPat.InvoiceNum == "" || _presList.Rows.Count <= 0) { MessageBox.Show("没有病人需要发药"); return; } List <YP_DRMaster> listMaster = new List <YP_DRMaster>(); for (int index = 0; index < _presList.Rows.Count; index++) { Prescription dispPres = GetPresFromDt(index); YP_DRMaster dispMaster = _billProcessor.BuildNewDispenseMaster(dispPres, (int)_currentDeptId, (int)_currentUserId); listMaster.Add(dispMaster); List <BillOrder> dispList = _billProcessor.BuildNewDispOrder((DataTable)_recipeTb[dispPres.PrescriptionID], dispMaster, 0); if (dispList != null) { _billProcessor.SaveBill(dispMaster, dispList, _currentDeptId); } } MessageBox.Show("发药成功,请注意库存...", "发药成功提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); ////2010.10.20 门诊住院发药打印发药清单 add by heyan //YP_Printer printer= PrintFactory.GetPrinter(ConfigManager.OP_YF_DISPENSE + "MZ"); ; //string startPath = Application.StartupPath+"\\report\\门诊发药单据.grf"; //for (int i = 0; i < listMaster.Count; i++) //{ // printer.PrintBill(listMaster[i], null, startPath, (int)_currentUserId); //} for (int i = 0; i < listMaster.Count; i++) //update by heyan 2010.10.29 点发药时直接打印处方 { mz_Interface.PrintDocPres(listMaster[i].RecipeID); } lstPatInfo_DoubleClick(null, null); if (chkRefresh.Checked == true) { btnRefresh_Click(null, null); } this.txtQueryNum.Focus(); } catch (Exception error) { MessageBox.Show(error.Message); } }
private YP_DRMaster GetDRMasterFromDt(int index) { if (index >= 0) { YP_DRMaster drMaster = new YP_DRMaster(); drMaster = (YP_DRMaster)ApiFunction.DataTableToObject(listMaster, index, drMaster); return(drMaster); } else { return(null); } }
private void PrintRefundBill(YP_DRMaster refMaster) { try { string startPath = Application.StartupPath + "\\report\\门诊退药单据.grf"; PrintFactory.GetPrinter(ConfigManager.OP_YF_REFUND + "MZ").PrintBill(refMaster, null, startPath, (int)_currentUserId); } catch (Exception error) { throw error; } }
private void btnRefund_Click(object sender, EventArgs e) { try { if (ConfigManager.IsChecking(_currentDeptId)) { MessageBox.Show("药品正在盘点中......"); return; } if (MessageBox.Show("您确定要退以下药品么?", "退药确认", MessageBoxButtons.OKCancel) == DialogResult.Cancel) { return; } if (_dispOrder == null || _dispOrder.Rows.Count < 1) { MessageBox.Show("没有药品可退", "警告", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning); return; } if (CheckRefundNum() == false) { MessageBox.Show("药品退药数量过多,请重新输入"); return; } List <YP_DRMaster> printList = new List <YP_DRMaster>(); for (int index = 0; index < listMaster.Rows.Count; index++) { YP_DRMaster dispMaster = GetDRMasterFromDt(index); YP_DRMaster refMaster = _billProcessor.BuildNewDispenseMaster(dispMaster, (int)_currentDeptId, (int)_currentUserId); List <BillOrder> refList = _billProcessor.BuildNewDispOrder(_dispOrder, dispMaster, 0); if (refList.Count > 0) { _billProcessor.SaveBill(refMaster, refList, _currentDeptId); printList.Add(refMaster); } } MessageBox.Show("退药成功,请注意库存...", "退药成功", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); } catch (Exception error) { MessageBox.Show(error.Message); } finally { LoadData(Convert.ToInt32(txtQueryNum.Text).ToString()); this.txtQueryNum.Focus(); } }
/// <summary> /// 加载发/退药单据明细 /// </summary> /// <param name="billMaster">单据头表</param> /// <returns></returns> public override DataTable LoadOrder(BillMaster billMaster) { try { YP_DRMaster queryMaster = (YP_DRMaster)billMaster; YP_Dal ypDal = new YP_Dal(); ypDal._oleDb = oleDb; string strWhere = "A.MASTERDRUGOCID" + oleDb.EuqalTo() + queryMaster.MasterDrugOCID; return(ypDal.YF_DispenseOrder_GetList(strWhere)); } catch (Exception error) { throw error; } }
/// <summary> /// 按发票号获取发药人姓名 /// </summary> /// <param name="invoiceNum">发票号</param> /// <param name="deptId">部门ID</param> /// <returns></returns> public string GetDispenserName(string invoiceNum, int deptId) { try { string strWhere = BLL.Tables.yf_drmaster.INVOICENUM + oleDb.EuqalTo() + invoiceNum + oleDb.And() + BLL.Tables.yf_drmaster.DEPTID + oleDb.EuqalTo() + deptId.ToString(); YP_DRMaster master = HIS.SYSTEM.Core.BindEntity <YP_DRMaster> .CreateInstanceDAL(oleDb, BLL.Tables.YF_DRMASTER).GetModel(strWhere); return(HIS.SYSTEM.BussinessLogicLayer.Classes.BaseData.GetUserName((int)master.OPPeopleID)); } catch (Exception error) { throw error; } }
private void btnRefund_Click(object sender, EventArgs e) { try { if (ConfigManager.IsChecking(_currentDeptId)) { MessageBox.Show("药品正在盘点中......"); return; } if (MessageBox.Show("您确定要退以下药品么?", "退药确认", MessageBoxButtons.OKCancel) == DialogResult.Cancel) { return; } if (_dispOrder == null || _dispOrder.Rows.Count < 1) { MessageBox.Show("没有药品可退", "警告", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning); return; } this.Cursor = GWMHIS.BussinessLogicLayer.Classes.PublicStaticFun.WaitCursor(); ZY_DispPresInfo presInfo = new ZY_DispPresInfo(); presInfo.CureDocCode = _currentZYPat.CureDocCode; presInfo.CureNo = _currentZYPat.CureNo; presInfo.drFlag = 0; presInfo.opType = ConfigManager.OP_YF_REFUND; presInfo.PatListId = _currentZYPat.PatListID; presInfo.PatName = _currentZYPat.PatientInfo.PatName; presInfo.presDeptId = Convert.ToInt32(_currentZYPat.CurrDeptCode); presInfo.recipeNum = 1; YP_DRMaster refMaster = _billProcessor.BuildNewDispenseMaster(presInfo, (int)_currentDeptId, (int)_currentUserId); List <BillOrder> refList = _billProcessor.BuildNewDispOrder(_dispOrder, refMaster, 1); _billProcessor.SaveBill(refMaster, refList, _currentDeptId); MessageBox.Show("退药成功,请及时告知记账护士进行冲账"); this.txtQueryNum.Focus(); } catch (Exception error) { MessageBox.Show(error.Message); } finally { _dispOrder = IN_InterFace.QueryRefRecipeOrder(_currentZYPat, (int)_currentDeptId, cobBeginDate.Value, cobEndDate.Value); dgrdDispOrder.DataSource = _dispOrder; this.Cursor = DefaultCursor; } }
/// <summary> /// 住院单人发药 /// </summary> /// <param name="listOrder">发药单明细列表</param> /// <param name="dispMaster">发药单表头</param> /// <param name="uniformId">统领ID</param> private void SingleDisp(List <BillOrder> listOrder, YP_DRMaster dispMaster, int uniformId) { BindEntity <HIS.Model.YP_DRMaster> .CreateInstanceDAL(oleDb, Tables.YF_DRMASTER).Add(dispMaster); //将生成的发药单据表头标识ID赋给所有发药明细 foreach (BillOrder baseOrder in listOrder) { YP_DROrder order = (YP_DROrder)baseOrder; order.MasterDrugOCID = dispMaster.MasterDrugOCID; ZY_BLL.YP_Interface.UpdateSendDrugFlag(order.OrderRecipeID); order.UniformID = uniformId; BindEntity <HIS.Model.YP_DROrder> .CreateInstanceDAL(oleDb, Tables.YF_DRORDER).Add(order); } Hashtable storeTable = StoreFactory.GetProcessor(dispMaster.OpType).ChangeStoreNum(dispMaster, listOrder); AccountFactory.GetWriter(dispMaster.OpType).WriteAccount(dispMaster, listOrder, storeTable); }
/// <summary> /// 按处方明细构造发药单明细 /// </summary> /// <param name="recipeOrder">处方明细</param> /// <param name="dispMaster">发药单表头</param> /// <param name="dispenseModel">发药方式(发药还是退药)</param> /// <returns>发药单明细</returns> public override List <BillOrder> BuildNewDispOrder(DataTable recipeOrder, YP_DRMaster dispMaster, int dispenseModel) { if (recipeOrder == null) { return(null); } if (recipeOrder.Rows.Count <= 0) { return(null); } List <BillOrder> rtnList = new List <BillOrder>(); for (int index = 0; index < recipeOrder.Rows.Count; index++) { YP_DROrder dispOrder = new YP_DROrder(); DataRow dRow = recipeOrder.Rows[index]; dispOrder.ChemName = dRow["CHEMNAME"].ToString(); //药品化学名称 dispOrder.DeptID = dispMaster.DeptID; //发药部门ID dispOrder.DoseNum = 0; //剂数默认为0 dispOrder.DrugOC_Flag = 1; //1表发药,0表退药 dispOrder.DrugOCNum = Convert.ToDecimal(dRow["AMOUNT"]); dispOrder.InpatientID = dispMaster.InpatientID; dispOrder.InvoiceNum = dispMaster.InvoiceNum; //发票号默认为0 dispOrder.LeastUnit = Convert.ToInt32(dRow["UNIT"]); //发药单位ID dispOrder.MakerDicID = Convert.ToInt32(dRow["ITEMID"]); //厂家典标识ID dispOrder.MasterDrugOCID = dispMaster.MasterDrugOCID; //对应表头ID dispOrder.OrderRecipeID = Convert.ToInt32(dRow["PRESORDERID"]); //处方明细ID dispOrder.Refundment_Flag = 0; //1表已退费,0表未退费 decimal hjRetailFee = Convert.ToDecimal(dRow["TOLAL_FEE"]); //零售金额 decimal recipeNum = Convert.ToDecimal(dRow["PRESAMOUNT"]); dispOrder.RetailPrice = Convert.ToDecimal(dRow["SELL_PRICE"]); //零售价 dispOrder.SpecDicID = Convert.ToInt32(dRow["SPECDICID"]); //药品规格标识ID dispOrder.TradePrice = Convert.ToDecimal(dRow["BUY_PRICE"]); //批发价 //批发金额 dispOrder.TradeFee = dispOrder.TradePrice * Convert.ToDecimal(dRow["AMOUNT"]) / Convert.ToDecimal(dRow["RELATIONNUM"]); dispOrder.Uniform_Flag = 0;//1表示住院,0表示门诊,2表住院统领 dispOrder.UnitNum = Convert.ToInt32(dRow["RELATIONNUM"]); dispOrder.Curedeptid = Convert.ToInt32(dRow["PRESDEPTCODE"]); dispOrder.RetailFee = AccountWriter.YF_ComputeTotalFee(dispOrder.RetailPrice, dispOrder.DrugOCNum, dispOrder.UnitNum); rtnList.Add(dispOrder); } return(rtnList); }
/// <summary> /// 创建住院发药单明细列表 /// </summary> /// <param name="recipeOrder">护士站记账信息表</param> /// <param name="dispMaster">住院发药单表头</param> /// <param name="dispenseModel">发药模式</param> /// <returns>住院发药单明细列表</returns> public override List <BillOrder> BuildNewDispOrder(DataTable recipeOrder, YP_DRMaster dispMaster, int dispenseModel) { List <BillOrder> rtnList = new List <BillOrder>(); bool dr_Flag = (dispMaster.OpType == ConfigManager.OP_YF_DISPENSE ? true : false); for (int index = 0; index < recipeOrder.Rows.Count; index++) { DataRow dRow = recipeOrder.Rows[index]; YP_DROrder dispOrder = new YP_DROrder(); dispOrder.ChemName = dRow["CHEMNAME"].ToString(); //药品化学名称 dispOrder.DeptID = dispMaster.DeptID; //发药部门ID if (dr_Flag) { dispOrder.DrugOC_Flag = 1; dispOrder.DrugOCNum = Convert.ToDecimal(dRow["DRUGNUM"]); } else { dispOrder.DrugOC_Flag = 0; dispOrder.DrugOCNum = -Convert.ToDecimal(dRow["DRUGNUM"]); } dispOrder.InpatientID = dispMaster.InpatientID; dispOrder.InvoiceNum = 0; //发票号默认为0 dispOrder.LeastUnit = Convert.ToInt32(dRow["UNIT"]); //发药单位ID dispOrder.MakerDicID = Convert.ToInt32(dRow["MAKERDICID"]); //厂家典标识ID dispOrder.MasterDrugOCID = dispMaster.MasterDrugOCID; //对应表头ID dispOrder.OrderRecipeID = Convert.ToInt32(dRow["ORDERRECIPEID"]); //处方明细ID dispOrder.Refundment_Flag = 0; //1表已退费,0表未退费 decimal hjRetailFee = Convert.ToDecimal(dRow["RETAILFEE"]); //零售金额 dispOrder.RetailPrice = Convert.ToDecimal(dRow["RETAILPRICE"]); //零售价 dispOrder.SpecDicID = Convert.ToInt32(dRow["SPECDICID"]); //药品规格标识ID dispOrder.TradePrice = Convert.ToDecimal(dRow["TRADEPRICE"]); //批发价 //批发金额 dispOrder.TradeFee = (dispOrder.TradePrice / Convert.ToDecimal(dRow["UNITNUM"])) * dispOrder.DrugOCNum; dispOrder.Uniform_Flag = dispenseModel; dispOrder.UnitNum = Convert.ToInt32(dRow["UNITNUM"]); dispOrder.Curedeptid = Convert.ToInt32(dRow["CUREDEPT"]); dispOrder.RetailFee = AccountWriter.YF_ComputeTotalFee(dispOrder.RetailPrice, dispOrder.DrugOCNum, dispOrder.UnitNum); dispMaster.RetailFee += dispOrder.RetailFee;//统计表头的零售金额 rtnList.Add(dispOrder); } return(rtnList); }
/// <summary> /// 保存住院发药单(单人发药) /// </summary> /// <param name="billMaster">住院发药单表头</param> /// <param name="listOrder">住院发药单明细列表</param> /// <param name="deptId">药剂科室ID</param> public override void SaveBill(BillMaster billMaster, List <BillOrder> listOrder, long deptId) { try { YP_DRMaster dispMaster = (YP_DRMaster)billMaster; //将发药单据表头写入数据库 if (listOrder.Count > 0) { //开启发药事务 oleDb.BeginTransaction(); SingleDisp(listOrder, dispMaster, 0); oleDb.CommitTransaction(); } } catch (Exception error) { oleDb.RollbackTransaction(); throw error; } }
/// <summary> /// 住院单人发药 /// </summary> /// <param name="listOrder">发药单明细列表</param> /// <param name="dispMaster">发药单表头</param> /// <param name="uniformId">统领ID</param> private void SingleDisp(List <BillOrder> listOrder, YP_DRMaster dispMaster, int uniformId) { dispMaster.RetailFee = Decimal.Round(dispMaster.RetailFee + (decimal)0.00000000001, 2); BindEntity <HIS.Model.YP_DRMaster> .CreateInstanceDAL(oleDb, Tables.YF_DRMASTER).Add(dispMaster); HIS.Interface.IZY_Data zyInterFace = new HIS.Interface.ZY_Data(); //将生成的发药单据表头标识ID赋给所有发药明细 for (int index = 0; index < listOrder.Count; index++) { YP_DROrder order = (YP_DROrder)listOrder[index]; order.MasterDrugOCID = dispMaster.MasterDrugOCID; order.UniformID = uniformId; if (order.DrugOCNum != 0) { BindEntity <HIS.Model.YP_DROrder> .CreateInstanceDAL(oleDb, Tables.YF_DRORDER).Add(order); } else { listOrder.Remove(order); index--;// add zenghao 20100823 } if (order.DrugOC_Flag == 1) { zyInterFace.UpdateSendFlag(order.OrderRecipeID, order.DrugOC_Flag, order.DrugOCNum, order.RetailFee); } else { zyInterFace.UpdateSendFlag(order.OrderRecipeID, 2, -order.DrugOCNum, -order.RetailFee); } } Hashtable storeTable = StoreFactory.GetProcessor(dispMaster.OpType).ChangeStoreNum(dispMaster, listOrder); foreach (YP_StoreNum storeInfo in storeTable.Values) { if (storeInfo.storeNum == -1) { noStoreList.Add(storeInfo); } } AccountFactory.GetWriter(dispMaster.OpType).WriteAccount(dispMaster, listOrder, storeTable); }
public override Hashtable ChangeStoreNum(BillMaster billMaster, List <BillOrder> orderList) { try { Hashtable storeNumHash = new Hashtable(); YP_DRMaster dispMaster = (YP_DRMaster)billMaster; foreach (BillOrder baseOrder in orderList) { YP_StoreNum storeNum = new YP_StoreNum(); YP_DROrder order = (YP_DROrder)baseOrder; storeNum.makerDicId = order.MakerDicID; storeNum.smallUnit = order.LeastUnit; int reduceNum = 0; if (dispMaster.InvoiceNum == 0) //住院不要用数量乘以处方贴数 update by heyan 2010.10.26 修改中草药处方发药时修改 { reduceNum = Convert.ToInt32(order.DrugOCNum * 1); } else//门诊要用数量乘以处方贴数 update by heyan 2010.10.26 { reduceNum = Convert.ToInt32(order.DrugOCNum * dispMaster.RecipeNum); } decimal rtn = ReduceStoreNum(order.MakerDicID, order.DeptID, reduceNum); if (rtn != -1)//增加药品库存判断 2011.5.10 update by heyan { storeNum.storeNum = rtn; storeNum.queryKey = order.OrderRecipeID.ToString(); storeNumHash.Add(order.OrderRecipeID, storeNum); } else { throw new Exception(order.ChemName + "药品库存量不足 编码:" + order.MakerDicID.ToString()); } } return(storeNumHash); } catch (Exception error) { throw error; } }
/// <summary> /// 创建住院发药单明细列表 /// </summary> /// <param name="recipeOrder">记账明细表</param> /// <param name="dispMaster">发药单表头</param> /// <param name="dispenseModel">发药模式</param> /// <returns>住院发药单明细列表</returns> public override List <BillOrder> BuildNewDispOrder(DataTable recipeOrder, YP_DRMaster dispMaster, int dispenseModel) { List <BillOrder> rtnList = new List <BillOrder>(); for (int index = 0; index < recipeOrder.Rows.Count; index++) { YP_DROrder dispOrder = new YP_DROrder(); DataRow dRow = recipeOrder.Rows[index]; //if (dRow["ISDISPENSE"] != DBNull.Value) //{ dispOrder.ChemName = dRow["itemname"].ToString(); //药品化学名称 dispOrder.DeptID = dispMaster.DeptID; //发药部门ID dispOrder.DoseNum = 0; //剂数默认为0 dispOrder.DrugOC_Flag = dispMaster.DrugOC_Flag; // 1;//1表发药,0表退药 dispOrder.DrugOCNum = Convert.ToDecimal(dRow["AMOUNT"]) > 0 ? Convert.ToDecimal(dRow["AMOUNT"]) : Convert.ToDecimal(dRow["AMOUNT"]) * -1; dispOrder.InpatientID = dispMaster.InpatientID; dispOrder.InvoiceNum = 0; //发票号默认为0 dispOrder.LeastUnit = Convert.ToInt32(dRow["UNITID"]); //发药单位ID dispOrder.MakerDicID = Convert.ToInt32(dRow["ITEMID"]); //厂家典标识ID dispOrder.MasterDrugOCID = dispMaster.MasterDrugOCID; //对应表头ID dispOrder.OrderRecipeID = Convert.ToInt32(dRow["PRESORDERID"]); //处方明细ID dispOrder.Refundment_Flag = 0; //1表已退费,0表未退费 decimal hjRetailFee = Convert.ToDecimal(dRow["TOLAL_FEE"]); //零售金额 dispOrder.RetailPrice = Convert.ToDecimal(dRow["SELL_PRICE"]); //零售价 dispOrder.SpecDicID = Convert.ToInt32(dRow["SPECDICID"]); //药品规格标识ID dispOrder.TradePrice = Convert.ToDecimal(dRow["BUY_PRICE"]); //批发价 //批发金额 dispOrder.TradeFee = (dispOrder.TradePrice / Convert.ToDecimal(dRow["RELATIONNUM"])) * dispOrder.DrugOCNum; dispOrder.Uniform_Flag = (dispenseModel == 1?0:1); //1表示住院单人,2表住院统领 dispOrder.UnitNum = Convert.ToInt32(dRow["RELATIONNUM"]); dispOrder.Curedeptid = Convert.ToInt32(dRow["PRESDEPTCODE"]); dispOrder.RetailFee = AccountWriter.YF_ComputeTotalFee(dispOrder.RetailPrice, dispOrder.DrugOCNum, dispOrder.UnitNum); dispMaster.RetailFee += dispOrder.RetailFee; //统计表头的零售金额 rtnList.Add(dispOrder); // } } return(rtnList); }
/// <summary> /// 写入台帐 /// </summary> /// <param name="billMaster">单据头表信息</param> /// <param name="orderList">单据明细信息</param> /// <param name="storeTable">库存处理后的最新药品库存信息</param> public override void WriteAccount(BillMaster billMaster, List <BillOrder> orderList, Hashtable storeTable) { try { int actYear = 0, actMonth = 0; int smallUnit = 0; decimal storeNum = 0; YP_DRMaster master = (YP_DRMaster)billMaster; AccountFactory.GetQuery(ConfigManager.YF_SYSTEM).GetAccountTime(master.OPTime, ref actYear, ref actMonth, master.DeptID); foreach (YP_DROrder order in orderList) { storeNum = ((YP_StoreNum)(storeTable[order.OrderRecipeID])).storeNum; smallUnit = ((YP_StoreNum)(storeTable[order.OrderRecipeID])).smallUnit; YP_Account account = BuildAccount(billMaster, order, storeNum, actYear, actMonth, smallUnit); ComputeFee(account); } } catch (Exception error) { throw error; } }
/// <summary> /// 根据门诊发药单表头创建门诊退药单表头 /// </summary> /// <param name="obj">发药单表头</param> /// <param name="deptId">药剂科室ID</param> /// <param name="dispenserId">退药人ID</param> /// <returns>门诊退药单表头</returns> public override YP_DRMaster BuildNewDispenseMaster(object obj, int deptId, int dispenserId) { YP_DRMaster dispMaster = (YP_DRMaster)obj; YP_DRMaster refMaster = new YP_DRMaster(); refMaster.Charge_Flag = 1; //记账处方标识 refMaster.DeptID = deptId; //发药部门ID refMaster.DocID = dispMaster.DocID; //主治医生ID refMaster.DosageMan = 0; //配药人ID,未启用 refMaster.DrugOC_Flag = 0; //1表发药,0表退药 refMaster.InpatientID = ""; //住院号 refMaster.InvoiceNum = dispMaster.InvoiceNum; //住院发票号默认为0 refMaster.OPPeopleID = dispenserId; //发药人员ID refMaster.OPTime = XcDate.ServerDateTime; //发药时间 refMaster.OpType = ConfigManager.OP_YF_REFUND; //业务类型 refMaster.PatientID = dispMaster.PatientID; //病人ID refMaster.PatientName = dispMaster.PatientName; //病人姓名 refMaster.PatientNo = ""; //病历号,未启用 refMaster.ReceiptCode = dispMaster.ReceiptCode; //结算收据号 refMaster.RecipeID = dispMaster.RecipeID; //处方号,门诊已启用 refMaster.RecipeNum = dispMaster.RecipeNum; //处方贴数 refMaster.RetailFee = 0; //零售金额,初始化为0 return(refMaster); }
private void btnDispense_Click(object sender, EventArgs e) { try { Decimal newDispFee = 0; this.Cursor = GWMHIS.BussinessLogicLayer.Classes.PublicStaticFun.WaitCursor(); if (ConfigManager.IsChecking(_currentDeptId) == true) { MessageBox.Show("药品正在盘点中......"); return; } if (this._recipeOrder == null) { MessageBox.Show("没有药品可发"); return; } if (this._recipeOrder.Rows.Count < 1) { MessageBox.Show("没有药品可发"); return; } for (int index = 0; index < selectPat.Count; index++) { newDispFee += IN_InterFace.QueryPatDispFee(selectPat[index], (int)_currentDeptId); } if (CompareFee(newDispFee) == false) { MessageBox.Show("有病人因费用冲账发药信息需要刷新,请重新刷新"); return; } List <BillMaster> dispList = new List <BillMaster>(); for (int index = 0; index < selectPat.Count; index++) { DataTable dt = (DataTable)_allDispPats[selectPat[index].CureNo]; YP_DRMaster dispMaster = _billProcessor.BuildNewDispenseMaster(selectPat[index], (int)_currentDeptId, (int)_currentUserId, Convert.ToInt32(dt.Rows[0]["presamount"].ToString()), Convert.ToInt32(dt.Rows[0]["group_id"].ToString())); dispList.Add(dispMaster); for (int j = 1; j < dt.Rows.Count; j++) { if (dt.Rows[j]["group_id"].ToString().Trim() != dt.Rows[j - 1]["group_id"].ToString().Trim()) { dispMaster = _billProcessor.BuildNewDispenseMaster(selectPat[index], (int)_currentDeptId, (int)_currentUserId, Convert.ToInt32(dt.Rows[j]["presamount"].ToString()), Convert.ToInt32(dt.Rows[j]["group_id"].ToString())); dispList.Add(dispMaster); } } } YP_DispDeptHis newDispDept = (YP_DispDeptHis)(_billProcessor.SaveBills(dispList, _searchDeptId, _allDispPats)); MessageBox.Show("发药成功,开始打印摆药单...", "发药成功", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); PrintBy(); // PrintDispTL(dispList, newDispDept); dgrdRecipeInfo.DataSource = null; LoadMsgMaster(); } catch (Exception error) { MessageBox.Show(error.Message); } finally { this.Cursor = DefaultCursor; } }
/// <summary> /// 跟据处方明细和发药表头记录对象创建发药明细对象链表 /// </summary> /// <param name="recipeOrder">处方明细数据表</param> /// <param name="dispMaster">发药表头记录对象</param> /// <param name="dispenseModel">发药模式:1住院发药;2门诊发药</param> /// <returns>新创建的发药明细对象链表</returns> abstract public List <BillOrder> BuildNewDispOrder(DataTable recipeOrder, YP_DRMaster dispMaster, int dispenseModel);
private void btnDispense_Click(object sender, EventArgs e) { try { Decimal newDispFee = 0; this.Cursor = GWMHIS.BussinessLogicLayer.Classes.PublicStaticFun.WaitCursor(); if (ConfigManager.IsChecking(_currentDeptId) == true) { MessageBox.Show("药品正在盘点中......"); return; } if (this._recipeOrder == null) { MessageBox.Show("没有药品可发"); return; } if (this._recipeOrder.Rows.Count < 1) { MessageBox.Show("没有药品可发"); return; } if (_dispenseModel == 1) { if (_currentZYPat == null) { MessageBox.Show("没有病人需要发药"); return; } YP_DRMaster dispMaster = _billProcessor.BuildNewDispenseMaster(_currentZYPat, (int)_currentDeptId, (int)_currentUserId); newDispFee = IN_InterFace.QueryPatDispFee(_currentZYPat, (int)_currentDeptId); if (this.CompareFee(newDispFee) == false) { MessageBox.Show("该病人因费用冲账发药信息需要刷新,请重新刷新"); return; } if (_recipeOrder != null) { List <BillOrder> dispList = _billProcessor.BuildNewDispOrder(_recipeOrder, dispMaster, _dispenseModel); _billProcessor.SaveBill(dispMaster, dispList, _currentDeptId); MessageBox.Show("发药成功...", "发药成功", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); _recipeOrder = IN_InterFace.QueryRecipeOrder(_currentZYPat, (int)_currentDeptId); dgrdRecipeInfo.DataSource = _recipeOrder; } } //如果是住院统领 else { ZY_PatList dispPat; for (int index = 0; index < lstPatInfo.CheckedItems.Count; index++) { dispPat = (ZY_PatList)lstPatInfo.CheckedItems[index].Tag; newDispFee += IN_InterFace.QueryPatDispFee(dispPat, (int)_currentDeptId); } if (CompareFee(newDispFee) == false) { MessageBox.Show("有病人因费用冲账发药信息需要刷新,请重新刷新"); return; } List <BillMaster> dispList = new List <BillMaster>(); for (int index = 0; index < lstPatInfo.CheckedItems.Count; index++) { dispPat = (ZY_PatList)lstPatInfo.CheckedItems[index].Tag; YP_DRMaster dispMaster = _billProcessor.BuildNewDispenseMaster(dispPat, (int)_currentDeptId, (int)_currentUserId); dispList.Add(dispMaster); } YP_DispDeptHis newDispDept = (YP_DispDeptHis)(_billProcessor.SaveBills(dispList, _searchDeptId, _allDispPats)); MessageBox.Show("发药成功,开始打印统领发药单据...", "发药成功", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); PrintDispTL(dispList, newDispDept); LoadTLMessage(); } this.txtQueryNum.Focus(); } catch (Exception error) { MessageBox.Show(error.Message); } finally { this.Cursor = DefaultCursor; } }
public override List <BillOrder> BuildNewDispOrder(System.Data.DataTable recipeOrder, YP_DRMaster dispMaster, int dispenseModel) { throw new NotImplementedException(); }