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="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); }
/// <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="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; } }
/// <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="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); }