Exemplo n.º 1
0
        protected override DataRow GetGridRow(object obj)
        {
            DataRow     row = this.DtSource.NewRow();
            Asndetailsn s   = (Asndetailsn)obj;

            row["STNO"]     = s.Stno;
            row["CARTONNO"] = s.Cartonno;
            row["SN"]       = s.Sn;

            return(row);
        }
        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;
            }
        }
Exemplo n.º 3
0
        public string OnShelves(DataTable dt, string cartonNO, string UserCode)
        {
            WarehouseFacade facade       = null;
            InventoryFacade _Invenfacade = null;
            DBDateTime      dbTime       = FormatHelper.GetNowDBDateTime(DataProvider);
            object          obj          = null;

            if (facade == null)
            {
                facade = new WarehouseFacade(DataProvider);
            }
            if (_Invenfacade == null)
            {
                _Invenfacade = new InventoryFacade(DataProvider);
            }
            this.DataProvider.BeginTransaction();
            try
            {
                string Stno = string.Empty;
                for (int j = 0; j < dt.Rows.Count; j++)
                {
                    obj = facade.GetAsndetail(int.Parse(dt.Rows[j]["stline"].ToString()), dt.Rows[j]["stno"].ToString());
                    if (obj != null)
                    {
                        Stno = (obj as Asndetail).Stno;
                        #region 更新asndetail表 更新actqty和状态
                        //update actqty and status
                        Asndetail asndetail = obj as Asndetail;
                        asndetail.ActQty       = asndetail.QcpassQty;
                        asndetail.Status       = ASNDetail_STATUS.ASNDetail_Close;
                        asndetail.MaintainDate = dbTime.DBDate;
                        asndetail.MaintainTime = dbTime.DBTime;
                        asndetail.MaintainUser = UserCode;
                        facade.UpdateAsndetail(asndetail);
                        #endregion
                        #region 更新asndetailitem表 更新 actqty 和更新invoicedetail表,更新actqty
                        object[] itemobjs = facade.GetASNDetailItembyStnoAndStline(asndetail.Stno, asndetail.Stline.ToString());
                        if (itemobjs != null)
                        {
                            for (int i = 0; i < itemobjs.Length; i++)
                            {
                                Asndetailitem asnitem = itemobjs[i] as Asndetailitem;
                                asnitem.ActQty       = asnitem.QcpassQty;
                                asnitem.MaintainDate = dbTime.DBDate;
                                asnitem.MaintainTime = dbTime.DBTime;
                                asnitem.MaintainUser = UserCode;
                                facade.UpdateAsndetailitem(asnitem);

                                object         invoiobj = _Invenfacade.GetInvoicesDetail(asnitem.Invno, int.Parse(asnitem.Invline));
                                InvoicesDetail inv      = invoiobj as InvoicesDetail;
                                inv.ActQty      += Convert.ToInt32(asnitem.QcpassQty);
                                inv.MaintainDate = dbTime.DBDate;
                                inv.MaintainTime = dbTime.DBTime;
                                inv.MaintainUser = UserCode;

                                _Invenfacade.UpdateInvoicesDetail(inv);
                            }
                        }
                        #endregion

                        //新增数据tblstoragedetail
                        object asnobj = facade.GetAsn(asndetail.Stno);
                        if (asnobj == null)
                        {
                            this.DataProvider.RollbackTransaction();
                            // WebInfoPublish.Publish(this, "$Error_ASN_NO_DATA", this.languageComponent1);

                            return("ASN 中没有数据:" + asndetail.Stno);
                        }
                        Asn asn = asnobj as Asn;
                        #region 在storagedetail表中增加一条数据
                        StorageDetail stordetail = _Invenfacade.CreateNewStorageDetail();
                        stordetail.AvailableQty       = asndetail.ActQty;
                        stordetail.CartonNo           = asndetail.Cartonno;
                        stordetail.CDate              = dbTime.DBDate;
                        stordetail.CTime              = dbTime.DBTime;
                        stordetail.CUser              = UserCode;
                        stordetail.DQMCode            = asndetail.DqmCode;
                        stordetail.FacCode            = (asnobj as Asn).FacCode;
                        stordetail.FreezeQty          = 0;
                        stordetail.LastStorageAgeDate = dbTime.DBDate;

                        stordetail.LocationCode   = FormatHelper.PKCapitalFormat(FormatHelper.CleanString(cartonNO));
                        stordetail.Lotno          = asndetail.Lotno;
                        stordetail.MaintainDate   = dbTime.DBDate;
                        stordetail.MaintainTime   = dbTime.DBTime;
                        stordetail.MaintainUser   = UserCode;
                        stordetail.MCode          = asndetail.MCode;
                        stordetail.MDesc          = asndetail.MDesc;
                        stordetail.ProductionDate = asndetail.Production_Date;

                        stordetail.ReworkApplyUser = (asnobj as Asn).ReworkapplyUser;
                        stordetail.StorageAgeDate  = string.IsNullOrEmpty(asndetail.StorageageDate.ToString()) ? dbTime.DBDate : int.Parse(asndetail.StorageageDate);
                        stordetail.StorageCode     = (asnobj as Asn).StorageCode;
                        stordetail.StorageQty      = asndetail.ActQty;
                        stordetail.SupplierLotNo   = asndetail.Supplier_lotno;
                        stordetail.Unit            = asndetail.Unit;

                        _Invenfacade.AddStorageDetail(stordetail);
                        #endregion
                        #region 在StorageDetailSN表中增加数据
                        //新增数据tblStorageDetailSN

                        object[] snobj = facade.GetASNDetailSNbyStnoandStline(asndetail.Stno, asndetail.Stline.ToString());
                        if (snobj == null)
                        {
                            this.DataProvider.RollbackTransaction();
                            // WebInfoPublish.Publish(this, "$Error_ASNDetail_NO_DATA", this.languageComponent1);

                            return("ASNDetail表中没有数据:" + asndetail.Stno + "/" + asndetail.Stline.ToString());
                        }
                        for (int i = 0; i < snobj.Length; i++)
                        {
                            StorageDetailSN storDetailSN = _Invenfacade.CreateNewStorageDetailSN();
                            Asndetailsn     detailSN     = snobj[i] as Asndetailsn;
                            storDetailSN.CartonNo     = detailSN.Cartonno;
                            storDetailSN.CDate        = dbTime.DBDate;
                            storDetailSN.CTime        = dbTime.DBTime;
                            storDetailSN.CUser        = UserCode;
                            storDetailSN.MaintainDate = dbTime.DBDate;
                            storDetailSN.MaintainTime = dbTime.DBTime;
                            storDetailSN.MaintainUser = UserCode;
                            storDetailSN.PickBlock    = "N";
                            storDetailSN.SN           = detailSN.Sn;

                            _Invenfacade.AddStorageDetailSN(storDetailSN);
                        }
                        #endregion
                        #region 在invinouttrans表中增加一条数据
                        InvInOutTrans trans = facade.CreateNewInvInOutTrans();
                        trans.CartonNO        = asndetail.Cartonno;
                        trans.DqMCode         = asndetail.DqmCode;
                        trans.FacCode         = asn.FacCode;
                        trans.FromFacCode     = asn.FromfacCode;
                        trans.FromStorageCode = asn.FromstorageCode;
                        trans.InvNO           = asn.Invno;
                        trans.InvType         = asn.StType;
                        trans.LotNo           = asndetail.Lotno;
                        trans.MaintainDate    = dbTime.DBDate;
                        trans.MaintainTime    = dbTime.DBTime;
                        trans.MaintainUser    = UserCode;
                        trans.MCode           = asndetail.MCode;
                        trans.ProductionDate  = asndetail.Production_Date;
                        trans.Qty             = asndetail.ActQty;
                        trans.Serial          = 0;
                        trans.StorageAgeDate  = int.Parse(asndetail.StorageageDate);
                        trans.StorageCode     = asn.StorageCode;
                        trans.SupplierLotNo   = asndetail.Supplier_lotno;
                        trans.TransNO         = asn.Stno;
                        trans.TransType       = "IN";
                        trans.Unit            = asndetail.Unit;
                        facade.AddInvInOutTrans(trans);
                        #endregion
                    }
                }
                #region   架完成后,检查这个stno在asndetail中的状态是否都是close,cancel,如果是将asn表的状态更新为close,cancel
                if (facade.JudgeASNDetailStatus(Stno, ASNDetail_STATUS.ASNDetail_Close))
                {
                    object asnobj = facade.GetAsn(Stno);
                    if (asnobj == null)
                    {
                        this.DataProvider.RollbackTransaction();
                        //WebInfoPublish.Publish(this, "$Error_ASN_NO_DATA", this.languageComponent1);

                        return("ASN 中没有数据:" + Stno);
                    }
                    Asn asn = asnobj as Asn;
                    asn.Status       = ASN_STATUS.ASN_Close;
                    asn.MaintainDate = dbTime.DBDate;
                    asn.MaintainTime = dbTime.DBTime;
                    asn.MaintainUser = UserCode;

                    facade.UpdateAsn(asn);
                }
                if (facade.JudgeASNDetailStatus(Stno, ASNDetail_STATUS.ASNDetail_Cancel))
                {
                    object asnobj = facade.GetAsn(Stno);
                    if (asnobj == null)
                    {
                        this.DataProvider.RollbackTransaction();
                        //WebInfoPublish.Publish(this, "$Error_ASN_NO_DATA", this.languageComponent1);

                        return("ASN中没有数据:" + Stno);
                    }
                    Asn asn = asnobj as Asn;
                    asn.Status       = ASN_STATUS.ASN_Cancel;
                    asn.MaintainDate = dbTime.DBDate;
                    asn.MaintainTime = dbTime.DBTime;
                    asn.MaintainUser = UserCode;

                    facade.UpdateAsn(asn);
                }
                #endregion
                #region  通过入库指令号,查找invno,检查actqty是否等于planqty,如果等于将finishflag=Y
                object asnobj1 = facade.GetAsn(Stno);
                if (asnobj1 == null)
                {
                    this.DataProvider.RollbackTransaction();
                    //WebInfoPublish.Publish(this, "$Error_ASN_NO_DATA", this.languageComponent1);

                    return("ASN中没有数据:" + Stno);
                }
                Asn asn1 = asnobj1 as Asn;
                if (facade.JudgeInvoiceDetailStatus(asn1.Invno))
                {
                    object invobj = _Invenfacade.GetInvoices(asn1.Invno);
                    if (invobj == null)
                    {
                        this.DataProvider.RollbackTransaction();
                        //WebInfoPublish.Publish(this, "$Error_INV_NO_DATA", this.languageComponent1);

                        return("INV中没有数据:" + asn1.Invno);
                    }
                    Invoices inv = invobj as Invoices;
                    inv.FinishFlag   = "Y";
                    inv.MaintainDate = dbTime.DBDate;
                    inv.MaintainTime = dbTime.DBTime;
                    inv.MaintainUser = UserCode;
                    _Invenfacade.UpdateInvoices(inv);
                }
                #endregion

                this.DataProvider.CommitTransaction();
            }
            catch (Exception ex)
            {
                this.DataProvider.RollbackTransaction();
            }

            return("上架成功");
        }
Exemplo n.º 4
0
        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);
                }
            }
        }
Exemplo n.º 5
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);
            }
        }