コード例 #1
0
 public void RemoveOrderLocationTransaction(OrderLocationTransaction orderLocationTransaction)
 {
     if (this.OrderLocationTransactions != null)
     {
         this.OrderLocationTransactions.Remove(orderLocationTransaction);
     }
 }
コード例 #2
0
        public override void CreateByMaterial(ByMaterial byMaterial)
        {
            #region ¼ì²éOrderºÍItem
            DetachedCriteria criteria = DetachedCriteria.For(typeof(OrderLocationTransaction));
            criteria.CreateAlias("OrderDetail", "od");
            criteria.CreateAlias("od.OrderHead", "oh");
            criteria.Add(Expression.Eq("Item.Code", byMaterial.Item.Code));
            criteria.Add(Expression.Eq("oh.OrderNo", byMaterial.OrderNo));
            criteria.Add(Expression.Eq("oh.Type", BusinessConstants.CODE_MASTER_ORDER_TYPE_VALUE_PRODUCTION));
            criteria.Add(Expression.Eq("oh.Status", BusinessConstants.CODE_MASTER_STATUS_VALUE_INPROCESS));
            criteria.Add(Expression.Eq("TransactionType", BusinessConstants.CODE_MASTER_LOCATION_TRANSACTION_TYPE_VALUE_ISS_WO));
            criteria.Add(Expression.Eq("TagNo", byMaterial.TagNo));
            IList <OrderLocationTransaction> orderLocTransList = criteriaMgr.FindAll <OrderLocationTransaction>(criteria);

            if (orderLocTransList.Count == 0)
            {
                throw new BusinessErrorException("Mes.ByMaterial.OrderItem.NotExist");
            }
            #endregion
            else
            {
                OrderLocationTransaction ol = orderLocTransList[0];
                ol.Cartons = ol.Cartons + 1;
                base.CreateByMaterial(byMaterial);
            }
        }
コード例 #3
0
        public static Transformer ConvertOrderLocationTransactionToTransformer(OrderLocationTransaction orderLocationTransaction)
        {
            if (orderLocationTransaction == null)
            {
                return(null);
            }

            Transformer transformer = new Transformer();

            transformer.OrderLocTransId   = orderLocationTransaction.Id;
            transformer.OrderNo           = orderLocationTransaction.OrderDetail.OrderHead.OrderNo;
            transformer.Sequence          = orderLocationTransaction.OrderDetail.Sequence;
            transformer.ItemCode          = orderLocationTransaction.OrderDetail.Item.Code;
            transformer.ItemDescription   = orderLocationTransaction.Item.Description;
            transformer.ReferenceItemCode = orderLocationTransaction.OrderDetail.ReferenceItemCode;
            transformer.UomCode           = orderLocationTransaction.OrderDetail.Uom.Code;
            transformer.UnitCount         = orderLocationTransaction.OrderDetail.UnitCount;
            transformer.LocationFromCode  = orderLocationTransaction.OrderDetail.DefaultLocationFrom != null ?
                                            orderLocationTransaction.OrderDetail.DefaultLocationFrom.Code : null;
            transformer.LocationToCode = orderLocationTransaction.OrderDetail.DefaultLocationTo != null ?
                                         orderLocationTransaction.OrderDetail.DefaultLocationTo.Code : null;
            transformer.OrderedQty    = orderLocationTransaction.OrderDetail.OrderedQty;
            transformer.ShippedQty    = orderLocationTransaction.OrderDetail.ShippedQty.HasValue ? orderLocationTransaction.OrderDetail.ShippedQty.Value : 0;
            transformer.ReceivedQty   = orderLocationTransaction.OrderDetail.ReceivedQty.HasValue ? orderLocationTransaction.OrderDetail.ReceivedQty.Value : 0;
            transformer.OddShipOption = orderLocationTransaction.OrderDetail.OddShipOption;
            return(transformer);
        }
コード例 #4
0
        public static Transformer ConvertOrderLocationTransactionToTransformer(OrderLocationTransaction orderLocationTransaction)
        {
            if (orderLocationTransaction == null)
                return null;

            Transformer transformer = new Transformer();
            transformer.OrderLocTransId = orderLocationTransaction.Id;
            transformer.OrderNo = orderLocationTransaction.OrderDetail.OrderHead.OrderNo;
            transformer.Sequence = orderLocationTransaction.OrderDetail.Sequence;
            transformer.ItemCode = orderLocationTransaction.OrderDetail.Item.Code;
            transformer.ItemDescription = orderLocationTransaction.Item.Description;

            transformer.ItemBrand = orderLocationTransaction.Item.Brand;
            transformer.ItemSpec = orderLocationTransaction.Item.Spec;
            if (orderLocationTransaction.Item.ItemCategory != null)
            {
                transformer.ItemCategoryCode = orderLocationTransaction.Item.ItemCategory.Code;
                transformer.ItemCategoryDesc1 = orderLocationTransaction.Item.ItemCategory.Desc1;
                transformer.ItemCategoryDesc2 = orderLocationTransaction.Item.ItemCategory.Desc2;
            }

            transformer.ReferenceItemCode = orderLocationTransaction.OrderDetail.ReferenceItemCode;
            transformer.UomCode = orderLocationTransaction.OrderDetail.Uom.Code;
            transformer.UnitCount = orderLocationTransaction.OrderDetail.UnitCount;
            transformer.LocationFromCode = orderLocationTransaction.OrderDetail.DefaultLocationFrom != null ?
                orderLocationTransaction.OrderDetail.DefaultLocationFrom.Code : null;
            transformer.LocationToCode = orderLocationTransaction.OrderDetail.DefaultLocationTo != null ?
                orderLocationTransaction.OrderDetail.DefaultLocationTo.Code : null;
            transformer.OrderedQty = orderLocationTransaction.OrderDetail.OrderedQty;
            transformer.ShippedQty = orderLocationTransaction.OrderDetail.ShippedQty.HasValue ? orderLocationTransaction.OrderDetail.ShippedQty.Value : 0;
            transformer.ReceivedQty = orderLocationTransaction.OrderDetail.ReceivedQty.HasValue ? orderLocationTransaction.OrderDetail.ReceivedQty.Value : 0;
            transformer.OddShipOption = orderLocationTransaction.OrderDetail.OddShipOption;
            return transformer;
        }
コード例 #5
0
        public void RecordLocationTransaction(OrderLocationTransaction orderLocationTransaction, InventoryTransaction inventoryTransaction, InProcessLocation inProcessLocation, User user)
        {
            LocationTransaction locationTransaction = GenerateOrderLocationTransaction(orderLocationTransaction, inventoryTransaction.Location, user);

            if (inventoryTransaction.Hu != null)
            {
                locationTransaction.HuId  = inventoryTransaction.Hu.HuId;
                locationTransaction.LotNo = inventoryTransaction.Hu.LotNo;
            }
            if (locationTransaction.LotNo == null || locationTransaction.LotNo == string.Empty)
            {
                locationTransaction.LotNo = inventoryTransaction.LotNo;
            }
            locationTransaction.BatchNo       = inventoryTransaction.LocationLotDetailId;
            locationTransaction.IpNo          = inProcessLocation.IpNo;
            locationTransaction.Qty           = inventoryTransaction.Qty;
            locationTransaction.EffectiveDate = DateTime.Parse(inProcessLocation.CreateDate.ToString("yyyy-MM-dd"));

            if (inventoryTransaction.Location.Code == BusinessConstants.SYSTEM_LOCATION_REJECT)
            {
                locationTransaction.RefLocation = inventoryTransaction.RefLocation;
            }

            this.CreateLocationTransaction(locationTransaction);
        }
コード例 #6
0
        public void RecordLocationTransaction(OrderLocationTransaction orderLocationTransaction, InventoryTransaction inventoryTransaction, Receipt receipt, User user)
        {
            LocationTransaction locationTransaction = GenerateOrderLocationTransaction(orderLocationTransaction, orderLocationTransaction.Location, user);

            if (inventoryTransaction.Hu != null)
            {
                locationTransaction.HuId = inventoryTransaction.Hu.HuId;
                locationTransaction.LotNo = inventoryTransaction.Hu.LotNo;
            }
            if (locationTransaction.LotNo == null || locationTransaction.LotNo == string.Empty)
            {
                locationTransaction.LotNo = inventoryTransaction.LotNo;
            }
            locationTransaction.BatchNo = inventoryTransaction.LocationLotDetailId;
            locationTransaction.ReceiptNo = receipt.ReceiptNo;
            locationTransaction.IpNo = receipt.ReferenceIpNo;
            locationTransaction.Qty = inventoryTransaction.Qty;
            locationTransaction.EffectiveDate = DateTime.Parse(receipt.CreateDate.ToString("yyyy-MM-dd"));
            if (orderLocationTransaction.OrderDetail.OrderHead.Type == BusinessConstants.CODE_MASTER_ORDER_TYPE_VALUE_TRANSFER)
            {
                OrderLocationTransaction outOrderLocationTransaction = this.orderLocationTransactionMgrE.GetOrderLocationTransaction(orderLocationTransaction.OrderDetail.Id, BusinessConstants.IO_TYPE_OUT)[0];
                locationTransaction.RefLocation = outOrderLocationTransaction.Location.Code;
                locationTransaction.RefLocationName = outOrderLocationTransaction.Location.Name;
            }

            this.CreateLocationTransaction(locationTransaction);
        }
コード例 #7
0
        public IList <ReceiptDetail> CreateReceiptDetail(Receipt receipt, OrderLocationTransaction inOrderLocationTransaction, IList <Hu> huList)
        {
            IList <ReceiptDetail> receiptDetailList = new List <ReceiptDetail>();

            foreach (Hu hu in huList)
            {
                ReceiptDetail receiptDetail = new ReceiptDetail();
                receiptDetail.Receipt = receipt;
                receiptDetail.OrderLocationTransaction = inOrderLocationTransaction;
                receiptDetail.HuId  = hu.HuId;
                receiptDetail.LotNo = hu.LotNo;

                //根据hu的质量标记判断是正品还是次品
                if (hu.QualityLevel == BusinessConstants.CODE_MASTER_ITEM_QUALITY_LEVEL_VALUE_1)
                {
                    //先乘Hu.UnitQty转为基本单位,在除outOrderLocationTransaction.UnitQty转为订单单位。
                    receiptDetail.ReceivedQty = hu.Qty * hu.UnitQty / inOrderLocationTransaction.UnitQty;
                }
                else if (hu.QualityLevel == BusinessConstants.CODE_MASTER_ITEM_QUALITY_LEVEL_VALUE_2)
                {
                    receiptDetail.RejectedQty = hu.Qty * hu.UnitQty / inOrderLocationTransaction.UnitQty;
                }
                else
                {
                    throw new TechnicalException("hu quality level:" + hu.QualityLevel + " not valided");
                }

                this.CreateReceiptDetail(receiptDetail);

                receiptDetailList.Add(receiptDetail);
                receipt.AddReceiptDetail(receiptDetail);
            }

            return(receiptDetailList);
        }
コード例 #8
0
    public void InitPageParameter(string itemCode)
    {
        OrderLocationTransaction currentOrderLocTrans = TheOrderLocationTransactionMgr.LoadOrderLocationTransaction(this.LocTransId);
        OrderHead orderHead = currentOrderLocTrans.OrderDetail.OrderHead;
        //IList<BomDetail> bomDetailList = new List<BomDetail>();
        IList <BomDetail> bomDetailList = TheBomDetailMgr.GetBomDetailListForAbstractItem(itemCode, orderHead.Routing, orderHead.StartTime, currentOrderLocTrans.OrderDetail.DefaultLocationFrom);

        IList <OrderLocationTransaction> orderLocTransList = new List <OrderLocationTransaction>();

        // OrderLocationTransaction orderLocTrans = OrderLocationTransactionMgr.LoadOrderLocationTransaction(this.LocTransId);

        foreach (BomDetail bomDetail in bomDetailList)
        {
            OrderLocationTransaction newOrderLocTrans = TheOrderLocationTransactionMgr.LoadOrderLocationTransaction(this.LocTransId);
            newOrderLocTrans.Id                  = 0;
            newOrderLocTrans.Item                = bomDetail.Item;
            newOrderLocTrans.Uom                 = bomDetail.Item.Uom;
            newOrderLocTrans.BomDetail           = bomDetail;
            newOrderLocTrans.Operation           = bomDetail.Operation;
            newOrderLocTrans.Location            = bomDetail.Location;
            newOrderLocTrans.OrderedQty          = newOrderLocTrans.OrderedQty * bomDetail.RateQty;
            newOrderLocTrans.AccumulateQty       = newOrderLocTrans.AccumulateQty == null ? null : newOrderLocTrans.AccumulateQty * bomDetail.RateQty;
            newOrderLocTrans.AccumulateRejectQty = newOrderLocTrans.AccumulateRejectQty == null ? null : newOrderLocTrans.AccumulateRejectQty * bomDetail.RateQty;
            newOrderLocTrans.AccumulateScrapQty  = newOrderLocTrans.AccumulateScrapQty == null ? null : newOrderLocTrans.AccumulateScrapQty * bomDetail.RateQty;

            orderLocTransList.Add(newOrderLocTrans);
        }
        this.OrderLocTransList  = orderLocTransList;
        this.GV_List.DataSource = orderLocTransList;
        this.GV_List.DataBind();
    }
コード例 #9
0
        public IList<ReceiptDetail> CreateReceiptDetail(Receipt receipt, OrderLocationTransaction inOrderLocationTransaction, IList<Hu> huList)
        {
            IList<ReceiptDetail> receiptDetailList = new List<ReceiptDetail>();

            foreach (Hu hu in huList)
            {
                ReceiptDetail receiptDetail = new ReceiptDetail();
                receiptDetail.Receipt = receipt;
                receiptDetail.OrderLocationTransaction = inOrderLocationTransaction;
                receiptDetail.HuId = hu.HuId;
                receiptDetail.LotNo = hu.LotNo;

                //����hu����������ж�����Ʒ���Ǵ�Ʒ
                if (hu.QualityLevel == BusinessConstants.CODE_MASTER_ITEM_QUALITY_LEVEL_VALUE_1)
                {
                    //�ȳ�Hu.UnitQtyתΪ������λ���ڳ�outOrderLocationTransaction.UnitQtyתΪ������λ��
                    receiptDetail.ReceivedQty = hu.Qty * hu.UnitQty / inOrderLocationTransaction.UnitQty;
                }
                else if (hu.QualityLevel == BusinessConstants.CODE_MASTER_ITEM_QUALITY_LEVEL_VALUE_2)
                {
                    receiptDetail.RejectedQty = hu.Qty * hu.UnitQty / inOrderLocationTransaction.UnitQty;
                }
                else
                {
                    throw new TechnicalException("hu quality level:" + hu.QualityLevel + " not valided");
                }

                this.CreateReceiptDetail(receiptDetail);

                receiptDetailList.Add(receiptDetail);
                receipt.AddReceiptDetail(receiptDetail);
            }

            return receiptDetailList;
        }
コード例 #10
0
        public void RecordLocationTransaction(OrderLocationTransaction orderLocationTransaction, InventoryTransaction inventoryTransaction, Receipt receipt, User user)
        {
            LocationTransaction locationTransaction = GenerateOrderLocationTransaction(orderLocationTransaction, orderLocationTransaction.Location, user);

            if (inventoryTransaction.Hu != null)
            {
                locationTransaction.HuId  = inventoryTransaction.Hu.HuId;
                locationTransaction.LotNo = inventoryTransaction.Hu.LotNo;
            }
            if (locationTransaction.LotNo == null || locationTransaction.LotNo == string.Empty)
            {
                locationTransaction.LotNo = inventoryTransaction.LotNo;
            }
            locationTransaction.BatchNo       = inventoryTransaction.LocationLotDetailId;
            locationTransaction.RefLocation   = inventoryTransaction.RefLocation;
            locationTransaction.ReceiptNo     = receipt.ReceiptNo;
            locationTransaction.IpNo          = receipt.ReferenceIpNo;
            locationTransaction.Qty           = inventoryTransaction.Qty;
            locationTransaction.EffectiveDate = DateTime.Parse(receipt.CreateDate.ToString("yyyy-MM-dd"));
            if (orderLocationTransaction.OrderDetail.OrderHead.Type == BusinessConstants.CODE_MASTER_ORDER_TYPE_VALUE_TRANSFER)
            {
                OrderLocationTransaction outOrderLocationTransaction = this.orderLocationTransactionMgr.GetOrderLocationTransaction(orderLocationTransaction.OrderDetail.Id, BusinessConstants.IO_TYPE_OUT)[0];
                locationTransaction.RefLocation     = outOrderLocationTransaction.Location.Code;
                locationTransaction.RefLocationName = outOrderLocationTransaction.Location.Name;
            }

            this.CreateLocationTransaction(locationTransaction);
        }
コード例 #11
0
        public override void CreateReceiptDetail(ReceiptDetail receiptDetail)
        {
            #region 记录发货明细上的收货数量
            OrderLocationTransaction inOrderLocationTransaction = receiptDetail.OrderLocationTransaction;
            OrderDetail orderDetail = inOrderLocationTransaction.OrderDetail;
            OrderHead   orderHead   = orderDetail.OrderHead;
            if (receiptDetail.ReceivedInProcessLocationDetail != null)
            {
                //如果已经在收货时做过匹配,直接把收货数记录到匹配的InProcessLocationDetail记录上
                InProcessLocationDetail inProcessLocationDetail = this.inProcessLocationDetailMgr.LoadInProcessLocationDetail(receiptDetail.ReceivedInProcessLocationDetail.Id);
                if (inProcessLocationDetail.ReceivedQty.HasValue)
                {
                    inProcessLocationDetail.ReceivedQty += receiptDetail.ReceivedQty;
                }
                else
                {
                    inProcessLocationDetail.ReceivedQty = receiptDetail.ReceivedQty;
                }
                this.inProcessLocationDetailMgr.UpdateInProcessLocationDetail(inProcessLocationDetail);
            }
            else if (orderHead.Type != BusinessConstants.CODE_MASTER_ORDER_TYPE_VALUE_PRODUCTION) //生产不需要记录收货数量
            {
                #region 找到对应的发货单IpNo
                OrderLocationTransaction outOrderLocationTransaction = this.orderLocationTransactionMgr.GetOrderLocationTransaction(orderDetail.Id, BusinessConstants.IO_TYPE_OUT)[0];

                DetachedCriteria criteria = DetachedCriteria.For <ReceiptInProcessLocation>();
                criteria.SetProjection(Projections.Property("InProcessLocation.IpNo"));
                criteria.Add(Expression.Eq("Receipt.ReceiptNo", receiptDetail.Receipt.ReceiptNo));

                IList  list = this.criteriaMgr.FindAll(criteria);
                string ipNo = (string)list[0];
                #endregion

                IList <InProcessLocationDetail> inProcessLocationDetailList = this.inProcessLocationDetailMgr.GetInProcessLocationDetail(ipNo, outOrderLocationTransaction.Id);
                if (inProcessLocationDetailList == null || inProcessLocationDetailList.Count == 0)
                {
                    throw new TechnicalException("can't find InProcessLocationDetail by ipno and outOrderLocationTransactionId");
                }
                else if (inProcessLocationDetailList.Count == 1)
                {
                    if (inProcessLocationDetailList[0].ReceivedQty.HasValue)
                    {
                        inProcessLocationDetailList[0].ReceivedQty += receiptDetail.ReceivedQty;
                    }
                    else
                    {
                        inProcessLocationDetailList[0].ReceivedQty = receiptDetail.ReceivedQty;
                    }
                    this.inProcessLocationDetailMgr.UpdateInProcessLocationDetail(inProcessLocationDetailList[0]);
                }
                else
                {
                    throw new NotImplementedException("Find serverl InProcessLocationDetails by ipno and outOrderLocationTransactionId, not impl yet.");
                }
            }
            #endregion

            this.entityDao.CreateReceiptDetail(receiptDetail);
        }
コード例 #12
0
        public void AddOrderLocationTransaction(OrderLocationTransaction orderLocationTransaction)
        {
            if (this.OrderLocationTransactions == null)
            {
                this.OrderLocationTransactions = new List<OrderLocationTransaction>();
            }

            this.OrderLocationTransactions.Add(orderLocationTransaction);
        }
コード例 #13
0
        private void GetLoctransInfo(DssExportHistory dssExportHistory)
        {
            OrderLocationTransaction orderLocationTransaction =
                commonOutboundMgr.GetOrderLocationTransactionInfo(dssExportHistory.OrderNo, dssExportHistory.Item, BusinessConstants.IO_TYPE_IN);

            if (orderLocationTransaction != null)
            {
                dssExportHistory.Location = orderLocationTransaction.Location != null ? orderLocationTransaction.Location.Code : null; //收货库位
                dssExportHistory.PartyTo  = orderLocationTransaction.OrderDetail.OrderHead.PartyTo.Code;                               //收货区域
            }
        }
コード例 #14
0
 public void ClearOldRelation(ItemFlowPlanDetail mstrIfpd, ItemFlowPlanDetail refIfpd, OrderLocationTransaction orderLocTrans)
 {
     IList<ItemFlowPlanTrack> ifptList = this.GetItemFlowPlanTrackList(mstrIfpd, refIfpd, orderLocTrans);
     if (ifptList != null && ifptList.Count > 0)
     {
         foreach (ItemFlowPlanTrack ifpt in ifptList)
         {
             this.DeleteItemFlowPlanTrack(ifpt);
         }
     }
 }
コード例 #15
0
        public IList<ItemFlowPlanTrack> GetItemFlowPlanTrackList(ItemFlowPlanDetail mstrIfpd, ItemFlowPlanDetail refIfpd, OrderLocationTransaction orderLocTrans)
        {
            DetachedCriteria criteria = DetachedCriteria.For(typeof(ItemFlowPlanTrack));
            if (mstrIfpd != null)
                criteria.Add(Expression.Eq("ItemFlowPlanDetail.Id", mstrIfpd.Id));
            if (refIfpd != null)
                criteria.Add(Expression.Eq("ReferencePlanDetail.Id", refIfpd.Id));
            if (orderLocTrans != null)
                criteria.Add(Expression.Eq("OrderLocationTransaction.Id", orderLocTrans.Id));

            return CriteriaMgr.FindAll<ItemFlowPlanTrack>(criteria);
        }
コード例 #16
0
        public void RecordWOBackflushLocationTransaction(OrderLocationTransaction orderLocationTransaction, string huId, string lotNo, decimal qty, string ipNo, User user, Location locFrom)
        {
            LocationTransaction locationTransaction = new LocationTransaction();

            OrderDetail orderDetail = orderLocationTransaction.OrderDetail;
            OrderHead   orderHead   = orderDetail.OrderHead;
            string      prodline    = orderHead.Flow;

            locationTransaction.OrderNo       = orderHead.OrderNo;
            locationTransaction.OrderDetailId = orderDetail.Id;
            locationTransaction.OrderLocationTransactionId = orderLocationTransaction.Id;
            locationTransaction.ExternalOrderNo            = orderHead.ExternalOrderNo;
            locationTransaction.ReferenceOrderNo           = orderHead.ReferenceOrderNo;
            locationTransaction.IpNo = ipNo;
            //locationTransaction.ReceiptNo =
            //locationTransaction.TransactionType = orderLocationTransaction.TransactionType;
            locationTransaction.TransactionType = BusinessConstants.CODE_MASTER_LOCATION_TRANSACTION_TYPE_VALUE_ISS_WO_BF; //投料回冲事务写死 ISS-WO-BF
            locationTransaction.Item            = orderLocationTransaction.Item.Code;
            locationTransaction.ItemDescription = orderLocationTransaction.Item.Description;
            locationTransaction.Uom             = orderLocationTransaction.Item.Uom.Code;
            //locationTransaction.Qty =
            locationTransaction.PartyFrom          = orderHead.PartyFrom.Code;
            locationTransaction.PartyFromName      = orderHead.PartyFrom.Name;
            locationTransaction.PartyTo            = orderHead.PartyTo.Code;
            locationTransaction.PartyToName        = orderHead.PartyTo.Name;
            locationTransaction.ShipFrom           = orderHead.ShipFrom != null ? orderHead.ShipFrom.Code : null;
            locationTransaction.ShipFromAddress    = orderHead.ShipFrom != null ? orderHead.ShipFrom.Address : null;
            locationTransaction.ShipTo             = orderHead.ShipTo != null ? orderHead.ShipTo.Code : null;
            locationTransaction.ShipToAddress      = orderHead.ShipTo != null ? orderHead.ShipTo.Address : null;
            locationTransaction.Location           = prodline;
            locationTransaction.LocationName       = prodline;
            locationTransaction.DockDescription    = orderHead.DockDescription;
            locationTransaction.Carrier            = orderHead.Carrier != null ? orderHead.Carrier.Code : null;
            locationTransaction.CarrierBillCode    = orderHead.CarrierBillAddress != null ? orderHead.CarrierBillAddress.Code : null;
            locationTransaction.CarrierBillAddress = orderHead.CarrierBillAddress != null ? orderHead.CarrierBillAddress.Address : null;
            locationTransaction.CreateDate         = DateTime.Now;
            locationTransaction.CreateUser         = user.Code;
            if (huId != null && huId.Trim() != string.Empty)
            {
                locationTransaction.HuId = huId;
            }
            if (lotNo != null && lotNo.Trim() != string.Empty)
            {
                locationTransaction.LotNo = lotNo;
            }
            locationTransaction.Qty             = 0 - qty;
            locationTransaction.EffectiveDate   = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
            locationTransaction.RefLocation     = locFrom.Code;
            locationTransaction.RefLocationName = locFrom.Name;

            this.CreateLocationTransaction(locationTransaction);
        }
コード例 #17
0
        public void RecordWOBackflushLocationTransaction(OrderLocationTransaction orderLocationTransaction, string huId, string lotNo, decimal qty, string ipNo, User user, Location locFrom)
        {
            LocationTransaction locationTransaction = new LocationTransaction();

            OrderDetail orderDetail = orderLocationTransaction.OrderDetail;
            OrderHead orderHead = orderDetail.OrderHead;
            string prodline = orderHead.Flow;

            locationTransaction.OrderNo = orderHead.OrderNo;            
            locationTransaction.OrderDetailId = orderDetail.Id;
            locationTransaction.OrderLocationTransactionId = orderLocationTransaction.Id;
            locationTransaction.ExternalOrderNo = orderHead.ExternalOrderNo;
            locationTransaction.ReferenceOrderNo = orderHead.ReferenceOrderNo;
            locationTransaction.IpNo = ipNo;
            //locationTransaction.ReceiptNo = 
            //locationTransaction.TransactionType = orderLocationTransaction.TransactionType;
            locationTransaction.TransactionType = BusinessConstants.CODE_MASTER_LOCATION_TRANSACTION_TYPE_VALUE_ISS_WO_BF; //投料回冲事务写死 ISS-WO-BF
            locationTransaction.Item = orderLocationTransaction.Item.Code;
            locationTransaction.ItemDescription = orderLocationTransaction.Item.Description;
            locationTransaction.Uom = orderLocationTransaction.Item.Uom.Code;
            //locationTransaction.Qty = 
            locationTransaction.PartyFrom = orderHead.PartyFrom.Code;
            locationTransaction.PartyFromName = orderHead.PartyFrom.Name;
            locationTransaction.PartyTo = orderHead.PartyTo.Code;
            locationTransaction.PartyToName = orderHead.PartyTo.Name;
            locationTransaction.ShipFrom = orderHead.ShipFrom != null ? orderHead.ShipFrom.Code : null;
            locationTransaction.ShipFromAddress = orderHead.ShipFrom != null ? orderHead.ShipFrom.Address : null;
            locationTransaction.ShipTo = orderHead.ShipTo != null ? orderHead.ShipTo.Code : null;
            locationTransaction.ShipToAddress = orderHead.ShipTo != null ? orderHead.ShipTo.Address : null;
            locationTransaction.Location = prodline;
            locationTransaction.LocationName = prodline;
            locationTransaction.DockDescription = orderHead.DockDescription;
            locationTransaction.Carrier = orderHead.Carrier != null ? orderHead.Carrier.Code : null;
            locationTransaction.CarrierBillCode = orderHead.CarrierBillAddress != null ? orderHead.CarrierBillAddress.Code : null;
            locationTransaction.CarrierBillAddress = orderHead.CarrierBillAddress != null ? orderHead.CarrierBillAddress.Address : null;
            locationTransaction.CreateDate = DateTime.Now;
            locationTransaction.CreateUser = user.Code;
            if (huId != null && huId.Trim() != string.Empty)
            {
                locationTransaction.HuId = huId;
            }
            if (lotNo != null && lotNo.Trim() != string.Empty)
            {
                locationTransaction.LotNo = lotNo;
            }
            locationTransaction.Qty = 0 - qty;
            locationTransaction.EffectiveDate = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
            locationTransaction.RefLocation = locFrom.Code;
            locationTransaction.RefLocationName = locFrom.Name;

            this.CreateLocationTransaction(locationTransaction);
        }
コード例 #18
0
        private void GetLoctransInfo(DssExportHistory dssExportHistory)
        {
            OrderLocationTransaction orderLocationTransaction =
                commonOutboundMgr.GetOrderLocationTransactionInfo(dssExportHistory.OrderNo, dssExportHistory.Item, BusinessConstants.IO_TYPE_OUT);

            if (orderLocationTransaction != null)
            {
                //dssExportHistory.Location = orderLocationTransaction.Location != null ? orderLocationTransaction.Location.Code : null;//发出库位
                dssExportHistory.PartyFrom = orderLocationTransaction.OrderDetail.OrderHead.PartyFrom.Code;//发出区域
            }
            else
            {
                ////归档库查找
                //DetachedCriteria criteria = DetachedCriteria.For(typeof(OrderLocationTransaction));
                //criteria.CreateAlias("OrderDetail", "od");
                //criteria.Add(Expression.Eq("od.OrderHead.OrderNo", dssExportHistory.OrderNo));
                //criteria.Add(Expression.Eq("Item.Code", dssExportHistory.Item));
                //criteria.Add(Expression.Eq("IOType", BusinessConstants.IO_TYPE_OUT));

                //IList<OrderLocationTransaction> result = archCriteriaMgr.FindAll<OrderLocationTransaction>(criteria);
                //if (result != null && result.Count > 0)
                //{
                //   orderLocationTransaction= result[0];
                //   dssExportHistory.PartyFrom = orderLocationTransaction.OrderDetail.OrderHead.PartyFrom.Code;//发出区域
                //}
                //else
                //{

                //}
                try
                {
                    SqlParameter[] sqlParameter = new SqlParameter[3];
                    sqlParameter[0]       = new SqlParameter("@Item", SqlDbType.VarChar, 50);
                    sqlParameter[0].Value = dssExportHistory.Item;

                    sqlParameter[1]       = new SqlParameter("@OrderNo", SqlDbType.VarChar, 50);
                    sqlParameter[1].Value = dssExportHistory.OrderNo;

                    sqlParameter[2]           = new SqlParameter("@PartyFrom", SqlDbType.VarChar, 50);
                    sqlParameter[2].Direction = ParameterDirection.InputOutput;

                    sqlHelperDao.ExecuteStoredProcedure("GetPartyFrom", sqlParameter);

                    dssExportHistory.PartyFrom = sqlParameter[2].Value.ToString();
                }
                catch (Exception)
                {
                    dssExportHistory.PartyFrom = string.Empty;
                }
            }
        }
コード例 #19
0
        public void AutoReplaceAbstractItem(OrderLocationTransaction orderLocationTransaction)
        {
            OrderDetail orderDetail = orderLocationTransaction.OrderDetail;
            OrderHead   orderHead   = orderDetail.OrderHead;
            //OrderOperation orderOperation = orderHead.GetOrderOperationByOperation(orderLocationTransaction.Operation.Value);

            //取得抽象件的子件
            BomDetail bomDetail = this.bomDetailMgr.GetDefaultBomDetailForAbstractItem(
                orderLocationTransaction.Item, orderHead.Routing, orderHead.StartTime,
                orderLocationTransaction.OrderDetail.DefaultLocationFrom);

            if (bomDetail != null)
            {
                //删除抽象件
                this.DeleteOrderLocationTransaction(orderLocationTransaction);
                orderDetail.RemoveOrderLocationTransaction(orderLocationTransaction);
                if (orderLocationTransaction.Operation != 0)
                {
                    //删除对应的OrderOp
                    this.orderOperationMgr.TryDeleteOrderOperation(orderHead, orderLocationTransaction.Operation);
                }

                //尝试分解子件
                string            bomCode       = this.bomMgr.FindBomCode(bomDetail.Item);
                IList <BomDetail> bomDetailList = this.bomDetailMgr.GetFlatBomDetail(bomCode, orderHead.StartTime);
                if (bomDetailList != null && bomDetailList.Count > 0)
                {
                    //子件有Bom
                    foreach (BomDetail subBomDetail in bomDetailList)
                    {
                        //循环插入子件的Bom
                        OrderLocationTransaction newOrderLocationTransaction = this.AddNewMaterial(orderDetail, subBomDetail, orderLocationTransaction.Location, orderLocationTransaction.OrderedQty);
                        if (newOrderLocationTransaction != null &&
                            newOrderLocationTransaction.Item.Type == BusinessConstants.CODE_MASTER_ITEM_TYPE_VALUE_A)
                        {
                            //如果子件的Bom还包含抽象件,嵌套调用替换抽象零件方法
                            this.AutoReplaceAbstractItem(newOrderLocationTransaction);
                        }
                    }
                }
                else
                {
                    //子件没有Bom,用子件直接替换抽象件
                    this.AddNewMaterial(orderDetail, bomDetail, orderLocationTransaction.Location, orderLocationTransaction.OrderedQty);
                }
            }
            else
            {
                throw new BusinessErrorException("Bom.Error.NotFoundForItem", orderLocationTransaction.Item.Code);
            }
        }
コード例 #20
0
        public void CreateInProcessLocationDetail(InProcessLocation inProcessLocation, OrderLocationTransaction outOrderLocationTransaction, IList<InventoryTransaction> inventoryTransactionList)
        {
            if (inventoryTransactionList != null && inventoryTransactionList.Count > 0)
            {
                InProcessLocationDetail mergedInProcessLocationDetail = null;

                foreach (InventoryTransaction inventoryTransaction in inventoryTransactionList)
                {
                    if (inventoryTransaction.Hu == null && !inventoryTransaction.IsConsignment)
                    {
                        #region �ϲ���������
                        //û��HU && �Ǽ��۲ſ��Ժϲ�
                        if (mergedInProcessLocationDetail == null)
                        {
                            mergedInProcessLocationDetail = new InProcessLocationDetail();
                            mergedInProcessLocationDetail.InProcessLocation = inProcessLocation;
                            mergedInProcessLocationDetail.OrderLocationTransaction = outOrderLocationTransaction;
                        }

                        mergedInProcessLocationDetail.Qty += (0 - inventoryTransaction.Qty) / outOrderLocationTransaction.UnitQty;
                        #endregion
                    }
                    else
                    {
                        InProcessLocationDetail inProcessLocationDetail = new InProcessLocationDetail();
                        inProcessLocationDetail.InProcessLocation = inProcessLocation;
                        inProcessLocationDetail.OrderLocationTransaction = outOrderLocationTransaction;
                        if (inventoryTransaction.Hu != null)
                        {
                            inProcessLocationDetail.HuId = inventoryTransaction.Hu.HuId;
                            inProcessLocationDetail.LotNo = inventoryTransaction.Hu.LotNo;
                        }
                        inProcessLocationDetail.IsConsignment = inventoryTransaction.IsConsignment;
                        inProcessLocationDetail.PlannedBill = inventoryTransaction.PlannedBill;
                        inProcessLocationDetail.Qty = (0 - inventoryTransaction.Qty) / outOrderLocationTransaction.UnitQty;

                        inProcessLocation.AddInProcessLocationDetail(inProcessLocationDetail);

                        this.CreateInProcessLocationDetail(inProcessLocationDetail);
                    }
                }

                if (mergedInProcessLocationDetail != null)
                {
                    inProcessLocation.AddInProcessLocationDetail(mergedInProcessLocationDetail);

                    this.CreateInProcessLocationDetail(mergedInProcessLocationDetail);
                }
            }
        }
コード例 #21
0
        public IList <Hu> CreateHu(InProcessLocationDetail inProcessLocationDetail, User user)
        {
            if (inProcessLocationDetail.HuId != null)
            {
                throw new TechnicalException("HuId already exist.");
            }

            OrderLocationTransaction orderLocationTransaction = inProcessLocationDetail.OrderLocationTransaction;
            OrderDetail orderDetail = orderLocationTransaction.OrderDetail;
            OrderHead   orderHead   = orderDetail.OrderHead;

            return(CreateHu(orderLocationTransaction.Item, inProcessLocationDetail.Qty, inProcessLocationDetail.LotNo, orderDetail.Uom, orderDetail.UnitCount, orderDetail.HuLotSize,
                            orderHead.OrderNo, null, null, orderHead.PartyFrom, BusinessConstants.CODE_MASTER_ITEM_QUALITY_LEVEL_VALUE_1, user, inProcessLocationDetail, null, orderLocationTransaction.ItemVersion, null, orderDetail.CustomerItemCode));
        }
コード例 #22
0
        public IList <InProcessLocationDetail> GetInProcessLocationDetail(OrderLocationTransaction orderLocationTransaction, string asnType)
        {
            DetachedCriteria criteria = DetachedCriteria.For <InProcessLocationDetail>();

            criteria.CreateAlias("OrderLocationTransaction", "olt");
            criteria.Add(Expression.Eq("olt.Id", orderLocationTransaction.Id));

            if (asnType != null)
            {
                criteria.CreateAlias("InProcessLocation", "ip");
                criteria.Add(Expression.Eq("ip.Type", asnType));
            }

            return(this.criteriaMgr.FindAll <InProcessLocationDetail>(criteria));
        }
コード例 #23
0
ファイル: MesDssInMgr.cs プロジェクト: Novthirteen/yfkey-scms
        private void ProcessOrderLocationTransactionIn(MesScmsTableIndex mesScmsTableIndex)
        {
            #region 物料消耗
            IList <MesScmsStationBox> stationBoxList = mesScmsStationBoxMgr.GetUpdateMesScmsStationBox();

            if (stationBoxList != null && stationBoxList.Count > 0)
            {
                foreach (MesScmsStationBox stationBox in stationBoxList)
                {
                    try
                    {
                        Hu hu = huMgr.CheckAndLoadHu(stationBox.HuId);
                        OrderLocationTransaction olt = orderLocationTransactionMgr.GetOrderLocationTransaction(stationBox.OrderNo, stationBox.TagNo, hu.Item.Code);
                        if (olt == null)
                        {
                            //没找到,算传错了,记错误日志,更新标记
                            log.Error(stationBox.Id + " not found match order");
                        }
                        else
                        {
                            //货架上没有了,跳过
                            if (olt.Cartons == 0)
                            {
                                log.Error(stationBox.Id + "," + hu.Item.Code + "," + "current carton zero");
                            }
                            else
                            {
                                olt.Cartons = olt.Cartons - 1;
                                this.orderLocationTransactionMgr.UpdateOrderLocationTransaction(olt);

                                hu.Status = BusinessConstants.CODE_MASTER_STATUS_VALUE_CLOSE;
                                huMgr.UpdateHu(hu);
                            }
                        }
                        mesScmsStationBoxMgr.Complete(stationBox);
                    }
                    catch (Exception e)
                    {
                        this.CleanSession();
                        log.Error(stationBox.Id + " complete exception", e);
                        continue;
                    }
                }
            }
            #endregion

            mesScmsTableIndexMgr.Complete(mesScmsTableIndex);
        }
コード例 #24
0
    protected void lbtnDelete_Click(object sender, EventArgs e)
    {
        int id = int.Parse(((LinkButton)sender).CommandArgument);
        OrderLocationTransaction orderLocationTrans = TheOrderLocationTransactionMgr.LoadOrderLocationTransaction(id);

        try
        {
            TheOrderMgr.DeleteOrderLocationTransaction(id, this.CurrentUser.Code);
            ShowSuccessMessage("MasterData.Order.LocTrans.Delete.Successfully");
            UpdateRoutingEvent(this.OrderNo, e);
            UpdateView();
        }
        catch (BusinessErrorException ex)
        {
            ShowErrorMessage(ex);
        }
    }
コード例 #25
0
        public static TransformerDetail ConvertOrderLocationTransactionToTransformerDetail(OrderLocationTransaction orderLocationTransaction)
        {
            if (orderLocationTransaction == null)
                return null;

            TransformerDetail transformerDetail = new TransformerDetail();
            transformerDetail.ItemCode = orderLocationTransaction.OrderDetail.Item.Code;
            transformerDetail.ItemDescription = orderLocationTransaction.Item.Description;
            transformerDetail.UomCode = orderLocationTransaction.OrderDetail.Uom.Code;
            transformerDetail.UnitCount = orderLocationTransaction.OrderDetail.UnitCount;
            transformerDetail.OrderNo = orderLocationTransaction.OrderDetail.OrderHead.OrderNo;
            transformerDetail.ReferenceItemCode = orderLocationTransaction.OrderDetail.ReferenceItemCode;
            transformerDetail.Sequence = orderLocationTransaction.OrderDetail.Sequence;
            transformerDetail.LocationFromCode = orderLocationTransaction.OrderDetail.DefaultLocationFrom != null ?
             orderLocationTransaction.OrderDetail.DefaultLocationFrom.Code : null;
            transformerDetail.LocationToCode = orderLocationTransaction.OrderDetail.DefaultLocationTo != null ?
                orderLocationTransaction.OrderDetail.DefaultLocationTo.Code : null;
            transformerDetail.OrderLocTransId = orderLocationTransaction.Id;
            return transformerDetail;
        }
コード例 #26
0
        public void RecordLocationTransaction(OrderLocationTransaction orderLocationTransaction, InventoryTransaction inventoryTransaction, InProcessLocation inProcessLocation, User user)
        {
            LocationTransaction locationTransaction = GenerateOrderLocationTransaction(orderLocationTransaction, inventoryTransaction.Location, user);

            if (inventoryTransaction.Hu != null)
            {
                locationTransaction.HuId = inventoryTransaction.Hu.HuId;
                locationTransaction.LotNo = inventoryTransaction.Hu.LotNo;
            }
            if (locationTransaction.LotNo == null || locationTransaction.LotNo == string.Empty)
            {
                locationTransaction.LotNo = inventoryTransaction.LotNo;
            }
            locationTransaction.BatchNo = inventoryTransaction.LocationLotDetailId;
            locationTransaction.IpNo = inProcessLocation.IpNo;
            locationTransaction.Qty = inventoryTransaction.Qty;
            locationTransaction.EffectiveDate = DateTime.Parse(inProcessLocation.CreateDate.ToString("yyyy-MM-dd"));

            this.CreateLocationTransaction(locationTransaction);
        }
コード例 #27
0
ファイル: ReceiveMgr.cs プロジェクト: Novthirteen/yfkey-scms
        protected override void GetDetail(Resolver resolver)
        {
            InProcessLocation inProcessLocation = null;

            //订单收货
            if (resolver.CodePrefix == BusinessConstants.CODE_PREFIX_ORDER)
            {
                inProcessLocation = orderMgr.ConvertOrderToInProcessLocation(resolver.Input);
            }
            //ASN收货
            else if (resolver.CodePrefix == BusinessConstants.CODE_PREFIX_ASN)
            {
                inProcessLocation = inProcessLocationMgr.LoadInProcessLocation(resolver.Code, true);
            }
            if (inProcessLocation == null || inProcessLocation.InProcessLocationDetails == null || inProcessLocation.InProcessLocationDetails.Count == 0)
            {
                throw new BusinessErrorException("Common.Business.Error.NoDetailToReceive");
            }


            List <Transformer> newTransformerList = TransformerHelper.ConvertInProcessLocationDetailsToTransformers(inProcessLocation.InProcessLocationDetails);

            if (resolver.IsScanHu)
            {
                ClearReceivedQty(newTransformerList);
            }
            resolver.Transformers = resolver.Transformers == null ? new List <Transformer>() : resolver.Transformers;
            resolver.Transformers.AddRange(newTransformerList);
            resolver.Command = BusinessConstants.CS_BIND_VALUE_TRANSFORMER;

            if (resolver.Transformers != null && resolver.Transformers.Count > 0)
            {
                foreach (Transformer transformer in resolver.Transformers)
                {
                    OrderLocationTransaction outOrderLocationTransaction = this.orderLocationTransactionMgr.LoadOrderLocationTransaction(transformer.OrderLocTransId);
                    OrderLocationTransaction inOrderLocationTransaction  = orderLocationTransactionMgr.GetOrderLocationTransaction(outOrderLocationTransaction.OrderDetail.Id, BusinessConstants.IO_TYPE_IN)[0];

                    transformer.OrderLocTransId = inOrderLocationTransaction.Id;
                }
            }
        }
コード例 #28
0
    protected void btnSave_Click(object sender, EventArgs e)
    {
        int currentLocTransId = -1;

        foreach (GridViewRow row in this.GV_List.Rows)
        {
            RadioButton rbSelect   = (RadioButton)row.FindControl("rbSelect");
            HiddenField hfRowIndex = (HiddenField)row.FindControl("hfRowIndex");
            if (rbSelect.Checked)
            {
                currentLocTransId = int.Parse(hfRowIndex.Value);
                break;
            }
        }
        if (currentLocTransId == -1)
        {
            ShowErrorMessage("Common.Message.Record.Not.Select");
        }
        else
        {
            OrderLocationTransaction currentLocationTrans = OrderLocTransList[currentLocTransId];
            OrderLocationTransaction oldLocationTrans     = TheOrderLocationTransactionMgr.LoadOrderLocationTransaction(this.LocTransId);
            OrderDetail orderDetail = TheOrderDetailMgr.LoadOrderDetail(oldLocationTrans.OrderDetail.Id, true);
            orderDetail.OrderHead        = TheOrderHeadMgr.LoadOrderHead(orderDetail.OrderHead.OrderNo, true, true, true);
            oldLocationTrans.OrderDetail = orderDetail;
            try
            {
                TheOrderLocationTransactionMgr.ReplaceAbstractItem(oldLocationTrans, currentLocationTrans.BomDetail);

                if (SaveEvent != null)
                {
                    SaveEvent(currentLocationTrans.OrderDetail.OrderHead.OrderNo, e);
                    this.Visible = false;
                }
            }
            catch (BusinessErrorException ex)
            {
                ShowErrorMessage(ex);
            }
        }
    }
コード例 #29
0
        public OrderLocationTransaction AddNewMaterial(OrderDetail orderDetail, BomDetail bomDetail, Location orgLocation, decimal orgOrderedQty)
        {
            //如果是选装件并且默认不安装,不添加新物料
            if (bomDetail.StructureType != BusinessConstants.CODE_MASTER_BOM_DETAIL_TYPE_VALUE_O || bomDetail.Priority != 0)
            {
                foreach (OrderLocationTransaction orderLocationTransaction in orderDetail.OrderLocationTransactions)
                {
                    if (orderLocationTransaction.Item.Code == bomDetail.Item.Code &&
                        orderLocationTransaction.Operation == bomDetail.Operation)
                    {
                        //合并相同物料
                        //decimal orderedQty = orderDetail.OrderedQty * orgOrderedQty * bomDetail.RateQty * (1 + bomDetail.ScrapPercentage);
                        decimal orderedQty = orgOrderedQty * bomDetail.RateQty * (1 + bomDetail.ScrapPercentage);
                        if (orderLocationTransaction.Uom.Code != bomDetail.Uom.Code)
                        {
                            orderedQty = this.uomConversionMgr.ConvertUomQty(orderLocationTransaction.Item.Code, bomDetail.Uom, orderedQty, orderLocationTransaction.Uom);
                        }
                        orderLocationTransaction.UnitQty    += orgOrderedQty * bomDetail.RateQty * (1 + bomDetail.ScrapPercentage);
                        orderLocationTransaction.OrderedQty += orderedQty;
                        this.UpdateOrderLocationTransaction(orderLocationTransaction);

                        return(orderLocationTransaction);
                    }
                }

                Location bomLocFrom = bomDetail.Location != null ? bomDetail.Location : orgLocation;
                OrderLocationTransaction newOrderLocationTransaction =
                    this.GenerateOrderLocationTransaction(orderDetail, bomDetail.Item, bomDetail,
                                                          bomDetail.Uom, bomDetail.Operation, BusinessConstants.IO_TYPE_OUT, BusinessConstants.CODE_MASTER_LOCATION_TRANSACTION_TYPE_VALUE_ISS_WO,
                                                          orgOrderedQty * bomDetail.RateQty * (1 + bomDetail.ScrapPercentage), bomLocFrom,
                                                          bomDetail.IsShipScanHu, bomDetail.HuLotSize, bomDetail.NeedPrint, bomDetail.BackFlushMethod, null, null);

                this.CreateOrderLocationTransaction(newOrderLocationTransaction);
                orderDetail.AddOrderLocationTransaction(newOrderLocationTransaction);
                this.orderOperationMgr.TryAddOrderOperation(orderDetail.OrderHead, bomDetail.Operation, bomDetail.Reference);

                return(newOrderLocationTransaction);
            }

            return(null);
        }
コード例 #30
0
ファイル: PickListMgr.cs プロジェクト: Novthirteen/yfkey-scms
        public PickList CreatePickList(List <Transformer> transformerList, User user)
        {
            if (transformerList == null || transformerList.Count == 0)
            {
                throw new BusinessErrorException("Common.Business.Empty");
            }

            IList <OrderLocationTransaction> orderLocationTransactionList = new List <OrderLocationTransaction>();

            foreach (Transformer transformer in transformerList)
            {
                if (transformer.CurrentQty > 0)
                {
                    OrderLocationTransaction orderLocationTransaction = orderLocationTransactionMgr.LoadOrderLocationTransaction(transformer.OrderLocTransId);
                    orderLocationTransaction.CurrentShipQty = transformer.CurrentQty;
                    orderLocationTransactionList.Add(orderLocationTransaction);
                }
            }

            return(this.CreatePickList(orderLocationTransactionList, user));
        }
コード例 #31
0
        public HuOdd CreateHuOdd(ReceiptDetail receiptDetail, LocationLotDetail locationLotDetail, User user)
        {
            OrderLocationTransaction orderLocationTransaction = receiptDetail.OrderLocationTransaction;
            OrderDetail orderDetail = orderLocationTransaction.OrderDetail;
            DateTime    dateTimeNow = DateTime.Now;

            HuOdd huOdd = new HuOdd();

            huOdd.OrderDetail       = orderDetail;
            huOdd.LocationLotDetail = locationLotDetail;
            huOdd.OddQty            = receiptDetail.ReceivedQty.Value;
            huOdd.Status            = BusinessConstants.CODE_MASTER_STATUS_VALUE_CREATE;
            huOdd.CreatedQty        = 0;
            huOdd.CreateUser        = user;
            huOdd.CreateDate        = dateTimeNow;
            huOdd.LastModifyUser    = user;
            huOdd.LastModifyDate    = dateTimeNow;

            this.CreateHuOdd(huOdd);
            return(huOdd);
        }
コード例 #32
0
        private LocationTransaction GenerateOrderLocationTransaction(
            OrderLocationTransaction orderLocationTransaction, Location location, User createUser)
        {
            LocationTransaction locationTransaction = new LocationTransaction();

            OrderDetail orderDetail = orderLocationTransaction.OrderDetail;
            OrderHead   orderHead   = orderDetail.OrderHead;

            locationTransaction.OrderNo                    = orderHead.OrderNo;
            locationTransaction.ExternalOrderNo            = orderHead.ExternalOrderNo;
            locationTransaction.ReferenceOrderNo           = orderHead.ReferenceOrderNo;
            locationTransaction.IsSubcontract              = orderHead.IsSubcontract;
            locationTransaction.OrderDetailId              = orderDetail.Id;
            locationTransaction.OrderLocationTransactionId = orderLocationTransaction.Id;
            //locationTransaction.IpNo =
            //locationTransaction.ReceiptNo =
            locationTransaction.TransactionType = orderLocationTransaction.TransactionType;
            locationTransaction.Item            = orderLocationTransaction.Item.Code;
            locationTransaction.ItemDescription = orderLocationTransaction.Item.Description;
            locationTransaction.Uom             = orderLocationTransaction.Item.Uom.Code;
            //locationTransaction.Qty =
            locationTransaction.PartyFrom          = orderHead.PartyFrom.Code;
            locationTransaction.PartyFromName      = orderHead.PartyFrom.Name;
            locationTransaction.PartyTo            = orderHead.PartyTo.Code;
            locationTransaction.PartyToName        = orderHead.PartyTo.Name;
            locationTransaction.ShipFrom           = orderHead.ShipFrom != null ? orderHead.ShipFrom.Code : null;
            locationTransaction.ShipFromAddress    = orderHead.ShipFrom != null ? orderHead.ShipFrom.Address : null;
            locationTransaction.ShipTo             = orderHead.ShipTo != null ? orderHead.ShipTo.Code : null;
            locationTransaction.ShipToAddress      = orderHead.ShipTo != null ? orderHead.ShipTo.Address : null;
            locationTransaction.Location           = location != null ? location.Code : null;
            locationTransaction.LocationName       = location != null ? location.Name : null;
            locationTransaction.DockDescription    = orderHead.DockDescription;
            locationTransaction.Carrier            = orderHead.Carrier != null ? orderHead.Carrier.Code : null;
            locationTransaction.CarrierBillCode    = orderHead.CarrierBillAddress != null ? orderHead.CarrierBillAddress.Code : null;
            locationTransaction.CarrierBillAddress = orderHead.CarrierBillAddress != null ? orderHead.CarrierBillAddress.Address : null;
            locationTransaction.CreateDate         = DateTime.Now;
            locationTransaction.CreateUser         = createUser.Code;

            return(locationTransaction);
        }
コード例 #33
0
        public void ReplaceAbstractItem(OrderLocationTransaction orderLocationTransaction, BomDetail bomDetail)
        {
            OrderDetail orderDetail = orderLocationTransaction.OrderDetail;
            OrderHead   orderHead   = orderDetail.OrderHead;

            //删除抽象件
            this.DeleteOrderLocationTransaction(orderLocationTransaction);
            orderDetail.RemoveOrderLocationTransaction(orderLocationTransaction);
            if (orderLocationTransaction.Operation != 0)
            {
                //删除对应的OrderOp
                this.orderOperationMgr.TryDeleteOrderOperation(orderHead, orderLocationTransaction.Operation);
            }

            //尝试分解子件
            string            bomCode       = this.bomMgr.FindBomCode(bomDetail.Item);
            IList <BomDetail> bomDetailList = this.bomDetailMgr.GetFlatBomDetail(bomCode, orderHead.StartTime);

            if (bomDetailList != null && bomDetailList.Count > 0)
            {
                //子件有Bom
                foreach (BomDetail subBomDetail in bomDetailList)
                {
                    //循环插入子件的Bom
                    OrderLocationTransaction newOrderLocationTransaction = this.AddNewMaterial(orderDetail, subBomDetail, orderLocationTransaction.Location, orderLocationTransaction.OrderedQty);
                    if (newOrderLocationTransaction != null &&
                        newOrderLocationTransaction.Item.Type == BusinessConstants.CODE_MASTER_ITEM_TYPE_VALUE_A)
                    {
                        //如果子件的Bom还包含抽象件,嵌套调用替换抽象零件方法
                        this.AutoReplaceAbstractItem(newOrderLocationTransaction);
                    }
                }
            }
            else
            {
                //子件没有Bom,用子件直接替换抽象件
                this.AddNewMaterial(orderDetail, bomDetail, orderLocationTransaction.Location, orderLocationTransaction.OrderedQty);
            }
        }
コード例 #34
0
        public IList <Hu> CreateHu(ReceiptDetail receiptDetail, User user)
        {
            if (receiptDetail.HuId != null)
            {
                throw new TechnicalException("HuId already exist.");
            }

            OrderLocationTransaction orderLocationTransaction = receiptDetail.OrderLocationTransaction;
            OrderDetail orderDetail = orderLocationTransaction.OrderDetail;
            OrderHead   orderHead   = orderDetail.OrderHead;
            IList <Hu>  huList      = new List <Hu>();
            string      lotNo       = null;

            if (orderHead.Type != BusinessConstants.CODE_MASTER_ORDER_TYPE_VALUE_PRODUCTION)
            {
                lotNo = receiptDetail.LotNo;
            }

            #region 为正品创建Hu
            if (receiptDetail.ReceivedQty.HasValue && receiptDetail.ReceivedQty != 0)
            {
                huList = CreateHu(orderLocationTransaction.Item, receiptDetail.ReceivedQty.Value, lotNo, orderDetail.Uom, orderDetail.UnitCount, orderDetail.HuLotSize,
                                  orderHead.OrderNo, receiptDetail.Receipt.ReceiptNo, null, orderHead.PartyFrom, BusinessConstants.CODE_MASTER_ITEM_QUALITY_LEVEL_VALUE_1, user, receiptDetail, null, orderLocationTransaction.ItemVersion, null, orderDetail.CustomerItemCode);
            }
            #endregion

            #region 为次品创建Hu
            //if (receiptDetail.RejectedQty.HasValue && receiptDetail.RejectedQty != 0)
            //{
            //    IList<Hu> rejHuList = CreateHu(orderLocationTransaction.Item, receiptDetail.RejectedQty.Value, lotNo, orderDetail.Uom, orderDetail.UnitCount, orderDetail.HuLotSize,
            //        orderHead.OrderNo, receiptDetail.Receipt.ReceiptNo, null, orderHead.PartyFrom, BusinessConstants.CODE_MASTER_ITEM_QUALITY_LEVEL_VALUE_2, user, receiptDetail, null);
            //    IListHelper.AddRange<Hu>(huList, rejHuList);
            //}
            #endregion

            return(huList);
        }
コード例 #35
0
    public void SaveAllDetail()
    {
        IList <OrderLocationTransaction> orderLocTransList = new List <OrderLocationTransaction>();

        int count = this.GV_List.Rows.Count;

        if (!this.IsReuse)
        {
            count = count - 1;
        }
        for (int i = 0; i < count; i++)
        {
            GridViewRow row  = this.GV_List.Rows[i];
            HiddenField hfId = (HiddenField)row.FindControl("hfId");
            OrderLocationTransaction orderLocTrans = TheOrderLocationTransactionMgr.LoadOrderLocationTransaction(int.Parse(hfId.Value));

            orderLocTrans.IsAssemble  = ((CheckBox)row.FindControl("cbIsAssemble")).Checked;
            orderLocTrans.OrderedQty  = decimal.Parse(((TextBox)row.FindControl("tbOrderdQty")).Text.Trim());
            orderLocTrans.UnitQty     = decimal.Parse(((TextBox)row.FindControl("tbUnitQty")).Text.Trim());
            orderLocTrans.ItemVersion = ((TextBox)row.FindControl("tbUnitQty")).Text.Trim();
            Controls_TextBox tbLocation = (Controls_TextBox)row.FindControl("tbLocation");

            if (tbLocation.Text.Trim() != string.Empty)
            {
                orderLocTrans.Location = TheLocationMgr.LoadLocation(tbLocation.Text.Trim());
            }
            orderLocTrans.NeedPrint = ((CheckBox)row.FindControl("cbNeedPrint")).Checked;
            orderLocTransList.Add(orderLocTrans);
        }
        //更新orderloctrans
        foreach (OrderLocationTransaction orderLocTrans in orderLocTransList)
        {
            TheOrderLocationTransactionMgr.UpdateOrderLocationTransaction(orderLocTrans);
        }
        //  ShowSuccessMessage("MasterData.Order.LocTrans.Update.Successfully");
    }
コード例 #36
0
        private Receipt BuildReceipt(OrderLocationTransaction orderLocationTransaction, IList <DssImportHistory> dssImportHistoryList)
        {
            if (orderLocationTransaction == null || dssImportHistoryList == null || dssImportHistoryList.Count == 0)
            {
                return(null);
            }

            Receipt receipt = new Receipt();
            IList <OrderLocationTransaction> orderLocTransList = this.orderLocationTransactionMgr.GetOrderLocationTransaction(orderLocationTransaction.OrderDetail.Id, BusinessConstants.IO_TYPE_OUT);

            foreach (var dssImportHistory in dssImportHistoryList)
            {
                ReceiptDetail receiptDetail = new ReceiptDetail();
                receiptDetail.Receipt = receipt;
                receiptDetail.OrderLocationTransaction = orderLocationTransaction;
                receiptDetail.HuId        = dssImportHistory.HuId;
                receiptDetail.ReceivedQty = dssImportHistory.Qty;

                #region 找Out的OrderLocTrans,填充MaterialFlushBack
                foreach (OrderLocationTransaction orderLocTrans in orderLocTransList)
                {
                    MaterialFlushBack material = new MaterialFlushBack();
                    material.OrderLocationTransaction = orderLocTrans;
                    if (orderLocTrans.UnitQty != 0)
                    {
                        material.Qty = dssImportHistory.Qty;
                    }
                    receiptDetail.AddMaterialFlushBack(material);
                }
                #endregion

                receipt.AddReceiptDetail(receiptDetail);
            }

            return(receipt);
        }
コード例 #37
0
 public void DeleteOrderLocationTransaction(OrderLocationTransaction orderLocationTransaction, User user)
 {
     DeleteOrderLocationTransaction(orderLocationTransaction.Id, user);
 }
コード例 #38
0
        public void CreateInProcessLocationDetail(InProcessLocation inProcessLocation, OrderLocationTransaction outOrderLocationTransaction, IList<Hu> huList)
        {
            if (huList != null && huList.Count > 0)
            {
                foreach (Hu hu in huList)
                {
                    InProcessLocationDetail inProcessLocationDetail = new InProcessLocationDetail();
                    inProcessLocationDetail.InProcessLocation = inProcessLocation;
                    inProcessLocationDetail.OrderLocationTransaction = outOrderLocationTransaction;
                    inProcessLocationDetail.HuId = hu.HuId;
                    inProcessLocationDetail.LotNo = hu.LotNo;
                    inProcessLocationDetail.Qty = hu.Qty * hu.UnitQty / outOrderLocationTransaction.UnitQty;  //�ȳ�Hu.UnitQtyתΪ������λ���ڳ�outOrderLocationTransaction.UnitQtyתΪ������λ��

                    inProcessLocation.AddInProcessLocationDetail(inProcessLocationDetail);

                    this.CreateInProcessLocationDetail(inProcessLocationDetail);
                }
            }
        }
コード例 #39
0
 public void AddOrderLocationTransaction(OrderLocationTransaction orderLocationTransaction, string userCode)
 {
     AddOrderLocationTransaction(orderLocationTransaction, this.userMgrE.CheckAndLoadUser(userCode));
 }
コード例 #40
0
 public void DeleteOrderLocationTransaction(OrderLocationTransaction orderLocationTransaction, string userCode)
 {
     DeleteOrderLocationTransaction(orderLocationTransaction.Id, this.userMgrE.CheckAndLoadUser(userCode));
 }
コード例 #41
0
        public void CreateReceipt(Receipt receipt, User user, bool isOddCreateHu)
        {
            log.Debug("Start create receipt");
            #region 查找所有的发货项,收货单打印模板,收货差异处理选项
            string      orderType       = null;
            Party       partyFrom       = null;
            Party       partyTo         = null;
            ShipAddress shipFrom        = null;
            ShipAddress shipTo          = null;
            string      dockDescription = null;
            string      receiptTemplate = null;
            string      huTemplate      = null;
            string      grGapTo         = null;
            IList <InProcessLocationDetail> inProcessLocationDetailList = new List <InProcessLocationDetail>();
            if (receipt.InProcessLocations != null && receipt.InProcessLocations.Count > 0)
            {
                foreach (InProcessLocation inProcessLocation in receipt.InProcessLocations)
                {
                    InProcessLocation currentIp = inProcessLocationMgr.LoadInProcessLocation(inProcessLocation.IpNo);
                    if (currentIp.Status == BusinessConstants.CODE_MASTER_STATUS_VALUE_CLOSE)
                    {
                        throw new BusinessErrorException("InProcessLocation.Error.StatusErrorWhenReceive", currentIp.Status, currentIp.IpNo);
                    }

                    if (orderType == null)
                    {
                        orderType = inProcessLocation.OrderType;
                    }

                    //判断OrderHead的PartyFrom是否一致
                    if (partyFrom == null)
                    {
                        partyFrom = inProcessLocation.PartyFrom;
                    }
                    else if (inProcessLocation.PartyFrom.Code != partyFrom.Code)
                    {
                        throw new BusinessErrorException("Order.Error.ReceiveOrder.PartyFromNotEqual");
                    }

                    //判断OrderHead的PartyFrom是否一致
                    if (partyTo == null)
                    {
                        partyTo = inProcessLocation.PartyTo;
                    }
                    else if (inProcessLocation.PartyTo.Code != partyTo.Code)
                    {
                        throw new BusinessErrorException("Order.Error.ReceiveOrder.PartyToNotEqual");
                    }

                    //判断OrderHead的ShipFrom是否一致
                    if (shipFrom == null)
                    {
                        shipFrom = inProcessLocation.ShipFrom;
                    }
                    else if (!AddressHelper.IsAddressEqual(inProcessLocation.ShipFrom, shipFrom))
                    {
                        throw new BusinessErrorException("Order.Error.ReceiveOrder.ShipFromNotEqual");
                    }

                    //判断OrderHead的ShipTo是否一致
                    if (shipTo == null)
                    {
                        shipTo = inProcessLocation.ShipTo;
                    }
                    else if (!AddressHelper.IsAddressEqual(inProcessLocation.ShipTo, shipTo))
                    {
                        throw new BusinessErrorException("Order.Error.ReceiveOrder.ShipToNotEqual");
                    }

                    if (dockDescription == null)
                    {
                        dockDescription = inProcessLocation.DockDescription;
                    }
                    else if (inProcessLocation.DockDescription != dockDescription)
                    {
                        throw new BusinessErrorException("Order.Error.ReceiveOrder.DockDescriptionNotEqual");
                    }

                    //判断收货单打印模板是否一致
                    if (receiptTemplate == null)
                    {
                        receiptTemplate = inProcessLocation.ReceiptTemplate;
                    }
                    else
                    {
                        if (inProcessLocation.ReceiptTemplate != null && inProcessLocation.ReceiptTemplate != receiptTemplate)
                        {
                            throw new BusinessErrorException("Order.Error.ReceiveOrder.ReceiptTemplateNotEqual");
                        }
                    }

                    //判断条码打印模板是否一致
                    if (huTemplate == null)
                    {
                        huTemplate = inProcessLocation.HuTemplate;
                    }
                    else
                    {
                        if (inProcessLocation.HuTemplate != null && inProcessLocation.HuTemplate != huTemplate)
                        {
                            throw new BusinessErrorException("Order.Error.ReceiveOrder.HuTemplateNotEqual");
                        }
                    }

                    #region 查找收货差异处理选项
                    if (grGapTo == null)
                    {
                        grGapTo = inProcessLocation.GoodsReceiptGapTo;
                    }
                    else
                    {
                        if (inProcessLocation.GoodsReceiptGapTo != null && inProcessLocation.GoodsReceiptGapTo != grGapTo)
                        {
                            throw new BusinessErrorException("Order.Error.ReceiveOrder.GoodsReceiptGapToNotEqual");
                        }
                    }
                    #endregion

                    IListHelper.AddRange <InProcessLocationDetail>(
                        inProcessLocationDetailList, this.inProcessLocationDetailMgr.GetInProcessLocationDetail(inProcessLocation));
                }
            }
            #endregion

            IList <ReceiptDetail> targetReceiptDetailList = receipt.ReceiptDetails;
            receipt.ReceiptDetails = null;   //清空Asn明细,稍后填充

            #region 创建收货单Head
            receipt.ReceiptNo       = numberControlMgr.GenerateNumber(BusinessConstants.CODE_PREFIX_RECEIPT);
            receipt.OrderType       = orderType;
            receipt.CreateDate      = DateTime.Now;
            receipt.CreateUser      = user;
            receipt.PartyFrom       = partyFrom;
            receipt.PartyTo         = partyTo;
            receipt.ShipFrom        = shipFrom;
            receipt.ShipTo          = shipTo;
            receipt.DockDescription = dockDescription;
            receipt.ReceiptTemplate = receiptTemplate;
            receipt.IsPrinted       = false;
            receipt.NeedPrint       = false;
            if (receipt.InProcessLocations != null && receipt.InProcessLocations.Count > 0)
            {
                foreach (InProcessLocation inProcessLocation in receipt.InProcessLocations)
                {
                    if (inProcessLocation.NeedPrintReceipt)
                    {
                        receipt.NeedPrint = true;
                        break;
                    }
                }
            }

            this.CreateReceipt(receipt);
            log.Debug("Create receipt " + receipt.ReceiptNo + " head successful");
            #endregion

            #region HU处理/入库操作/创建收货明细
            log.Debug("Start create receipt detail");
            IList <LocationLotDetail> inspectLocationLotDetailList = new List <LocationLotDetail>();
            foreach (ReceiptDetail receiptDetail in targetReceiptDetailList)
            {
                OrderLocationTransaction orderLocationTransaction = receiptDetail.OrderLocationTransaction;
                OrderDetail orderDetail = orderLocationTransaction.OrderDetail;
                OrderHead   orderHead   = orderDetail.OrderHead;

                if (orderHead.CreateHuOption == BusinessConstants.CODE_MASTER_CREATE_HU_OPTION_VALUE_GR &&
                    receiptDetail.HuId == null)         //如果订单设置为收货时创建Hu,但是收货时已经扫描过Hu了,按已扫描处理
                {
                    #region 收货时创建Hu
                    log.Debug("Create receipt detail with generate barcode.");
                    #region 生产本次收货+剩余零头生成Hu
                    decimal oddQty = 0;

                    if (!isOddCreateHu && orderDetail.HuLotSize.HasValue &&
                        orderHead.Type == BusinessConstants.CODE_MASTER_ORDER_TYPE_VALUE_PRODUCTION)    //只有生产支持零头
                    {
                        #region 查找剩余零头 + 本次收货数是否能够生成Hu
                        Hu oddHu = this.CreateHuFromOdd(receiptDetail, user);
                        if (oddHu != null)
                        {
                            log.Debug("Generate barcode using odd qty.");
                            //如果零头生成了Hu,本次收货数会扣减
                            #region 创建Hu
                            IList <Hu> oddHuList = new List <Hu>();
                            oddHuList.Add(oddHu);
                            IList <ReceiptDetail> oddReceiptDetailList = this.receiptDetailMgr.CreateReceiptDetail(receipt, orderLocationTransaction, oddHuList);
                            log.Debug("Generate odd barcode successful.");
                            #endregion

                            #region 入库
                            IList <InventoryTransaction> inventoryTransactionList = this.locationMgr.InventoryIn(oddReceiptDetailList[0], user, receiptDetail.PutAwayBinCode);
                            log.Debug("odd Inventory in successful.");
                            #endregion

                            #region 是否检验
                            if (orderDetail.NeedInspection && orderHead.NeedInspection && orderHead.SubType == BusinessConstants.CODE_MASTER_ORDER_SUB_TYPE_VALUE_NML)
                            {
                                foreach (InventoryTransaction inventoryTransaction in inventoryTransactionList)
                                {
                                    LocationLotDetail locationLotDetail = this.locationLotDetailMgr.LoadLocationLotDetail(inventoryTransaction.LocationLotDetailId);
                                    locationLotDetail.CurrentInspectQty = locationLotDetail.Qty;
                                    inspectLocationLotDetailList.Add(locationLotDetail);
                                }
                            }
                            #endregion
                        }
                        #endregion

                        oddQty = receiptDetail.ReceivedQty.HasValue && orderDetail.HuLotSize.HasValue ?
                                 receiptDetail.ReceivedQty.Value % orderDetail.HuLotSize.Value : 0; //收货零头数
                        log.Debug("Receive odd qty is " + oddQty);

                        receiptDetail.ReceivedQty = receiptDetail.ReceivedQty.Value - oddQty; //收货数量凑整
                    }
                    #endregion

                    #region 满包装/零头创建Hu处理
                    if (receiptDetail.ReceivedQty.HasValue ||
                        receiptDetail.RejectedQty.HasValue ||
                        receiptDetail.ScrapQty.HasValue)
                    {
                        //创建Hu
                        IList <Hu> huList = this.huMgr.CreateHu(receiptDetail, user);
                        log.Debug("Create barcode successful.");

                        //创建收货项
                        IList <ReceiptDetail> receiptDetailList = this.receiptDetailMgr.CreateReceiptDetail(receipt, orderLocationTransaction, huList);
                        log.Debug("Create receipt detail successful.");

                        #region 如果还有次品或者废品收货,添加到收货列表
                        if ((receiptDetail.RejectedQty.HasValue && receiptDetail.RejectedQty > 0) ||
                            (receiptDetail.ScrapQty.HasValue && receiptDetail.ScrapQty > 0))
                        {
                            ReceiptDetail rejAndScrapReceiptDetail = new ReceiptDetail();
                            CloneHelper.CopyProperty(receiptDetail, rejAndScrapReceiptDetail);
                            rejAndScrapReceiptDetail.ReceivedQty    = null;
                            rejAndScrapReceiptDetail.PutAwayBinCode = null;
                            rejAndScrapReceiptDetail.Receipt        = receipt;

                            this.receiptDetailMgr.CreateReceiptDetail(rejAndScrapReceiptDetail);

                            receiptDetailList.Add(rejAndScrapReceiptDetail);
                            receipt.AddReceiptDetail(rejAndScrapReceiptDetail);
                        }
                        #endregion

                        foreach (ReceiptDetail huReceiptDetail in receiptDetailList)
                        {
                            #region 匹配ReceiptDetail和InProcessLocationDetail,Copy相关信息
                            if (orderHead.Type != BusinessConstants.CODE_MASTER_ORDER_TYPE_VALUE_PRODUCTION)
                            {
                                IList <InProcessLocationDetail> matchInProcessLocationDetailList = OrderHelper.FindMatchInProcessLocationDetail(receiptDetail, inProcessLocationDetailList);
                                if (matchInProcessLocationDetailList != null && matchInProcessLocationDetailList.Count > 0)
                                {
                                    if (matchInProcessLocationDetailList.Count > 1)
                                    {
                                        //只有当ASN中包含条码,按数量收货,并收货后创建条码才有可能发生这种情况。
                                        //变态才这么干。
                                        log.Error("只有当ASN中包含条码,按数量收货,并收货后创建条码才有可能发生这种情况。");
                                        throw new BusinessErrorException("你是变态才这么设置。");
                                    }

                                    //如果找到匹配项,只可能有一个
                                    huReceiptDetail.PlannedBill   = matchInProcessLocationDetailList[0].PlannedBill;
                                    huReceiptDetail.IsConsignment = matchInProcessLocationDetailList[0].IsConsignment;
                                    huReceiptDetail.ShippedQty    = matchInProcessLocationDetailList[0].Qty;

                                    this.receiptDetailMgr.UpdateReceiptDetail(huReceiptDetail);
                                }

                                //收货创建HU,分配PlannedAmount,todo:考虑余数
                                huReceiptDetail.PlannedAmount = receiptDetail.PlannedAmount / receiptDetail.ReceivedQty.Value * huReceiptDetail.ReceivedQty.Value;
                            }
                            #endregion

                            #region 入库
                            IList <InventoryTransaction> inventoryTransactionList = this.locationMgr.InventoryIn(huReceiptDetail, user, receiptDetail.PutAwayBinCode);
                            log.Debug("Inventory in successful.");
                            #endregion

                            #region 是否检验
                            if (orderDetail.NeedInspection &&
                                orderHead.NeedInspection &&
                                orderHead.SubType == BusinessConstants.CODE_MASTER_ORDER_SUB_TYPE_VALUE_NML &&
                                huReceiptDetail.ReceivedQty.HasValue &&
                                huReceiptDetail.ReceivedQty > 0)
                            {
                                foreach (InventoryTransaction inventoryTransaction in inventoryTransactionList)
                                {
                                    if (inventoryTransaction.Location.Code != BusinessConstants.SYSTEM_LOCATION_REJECT)
                                    {
                                        LocationLotDetail locationLotDetail = this.locationLotDetailMgr.LoadLocationLotDetail(inventoryTransaction.LocationLotDetailId);
                                        locationLotDetail.CurrentInspectQty = inventoryTransaction.Qty;
                                        inspectLocationLotDetailList.Add(locationLotDetail);
                                    }
                                }
                            }
                            #endregion
                        }
                    }
                    #endregion

                    #region 生产剩余零头处理
                    if (oddQty > 0)
                    {
                        log.Debug("Start handle odd qty.");
                        ReceiptDetail oddReceiptDetail = new ReceiptDetail();
                        CloneHelper.CopyProperty(receiptDetail, oddReceiptDetail);

                        oddReceiptDetail.ReceivedQty = oddQty;
                        oddReceiptDetail.RejectedQty = 0;
                        oddReceiptDetail.ScrapQty    = 0;

                        #region 零头入库
                        oddReceiptDetail.Receipt = receipt;
                        IList <InventoryTransaction> inventoryTransactionList = this.locationMgr.InventoryIn(oddReceiptDetail, user, receiptDetail.PutAwayBinCode);
                        #endregion

                        #region 零头创建收货明细
                        this.receiptDetailMgr.CreateReceiptDetail(oddReceiptDetail);
                        receipt.AddReceiptDetail(oddReceiptDetail);
                        #endregion

                        #region 创建HuOdd
                        LocationLotDetail locationLotDetail = locationLotDetailMgr.LoadLocationLotDetail(inventoryTransactionList[0].LocationLotDetailId);
                        this.huOddMgr.CreateHuOdd(oddReceiptDetail, locationLotDetail, user);
                        #endregion
                        log.Debug("End handle odd qty.");
                    }
                    #endregion

                    #endregion
                }
                else
                {
                    #region 收货时不创建Hu
                    log.Debug("Create receipt detail with no generate barcode.");

                    #region 更新Hu上的OrderNo、ReceiptNo和AntiResloveHu
                    if (receiptDetail.HuId != null && receiptDetail.HuId.Trim() != string.Empty)
                    {
                        Hu   hu        = this.huMgr.LoadHu(receiptDetail.HuId);
                        bool isUpdated = false;

                        if (hu.OrderNo == null || hu.ReceiptNo == null)
                        {
                            if (hu.OrderNo == null)
                            {
                                log.Debug("Update hu OrderNo " + orderHead.OrderNo + ".");
                                hu.OrderNo = orderHead.OrderNo;
                            }

                            if (hu.ReceiptNo == null)
                            {
                                log.Debug("Update hu ReceiptNo " + receipt.ReceiptNo + ".");
                                hu.ReceiptNo = receipt.ReceiptNo;
                            }

                            isUpdated = true;
                        }

                        if (hu.AntiResolveHu == null &&
                            orderHead.Type == BusinessConstants.CODE_MASTER_ORDER_TYPE_VALUE_PROCUREMENT)
                        {
                            hu.AntiResolveHu = orderHead.AntiResolveHu;
                            isUpdated        = true;
                        }

                        if (isUpdated)
                        {
                            this.huMgr.UpdateHu(hu);
                        }
                    }
                    #endregion

                    IList <ReceiptDetail> noCreateHuReceiptDetailList = new List <ReceiptDetail>();

                    #region 匹配ReceiptDetail和InProcessLocationDetail,Copy相关信息
                    log.Debug("Start match ReceiptDetail and InProcessLocationDetail.");
                    if (orderHead.Type != BusinessConstants.CODE_MASTER_ORDER_TYPE_VALUE_PRODUCTION &&
                        orderHead.SubType != BusinessConstants.CODE_MASTER_ORDER_SUB_TYPE_VALUE_ADJ)     //收货调整已经匹配过InProcessLocationDetail,不需要在匹配
                    {
                        IList <InProcessLocationDetail> matchInProcessLocationDetailList = OrderHelper.FindMatchInProcessLocationDetail(receiptDetail, inProcessLocationDetailList);
                        log.Debug("Find matched InProcessLocationDetailList, count = " + matchInProcessLocationDetailList != null ? matchInProcessLocationDetailList.Count : 0);

                        if (matchInProcessLocationDetailList != null && matchInProcessLocationDetailList.Count == 1)
                        {
                            //一次收货对应一次发货。
                            log.Debug("one ipdet vs one receiptdet.");
                            receiptDetail.PlannedBill   = matchInProcessLocationDetailList[0].PlannedBill;
                            receiptDetail.IsConsignment = matchInProcessLocationDetailList[0].IsConsignment;
                            if (matchInProcessLocationDetailList[0].InProcessLocation.Type == BusinessConstants.CODE_MASTER_INPROCESS_LOCATION_TYPE_VALUE_GAP)
                            {
                                receiptDetail.ShippedQty = 0 - matchInProcessLocationDetailList[0].Qty;
                            }
                            else
                            {
                                receiptDetail.ShippedQty = matchInProcessLocationDetailList[0].Qty;
                            }
                            receiptDetail.ReceivedInProcessLocationDetail = matchInProcessLocationDetailList[0];
                            noCreateHuReceiptDetailList.Add(receiptDetail);
                        }
                        else if (matchInProcessLocationDetailList != null && matchInProcessLocationDetailList.Count > 1)
                        {
                            //一次收货对应多次发货。
                            //如:发货按条码,收货按数量。
                            log.Debug("multi ipdet vs one receiptdet.");
                            decimal totalRecQty = receiptDetail.ReceivedQty.Value;
                            InProcessLocationDetail lastInProcessLocationDetail = null;
                            log.Debug("Start Fetch matched InProcessLocationDetailList.");
                            foreach (InProcessLocationDetail inProcessLocationDetail in matchInProcessLocationDetailList)
                            {
                                lastInProcessLocationDetail = inProcessLocationDetail; //记录最后一次发货项,供没有对应发货的收货项使用

                                if (inProcessLocationDetail.ReceivedQty.HasValue && Math.Abs(inProcessLocationDetail.ReceivedQty.Value) >= Math.Abs(inProcessLocationDetail.Qty))
                                {
                                    continue;
                                }

                                if (Math.Abs(totalRecQty) > 0)
                                {
                                    log.Debug("Start cloned ReceiptDetail.");
                                    ReceiptDetail clonedReceiptDetail = new ReceiptDetail();
                                    CloneHelper.CopyProperty(receiptDetail, clonedReceiptDetail);
                                    log.Debug("End cloned ReceiptDetail.");

                                    clonedReceiptDetail.PlannedBill   = inProcessLocationDetail.PlannedBill;
                                    clonedReceiptDetail.IsConsignment = inProcessLocationDetail.IsConsignment;

                                    #region
                                    if (matchInProcessLocationDetailList[0].InProcessLocation.Type == BusinessConstants.CODE_MASTER_INPROCESS_LOCATION_TYPE_VALUE_GAP)
                                    {
                                        inProcessLocationDetail.Qty = 0 - inProcessLocationDetail.Qty;
                                    }
                                    #endregion

                                    if (Math.Abs(totalRecQty) > Math.Abs(inProcessLocationDetail.Qty - (inProcessLocationDetail.ReceivedQty.HasValue ? inProcessLocationDetail.ReceivedQty.Value : decimal.Zero)))
                                    {
                                        clonedReceiptDetail.ReceivedQty = inProcessLocationDetail.Qty - (inProcessLocationDetail.ReceivedQty.HasValue ? inProcessLocationDetail.ReceivedQty.Value : decimal.Zero);
                                        clonedReceiptDetail.ShippedQty  = inProcessLocationDetail.Qty - (inProcessLocationDetail.ReceivedQty.HasValue ? inProcessLocationDetail.ReceivedQty.Value : decimal.Zero);
                                        totalRecQty -= inProcessLocationDetail.Qty - (inProcessLocationDetail.ReceivedQty.HasValue ? inProcessLocationDetail.ReceivedQty.Value : decimal.Zero);
                                    }
                                    else
                                    {
                                        clonedReceiptDetail.ReceivedQty = totalRecQty;
                                        clonedReceiptDetail.ShippedQty  = totalRecQty;
                                        totalRecQty = 0;
                                    }

                                    //因为去掉了数量,记录已经匹配的发货项,避免差异处理的时候匹配多条而产生差异。
                                    clonedReceiptDetail.ReceivedInProcessLocationDetail = inProcessLocationDetail;

                                    noCreateHuReceiptDetailList.Add(clonedReceiptDetail);
                                }
                                else
                                {
                                    break;
                                }
                            }
                            log.Debug("End Fetch matched InProcessLocationDetailList.");

                            //超收,没有找到对应的发货项,只记录收货数,发货数记0
                            if (Math.Abs(totalRecQty) > 0)
                            {
                                ReceiptDetail clonedReceiptDetail = new ReceiptDetail();
                                CloneHelper.CopyProperty(receiptDetail, clonedReceiptDetail);

                                clonedReceiptDetail.ShippedQty  = 0;
                                clonedReceiptDetail.ReceivedQty = totalRecQty;
                                clonedReceiptDetail.ReceivedInProcessLocationDetail = lastInProcessLocationDetail;

                                noCreateHuReceiptDetailList.Add(clonedReceiptDetail);
                            }
                        }
                        else
                        {
                            noCreateHuReceiptDetailList.Add(receiptDetail);
                        }
                    }
                    else
                    {
                        noCreateHuReceiptDetailList.Add(receiptDetail);
                    }
                    log.Debug("End match ReceiptDetail and InProcessLocationDetail.");
                    #endregion

                    foreach (ReceiptDetail noCreateHuReceiptDetail in noCreateHuReceiptDetailList)
                    {
                        noCreateHuReceiptDetail.Receipt = receipt;

                        if (noCreateHuReceiptDetail.ReceivedQty != 0)
                        {
                            #region 入库
                            log.Debug("Start Inventory In.");
                            IList <InventoryTransaction> inventoryTransactionList = this.locationMgr.InventoryIn(noCreateHuReceiptDetail, user, noCreateHuReceiptDetail.PutAwayBinCode);
                            log.Debug("End Inventory In.");
                            #endregion

                            #region 是否检验
                            if (orderDetail.NeedInspection && orderHead.NeedInspection && inventoryTransactionList != null && inventoryTransactionList.Count > 0 &&
                                orderHead.SubType == BusinessConstants.CODE_MASTER_ORDER_SUB_TYPE_VALUE_NML)
                            {
                                foreach (InventoryTransaction inventoryTransaction in inventoryTransactionList)
                                {
                                    if (inventoryTransaction.Location.Code != BusinessConstants.SYSTEM_LOCATION_REJECT)
                                    {
                                        LocationLotDetail locationLotDetail = this.locationLotDetailMgr.LoadLocationLotDetail(inventoryTransaction.LocationLotDetailId);
                                        locationLotDetail.CurrentInspectQty = inventoryTransaction.Qty;
                                        inspectLocationLotDetailList.Add(locationLotDetail);
                                    }
                                }
                            }
                            #endregion
                        }

                        #region 创建收货明细
                        log.Debug("Start Create Receipt Detail.");
                        this.receiptDetailMgr.CreateReceiptDetail(noCreateHuReceiptDetail);
                        receipt.AddReceiptDetail(noCreateHuReceiptDetail);
                        log.Debug("End Create Receipt Detail.");
                        #endregion
                    }

                    #endregion
                }
            }
            #endregion

            #region 检验
            if (inspectLocationLotDetailList.Count > 0)
            {
                //对于没有Hu的,如果收货时已经回冲了负数库存,也就是库存数量和待检验数量不一致可能会有问题
                //增加ipno,receiptno,isseperated字段
                this.inspectOrderMgr.CreateInspectOrder(inspectLocationLotDetailList, user, receipt.InProcessLocations[0].IpNo, receipt.ReceiptNo, false);
            }
            #endregion

            //#region 匹配收货发货项,查找差异
            //IList<InProcessLocationDetail> gapInProcessLocationDetailList = new List<InProcessLocationDetail>();

            //#region 发货项不匹配
            //foreach (InProcessLocationDetail inProcessLocationDetail in inProcessLocationDetailList)
            //{
            //    if (inProcessLocationDetail.OrderLocationTransaction.OrderDetail.OrderHead.Type
            //        != BusinessConstants.CODE_MASTER_ORDER_TYPE_VALUE_PRODUCTION)   //生产暂时不支持差异
            //    {
            //        decimal receivedQty = 0;  //发货项的累计收货数

            //        //一条发货项可能对应多条收货项
            //        foreach (ReceiptDetail receiptDetail in receipt.ReceiptDetails)
            //        {
            //            //匹配收货项和发货项
            //            if (receiptDetail.ReceivedInProcessLocationDetail != null)
            //            {
            //                //对于已经匹配的,直接按发货项匹配
            //                if (receiptDetail.ReceivedInProcessLocationDetail.Id == inProcessLocationDetail.Id)
            //                {
            //                    if (receiptDetail.ReceivedQty.HasValue)
            //                    {
            //                        receivedQty += receiptDetail.ReceivedQty.Value;
            //                    }
            //                }
            //            }
            //            else if (OrderHelper.IsInProcessLocationDetailMatchReceiptDetail(
            //                inProcessLocationDetail, receiptDetail))
            //            {
            //                if (receiptDetail.ReceivedQty.HasValue)
            //                {
            //                    receivedQty += receiptDetail.ReceivedQty.Value;
            //                }
            //            }
            //        }

            //        if (receivedQty != inProcessLocationDetail.Qty)
            //        {
            //            #region 收货数量和发货数量不匹配,记录差异
            //            InProcessLocationDetail gapInProcessLocationDetail = new InProcessLocationDetail();
            //            gapInProcessLocationDetail.Qty = receivedQty - inProcessLocationDetail.Qty;
            //            gapInProcessLocationDetail.OrderLocationTransaction = inProcessLocationDetail.OrderLocationTransaction;
            //            //gapInProcessLocationDetail.HuId = inProcessLocationDetail.HuId;
            //            gapInProcessLocationDetail.LotNo = inProcessLocationDetail.LotNo;
            //            gapInProcessLocationDetail.IsConsignment = inProcessLocationDetail.IsConsignment;
            //            gapInProcessLocationDetail.PlannedBill = inProcessLocationDetail.PlannedBill;

            //            gapInProcessLocationDetailList.Add(gapInProcessLocationDetail);
            //            #endregion
            //        }
            //    }
            //}
            //#endregion

            //#region 收货项不匹配
            //foreach (ReceiptDetail receiptDetail in receipt.ReceiptDetails)
            //{
            //    if (receiptDetail.OrderLocationTransaction.OrderDetail.OrderHead.Type
            //        != BusinessConstants.CODE_MASTER_ORDER_TYPE_VALUE_PRODUCTION)   //生产暂时不支持差异
            //    {
            //        IList<InProcessLocationDetail> matchInProcessLocationDetailList = OrderHelper.FindMatchInProcessLocationDetail(receiptDetail, inProcessLocationDetailList);

            //        if (matchInProcessLocationDetailList == null || matchInProcessLocationDetailList.Count == 0)
            //        {
            //            OrderLocationTransaction outOrderLocationTransaction =
            //                this.orderLocationTransactionMgr.GetOrderLocationTransaction(receiptDetail.OrderLocationTransaction.OrderDetail, BusinessConstants.IO_TYPE_OUT)[0];
            //            #region 没有找到和收货项对应的发货项
            //            InProcessLocationDetail gapInProcessLocationDetail = new InProcessLocationDetail();
            //            gapInProcessLocationDetail.Qty = receiptDetail.ReceivedQty.Value;
            //            gapInProcessLocationDetail.OrderLocationTransaction = outOrderLocationTransaction;
            //            //gapInProcessLocationDetail.HuId = receiptDetail.HuId;
            //            gapInProcessLocationDetail.LotNo = receiptDetail.LotNo;
            //            gapInProcessLocationDetail.IsConsignment = receiptDetail.IsConsignment;
            //            gapInProcessLocationDetail.PlannedBill = receiptDetail.PlannedBill;

            //            gapInProcessLocationDetailList.Add(gapInProcessLocationDetail);
            //            #endregion
            //        }
            //    }
            //}
            //#endregion
            //#endregion

            #region 关闭InProcessLocation
            if (receipt.InProcessLocations != null && receipt.InProcessLocations.Count > 0)
            {
                foreach (InProcessLocation inProcessLocation in receipt.InProcessLocations)
                {
                    if (inProcessLocation.IsAsnUniqueReceipt)
                    {
                        //不支持多次收货直接关闭
                        this.inProcessLocationMgr.CloseInProcessLocation(inProcessLocation, user);
                    }
                    else
                    {
                        this.inProcessLocationMgr.TryCloseInProcessLocation(inProcessLocation, user);
                    }

                    //transportationOrderMgr.TryCompleteTransportationOrder(inProcessLocation, user);
                }
            }
            #endregion
        }
コード例 #42
0
    public void UpdateView()
    {

        OrderHead orderHead = TheOrderHeadMgr.LoadOrderHead(this.OrderNo);
        this.OrderStatus = orderHead.Status;
        this.PartyFromCode = orderHead.PartyFrom.Code;

        DetachedCriteria criteria = DetachedCriteria.For(typeof(OrderLocationTransaction));
        criteria.CreateAlias("OrderDetail", "od");
        criteria.CreateAlias("od.OrderHead", "oh");

        criteria.Add(Expression.Eq("oh.OrderNo", this.OrderNo));
        criteria.Add(Expression.Eq("IOType", this.IOType));

        criteria.AddOrder(Order.Asc("od.Sequence"));
        criteria.AddOrder(Order.Asc("Operation"));
        criteria.AddOrder(Order.Asc("IOType"));

        IList<OrderLocationTransaction> orderLocTransList = TheCriteriaMgr.FindAll<OrderLocationTransaction>(criteria);

        //新增物料
        if (this.OrderStatus == BusinessConstants.CODE_MASTER_STATUS_VALUE_CREATE && this.IOType == BusinessConstants.IO_TYPE_OUT
            && this.ModuleType == BusinessConstants.CODE_MASTER_ORDER_TYPE_VALUE_PRODUCTION && !this.IsScrap)
        {
            GetKitItemList(orderLocTransList);
            OrderLocationTransaction newOrderLocTrans = new OrderLocationTransaction();
            newOrderLocTrans.IOType = this.IOType;
            newOrderLocTrans.IsBlank = true;
            orderLocTransList.Add(newOrderLocTrans);
            this.GV_List.DataBind();
        }

        this.GV_List.DataSource = orderLocTransList;
        this.GV_List.DataBind();
        SaveAllDetail();

        this.GV_List.Columns[4].Visible = false;

        if (this.IsReuse && this.IOType == BusinessConstants.IO_TYPE_OUT)
        {
            if (orderHead.Status != BusinessConstants.CODE_MASTER_STATUS_VALUE_CREATE)
            {
                this.divMessage.Visible = false;
            }
            else
            {
                this.divMessage.Visible = true;
            }
            this.LocationCode = null;
            InitialHuScan();
        
            this.huList = new List<Hu>();
            if (this.GV_HuList != null && this.huList.Count > 0)
            {
                this.fdHuList.Visible = true;
                this.lTitle.Visible = true;
            }
            else
            {
                this.fdHuList.Visible = false;
                this.lTitle.Visible = false;
            }

        }
        else
        {
            this.divMessage.Visible = false;
            this.GV_HuList.Visible = false;
        }



    }
コード例 #43
0
 public virtual void UpdateOrderLocationTransaction(OrderLocationTransaction entity)
 {
     entityDao.UpdateOrderLocationTransaction(entity);
 }
コード例 #44
0
        private LocationTransaction GenerateOrderLocationTransaction(
            OrderLocationTransaction orderLocationTransaction, Location location, User createUser)
        {
            LocationTransaction locationTransaction = new LocationTransaction();

            OrderDetail orderDetail = orderLocationTransaction.OrderDetail;
            OrderHead orderHead = orderDetail.OrderHead;

            locationTransaction.OrderNo = orderHead.OrderNo;
            locationTransaction.ExternalOrderNo = orderHead.ExternalOrderNo;
            locationTransaction.ReferenceOrderNo = orderHead.ReferenceOrderNo;
            locationTransaction.IsSubcontract = orderHead.IsSubcontract;
            locationTransaction.OrderDetailId = orderDetail.Id;
            locationTransaction.OrderLocationTransactionId = orderLocationTransaction.Id;
            //locationTransaction.IpNo =
            //locationTransaction.ReceiptNo =
            locationTransaction.TransactionType = orderLocationTransaction.TransactionType;
            locationTransaction.Item = orderLocationTransaction.Item.Code;
            locationTransaction.ItemDescription = orderLocationTransaction.Item.Description;
            locationTransaction.Uom = orderLocationTransaction.Item.Uom.Code;
            //locationTransaction.Qty =
            locationTransaction.PartyFrom = orderHead.PartyFrom.Code;
            locationTransaction.PartyFromName = orderHead.PartyFrom.Name;
            locationTransaction.PartyTo = orderHead.PartyTo.Code;
            locationTransaction.PartyToName = orderHead.PartyTo.Name;
            locationTransaction.ShipFrom = orderHead.ShipFrom != null ? orderHead.ShipFrom.Code : null;
            locationTransaction.ShipFromAddress = orderHead.ShipFrom != null ? orderHead.ShipFrom.Address : null;
            locationTransaction.ShipTo = orderHead.ShipTo != null ? orderHead.ShipTo.Code : null;
            locationTransaction.ShipToAddress = orderHead.ShipTo != null ? orderHead.ShipTo.Address : null;
            locationTransaction.Location = location != null ? location.Code : null;
            locationTransaction.LocationName = location != null ? location.Name : null;
            locationTransaction.DockDescription = orderHead.DockDescription;
            locationTransaction.Carrier = orderHead.Carrier != null ? orderHead.Carrier.Code : null;
            locationTransaction.CarrierBillCode = orderHead.CarrierBillAddress != null ? orderHead.CarrierBillAddress.Code : null;
            locationTransaction.CarrierBillAddress = orderHead.CarrierBillAddress != null ? orderHead.CarrierBillAddress.Address : null;
            locationTransaction.CreateDate = DateTime.Now;
            locationTransaction.CreateUser = createUser.Code;

            return locationTransaction;
        }
コード例 #45
0
ファイル: ImportMgr.cs プロジェクト: Novthirteen/yfkey-scms
        public IList<OrderLocationTransaction> ReadOrderLocationTransactionFromXls(Stream inputStream, string orderNo)
        {
            if (inputStream.Length == 0)
            {
                throw new BusinessErrorException("Import.Stream.Empty");

            }

            HSSFWorkbook workbook = new HSSFWorkbook(inputStream);

            Sheet sheet = workbook.GetSheetAt(0);
            IEnumerator rows = sheet.GetRowEnumerator();

            ImportHelper.JumpRows(rows, 11);

            #region 列定义
            int colItem = 1;//物料代码
            int colUom = 3;//单位
            int colQty = 4;//数量
            #endregion

            IList<OrderLocationTransaction> existOrderLocTransList = orderLocationTransactionMgr.GetOrderLocationTransaction(orderNo, BusinessConstants.IO_TYPE_OUT);
            if (existOrderLocTransList == null || existOrderLocTransList.Count == 0)
            {
                throw new TechnicalException();
            }
            IList<OrderLocationTransaction> orderLocTransList = new List<OrderLocationTransaction>();
            while (rows.MoveNext())
            {
                Row row = (HSSFRow)rows.Current;
                if (!this.CheckValidDataRow(row, 1, 5))
                {
                    break;//边界
                }

                string itemCode = string.Empty;
                decimal qty = 0;
                string uomCode = string.Empty;

                #region 读取数据

                #region 读取物料代码
                itemCode = row.GetCell(colItem) != null ? row.GetCell(colItem).StringCellValue : string.Empty;
                if (itemCode == null || itemCode.Trim() == string.Empty)
                    this.ThrowCommonError(row.RowNum, colItem, row.GetCell(colItem));

                var i = (
                    from c in orderLocTransList
                    where c.Item.Code.Trim().ToUpper() == itemCode.Trim().ToUpper()
                    select c).Count();

                if (i == 0)
                {
                    i = (
                    from c in existOrderLocTransList
                    where c.Item.Code.Trim().ToUpper() == itemCode.Trim().ToUpper()
                    select c).Count();
                }

                if (i > 0)
                {
                    throw new BusinessErrorException("Import.Business.Error.Duplicate", itemCode, (row.RowNum + 1).ToString(), (colItem + 1).ToString());
                }
                #endregion

                #region 读取数量
                try
                {
                    qty = Convert.ToDecimal(row.GetCell(colQty).NumericCellValue);
                }
                catch
                {
                    this.ThrowCommonError(row.RowNum, colQty, row.GetCell(colQty));
                }
                #endregion

                #region 读取单位
                uomCode = row.GetCell(colUom) != null ? row.GetCell(colUom).StringCellValue : string.Empty;
                if (uomCode == null || uomCode.Trim() == string.Empty)
                {
                    throw new BusinessErrorException("Import.Read.Error.Empty", (row.RowNum + 1).ToString(), colUom.ToString());
                }
                #endregion

                #endregion

                #region 填充数据
                Item item = itemMgr.CheckAndLoadItem(itemCode);
                Uom uom = uomMgr.CheckAndLoadUom(uomCode);
                //单位换算
                if (item.Uom.Code.Trim().ToUpper() != uom.Code.Trim().ToUpper())
                {
                    qty = uomConversionMgr.ConvertUomQty(item, uom, qty, item.Uom);
                }

                OrderLocationTransaction orderLocTrans = new OrderLocationTransaction();
                orderLocTrans.OrderDetail = existOrderLocTransList[0].OrderDetail;
                orderLocTrans.Location = existOrderLocTransList[0].Location;
                orderLocTrans.Item = item;
                orderLocTrans.Uom = uom;
                orderLocTrans.OrderedQty = qty;
                orderLocTrans.UnitQty = 1;
                orderLocTrans.Operation = 10;
                orderLocTrans.IsAssemble = true;
                orderLocTrans.IOType = BusinessConstants.IO_TYPE_OUT;
                orderLocTrans.IsBlank = false;
                orderLocTrans.TransactionType = BusinessConstants.CODE_MASTER_LOCATION_TRANSACTION_TYPE_VALUE_ISS_WO;

                orderLocTransList.Add(orderLocTrans);
                #endregion

            }
            return orderLocTransList;
        }
コード例 #46
0
        public void RecordOrderShipQty(OrderLocationTransaction orderLocationTransaction, InProcessLocationDetail inProcessLocationDetail, bool checkExcceed)
        {
            //orderLocationTransaction = this.orderLocationTransactionMgrE.LoadOrderLocationTransaction(orderLocationTransaction.Id);
            EntityPreference entityPreference = this.entityPreferenceMgrE.LoadEntityPreference(BusinessConstants.ENTITY_PREFERENCE_CODE_ALLOW_EXCEED_GI_GR);
            bool allowExceedGiGR = bool.Parse(entityPreference.Value); //企业属性,允许过量发货和收货

            OrderDetail orderDetail = orderLocationTransaction.OrderDetail;
            OrderHead orderHead = orderDetail.OrderHead;
            decimal shipQty = inProcessLocationDetail.Qty * orderLocationTransaction.UnitQty;

            #region 是否过量发货判断
            //生产物料发货不检查过量选项
            if (orderLocationTransaction.OrderDetail.OrderHead.Type != BusinessConstants.CODE_MASTER_ORDER_TYPE_VALUE_PRODUCTION
                && orderLocationTransaction.OrderDetail.OrderHead.SubType != BusinessConstants.CODE_MASTER_ORDER_SUB_TYPE_VALUE_ADJ)
            {
                //检查AccumulateQty(已发数)不能大于等于OrderedQty(订单数)
                //if (!(orderHead.AllowExceed && allowExceedGiGR))
                //{
                //    if ((orderLocationTransaction.OrderedQty > 0 && orderLocationTransaction.AccumulateQty.HasValue && orderLocationTransaction.AccumulateQty.Value >= orderLocationTransaction.OrderedQty && shipQty > 0)
                //            || (orderLocationTransaction.OrderedQty < 0 && orderLocationTransaction.AccumulateQty.HasValue && orderLocationTransaction.AccumulateQty.Value <= orderLocationTransaction.OrderedQty && shipQty < 0))
                //    {
                //        throw new BusinessErrorException("Order.Error.ShipExcceed", orderHead.OrderNo, orderLocationTransaction.Item.Code);
                //    }
                //}

                if (!(orderHead.AllowExceed && allowExceedGiGR) && checkExcceed)   //不允许过量发货
                {
                    //检查AccumulateQty(已发数) + shipQty(本次发货数)不能大于OrderedQty(订单数)
                    orderLocationTransaction.AccumulateQty = orderLocationTransaction.AccumulateQty.HasValue ? orderLocationTransaction.AccumulateQty.Value : 0;
                    if ((orderLocationTransaction.OrderedQty > 0 && (orderLocationTransaction.AccumulateQty + shipQty > orderLocationTransaction.OrderedQty))
                        || (orderLocationTransaction.OrderedQty < 0 && (orderLocationTransaction.AccumulateQty + shipQty < orderLocationTransaction.OrderedQty)))
                    {
                        throw new BusinessErrorException("Order.Error.ShipExcceed", orderHead.OrderNo, orderLocationTransaction.Item.Code);
                    }
                }
            }
            #endregion

            #region 记录发货量
            if (orderLocationTransaction.BackFlushMethod == null ||
                orderLocationTransaction.BackFlushMethod == BusinessConstants.CODE_MASTER_BACKFLUSH_METHOD_VALUE_GOODS_RECEIVE)
            {
                if (!orderLocationTransaction.AccumulateQty.HasValue)
                {
                    orderLocationTransaction.AccumulateQty = 0;
                }
                //记录LocationTransaction的累计发货量
                orderLocationTransaction.AccumulateQty += shipQty;
                this.orderLocationTransactionMgrE.UpdateOrderLocationTransaction(orderLocationTransaction);

                //记录OrderDetail的累计发货量
                if (orderLocationTransaction.Item.Code == orderLocationTransaction.OrderDetail.Item.Code)
                {
                    //如果OrderLocationTransaction和OrderDetail上的Item一致,需要更新OrderDetail上的ShippedQty
                    if (!orderDetail.ShippedQty.HasValue)
                    {
                        orderDetail.ShippedQty = 0;
                    }

                    //OrderLocationTransaction和OrderDetail上的Item可能单位不一致,直接除以UnitQty就可以转换了
                    orderDetail.ShippedQty += (shipQty / orderLocationTransaction.UnitQty);
                    this.UpdateOrderDetail(orderDetail);
                }
            }
            #endregion
        }
 public virtual void CreateOrderLocationTransaction(OrderLocationTransaction entity)
 {
     Create(entity);
 }
コード例 #48
0
    protected void lbtnAdd_Click(object sender, EventArgs e)
    {


        int rowIndex = ((GridViewRow)(((DataControlFieldCell)(((LinkButton)(sender)).Parent)).Parent)).RowIndex;
        GridViewRow row = this.GV_List.Rows[rowIndex];
        RequiredFieldValidator rfvItem = (RequiredFieldValidator)(row.FindControl("rfvItem"));
        if (!rfvItem.IsValid)
            return;
        if (checkItemExists())
        {
            ShowErrorMessage("MasterData.Order.OrderDetail.Item.Exists");
            return;
        }
        OrderLocationTransaction orderLocTrans = new OrderLocationTransaction();



        orderLocTrans.Operation = int.Parse(((TextBox)row.FindControl("tbOperation")).Text.Trim());
        orderLocTrans.OrderDetail = TheOrderDetailMgr.LoadOrderDetail(int.Parse(((DropDownList)row.FindControl("tbKitItem")).SelectedValue));

        orderLocTrans.UnitQty = decimal.Parse(((TextBox)row.FindControl("tbUnitQty")).Text.Trim());
        Item item = TheItemMgr.LoadItem(((Controls_TextBox)row.FindControl("tbItem")).Text.Trim());
        if (item != null)
        {
            orderLocTrans.Item = item;
            orderLocTrans.Uom = item.Uom;

        }
        orderLocTrans.OrderedQty = decimal.Parse(((TextBox)row.FindControl("tbOrderdQty")).Text.Trim());

        if (orderLocTrans.OrderedQty == 0)
        {
            orderLocTrans.OrderedQty = orderLocTrans.UnitQty * orderLocTrans.OrderDetail.OrderedQty;
        }

        Controls_TextBox tbLocation = (Controls_TextBox)row.FindControl("tbLocation");
        if (tbLocation.Text.Trim() != string.Empty)
        {
            orderLocTrans.Location = TheLocationMgr.LoadLocation(tbLocation.Text.Trim());
        }

        orderLocTrans.NeedPrint = ((CheckBox)row.FindControl("cbNeedPrint")).Checked;

        orderLocTrans.IsAssemble = true;
        orderLocTrans.IOType = this.IOType;
        orderLocTrans.IsBlank = false;
        orderLocTrans.TransactionType = BusinessConstants.CODE_MASTER_LOCATION_TRANSACTION_TYPE_VALUE_ISS_WO;

        try
        {
            TheOrderMgr.AddOrderLocationTransaction(orderLocTrans, this.CurrentUser);
            ShowSuccessMessage("MasterData.Order.LocTrans.Add.Successfully");
            UpdateRoutingEvent(this.OrderNo, e);
            UpdateView();
        }
        catch (BusinessErrorException ex)
        {
            ShowErrorMessage(ex);
        }

    }
コード例 #49
0
 public IList <InProcessLocationDetail> GetInProcessLocationDetail(OrderLocationTransaction orderLocationTransaction)
 {
     return(GetInProcessLocationDetail(orderLocationTransaction, null));
 }
コード例 #50
0
        public void CreateInProcessLocationDetail(InProcessLocation inProcessLocation, OrderLocationTransaction outOrderLocationTransaction, IList<InventoryTransaction> inventoryTransactionList)
        {
            if (inventoryTransactionList != null && inventoryTransactionList.Count > 0)
            {
                InProcessLocationDetail mergedInProcessLocationDetail = null;

                foreach (InventoryTransaction inventoryTransaction in inventoryTransactionList)
                {
                    if (inventoryTransaction.Hu == null && !inventoryTransaction.IsConsignment)
                    {
                        #region 合并发货数量
                        //没有HU && 非寄售才可以合并
                        if (mergedInProcessLocationDetail == null)
                        {
                            mergedInProcessLocationDetail = new InProcessLocationDetail();
                            mergedInProcessLocationDetail.InProcessLocation = inProcessLocation;
                            mergedInProcessLocationDetail.OrderLocationTransaction = outOrderLocationTransaction;
                            mergedInProcessLocationDetail.Item = outOrderLocationTransaction.OrderDetail.Item;
                            mergedInProcessLocationDetail.ReferenceItemCode = outOrderLocationTransaction.OrderDetail.ReferenceItemCode;
                            mergedInProcessLocationDetail.CustomerItemCode = outOrderLocationTransaction.OrderDetail.CustomerItemCode;
                            mergedInProcessLocationDetail.Uom = outOrderLocationTransaction.OrderDetail.Uom;
                            mergedInProcessLocationDetail.UnitCount = outOrderLocationTransaction.OrderDetail.UnitCount;
                            mergedInProcessLocationDetail.LocationFrom = outOrderLocationTransaction.OrderDetail.LocationFrom;
                            mergedInProcessLocationDetail.LocationTo = outOrderLocationTransaction.OrderDetail.LocationTo;
                        }

                        mergedInProcessLocationDetail.Qty += (0 - inventoryTransaction.Qty) / outOrderLocationTransaction.UnitQty;
                        #endregion
                    }
                    else
                    {
                        InProcessLocationDetail inProcessLocationDetail = new InProcessLocationDetail();
                        inProcessLocationDetail.InProcessLocation = inProcessLocation;
                        inProcessLocationDetail.OrderLocationTransaction = outOrderLocationTransaction;
                        if (inventoryTransaction.Hu != null)
                        {
                            inProcessLocationDetail.HuId = inventoryTransaction.Hu.HuId;
                            inProcessLocationDetail.LotNo = inventoryTransaction.Hu.LotNo;
                        }
                        inProcessLocationDetail.IsConsignment = inventoryTransaction.IsConsignment;
                        inProcessLocationDetail.PlannedBill = inventoryTransaction.PlannedBill;
                        inProcessLocationDetail.Qty = (0 - inventoryTransaction.Qty) / outOrderLocationTransaction.UnitQty;
                        inProcessLocationDetail.Item = outOrderLocationTransaction.OrderDetail.Item;
                        inProcessLocationDetail.ReferenceItemCode = outOrderLocationTransaction.OrderDetail.ReferenceItemCode;
                        inProcessLocationDetail.CustomerItemCode = outOrderLocationTransaction.OrderDetail.CustomerItemCode;
                        inProcessLocationDetail.Uom = outOrderLocationTransaction.OrderDetail.Uom;
                        inProcessLocationDetail.UnitCount = outOrderLocationTransaction.OrderDetail.UnitCount;
                        inProcessLocationDetail.LocationFrom = outOrderLocationTransaction.OrderDetail.LocationFrom;
                        inProcessLocationDetail.LocationTo = outOrderLocationTransaction.OrderDetail.LocationTo;

                        inProcessLocation.AddInProcessLocationDetail(inProcessLocationDetail);

                        this.CreateInProcessLocationDetail(inProcessLocationDetail);
                    }
                }

                if (mergedInProcessLocationDetail != null)
                {
                    inProcessLocation.AddInProcessLocationDetail(mergedInProcessLocationDetail);

                    this.CreateInProcessLocationDetail(mergedInProcessLocationDetail);
                }
            }
        }
コード例 #51
0
 public virtual void DeleteOrderLocationTransaction(OrderLocationTransaction entity)
 {
     entityDao.DeleteOrderLocationTransaction(entity);
 }
コード例 #52
0
        public void CreateInProcessLocationDetail(InProcessLocation inProcessLocation, OrderLocationTransaction outOrderLocationTransaction, IList <InventoryTransaction> inventoryTransactionList)
        {
            if (inventoryTransactionList != null && inventoryTransactionList.Count > 0)
            {
                InProcessLocationDetail mergedInProcessLocationDetail = null;

                foreach (InventoryTransaction inventoryTransaction in inventoryTransactionList)
                {
                    if (inventoryTransaction.Hu == null && !inventoryTransaction.IsConsignment)
                    {
                        #region 合并发货数量
                        //没有HU && 非寄售才可以合并
                        if (mergedInProcessLocationDetail == null)
                        {
                            mergedInProcessLocationDetail = new InProcessLocationDetail();
                            mergedInProcessLocationDetail.InProcessLocation        = inProcessLocation;
                            mergedInProcessLocationDetail.OrderLocationTransaction = outOrderLocationTransaction;
                        }

                        mergedInProcessLocationDetail.Qty += (0 - inventoryTransaction.Qty) / outOrderLocationTransaction.UnitQty;
                        #endregion
                    }
                    else
                    {
                        InProcessLocationDetail inProcessLocationDetail = new InProcessLocationDetail();
                        inProcessLocationDetail.InProcessLocation        = inProcessLocation;
                        inProcessLocationDetail.OrderLocationTransaction = outOrderLocationTransaction;
                        if (inventoryTransaction.Hu != null)
                        {
                            inProcessLocationDetail.HuId  = inventoryTransaction.Hu.HuId;
                            inProcessLocationDetail.LotNo = inventoryTransaction.Hu.LotNo;
                        }
                        inProcessLocationDetail.IsConsignment = inventoryTransaction.IsConsignment;
                        inProcessLocationDetail.PlannedBill   = inventoryTransaction.PlannedBill;
                        inProcessLocationDetail.Qty           = (0 - inventoryTransaction.Qty) / outOrderLocationTransaction.UnitQty;

                        inProcessLocation.AddInProcessLocationDetail(inProcessLocationDetail);

                        this.CreateInProcessLocationDetail(inProcessLocationDetail);
                    }
                }

                if (mergedInProcessLocationDetail != null)
                {
                    inProcessLocation.AddInProcessLocationDetail(mergedInProcessLocationDetail);

                    this.CreateInProcessLocationDetail(mergedInProcessLocationDetail);
                }
            }
        }
コード例 #53
0
        private Receipt BuildReceipt(OrderLocationTransaction orderLocationTransaction, IList<DssImportHistory> dssImportHistoryList)
        {
            if (orderLocationTransaction == null || dssImportHistoryList == null || dssImportHistoryList.Count == 0)
                return null;

            Receipt receipt = new Receipt();
            IList<OrderLocationTransaction> orderLocTransList = this.orderLocationTransactionMgr.GetOrderLocationTransaction(orderLocationTransaction.OrderDetail.Id, BusinessConstants.IO_TYPE_OUT);
            foreach (var dssImportHistory in dssImportHistoryList)
            {
                ReceiptDetail receiptDetail = new ReceiptDetail();
                receiptDetail.Receipt = receipt;
                receiptDetail.OrderLocationTransaction = orderLocationTransaction;
                receiptDetail.HuId = dssImportHistory.HuId;
                receiptDetail.ReceivedQty = dssImportHistory.Qty;

                #region 找Out的OrderLocTrans,填充MaterialFlushBack
                foreach (OrderLocationTransaction orderLocTrans in orderLocTransList)
                {
                    MaterialFlushBack material = new MaterialFlushBack();
                    material.OrderLocationTransaction = orderLocTrans;
                    if (orderLocTrans.UnitQty != 0)
                    {
                        material.Qty = dssImportHistory.Qty;
                    }
                    receiptDetail.AddMaterialFlushBack(material);
                }
                #endregion

                receipt.AddReceiptDetail(receiptDetail);
            }

            return receipt;
        }
コード例 #54
0
        public void ReplaceAbstractItem(OrderLocationTransaction orderLocationTransaction, BomDetail bomDetail)
        {
            OrderDetail orderDetail = orderLocationTransaction.OrderDetail;
            OrderHead orderHead = orderDetail.OrderHead;

            //ɾ�������
            this.DeleteOrderLocationTransaction(orderLocationTransaction);
            orderDetail.RemoveOrderLocationTransaction(orderLocationTransaction);
            if (orderLocationTransaction.Operation != 0)
            {
                //ɾ����Ӧ��OrderOp
                this.orderOperationMgr.TryDeleteOrderOperation(orderHead, orderLocationTransaction.Operation);
            }

            //���Էֽ��Ӽ�
            string bomCode = this.bomMgr.FindBomCode(bomDetail.Item);
            IList<BomDetail> bomDetailList = this.bomDetailMgr.GetFlatBomDetail(bomCode, orderHead.StartTime);
            if (bomDetailList != null && bomDetailList.Count > 0)
            {
                //�Ӽ���Bom
                foreach (BomDetail subBomDetail in bomDetailList)
                {
                    //ѭ�������Ӽ���Bom
                    OrderLocationTransaction newOrderLocationTransaction = this.AddNewMaterial(orderDetail, subBomDetail, orderLocationTransaction.Location, orderLocationTransaction.OrderedQty);
                    if (newOrderLocationTransaction != null &&
                        newOrderLocationTransaction.Item.Type == BusinessConstants.CODE_MASTER_ITEM_TYPE_VALUE_A)
                    {
                        //����Ӽ���Bom�������������Ƕ�׵����滻�����������
                        this.AutoReplaceAbstractItem(newOrderLocationTransaction);
                    }
                }
            }
            else
            {
                //�Ӽ�û��Bom�����Ӽ�ֱ���滻�����
                this.AddNewMaterial(orderDetail, bomDetail, orderLocationTransaction.Location, orderLocationTransaction.OrderedQty);
            }
        }
コード例 #55
0
 public IList<InProcessLocationDetail> GetInProcessLocationDetail(OrderLocationTransaction orderLocationTransaction)
 {
     return GetInProcessLocationDetail(orderLocationTransaction, null);
 }
コード例 #56
0
        public IList<InProcessLocationDetail> GetInProcessLocationDetail(OrderLocationTransaction orderLocationTransaction, string asnType)
        {
            DetachedCriteria criteria = DetachedCriteria.For<InProcessLocationDetail>();
            criteria.CreateAlias("OrderLocationTransaction", "olt");
            criteria.Add(Expression.Eq("olt.Id", orderLocationTransaction.Id));

            if (asnType != null)
            {
                criteria.CreateAlias("InProcessLocation", "ip");
                criteria.Add(Expression.Eq("ip.Type", asnType));
            }

            return this.criteriaMgr.FindAll<InProcessLocationDetail>(criteria);
        }
コード例 #57
0
        public void CreateInProcessLocationDetail(InProcessLocation inProcessLocation, OrderLocationTransaction outOrderLocationTransaction, IList <Hu> huList)
        {
            if (huList != null && huList.Count > 0)
            {
                foreach (Hu hu in huList)
                {
                    InProcessLocationDetail inProcessLocationDetail = new InProcessLocationDetail();
                    inProcessLocationDetail.InProcessLocation        = inProcessLocation;
                    inProcessLocationDetail.OrderLocationTransaction = outOrderLocationTransaction;
                    inProcessLocationDetail.HuId  = hu.HuId;
                    inProcessLocationDetail.LotNo = hu.LotNo;
                    inProcessLocationDetail.Qty   = hu.Qty * hu.UnitQty / outOrderLocationTransaction.UnitQty; //先乘Hu.UnitQty转为基本单位,在除outOrderLocationTransaction.UnitQty转为订单单位。

                    inProcessLocation.AddInProcessLocationDetail(inProcessLocationDetail);

                    this.CreateInProcessLocationDetail(inProcessLocationDetail);
                }
            }
        }
コード例 #58
0
        public InProcessLocationDetail GetNoneHuAndIsConsignmentInProcessLocationDetail(InProcessLocation inProcessLocation, OrderLocationTransaction orderLocationTransaction)
        {
            DetachedCriteria criteria = DetachedCriteria.For<InProcessLocationDetail>();

            criteria.Add(Expression.Eq("InProcessLocation.IpNo", inProcessLocation.IpNo));
            criteria.Add(Expression.Eq("OrderLocationTransaction.Id", orderLocationTransaction.Id));
            criteria.Add(Expression.Or(Expression.IsNull("HuId"), Expression.Eq("HuId", "")));
            criteria.Add(Expression.Eq("IsConsignment", false));

            IList<InProcessLocationDetail> list = this.criteriaMgr.FindAll<InProcessLocationDetail>(criteria);

            if (list != null && list.Count > 0)
            {
                return list[0];
            }
            else
            {
                return null;
            }
        }
コード例 #59
0
        private Hu CreateHuFromOdd(ReceiptDetail receiptDetail, User user)
        {
            OrderLocationTransaction orderLocationTransaction = receiptDetail.OrderLocationTransaction;
            OrderDetail orderDetail = orderLocationTransaction.OrderDetail;
            OrderHead   orderHead   = orderDetail.OrderHead;
            Receipt     receipt     = receiptDetail.Receipt;

            int     huLotSize = orderDetail.HuLotSize.Value;
            decimal qty       = 0; //累计库存Odd数量

            #region 循环获取库存Odd数量
            IList <HuOdd> huOddList = this.huOddMgr.GetHuOdd(
                orderDetail.Item, orderDetail.UnitCount, orderDetail.Uom,
                orderDetail.DefaultLocationFrom, orderDetail.DefaultLocationTo,
                BusinessConstants.CODE_MASTER_STATUS_VALUE_CREATE);

            if (huOddList != null && huOddList.Count > 0)
            {
                foreach (HuOdd huOdd in huOddList)
                {
                    qty += huOdd.OddQty - huOdd.CreatedQty;
                }

                if (qty + receiptDetail.ReceivedQty.Value >= huLotSize)
                {
                    #region 满足批量,创建Hu
                    DateTime dateTimeNow = DateTime.Now;

                    #region 更新库存Odd,出库
                    foreach (HuOdd huOdd in huOddList)
                    {
                        //全部关闭
                        huOdd.CurrentCreateQty = huOdd.OddQty - huOdd.CreatedQty;
                        huOdd.CreatedQty       = huOdd.OddQty;
                        huOdd.LastModifyDate   = dateTimeNow;
                        huOdd.LastModifyUser   = user;
                        huOdd.Status           = BusinessConstants.CODE_MASTER_STATUS_VALUE_CLOSE;

                        this.huOddMgr.UpdateHuOdd(huOdd);

                        //出库
                        this.locationMgr.InventoryOut(huOdd, receiptDetail, user);
                    }
                    #endregion

                    #region 可能还有零头,需要更新receiptDetail收货数量,等于收货数 + 库存Odd数 - Hu批量
                    receiptDetail.ReceivedQty = qty + receiptDetail.ReceivedQty.Value - huLotSize;
                    #endregion

                    #region 创建Hu
                    ReceiptDetail clonedReceiptDetail = new ReceiptDetail();
                    CloneHelper.CopyProperty(receiptDetail, clonedReceiptDetail);
                    clonedReceiptDetail.ReceivedQty = huLotSize;
                    clonedReceiptDetail.RejectedQty = 0;
                    IList <Hu> huList = this.huMgr.CreateHu(clonedReceiptDetail, user);

                    return(huList[0]);

                    #endregion

                    #endregion
                }
            }

            return(null);

            #endregion
        }
コード例 #60
0
        public void AddOrderLocationTransaction(OrderLocationTransaction orderLocationTransaction, User user)
        {

            OrderDetail orderDetail = orderDetailMgrE.LoadOrderDetail(orderLocationTransaction.OrderDetail.Id);
            OrderHead orderHead = orderDetail.OrderHead;

            //权限校验
            //if (!OrderHelper.CheckOrderOperationAuthrize(orderHead, user, BusinessConstants.ORDER_OPERATION_EDIT_ORDER_DETAIL))
            //{
            //    throw new BusinessErrorException("OrderDetail.Error.NoEditPermission", orderHead.OrderNo);
            //}

            if (orderHead.Status == BusinessConstants.CODE_MASTER_STATUS_VALUE_CREATE)
            {

                //添加OrderLocationTransaction
                IList<int> unusedList = new List<int>();
                orderLocationTransactionMgrE.CreateOrderLocationTransaction(orderLocationTransaction);
                orderDetail.AddOrderLocationTransaction(orderLocationTransaction);

                //更新OrderOp
                this.orderOperationMgrE.TryAddOrderOperation(orderHead, orderLocationTransaction.Operation, null);

                //更新LastModifyDate、LastModifyUser
                orderHead.LastModifyDate = DateTime.Now;
                orderHead.LastModifyUser = user;
                orderHeadMgrE.UpdateOrderHead(orderHead);

            }
            else
            {
                throw new BusinessErrorException("Order.Error.StatusErrorWhenModify", BusinessConstants.CODE_MASTER_STATUS_VALUE_CREATE, orderDetail.OrderHead.OrderNo);
            }
        }