コード例 #1
0
        /// <param name="contract">A Contract able to navigate to Contract.Customer.ProductCodes.</param>
        internal IResult Execute(Contract contract, List <SetContractItemParameters> newItems)
        {
            if (contract == null)
            {
                throw new ArgumentNullException("contract");
            }
            if (newItems == null)
            {
                throw new ArgumentNullException("newItems");
            }

            var unitOfWorkHelper = new EFUnitOfWorkHelper(_salesUnitOfWork);
            var productCodes     = (contract.Customer.ProductCodes ?? new CustomerProductCode[0]).ToList();

            var matches = (contract.ContractItems ?? new ContractItem[0]).BestMatches(newItems,
                                                                                      (c, n) => n.ChileProductKey.Equals(c),
                                                                                      (c, n) => n.PackagingProductKey.Equals(c),
                                                                                      (c, n) => n.TreatmentKey.Equals(c),
                                                                                      (c, n) => n.ContractItemParameters.UseCustomerSpec == c.UseCustomerSpec,
                                                                                      (c, n) => n.ContractItemParameters.CustomerCodeOverride == c.CustomerProductCode,
                                                                                      (c, n) => n.ContractItemParameters.Quantity == c.Quantity);

            foreach (var match in matches)
            {
                if (match.Item1 != null && match.Item2 != null)
                {
                    SetContractItem(match.Item1, match.Item2, productCodes);
                }
                else if (match.Item1 != null)
                {
                    _salesUnitOfWork.ContractItemRepository.Remove(match.Item1);
                }
                else if (match.Item2 != null)
                {
                    var nextItemSequence = unitOfWorkHelper.GetNextSequence <ContractItem>(i => i.ContractYear == contract.ContractYear && i.ContractSequence == contract.ContractSequence, i => i.ContractItemSequence);
                    SetContractItem(_salesUnitOfWork.ContractItemRepository.Add(new ContractItem
                    {
                        ContractYear         = contract.ContractYear,
                        ContractSequence     = contract.ContractSequence,
                        ContractItemSequence = nextItemSequence
                    }), match.Item2, productCodes);
                }
            }

            return(new SuccessResult());
        }
コード例 #2
0
        internal IResult Execute(SalesOrder order, List <SetSalesOrderItemParameters> newItems)
        {
            if (order == null)
            {
                throw new ArgumentNullException("order");
            }
            if (newItems == null)
            {
                throw new ArgumentNullException("newItems");
            }

            var unitOfWorkHelper = new EFUnitOfWorkHelper(_salesUnitOfWork);

            var matches = (order.SalesOrderItems ?? new SalesOrderItem[0]).BestMatches(newItems,
                                                                                       (c, n) => n.ContractItemKey == null ? c.ContractItem == null : n.ContractItemKey.Equals(c.ContractItem),
                                                                                       (c, n) => n.ProductKey.Equals(c.InventoryPickOrderItem),
                                                                                       (c, n) => n.PackagingProductKey.Equals(c.InventoryPickOrderItem),
                                                                                       (c, n) => n.InventoryTreatmentKey.Equals(c.InventoryPickOrderItem),
                                                                                       (c, n) => n.SalesOrderItem.Quantity == c.InventoryPickOrderItem.Quantity,
                                                                                       (c, n) => n.SalesOrderItem.CustomerLotCode == c.InventoryPickOrderItem.CustomerLotCode,
                                                                                       (c, n) => n.SalesOrderItem.CustomerProductCode == c.InventoryPickOrderItem.CustomerProductCode,
                                                                                       (c, n) => n.SalesOrderItem.PriceBase == c.PriceBase,
                                                                                       (c, n) => n.SalesOrderItem.PriceFreight == c.PriceFreight,
                                                                                       (c, n) => n.SalesOrderItem.PriceTreatment == c.PriceTreatment,
                                                                                       (c, n) => n.SalesOrderItem.PriceWarehouse == c.PriceWarehouse,
                                                                                       (c, n) => n.SalesOrderItem.PriceRebate == c.PriceRebate);

            foreach (var match in matches)
            {
                if (match.Item1 != null && match.Item2 != null)
                {
                    SetOrderItem(match.Item1, match.Item2);
                }
                else if (match.Item1 != null)
                {
                    if (match.Item1.PickedItems.Any())
                    {
                        return(new InvalidResult(UserMessages.CannotRemovePickedCustomerOrderItem));
                    }
                    _salesUnitOfWork.InventoryPickOrderItemRepository.Remove(match.Item1.InventoryPickOrderItem);
                    _salesUnitOfWork.SalesOrderItemRepository.Remove(match.Item1);
                }
                else if (match.Item2 != null)
                {
                    var nextItemSequence = unitOfWorkHelper.GetNextSequence <SalesOrderItem>(i => i.DateCreated == order.DateCreated && i.Sequence == order.Sequence, i => i.ItemSequence);
                    SetOrderItem(_salesUnitOfWork.SalesOrderItemRepository.Add(new SalesOrderItem
                    {
                        DateCreated  = order.DateCreated,
                        Sequence     = order.Sequence,
                        ItemSequence = nextItemSequence,

                        InventoryPickOrderItem = new InventoryPickOrderItem
                        {
                            DateCreated   = order.DateCreated,
                            OrderSequence = order.Sequence,
                            ItemSequence  = nextItemSequence
                        }
                    }), match.Item2);
                }
            }

            return(new SuccessResult());
        }
コード例 #3
0
        internal IResult <List <PickedInventoryItem> > Execute(IPickedInventoryKey pickedInventoryKey, IEnumerable <ModifyPickedInventoryItemParameters> items)
        {
            if (pickedInventoryKey == null)
            {
                throw new ArgumentNullException("pickedInventoryKey");
            }
            if (items == null)
            {
                throw new ArgumentNullException("items");
            }

            var newItems = new List <PickedInventoryItem>();

            foreach (var item in items)
            {
                if (item.PickedInventoryItemKey != null)
                {
                    var notPendingResult = _unitOfWorkHelper.EntityHasNoPendingChanges(item.PickedInventoryItemKey, item.PickedInventoryItemKey);
                    if (!notPendingResult.Success)
                    {
                        return(notPendingResult.ConvertTo <List <PickedInventoryItem> >());
                    }

                    var pickedItem = _pickedInventoryUnitOfWork.PickedInventoryItemRepository.FindByKey(item.PickedInventoryItemKey);
                    if (pickedItem == null)
                    {
                        return(new InvalidResult <List <PickedInventoryItem> >(null, string.Format(UserMessages.PickedInventoryItemNotFound, item.PickedInventoryItemKey.KeyValue)));
                    }

                    if (pickedItem.CurrentLocationId != pickedItem.FromLocationId)
                    {
                        return(new InvalidResult <List <PickedInventoryItem> >(null, string.Format(UserMessages.PickedInventoryItemNotInOriginalLocation, new PickedInventoryItemKey(pickedItem).KeyValue)));
                    }

                    pickedItem.Quantity            = item.NewQuantity;
                    pickedItem.CurrentLocationId   = item.CurrentLocationKey.LocationKey_Id;
                    pickedItem.CustomerLotCode     = item.CustomerLotCode;
                    pickedItem.CustomerProductCode = item.CustomerProductCode;

                    if (pickedItem.Quantity < 0)
                    {
                        return(new InvalidResult <List <PickedInventoryItem> >(null, string.Format(UserMessages.QuantityForPickedCannotBeNegative, item.PickedInventoryItemKey.KeyValue)));
                    }

                    if (pickedItem.Quantity == 0)
                    {
                        _pickedInventoryUnitOfWork.PickedInventoryItemRepository.Remove(pickedItem);
                    }
                    else
                    {
                        newItems.Add(pickedItem);
                    }
                }
                else
                {
                    if (item.NewQuantity <= 0)
                    {
                        return(new InvalidResult <List <PickedInventoryItem> >(null, string.Format(UserMessages.QuantityForPickingFromInventoryMustBeGreaterThanZero, item.InventoryKey.KeyValue)));
                    }

                    var newSequence            = _unitOfWorkHelper.GetNextSequence(PickedInventoryItemPredicates.FilterByPickedInventoryKey(pickedInventoryKey), i => i.ItemSequence);
                    var newPickedInventoryItem = new PickedInventoryItem
                    {
                        DateCreated  = pickedInventoryKey.PickedInventoryKey_DateCreated,
                        Sequence     = pickedInventoryKey.PickedInventoryKey_Sequence,
                        ItemSequence = newSequence,

                        LotDateCreated     = item.InventoryKey.LotKey_DateCreated,
                        LotDateSequence    = item.InventoryKey.LotKey_DateSequence,
                        LotTypeId          = item.InventoryKey.LotKey_LotTypeId,
                        PackagingProductId = item.InventoryKey.PackagingProductKey_ProductId,
                        TreatmentId        = item.InventoryKey.InventoryTreatmentKey_Id,
                        ToteKey            = item.InventoryKey.InventoryKey_ToteKey,

                        FromLocationId      = item.InventoryKey.LocationKey_Id,
                        CurrentLocationId   = item.CurrentLocationKey.LocationKey_Id,
                        CustomerLotCode     = item.CustomerLotCode,
                        CustomerProductCode = item.CustomerProductCode,

                        Quantity = item.NewQuantity
                    };
                    newItems.Add(_pickedInventoryUnitOfWork.PickedInventoryItemRepository.Add(newPickedInventoryItem));
                }
            }

            return(new SuccessResult <List <PickedInventoryItem> >(newItems));
        }