internal static IEnumerable <Expression <Func <Inventory, InventoryItemReturn> > > SplitSelectInventorySummary(IInventoryUnitOfWork inventoryUnitOfWork, DateTime currentDate) { if (inventoryUnitOfWork == null) { throw new ArgumentNullException("inventoryUnitOfWork"); } currentDate = currentDate.Date; var inventoryKey = SelectInventoryKey(); var packagingProduct = ProductProjectors.SelectPackagingProduct(); var warehouseLocation = LocationProjectors.SelectLocation(); var treament = InventoryTreatmentProjectors.SelectInventoryTreatment(); return(LotProjectors.SplitSelectLotSummary(inventoryUnitOfWork, currentDate) .Select(p => p.Merge(Projector <Inventory> .To(n => new InventoryItemReturn { }), n => n.Lot)) .ToListWithModifiedElement(0, p => p.Merge(n => new InventoryItemReturn { InventoryKeyReturn = inventoryKey.Invoke(n), ToteKey = n.ToteKey, Quantity = n.Quantity }).ExpandAll()) .ToAppendedList(Projector <Inventory> .To(i => new InventoryItemReturn { PackagingReceived = packagingProduct.Invoke(i.Lot.ReceivedPackaging), PackagingProduct = packagingProduct.Invoke(i.PackagingProduct), Location = warehouseLocation.Invoke(i.Location), InventoryTreatment = treament.Invoke(i.Treatment) }))); }
internal static IEnumerable <Expression <Func <PickedInventoryItem, PickedInventoryItemReturn> > > SplitSelect(IInventoryUnitOfWork inventoryUnitOfWork, DateTime currentDate, ISalesUnitOfWork salesUnitOfWork = null) { if (inventoryUnitOfWork == null) { throw new ArgumentNullException("inventoryUnitOfWork"); } var pickedInventoryItemKey = SelectKey(); var inventoryKey = SelectInventoryKey(); var inventoryQuantity = SelectInventoryQuantity(); var treatment = InventoryTreatmentProjectors.SelectInventoryTreatment(); var location = LocationProjectors.SelectLocation(); var packagingProduct = ProductProjectors.SelectPackagingProduct(); var results = LotProjectors.SplitSelectLotSummary(inventoryUnitOfWork, currentDate) .Select(p => p.Merge((Expression <Func <PickedInventoryItem, PickedInventoryItemReturn> >)(n => new PickedInventoryItemReturn { }), n => n.Lot)) .ToListWithModifiedElement(0, p => p.Merge(i => new PickedInventoryItemReturn { PickedInventoryItemKeyReturn = pickedInventoryItemKey.Invoke(i), InventoryKeyReturn = inventoryKey.Invoke(i), ToteKey = i.ToteKey, QuantityPicked = i.Quantity, CustomerLotCode = i.CustomerLotCode, CustomerProductCode = i.CustomerProductCode })) .ToAppendedList(i => new PickedInventoryItemReturn { PackagingProduct = packagingProduct.Invoke(i.PackagingProduct), Location = location.Invoke(i.FromLocation), InventoryTreatment = treatment.Invoke(i.Treatment), }, i => new PickedInventoryItemReturn { PackagingReceived = packagingProduct.Invoke(i.Lot.ReceivedPackaging), Quantity = inventoryQuantity.Invoke(i), CurrentLocation = location.Invoke(i.CurrentLocation), }); if (salesUnitOfWork != null) { var orderItemKey = InventoryPickOrderItemProjectors.SelectKey(); var customerPickedItems = salesUnitOfWork.SalesOrderPickedItemRepository.All(); results.Add(i => new PickedInventoryItemReturn { PickOrderItemKeyReturn = customerPickedItems .Where(c => c.DateCreated == i.DateCreated && c.Sequence == i.Sequence && c.ItemSequence == i.ItemSequence) .Select(c => orderItemKey.Invoke(c.SalesOrderItem.InventoryPickOrderItem)) .FirstOrDefault() }); } return(results.Select(p => p.ExpandAll())); }