public IList<OrderDetail> GenerateOrderDetail(OrderHead orderHead, FlowDetail flowDetail, bool isReferencedFlow) { EntityPreference entityPreference = this.entityPreferenceMgrE.LoadEntityPreference(BusinessConstants.ENTITY_PREFERENCE_CODE_SEQ_INTERVAL); int seqInterval = int.Parse(entityPreference.Value); IList<OrderDetail> orderDetailList = new List<OrderDetail>(); OrderDetail orderDetail = new OrderDetail(); orderDetail.FlowDetail = flowDetail; orderDetail.OrderHead = orderHead; if (!isReferencedFlow) { CloneHelper.CopyProperty(flowDetail, orderDetail, FlowDetail2OrderDetailCloneFields); } else { CloneHelper.CopyProperty(flowDetail, orderDetail, ReferenceOrderDetailCloneFields); } #region 查找价格 if (orderHead.Type == BusinessConstants.CODE_MASTER_ORDER_TYPE_VALUE_SUBCONCTRACTING || orderHead.Type == BusinessConstants.CODE_MASTER_ORDER_TYPE_VALUE_PROCUREMENT || orderHead.Type == BusinessConstants.CODE_MASTER_ORDER_TYPE_VALUE_DISTRIBUTION) { if (orderDetail.DefaultPriceList != null) { PriceListDetail priceListDetail = priceListDetailMgrE.GetLastestPriceListDetail(orderDetail.DefaultPriceList, orderDetail.Item, orderHead.StartTime, orderHead.Currency, orderDetail.Uom); orderDetail.IsProvisionalEstimate = priceListDetail == null ? true : priceListDetail.IsProvisionalEstimate; if (priceListDetail != null) { orderDetail.UnitPrice = priceListDetail.UnitPrice; orderDetail.TaxCode = entityPreferenceMgrE.LoadEntityPreference(BusinessConstants.ENTITY_PREFERENCE_CODE_TAX_RATE).Value; //priceListDetail.TaxCode; orderDetail.IsIncludeTax = priceListDetail.IsIncludeTax; } } } #endregion #region 设置退货和次品库位 //if (orderHead.SubType == BusinessConstants.CODE_MASTER_ORDER_SUB_TYPE_VALUE_RTN // || orderHead.SubType == BusinessConstants.CODE_MASTER_ORDER_SUB_TYPE_VALUE_RWO) //{ // if (flowDetail.LocationFrom != null && flowDetail.LocationFrom.ActingLocation != null) // { // orderDetail.LocationFrom = flowDetail.LocationFrom.ActingLocation; // } // if (flowDetail.LocationTo != null && flowDetail.LocationTo.ActingLocation != null) // { // orderDetail.LocationTo = flowDetail.LocationTo.ActingLocation; // } //} if (orderHead.SubType == BusinessConstants.CODE_MASTER_ORDER_SUB_TYPE_VALUE_RWO) { orderDetail.LocationTo = this.locationMgrE.GetRejectLocation(); } #endregion //if (orderDetail.Item.Type == BusinessConstants.CODE_MASTER_ITEM_TYPE_VALUE_K) //{ // #region 处理套件 // IList<ItemKit> itemKitList = this.itemKitMgrE.GetChildItemKit(orderDetail.Item.Code); // if (itemKitList != null && itemKitList.Count > 0) // { // int count = 0; // decimal? convertRate = null; // foreach (ItemKit itemKit in itemKitList) // { // count++; // if (!convertRate.HasValue) // { // if (itemKit.ParentItem.Uom.Code != orderDetail.Uom.Code) // { // convertRate = this.uomConversionMgrE.ConvertUomQty(orderDetail.Item, orderDetail.Uom, 1, itemKit.ParentItem.Uom); // } // else // { // convertRate = 1; // } // } // OrderDetail orderDetailOfChildKit = new OrderDetail(); // CloneHelper.CopyProperty(orderDetail, orderDetailOfChildKit, OrderDetailOfChildKitCloneFields); // orderDetailOfChildKit.Sequence = orderDetailOfChildKit.Sequence + count; // orderDetailOfChildKit.Item = itemKit.ChildItem; // orderDetailOfChildKit.ReferenceItemCode = this.itemReferenceMgrE.GetItemReferenceByItem(itemKit.ChildItem.Code, orderDetail.OrderHead.PartyFrom.Code, orderDetail.OrderHead.PartyTo.Code); // orderDetailOfChildKit.Uom = itemKit.ChildItem.Uom; // orderDetailOfChildKit.UnitCount = itemKit.ChildItem.UnitCount; // //orderDetailOfChildKit.RequiredQty = orderDetailOfChildKit.RequiredQty * itemKit.Qty * convertRate; // //orderDetailOfChildKit.OrderedQty = orderDetailOfChildKit.OrderedQty * itemKit.Qty * convertRate; // orderDetailOfChildKit.GoodsReceiptLotSize = orderDetailOfChildKit.GoodsReceiptLotSize * itemKit.Qty * convertRate; // orderDetailOfChildKit.BatchSize = orderDetailOfChildKit.BatchSize * itemKit.Qty * convertRate; // if (orderDetailOfChildKit.HuLotSize.HasValue) // { // orderDetailOfChildKit.HuLotSize = int.Parse((orderDetailOfChildKit.HuLotSize.Value * itemKit.Qty * convertRate.Value).ToString("#")); // } // #region 计算价格 // if (orderDetailOfChildKit.DefaultPriceListFrom != null) // { // PriceListDetail priceListDetailFrom = priceListDetailMgrE.GetLastestPriceListDetail(orderDetailOfChildKit.DefaultPriceListFrom, orderDetailOfChildKit.Item, orderHead.StartTime, orderHead.Currency, orderDetailOfChildKit.Uom); // if (priceListDetailFrom != null) // { // orderDetailOfChildKit.PriceListDetailFrom = priceListDetailFrom; // } // } // if (orderDetailOfChildKit.DefaultPriceList != null) // { // PriceListDetail priceListDetail = priceListDetailMgrE.GetLastestPriceListDetail(orderDetailOfChildKit.DefaultPriceList, orderDetailOfChildKit.Item, orderHead.StartTime, orderHead.Currency, orderDetailOfChildKit.Uom); // orderDetailOfChildKit.IsProvisionalEstimate = priceListDetail == null ? true : priceListDetail.IsProvisionalEstimate; // if (priceListDetailTo != null) // { // orderDetailOfChildKit.UnitPrice = priceListDetail.UnitPrice; // orderDetailOfChildKit.IsIncludeTax = priceListDetail.IsIncludeTax; // orderDetailOfChildKit.TaxCode = entityPreferenceMgrE.LoadEntityPreference(BusinessConstants.ENTITY_PREFERENCE_CODE_TAX_RATE).Value;//priceListDetail.TaxCode; // } // } // #endregion // //重新设置Sequence // int detailCount = orderHead.OrderDetails != null ? orderHead.OrderDetails.Count : 0; // orderDetail.Sequence = (detailCount + 1) * seqInterval; // orderHead.AddOrderDetail(orderDetailOfChildKit); // orderDetailList.Add(orderDetailOfChildKit); // } // } // else // { // throw new BusinessErrorException("ItemKit.Error.NotFoundForParentItem", orderDetail.Item.Code); // } // #endregion //} //else //{ //重新设置Sequence int detailCount = orderHead.OrderDetails != null ? orderHead.OrderDetails.Count : 0; orderDetail.Sequence = (detailCount + 1) * seqInterval; #region 参考零件号 if (orderDetail.ReferenceItemCode == null || orderDetail.ReferenceItemCode == string.Empty) { string firstPartyCode = string.Empty; string secondPartyCode = string.Empty; if (orderHead.Type == BusinessConstants.CODE_MASTER_FLOW_TYPE_VALUE_DISTRIBUTION) { firstPartyCode = orderHead.PartyTo.Code; } else { firstPartyCode = orderHead.PartyFrom.Code; } orderDetail.ReferenceItemCode = itemReferenceMgrE.GetItemReferenceByItem(orderDetail.Item.Code, firstPartyCode, secondPartyCode); } #endregion #region 设置默认库位 orderDetail.LocationFrom = orderDetail.LocationFrom == null ? orderHead.LocationFrom : orderDetail.LocationFrom; orderDetail.LocationTo = orderDetail.LocationTo == null ? orderHead.LocationTo : orderDetail.LocationTo; #endregion orderHead.AddOrderDetail(orderDetail); orderDetailList.Add(orderDetail); //} return orderDetailList; }