/// <summary> /// 按最新价格重新核算出库单明细价格和头表金额 /// </summary> /// <param name="outMaster">出库单表头</param> /// <param name="billOrder">出库单明细列表</param> /// <param name="belongSystem">所属系统(药房系统,药库系统)</param> protected void AuditPrice(YP_OutMaster outMaster, List <YP_OutOrder> billOrder, string belongSystem) { outMaster.RetailFee = 0; outMaster.TradeFee = 0; outMaster.OutFee = 0; foreach (YP_OutOrder order in billOrder) { YP_MakerDic makerDic = BindEntity <YP_MakerDic> .CreateInstanceDAL(oleDb).GetModel(order.MakerDicID); if (makerDic.RetailPrice != order.RetailPrice || makerDic.TradePrice != order.TradePrice) { order.RetailPrice = makerDic.RetailPrice; order.TradePrice = makerDic.TradePrice; if (belongSystem == ConfigManager.YF_SYSTEM) { order.RetailFee = AccountWriter.YF_ComputeTotalFee(order.RetailPrice, order.OutNum, order.UnitNum); order.TradeFee = AccountWriter.YF_ComputeTotalFee(order.TradePrice, order.OutNum, order.UnitNum); } else { order.RetailFee = AccountWriter.YK_ComputeTotalFee(order.RetailPrice, order.OutNum); order.TradeFee = AccountWriter.YK_ComputeTotalFee(order.TradePrice, order.OutNum); } } outMaster.RetailFee += order.RetailFee; outMaster.TradeFee += order.TradeFee; outMaster.OutFee += order.RetailFee; } }
/// <summary> /// 计算余额 /// </summary> /// <param name="account">台帐信息</param> protected override void ComputeFee(YP_Account account) { if (account.OpType == ConfigManager.OP_YF_ADJPRICE) { account.BalanceFee = AccountWriter.YF_ComputeTotalFee(account.RetailPrice, account.OverNum, account.UnitNum); } else { account.BalanceFee = AccountWriter.YK_ComputeTotalFee(account.RetailPrice, account.OverNum); } }
/// <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="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="account">台帐信息</param> protected override void ComputeFee(YP_Account account) { account.BalanceFee = AccountWriter.YF_ComputeTotalFee(account.RetailPrice, account.OverNum, account.UnitNum); }
/// <summary> /// 计算余额 /// </summary> /// <param name="account">台帐信息</param> protected override void ComputeFee(YP_Account account) { IBaseDAL <YP_Account> accountDao = BindEntity <YP_Account> .CreateInstanceDAL(oleDb, HIS.BLL.Tables.YF_ACCOUNT); //库存金额 decimal storeFee = 0; decimal adjLenderFee = 0; decimal adjDebitFee = 0; //判断退药期间是否有调价发生 YP_MakerDic makerDic = new YP_MakerDic(); IBaseDAL <YP_MakerDic> makerDao = BindEntity <YP_MakerDic> .CreateInstanceDAL(oleDb); makerDic = makerDao.GetModel(account.MakerDicID); //计算库存金额 storeFee = AccountWriter.YF_ComputeTotalFee(makerDic.RetailPrice, account.OverNum, account.UnitNum); //如果在发/退药期间调价 if (makerDic.RetailPrice != account.RetailPrice) { //调赢 if (makerDic.RetailPrice > account.RetailPrice) { //账务调整 adjLenderFee = (Convert.ToDecimal(account.LenderNum) / Convert.ToDecimal(account.UnitNum)) * (makerDic.RetailPrice - account.RetailPrice); account.BalanceFee = storeFee - adjLenderFee; //写发/退药台帐 accountDao.Add(account); //写调整台帐 account.AccountType = 3; account.DebitNum = 0; account.DebitFee = 0; account.LenderNum = 0; account.LenderFee = adjLenderFee; account.BalanceFee = storeFee; accountDao.Add(account); } //调亏 else { //账务调整 adjDebitFee = (Convert.ToDecimal(account.LenderNum) / Convert.ToDecimal(account.UnitNum)) * (account.RetailPrice - makerDic.RetailPrice); account.BalanceFee = storeFee + adjDebitFee; //写发/退药台帐 accountDao.Add(account); //写调整台帐 account.AccountType = 3; account.DebitNum = 0; account.DebitFee = adjDebitFee; account.LenderNum = 0; account.LenderFee = 0; account.BalanceFee = storeFee; accountDao.Add(account); } } else { account.BalanceFee = storeFee; accountDao.Add(account); } }