/// <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); }
/// <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); }
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; }
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); }
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); }
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); }
/// <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); }
/// <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); }
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(); } }); }
/// <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); }
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); }
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); }
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("未审核或者未出库或者全部退货占有的销售单据不允许退货!"); } } } }