Ejemplo n.º 1
0
        private void CreatePeriodicConsumptionItem(InventoryItem inventoryItem,
                                                   WarehouseConsumption previousWhc,
                                                   IEnumerable <InventoryTransaction> transactionItems)
        {
            var pci = PeriodicConsumptionItem.Create(inventoryItem);

            PeriodicConsumptionItems.Add(pci);
            var previousCost = 0m;

            if (previousWhc != null)
            {
                var previousPci = previousWhc.PeriodicConsumptionItems.SingleOrDefault(x => x.InventoryItemId == inventoryItem.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 == inventoryItem.Id).ToList();

            pci.Added   = tim.Where(x => x.TargetWarehouseId == WarehouseId).Sum(x => x.Quantity * x.Multiplier) / pci.UnitMultiplier;
            pci.Removed = tim.Where(x => x.SourceWarehouseId == WarehouseId).Sum(x => x.Quantity * x.Multiplier) / pci.UnitMultiplier;
            var totalPrice = tim.Where(x => x.TargetWarehouseId == WarehouseId).Sum(x => x.Price * x.Quantity);

            if (pci.InStock + pci.Purchase > 0)
            {
                pci.Cost = decimal.Round((totalPrice + previousCost) / (pci.InStock + pci.Added), 2);
            }
        }
Ejemplo n.º 2
0
        private decimal GetFinalCost(RecipeItem recipeItem)
        {
            var pci = PeriodicConsumptionItems.SingleOrDefault(x => x.InventoryItemId == recipeItem.InventoryItem.Id);

            if (pci != null && pci.GetPredictedConsumption() > 0)
            {
                var cost = recipeItem.Quantity * (pci.Cost / pci.UnitMultiplier);
                cost = (pci.GetConsumption() * cost) / pci.GetPredictedConsumption();
                return(cost);
            }
            return(0);
        }
Ejemplo n.º 3
0
        private decimal GetPredictedCost(RecipeItem recipeItem)
        {
            var pci = PeriodicConsumptionItems.Single(x => x.InventoryItemId == recipeItem.InventoryItem.Id);

            return(recipeItem.Quantity * (pci.Cost / pci.UnitMultiplier));
        }
Ejemplo n.º 4
0
        private void UpdateConsumption(RecipeItem recipeItem, decimal saleTotal)
        {
            var pci = PeriodicConsumptionItems.Single(x => x.InventoryItemId == recipeItem.InventoryItem.Id);

            pci.Consumption += (recipeItem.Quantity * saleTotal) / pci.UnitMultiplier;
        }