AddOrderLocationTransaction() public méthode

public AddOrderLocationTransaction ( OrderLocationTransaction orderLocationTransaction ) : void
orderLocationTransaction OrderLocationTransaction
Résultat void
        public OrderLocationTransaction GenerateOrderLocationTransaction(
            OrderDetail orderDetail, Item item, BomDetail bomDetail, Uom uom, int operation,
            string ioType, string transactionType, decimal unitQty, Location loc,
            bool isShipScanHu, int? huLotSize, bool needPrint, string backFlushMethod, string itemVersion, Location rejectLocation)
        {
            OrderLocationTransaction orderLocationTransaction = new OrderLocationTransaction();
            orderLocationTransaction.OrderDetail = orderDetail;
            orderLocationTransaction.Item = item;
            orderLocationTransaction.OrderedQty = unitQty * orderDetail.OrderedQty;   //����unitQty����ʵ�ʵĶ�����
            orderLocationTransaction.Uom = uom;
            orderLocationTransaction.Operation = operation;
            orderLocationTransaction.IOType = ioType;
            orderLocationTransaction.TransactionType = transactionType;
            orderLocationTransaction.UnitQty = unitQty;
            orderLocationTransaction.Location = loc;
            orderLocationTransaction.RejectLocation = rejectLocation;
            orderLocationTransaction.IsShipScanHu = isShipScanHu;  //��������Ч
            orderLocationTransaction.BackFlushMethod = backFlushMethod;  //�����س����Ϸ�ʽ
            orderLocationTransaction.ItemVersion = itemVersion;
            if (huLotSize.HasValue)
            {
                orderLocationTransaction.HuLotSize = int.Parse(Math.Round(huLotSize.Value * unitQty).ToString("0.#########"));

            }
            orderLocationTransaction.NeedPrint = needPrint;
            orderLocationTransaction.IsAssemble = true;   //Ĭ�϶���װ
            if (bomDetail != null)
            {
                orderLocationTransaction.BomDetail = bomDetail;
                if (bomDetail.StructureType == BusinessConstants.CODE_MASTER_BOM_DETAIL_TYPE_VALUE_O)
                {
                    //�����ѡװ����ȡbomDetail.Priority��Ϊѡװ����Ĭ��ֵ��0����Ĭ�ϲ�װ��1����Ĭ�ϰ�װ
                    orderLocationTransaction.IsAssemble = (bomDetail.Priority != 0);
                }
                #region ȡ��λ�ͻ���

                DetachedCriteria criteria = DetachedCriteria.For(typeof(Flow));
                criteria.Add(Expression.Eq("Code", orderDetail.OrderHead.Flow));

                IList<Flow> flowList = criteriaMgr.FindAll<Flow>(criteria);
                if (flowList != null && flowList.Count > 0)
                {
                    if (flowList[0].Routing != null)
                    {
                        #region ��routingdet
                        DetachedCriteria rcriteria = DetachedCriteria.For(typeof(RoutingDetail));
                        rcriteria.Add(Expression.Eq("Routing.Code", flowList[0].Routing.Code));
                        rcriteria.Add(Expression.Eq("Operation", bomDetail.Operation));

                        IList<RoutingDetail> routingDetailList = criteriaMgr.FindAll<RoutingDetail>(rcriteria);
                        if (routingDetailList != null && routingDetailList.Count > 0)
                        {
                            if (routingDetailList[0].TagNo != null && routingDetailList[0].TagNo != string.Empty)
                            {
                                orderLocationTransaction.TagNo = routingDetailList[0].TagNo;

                                #region �Ҷ�Ӧ�Ĺ�λ����
                                DetachedCriteria scriteria = DetachedCriteria.For(typeof(ShelfItem));
                                scriteria.CreateAlias("Shelf", "s");
                                scriteria.Add(Expression.Eq("s.TagNo", orderLocationTransaction.TagNo));
                                scriteria.Add(Expression.Eq("IsActive", true));
                                scriteria.Add(Expression.Eq("Item.Code", orderLocationTransaction.Item.Code));
                                IList<ShelfItem> shelfItemDetailList = criteriaMgr.FindAll<ShelfItem>(scriteria);
                                if (shelfItemDetailList != null && shelfItemDetailList.Count > 0)
                                {
                                    orderLocationTransaction.Shelf = shelfItemDetailList[0].Shelf.Code;
                                }
                                #endregion
                            }
                        }
                        #endregion
                    }
                }
                #endregion
            }
            //����
            orderLocationTransaction.Cartons = Convert.ToInt32(orderLocationTransaction.OrderedQty / orderLocationTransaction.Item.UnitCount);

            if (uom.Code != item.Uom.Code)   //�Ϳ�浥λ��һ�£���Ҫ����ת��
            {
                //��λת��������UnitQty��OrderedQtyֵ
                orderLocationTransaction.Uom = item.Uom;
                orderLocationTransaction.UnitQty = this.uomConversionMgr.ConvertUomQty(item, uom, unitQty, item.Uom);
                orderLocationTransaction.OrderedQty = this.uomConversionMgr.ConvertUomQty(item, uom, orderLocationTransaction.OrderedQty, item.Uom);

                if (orderLocationTransaction.HuLotSize.HasValue)
                {
                    orderLocationTransaction.HuLotSize = int.Parse(Math.Round(orderLocationTransaction.HuLotSize.Value * orderLocationTransaction.UnitQty).ToString("#"));
                }
            }

            orderDetail.AddOrderLocationTransaction(orderLocationTransaction);
            return orderLocationTransaction;
        }
        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 OrderLocationTransaction GenerateOrderLocationTransaction(
            OrderDetail orderDetail, Item item, BomDetail bomDetail, Uom uom, int operation,
            string ioType, string transactionType, decimal unitQty, Location loc,
            bool isShipScanHu, int? huLotSize, bool needPrint, string backFlushMethod, string itemVersion, Location rejectLocation)
        {
            OrderLocationTransaction orderLocationTransaction = new OrderLocationTransaction();
            orderLocationTransaction.OrderDetail = orderDetail;
            orderLocationTransaction.Item = item;
            orderLocationTransaction.OrderedQty = unitQty * orderDetail.OrderedQty;   //根据unitQty计算实际的订单量
            orderLocationTransaction.Uom = uom;
            orderLocationTransaction.Operation = operation;
            orderLocationTransaction.IOType = ioType;
            orderLocationTransaction.TransactionType = transactionType;
            orderLocationTransaction.UnitQty = unitQty;
            orderLocationTransaction.Location = loc;
            orderLocationTransaction.RejectLocation = rejectLocation;
            orderLocationTransaction.IsShipScanHu = isShipScanHu;  //仅生产有效
            orderLocationTransaction.BackFlushMethod = backFlushMethod;  //生产回冲物料方式
            orderLocationTransaction.ItemVersion = itemVersion;
            if (huLotSize.HasValue)
            {
                orderLocationTransaction.HuLotSize = int.Parse(Math.Round(huLotSize.Value * unitQty).ToString("#"));
            }
            orderLocationTransaction.NeedPrint = needPrint;
            orderLocationTransaction.IsAssemble = true;   //默认都安装
            if (bomDetail != null)
            {
                orderLocationTransaction.BomDetail = bomDetail;
                if (bomDetail.StructureType == BusinessConstants.CODE_MASTER_BOM_DETAIL_TYPE_VALUE_O)
                {
                    //如果是选装件,取bomDetail.Priority作为选装件的默认值,0代表默认不装,1代表默认安装
                    orderLocationTransaction.IsAssemble = (bomDetail.Priority != 0);
                }
            }

            if (uom.Code != item.Uom.Code)   //和库存单位不一致,需要进行转化
            {
                //单位转化,更改UnitQty和OrderedQty值
                orderLocationTransaction.Uom = item.Uom;
                orderLocationTransaction.UnitQty = this.uomConversionMgrE.ConvertUomQty(item, uom, unitQty, item.Uom);
                orderLocationTransaction.OrderedQty = this.uomConversionMgrE.ConvertUomQty(item, uom, orderLocationTransaction.OrderedQty, item.Uom);

                if (orderLocationTransaction.HuLotSize.HasValue)
                {
                    orderLocationTransaction.HuLotSize = int.Parse(Math.Round(orderLocationTransaction.HuLotSize.Value * orderLocationTransaction.UnitQty).ToString("#"));
                }
            }

            orderDetail.AddOrderLocationTransaction(orderLocationTransaction);
            return orderLocationTransaction;
        }