private int GetCountOf(BoughtProducts boughtProducts, string productName) { var product = _repository.FindBy(productName); Guard.Operation(product != null, "Repository error: null reference received"); return(boughtProducts.CountOf(product)); }
public IReadOnlyList <AppliedDiscount> Calculate(BoughtProducts boughtProducts) { int firstProductCount = GetCountOf(boughtProducts, FirstProductName); int secondProductCount = GetCountOf(boughtProducts, SecondProductName); int discountAmount = Math.Min(firstProductCount, secondProductCount); var appliedDiscount = new AppliedDiscount(DiscountName, -discountAmount * CombinedDiscount); return(new List <AppliedDiscount>() { appliedDiscount }); }
public void BuyProduct(int index) { Product prod = AvailableProducts[index]; if (prod.Price > Balance) { Console.Clear(); Console.WriteLine("You need to insert more money"); Console.ReadLine(); InsertMoney(); } else { Balance = Balance - prod.Price; BoughtProducts.Add(prod); ProdSum.Add(prod.Price); } }
public IReadOnlyList <AppliedDiscount> Calculate(BoughtProducts boughtProducts) { var productGroups = boughtProducts.GroupedByProduct; return(productGroups.Where(g => g.Value >= VolumeThreshold).Select(CreateAppliedDiscount).ToList()); }
internal IReadOnlyList <AppliedDiscount> CalculateDiscounts(BoughtProducts boughtProducts) => _discounts.SelectMany(d => d.Calculate(boughtProducts)).ToList();