예제 #1
0
        private bool ShouldKeep(PeriodicConsumptionItem periodicConsumptionItem, IEnumerable <InventoryItem> inventoryItems, Warehouse warehouse)
        {
            var wname         = warehouse.Name;
            var inventoryItem = inventoryItems.Single(y => y.Id == periodicConsumptionItem.InventoryItemId);

            return(inventoryItem.IsMappedToWarehouse(wname));
        }
예제 #2
0
        public void AddMissingItems(WarehouseConsumption whc)
        {
            var inventoryItems = _inventoryDao.GetInventoryItems();

            foreach (var inventoryItem in inventoryItems.Where(inventoryItem => whc.PeriodicConsumptionItems.All(x => x.InventoryItemId != inventoryItem.Id)))
            {
                whc.PeriodicConsumptionItems.Add(PeriodicConsumptionItem.Create(inventoryItem));
            }
        }
예제 #3
0
        private static void CreatePeriodicConsumptionItems(PeriodicConsumption pc, IWorkspace workspace)
        {
            var previousPc       = GetPreviousPeriodicConsumption(workspace);
            var transactionItems = GetTransactionItems();

            foreach (var inventoryItem in workspace.All <InventoryItem>())
            {
                var iItem = inventoryItem;
                var pci   = new PeriodicConsumptionItem {
                    InventoryItem = inventoryItem
                };
                pci.UnitMultiplier = pci.InventoryItem.TransactionUnitMultiplier > 0 ? pci.InventoryItem.TransactionUnitMultiplier : 1;
                pc.PeriodicConsumptionItems.Add(pci);
                var previousCost = 0m;
                if (previousPc != null)
                {
                    var previousPci = previousPc.PeriodicConsumptionItems.SingleOrDefault(x => x.InventoryItem.Id == iItem.Id);
                    if (previousPci != null)
                    {
                        pci.InStock =
                            previousPci.PhysicalInventory != null
                        ? previousPci.PhysicalInventory.GetValueOrDefault(0)
                        : previousPci.GetInventoryPrediction();
                    }
                    if (previousPci != null)
                    {
                        previousCost = previousPci.Cost * pci.InStock;
                    }
                }
                var tim = transactionItems.Where(x => x.InventoryItem.Id == iItem.Id);
                pci.Purchase = tim.Sum(x => x.Quantity * x.Multiplier) / pci.UnitMultiplier;
                var totalPrice = tim.Sum(x => x.Price * x.Quantity);
                if (pci.InStock > 0 || pci.Purchase > 0)
                {
                    pci.Cost = pci.InStock > 0
                                   ? decimal.Round((totalPrice + previousCost) / (pci.InStock + pci.Purchase), 2)
                                   : decimal.Round(totalPrice / pci.Purchase, 2);
                }
            }
        }
 public PeriodicConsumptionItemViewModel(PeriodicConsumptionItem model)
 {
     Model = model;
 }