public IResult <IInventoryShipmentOrderCertificateOfAnalysisReturn> GetInventoryShipmentOrderCertificateOfAnalysis(string orderKey)
        {
            var orderKeyResult = KeyParserHelper.ParseResult <IInventoryShipmentOrderKey>(orderKey);

            if (!orderKeyResult.Success)
            {
                return(orderKeyResult.ConvertTo <IInventoryShipmentOrderCertificateOfAnalysisReturn>());
            }

            var predicate = orderKeyResult.ResultingObject.ToInventoryShipmentOrderKey().FindByPredicate;
            var select    = InventoryShipmentOrderProjectors.SplitSelectCertificateOfAnalysisReturn();

            var order = _inventoryShipmentOrderUnitOfWork.InventoryShipmentOrderRepository.Filter(predicate).SplitSelect(select).FirstOrDefault();

            if (order == null)
            {
                return(new InvalidResult <IInventoryShipmentOrderCertificateOfAnalysisReturn>(null, string.Format(UserMessages.InventoryShipmentOrderNotFound, orderKey)));
            }

            if (order.OrderType == InventoryShipmentOrderTypeEnum.SalesOrder)
            {
                var customerOrderKey = new SalesOrderKey(orderKeyResult.ResultingObject);
                var customerOrder    = _inventoryShipmentOrderUnitOfWork.SalesOrderRepository.FindByKey(customerOrderKey,
                                                                                                        o => o.Customer.Company);
                if (customerOrder == null)
                {
                    return(new InvalidResult <IInventoryShipmentOrderCertificateOfAnalysisReturn>(null, string.Format(UserMessages.SalesOrderNotFound, customerOrderKey)));
                }

                order.DestinationName = customerOrder.Customer == null ? null : customerOrder.Customer.Company.Name;
            }

            return(new SuccessResult <IInventoryShipmentOrderCertificateOfAnalysisReturn>(order));
        }
        public IResult <IInventoryShipmentOrderPickSheetReturn> GetInventoryShipmentOrderPickSheet(string orderKey)
        {
            var orderKeyResult = KeyParserHelper.ParseResult <IInventoryShipmentOrderKey>(orderKey);

            if (!orderKeyResult.Success)
            {
                return(orderKeyResult.ConvertTo <IInventoryShipmentOrderPickSheetReturn>());
            }

            var predicate = new InventoryShipmentOrderKey(orderKeyResult.ResultingObject).FindByPredicate;
            var select    = InventoryShipmentOrderProjectors.SplitSelectPickSheet().Merge();

            var order = _inventoryShipmentOrderUnitOfWork.InventoryShipmentOrderRepository.Filter(predicate).Select(select).FirstOrDefault();

            if (order == null)
            {
                return(new InvalidResult <IInventoryShipmentOrderPickSheetReturn>(null, string.Format(UserMessages.InventoryShipmentOrderNotFound, orderKey)));
            }

            if (order.OrderType == InventoryShipmentOrderTypeEnum.SalesOrder)
            {
                var customerOrderKey = new SalesOrderKey(orderKeyResult.ResultingObject);
                var customerOrder    = _inventoryShipmentOrderUnitOfWork.SalesOrderRepository.FindByKey(customerOrderKey);
                if (customerOrder == null)
                {
                    return(new InvalidResult <IInventoryShipmentOrderPickSheetReturn>(null, string.Format(UserMessages.SalesOrderNotFound, customerOrderKey)));
                }

                order.ShipFromOrSoldToShippingLabel = customerOrder.SoldTo;
            }

            return(new SuccessResult <IInventoryShipmentOrderPickSheetReturn>(order));
        }
Exemple #3
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 PickedInventoryKeyHelper(RioAccessSQLEntities oldContext)
        {
            var customerOrderKey = new SalesOrderKey();

            foreach (var reservedKey in oldContext.tblOrders.Where(o => o.SerializedKey != null).Select(o => o.SerializedKey))
            {
                ISalesOrderKey parsedKey;
                if (customerOrderKey.TryParse(reservedKey, out parsedKey))
                {
                    GetRange(parsedKey.SalesOrderKey_DateCreated).RegisterSequence(parsedKey.SalesOrderKey_Sequence);
                }
            }
        }
Exemple #5
0
        private SalesOrder GetSalesOrder(SalesOrderKey key)
        {
            var order = UnitOfWork.SalesOrderRepository.FindByKey(key,
                                                                  c => c.Customer.Company,
                                                                  c => c.Broker,
                                                                  c => c.InventoryShipmentOrder.SourceFacility,
                                                                  c => c.InventoryShipmentOrder.ShipmentInformation,
                                                                  c => c.InventoryShipmentOrder.PickedInventory,
                                                                  c => c.SalesOrderItems.Select(i => i.InventoryPickOrderItem.Product),
                                                                  c => c.SalesOrderItems.Select(i => i.InventoryPickOrderItem.PackagingProduct.Product),
                                                                  c => c.SalesOrderPickedItems.Select(p => p.PickedInventoryItem.CurrentLocation),
                                                                  c => c.SalesOrderPickedItems.Select(p => p.PickedInventoryItem.PackagingProduct.Product),
                                                                  c => c.SalesOrderPickedItems.Select(p => p.PickedInventoryItem.Lot.ChileLot.Production.Results),
                                                                  c => c.SalesOrderPickedItems.Select(p => p.PickedInventoryItem.Lot.Attributes));

            return(order);
        }
        public IResult <ISalesOrderAcknowledgementReturn> GetCustomerOrderAcknowledgement(string orderKey)
        {
            var orderKeyResult = KeyParserHelper.ParseResult <ISalesOrderKey>(orderKey);

            if (!orderKeyResult.Success)
            {
                return(orderKeyResult.ConvertTo <ISalesOrderAcknowledgementReturn>());
            }

            var predicate = new SalesOrderKey(orderKeyResult.ResultingObject).FindByPredicate;
            var select    = SalesOrderProjectors.SplitSelectAcknowledgement();

            var order = _inventoryShipmentOrderUnitOfWork.SalesOrderRepository
                        .Filter(predicate)
                        .SplitSelect(select).FirstOrDefault();

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

            return(new SuccessResult <ISalesOrderAcknowledgementReturn>(order));
        }
            public void Modifies_tblOrderDetail_and_tblStagedFG_records_as_expected()
            {
                //Arrange
                var customer       = RVCUnitOfWork.CustomerRepository.Filter(c => true, c => c.Broker).FirstOrDefault();
                var contractItem   = RVCUnitOfWork.ContractItemRepository.All().FirstOrDefault(i => i.Contract.CustomerId == customer.Id);
                var validInventory = RVCUnitOfWork.InventoryRepository.Filter(i =>
                                                                              i.LotTypeId == (decimal)LotTypeEnum.FinishedGood &&
                                                                              i.Lot.ProductionStatus == LotProductionStatus.Produced &&
                                                                              i.Lot.QualityStatus == LotQualityStatus.Released,
                                                                              i => i.Location)
                                     .ToList();

                if (!validInventory.Any())
                {
                    Assert.Inconclusive("No valid test inventory found.");
                }

                var inventory = validInventory
                                .GroupBy(i => i.Location.FacilityId)
                                .First(g => g.Count() >= 2)
                                .OrderBy(i => i.LotDateCreated)
                                .Take(2)
                                .ToList();

                var parameters = TestHelper.CreateObjectGraph <CreateSalesOrderParameters>();

                parameters.UserToken         = TestUser.UserName;
                parameters.CustomerKey       = customer.ToCustomerKey();
                parameters.BrokerKey         = customer.Broker.ToCompanyKey();
                parameters.FacilitySourceKey = inventory[0].Location.ToFacilityKey();
                parameters.OrderItems        = new List <SalesOrderItemParameters>
                {
                    new SalesOrderItemParameters
                    {
                        ContractItemKey = contractItem.ToContractItemKey(),
                        ProductKey      = contractItem.ToChileProductKey(),
                        PackagingKey    = contractItem.ToPackagingProductKey(),
                        TreatmentKey    = contractItem.ToInventoryTreatmentKey(),
                        Quantity        = 123,
                        CustomerLotCode = "OrderItem1",
                        PriceBase       = 1,
                        PriceFreight    = 2,
                        PriceTreatment  = 3,
                        PriceWarehouse  = 4,
                        PriceRebate     = 5
                    },
                    new SalesOrderItemParameters
                    {
                        ContractItemKey = contractItem.ToContractItemKey(),
                        ProductKey      = contractItem.ToChileProductKey(),
                        PackagingKey    = contractItem.ToPackagingProductKey(),
                        TreatmentKey    = contractItem.ToInventoryTreatmentKey(),
                        Quantity        = 123,
                        CustomerLotCode = "OrderItem2",
                        PriceBase       = 1,
                        PriceFreight    = 2,
                        PriceTreatment  = 3,
                        PriceWarehouse  = 4,
                        PriceRebate     = 5
                    },
                };

                //Act / Assert
                //Create
                var createResult = Service.CreateSalesOrder(parameters);

                createResult.AssertSuccess();
                MockKillSwitch.Verify(k => k.Engage(), Times.Never());

                //Pick
                var orderKey    = new SalesOrderKey().Parse(createResult.ResultingObject).ToSalesOrderKey();
                var order       = RVCUnitOfWork.SalesOrderRepository.FindByKey(orderKey, o => o.SalesOrderItems);
                var lotsToAllow = new List <LotKey>();
                var itemsToPick = order.SalesOrderItems.Select(i =>
                {
                    var result = Service.GetPickableInventoryForContext(new FilterInventoryForShipmentOrderParameters
                    {
                        OrderKey     = i.ToSalesOrderKey(),
                        OrderItemKey = i.ToSalesOrderItemKey()
                    }).ResultingObject;
                    var pickable = result.Items.Where(n => n.Quantity > 1).Take(1).ToList();
                    lotsToAllow.AddRange(pickable.Cast <PickableInventoryItemReturn>().Select(p => p.LotKeyReturn.ToLotKey()));
                    return(new SetPickedInventoryItemParameters
                    {
                        InventoryKey = pickable.Select(r => r.InventoryKey).FirstOrDefault(),
                        Quantity = 1,
                        OrderItemKey = i.ToSalesOrderItemKey()
                    });
                }
                                                               ).ToList();

                if (itemsToPick.Any(i => i.InventoryKey == null))
                {
                    Assert.Inconclusive("Could not find valid Inventory to pick for CustomerOrderItem.");
                }

                lotsToAllow.Distinct().ForEach((l, n) =>
                {
                    RVCUnitOfWork.LotSalesOrderAllowanceRepository.Add(new LotSalesOrderAllowance
                    {
                        SalesOrderDateCreated = orderKey.SalesOrderKey_DateCreated,
                        SalesOrderSequence    = orderKey.SalesOrderKey_Sequence,
                        LotDateCreated        = l.LotKey_DateCreated,
                        LotDateSequence       = l.LotKey_DateSequence,
                        LotTypeId             = l.LotKey_LotTypeId
                    });
                });
                RVCUnitOfWork.Commit();

                var pickResult = Service.SetPickedInventory(orderKey, new SetPickedInventoryParameters
                {
                    UserToken            = TestUser.UserName,
                    PickedInventoryItems = itemsToPick
                });

                pickResult.AssertSuccess();
                MockKillSwitch.Verify(k => k.Engage(), Times.Never());

                var orderNumString = GetKeyFromConsoleString(ConsoleOutput.SyncTblOrder);
                var orderNum       = int.Parse(orderNumString);

                using (var oldContext = new RioAccessSQLEntities())
                {
                    var tblOrder = oldContext.tblOrders
                                   .Include("tblOrderDetails.tblStagedFGs")
                                   .FirstOrDefault(o => o.OrderNum == orderNum);
                    Assert.AreEqual(2, tblOrder.tblOrderDetails.Count);
                    foreach (var detail in tblOrder.tblOrderDetails)
                    {
                        Assert.AreEqual(1, detail.tblStagedFGs.Count);
                    }
                }

                //Unpick
                pickResult = Service.SetPickedInventory(orderKey, new SetPickedInventoryParameters
                {
                    UserToken            = TestUser.UserName,
                    PickedInventoryItems = new List <IPickedInventoryItemParameters> {
                        itemsToPick[0]
                    }
                });
                pickResult.AssertSuccess();
                MockKillSwitch.Verify(k => k.Engage(), Times.Never());

                using (var oldContext = new RioAccessSQLEntities())
                {
                    var tblOrder = oldContext.tblOrders
                                   .Include("tblOrderDetails.tblStagedFGs")
                                   .FirstOrDefault(o => o.OrderNum == orderNum);
                    Assert.AreEqual(2, tblOrder.tblOrderDetails.Count);
                    Assert.AreEqual(1, tblOrder.tblOrderDetails.Single(d => d.CustLot == "OrderItem1").tblStagedFGs.Count);
                    Assert.AreEqual(0, tblOrder.tblOrderDetails.Single(d => d.CustLot == "OrderItem2").tblStagedFGs.Count);
                }
            }