Exemplo n.º 1
0
        private IResult <Lot> CreateChileLot(DateTime timeStamp, IEmployeeKey employeeKey, ReceiveInventoryParameters parameters)
        {
            var chileProductKey = ChileProductKey.FromProductKey(parameters.ProductKey);
            var chileProduct    = _inventoryUnitOfWork.ChileProductRepository.FindByKey(chileProductKey);

            if (chileProduct == null)
            {
                return(new InvalidResult <Lot>(null, string.Format(UserMessages.ChileProductNotFound, chileProductKey.KeyValue)));
            }

            var chileLotResult = new CreateNewChileLotCommand(_inventoryUnitOfWork).Execute(new CreateNewChileLotCommandParameters
            {
                EmployeeKey = employeeKey,
                TimeStamp   = timeStamp,

                ChileProductKey = chileProduct,

                LotType     = parameters.Parameters.LotType,
                LotDate     = parameters.Parameters.LotDate?.Date ?? timeStamp,
                LotSequence = parameters.Parameters.LotSequence,

                PackagingReceivedKey = parameters.PackagingReceivedKey,

                SetLotProductionStatus = LotProductionStatus.Produced,
                SetLotQualityStatus    = LotQualityStatus.Released,

                VendorKey           = parameters.VendorKey,
                PurchaseOrderNumber = parameters.Parameters.PurchaseOrderNumber,
                ShipperNumber       = parameters.Parameters.ShipperNumber
            });

            return(!chileLotResult.Success ? chileLotResult.ConvertTo <Lot>() : new SuccessResult <Lot>(chileLotResult.ResultingObject.Lot));
        }
        private IResult ValidateModifyPickedInventoryItems(InventoryShipmentOrder order, IEnumerable <ModifyPickedInventoryItemParameters> items)
        {
            var validator  = PickedInventoryValidator.ForInterWarehouseOrder(order.SourceFacility);
            var orderItems = order.InventoryPickOrder.Items.ToDictionary(i => i.ToInventoryPickOrderItemKey());

            foreach (var item in items)
            {
                InventoryPickOrderItem orderItem = null;
                if (item.OrderItemKey != null && !orderItems.TryGetValue(item.OrderItemKey, out orderItem))
                {
                    return(new InvalidResult(string.Format(UserMessages.CannotPickForOrderItem_DoesNotExist, item.OrderItemKey)));
                }

                if (item.NewQuantity > item.OriginalQuantity)
                {
                    Dictionary <string, Inventory> inventory;
                    var validResult = validator.ValidateItems(_inventoryShipmentUnitOfWork.InventoryRepository, new[] { item.InventoryKey }, out inventory);

                    IChileProductKey chileProduct;
                    if (orderItem != null)
                    {
                        chileProduct = ChileProductKey.FromProductKey(orderItem.Product);
                    }
                    else
                    {
                        var lotKey = inventory.Single().Value.ToLotKey();
                        chileProduct = _inventoryShipmentUnitOfWork.ChileLotRepository.FindByKey(lotKey);
                        if (chileProduct == null)
                        {
                            return(new InvalidResult(string.Format(UserMessages.ChileLotNotFound, lotKey)));
                        }
                    }

                    IDictionary <AttributeNameKey, ChileProductAttributeRange>    productSpec;
                    IDictionary <AttributeNameKey, CustomerProductAttributeRange> customerSpec;
                    var specResult = new GetProductSpecCommand(_inventoryShipmentUnitOfWork).Execute(chileProduct, orderItem == null ? null : orderItem.Customer, out productSpec, out customerSpec);
                    if (!specResult.Success)
                    {
                        return(specResult);
                    }

                    var inventoryItem  = inventory.Values.Single();
                    var context        = new PickingValidatorContext(productSpec, customerSpec, null, null, orderItem == null ? null : orderItem.Customer);
                    var pickable       = new PickingValidator(inventoryItem.Lot);
                    var pickableResult = pickable.ValidForPicking(context);

                    if (!validResult.Success || !pickableResult.Success)
                    {
                        return(new InvalidResult(new[] { validResult, pickableResult }.CombineMessages()));
                    }
                }
            }

            return(new SuccessResult());
        }
        private void SetValidToPick(LabReportChileLotReturn chileLot)
        {
            var customerKey = chileLot.PackScheduleBaseReturn != null && chileLot.PackScheduleBaseReturn.Customer != null ? chileLot.PackScheduleBaseReturn.Customer.CustomerKeyReturn : null;
            IDictionary <AttributeNameKey, ChileProductAttributeRange>    productSpec;
            IDictionary <AttributeNameKey, CustomerProductAttributeRange> customerSpec;

            if (!new GetProductSpecCommand(_lotUnitOfWork).Execute(ChileProductKey.FromProductKey(chileLot.ChileProductKeyReturn), customerKey, out productSpec, out customerSpec).Success)
            {
                chileLot.ValidToPick = true;
            }

            var lot = _lotUnitOfWork.LotRepository.FindByKey(chileLot.LotKeyReturn.ToLotKey(),
                                                             l => l.ContractAllowances,
                                                             l => l.SalesOrderAllowances,
                                                             l => l.CustomerAllowances,
                                                             l => l.Attributes,
                                                             l => l.AttributeDefects.Select(a => a.LotDefect.Resolution));
            var context   = new PickingValidatorContext(productSpec, customerSpec, null, null, customerKey);
            var validator = new PickingValidator(lot).ValidForPicking(context);

            chileLot.ValidToPick = validator.Success;
        }
Exemplo n.º 4
0
        public IResult <IPickableInventoryReturn> GetInventoryToPickForOrder(FilterInventoryForShipmentOrderParameters parameters)
        {
            if (parameters == null)
            {
                throw new ArgumentNullException("parameters");
            }

            InventoryShipmentOrderKey orderKey;
            InventoryPickOrderItemKey orderItemKey;
            var filterResults = parameters.ParseToPredicateBuilderFilters(out orderKey, out orderItemKey);

            if (!filterResults.Success)
            {
                return(filterResults.ConvertTo <IPickableInventoryReturn>());
            }
            var salesOrderKey     = new SalesOrderKey(orderKey);
            var salesOrderItemKey = orderItemKey == null ? null : new SalesOrderItemKey(orderItemKey);

            var salesOrder = _inventoryShipmentOrderUnitOfWork.SalesOrderRepository.FindByKey(salesOrderKey,
                                                                                              o => o.InventoryShipmentOrder.SourceFacility,
                                                                                              o => o.SalesOrderItems.Select(i => i.ContractItem),
                                                                                              o => o.SalesOrderItems.Select(i => i.InventoryPickOrderItem));

            if (salesOrder == null)
            {
                return(new InvalidResult <IPickableInventoryReturn>(null, string.Format(UserMessages.SalesOrderNotFound, orderKey.KeyValue)));
            }

            IDictionary <AttributeNameKey, ChileProductAttributeRange>    productSpec  = null;
            IDictionary <AttributeNameKey, CustomerProductAttributeRange> customerSpec = null;
            SalesOrderItem orderItem = null;

            if (salesOrderItemKey != null)
            {
                var item = salesOrder.SalesOrderItems.FirstOrDefault(salesOrderItemKey.FindByPredicate.Compile());
                if (item == null)
                {
                    return(new InvalidResult <IPickableInventoryReturn>(null, string.Format(UserMessages.SalesOrderItemNotFound, salesOrderItemKey)));
                }
                orderItem = item;

                var specResult = new GetProductSpecCommand(_inventoryShipmentOrderUnitOfWork).Execute(ChileProductKey.FromProductKey(item.InventoryPickOrderItem),
                                                                                                      item.Order, out productSpec, out customerSpec);
                if (!specResult.Success)
                {
                    return(specResult.ConvertTo <IPickableInventoryReturn>());
                }
            }

            var itemsResult = new GetPickableInventoryCommand(_inventoryShipmentOrderUnitOfWork).Execute(filterResults.ResultingObject, _timeStamper.CurrentTimeStamp,
                                                                                                         PickedInventoryValidator.ForSalesOrder(salesOrder.InventoryShipmentOrder.SourceFacility), true);

            if (itemsResult.Success)
            {
                itemsResult.ResultingObject.Initializer = new ValidPickingForOrder(new PickingValidatorContext(productSpec, customerSpec, orderItem == null ? null : orderItem.ContractItem, salesOrder, salesOrder));
            }

            return(itemsResult);
        }
        private IResult ValidateModifyPickedInventoryItems(SalesOrder salesOrder, IEnumerable <ModifySalesOrderPickedInventoryItemParameters> items)
        {
            var validator  = PickedInventoryValidator.ForSalesOrder(salesOrder.InventoryShipmentOrder.SourceFacility);
            var orderItems = salesOrder.SalesOrderItems.ToDictionary(i => i.ToSalesOrderItemKey());

            foreach (var item in items)
            {
                SalesOrderItem orderItem;
                if (!orderItems.TryGetValue(item.SalesOrderItemKey, out orderItem))
                {
                    return(new InvalidResult(string.Format(UserMessages.CannotPickForCustomerOrderItem_DoesNotExist, item.SalesOrderItemKey.KeyValue)));
                }

                if (item.NewQuantity > item.OriginalQuantity)
                {
                    IDictionary <AttributeNameKey, ChileProductAttributeRange>    productSpec;
                    IDictionary <AttributeNameKey, CustomerProductAttributeRange> customerSpec;
                    var specResult = new GetProductSpecCommand(_salesUnitOfWork).Execute(ChileProductKey.FromProductKey(orderItem.InventoryPickOrderItem),
                                                                                         orderItem.Order, out productSpec, out customerSpec);
                    if (!specResult.Success)
                    {
                        return(specResult);
                    }

                    Dictionary <string, Inventory> inventory;
                    var validResult    = validator.ValidateItems(_salesUnitOfWork.InventoryRepository, new[] { item.InventoryKey }, out inventory);
                    var inventoryItem  = inventory.Values.Single();
                    var context        = new PickingValidatorContext(productSpec, customerSpec, orderItem.ContractItem, orderItem, orderItem.Order);
                    var pickable       = new PickingValidator(inventoryItem.Lot);
                    var pickableResult = pickable.ValidForPicking(context);

                    if (!validResult.Success || !pickableResult.Success)
                    {
                        return(new InvalidResult(new[] { validResult, pickableResult }.CombineMessages()));
                    }
                }
            }

            return(new SuccessResult());
        }
        public IResult <IPickableInventoryReturn> GetInventoryItemsToPickWarehouseOrder(FilterInventoryForShipmentOrderParameters parameters)
        {
            parameters = parameters ?? new FilterInventoryForShipmentOrderParameters();

            InventoryShipmentOrderKey orderKey;
            InventoryPickOrderItemKey orderItemKey;
            var filterResults = parameters.ParseToPredicateBuilderFilters(out orderKey, out orderItemKey);

            if (!filterResults.Success)
            {
                return(filterResults.ConvertTo <IPickableInventoryReturn>());
            }

            var order = _inventoryShipmentOrderUnitOfWork.InventoryShipmentOrderRepository.FindByKey(orderKey,
                                                                                                     o => o.SourceFacility,
                                                                                                     o => o.InventoryPickOrder.Items.Select(i => i.Customer));

            if (order == null)
            {
                return(new InvalidResult <IPickableInventoryReturn>(null, string.Format(UserMessages.InterWarehouseOrderNotFound, orderKey)));
            }
            var facilityKey = order.SourceFacility.ToFacilityKey();

            IDictionary <AttributeNameKey, ChileProductAttributeRange>    productSpec  = null;
            IDictionary <AttributeNameKey, CustomerProductAttributeRange> customerSpec = null;
            Customer customer = null;

            if (orderItemKey != null)
            {
                var item = order.InventoryPickOrder.Items.FirstOrDefault(orderItemKey.FindByPredicate.Compile());
                if (item == null)
                {
                    return(new InvalidResult <IPickableInventoryReturn>(null, string.Format(UserMessages.InventoryPickOrderItemNotFound, orderItemKey)));
                }
                customer = item.Customer;

                var specResult = new GetProductSpecCommand(_inventoryShipmentOrderUnitOfWork).Execute(ChileProductKey.FromProductKey(item),
                                                                                                      customer, out productSpec, out customerSpec);
                if (!specResult.Success)
                {
                    return(specResult.ConvertTo <IPickableInventoryReturn>());
                }
            }

            var itemsResult = new GetPickableInventoryCommand(_inventoryShipmentOrderUnitOfWork).Execute(filterResults.ResultingObject, _timeStamper.CurrentTimeStamp,
                                                                                                         PickedInventoryValidator.ForInterWarehouseOrder(facilityKey), true);

            return(itemsResult);
        }