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); }
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); }
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); }