public void RemoveOrderLocationTransaction(OrderLocationTransaction orderLocationTransaction) { if (this.OrderLocationTransactions != null) { this.OrderLocationTransactions.Remove(orderLocationTransaction); } }
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); } }
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); }
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; }
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); }
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); }
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); }
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(); }
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; }
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); }
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); }
public void AddOrderLocationTransaction(OrderLocationTransaction orderLocationTransaction) { if (this.OrderLocationTransactions == null) { this.OrderLocationTransactions = new List<OrderLocationTransaction>(); } this.OrderLocationTransactions.Add(orderLocationTransaction); }
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; //收货区域 } }
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); } } }
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); }
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); }
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; } } }
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); } }
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); } } }
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)); }
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)); }
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); }
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); } }
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; }
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); }
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; } } }
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); } } }
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); }
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)); }
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); }
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); }
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); } }
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); }
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"); }
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); }
public void DeleteOrderLocationTransaction(OrderLocationTransaction orderLocationTransaction, User user) { DeleteOrderLocationTransaction(orderLocationTransaction.Id, user); }
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); } } }
public void AddOrderLocationTransaction(OrderLocationTransaction orderLocationTransaction, string userCode) { AddOrderLocationTransaction(orderLocationTransaction, this.userMgrE.CheckAndLoadUser(userCode)); }
public void DeleteOrderLocationTransaction(OrderLocationTransaction orderLocationTransaction, string userCode) { DeleteOrderLocationTransaction(orderLocationTransaction.Id, this.userMgrE.CheckAndLoadUser(userCode)); }
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 }
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; } }
public virtual void UpdateOrderLocationTransaction(OrderLocationTransaction entity) { entityDao.UpdateOrderLocationTransaction(entity); }
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; }
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; }
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); }
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); } }
public IList <InProcessLocationDetail> GetInProcessLocationDetail(OrderLocationTransaction orderLocationTransaction) { return(GetInProcessLocationDetail(orderLocationTransaction, null)); }
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); } } }
public virtual void DeleteOrderLocationTransaction(OrderLocationTransaction entity) { entityDao.DeleteOrderLocationTransaction(entity); }
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); } } }
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; }
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); } }
public IList<InProcessLocationDetail> GetInProcessLocationDetail(OrderLocationTransaction orderLocationTransaction) { return GetInProcessLocationDetail(orderLocationTransaction, null); }
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); }
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); } } }
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; } }
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 }
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); } }