コード例 #1
0
        public void OPDisp(DataTable dtFeeHead, int deptId)
        {
            Action <ClientRequestData> requestAction = ((ClientRequestData request) =>
            {
                request.AddData(dtFeeHead);
                request.AddData(GetUserInfo().EmpId);
                request.AddData(GetUserInfo().EmpName);
                request.AddData(deptId);
            });
            ServiceResponseData retdata = InvokeWcfService("DrugProject.Service", "OpDispController", "OPDisp", requestAction);
            DGBillResult        result  = retdata.GetData <DGBillResult>(0);

            if (result.Result == 0)
            {
                MessageBoxShowSimple("发药成功...");
            }
            else
            {
                string rtnMsg  = result.ErrMsg;
                string message = string.Empty;
                if (result.LstNotEnough == null)
                {
                    MessageBoxShowSimple("发药失败:\r\n" + rtnMsg);
                }
                else
                {
                    foreach (DGNotEnough m in result.LstNotEnough)
                    {
                        message = message + m.DrugInfo + "\r\n";
                    }

                    MessageBoxShowSimple("发药失败,以下药品库存不足:\r\n" + message);
                }
            }
        }
コード例 #2
0
        public ServiceResponseData SystemCheckAccount()
        {
            string opType = requestData.GetData <string>(0);
            int    deptId = requestData.GetData <int>(1);
            int    userId = requestData.GetData <int>(2);

            //科室 是 1药库 或 0药房
            int          deptType = opType == DGConstant.OP_DW_MONTHACCOUNT ? 1 : 0;
            DrugBalance  balance  = GetBalance(opType);
            DGBillResult rtn      = new DGBillResult();

            oleDb.BeginTransaction();
            try
            {
                DgSpResult result = balance.SystemCheckAccount(deptId, LoginUserInfo.WorkId);
                oleDb.CommitTransaction();
                responseData.AddData(result);
                return(responseData);
            }
            catch
            {
                oleDb.RollbackTransaction();
            }

            return(null);
        }
コード例 #3
0
        /// <summary>
        /// 保存数据
        /// </summary>
        /// <param name="product">生产商对象</param>
        /// <param name="workId">机构ID</param>
        /// <returns>返回结果对象</returns>
        public DGBillResult SaveProduct(DG_ProductDic product, int workId)
        {
            DGBillResult result = new DGBillResult();

            List <Tuple <string, string, SqlOperator> > lst = new List <Tuple <string, string, SqlOperator> >();

            lst.Add(Tuple.Create("ProductName", product.ProductName, SqlOperator.Equal));
            lst.Add(Tuple.Create("delflag", "0", SqlOperator.Equal));
            lst.Add(Tuple.Create("WorkId", workId.ToString(), SqlOperator.Equal));
            IEnumerable <DG_ProductDic> objs = NewObject <IDGDao>().GetEntityType <DG_ProductDic>(lst, null);

            var p = objs.FirstOrDefault(i => i.ProductID == product.ProductID);

            if (p != null)
            {
                product.save();
                result.Result = 0;
                return(result);
            }

            if (objs != null && objs.Any())
            {
                result.Result = 1;
                result.ErrMsg = "已经存在同名的生产厂厂家名称";
                return(result);
            }
            else
            {
                result.Result = 0;
                product.save();
                return(result);
            }
        }
コード例 #4
0
        public void SaveDrugDic(string frmName, bool isNew)
        {
            if (frmName == "FrmHisDrugDic")
            {
                frmDrugDic.CurrentData.CreateWorkID = LoginUserInfo.WorkId;
            }

            Action <ClientRequestData> requestAction = ((ClientRequestData request) =>
            {
                request.AddData(frmDrugDic.CurrentData);
            });
            ServiceResponseData retdata = InvokeWcfService("DrugProject.Service", "DrugDicController", "SaveDrugDic", requestAction);
            DGBillResult        result  = retdata.GetData <DGBillResult>(0);

            if (result.Result == 0)
            {
                MessageBoxShowSimple("药品属性 保存成功");
                frmDrugDic.CurrentData.CenteDrugID = EfwControls.Common.Tools.ToInt32(result.ErrMsg);
                frmDrugDic.SaveSuccess(isNew);
                if (!isNew)
                {
                    GetDurgDic(frmName);
                }
            }
            else
            {
                MessageBoxShowSimple("保存失败:" + result.ErrMsg);
            }
        }
コード例 #5
0
        public ServiceResponseData AuditBill()
        {
            string       busiType     = requestData.GetData <string>(0);
            int          billID       = requestData.GetData <int>(1);
            int          auditEmpID   = requestData.GetData <int>(2);
            string       auditEmpName = requestData.GetData <string>(3);
            IDGBill      iProcess     = NewObject <DGBillFactory>().GetBillProcess(busiType);
            DGBillResult rtn          = new DGBillResult();

            try
            {
                oleDb.BeginTransaction();
                rtn = iProcess.AuditBill(billID, auditEmpID, auditEmpName, LoginUserInfo.WorkId);
                if (rtn.Result == 0)
                {
                    oleDb.CommitTransaction();
                }
                else
                {
                    oleDb.RollbackTransaction();
                }

                responseData.AddData(rtn);
            }
            catch (Exception error)
            {
                oleDb.RollbackTransaction();
                rtn.ErrMsg = error.Message;
                rtn.Result = 2;
                responseData.AddData(rtn);
            }

            return(responseData);
        }
コード例 #6
0
        public void AuditDurgDic(string frmName)
        {
            var dic = frmDrugDic.CurrentData;

            dic.Auditor     = LoginUserInfo.EmpId;
            dic.AuditStatus = 1;
            dic.AuditTime   = DateTime.Now;
            Action <ClientRequestData> requestAction = ((ClientRequestData request) =>
            {
                request.AddData(dic);
            });

            ServiceResponseData retdata = InvokeWcfService("DrugProject.Service", "DrugDicController", "SaveDrugDic", requestAction);
            DGBillResult        result  = retdata.GetData <DGBillResult>(0);

            if (result.Result != 0)
            {
                MessageBoxShowError(result.ErrMsg);
            }
            else
            {
                MessageBoxShowSimple("审核成功");
                GetDurgDic(frmName);
            }
        }
コード例 #7
0
        /// <summary>
        /// 保存调价单
        /// </summary>
        /// <typeparam name="THead">调价单表头模板</typeparam>
        /// <typeparam name="TDetail">调价单明细模板</typeparam>
        /// <param name="billHead">调价单表头</param>
        /// <param name="billDetails">调价单明细</param>
        /// <param name="workId">机构ID</param>
        /// <returns>返回结果</returns>
        public DGBillResult SaveBill <THead, TDetail>(THead billHead, List <TDetail> billDetails, int workId)
        {
            DG_AdjHead          adjHead    = billHead as DG_AdjHead;
            List <DG_AdjDetail> adjDetails = billDetails as List <DG_AdjDetail>;
            DGBillResult        result     = new DGBillResult();

            if (!NewObject <DrugDeptMgr>().IsDeptChecked(adjHead.DeptID, workId))
            {
                result.Result = 1;
                result.ErrMsg = "当前科室处于盘点状态或者没有设置科室的盘点状态 不能处理业务操作";
                return(result);
            }

            string serialNO = NewObject <SerialNumberSource>().GetSerialNumber(SnType.药品, adjHead.DeptID, adjHead.BusiType);

            adjHead.BillNO = Convert.ToInt64(serialNO);
            this.BindDb(adjHead);
            int headid = adjHead.save();

            if (headid > 0)
            {
                adjHead.AdjHeadID = headid;
                foreach (DG_AdjDetail currentDetail in adjDetails)
                {
                    WriteAccount(adjHead, currentDetail, null);
                }
            }

            result.Result = 0;
            return(result);
        }
コード例 #8
0
        public void AuditBill(string frmName, int deptId)
        {
            string busiType = string.Empty;

            if (frmName == "FrmCheckAudit")
            {
                busiType = MWConstant.OP_MW_CHECK;
            }

            Action <ClientRequestData> requestAction = ((ClientRequestData request) =>
            {
                request.AddData(busiType);
                request.AddData(deptId);
                request.AddData(GetUserInfo().EmpId);
                request.AddData(GetUserInfo().EmpName);
            });

            ServiceResponseData retdata = InvokeWcfService("DrugProject.Service", "MaterialCheckStoreController", "AuditBill", requestAction);
            DGBillResult        result  = retdata.GetData <DGBillResult>(0);

            if (result.Result == 0)
            {
                MessageBoxShowSimple("单据已经成功审核,请确认库存是否更新...");
            }
            else
            {
                string rtnMsg = result.ErrMsg;
                MessageBoxShowSimple("单据审核失败:" + result.ErrMsg);
            }
        }
コード例 #9
0
        /// <summary>
        /// 审核药库入库单
        /// </summary>
        /// <param name="headID">药库入库单表头</param>
        /// <param name="auditEmpID">审核人ID</param>
        /// <param name="auditEmpName">审核人姓名</param>
        /// <returns>单据处理结果</returns>
        public override DGBillResult AuditBill(int headID, int auditEmpID, string auditEmpName)
        {
            DW_InStoreHead          head       = (DW_InStoreHead)NewObject <DW_InStoreHead>().getmodel(headID);
            List <DW_InStoreDetail> lstDetails = NewObject <DW_InStoreDetail>().getlist <DW_InStoreDetail>("InHeadID=" + headID);

            head.AuditEmpID   = auditEmpID;
            head.AuditEmpName = auditEmpName;
            head.AuditTime    = System.DateTime.Now;
            head.AuditFlag    = 1;
            head.save();
            DGBillResult result = new DGBillResult();

            foreach (DW_InStoreDetail detail in lstDetails)
            {
                StoreParam storeParam = new StoreParam();
                storeParam.Amount       = detail.Amount;
                storeParam.BatchNO      = detail.BatchNo;
                storeParam.DeptID       = head.DeptID;
                storeParam.DrugID       = detail.DrugID;
                storeParam.RetailPrice  = detail.RetailPrice;
                storeParam.StockPrice   = detail.StockPrice;
                storeParam.UnitID       = detail.UnitID;
                storeParam.UnitName     = detail.UnitName;
                storeParam.ValidityTime = detail.ValidityDate;
                storeParam.BussConstant = head.BusiType;
                //storeParam.PackUnit = detail.PackUnit;
                DGStoreResult storeRtn = iStore.AddStore(storeParam);
                if (storeRtn.Result != 0)
                {
                    result.Result = 1;
                    if (storeRtn.Result == 1)
                    {
                        result.LstNotEnough = new List <DGNotEnough>();
                        DGNotEnough notEnough = new DGNotEnough();
                        notEnough.DeptID     = head.DeptID;
                        notEnough.DrugID     = detail.DrugID;
                        notEnough.LackAmount = storeRtn.StoreAmount + detail.Amount;
                        notEnough.DrugInfo   = "药品编号" + detail.DrugID + "药品批次号:" + detail.BatchNo;
                        result.LstNotEnough.Add(notEnough);
                        result.ErrMsg = "【" + notEnough.DrugInfo + "】库存不足";
                    }
                    else
                    {
                        result.ErrMsg = "药品更新库存出错";
                    }

                    return(result);
                }
                else
                {
                    WriteAccount(head, detail, storeRtn);
                }
            }

            result.Result = 0;
            return(result);
        }
コード例 #10
0
        public ServiceResponseData SaveSupply()
        {
            var          product = requestData.GetData <DG_SupportDic>(0);
            var          workId  = requestData.GetData <int>(1);
            DGBillResult flag    = NewObject <DrugSupplyMgr>().SaveSupply(product, workId);

            responseData.AddData(flag);
            return(responseData);
        }
コード例 #11
0
        public ServiceResponseData ExcutePrice()
        {
            List <DG_AdjDetail> details = requestData.GetData <List <DG_AdjDetail> >(0);
            DG_AdjHead          head    = requestData.GetData <DG_AdjHead>(1);
            int          workId         = requestData.GetData <int>(2);
            DGBillResult result         = NewObject <DGAdjPriceBill>().SaveBill(head, details, workId);

            responseData.AddData(result);
            return(responseData);
        }
コード例 #12
0
        public void SaveBill(string frmName)
        {
            Action <ClientRequestData> requestAction = null;
            ServiceResponseData        retdata       = null;

            RefreshHead(frmName);
            currentHead.StockFee  = 0;
            currentHead.RetailFee = 0;
            List <MW_InStoreDetail> lstDetails = new List <MW_InStoreDetail>();

            for (int index = 0; index < currentDetails.Rows.Count; index++)
            {
                MW_InStoreDetail detail  = ConvertExtend.ToObject <MW_InStoreDetail>(currentDetails, index);
                decimal          pAmount = 0;
                if (currentDetails.Rows[index]["pAmount"] != DBNull.Value)
                {
                    pAmount = Convert.ToDecimal(currentDetails.Rows[index]["pAmount"].ToString());
                }

                detail.Amount          = pAmount;
                currentHead.StockFee  += detail.StockFee;
                currentHead.RetailFee += detail.RetailFee;
                lstDetails.Add(detail);
            }

            requestAction = ((ClientRequestData request) =>
            {
                request.AddData(MWConstant.MW_IN_SYSTEM);
                request.AddData(currentHead.BusiType);
                request.AddData(currentHead);
                request.AddData <List <MW_InStoreDetail> >(lstDetails);
                request.AddData <List <int> >(ifrmInstoreDetail.GetDeleteDetails());
            });

            retdata = InvokeWcfService("DrugProject.Service", "MaterialInStoreController", "SaveBill", requestAction);
            DGBillResult result = retdata.GetData <DGBillResult>(0);

            if (result.Result == 0)
            {
                MessageBoxShowSimple("单据已经保存成功,如果没有配置自动审核.请及时审核单据");
                if (billStatus == MWEnum.BillEditStatus.ADD_STATUS)
                {
                    ifrmInstoreDetail.NewBillClear();
                }
                else
                {
                    ifrmInstoreDetail.CloseCurrentWindow();
                }
            }
            else
            {
                string rtnMsg = result.ErrMsg;
                MessageBoxShowSimple("单据保存失败:" + result.ErrMsg);
            }
        }
コード例 #13
0
 /// <summary>
 /// 执行完成函数
 /// </summary>
 /// <param name="result">结果</param>
 public void ExcuteComplete(DGBillResult result)
 {
     if (result.Result == 0)
     {
         MessageBoxEx.Show("执行调价成功");
         btnRefreshDetail_Click(null, null);
         txtAdjCode.Text   = string.Empty;
         txtAdjRemark.Text = string.Empty;
     }
     else
     {
         MessageBoxEx.Show(result.ErrMsg);
     }
 }
コード例 #14
0
        public ServiceResponseData SaveDrugDic()
        {
            DGBillResult result = new DGBillResult();
            var          p      = requestData.GetData <DG_CenterSpecDic>(0);
            List <Tuple <string, string, SqlOperator> > andWhere = new List <Tuple <string, string, SqlOperator> >();

            andWhere.Add(Tuple.Create("ChemName", p.ChemName, SqlOperator.Equal));
            andWhere.Add(Tuple.Create("Spec", p.Spec, SqlOperator.Equal));
            var t = NewObject <IDGDao>().GetDataTable <DG_CenterSpecDic>(andWhere, null);

            if (p.CenteDrugID != 0)
            {
                //修改药品
                if (CheckDrugStore(p))
                {
                    if (t != null && t.Rows.Count > 1)
                    {
                        result.Result = 1;
                        result.ErrMsg = "同名 同规格的药品已经存在";
                        responseData.AddData(result);
                        return(responseData);
                    }
                }
                else
                {
                    result.Result = 1;
                    result.ErrMsg = "已经有库存的药品 不能更改药品关键属性 包装单位,包装数量,最小单位,含量系数,含量单位,是否停用";
                    responseData.AddData(result);
                    return(responseData);
                }
            }
            else
            {
                if (t != null && t.Rows.Count > 0)
                {
                    result.Result = 1;
                    result.ErrMsg = "同名 同规格的药品已经存在";
                    responseData.AddData(result);
                    return(responseData);
                }
            }

            SetWorkId(oleDb.WorkId);
            this.BindDb(p);
            NewObject <DrugSpecDicMgr>().SaveDrugDic(p);
            result.Result = 0;
            result.ErrMsg = p.CenteDrugID.ToString();
            responseData.AddData(result);
            return(responseData);
        }
コード例 #15
0
        public void MonthAccount(string frmName)
        {
            Action <ClientRequestData> requestAction = null;

            if (frmName == "FrmBalance")
            {
                frmBalance    = frmBalanceDW;
                requestAction = ((ClientRequestData request) =>
                {
                    request.AddData(DGConstant.OP_DW_MONTHACCOUNT);
                    request.AddData(selectedDeptID);
                    request.AddData(LoginUserInfo.EmpId);
                });
            }
            else
            {
                frmBalance    = frmBalanceDS;
                requestAction = ((ClientRequestData request) =>
                {
                    request.AddData(DGConstant.OP_DS_MONTHACCOUNT);
                    request.AddData(selectedDeptID);
                    request.AddData(LoginUserInfo.EmpId);
                });
            }

            frmBalance.SetBtnEnable(false);
            frmBalance.SetLabelText("月结操作执行中,请等待");
            try
            {
                ServiceResponseData retdata = InvokeWcfService("DrugProject.Service", "BalanceController", "MonthAccount", requestAction);
                DGBillResult        result  = retdata.GetData <DGBillResult>(0);
                if (result.Result == 0)
                {
                    GetMonthBalaceByDept(frmName);
                    MessageBoxShowSimple("月结操作成功");
                }
                else
                {
                    MessageBoxShowSimple("月结操作失败:" + result.ErrMsg);
                }
            }
            finally
            {
                frmBalance.SetBtnEnable(true);
                frmBalance.SetLabelText(string.Empty);
            }
        }
コード例 #16
0
        public void SaveProduct()
        {
            Action <ClientRequestData> requestAction = ((ClientRequestData request) =>
            {
                request.AddData(frmProduct.CurrentData);
                request.AddData(LoginUserInfo.WorkId);
            });
            ServiceResponseData retdata = InvokeWcfService("DrugProject.Service", "ProductController", "SaveProduct", requestAction);
            DGBillResult        k       = retdata.GetData <DGBillResult>(0);

            if (k.Result == 0)
            {
                GetProduct();
                MessageBoxShowSimple("厂家信息保存成功");
            }
            else
            {
                MessageBoxShowSimple(k.ErrMsg);
            }
        }
コード例 #17
0
        public void SaveSupply(int pageNO, int pageSize)
        {
            Action <ClientRequestData> requestAction = ((ClientRequestData request) =>
            {
                request.AddData(frmSupply.CurrentData);
                request.AddData(LoginUserInfo.WorkId);
            });
            ServiceResponseData retdata = InvokeWcfService("DrugProject.Service", "SupplyController", "SaveSupply", requestAction);
            DGBillResult        result  = retdata.GetData <DGBillResult>(0);

            if (result.Result == 0)
            {
                MessageBoxShowSimple("保存成功");
                GetSupply(pageNO, pageSize);
            }
            else
            {
                MessageBoxShowError(result.ErrMsg);
            }
        }
コード例 #18
0
        public void OPRefund(DataTable dtRefund)
        {
            Action <ClientRequestData> requestAction = ((ClientRequestData request) =>
            {
                request.AddData(dtRefund);
                request.AddData(GetUserInfo().EmpId);
                request.AddData(GetUserInfo().EmpName);
                request.AddData(selectedDeptID);
            });
            ServiceResponseData retdata = InvokeWcfService("DrugProject.Service", "OpDispController", "OPRefund", requestAction);
            DGBillResult        result  = retdata.GetData <DGBillResult>(0);

            if (result.Result == 0)
            {
                MessageBoxShowSimple("退药成功...");
            }
            else
            {
                string rtnMsg = result.ErrMsg;
                MessageBoxShowSimple("退药失败:" + result.ErrMsg);
            }
        }
コード例 #19
0
        public void AuditBill(string frmName, int billID, string busiType)
        {
            Action <ClientRequestData> requestAction = ((ClientRequestData request) =>
            {
                request.AddData(busiType);
                request.AddData(billID);
                request.AddData(GetUserInfo().EmpId);
                request.AddData(GetUserInfo().EmpName);
            });
            ServiceResponseData retdata = InvokeWcfService("DrugProject.Service", "InStoreController", "AuditBill", requestAction);
            DGBillResult        result  = retdata.GetData <DGBillResult>(0);

            if (result.Result == 0)
            {
                MessageBoxShowSimple("单据已经成功审核,请确认库存是否更新...");
                LoadBillHead(frmName);
            }
            else
            {
                string rtnMsg = result.ErrMsg;
                MessageBoxShowSimple("单据审核失败:" + result.ErrMsg);
            }
        }
コード例 #20
0
        public ServiceResponseData AuditBill()
        {
            string       busiType     = requestData.GetData <string>(0);
            int          deptId       = requestData.GetData <int>(1);
            int          auditEmpID   = requestData.GetData <int>(2);
            string       auditEmpName = requestData.GetData <string>(3);
            IDGBill      iProcess     = NewObject <DGBillFactory>().GetBillProcess(busiType);
            DGBillResult rtn          = new DGBillResult();

            try
            {
                rtn = iProcess.AuditBill(deptId, auditEmpID, auditEmpName);
                responseData.AddData(rtn);
            }
            catch (Exception error)
            {
                rtn.ErrMsg = error.Message;
                rtn.Result = 2;
                responseData.AddData(rtn);
                throw error;
            }

            return(responseData);
        }
コード例 #21
0
ファイル: OPDispBill.cs プロジェクト: zanderphh/cloudhospital
        /// <summary>
        /// 门诊处方退药
        /// </summary>
        /// <param name="dispHead">退药单表头</param>
        /// <param name="dispDetail">退药单明细</param>
        /// <param name="dtRefund">退药单明细数据</param>
        /// <returns>返回处理结果</returns>
        public DGBillResult OPRefund(List <DS_OPDispHead> dispHead, List <DS_OPDispDetail> dispDetail, DataTable dtRefund)
        {
            //药品单据处理结果
            DGBillResult result = new DGBillResult();

            if (dispHead.Count > 0)
            {
                //1.判断药房是否处于盘点状态中
                if (NewObject <DrugStoreManagement>().IsCheckStatus(dispHead[0].DeptID, 0))
                {
                    throw new Exception("药房当前正在盘点中,不能退药");
                }

                //2.创建发药单表头,保存数据到发药表头中,发药单是多张,所以要做循环
                foreach (DS_OPDispHead dispHeadModel in dispHead)
                {
                    //生成单据号
                    string serialNO = NewObject <SerialNumberSource>().GetSerialNumber(SnType.药品, dispHeadModel.DeptID, DGConstant.OP_DS_OPREFUND);
                    dispHeadModel.BillNO   = Convert.ToInt64(serialNO);
                    dispHeadModel.DispTime = System.DateTime.Now;//退药时间
                    BindDb(dispHeadModel);
                    dispHeadModel.save();

                    //3.发药明细列表dispDetail通过字段(FeeItemHeadID)过滤出该表头对应的退药明细
                    List <DS_OPDispDetail> dispDetailList = dispDetail.Where(w => w.FeeItemHeadID == dispHeadModel.RecipeID).ToList();

                    //4.循环该张处方明细记录,更新DispHeadID等相关字段,保存数据到发药明细中,同时判断库存量,批次库存量,调用加库存的方法并返回处理结果
                    //退药如果跨批次的话,台账需要记录差额调整记录
                    foreach (DS_OPDispDetail ispDetailModel in dispDetailList)
                    {
                        decimal dispRetailPrice = ispDetailModel.RetailPrice;

                        //5发药明细设置发药头表ID,保存数据在库存处理方法中
                        ispDetailModel.DispHeadID = dispHeadModel.DispHeadID;

                        //6.加库存处理
                        StoreParam storeParam = new StoreParam();
                        storeParam.Amount      = ispDetailModel.DispAmount;
                        storeParam.BatchNO     = ispDetailModel.BatchNO;
                        storeParam.DeptID      = ispDetailModel.DeptID;
                        storeParam.DrugID      = ispDetailModel.DrugID;
                        storeParam.RetailPrice = ispDetailModel.RetailPrice;
                        storeParam.StockPrice  = ispDetailModel.StockPrice;
                        storeParam.UnitID      = ispDetailModel.UnitID;
                        storeParam.UnitName    = ispDetailModel.UnitName;
                        storeParam.UnitAmount  = ispDetailModel.UnitAmount;
                        DGStoreResult storeRtn = NewObject <DSStore>().AddStoreAuto(storeParam, false);
                        if (storeRtn.Result != 0)
                        {
                            result.Result = 1;
                            if (storeRtn.Result == 1)
                            {
                                result.ErrMsg = "药品更新库存出错";
                            }

                            return(result);
                        }
                        else
                        {
                            foreach (DGBatchAllot batchAllot in storeRtn.BatchAllotList)
                            {
                                //保存发药明细数据
                                ispDetailModel.DispDetailID = 0;
                                ispDetailModel.DispAmount   = batchAllot.DispAmount;
                                ispDetailModel.RetailPrice  = batchAllot.RetailPrice;
                                ispDetailModel.StockPrice   = batchAllot.StockPrice;
                                ispDetailModel.RetailFee    = batchAllot.DispRetailFee;
                                ispDetailModel.StockFee     = batchAllot.DispStockFee;
                                ispDetailModel.BatchNO      = batchAllot.BatchNO;

                                BindDb(ispDetailModel);
                                ispDetailModel.save();

                                if (ispDetailModel.RetailPrice != dispRetailPrice)
                                {
                                    //零售价不一致,调整金额差额台账
                                    WriteAccount(dispHeadModel, ispDetailModel, storeParam, batchAllot);//按收费价格算
                                }

                                //写减批次库存台账
                                WriteAccount(dispHeadModel, ispDetailModel, batchAllot, 1, storeParam);
                            }
                        }

                        int feeDetailID = ispDetailModel.FeeDetailID;

                        //更新明细退药标志
                        NewDao <IDSDao>().UpdateFeeRefundStatus(feeDetailID);
                    }
                }
            }

            //退药成功
            result.Result = 0;
            return(result);
        }
コード例 #22
0
ファイル: OPDispBill.cs プロジェクト: zanderphh/cloudhospital
        /// <summary>
        /// 门诊处方发药
        /// </summary>
        /// <param name="dispHead">发药单表头</param>
        /// <param name="dispDetail">发药单明细</param>
        /// <param name="execEmpID">执行人ID</param>
        /// <returns>处理结果</returns>
        public DGBillResult OPDisp(List <DS_OPDispHead> dispHead, List <DS_OPDispDetail> dispDetail, int execEmpID)
        {
            //药品单据处理结果
            DGBillResult result = new DGBillResult();

            if (dispHead.Count > 0)
            {
                //1.判断药房是否处于盘点状态中
                if (NewObject <DrugStoreManagement>().IsCheckStatus(dispHead[0].DeptID, 0))
                {
                    throw new Exception("药房当前正在盘点中,不能发药");
                }

                //2.创建发药单表头,保存数据到发药表头中,发药单是多张,所以要做循环
                foreach (DS_OPDispHead dispHeadModel in dispHead)
                {
                    //生成单据号
                    string serialNO = NewObject <SerialNumberSource>().GetSerialNumber(SnType.药品, dispHeadModel.DeptID, DGConstant.OP_DS_OPDISPENSE);
                    dispHeadModel.BillNO   = Convert.ToInt64(serialNO);
                    dispHeadModel.DispTime = System.DateTime.Now;
                    BindDb(dispHeadModel);
                    dispHeadModel.save();

                    //3.发药明细列表dispDetail通过字段(FeeItemHeadID)过滤出该表头对应的发药明细
                    List <DS_OPDispDetail> dispDetailList = dispDetail.Where(w => w.FeeItemHeadID == dispHeadModel.RecipeID).ToList();

                    //4.循环该张处方明细记录,更新DispHeadID等相关字段,保存数据到发药明细中,同时判断库存量,批次库存量,调用减库存的方法并返回处理结果
                    //发药如果跨批次的化,台账需要记录差额调整记录
                    foreach (DS_OPDispDetail ispDetailModel in dispDetailList)
                    {
                        decimal dispRetailPrice = ispDetailModel.RetailPrice;

                        //5发药明细设置发药头表ID,保存数据在库存处理方法中
                        ispDetailModel.DispHeadID = dispHeadModel.DispHeadID;

                        //6减库存处理
                        StoreParam storeParam = new StoreParam();
                        storeParam.Amount      = ispDetailModel.DispAmount;
                        storeParam.BatchNO     = ispDetailModel.BatchNO;
                        storeParam.DeptID      = ispDetailModel.DeptID;
                        storeParam.DrugID      = ispDetailModel.DrugID;
                        storeParam.RetailPrice = ispDetailModel.RetailPrice;//收费价格
                        storeParam.StockPrice  = ispDetailModel.StockPrice;
                        storeParam.UnitID      = ispDetailModel.UnitID;
                        storeParam.UnitName    = ispDetailModel.UnitName;
                        DGStoreResult storeRtn = NewObject <DSStore>().ReduceStoreAuto(storeParam, true);
                        if (storeRtn.Result != 0)
                        {
                            result.Result = 1;
                            if (storeRtn.Result == 1)
                            {
                                result.LstNotEnough = new List <DGNotEnough>();
                                DGNotEnough notEnough = new DGNotEnough();
                                notEnough.DeptID     = ispDetailModel.DeptID;
                                notEnough.DrugID     = ispDetailModel.DrugID;
                                notEnough.LackAmount = ispDetailModel.DispAmount - storeRtn.StoreAmount;
                                notEnough.DrugInfo   = "药品批次号:" + ispDetailModel.BatchNO.ToString();
                                result.LstNotEnough.Add(notEnough);
                                result.ErrMsg = "【" + notEnough.DrugInfo + "】库存不足";
                            }
                            else
                            {
                                result.ErrMsg = "药品更新库存出错";
                            }

                            return(result);
                        }
                        else
                        {
                            foreach (DGBatchAllot batchAllot in storeRtn.BatchAllotList)
                            {
                                //保存发药明细数据
                                ispDetailModel.DispDetailID = 0;
                                if (batchAllot.DispAmount == 0)
                                {
                                    continue;
                                }

                                ispDetailModel.DispAmount  = batchAllot.DispAmount;
                                ispDetailModel.RetailPrice = batchAllot.RetailPrice;
                                ispDetailModel.StockPrice  = batchAllot.StockPrice;
                                ispDetailModel.RetailFee   = batchAllot.DispRetailFee;
                                ispDetailModel.StockFee    = batchAllot.DispStockFee;
                                ispDetailModel.BatchNO     = batchAllot.BatchNO;
                                BindDb(ispDetailModel);
                                ispDetailModel.save();
                                if (ispDetailModel.RetailPrice != dispRetailPrice)
                                {
                                    //零售价不一致,调整金额差额台账
                                    WriteAccount(dispHeadModel, ispDetailModel, storeParam, batchAllot);//按收费价格算
                                }

                                //写减批次库存台账
                                WriteAccount(dispHeadModel, ispDetailModel, batchAllot, 0, storeParam);
                            }
                        }
                    }

                    //8.在循环发药头表末尾处,更新收费主表发药标志DistributeFlag=1
                    OP_FeeItemHead feeItemHead = (OP_FeeItemHead)NewObject <OP_FeeItemHead>().getmodel(dispHeadModel.RecipeID);
                    feeItemHead.DistributeFlag = 1;//发药标识=1
                    feeItemHead.ExecDate       = System.DateTime.Now;
                    feeItemHead.ExecEmpID      = execEmpID;
                    feeItemHead.save();
                }
            }

            //发药成功
            result.Result = 0;
            return(result);
        }
コード例 #23
0
        public ServiceResponseData OPDisp()
        {
            List <DS_OPDispHead> dispHead  = new List <DS_OPDispHead>();
            DataTable            dtFeeHead = requestData.GetData <DataTable>(0);
            int    sendEmpID   = requestData.GetData <int>(1);
            string sendEmpName = requestData.GetData <string>(2);
            int    deptId      = requestData.GetData <int>(3);
            string feeHeadIds  = "(";

            foreach (DataRow row in dtFeeHead.Rows)
            {
                DS_OPDispHead       modelHead = new DS_OPDispHead();
                DrugStoreManagement model     = NewObject <DrugStoreManagement>();
                if (model.HasRefund(row["InvoiceNO"].ToString()))
                {
                    throw new Exception("本张单据不能发药,存在退费记录,请进行退费操作");
                }

                modelHead.BillNO         = 0;
                modelHead.BusiType       = DGConstant.OP_DS_OPDISPENSE;
                modelHead.RetailFee      = Convert.ToDecimal(row["TotalFee"]);
                modelHead.PatListID      = Convert.ToInt32(row["PatListID"]);
                modelHead.PatName        = row["PatName"].ToString();
                modelHead.PatSex         = row["PatSex"].ToString();
                modelHead.Diagnose       = row["DiseaseName"].ToString();
                modelHead.PatAge         = row["Age"].ToString();
                modelHead.PresDocID      = Convert.ToInt32(row["PresEmpID"]);
                modelHead.PresDocName    = row["PresEmpName"].ToString();
                modelHead.PresDeptID     = Convert.ToInt32(row["PresDeptID"]);
                modelHead.PresDeptName   = row["PresDeptName"].ToString();
                modelHead.DispenserID    = sendEmpID;
                modelHead.DispenserName  = sendEmpName;
                modelHead.PharmacistID   = sendEmpID;
                modelHead.PharmacistName = sendEmpName;
                modelHead.RefundFlag     = 0;//发药0退药1
                modelHead.DispTime       = System.DateTime.Now;
                modelHead.FeeNO          = row["FeeNo"].ToString();
                modelHead.InvoiceNO      = row["InvoiceNO"].ToString();
                modelHead.ChargeTime     = Convert.ToDateTime(row["ChargeDate"]);
                modelHead.ChargeEmpID    = Convert.ToInt32(row["ChargeEmpID"]);
                modelHead.ChargeEmpName  = row["ChargeEmpName"].ToString();
                modelHead.FeeItemHeadID  = Convert.ToInt32(row["CostHeadID"]);
                modelHead.RecipeID       = Convert.ToInt32(row["FeeItemHeadID"]);
                modelHead.RecipeType     = row["PresType"].ToString();
                modelHead.RecipeAmount   = Convert.ToInt32(row["PresAmount"]);
                modelHead.DeptID         = deptId;
                dispHead.Add(modelHead);
                feeHeadIds += row["FeeItemHeadID"].ToString() + ",";
            }

            feeHeadIds = feeHeadIds.Substring(0, feeHeadIds.Length - 1) + ")";

            //获取该结算单所有明细记录
            List <DS_OPDispDetail> dispDetail = ConvertFeeDetailModel(feeHeadIds, deptId);
            OPDispBill             iProcess   = NewObject <OPDispBill>();
            DGBillResult           rtn        = new DGBillResult();

            try
            {
                oleDb.BeginTransaction();
                rtn = iProcess.OPDisp(dispHead, dispDetail, sendEmpID);
                if (rtn.Result == 0)
                {
                    oleDb.CommitTransaction();
                }
                else
                {
                    oleDb.RollbackTransaction();
                }

                responseData.AddData(rtn);
            }
            catch (Exception error)
            {
                oleDb.RollbackTransaction();
                rtn.ErrMsg = error.Message;
                rtn.Result = 2;
                responseData.AddData(rtn);
            }

            return(responseData);
        }
コード例 #24
0
        public ServiceResponseData SaveBill()
        {
            string       belongSys = requestData.GetData <string>(0);
            string       busiType  = requestData.GetData <string>(1);
            IDGBill      iProcess  = NewObject <DGBillFactory>().GetBillProcess(busiType);
            DGBillResult result    = new DGBillResult();

            if (belongSys == DGConstant.OP_DW_SYSTEM)
            {
                DW_InStoreHead          head    = requestData.GetData <DW_InStoreHead>(2);
                List <DW_InStoreDetail> details = requestData.GetData <List <DW_InStoreDetail> >(3);
                List <int> deleteDetails        = requestData.GetData <List <int> >(4);
                oleDb.BeginTransaction();
                try
                {
                    foreach (int detailID in deleteDetails)
                    {
                        NewObject <DW_InStoreDetail>().delete(detailID);
                    }

                    iProcess.SaveBill(head, details);
                    Basic_SystemConfig config = NewObject <IDGDao>().GetDeptParameters(head.DeptID, "AutoAuditInstore");
                    if (config != null)
                    {
                        //是否配置需要审核
                        if (config.Value == "1")
                        {
                            result = iProcess.AuditBill(head.InHeadID, LoginUserInfo.EmpId, LoginUserInfo.EmpName, LoginUserInfo.WorkId);
                        }
                    }

                    if (result.Result == 0)
                    {
                        oleDb.CommitTransaction();
                    }
                    else
                    {
                        oleDb.RollbackTransaction();
                    }

                    responseData.AddData(result);
                }
                catch (Exception error)
                {
                    oleDb.RollbackTransaction();
                    result.Result = 1;
                    result.ErrMsg = error.Message;
                    responseData.AddData(result);
                }
            }
            else
            {
                DS_InstoreHead          head    = requestData.GetData <DS_InstoreHead>(2);
                List <DS_InStoreDetail> details = requestData.GetData <List <DS_InStoreDetail> >(3);
                List <int> deleteDetails        = requestData.GetData <List <int> >(4);
                oleDb.BeginTransaction();
                try
                {
                    foreach (int detailID in deleteDetails)
                    {
                        NewObject <DS_InStoreDetail>().delete(detailID);
                    }

                    iProcess.SaveBill(head, details);
                    Basic_SystemConfig config = NewObject <IDGDao>().GetDeptParameters(head.DeptID, "AutoAuditInstore");
                    if (config != null)
                    {
                        //是否直接审核
                        if (config.Value == "1")
                        {
                            result = iProcess.AuditBill(head.InHeadID, LoginUserInfo.EmpId, LoginUserInfo.EmpName, LoginUserInfo.WorkId);
                        }
                    }

                    if (result.Result == 0)
                    {
                        oleDb.CommitTransaction();
                    }
                    else
                    {
                        oleDb.RollbackTransaction();
                    }

                    responseData.AddData(result);
                }
                catch (Exception error)
                {
                    oleDb.RollbackTransaction();
                    result.Result = 1;
                    result.ErrMsg = error.Message;
                    responseData.AddData(result);
                }
            }

            return(responseData);
        }
コード例 #25
0
        /// <summary>
        /// 审核单据
        /// </summary>
        /// <param name="deptId">科室Id</param>
        /// <param name="auditEmpID">审核人ID</param>
        /// <param name="auditEmpName">审核人姓名</param>
        /// <returns>处理结果</returns>
        public override DGBillResult AuditBill(int deptId, int auditEmpID, string auditEmpName)
        {
            string serialNO = string.Empty;//审核单据号

            //1.检查库房状态是否处于盘点状态
            int checkStatus = NewDao <SqlDSDao>().GetStoreRoomStatus(deptId);

            if (checkStatus == 0)
            {
                throw new Exception("药房系统没有进入盘点状态,请启用盘点状态");
            }

            //2.提取所有未审核的单据返回DataTable;
            Dictionary <string, string> queryCondition = new Dictionary <string, string>();

            queryCondition.Add("a.DeptID", deptId.ToString());
            DataTable dtNotAuditDetail = LoadAllNotAuditDetail(queryCondition, true);

            //3.创建盘点审核单据头
            DS_AuditHead auditHead = NewObject <DS_AuditHead>();
            decimal      profitRetailFee = 0, profitStockFee = 0, lossRetailFee = 0, lossStockFee = 0;
            decimal      checkStockFee = 0, actStockFee = 0, checkRetailFee = 0, actRetailFee = 0;

            checkStockFee             = Convert.ToDecimal(dtNotAuditDetail.Compute("sum(FactStockFee)", "true"));        //盘存进货金额
            actStockFee               = Convert.ToDecimal(dtNotAuditDetail.Compute("sum(ActStockFee)", "true"));         //账存进货金额
            checkRetailFee            = Convert.ToDecimal(dtNotAuditDetail.Compute("sum(FactRetailFee)", "true"));       //盘存零售金额
            actRetailFee              = Convert.ToDecimal(dtNotAuditDetail.Compute("sum(ActRetailFee)", "true"));        //账存零售金额
            profitRetailFee           = checkRetailFee - actRetailFee > 0 ? checkRetailFee - actRetailFee : 0;           //盘盈零售金额
            profitStockFee            = checkStockFee - actStockFee > 0 ? checkStockFee - actStockFee : 0;               //盘盈进货金额
            lossRetailFee             = checkRetailFee - actRetailFee < 0 ? Math.Abs(checkRetailFee - actRetailFee) : 0; //盘亏零售金额
            lossStockFee              = checkStockFee - actStockFee < 0 ? Math.Abs(checkStockFee - actStockFee) : 0;     //盘亏进货金额
            serialNO                  = NewObject <SerialNumberSource>().GetSerialNumber(SnType.药品, deptId, DGConstant.OP_DS_AUDITCHECK);
            auditHead.BillNO          = Convert.ToInt64(serialNO);
            auditHead.EmpID           = auditEmpID;
            auditHead.EmpName         = auditEmpName;
            auditHead.AuditTime       = System.DateTime.Now;
            auditHead.Remark          = string.Empty;
            auditHead.DelFlag         = 0;
            auditHead.AuditFlag       = 1;
            auditHead.BusiType        = DGConstant.OP_DS_AUDITCHECK;
            auditHead.DeptID          = deptId;
            auditHead.ProfitRetailFee = profitRetailFee;
            auditHead.ProfitStockFee  = profitStockFee;
            auditHead.LossRetailFee   = lossRetailFee;
            auditHead.LossStockFee    = lossStockFee;
            auditHead.CheckStockFee   = checkStockFee;
            auditHead.ActStockFee     = actStockFee;
            auditHead.CheckRetailFee  = checkRetailFee;
            auditHead.ActRetailFee    = actRetailFee;
            BindDb(auditHead);
            auditHead.save();

            //循环DataTable,根据DataTable的每一行的值去构建盘点审核单明细和盘点审核单头;
            //4.保存盘点审核单表头和明细
            //5、按盘点审核单内容更新药库库存
            DGBillResult result = new DGBillResult();

            foreach (DataRow drNotAuditRow in dtNotAuditDetail.Rows)
            {
                StoreParam storeParam = new StoreParam();
                storeParam.DeptID      = auditHead.DeptID;
                storeParam.DrugID      = Convert.ToInt32(drNotAuditRow["DrugID"]);
                storeParam.RetailPrice = Convert.ToDecimal(drNotAuditRow["RetailPrice"]);
                storeParam.StockPrice  = Convert.ToDecimal(drNotAuditRow["StockPrice"]);
                storeParam.FactAmount  = Convert.ToDecimal(drNotAuditRow["FactAmount"]);
                storeParam.ActAmount   = Convert.ToDecimal(drNotAuditRow["ActAmount"]);
                DGStoreResult storeRtn = NewObject <DSStore>().AddStoreAuto(storeParam, true);
                if (storeRtn.Result != 0)
                {
                    result.Result = 1;
                    if (storeRtn.Result == 1)
                    {
                        result.LstNotEnough = new List <DGNotEnough>();
                        DGNotEnough notEnough = new DGNotEnough();
                        notEnough.DeptID   = Convert.ToInt32(drNotAuditRow["DeptID"]);
                        notEnough.DrugID   = Convert.ToInt32(drNotAuditRow["DrugID"]);
                        notEnough.DrugInfo = "药品名称:" + drNotAuditRow["ChemName"].ToString();
                        result.LstNotEnough.Add(notEnough);
                        result.ErrMsg = "【" + notEnough.DrugInfo + "】保存错误";
                    }
                    else
                    {
                        result.ErrMsg = "药品更新库存出错";
                    }

                    return(result);
                }
                else
                {
                    foreach (DGBatchAllot batchAllot in storeRtn.BatchAllotList)
                    {
                        DS_AuditDetail auditdetail = NewObject <DS_AuditDetail>();
                        auditdetail.StorageID = Convert.ToInt32(drNotAuditRow["StorageID"]);
                        auditdetail.CTypeID   = Convert.ToInt32(drNotAuditRow["CTypeID"]);
                        auditdetail.DrugID    = Convert.ToInt32(drNotAuditRow["DrugID"]);
                        auditdetail.Place     = drNotAuditRow["Place"].ToString();
                        auditdetail.DeptID    = auditHead.DeptID;
                        auditdetail.BillNO    = auditHead.BillNO;

                        auditdetail.UnitID      = Convert.ToInt32(drNotAuditRow["UnitID"]);
                        auditdetail.UnitName    = drNotAuditRow["UnitName"].ToString();
                        auditdetail.PackUnit    = drNotAuditRow["PackUnit"].ToString();
                        auditdetail.UnitAmount  = Convert.ToInt32(drNotAuditRow["UnitAmount"].ToString());
                        auditdetail.AuditHeadID = auditHead.AuditHeadID;

                        auditdetail.BatchNO       = batchAllot.BatchNO;
                        auditdetail.ValidityDate  = batchAllot.ValidityDate;
                        auditdetail.RetailPrice   = batchAllot.RetailPrice;
                        auditdetail.StockPrice    = batchAllot.StockPrice;
                        auditdetail.FactAmount    = batchAllot.FactAmount;
                        auditdetail.FactStockFee  = batchAllot.FactStockFee;
                        auditdetail.FactRetailFee = batchAllot.FactRetailFee;
                        auditdetail.ActAmount     = batchAllot.ActAmount;
                        auditdetail.ActStockFee   = batchAllot.ActStockFee;
                        auditdetail.ActRetailFee  = batchAllot.ActRetailFee;
                        BindDb(auditdetail);
                        auditdetail.save();

                        //写台账表
                        WriteAccount(auditHead, auditdetail, batchAllot);
                    }
                }
            }

            //7、更新所有未审核的盘点录入单状态
            DS_CheckHead checkHead = NewObject <DS_CheckHead>();

            checkHead.AuditEmpID   = auditEmpID;
            checkHead.AuditEmpName = auditEmpName;
            checkHead.AuditHeadID  = auditHead.AuditHeadID;
            checkHead.AuditNO      = (int)auditHead.BillNO;
            checkHead.DeptID       = deptId;
            int ret = NewDao <IDSDao>().UpdateCheckHeadStatus(checkHead);

            if (ret > 0)
            {
                //8、设置库房盘点状态为运营状态
                NewDao <IDGDao>().SetCheckStatus(deptId, 0, 0);
                result.Result = 0;
            }
            else
            {
                result.Result = 1;
            }

            return(result);
        }
コード例 #26
0
        public ServiceResponseData MonthAccount()
        {
            string opType = requestData.GetData <string>(0);
            int    deptId = requestData.GetData <int>(1);
            int    userId = requestData.GetData <int>(2);

            //科室 是 1药库 或 0药房
            int          deptType = opType == DGConstant.OP_DW_MONTHACCOUNT ? 1 : 0;
            DrugBalance  balance  = GetBalance(opType);
            DGBillResult rtn      = new DGBillResult();

            if (balance.IsMonthAccount(deptId))
            {
                rtn.Result = 1;
                rtn.ErrMsg = "本月已经月结过,不能再次月结";
                responseData.AddData(rtn);
                return(responseData);
            }

            var depdic = NewObject <DrugDeptMgr>().GetDepdic(deptId, LoginUserInfo.WorkId);

            if (depdic == null)
            {
                rtn.Result = 1;
                rtn.ErrMsg = "本科室不是药剂科室,不能进行相关操作";
                responseData.AddData(rtn);
                return(responseData);
            }

            if (deptType == 1 && depdic.DeptType != 1)
            {
                rtn.Result = 1;
                rtn.ErrMsg = "您所在科室没有单前科室的操作权限";
                responseData.AddData(rtn);
                return(responseData);
            }

            if (deptType == 0 && depdic.DeptType != 0)
            {
                rtn.Result = 1;
                rtn.ErrMsg = "您所在科室没有单前科室的操作权限";
                responseData.AddData(rtn);
                return(responseData);
            }

            if (!NewObject <DrugDeptMgr>().IsDeptChecked(deptId, LoginUserInfo.WorkId))
            {
                rtn.Result = 1;
                rtn.ErrMsg = "当前科室处于盘点状态或者没有设置科室的盘点状态 不能处理业务操作";
                responseData.AddData(rtn);
                return(responseData);
            }

            try
            {
                NewDao <IDGDao>().SetCheckStatus(deptId, 1, deptType);//设置盘点状态
                oleDb.BeginTransaction();
                rtn = balance.MonthAccount(userId, deptId, LoginUserInfo.WorkId);
                if (rtn.Result == 0)
                {
                    oleDb.CommitTransaction();
                }
                else
                {
                    oleDb.RollbackTransaction();
                }

                responseData.AddData(rtn);
            }
            catch (Exception error)
            {
                oleDb.RollbackTransaction();
                rtn.Result = 2;
                rtn.ErrMsg = error.Message;
                responseData.AddData(rtn);
            }
            finally
            {
                NewDao <IDGDao>().SetCheckStatus(deptId, 0, deptType); //恢复盘点状态
            }

            return(responseData);
        }
コード例 #27
0
        /// <summary>
        /// 审核药库出库单
        /// </summary>
        /// <param name="headID">药库出库单表头ID</param>
        /// <param name="auditEmpID">审核人ID</param>
        /// <param name="auditEmpName">审核人姓名</param>
        /// <returns>单据处理结果</returns>
        public override DGBillResult AuditBill(int headID, int auditEmpID, string auditEmpName)
        {
            DW_OutStoreHead outHead = (DW_OutStoreHead)NewObject <DW_OutStoreHead>().getmodel(headID);

            outHead.AuditEmpID   = auditEmpID;
            outHead.AuditEmpName = auditEmpName;
            outHead.AuditTime    = System.DateTime.Now;
            outHead.AuditFlag    = 1;
            outHead.save();
            List <DW_OutStoreDetail> lstDetails = NewObject <DW_OutStoreDetail>().getlist <DW_OutStoreDetail>("OutHeadID=" + headID);
            DGBillResult             result     = new DGBillResult();

            foreach (var outDeatils in lstDetails)
            {
                StoreParam storeParam = new StoreParam();
                storeParam.Amount       = outDeatils.Amount;
                storeParam.BatchNO      = outDeatils.BatchNO;
                storeParam.DeptID       = outDeatils.DeptID;
                storeParam.DrugID       = outDeatils.DrugID;
                storeParam.RetailPrice  = outDeatils.RetailPrice;
                storeParam.StockPrice   = outDeatils.StockPrice;
                storeParam.UnitID       = outDeatils.UnitID;
                storeParam.UnitName     = outDeatils.UnitName;
                storeParam.ValidityTime = outDeatils.ValidityDate;
                DGStoreResult storeRtn = iStore.ReduceStore(storeParam);
                if (storeRtn.Result != 0)
                {
                    result.Result = 1;
                    if (storeRtn.Result == 1)
                    {
                        result.LstNotEnough = new List <DGNotEnough>();
                        DGNotEnough notEnough = new DGNotEnough();
                        notEnough.DeptID     = outHead.DeptID;
                        notEnough.DrugID     = outDeatils.DrugID;
                        notEnough.LackAmount = outDeatils.Amount - storeRtn.StoreAmount;
                        notEnough.DrugInfo   = "药品批次号:" + outDeatils.BatchNO;
                        result.LstNotEnough.Add(notEnough);
                        result.ErrMsg = "【" + notEnough.DrugInfo + "】库存不足";
                    }
                    else
                    {
                        result.ErrMsg = "药品更新库存出错";
                    }

                    return(result);
                }
                else
                {
                    WriteAccount(outHead, outDeatils, storeRtn);
                }
            }

            if (outHead.BusiType == DGConstant.OP_DW_CIRCULATEOUT || outHead.BusiType == DGConstant.OP_DW_RETURNSTORE)
            {
                //流通出库业务和退库业务
                var                     t         = outHead.BusiType == DGConstant.OP_DW_CIRCULATEOUT ? DGConstant.OP_DS_CIRCULATEIN:DGConstant.OP_DS_RETURNSOTRE;
                DS_InstoreHead          dshead    = NewObject <DGBillConverter>().ConvertInFromDWOutHead(outHead, auditEmpID, auditEmpName, t);
                IDGBill                 iProcess  = NewObject <DGBillFactory>().GetBillProcess(t);
                List <DS_InStoreDetail> dsInStore = NewObject <DGBillConverter>().ConvertInFromDwStoreDetail(headID);
                iProcess.SaveBill(dshead, dsInStore);//药房入库
                Basic_SystemConfig config = NewObject <IDGDao>().GetDeptParameters(dshead.DeptID, "AutoAuditInstore");
                if (config != null)
                {
                    //药房是否需要审核
                    if (config.Value == "1")
                    {
                        result = iProcess.AuditBill(dshead.InHeadID, auditEmpID, auditEmpName);
                    }
                }
            }

            return(result);
        }
コード例 #28
0
        /// <summary>
        /// 审核药库单据
        /// </summary>
        /// <param name="headID">药库入库单表头ID</param>
        /// <param name="auditEmpID">审核人ID</param>
        /// <param name="auditEmpName">审核人姓名</param>
        /// <param name="workId">机构ID</param>
        /// <returns>单据处理结果</returns>
        public override DGBillResult AuditBill(int headID, int auditEmpID, string auditEmpName, int workId)
        {
            DW_InStoreHead          head       = (DW_InStoreHead)NewObject <DW_InStoreHead>().getmodel(headID);
            List <DW_InStoreDetail> lstDetails = NewObject <DW_InStoreDetail>().getlist <DW_InStoreDetail>("InHeadID=" + headID);

            head.AuditEmpID   = auditEmpID;
            head.AuditEmpName = auditEmpName;
            head.AuditTime    = System.DateTime.Now;
            head.AuditFlag    = 1;
            head.save();
            DGBillResult result = new DGBillResult();

            if (!NewObject <DrugDeptMgr>().IsDeptChecked(head.DeptID, workId))
            {
                result.Result = 1;
                result.ErrMsg = "当前科室处于盘点状态或者没有设置科室的盘点状态 不能处理业务操作";
                return(result);
            }

            foreach (DW_InStoreDetail detail in lstDetails)
            {
                //获取批次数据
                DW_Batch batch = NewDao <IDWDao>().GetBatchAmount(head.DeptID, detail.DrugID, detail.BatchNo);

                if (batch != null)
                {
                    if (detail.Amount < 0)
                    {
                        if ((batch.RetailPrice.Equals(detail.RetailPrice) == false) ||
                            (batch.StockPrice.Equals(detail.StockPrice) == false))
                        {
                            result.Result = 1;
                            result.ErrMsg = "编码【" + detail.DrugID.ToString() + "的(进货价/零售价)】与【" + batch.BatchNO + "】批次价格不一致(进货价:" + batch.StockPrice.ToString()
                                            + ",零售价:" + batch.RetailPrice.ToString() + "),请核查库存!";

                            return(result);
                        }
                    }
                    else
                    {
                        if ((batch.RetailPrice.Equals(detail.RetailPrice) == false) ||
                            (batch.StockPrice.Equals(detail.StockPrice) == false))
                        {
                            result.Result = 1;
                            result.ErrMsg = "编码【" + detail.DrugID.ToString() + "的(进货价/零售价)】与【" + batch.BatchNO + "】批次价格不一致(进货价:" + batch.StockPrice.ToString()
                                            + ",零售价:" + batch.RetailPrice.ToString() + "),请核查库存!";

                            return(result);
                        }
                    }
                }

                StoreParam storeParam = new StoreParam();
                storeParam.Amount       = detail.Amount;
                storeParam.BatchNO      = detail.BatchNo;
                storeParam.DeptID       = head.DeptID;
                storeParam.DrugID       = detail.DrugID;
                storeParam.RetailPrice  = detail.RetailPrice;
                storeParam.StockPrice   = detail.StockPrice;
                storeParam.UnitID       = detail.UnitID;
                storeParam.UnitName     = detail.UnitName;
                storeParam.ValidityTime = detail.ValidityDate;
                storeParam.BussConstant = head.BusiType;

                //storeParam.PackUnit = detail.PackUnit;
                DGStoreResult storeRtn = iStore.AddStore(storeParam);
                if (storeRtn.Result != 0)
                {
                    result.Result = 1;
                    if (storeRtn.Result == 1)
                    {
                        result.LstNotEnough = new List <DGNotEnough>();
                        DGNotEnough notEnough = new DGNotEnough();
                        notEnough.DeptID     = head.DeptID;
                        notEnough.DrugID     = detail.DrugID;
                        notEnough.LackAmount = storeRtn.StoreAmount + detail.Amount;
                        notEnough.DrugInfo   = "药品编号" + detail.DrugID + " 药品批次号:" + detail.BatchNo;
                        result.LstNotEnough.Add(notEnough);
                        result.ErrMsg = "【" + notEnough.DrugInfo + "】库存不足";
                    }
                    else
                    {
                        result.ErrMsg = "药品更新库存出错";
                    }

                    return(result);
                }
                else
                {
                    WriteAccount(head, detail, storeRtn);
                }
            }

            result.Result = 0;
            return(result);
        }
コード例 #29
0
        public void SaveBill(string frmName)
        {
            Action <ClientRequestData> requestAction = null;
            ServiceResponseData        retdata       = null;

            RefreshHead(frmName);
            if (frmName == "FrmOutStoreDetailDW")
            {
                currentDWHead.StockFee  = 0;
                currentDWHead.RetailFee = 0;
                List <DW_OutStoreDetail> lstDetails = new List <DW_OutStoreDetail>();
                for (int index = 0; index < currentDWDetails.Rows.Count; index++)
                {
                    DW_OutStoreDetail detail = ConvertExtend.ToObject <DW_OutStoreDetail>(currentDWDetails, index);
                    var pAmount = 0;
                    if (currentDWDetails.Rows[index]["pAmount"] != DBNull.Value)
                    {
                        pAmount = Convert.ToInt32(currentDWDetails.Rows[index]["pAmount"].ToString());
                    }

                    detail.Amount            = pAmount;
                    detail.DeptID            = currentDWHead.DeptID;
                    detail.ToDeptID          = currentDWHead.ToDeptID;
                    currentDWHead.StockFee  += detail.StockFee;
                    currentDWHead.RetailFee += detail.RetailFee;
                    lstDetails.Add(detail);
                }

                requestAction = ((ClientRequestData request) =>
                {
                    request.AddData(DGConstant.OP_DW_SYSTEM);
                    request.AddData(currentDWHead.BusiType);
                    request.AddData(currentDWHead);
                    request.AddData <List <DW_OutStoreDetail> >(lstDetails);
                    request.AddData <List <int> >(frmOutstoreDetailDW.GetDeleteDetails());
                });

                if (frmOutstoreDetailDW.IsApplyStatus == true)
                {
                    retdata = InvokeWcfService("DrugProject.Service", "OutStoreController", "SaveBillFromApply", requestAction);
                }
                else
                {
                    retdata = InvokeWcfService("DrugProject.Service", "OutStoreController", "SaveBill", requestAction);
                }

                DGBillResult result = retdata.GetData <DGBillResult>(0);
                if (result.Result == 0)
                {
                    frmOutstoreDetailDW.IsApplyStatus = false;
                    MessageBoxShowSimple("单据已经保存成功,如果没有配置自动审核.请及时审核单据");
                    if (billStatus == DGEnum.BillEditStatus.ADD_STATUS)
                    {
                        frmOutstoreDetailDW.NewBillClear();
                    }
                    else
                    {
                        frmOutstoreDetailDW.CloseCurrentWindow();
                    }
                }
                else
                {
                    MessageBoxShowSimple("单据保存失败:" + result.ErrMsg);
                }
            }
            else
            {
                currentDSHead.StockFee  = 0;
                currentDSHead.RetailFee = 0;
                List <DS_OutStoreDetail> lstDetails = new List <DS_OutStoreDetail>();
                for (int index = 0; index < currentDSDetails.Rows.Count; index++)
                {
                    DS_OutStoreDetail detail = ConvertExtend.ToObject <DS_OutStoreDetail>(currentDSDetails, index);

                    var uAmount = 0;

                    if (currentDSDetails.Rows[index]["uAmount"] != DBNull.Value)
                    {
                        uAmount = Convert.ToInt32(currentDSDetails.Rows[index]["uAmount"].ToString());
                    }

                    var pAmount = 0;
                    if (currentDSDetails.Rows[index]["pAmount"] != DBNull.Value)
                    {
                        pAmount = Convert.ToInt32(currentDSDetails.Rows[index]["pAmount"].ToString());
                    }

                    var packAmount = currentDSDetails.Rows[index]["packAmount"] == DBNull.Value
                        ? 0
                        : Convert.ToInt32(currentDSDetails.Rows[index]["packAmount"]);

                    detail.Amount = uAmount + (pAmount * packAmount);

                    detail.DeptID            = currentDSHead.DeptID;
                    detail.ToDeptID          = currentDSHead.ToDeptID;
                    currentDSHead.StockFee  += detail.StockFee;
                    currentDSHead.RetailFee += detail.RetailFee;
                    lstDetails.Add(detail);
                }

                requestAction = ((ClientRequestData request) =>
                {
                    request.AddData(DGConstant.OP_DS_SYSTEM);
                    request.AddData(currentDSHead.BusiType);
                    request.AddData(currentDSHead);
                    request.AddData <List <DS_OutStoreDetail> >(lstDetails);
                    request.AddData <List <int> >(frmOutstoreDetailDS.GetDeleteDetails());
                });
                retdata = InvokeWcfService("DrugProject.Service", "OutStoreController", "SaveBill", requestAction);

                DGBillResult result = retdata.GetData <DGBillResult>(0);
                if (result.Result == 0)
                {
                    MessageBoxShowSimple("单据已经保存成功,如果没有配置自动审核.请及时审核单据");
                    if (billStatus == DGEnum.BillEditStatus.ADD_STATUS)
                    {
                        frmOutstoreDetailDS.NewBillClear();
                    }
                    else
                    {
                        frmOutstoreDetailDS.CloseCurrentWindow();
                    }
                }
                else
                {
                    MessageBoxShowSimple("单据保存失败:" + result.ErrMsg);
                }
            }
        }
コード例 #30
0
        public ServiceResponseData IPDisp()
        {
            //每次发药产生一个发药表头
            DS_IPDispHead dispHead     = new DS_IPDispHead();
            DataTable     dtDispDetail = requestData.GetData <DataTable>(0);
            int           sendEmpID    = requestData.GetData <int>(1);
            string        sendEmpName  = requestData.GetData <string>(2);
            int           deptId       = requestData.GetData <int>(3);

            dispHead.DispHeadID   = 0;
            dispHead.BillNO       = 0;
            dispHead.RetailFee    = Convert.ToDecimal(dtDispDetail.Compute("sum(SellFee)", "chk=1"));
            dispHead.DispenserID  = sendEmpID;
            dispHead.PharmacistID = sendEmpID;
            dispHead.DispTime     = DateTime.Now;
            dispHead.RefFlag      = 0;
            dispHead.BusiType     = DGConstant.OP_DS_IPDISPENSE;
            dispHead.DeptID       = Convert.ToInt32(dtDispDetail.Rows[0]["PresDeptID"]);//科室
            dispHead.ExecDeptID   = deptId;
            dispHead.BillTypeID   = Convert.ToInt32(dtDispDetail.Rows[0]["BillTypeID"]);

            //检查统领单是否存在,不存在抛出异常
            DataTable dtCheck = DistinctTableInfo(dtDispDetail, new string[] { "chk", "BillHeadID", "BillDetailID", "ChemName", "PatName" });

            foreach (DataRow r in dtCheck.Rows)
            {
                if (r["chk"].ToString() == "1")
                {
                    IP_DrugBillDetail m = (IP_DrugBillDetail)NewObject <IP_DrugBillDetail>().getmodel(r["BillDetailID"].ToString());
                    if (m == null)
                    {
                        throw new Exception("患者【" + r["PatName"].ToString() + "】的药品【" + r["ChemName"].ToString() + "】明细单据不存在,请刷新数据重发");
                    }
                }
            }

            //获取该结算单所有明细记录
            List <DS_IPDispDetail> dispDetail = ConvertFeeDetailModel(dtDispDetail, deptId);
            IPDispBill             iProcess   = NewObject <IPDispBill>();
            DGBillResult           rtn        = new DGBillResult();

            try
            {
                oleDb.BeginTransaction();
                rtn = iProcess.IPDisp(dispHead, dispDetail);
                if (rtn.Result == 0)
                {
                    oleDb.CommitTransaction();
                }
                else
                {
                    oleDb.RollbackTransaction();
                }

                responseData.AddData(rtn);
            }
            catch (Exception error)
            {
                oleDb.RollbackTransaction();
                rtn.ErrMsg = error.Message;
                rtn.Result = 2;
                responseData.AddData(rtn);
            }

            return(responseData);
        }