public void UpdateASN(string stno, int rejectQty, string rejectResult, DataTable dt) { try { InventoryFacade _inventoryFacade = new InventoryFacade(this.DataProvider); this.DataProvider.BeginTransaction(); ASN asn = (ASN)_inventoryFacade.GetASN(stno); if (asn == null) { throw new Exception("asn不存在!"); } asn.InitRejectQty = rejectQty; asn.InitReceiveDesc = rejectResult; foreach (DataRow dr in dt.Rows) { ASNDetail asnDetail = (ASNDetail)_inventoryFacade.GetASNDetail(int.Parse(dr["STLINE"].ToString()), dr["STNO"].ToString()); if (asnDetail == null) { throw new Exception("不存在ASN明细!"); } if (asnDetail.Status != ASNDetail_STATUS.ASNDetail_ReceiveClose) { //更新asndetail STATUS 和 InitReceiveStatus asnDetail.Status = ASNDetail_STATUS.ASNDetail_ReceiveClose; asnDetail.InitReceiveStatus = SAP_LineStatus.SAP_LINE_REJECT; asnDetail.InitReceiveDesc = rejectResult; _inventoryFacade.UpdateASNDetail(asnDetail); } } _inventoryFacade.UpdateASN(asn); this.DataProvider.CommitTransaction(); } catch (Exception ex) { this.DataProvider.RollbackTransaction(); BenQGuru.eMES.Common.Log.Error(ex.Message + "-------------------" + ex.Source); BenQGuru.eMES.Common.Log.Error(ex.StackTrace); throw ex; } }
private string autoCreateASNFromCheckoutInfo(string invNo, Pick pick) { try { InvoicesDetail invD = (InvoicesDetail)_InventoryFacade.GetInvoicesDetail(invNo); CARTONINVOICES[] cartos = _warehouseFacade.GetGrossAndWeight(pick.PickNo); string stno = CreateStNO(); Asn asn = new Asn(); asn.Stno = stno; asn.StType = "UB"; asn.CDate = FormatHelper.TODateInt(DateTime.Now); asn.CTime = FormatHelper.TOTimeInt(DateTime.Now); asn.CUser = GetUserCode(); asn.Status = "Release"; asn.Invno = invNo; asn.FacCode = pick.FacCode; if (cartos.Length > 0) { asn.Gross_weight = (decimal)cartos[0].GROSS_WEIGHT; asn.Volume = cartos[0].VOLUME; } asn.StorageCode = invD.StorageCode ?? " "; asn.MaintainUser = GetUserCode(); asn.MaintainTime = FormatHelper.TOTimeInt(DateTime.Now); asn.MaintainDate = FormatHelper.TODateInt(DateTime.Now); CartonInvDetailMaterial[] cartonMs = _warehouseFacade.GetCartonInvDetailMaterial(pick.PickNo); MOModel.ItemFacade _itemfacade = new BenQGuru.eMES.MOModel.ItemFacade(this.DataProvider); int i = 1; this.DataProvider.BeginTransaction(); foreach (CartonInvDetailMaterial m in cartonMs) { object materobj = _itemfacade.GetMaterial(m.MCODE); Domain.MOModel.Material mater = materobj as Domain.MOModel.Material; if (materobj == null) { this.DataProvider.RollbackTransaction(); throw new Exception("物料表没有物料:" + m.MCODE); } string custMCode = _warehouseFacade.GetCustMCodeForUB(pick.PickNo, m.DQMCODE); if (mater.MCONTROLTYPE == SAP_CONTROLTYPE.SAP_ITEM_CONTROL_KEYPARTS) { ASNDetail asnd = new ASNDetail(); asnd.ActQty = 0; //asnd.CartonNo = " "; asnd.DQMCode = m.DQMCODE; asnd.Qty = (int)m.QTY; asnd.StLine = i.ToString(); asnd.CustMCode = custMCode; asnd.MCode = m.MCODE; asnd.Status = "Release"; asnd.StNo = stno; asnd.MDesc = mater.MchshortDesc; asnd.Unit = m.UNIT; asnd.CDate = FormatHelper.TODateInt(DateTime.Now); asnd.CTime = FormatHelper.TOTimeInt(DateTime.Now); asnd.CUser = GetUserCode(); asnd.MaintainDate = FormatHelper.TODateInt(DateTime.Now); asnd.MaintainTime = FormatHelper.TOTimeInt(DateTime.Now); asnd.MaintainUser = GetUserCode(); asnd.LotNo = " "; CARTONINVDETAILSN[] sns = _warehouseFacade.GetCartonInvDetailSn(m.CARTONNO, pick.PickNo); List <string> snList = new List <string>(); if (sns.Length > 0) { foreach (CARTONINVDETAILSN sn in sns) { snList.Add(sn.SN); } Asndetail detail = _warehouseFacade.GetFirstCheckInAsnDetail(snList); if (detail != null) { asnd.ProductionDate = detail.Production_Date; asnd.SupplierLotNo = detail.Supplier_lotno; asnd.LotNo = detail.Lotno; asnd.StorageAgeDate = detail.StorageageDate; } } DBDateTime dbTime = FormatHelper.GetNowDBDateTime(this.DataProvider); Asndetailitem detailitem = _warehouseFacade.CreateNewAsndetailitem(); detailitem.CDate = dbTime.DBDate; detailitem.CTime = dbTime.DBTime; detailitem.CUser = this.GetUserCode(); detailitem.MaintainDate = dbTime.DBDate; detailitem.MaintainTime = dbTime.DBTime; detailitem.MaintainUser = this.GetUserCode(); detailitem.Stline = i.ToString(); detailitem.Stno = asn.Stno; detailitem.MCode = asnd.MCode; detailitem.DqmCode = asnd.DQMCode; //查找对应的SAP单 object[] qtyobjs = _warehouseFacade.GetSAPNOandLinebyMCODE(asn.Invno, asnd.MCode, asnd.DQMCode); if (qtyobjs == null) { this.DataProvider.RollbackTransaction(); throw new Exception("入库需求" + asn.Invno + " 没有相关物料" + asnd.MCode + "," + asnd.DQMCode + "或者此行已被取消!"); } decimal sub = asnd.Qty; for (int k = 0; k < qtyobjs.Length; k++) { InvoicesDetail invdetail = qtyobjs[k] as InvoicesDetail; decimal subNeed = 0; object findNeedQTY_old = _warehouseFacade.GetNeedImportQtyOLD(invdetail.InvNo, invdetail.InvLine, asnd.StNo); //找这个invoice行已经导入了多少,和判退多少 Asndetailitem subItemOld = findNeedQTY_old as Asndetailitem; object findNeedQTY_now = _warehouseFacade.GetNeedImportQtyNow(invdetail.InvNo, invdetail.InvLine, asnd.StNo); //找这个invoice行已经导入了多少,和判退多少 Asndetailitem subItemNow = findNeedQTY_now as Asndetailitem; subNeed = invdetail.PlanQty - subItemOld.Qty + (subItemOld.Qty - subItemOld.ReceiveQty) + (subItemOld.ReceiveQty - subItemOld.QcpassQty); subNeed = subNeed - subItemNow.Qty; if (subNeed == 0) { continue; } //如果箱数量大于需求数量差---进行拆分 if (sub > subNeed) { sub = sub - subNeed; // sub是剩余的 detailitem.Qty = subNeed; detailitem.Invline = invdetail.InvLine.ToString(); detailitem.Invno = invdetail.InvNo; detailitem.ActQty = detailitem.Qty; detailitem.QcpassQty = detailitem.Qty; detailitem.ReceiveQty = detailitem.Qty; _warehouseFacade.AddAsndetailitem(detailitem); } //如果箱单数量小于等于需求数量差--直接填入 else { detailitem.Qty = sub; detailitem.Invline = invdetail.InvLine.ToString(); detailitem.Invno = invdetail.InvNo; detailitem.ActQty = detailitem.Qty; detailitem.QcpassQty = detailitem.Qty; detailitem.ReceiveQty = detailitem.Qty; _warehouseFacade.AddAsndetailitem(detailitem); sub = 0; } if (sub == 0) { break; } } //如果sub>0,说明导入数量过多,报错 if (sub > 0) { this.DataProvider.RollbackTransaction(); throw new Exception("箱单导入数量与需求数量不符!"); } foreach (CARTONINVDETAILSN sn in sns) { Asndetailsn asnSN = new Asndetailsn(); asnSN.CDate = FormatHelper.TODateInt(DateTime.Now); asnSN.CTime = FormatHelper.TOTimeInt(DateTime.Now); asnSN.CUser = GetUserCode(); asnSN.MaintainDate = FormatHelper.TODateInt(DateTime.Now); asnSN.MaintainTime = FormatHelper.TOTimeInt(DateTime.Now); asnSN.MaintainUser = GetUserCode(); asnSN.Sn = sn.SN; asnSN.Stline = i.ToString(); asnSN.Stno = stno; _warehouseFacade.AddAsndetailsn(asnSN); } _InventoryFacade.AddASNDetail(asnd); } else if (mater.MCONTROLTYPE == SAP_CONTROLTYPE.SAP_ITEM_CONTROL_LOT || mater.MCONTROLTYPE == SAP_CONTROLTYPE.SAP_ITEM_CONTROL_NOCONTROL) { ASNDetail asnd = new ASNDetail(); asnd.ActQty = 0; asnd.CustMCode = custMCode; asnd.DQMCode = m.DQMCODE; asnd.Qty = (int)m.QTY; asnd.StLine = i.ToString(); asnd.MCode = m.MCODE; asnd.StNo = stno; asnd.Status = "Release"; asnd.MDesc = mater.MchshortDesc; asnd.Unit = m.UNIT; asnd.CDate = FormatHelper.TODateInt(DateTime.Now); asnd.CTime = FormatHelper.TOTimeInt(DateTime.Now); asnd.CUser = GetUserCode(); asnd.MaintainDate = FormatHelper.TODateInt(DateTime.Now); asnd.MaintainTime = FormatHelper.TOTimeInt(DateTime.Now); asnd.MaintainUser = GetUserCode(); asnd.LotNo = " "; Pickdetailmaterial pickMaterial = (Pickdetailmaterial)_warehouseFacade.GetLotNOInformationFromDQMCODE(m.DQMCODE, pick.PickNo); if (pickMaterial != null) { asnd.ProductionDate = pickMaterial.Production_Date; asnd.SupplierLotNo = pickMaterial.Supplier_lotno; asnd.LotNo = pickMaterial.Lotno; asnd.StorageAgeDate = pickMaterial.StorageageDate; } else { throw new Exception(pick.PickNo + "没有找到检料信息!"); } _InventoryFacade.AddASNDetail(asnd); DBDateTime dbTime = FormatHelper.GetNowDBDateTime(this.DataProvider); Asndetailitem detailitem = _warehouseFacade.CreateNewAsndetailitem(); detailitem.CDate = dbTime.DBDate; detailitem.CTime = dbTime.DBTime; detailitem.CUser = this.GetUserCode(); detailitem.MaintainDate = dbTime.DBDate; detailitem.MaintainTime = dbTime.DBTime; detailitem.MaintainUser = this.GetUserCode(); detailitem.Stline = i.ToString(); detailitem.Stno = asn.Stno; detailitem.MCode = asnd.MCode; detailitem.DqmCode = asnd.DQMCode; //查找对应的SAP单 object[] qtyobjs = _warehouseFacade.GetSAPNOandLinebyMCODE(asn.Invno, asnd.MCode, asnd.DQMCode); if (qtyobjs == null) { this.DataProvider.RollbackTransaction(); throw new Exception("箱单导入数量与需求数量不符!"); } decimal sub = asnd.Qty; for (int k = 0; k < qtyobjs.Length; k++) { InvoicesDetail invdetail = qtyobjs[k] as InvoicesDetail; decimal subNeed = 0; object findNeedQTY_old = _warehouseFacade.GetNeedImportQtyOLD(invdetail.InvNo, invdetail.InvLine, asnd.StNo); //找这个invoice行已经导入了多少,和判退多少 Asndetailitem subItemOld = findNeedQTY_old as Asndetailitem; object findNeedQTY_now = _warehouseFacade.GetNeedImportQtyNow(invdetail.InvNo, invdetail.InvLine, asnd.StNo); //找这个invoice行已经导入了多少,和判退多少 Asndetailitem subItemNow = findNeedQTY_now as Asndetailitem; subNeed = invdetail.PlanQty - subItemOld.Qty + (subItemOld.Qty - subItemOld.ReceiveQty) + (subItemOld.ReceiveQty - subItemOld.QcpassQty); subNeed = subNeed - subItemNow.Qty; if (subNeed == 0) { continue; } //如果箱数量大于需求数量差---进行拆分 if (sub > subNeed) { sub = sub - subNeed; // sub是剩余的 detailitem.Qty = subNeed; detailitem.Invline = invdetail.InvLine.ToString(); detailitem.Invno = invdetail.InvNo; detailitem.ActQty = detailitem.Qty; detailitem.QcpassQty = detailitem.Qty; detailitem.ReceiveQty = detailitem.Qty; _warehouseFacade.AddAsndetailitem(detailitem); } //如果箱单数量小于等于需求数量差--直接填入 else { detailitem.Qty = sub; detailitem.Invline = invdetail.InvLine.ToString(); detailitem.Invno = invdetail.InvNo; detailitem.ActQty = detailitem.Qty; detailitem.QcpassQty = detailitem.Qty; detailitem.ReceiveQty = detailitem.Qty; _warehouseFacade.AddAsndetailitem(detailitem); sub = 0; } if (sub == 0) { break; } } //如果sub>0,说明导入数量过多,报错 if (sub > 0) { this.DataProvider.RollbackTransaction(); throw new Exception("箱单导入数量与需求数量不符!"); } } i++; } _warehouseFacade.AddAsn(asn); WarehouseFacade facade = new WarehouseFacade(base.DataProvider); #region 在invinouttrans表中增加一条数据 //ASN asn = (ASN)domainObject; DBDateTime dbTime1 = FormatHelper.GetNowDBDateTime(this.DataProvider); InvInOutTrans trans = facade.CreateNewInvInOutTrans(); trans.CartonNO = string.Empty; trans.DqMCode = string.Empty; trans.FacCode = asn.FacCode; trans.FromFacCode = asn.FromfacCode; trans.FromStorageCode = asn.FromstorageCode; trans.InvNO = asn.Invno; trans.InvType = asn.StType; trans.LotNo = string.Empty; trans.MaintainDate = dbTime1.DBDate; trans.MaintainTime = dbTime1.DBTime; trans.MaintainUser = this.GetUserCode(); trans.MCode = string.Empty; trans.ProductionDate = 0; trans.Qty = 0; trans.Serial = 0; trans.StorageAgeDate = 0; trans.StorageCode = asn.StorageCode; trans.SupplierLotNo = string.Empty; trans.TransNO = asn.Stno; trans.TransType = "IN"; trans.Unit = string.Empty; trans.ProcessType = "UBCreateASN"; facade.AddInvInOutTrans(trans); #endregion this.DataProvider.CommitTransaction(); return(stno); } catch (Exception ex) { this.DataProvider.RollbackTransaction(); throw ex; } }
public override void CustomerDefinedSettledTransData(ref string message) { try { if (TransDataType == "PreOrder") { DataTable dt = Transdata.Tables["预出库单明细信息$"].Copy(); dt.Columns.Add("产品名称"); List <ProductSearch> productListS = new List <ProductSearch>(); IEnumerable <ProductSearch> productList; for (int i = 0; i < dt.Rows.Count; i++) { ProductSearch ps = new ProductSearch(); ps.SKU = dt.Rows[i]["SKU"].ToString(); productListS.Add(ps); } productList = ApplicationConfigHelper.GetSearchProduct(CustomerID, productListS, "SKU"); for (int i = 0; i < dt.Rows.Count; i++) { if (productList.Where(c => c.SKU == dt.Rows[i]["SKU"].ToString()).ToArray().Length <= 0) { message = dt.Rows[i]["SKU"].ToString() + "不存在!!"; return; } dt.Rows[i]["产品名称"] = productList.Where(c => c.SKU == dt.Rows[i]["SKU"].ToString()).ToArray().Length > 0 ? productList.Where(c => c.SKU == dt.Rows[i]["SKU"].ToString()).ToArray()[0].GoodsName.ToString() : ""; } DataTable dtpo = Transdata.Tables["预出库单主信息$"].Copy(); DataSet ds = new DataSet(); //验证一下是否有重复的SKU foreach (DataRow item in dtpo.Rows) { string exterNo = item["外部单号"].ToString().Trim(); if (string.IsNullOrEmpty(exterNo)) { message = "预出库单主信息中的外部单号不能为空,请检查!"; return; } DataRow[] dtrow = dt.Select("外部单号='" + exterNo + "'");//获取明细 if (dtrow.Count() <= 0) { message = "<p><font color='#FF0000'>外部单号:" + exterNo + "没有明细信息,请检查!</font></p>"; return; } List <PreOrderDetail> predetail = new List <PreOrderDetail>(); foreach (DataRow row in dtrow) { PreOrderDetail detail = new PreOrderDetail(); detail.SKU = row["SKU"].ToString(); predetail.Add(detail); } var validataSKU = predetail.GroupBy(m => new { m.SKU }).Select(m => new { SKU = m.Key.SKU, count = m.Count() }).ToList(); var data = validataSKU.Where(m => m.count > 1); if (data.Count() > 0) { message = "<p><font color='#FF0000'>外部单号:" + exterNo + "中的SKU:" + data.FirstOrDefault().SKU + "存在重复值,请检查!</font></p>"; return; } } ds.Tables.Add(dtpo); ds.Tables.Add(dt); this.AfterData = ds; } else if (TransDataType == "Asn") { try { foreach (DataRow item in Transdata.Tables["预入库单主信息$"].Rows) { string exterNo = item["外部入库单号"].ToString(); string asnType = item["预入库单类型"].ToString(); DataRow[] dtrow = Transdata.Tables["预入库单明细信息$"].Select("外部入库单号='" + exterNo + "'");//获取这一单的明细信息 if (dtrow.Count() <= 0) { message = "<p><font color='#FF0000'>外部入库单号:" + exterNo + "没有明细信息,请检查!</font></p>"; return; } List <ASNDetail> asnDetail = new List <ASNDetail>(); foreach (DataRow row in dtrow) { ASNDetail detail = new ASNDetail(); detail.SKU = row["SKU"].ToString(); asnDetail.Add(detail); } var validata = asnDetail.GroupBy(m => new { m.SKU }).Select(m => new { SKU = m.Key.SKU, count = m.Count() }); var data = validata.Where(m => m.count > 1); if (data.Count() > 0) { message = "<p><font color='#FF0000'>外部入库单号:" + exterNo + "中的SKU:" + data.FirstOrDefault().SKU + "存在重复值,请检查!</font></p>"; return; } this.AfterData = Transdata; } } catch (Exception ex) { this.AfterData = null; message = ex.Message.ToString(); } } else if (TransDataType == "Receiving") { DataTable dt = Transdata.Tables[0].Copy(); if (!dt.Columns.Contains("生产日期")) { dt.Columns.Add("生产日期"); } if (!dt.Columns.Contains("箱内总数")) { dt.Columns.Add("箱内总数"); } for (int i = 0; i < dt.Rows.Count; i++) { try { Convert.ToDateTime(dt.Rows[i]["生产日期"].ToString()); } catch { dt.Rows[i]["生产日期"] = System.DateTime.Now.ToString(); } } DataSet ds = new DataSet(); ds.Tables.Add(dt); this.AfterData = ds; } else { this.AfterData = Transdata; } } catch { this.AfterData = null; } }
public override void CustomerDefinedSettledTransData(ref string message) { try { if (TransDataType == "PreOrder") { DataTable dt = Transdata.Tables["预出库单明细信息$"].Copy(); dt.Columns.Add("产品名称"); List <ProductSearch> productListS = new List <ProductSearch>(); IEnumerable <ProductSearch> productList; for (int i = 0; i < dt.Rows.Count; i++) { ProductSearch ps = new ProductSearch(); ps.SKU = dt.Rows[i]["SKU"].ToString(); productListS.Add(ps); } productList = ApplicationConfigHelper.GetSearchProduct(CustomerID, productListS, "SKU"); for (int i = 0; i < dt.Rows.Count; i++) { if (productList.Where(c => c.SKU == dt.Rows[i]["SKU"].ToString()).ToArray().Length <= 0) { message = dt.Rows[i]["SKU"].ToString() + "不存在!!"; return; } dt.Rows[i]["产品名称"] = productList.Where(c => c.SKU == dt.Rows[i]["SKU"].ToString()).ToArray().Length > 0 ? productList.Where(c => c.SKU == dt.Rows[i]["SKU"].ToString()).ToArray()[0].GoodsName.ToString() : ""; } DataTable dtpo = Transdata.Tables["预出库单主信息$"].Copy(); DataSet ds = new DataSet(); //验证一下快进快出的订单是否填写了其他单号(入库单号) foreach (DataRow item in dtpo.Rows) { string exterNo = item["外部单号"].ToString().Trim(); if (string.IsNullOrEmpty(exterNo)) { message = "预出库单主信息中的外部单号不能为空,请检查!"; return; } string orderType = item["预出库单类型"].ToString().Trim(); string otherNo = item["其它单号"].ToString().Trim(); if (orderType == "快进快出") { if (string.IsNullOrEmpty(otherNo)) { message = "<p><font color='#FF0000'>外部单号:" + exterNo + "属于快进快出订单,其它单号不能为空!</font></p>"; return; } //验证一下快进快出订单的其它单号在系统是否存在 var asnexter = new ASNManagementService().ExternKeyCheck(otherNo, "1", CustomerID); if (asnexter <= 0) { message = "外部单号:" + exterNo + "中的其它单号在系统不存在,请检查!"; return; } } else { if (!string.IsNullOrEmpty(otherNo)) { message = "<p><font color='#FF0000'>外部单号:" + exterNo + "不是快进快出类型,请勿填写其它单号!</font></p>"; return; } } //验证一下重复sku DataRow[] dtrow = dt.Select("外部单号='" + exterNo + "'");//获取明细 if (dtrow.Count() <= 0) { message = "<p><font color='#FF0000'>外部单号:" + exterNo + "没有明细信息,请检查!</font></p>"; return; } List <PreOrderDetail> predetail = new List <PreOrderDetail>(); foreach (DataRow row in dtrow) { PreOrderDetail detail = new PreOrderDetail(); detail.SKU = row["SKU"].ToString(); predetail.Add(detail); } var validataSKU = predetail.GroupBy(m => new { m.SKU }).Select(m => new { SKU = m.Key.SKU, count = m.Count() }).ToList(); var data = validataSKU.Where(m => m.count > 1); if (data.Count() > 0) { message = "<p><font color='#FF0000'>外部单号:" + exterNo + "中的SKU:" + data.FirstOrDefault().SKU + "存在重复值,请检查!</font></p>"; return; } } ds.Tables.Add(dtpo); ds.Tables.Add(dt); this.AfterData = ds; } else if (TransDataType == "Receiving") { DataTable dt = Transdata.Tables[0].Copy(); if (!dt.Columns.Contains("生产日期")) { dt.Columns.Add("生产日期"); } if (!dt.Columns.Contains("箱内总数")) { dt.Columns.Add("箱内总数"); } for (int i = 0; i < dt.Rows.Count; i++) { try { Convert.ToDateTime(dt.Rows[i]["生产日期"].ToString()); } catch { dt.Rows[i]["生产日期"] = System.DateTime.Now.ToString(); } } DataSet ds = new DataSet(); ds.Tables.Add(dt); this.AfterData = ds; } else if (TransDataType == "Asn") { try { foreach (DataRow item in Transdata.Tables["预入库单主信息$"].Rows) { string exterNo = item["外部入库单号"].ToString(); string asnType = item["预入库单类型"].ToString(); DataRow[] dtrow = Transdata.Tables["预入库单明细信息$"].Select("外部入库单号='" + exterNo + "'");//获取这一单的明细信息 if (dtrow.Count() <= 0) { message = "<p><font color='#FF0000'>外部入库单号:" + exterNo + "没有明细信息,请检查!</font></p>"; return; } if (asnType == "快进快出") { List <ASNDetail> asnDetail = new List <ASNDetail>(); foreach (DataRow row in dtrow) { ASNDetail detail = new ASNDetail(); //detail.ExternReceiptNumber = row["外部入库单号"].ToString(); detail.SKU = row["SKU"].ToString(); detail.BoxNumber = row["托号"].ToString(); asnDetail.Add(detail); } //验证箱号是不是都有值 if (asnDetail.Where(m => m.BoxNumber == "" || m.BoxNumber == null).Count() > 0) { message = "<p><font color='#FF0000'>外部入库单号:" + exterNo + "类型为快进快出,箱号不能为空,请检查!</font></p>"; return; } var validataBox = asnDetail.GroupBy(m => new { m.SKU, m.BoxNumber }).Select(m => new { SKU = m.Key.SKU, BoxNumber = m.Key.BoxNumber, count = m.Count() }); var data = validataBox.Where(m => m.count > 1); if (data.Count() > 0) { message = "<p><font color='#FF0000'>外部入库单号:" + exterNo + "中的SKU:" + data.FirstOrDefault().SKU + "和箱号:" + data.FirstOrDefault().BoxNumber + "存在重复值,请检查!</font></p>"; return; } } else { List <ASNDetail> asnDetail = new List <ASNDetail>(); foreach (DataRow row in dtrow) { ASNDetail detail = new ASNDetail(); detail.SKU = row["SKU"].ToString(); asnDetail.Add(detail); } var validataBox = asnDetail.GroupBy(m => new { m.SKU }).Select(m => new { SKU = m.Key.SKU, count = m.Count() }); var data = validataBox.Where(m => m.count > 1); if (data.Count() > 0) { message = "<p><font color='#FF0000'>外部入库单号:" + exterNo + "中的SKU:" + data.FirstOrDefault().SKU + "存在重复值,请检查!</font></p>"; return; } } } // //验证快进快出的箱号是否存在 // for (int i = 0; i < Transdata.Tables["预入库单主信息$"].Rows.Count; i++) // { // string exterNo = Transdata.Tables["预入库单主信息$"].Rows[i]["外部入库单号"].ToString(); // string orderType = Transdata.Tables["预入库单主信息$"].Rows[i]["预入库单类型"].ToString(); // DataRow[] dtrow = Transdata.Tables["预入库单明细信息$"].Select("外部入库单号='" + exterNo + "'");//获取这一单的明细信息 // if (dtrow.Count() <= 0) // { // message = "<p><font color='#FF0000'>外部入库单号:" + exterNo + "没有明细信息,请检查!</font></p>"; // return; // } // //带箱号的订单 // if (orderType == "快进快出") // { // var distinctBoxSKU = from s in dtrow.AsEnumerable() // group s by new { s1 = Convert.ToString(s.Field<string>("外部入库单号")), s2 = Convert.ToString(s.Field<string>("SKU")), s3 = Convert.ToString(s.Field<string>("托号")) } into m // select new // { // 外部单号 = Convert.ToString(m.Key.s1), // SKU = Convert.ToString(m.Key.s2), // 托号 = Convert.ToString(m.Key.s3), // count = m.Count() // }; // var errorBoxSKU = distinctBoxSKU.Where(m => m.count > 1); // if (errorBoxSKU.Count() > 0) // { // message = "<p><font color='#FF0000'>外部入库单号:" + errorBoxSKU.FirstOrDefault().外部单号 + "中的SKU:" // + errorBoxSKU.FirstOrDefault().SKU + "和箱号:" + distinctBoxSKU.FirstOrDefault().托号 + "存在重复值,请检查!" + "</font></p>"; // return; // } // } // else // { // //普通订单验证是否有相同SKU // var distinctSKU = from s in dtrow.AsEnumerable() // group s by new { s1 = Convert.ToString(s.Field<string>("外部入库单号")), s2 = Convert.ToString(s.Field<string>("SKU")) } into m // select new // { // 外部单号 = Convert.ToString(m.Key.s1), // SKU = Convert.ToString(m.Key.s2), // count = m.Count() // }; // var errorSKU = distinctSKU.Where(m => m.count > 1); // if (errorSKU.Count() > 0) // { // message = "<p><font color='#FF0000'>外部入库单号:" + errorSKU.FirstOrDefault().外部单号 + "中的SKU:" + errorSKU.FirstOrDefault().SKU + "存在重复值,请检查!" + "</font></p>"; // return; // } // } // } this.AfterData = Transdata; } catch (Exception ex) { this.AfterData = null; message = ex.Message.ToString(); } } else { this.AfterData = Transdata; } } catch { this.AfterData = null; } }
public string SaveIQCInfo(string[] asns, string usrCode) { WarehouseFacade wFacade = new WarehouseFacade(DataProvider); InventoryFacade facade = new InventoryFacade(DataProvider); BenQGuru.eMES.Web.Helper.DBDateTime dbDateTime = BenQGuru.eMES.Web.Helper.FormatHelper.GetNowDBDateTime(this.DataProvider); #region 6> 以下几种情况不可点击申请IQC: //1》 入库类型为:PD:盘点 //2》 入库类型为:POR: PO入库 并且供应商直发标识为:Y //3》 入库类型为:SCTR:生产退料 并且生产退料入不良品库标识为:Y ASN asn = (ASN)facade.GetASN(asns[0]); if (asn.StType == InInvType.PD) { return("入库类型为盘点,不可申请IQC"); } else if (asn.StType == InInvType.POR && asn.DirectFlag == "Y") { return("入库类型为PO入库并且供应商直发标识为Y,不可申请IQC"); } else if (asn.StType == InInvType.SCTR && asn.RejectsFlag == "Y") { return("入库类型为生产退料并且生产退料入不良品库标识为Y,不可申请IQC"); } bool hasDetail = facade.CheckASNHasDetail(asn.StNo, ASNLineStatus.ReceiveClose); if (!hasDetail) { bool hasReject = facade.CheckASNReceiveStatusHasDetail(asn.StNo, "Reject"); if (hasReject) { //将头数据改为拒收状态 IQCRejection:IQC拒收; ASN oldAsn = (ASN)facade.GetASN(asn.StNo); oldAsn.Status = ASNHeadStatus.IQCRejection; facade.UpdateASN(oldAsn); return("初检接收状态中全部为拒收状态"); } } else { return("ASN单行项目状态必须为初检完成"); } #endregion IQCFacade iqcFacade = new IQCFacade(DataProvider); object[] disdqMcodeList = facade.QueryAsnDetailForDqMcode(asn.StNo); if (disdqMcodeList == null) { return("入库指令号对应在ASN明细表中不存在,不可申请IQC"); } //同一入库指令下,同一鼎桥物料编码,生成一个IQC检验单号。 object[] dqMcodeList = facade.QueryAsnDetailForCreateIqc(asn.StNo); if (dqMcodeList == null) { return("IQC检验单号已存在!"); } try { this.DataProvider.BeginTransaction(); string iqcNo = string.Empty; foreach (ASNDetail dqMcode in dqMcodeList) { //edit by sam 2016年3月21日 剔除拒收状态 object[] detailList = facade.QueryAsnDetailByStNo(asn.StNo, dqMcode.DQMCode, "Reject"); if (detailList != null) { #region AsnIQC ASNDetail asnDetailobj = detailList[0] as ASNDetail; string newIqcNo = this.CreateNewIqcNo(asnDetailobj.StNo, usrCode); AsnIQC asnIqc = new AsnIQC(); asnIqc.IqcNo = newIqcNo; iqcNo = newIqcNo; asnIqc.IqcType = ""; asnIqc.StNo = asn.StNo; asnIqc.InvNo = !string.IsNullOrEmpty(asn.InvNo) ? asn.InvNo : asn.StNo; asnIqc.StType = asn.StType; // STTYPE asnIqc.Status = BenQGuru.eMES.Web.Helper.IQCStatus.IQCStatus_Release; // STATUS asnIqc.AppDate = dbDateTime.DBDate; // MDATE asnIqc.AppTime = dbDateTime.DBTime; // MTIME asnIqc.InspDate = 0; // INSPDATE asnIqc.InspTime = 0; // INSPTIME asnIqc.CustmCode = asnDetailobj.CustMCode; // CUSTMCODE 华为物料号 asnIqc.MCode = asnDetailobj.MCode; // MCODE asnIqc.DQMCode = asnDetailobj.DQMCode; // DQMCODE asnIqc.MDesc = asnDetailobj.MDesc; // MDESC // asnIqc.Qty = asnDetailobj.ReceiveQty; // QTY asnIqc.QcStatus = ""; // QCSTATUS IQC状态(Y:合格;N:不合格) asnIqc.VendorCode = asn.VendorCode; // VENDORCODE asnIqc.VendorMCode = asnDetailobj.VendorMCodeDesc; // VENDORMCODE asnIqc.Remark1 = asn.Remark1; // REMARK1 asnIqc.CUser = usrCode; // CUSER asnIqc.CDate = dbDateTime.DBDate; // CDATE asnIqc.CTime = dbDateTime.DBTime; // CTIME asnIqc.MaintainDate = dbDateTime.DBDate; // MDATE asnIqc.MaintainTime = dbDateTime.DBTime; // MTIME asnIqc.MaintainUser = usrCode; // MUSER foreach (ASNDetail asnDetail in detailList) { asnIqc.Qty += asnDetail.ReceiveQty; } iqcFacade.AddAsnIQC(asnIqc); #endregion foreach (ASNDetail asnDetail in detailList) { #region AsnIQCDetail iqcDetail = new AsnIQCDetail(); #region iqcDetail iqcDetail.IqcNo = newIqcNo; // IQCNO 送检单号 iqcDetail.StNo = asnDetail.StNo; // STNO ASN单号 iqcDetail.StLine = asnDetail.StLine; // STLINE ASN单行项目 iqcDetail.CartonNo = asnDetail.CartonNo; // CARTONNO 箱号条码 iqcDetail.Qty = asnDetail.ReceiveQty; // QTY 送检数量 iqcDetail.QcPassQty = 0; // QCPASSQTY 检验通过数量 iqcDetail.Unit = asnDetail.Unit; // UNIT 单位 iqcDetail.NgQty = 0; // NGQTY 缺陷品数 iqcDetail.ReturnQty = 0; // ReturnQTY 退换货数量 iqcDetail.ReformQty = 0; // ReformQTY 现场整改数量 iqcDetail.GiveQty = 0; // GiveQTY 让步接收数量 iqcDetail.AcceptQty = 0; // AcceptQTY 特采数量 iqcDetail.QcStatus = ""; // QCSTATUS IQC状态(Y:合格;N:不合格) iqcDetail.Remark1 = asnDetail.Remark1; // REMARK1 备注 iqcDetail.CUser = usrCode; // CUSER iqcDetail.CDate = dbDateTime.DBDate; // CDATE iqcDetail.CTime = dbDateTime.DBTime; // CTIME iqcDetail.MaintainDate = dbDateTime.DBDate; // MDATE iqcDetail.MaintainTime = dbDateTime.DBTime; // MTIME iqcDetail.MaintainUser = usrCode; // MUSER iqcFacade.AddAsnIQCDetail(iqcDetail); #endregion #region AsnIqcDetailSN object[] iqcDetailsnList = facade.GetSNbySTNo(asnDetail.StNo, asnDetail.StLine); if (iqcDetailsnList != null) { foreach (Asndetailsn detailsn in iqcDetailsnList) { AsnIqcDetailSN iqcDetailsn = new AsnIqcDetailSN(); iqcDetailsn.IqcNo = newIqcNo; // IQCNO 送检单号 iqcDetailsn.StNo = asnDetail.StNo; // STNO ASN单号 iqcDetailsn.StLine = asnDetail.StLine; // STLINE ASN单行项目 iqcDetailsn.Sn = detailsn.Sn; iqcDetailsn.CartonNo = asnDetail.CartonNo; // CARTONNO 箱号条码 iqcDetailsn.StNo = asnDetail.StNo; // SN SN条码 iqcDetailsn.QcStatus = ""; // QCSTATUS SN IQC状态(Y:合格;N:不合格) iqcDetailsn.Remark1 = asnDetail.Remark1; // REMARK1 备注 iqcDetailsn.CUser = usrCode; // CUSER iqcDetailsn.CDate = dbDateTime.DBDate; // CDATE iqcDetailsn.CTime = dbDateTime.DBTime; // CTIME iqcDetailsn.MaintainDate = dbDateTime.DBDate; // MDATE iqcDetailsn.MaintainTime = dbDateTime.DBTime; // MTIME iqcDetailsn.MaintainUser = usrCode; // MUSER iqcFacade.AddAsnIqcDetailSN(iqcDetailsn); } } #endregion #endregion } } //判断是否是免检物料 BenQGuru.eMES.Domain.MOModel.Material mar = wFacade.GetMaterialFromDQMCode(dqMcode.DQMCode); int count = wFacade.GetStockRecordCount(dbDateTime.DBDate, dbDateTime.DBTime, mar.MCode); if (count > 0) { //是免检物料 try { ToSTS(iqcNo, usrCode); } catch (Exception ex) { this.DataProvider.RollbackTransaction(); throw ex; } } } // 3> IQC检验单数据来源与ASN主表(TBLASN)、ASN明细表(TBLASNDETAIL)、ASN明细SN表(TBLASNDETAILSN), //保存数据表有:送检单(TBLASNIQC)、送检单明细(TBLASNIQCDETAIL)、送检单明细SN表(TBLASNIQCDETAILSN), //注:送检数量(TBLASNIQCDETAIL.QTY)为ASN明细表中的接收数量(TBLASNDETAIL.ReceiveQTY) //4> IQC送检单号规则:IQC+入库指令号+两位流水号,如:IQCASN00000101 //5> 更新ASN主表(TBLASN)状态为:IQC:IQC var oldasn = (ASN)facade.GetASN(asn.StNo); if (oldasn != null) { if (!(oldasn.Status == ASN_STATUS.ASN_Close || oldasn.Status == ASN_STATUS.ASN_Cancel || oldasn.Status == ASN_STATUS.ASN_OnLocation || oldasn.Status == ASN_STATUS.ASN_IQC)) { oldasn.Status = "IQC"; facade.UpdateASN(oldasn); } } this.DataProvider.CommitTransaction(); return("申请IQC成功"); } catch (Exception ex) { this.DataProvider.RollbackTransaction(); throw ex; } }
private void ToSTS(string iqcNo, string userCode) { IQCFacade _IQCFacade = new IQCFacade(DataProvider); InventoryFacade _InventoryFacade = new InventoryFacade(DataProvider); //1、更新送检单TBLASNIQC AsnIQC asnIqc = (AsnIQC)_IQCFacade.GetAsnIQC(iqcNo); if (asnIqc != null) { asnIqc.IqcType = "ExemptCheck"; asnIqc.Status = IQCStatus.IQCStatus_IQCClose; asnIqc.QcStatus = "Y"; _IQCFacade.UpdateAsnIQC(asnIqc); #region 在invinouttrans表中增加一条数据 WarehouseFacade facade = new WarehouseFacade(DataProvider); //ASN asn = (ASN)domainObject; DBDateTime dbTime1 = FormatHelper.GetNowDBDateTime(this.DataProvider); InvInOutTrans trans = facade.CreateNewInvInOutTrans(); trans.CartonNO = string.Empty; trans.DqMCode = asnIqc.DQMCode; trans.FacCode = string.Empty; trans.FromFacCode = string.Empty; trans.FromStorageCode = string.Empty; trans.InvNO = asnIqc.InvNo; trans.InvType = asnIqc.IqcType; trans.LotNo = string.Empty; trans.MaintainDate = dbTime1.DBDate; trans.MaintainTime = dbTime1.DBTime; trans.MaintainUser = userCode; trans.MCode = asnIqc.MCode; trans.ProductionDate = 0; trans.Qty = asnIqc.Qty; trans.Serial = 0; trans.StorageAgeDate = 0; trans.StorageCode = string.Empty; trans.SupplierLotNo = string.Empty; trans.TransNO = asnIqc.IqcNo; trans.TransType = "IN"; trans.Unit = string.Empty; trans.ProcessType = "IQC"; facade.AddInvInOutTrans(trans); #endregion } object[] objAsnIqcDetail = _IQCFacade.GetAsnIQCDetailByIqcNo(iqcNo); if (objAsnIqcDetail != null) { foreach (AsnIQCDetail asnIqcDetail in objAsnIqcDetail) { //2、更新送检单明细TBLASNIQCDETAIL asnIqcDetail.QcPassQty = asnIqcDetail.Qty; asnIqcDetail.QcStatus = "Y"; _IQCFacade.UpdateAsnIQCDetail(asnIqcDetail); //4、更新ASN明细TBLASNDETAIL ASNDetail asnDetail = (ASNDetail)_InventoryFacade.GetASNDetail(Convert.ToInt32(asnIqcDetail.StLine), asnIqcDetail.StNo); if (asnDetail != null) { asnDetail.QcPassQty = asnDetail.ReceiveQty; asnDetail.Status = IQCStatus.IQCStatus_IQCClose; _InventoryFacade.UpdateASNDetail(asnDetail); } //5、更新ASN明细对应单据行明细TBLASNDETAILITEM object[] objAsnDetaileItem = _InventoryFacade.GetAsnDetailItem(asnIqcDetail.StNo, Convert.ToInt32(asnIqcDetail.StLine)); if (objAsnDetaileItem != null) { foreach (Asndetailitem asnDetaileItem in objAsnDetaileItem) { asnDetaileItem.QcpassQty = asnDetaileItem.ReceiveQty; _InventoryFacade.UpdateAsndetailitem(asnDetaileItem); } } } } object[] objAsnIqcDetailSN = _IQCFacade.GetAsnIqcDetailSNByIqcNo(iqcNo); if (objAsnIqcDetailSN != null) { foreach (AsnIqcDetailSN asnIqcDetailSN in objAsnIqcDetailSN) { //3、更新送检单明细SNTBLASNIQCDETAILSN asnIqcDetailSN.QcStatus = "Y"; _IQCFacade.UpdateAsnIqcDetailSN(asnIqcDetailSN); //6、更新ASN明细SN TBLASNDETAILSN Asndetailsn asnDetailSn = (Asndetailsn)_InventoryFacade.GetAsndetailsn(asnIqcDetailSN.Sn, asnIqcDetailSN.StNo, Convert.ToInt32(asnIqcDetailSN.StLine)); if (asnDetailSn != null) { asnDetailSn.QcStatus = "Y"; _InventoryFacade.UpdateAsndetailsn(asnDetailSn); } } } //7、以上表数据更新完成后检查ASN明细表(TBLASNDETAIL)所有行记录状态为:IQCClose:IQC完成 or OnLocation:上架 or Close:入库 or Cancel:取消时, // 更新ASN主表(TBLASN)状态(TBLASN.STATUS)为:OnLocation:上架 bool isAllIQCClose = CheckAllASNDetailIsIQCClose(iqcNo); bool isAllOnLocation = CheckAllASNDetailIsOnLocation(iqcNo); bool isAllClose = CheckAllASNDetailIsClose(iqcNo); bool isAllCancel = CheckAllASNDetailIsCancel(iqcNo); if (isAllIQCClose || isAllOnLocation || isAllClose || isAllCancel ) { ASN asn = (ASN)_InventoryFacade.GetASN(asnIqc.StNo); if (asn != null) { asn.Status = ASNHeadStatus.OnLocation; _InventoryFacade.UpdateASN(asn); } } }
protected bool AllReject(DataTable dt, string stno, string rejectReason, out string message) { WarehouseFacade _WarehouseFacade = new WarehouseFacade(DataProvider); InventoryFacade _InventoryFacade = new InventoryFacade(DataProvider); message = string.Empty; ASNDetail asnDetail = null; for (int i = 0; i < dt.Rows.Count; i++) { string stLine = dt.Rows[i][2].ToString(); asnDetail = (ASNDetail)_InventoryFacade.GetASNDetail(int.Parse(stLine), stno); //检查剩余待检的是否已全部勾选 if (asnDetail.Status != ASNDetail_STATUS.ASNDetail_ReceiveClose) { if (!string.IsNullOrEmpty(asnDetail.CartonNo)) { message = "已有行数据关联箱号,不能拒收"; return(false); } } } ASN asn = (ASN)_InventoryFacade.GetASN(stno.Trim().ToUpper()); for (int i = 0; i < dt.Rows.Count; i++) { string stLine = dt.Rows[i][2].ToString(); asnDetail = (ASNDetail)_InventoryFacade.GetASNDetail(int.Parse(stLine), stno); if (asnDetail.Status != ASNDetail_STATUS.ASNDetail_ReceiveClose) { //更新asndetail STATUS 和 InitReceiveStatus asnDetail.InitReceiveStatus = SAP_LineStatus.SAP_LINE_REJECT; asnDetail.InitReceiveDesc = rejectReason; _InventoryFacade.UpdateASNDetail(asnDetail); object[] objs_item = _WarehouseFacade.GetASNDetailItembyStnoAndStline(asnDetail.StNo, asnDetail.StLine); if (objs_item != null) { foreach (Asndetailitem item in objs_item) { item.ReceiveQty = 0; item.QcpassQty = 0; item.ActQty = 0; _WarehouseFacade.UpdateAsndetailitem(item); } } } } asn.Status = ASN_STATUS.ASN_ReceiveRejection; asn.InitRejectQty = dt.Rows.Count; asn.InitReceiveDesc = rejectReason; _InventoryFacade.UpdateASN(asn); message = "拒收成功!"; return(true); }
public string RejectDetail(DataTable dt, string stno, string rejectResult, string rejectCount) { InventoryFacade _InventoryFacade = new InventoryFacade(DataProvider); if (dt.Rows.Count == 0) { return(stno + "无数据!"); } if (string.IsNullOrEmpty(rejectResult)) { return("拒收时必须填写拒收数量和选择拒收原因!"); } int rejectNum = 0; if (!int.TryParse(rejectCount, out rejectNum)) { return("拒收数量必须是数字!"); } ASN asn = (ASN)_InventoryFacade.GetASN(stno); if (asn == null) { return(stno + "入库指令号不存在!"); } if (asn.StType == InInvType.PGIR) { if (rejectNum != dt.Rows.Count) { return("生产退料只能全部拒收!"); } } this.DataProvider.BeginTransaction(); try { //统计已经初检完成的行数 int count = 0; ASNDetail asnDetail = null; for (int i = 0; i < dt.Rows.Count; i++) { string stLine = dt.Rows[i][2].ToString(); asnDetail = (ASNDetail)_InventoryFacade.GetASNDetail(int.Parse(stLine), stno); if (asnDetail.Status == ASNDetail_STATUS.ASNDetail_ReceiveClose) { count++; } } //如果拒收数量等于剩余待检行数量,表示剩余全部拒收 if (rejectNum == dt.Rows.Count - count) { string message = string.Empty; if (!AllReject(dt, stno, rejectResult, out message)) { return(message); } } else if (rejectNum < dt.Rows.Count - count)//否则部分拒收 { for (int i = 0; i < dt.Rows.Count; i++) { string stLine = dt.Rows[i][2].ToString(); asnDetail = (ASNDetail)_InventoryFacade.GetASNDetail(int.Parse(stLine), stno); asnDetail.InitReceiveDesc = rejectResult; _InventoryFacade.UpdateASNDetail(asnDetail); } //更新主表初检拒收数量和拒收描述 asn.InitRejectQty = rejectNum; asn.InitReceiveDesc = rejectResult; _InventoryFacade.UpdateASN(asn); } else { return("拒收数量不能大于剩余待检行记录数"); } this.DataProvider.CommitTransaction(); } catch (Exception ex) { this.DataProvider.RollbackTransaction(); throw ex; } return("拒收成功!"); }
public string GiveinDetail(DataTable dt, string stno, string giveinResult) { InventoryFacade _InventoryFacade = new InventoryFacade(this.DataProvider); WarehouseFacade _WarehouseFacade = new WarehouseFacade(this.DataProvider); if (string.IsNullOrEmpty(giveinResult)) { return("让步接收时必须填写原因"); } if (dt.Rows.Count == 0) { return(stno + "无数据"); } bool isGivein = false; ASNDetail asnDetail = null; try { ASN asn = (ASN)_InventoryFacade.GetASN(stno.Trim().ToUpper()); for (int i = 0; i < dt.Rows.Count; i++) { if (!string.IsNullOrEmpty(dt.Rows[i][0].ToString()) && dt.Rows[i][0].ToString() != "√") { continue; } string stLine = dt.Rows[i][2].ToString(); ASNDetail asnDetail1 = (ASNDetail)_InventoryFacade.GetASNDetail(int.Parse(stLine), stno); if (string.IsNullOrEmpty(asnDetail1.CartonNo)) { return("让步接收必须填写箱号!"); } if (!_WarehouseFacade.CheckAlterIncludeEQ(asn.InvNo, asnDetail1.DQMCode)) { return(asn.InvNo + ":" + ":" + asnDetail.DQMCode + "数量已超出SAP计划数量!"); } } this.DataProvider.BeginTransaction(); //算出剩余要接收的数量(入库指令行记录数减去拒收数量) for (int i = 0; i < dt.Rows.Count; i++) { if (!string.IsNullOrEmpty(dt.Rows[i][0].ToString()) && dt.Rows[i][0].ToString() != "√") { continue; } string stLine = dt.Rows[i][2].ToString(); asnDetail = (ASNDetail)_InventoryFacade.GetASNDetail(int.Parse(stLine), stno); asn = (ASN)_InventoryFacade.GetASN(stno); if (asnDetail.Status != ASNDetail_STATUS.ASNDetail_ReceiveClose) { asnDetail.InitReceiveStatus = SAP_LineStatus.SAP_LINE_GIVEIN; asnDetail.ReceiveQty = asnDetail.Qty; asnDetail.Status = ASNDetail_STATUS.ASNDetail_ReceiveClose; asnDetail.InitGIVEINDESC = giveinResult; _InventoryFacade.UpdateASNDetail(asnDetail); //接收数量(TBLASNDETAILITEM.ReceiveQTY)更新为:等于需求数量(TBLASNDETAILITEM.QTY) _InventoryFacade.UpdateASNItem(stno, stLine); asn.InitGiveInQty += 1; _InventoryFacade.UpdateASN(asn); isGivein = true; } } this.DataProvider.CommitTransaction(); if (isGivein) { return("让步接收成功!"); } return("让步接收失败没有条目需要让步接收!"); } catch (Exception ex) { this.DataProvider.RollbackTransaction(); ; throw ex; } }
public bool BindCarton2STLine(string Stline, string Stno, string cartonno, out string message) { message = string.Empty; InventoryFacade _InventoryFacade = new InventoryFacade(DataProvider); WarehouseFacade facade = new WarehouseFacade(DataProvider); int result = _InventoryFacade.GetCartonNoByStnoAndCartonNo(Stno, cartonno); switch (result) { case 1: { message = "当前STNO 箱号重复"; return(false); } case 2: { message = "此箱号在其他的入库指令号中"; return(false); } case 3: { message = "此箱号在库存中"; return(false); } } //判断箱号有没有跟其他入库单的行关联 // ASNDetail asnDetail = (ASNDetail)_InventoryFacade.GetASNDetail(int.Parse(Stline), Stno); if (!string.IsNullOrEmpty(asnDetail.CartonNo)) { message = "该行数据已有关联箱号:"; return(false); } else { if (string.IsNullOrEmpty(cartonno)) { message = "箱号不能为空"; return(false); } ASN asn = (ASN)_InventoryFacade.GetASN(Stno); int num = _InventoryFacade.GetASNDetailCountCartonNoNutNull(Stno); if (num <= asn.InitRejectQty) { message = "已经到拒收箱数,不用关联箱号"; return(false); } this.DataProvider.BeginTransaction(); try { asnDetail.CartonNo = cartonno.ToUpper(); _InventoryFacade.UpdateASNDetail(asnDetail); object[] objs = facade.GetASNDetailSNbyStnoandStline((asnDetail as ASNDetail).StNo, (asnDetail as ASNDetail).StLine); if (objs != null) { for (int i = 0; i < objs.Length; i++) { Asndetailsn a_sn = objs[i] as Asndetailsn; a_sn.Cartonno = cartonno.ToUpper(); facade.UpdateAsndetailsn(a_sn); } } this.DataProvider.CommitTransaction(); } catch (Exception ex) { this.DataProvider.RollbackTransaction(); message = "关联失败"; return(false); } message = "关联箱号成功"; return(true); } }