Example #1
0
 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;
     }
 }
Example #2
0
        /// <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;
            }
        }
Example #5
0
        /// <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);
        }
Example #7
0
        /// <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);
        }
Example #8
0
        /// <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);
        }
Example #9
0
 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;
     }
 }
Example #10
0
        /// <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);
        }