Esempio n. 1
0
        /// <summary>
        /// 获取一条信息记录
        /// </summary>
        /// <param name="param"></param>
        /// <returns></returns>
        public STK_OutResult GetInfo(STK_OutParam param)
        {
            this.CheckSession();
            STK_OutResult rst = new STK_OutResult();

            #region 判断
            if (param.StkOutGuid == null)
            {
                throw new WarnException("请指定出库单GUID!");
            }
            #endregion
            #region 获取实体

            rst = this.Select <STK_OutResult>(GetWhereClip(param));

            if (rst != null)
            {
                rst.StkOutLineList      = this.SelectList <STK_OutLineResult>(STK_OutLine._.StkOutGuid == rst.StkOutGuid);
                rst.HR_DepartmentResult = this.Select <HR_DepartmentResult>(new List <Field>()
                {
                    HR_Department._.DeptID, HR_Department._.DeptName
                }, HR_Department._.DeptID == rst.OperDeptID);
            }
            #endregion
            return(rst);
        }
Esempio n. 2
0
        /// <summary>
        /// 删除实体
        /// </summary>
        /// <param name="param">删除条件实体</param>
        /// <returns></returns>
        public WCFAddUpdateResult DelInfo(STK_OutParam param)
        {
            this.CheckSession();
            WCFAddUpdateResult ret = new WCFAddUpdateResult();
            int affect             = 0;

            try
            {
                #region 判断
                if (param.StkOutGuid == null)
                {
                    throw new WarnException("请指定要删除的出库单GUID!");
                }
                #endregion
                WhereClip     whereClip = GetWhereClip(param);
                STK_OutResult info      = new STK_OutResult();
                info.IsDeleted = true;
                affect         = this.Update <STK_OutResult>(info, whereClip);
                #region 设置返回值
                ret.Key = affect;
                #endregion
            }
            catch (WarnException exp)
            {
                throw exp;
            }
            catch (System.Exception exp)
            {
                LogInfoBLL.WriteLog(this.SessionInfo, exp);
                throw exp;
            }
            return(ret);
        }
Esempio n. 3
0
 private void InitData()
 {
     //修改
     if (StkOutGuid != null)
     {
         STK_OutResult info = stkOutLogic.GetInfo(new STK_OutParam {
             StkOutGuid = StkOutGuid
         });
         this.ConvertEntityToControl <STK_OutResult>(this.stcpStkOut.Controls, info, null);
         if (info != null)
         {
             txtAmount.Text       = Math.Round(info.Amount.ToDecimal(), 3, MidpointRounding.AwayFromZero).ToStringHasNull();
             txtSCAmount.Text     = Math.Round(info.SCAmount.ToDecimal(), 3, MidpointRounding.AwayFromZero).ToStringHasNull();
             txtTaxAmount.Text    = Math.Round(info.TaxAmount.ToDecimal(), 3, MidpointRounding.AwayFromZero).ToStringHasNull();
             txtExchangeRate.Text = Math.Round(info.ExchangeRate.ToDecimal(), 4, MidpointRounding.AwayFromZero).ToStringHasNull();
             txtOperDeptName.Text = info.HR_DepartmentResult.DeptName;
             if (info.StkOutLineList != null)
             {
                 addOrModifyList = info.StkOutLineList;
             }
         }
     }
     //新增
     else
     {
         txtOutDate.Text            = DateTime.Now.ToStringHasNull();
         cboOperOrgID.SelectedValue = MySession.OrgID;
         txtOperDeptName.Text       = MySession.DeptName;
         txtOperDeptID.Text         = MySession.DeptID.ToStringHasNull();
         txtOperEmpID.Text          = MySession.UserID.ToStringHasNull();
         txtOperEmpName.Text        = MySession.UserName;
     }
     bsStkOutLine.DataSource  = addOrModifyList;
     dgvStkOutLine.DataSource = bsStkOutLine;
 }
Esempio n. 4
0
        public STK_OutResult GetInfo(STK_OutParam param)
        {
            STK_OutResult ret = new STK_OutResult();
            ExeResult     rst = new ExeResult();

            rst = this.Execute("ZNLCRM.BLL.STK.STK_OutBLL", "GetInfo", param);
            ret = rst == null ? new STK_OutResult() : rst.Result as STK_OutResult;
            return(ret);
        }
Esempio n. 5
0
        public WCFAddUpdateResult AddOrUpdate(STK_OutResult param)
        {
            WCFAddUpdateResult ret = new WCFAddUpdateResult();
            ExeResult          rst = new ExeResult();

            rst = this.Execute("ZNLCRM.BLL.STK.STK_OutBLL", "AddOrUpdate", param);
            ret = (rst == null ? new WCFAddUpdateResult() : rst.Result as WCFAddUpdateResult);
            return(ret);
        }
Esempio n. 6
0
        object Form_GetEditEntity()
        {
            STK_OutResult info = new STK_OutResult();

            info.StkOutGuid = StkOutGuid;
            info            = this.ConvertControlToEntity <STK_OutResult>(this.stcpStkOut.Controls, info, null);
            this.SetDataIsChanged <STK_OutResult>(info);

            return(info);
        }
Esempio n. 7
0
        /// <summary>
        /// 获取集合
        /// </summary>
        /// <param name="param"></param>
        /// <returns></returns>
        public List <STK_OutLineResult> GetList(STK_OutLineParam param)
        {
            this.CheckSession();
            List <STK_OutLineResult> ret = new List <STK_OutLineResult>();

            try
            {
                WhereClip whereClip = GetWhereClip(param);
                ret = this.SelectList <STK_OutLineResult>(whereClip, STK_OutLine._.CreatedTime.Asc);
                if (ret != null && ret.Count > 0)
                {
                    Guid?[]    StkOutGuids = ret.Select(a => a.StkOutGuid).Distinct().ToArray();
                    Guid?[]    ItemCodes   = ret.Select(a => a.ItemCode).Distinct().ToArray();
                    STK_OutBLL stkOutBLL   = new STK_OutBLL();
                    stkOutBLL.SessionInfo = this.SessionInfo;
                    List <STK_OutResult> outResultList = stkOutBLL.GetList(new STK_OutParam()
                    {
                        StkOutGuids = StkOutGuids
                    });
                    STK_StockBLL stockBLL = new STK_StockBLL();
                    stockBLL.SessionInfo = this.SessionInfo;
                    List <STK_StockResult> stockResultList = stockBLL.GetList(new STK_StockParam()
                    {
                        ItemCodes = ItemCodes
                    });
                    foreach (STK_OutLineResult outLineResult in ret)
                    {
                        STK_OutResult outResult = outResultList.FirstOrDefault(a => a.StkOutGuid == outLineResult.StkOutGuid);
                        if (outResult != null)
                        {
                            outLineResult.StkOutBillNo = outResult.BillNo;
                            outLineResult.SourceBillNo = outResult.SourceBillNo;
                        }
                        STK_StockResult stockResult = stockResultList.FirstOrDefault(a => a.ItemCode == outLineResult.ItemCode);
                        if (stockResult != null)
                        {
                            outLineResult.BuyerID   = stockResult.BuyerID;
                            outLineResult.BuyerName = stockResult.BuyerName;
                        }
                    }
                }
            }
            catch (WarnException exp)
            {
                throw exp;
            }
            catch (System.Exception exp)
            {
                LogInfoBLL.WriteLog(this.SessionInfo, exp);
                throw exp;
            }
            return(ret);
        }
Esempio n. 8
0
        /// <summary>
        /// 获取出库明细的分页信息
        /// </summary>
        /// <param name="param"></param>
        /// <returns></returns>
        public PageList <STK_OutLineResult> GetPageList(STK_OutLineParam param)
        {
            PageList <STK_OutLineResult> ret = new PageList <STK_OutLineResult>();

            try
            {
                STK_OutParam outParam = new STK_OutParam()
                {
                    SourceBillNo = param.SourceBillNo,
                    BillNo       = param.StkOutBillNo,
                    PageIndex    = 1,
                    PageSize     = 5000,
                    Status       = param.Status
                };
                STK_OutBLL outBLL = new STK_OutBLL();
                outBLL.SessionInfo = this.SessionInfo;
                PageList <STK_OutResult> outList = outBLL.GetPageList(outParam);
                if (outList != null && outList.ResultList.Count > 0)
                {
                    Guid?[] StkOutGuids = outList.ResultList.Select(a => (Guid?)a.StkOutGuid).Distinct().ToArray();
                    param.StkOutGuids = StkOutGuids;

                    ret = this.SelectList <STK_OutLineResult>(param.PageIndex.GetValueOrDefault(1), param.PageSize.GetValueOrDefault(50), new List <Field>()
                    {
                        Field.All
                    }, GetWhereClip(param), STK_OutLine._.CreatedTime.Desc);
                    if (ret != null && ret.ResultList.Count > 0)
                    {
                        foreach (STK_OutLineResult outLineResult in ret.ResultList)
                        {
                            //获取出库单号
                            STK_OutResult outResult = outList.ResultList.FirstOrDefault(a => a.StkOutGuid == outLineResult.StkOutGuid);
                            if (outResult != null)
                            {
                                outLineResult.StkOutBillNo = outResult.BillNo;
                                outLineResult.SourceBillNo = outResult.SourceBillNo;
                            }
                        }
                    }
                }
            }
            catch (WarnException exp)
            {
                throw exp;
            }
            catch (System.Exception exp)
            {
                LogInfoBLL.WriteLog(this.SessionInfo, exp);
                throw exp;
            }
            return(ret);
        }
Esempio n. 9
0
        private void tsbSave_Click(object sender, EventArgs e)
        {
            STK_OutResult info = Form_GetEditEntity() as STK_OutResult;

            if (!this.DataIsChanged)
            {
                this.ShowNoChangedMsg();
                return;
            }
            bool flag = false;

            foreach (STK_OutLineResult rst in addOrModifyList)
            {
                if (string.IsNullOrEmpty(rst.Model) || rst.UnitPrice.ToDecimal() <= 0 || rst.Qty.ToInt32() <= 0)
                {
                    flag = true;
                    break;
                }
            }

            bsStkOutLine.EndEdit();
            tempList.Clear();
            foreach (STK_OutLineResult rst in addOrModifyList)
            {
                if (rst.HasChanged())
                {
                    tempList.Add(rst);
                }
            }
            //tempList.AddRange(addOrModifyList);
            tempList.AddRange(delList);
            info.StkOutLineList = tempList;
            WCFAddUpdateResult result = this.AsyncExecute <WCFAddUpdateResult, STK_OutResult>(info, stkOutLogic.AddOrUpdate, (a) =>
            {
                if (a.KeyGuid.ToGuid() != Guid.Empty)
                {
                    StkOutGuid = a.KeyGuid.ToGuid();

                    if (SaveAttach != null)
                    {
                        SaveAttach("STK_Out", StkOutGuid.ToGuid(), a.BillNo);
                    }
                    InitData();
                    delList.Clear();
                }
            });
        }
Esempio n. 10
0
        /// <summary>
        /// 添加和新增修改
        /// </summary>
        /// <param name="param">新增或修改的实体</param>
        /// <returns></returns>
        public WCFAddUpdateResult AddOrUpdate(STK_OutResult param)
        {
            this.CheckSession();
            WCFAddUpdateResult ret = new WCFAddUpdateResult();

            try
            {
                int affect = 0;
                #region 判断
                if (string.IsNullOrEmpty(param.BillType))
                {
                    throw new WarnException("请指定出库类型!");
                }
                if (string.IsNullOrEmpty(param.Currency))
                {
                    throw new WarnException("请选择币种!");
                }
                if (param.StkOutLineList == null)
                {
                    throw new WarnException("请填写出库明细!");
                }
                string msg = string.Empty;

                foreach (STK_OutLineResult rst in param.StkOutLineList)
                {
                    if (string.IsNullOrEmpty(rst.Model))
                    {
                        msg = "请填写出库明细的型号!";
                        break;
                    }
                    if (rst.Qty <= 0)
                    {
                        msg = "请填写出库明细的数量!";
                    }
                }
                #endregion
                List <STK_OutLineResult> orderLineList = param.StkOutLineList;

                #region 系统默认值
                if (param.StkOutGuid.ToGuid() != Guid.Empty)
                {
                    WhereClip where      = STK_Out._.StkOutGuid == param.StkOutGuid;
                    param.UpdatedEmpID   = this.SessionInfo.UserID;
                    param.UpdatedEmpName = this.SessionInfo.UserName;
                    param.UpdatedTime    = DateTime.Now;
                    affect = this.Update <STK_OutResult>(param, where);
                }
                else
                {
                    param.StkOutGuid = Guid.NewGuid();
                    Sys_CodeRulerBLL codeRulerBll = new Sys_CodeRulerBLL();
                    codeRulerBll.SessionInfo = this.SessionInfo;
                    param.BillNo             = param.BillNo = codeRulerBll.GetBillNo(new Entity.UserModel.Sys.SYS_CredentialCodeRuleParam()
                    {
                        BillDate = DateTime.Today, TableName = "STK_Out"
                    });
                    param.GCompanyID     = this.SessionInfo.CompanyID;
                    param.Status         = "New";
                    param.ApproveStatus  = "待提交";
                    param.IsDeleted      = false;
                    param.CreatedEmpID   = this.SessionInfo.UserID;
                    param.CreatedEmpName = this.SessionInfo.UserName;
                    param.CreatedTime    = DateTime.Now;
                    affect = this.Insert <STK_OutResult>(param);
                    param  = this.Select <STK_OutResult>(new List <Field>()
                    {
                        STK_Out._.All
                    }, STK_Out._.StkOutGuid == param.StkOutGuid);
                }
                foreach (STK_OutLineResult rst in orderLineList)
                {
                    if (rst.StkOutLineGuid.ToGuid() == Guid.Empty)
                    {
                        rst.StkOutLineGuid = Guid.NewGuid();
                        rst.StkOutGuid     = param.StkOutGuid;
                        rst.GCompanyID     = this.SessionInfo.CompanyID;
                        rst.CreatedEmpID   = this.SessionInfo.UserID;
                        rst.CreatedEmpName = this.SessionInfo.UserName;
                        rst.CreatedTime    = DateTime.Now;
                        rst.IsDeleted      = false;
                    }
                    else
                    {
                        rst.UpdatedEmpID   = this.SessionInfo.UserID;
                        rst.UpdatedEmpName = this.SessionInfo.UserName;
                        rst.UpdatedTime    = DateTime.Now;
                    }
                }

                this.BatchInsertOrUpdate <STK_OutLineResult>(orderLineList);
                this.BatchExecute();
                #region 设置返回值

                ret.KeyGuid        = param.StkOutGuid;
                ret.CreatedTime    = param.CreatedTime;
                ret.CreatedEmpID   = param.CreatedEmpID;
                ret.CreatedEmpName = param.CreatedEmpName;
                ret.UpdatedEmpID   = param.UpdatedEmpID;
                ret.UpdatedEmpName = param.UpdatedEmpName;
                ret.UpdatedTime    = param.UpdatedTime;
                #endregion
                #endregion
            }
            catch (WarnException exp)
            {
                throw exp;
            }
            catch (System.Exception exp)
            {
                LogInfoBLL.WriteLog(this.SessionInfo, exp);
                throw exp;
            }
            return(ret);
        }
Esempio n. 11
0
        public bool SubmitStkOutBill(STK_OutParam param)
        {
            this.CheckSession();
            bool submitFlag = true;

            try
            {
                STK_OutResult outResult = this.GetInfo(param);

                if (outResult != null)
                {
                    #region 判断是否可以提交
                    bool isAllowSubmit = true;
                    if (outResult.ApproveStatus == "待审核")
                    {
                        isAllowSubmit = false;
                        throw new WarnException("入库单当前状态为:【已提交,待审核】,禁止重复提交!");
                    }
                    else if (outResult.ApproveStatus == "审核完成")
                    {
                        isAllowSubmit = false;
                        throw new WarnException("入库单当前状态为:【审核完成】,撤单后才可以再次提交!");
                    }

                    #region 提交时判断预留信息使用数量是否大于预留数量,如果大于预留数量是不允许提交的
                    List <STK_OutLineResult> outLineList = outResult.StkOutLineList;
                    Guid?[]             SRGuids          = outLineList.Select(a => a.SRGuid).Distinct().ToArray();
                    STK_StockReserveBLL reserveBLL       = new STK_StockReserveBLL();
                    reserveBLL.SessionInfo = this.SessionInfo;

                    List <STK_StockReserveResult> reserveList = reserveBLL.GetList(new STK_StockReserveParam()
                    {
                        SRGuids = SRGuids
                    });
                    foreach (STK_StockReserveResult reserveResult in reserveList)
                    {
                        reserveResult.UsedQty    = reserveResult.UsedQty.ToInt32();
                        reserveResult.ReserveQty = reserveResult.ReserveQty.ToInt32();
                        int?usedQty = 0;
                        STK_OutLineResult outLineResult = outLineList.FirstOrDefault(a => a.SRGuid == reserveResult.SRGuid);
                        if (outLineResult != null)
                        {
                            usedQty = outLineResult.Qty;
                        }
                        if ((reserveResult.UsedQty + usedQty) > reserveResult.ReserveQty)
                        {
                            isAllowSubmit = false;
                            break;
                        }
                        reserveResult.UsedQty += usedQty;
                    }

                    if (isAllowSubmit)
                    {
                        #region 回写库存预留的出库数量
                        WCFAddUpdateResult ret = reserveBLL.UpdateOrInsertList(reserveList);
                        if (ret.Key <= 0)
                        {
                            submitFlag = false;
                            throw new WarnException("回写出库单明细关联的库存预留明细的出库数量失败,禁止提交出库单!");
                        }
                        #endregion

                        #region 更新出库单的状态
                        outResult.Status        = "Approve";
                        outResult.ApproveStatus = "待审核";
                        this.AddOrUpdate(outResult);
                        #endregion
                    }
                    else
                    {
                        submitFlag = false;
                        throw new WarnException("出库单明细所关联库存预留明细的出库数量+此次出库数量>库存预留数量,禁止提交出库单!");
                    }
                    #endregion
                    #endregion
                }
                else
                {
                    throw  new WarnException("要提交的出库单在系统中不存在!");
                }
            }
            catch (WarnException exp)
            {
                throw exp;
            }
            catch (Exception exp)
            {
                LogInfoBLL.WriteLog(this.SessionInfo, exp);
                throw exp;
            }
            return(submitFlag);
        }
Esempio n. 12
0
        public bool AuditStkOutBill(STK_OutParam param)
        {
            bool auditFlag = true;

            try
            {
                STK_OutResult outResult = this.GetInfo(param);
                if (outResult != null)
                {
                    bool isAllowAudit = true;
                    if (outResult.ApproveStatus == "待提交")
                    {
                        isAllowAudit = false;
                        throw new WarnException("出库单当前状态为:【待提交】,请先提交!");
                    }
                    else if (outResult.ApproveStatus == "审核完成")
                    {
                        isAllowAudit = false;
                        throw new WarnException("出库单当前状态为:【审核完成】,禁止重复审核!");
                    }
                    if (isAllowAudit)
                    {
                        outResult.Status        = "Complete";
                        outResult.ApproveStatus = "审核完成";
                        WCFAddUpdateResult ret = this.AddOrUpdate(outResult);

                        if (ret.KeyGuid.ToGuid() == Guid.Empty)
                        {
                            auditFlag = false;
                        }
                        else
                        {
                            #region 定义相关变量(可重复使用)
                            STK_OutLineBLL outLineBLL = new STK_OutLineBLL();
                            outLineBLL.SessionInfo = this.SessionInfo;
                            STK_InBLL inBLL = new STK_InBLL();
                            inBLL.SessionInfo = this.SessionInfo;
                            STK_InLineBLL inLineBLL = new STK_InLineBLL();
                            inLineBLL.SessionInfo = this.SessionInfo;

                            ORD_PurchaseOrderLineBLL purOrderLineBLL = new ORD_PurchaseOrderLineBLL();
                            purOrderLineBLL.SessionInfo = this.SessionInfo;
                            ORD_PurchaseOrderBLL purOrderBLL = new ORD_PurchaseOrderBLL();
                            purOrderBLL.SessionInfo = this.SessionInfo;
                            ORD_SalesOrderBLL saleOrderBLL = new ORD_SalesOrderBLL();
                            saleOrderBLL.SessionInfo = this.SessionInfo;
                            ORD_SalesOrderLineBLL saleOrderLineBLL = new ORD_SalesOrderLineBLL();
                            saleOrderLineBLL.SessionInfo = this.SessionInfo;
                            ORD_PurchaseReturnBLL purReturnBLL = new ORD_PurchaseReturnBLL();
                            purReturnBLL.SessionInfo = this.SessionInfo;
                            ORD_PurchaseReturnLineBLL purReturnLineBLL = new ORD_PurchaseReturnLineBLL();
                            purReturnLineBLL.SessionInfo = this.SessionInfo;
                            STK_StockSheetBLL stockSheetBLL = new STK_StockSheetBLL();
                            stockSheetBLL.SessionInfo = this.SessionInfo;
                            STK_StockBLL stockBLL = new STK_StockBLL();
                            stockBLL.SessionInfo = this.SessionInfo;
                            STK_InOutLinkBLL inOutLinkBLL = new STK_InOutLinkBLL();
                            inOutLinkBLL.SessionInfo = this.SessionInfo;
                            List <ORD_SalesOrderResult>         saleList          = null;
                            List <ORD_SalesOrderLineResult>     saleLineList      = null;
                            List <ORD_PurchaseOrderLineResult>  purLineList       = null;
                            List <ORD_PurchaseReturnResult>     purReturnList     = null;
                            List <ORD_PurchaseReturnLineResult> purReturnLineList = null;
                            List <STK_InResult>         stkInList         = null;
                            List <STK_InLineResult>     stkInLineList     = null;
                            List <STK_InLineResult>     effStkInLineList  = null;
                            List <STK_OutResult>        stkOutList        = null;
                            List <STK_OutLineResult>    stkOutLineList    = null;
                            List <STK_OutLineResult>    effStkOutLineList = null;
                            List <STK_StockResult>      stockList         = null;
                            List <STK_StockSheetResult> stkStockSheetList = null;

                            Guid?[] ItemCodes        = null;
                            Guid?[] StkInGuids       = null;
                            Guid?[] StkInLineGuids   = null;
                            Guid?[] EffStkInGuids    = null;
                            Guid?[] StkOutGuids      = null;
                            Guid?[] _stkOutLineGuids = null;
                            Guid?[] EffStkOutGuids   = null;
                            Guid?[] POGuids          = null;
                            Guid?[] POLineGuids      = null;
                            Guid?[] SOGuids          = null;
                            Guid?[] SOLineGuids      = null;
                            Guid?[] PRGuids          = null;
                            Guid?[] PRLineGuids      = null;
                            #endregion
                            //获取出库单下的出库明细集合
                            List <STK_OutLineResult> outLineList = outLineBLL.GetList(new STK_OutLineParam()
                            {
                                StkOutGuid = ret.KeyGuid
                            });
                            //获取出库单下的关联明细集合
                            List <STK_InOutLinkResult> inOutLinkList = inOutLinkBLL.GetList(new STK_InOutLinkParam()
                            {
                                StkOutGuid = ret.KeyGuid
                            });
                            if (outLineList != null && outLineList.Count > 0)
                            {
                                #region 减少库存,形成出库流水
                                ItemCodes = outLineList.Select(a => a.ItemCode).Distinct().ToArray();
                                stockList = stockBLL.GetList(new STK_StockParam()
                                {
                                    ItemCodes = ItemCodes
                                });

                                stkStockSheetList = new List <STK_StockSheetResult>();
                                STK_StockSheetResult stkStockSheetResult = null;
                                foreach (STK_OutLineResult outLineResult in outLineList)
                                {
                                    STK_StockResult stockResult = stockList.FirstOrDefault(a => a.ItemCode == outLineResult.ItemCode.ToGuid());
                                    if (stockResult != null)
                                    {
                                        stockResult.InvQty                    -= outLineResult.Qty;
                                        stockResult.BookedQty                 -= outLineResult.Qty;
                                        stkStockSheetResult                    = new STK_StockSheetResult();
                                        stkStockSheetResult.SSType             = 2;
                                        stkStockSheetResult.SourceBillGuid     = outResult.StkOutGuid;
                                        stkStockSheetResult.SourceBillNo       = outResult.BillNo;
                                        stkStockSheetResult.SourceBillLineGuid = outLineResult.StkOutLineGuid;
                                        stkStockSheetResult.ItemCode           = outLineResult.ItemCode;
                                        stkStockSheetResult.Model              = outLineResult.Model;
                                        stkStockSheetResult.Brand              = outLineResult.Brand;
                                        stkStockSheetResult.Batch              = outLineResult.Batch;
                                        stkStockSheetResult.Package            = outLineResult.Package;
                                        stkStockSheetResult.Quality            = outLineResult.Quality;
                                        stkStockSheetResult.MPQ                = outLineResult.MPQ;
                                        stkStockSheetResult.MarkCode           = outLineResult.MarkCode;
                                        stkStockSheetResult.Currency           = outLineResult.Currency;
                                        stkStockSheetResult.FlowQty            = outLineResult.Qty;
                                        stkStockSheetResult.FlowPrice          = outLineResult.UnitPrice;
                                        stkStockSheetResult.FlowAmount         = outLineResult.Amount;
                                        stkStockSheetList.Add(stkStockSheetResult);
                                    }
                                }
                                stockBLL.UpdateOrInsertList(stockList);
                                stockSheetBLL.UpdateOrInsertList(stkStockSheetList);


                                #endregion

                                #region 回写关联的入库单的出库数量和出库状态,入库单关联单据的出库数量和出库状态,出库单关联单据的出库数量和出库状态

                                #region 回写关联入库单的出库数量出库状态

                                //获取出库明细的guid
                                StkInLineGuids = inOutLinkList.Select(a => a.StkInLineGuid).Distinct().ToArray();

                                if (StkInLineGuids != null && StkInLineGuids.Length > 0)
                                {
                                    //获取出库明细所关联的入库明细
                                    stkInLineList = inLineBLL.GetList(new STK_InLineParam()
                                    {
                                        StkInLineGuids = StkInLineGuids
                                    });
                                    if (stkInLineList != null && stkInLineList.Count > 0)
                                    {
                                        //获取出库明细所关联的入库明细对应的出库明细
                                        List <STK_InOutLinkResult> linkList = inOutLinkBLL.GetList(new STK_InOutLinkParam()
                                        {
                                            StkInLineGuids = StkInLineGuids
                                        });
                                        if (linkList != null && linkList.Count > 0)
                                        {
                                            _stkOutLineGuids = linkList.Select(a => a.StkOutLineGuid).Distinct().ToArray();
                                            stkOutLineList   = outLineBLL.GetList(new STK_OutLineParam()
                                            {
                                                StkOutLineGuids = _stkOutLineGuids
                                            });
                                            if (stkOutLineList != null && stkOutLineList.Count > 0)
                                            {
                                                //获取出库明细对应的出库主单guid
                                                StkOutGuids = stkOutLineList.Select(a => a.StkOutGuid).Distinct().ToArray();
                                                if (StkOutGuids != null && StkOutGuids.Length > 0)
                                                {
                                                    //获取出库明细对应的出库主单
                                                    stkOutList = this.GetList(new STK_OutParam()
                                                    {
                                                        StkOutGuids = StkOutGuids, Status = "Complete"
                                                    });
                                                    if (stkOutList != null && stkOutList.Count > 0)
                                                    {
                                                        //获取有效的出库主单guid
                                                        EffStkOutGuids = stkOutList.Select(a => a.StkOutGuid).Distinct().ToArray();
                                                        //获取有效的出库明细集合
                                                        effStkOutLineList = stkOutLineList.Where(a => EffStkOutGuids.Contains(a.StkOutGuid)).ToList();
                                                        foreach (STK_InLineResult stkInLineResult in stkInLineList)
                                                        {
                                                            //汇总出库明细的出库数量
                                                            int?qty = effStkOutLineList.Where(a => a.StkInLineGuid == stkInLineResult.StkInLineGuid).Sum(a => a.Qty.ToInt32());
                                                            //回写入库明细的出库数量
                                                            stkInLineResult.StkOutQty = qty;
                                                        }
                                                    }
                                                }
                                                //更新入库明细的集合
                                                inLineBLL.UpdateOrInsertList(stkInLineList);
                                                //获取入库主单guid
                                                StkInGuids = stkInLineList.Select(a => a.StkInGuid).Distinct().ToArray();
                                                foreach (Guid stkinguid in StkInGuids)
                                                {
                                                    //更新入库单的状态
                                                    inBLL.UpdateStatus(new STK_InParam()
                                                    {
                                                        StkInGuid = stkinguid
                                                    });
                                                    //获取入库单
                                                    STK_InResult stkInResult = inBLL.GetInfo(new STK_InParam()
                                                    {
                                                        StkInGuid = stkinguid
                                                    });
                                                    if (stkInResult.BillType == "PO_IN")
                                                    {
                                                        #region 回写采购单的出库的数量出库状态
                                                        //找到入库明细所关联的采购明细guid和采购明细集合
                                                        POLineGuids = stkInLineList.Where(a => a.StkInGuid == stkinguid).Select(a => a.SourceBillLineGuid).Distinct().ToArray();
                                                        if (POLineGuids != null && POLineGuids.Length > 0)
                                                        {
                                                            purLineList = purOrderLineBLL.GetList(new ORD_PurchaseOrderLineParam()
                                                            {
                                                                POLineGuids = POLineGuids
                                                            });
                                                            if (purLineList != null && purLineList.Count > 0)
                                                            {
                                                                //找到采购单明细关联的入库明细
                                                                List <STK_InLineResult> linkInLineList = inLineBLL.GetList(new STK_InLineParam()
                                                                {
                                                                    SourceBillLineGuids = POLineGuids
                                                                });
                                                                if (linkInLineList != null && linkInLineList.Count > 0)
                                                                {
                                                                    //找到采购明细关联的入库明细的入库主单guid
                                                                    Guid?[] LinkInGuids = linkInLineList.Select(a => a.StkInGuid).Distinct().ToArray();
                                                                    if (LinkInGuids != null && LinkInGuids.Length > 0)
                                                                    {
                                                                        //找到采购单明细关联的入库明细所在的入库主单
                                                                        stkInList = inBLL.GetList(new STK_InParam()
                                                                        {
                                                                            StkInGuids = LinkInGuids, Status = "Complete"
                                                                        });
                                                                        if (stkInList != null && stkInList.Count > 0)
                                                                        {
                                                                            //有效的入库主单guid
                                                                            EffStkInGuids = stkInList.Select(a => a.StkInGuid).Distinct().ToArray();
                                                                            //有效的入库明细集合
                                                                            effStkInLineList = linkInLineList.Where(a => EffStkInGuids.Contains(a.StkInGuid)).ToList();
                                                                            foreach (ORD_PurchaseOrderLineResult purLineResult in purLineList)
                                                                            {
                                                                                //汇总有效的入库明细的出库数量
                                                                                int?qty = effStkInLineList.Where(a => a.SourceBillLineGuid == purLineResult.POLineGuid).Sum(a => a.StkOutQty).ToInt32();
                                                                                //更新采购明细的出库数量
                                                                                purLineResult.StkOutQty = qty;
                                                                            }
                                                                        }
                                                                    }
                                                                }
                                                                //更新采购明细集合
                                                                purOrderLineBLL.UpdateOrInsertList(purLineList);
                                                                POGuids = purLineList.Select(a => a.POGuid).Distinct().ToArray();
                                                                foreach (Guid poguid in POGuids)
                                                                {
                                                                    purOrderBLL.UpdateStatus(new ORD_PurchaseOrderParam()
                                                                    {
                                                                        POGuid = poguid
                                                                    });
                                                                }
                                                            }
                                                        }

                                                        #endregion
                                                    }
                                                    else if (stkInResult.BillType == "SOR_IN")
                                                    {
                                                    }
                                                    else if (stkInResult.BillType == "ZX_IN")
                                                    {
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                                #endregion


                                #region 回写出库单关联的业务单据的出库数量和出库状态
                                if (outResult.BillType == "SO_OUT")
                                {
                                    #region 回写销售单的出库数量和出库状态
                                    //获取出库明细对应的销售明细guid
                                    SOLineGuids = outLineList.Select(a => a.SourceBillLineGuid).Distinct().ToArray();
                                    if (SOLineGuids != null && SOLineGuids.Length > 0)
                                    {
                                        //获取出库明细对应的销售明细
                                        saleLineList = saleOrderLineBLL.GetList(new ORD_SalesOrderLineParam()
                                        {
                                            SOLineGuids = SOLineGuids
                                        });
                                        if (saleLineList != null && saleLineList.Count > 0)
                                        {
                                            //获取出库明细对应的销售明细关联关联的出库明细
                                            stkOutLineList = outLineBLL.GetList(new STK_OutLineParam()
                                            {
                                                SourceBillLineGuids = SOLineGuids
                                            });
                                            if (stkOutLineList != null && stkOutLineList.Count > 0)
                                            {
                                                //获取出库明细对应的出库主单guid
                                                StkOutGuids = stkOutLineList.Select(a => a.StkOutGuid).Distinct().ToArray();
                                                if (StkOutGuids != null && StkOutGuids.Length > 0)
                                                {
                                                    //获取出库明细对应的出库主单
                                                    stkOutList = this.GetList(new STK_OutParam()
                                                    {
                                                        StkOutGuids = StkOutGuids, Status = "Complete"
                                                    });
                                                    if (stkOutList != null && stkOutList.Count > 0)
                                                    {
                                                        //获取有效的出库主单guid
                                                        EffStkOutGuids = stkOutList.Select(a => a.StkOutGuid).Distinct().ToArray();
                                                        //获取有效的出库明细集合
                                                        effStkOutLineList = stkOutLineList.Where(a => EffStkOutGuids.Contains(a.StkOutGuid)).ToList();
                                                        foreach (ORD_SalesOrderLineResult orderLineResult in saleLineList)
                                                        {
                                                            //汇总有效的出库明细的出库数量
                                                            int?qty = effStkOutLineList.Where(a => a.SourceBillLineGuid == orderLineResult.SOLineGuid).Sum(a => a.Qty).ToInt32();
                                                            orderLineResult.StkOutQty = qty;
                                                        }
                                                    }
                                                }
                                            }
                                            saleOrderLineBLL.UpdateOrInsertList(saleLineList);
                                            SOGuids = saleLineList.Select(a => a.SOGuid).Distinct().ToArray();
                                            foreach (Guid soguid in SOGuids)
                                            {
                                                saleOrderBLL.UpdateStatus(new ORD_SalesOrderParam()
                                                {
                                                    SOGuid = soguid
                                                });
                                            }
                                        }
                                    }
                                    #endregion
                                }
                                else if (outResult.BillType == "POR_OUT")
                                {
                                    #region 回写采购退货单的出库数量和出库状态
                                    //获取出库明细对应的退货明细guid
                                    PRLineGuids = outLineList.Select(a => a.SourceBillLineGuid).Distinct().ToArray();
                                    if (PRLineGuids != null && PRLineGuids.Length > 0)
                                    {
                                        //获取出库明细对应的退货明细
                                        purReturnLineList = purReturnLineBLL.GetList(new ORD_PurchaseReturnLineParam()
                                        {
                                            PRLineGuids = PRLineGuids
                                        });
                                        if (purReturnLineList != null && purReturnLineList.Count > 0)
                                        {
                                            //获取出库明细对应的退货明细关联关联的出库明细
                                            stkOutLineList = outLineBLL.GetList(new STK_OutLineParam()
                                            {
                                                SourceBillLineGuids = PRLineGuids
                                            });
                                            if (stkOutLineList != null && stkOutLineList.Count > 0)
                                            {
                                                //获取出库明细对应的出库主单guid
                                                StkOutGuids = stkOutLineList.Select(a => a.StkOutGuid).Distinct().ToArray();
                                                if (StkOutGuids != null && StkOutGuids.Length > 0)
                                                {
                                                    //获取出库明细对应的出库主单
                                                    stkOutList = this.GetList(new STK_OutParam()
                                                    {
                                                        StkOutGuids = StkOutGuids, Status = "Complete"
                                                    });
                                                    if (stkOutList != null && stkOutList.Count > 0)
                                                    {
                                                        //获取有效的出库主单guid
                                                        EffStkOutGuids = stkOutList.Select(a => a.StkOutGuid).Distinct().ToArray();
                                                        //获取有效的出库明细集合
                                                        effStkOutLineList = stkOutLineList.Where(a => EffStkOutGuids.Contains(a.StkOutGuid)).ToList();
                                                        foreach (ORD_PurchaseReturnLineResult purReturnLineResult in purReturnLineList)
                                                        {
                                                            //汇总有效的出库明细的出库数量
                                                            int?qty = effStkOutLineList.Where(a => a.SourceBillLineGuid == purReturnLineResult.PRLineGuid).Sum(a => a.Qty).ToInt32();
                                                            purReturnLineResult.StkOutQty = qty;
                                                        }
                                                    }
                                                }
                                            }
                                            purReturnLineBLL.UpdateOrInsertList(purReturnLineList);
                                            PRGuids = purReturnLineList.Select(a => a.PRGuid).Distinct().ToArray();
                                            foreach (Guid prguid in PRGuids)
                                            {
                                                purReturnBLL.UpdateStatus(new ORD_PurchaseReturnParam()
                                                {
                                                    PRGuid = prguid
                                                });
                                            }
                                        }
                                    }
                                    #endregion
                                }
                                else if (outResult.BillType == "ZX_OUT")
                                {
                                }
                                #endregion
                                #endregion
                            }
                        }
                    }
                }
                else
                {
                    throw new WarnException("要审核的出库单在系统中不存在!");
                }
            }
            catch (WarnException exp)
            {
                throw exp;
            }
            catch (Exception exp)
            {
                LogInfoBLL.WriteLog(this.SessionInfo, exp);
                throw exp;
            }
            return(auditFlag);
        }
Esempio n. 13
0
        private void dgvSalesOrder_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex > -1 && e.ColumnIndex > -1)
            {
                Guid?_SOGuid = dgvSalesOrder["colSOGuid", e.RowIndex].Value.ToGuid();
                if (dgvSalesOrder.Columns[e.ColumnIndex].Name == "colOperOut")
                {
                    ORD_SalesOrderResult orderResult = orderLogic.GetInfo(new ORD_SalesOrderParam()
                    {
                        SOGuid = soguid
                    });
                    if (orderResult != null && orderResult.Status == "Complete" && orderResult.StkOutStatus != "全部出库" && orderResult.StkOutOccStatus != "全部占有")//没有全部出库的销售单才能创建出库单
                    {
                        List <ORD_SalesOrderLineResult> lineList = orderResult.OrderLineList;
                        if (lineList != null && lineList.Count > 0)
                        {
                            //判断是否存在有未取消的,出库数量小于下单数量
                            List <ORD_SalesOrderLineResult> effLineList = lineList.Where(a => a.IsCancel == false && a.StkOutOccQty < a.Qty).ToList();
                            if (effLineList != null && effLineList.Count > 0)
                            {
                                //如果存在未提交的关联的出库单,则直接调出出库单
                                STK_OutResult outResult = outLogic.GetInfo(new STK_OutParam()
                                {
                                    SourceBillGuid = soguid, Status = "New"
                                });
                                frmStkOut frmStkOut = new STK.frmStkOut("SO_OUT", _SOGuid);
                                frmStkOut.BringToFront();
                                frmStkOut.StartPosition = FormStartPosition.CenterParent;
                                if (frmStkOut != null)
                                {
                                    //存在关联的未提交的出库单
                                    frmStkOut.StkOutGuid = outResult.StkOutGuid;
                                }
                                frmStkOut.ShowDialog();
                            }
                            else
                            {
                                this.ShowMessage("当前销售单没有需出库的销售明细!若存在有关联的已提交未审核的出库单,请及时联系相关人员审核!");
                            }
                        }
                    }
                    else
                    {
                        this.ShowMessage("未审核或者全部出库占有的销售单据不允许再继续出库!");
                    }
                }
                if (dgvSalesOrder.Columns[e.ColumnIndex].Name == "colOperReturn")
                {
                    ORD_SalesOrderResult orderResult = orderLogic.GetInfo(new ORD_SalesOrderParam()
                    {
                        SOGuid = _SOGuid
                    });
                    if (orderResult != null && orderResult.Status == "Complete" && orderResult.StkOutOccStatus != "待出库" && orderResult.ReturnOccStatus != "全部占有")//没有全部退货的销售单才能创建退货单
                    {
                        List <ORD_SalesOrderLineResult> lineList = orderResult.OrderLineList;
                        if (lineList != null && lineList.Count > 0)
                        {
                            //判断是否存在有未取消的,出库数量大于0,且出库数量大于退货占有数量的销售明细

                            List <ORD_SalesOrderLineResult> effLineList = lineList.Where(a => a.IsCancel == false && a.StkOutQty > 0 && a.StkOutQty > a.ReturnOccQty.ToInt32()).ToList();
                            if (effLineList != null && effLineList.Count > 0)
                            {
                                //如果存在未提交的关联的退货单,则直接调出退货单
                                List <ORD_SalesReturnResult> returnResultList = returnLogic.GetList(new ORD_SalesReturnParam()
                                {
                                    SOGuid = _SOGuid, Status = "New"
                                });
                                frmSalesReturn frmSalesReturn = new frmSalesReturn(_SOGuid);
                                frmSalesReturn.BringToFront();
                                frmSalesReturn.StartPosition = FormStartPosition.CenterParent;
                                if (returnResultList != null && returnResultList.Count > 0)
                                {
                                    //存在关联的未提交的退货单
                                    frmSalesReturn.SRGuid = returnResultList[0].SRGuid;
                                }
                                frmSalesReturn.ShowDialog();
                            }
                            else
                            {
                                this.ShowMessage("当前销售单没有需退货的销售明细!若存在有关联的已提交未审核的退货单,请及时联系相关人员审核!");
                            }
                        }
                    }
                    else
                    {
                        this.ShowMessage("未审核或者未出库或者全部退货占有的销售单据不允许退货!");
                    }
                }
            }
        }