コード例 #1
0
        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;
            }
        }
コード例 #2
0
        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;
            }
        }
コード例 #3
0
        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;
            }
        }
コード例 #4
0
        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;
            }
        }
コード例 #5
0
ファイル: IQCCommand.asmx.cs プロジェクト: windygu/.net-wms
        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;
            }
        }
コード例 #6
0
ファイル: IQCCommand.asmx.cs プロジェクト: windygu/.net-wms
        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);
                }
            }
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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("拒收成功!");
        }
コード例 #9
0
        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;
            }
        }
コード例 #10
0
        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);
            }
        }