/// <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);
        }
Beispiel #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);
        }
 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);
        }
Beispiel #6
0
        /// <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);
        }
Beispiel #8
0
        /// <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;
            }
        }
Beispiel #9
0
        /// <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;
            }
        }
Beispiel #11
0
        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);
            }
        }
Beispiel #12
0
 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);
     }
 }
Beispiel #13
0
 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;
     }
 }
Beispiel #14
0
 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();
     }
 }
Beispiel #15
0
 /// <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;
     }
 }
Beispiel #16
0
        /// <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;
     }
 }
Beispiel #18
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);
        }
Beispiel #20
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);
        }
Beispiel #21
0
 /// <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;
     }
 }
Beispiel #22
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);
        }
 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;
     }
 }
Beispiel #24
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);
        }
 /// <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;
     }
 }
Beispiel #26
0
        /// <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);
        }
Beispiel #27
0
        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;
            }
        }
Beispiel #28
0
 /// <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();
 }