Example #1
0
        public PantryBeverage VendBeverage(PantryBeverage beverage)
        {
            var toUpdate = _beverages.Find(s => s.BeverageId.Equals(beverage.BeverageId));

            if (toUpdate != null)
            {
                //check if inventory is enough for all ingredients
                foreach (var ingredient in toUpdate.Beverage.Ingredients)
                {
                    if (IngredientUnitBalance(ingredient.IngredientId) < ingredient.RequiredUnitQuantity)
                    {
                        throw new ArgumentException($"Not enough quantity for {ingredient.Ingredient.Name}");
                    }
                    var newInventory = new Inventory
                    {
                        PantryId              = Id,
                        IngredientId          = ingredient.IngredientId,
                        TransactionDate       = DateTime.UtcNow,
                        TransactionQuantity   = Math.Round((ingredient.RequiredUnitQuantity / ingredient.StockUnitConversion) * -1, 2),
                        ConvertedUnitQuantity = ingredient.RequiredUnitQuantity * -1
                    };
                    AddNewInventory(newInventory);
                }


                toUpdate.AddNewOrder(new Order {
                    OrderDate = DateTime.UtcNow, Quantity = 1, PantryBeverageId = toUpdate.Id
                });
                toUpdate.State = TrackingState.Unchanged;
                return(beverage);
            }
            return(null);
        }
Example #2
0
        public PantryBeverage RemoveBeverage(PantryBeverage beverage)
        {
            var toUpdate = _beverages.Find(s => s.Id.Equals(beverage.Id));

            if (toUpdate != null)
            {
                toUpdate.State = TrackingState.Deleted;
                return(beverage);
            }
            return(null);
        }
Example #3
0
 public PantryBeverage AddNewBeverage(PantryBeverage beverage)
 {
     if (_beverages.Any(s => s.BeverageId.Equals(beverage.BeverageId)))
     {
         throw new ArgumentException("Cannot add duplicate beverage to pantry.");
     }
     if (_beverages.Any(s => s.Id.Equals(beverage.Id)))
     {
         throw new ArgumentException("Cannot add duplicate beverage to pantry.");
     }
     beverage.State = TrackingState.Added;
     _beverages.Add(beverage);
     return(beverage);
 }