public override List <IProduct> CheckForDiscount(List <IProduct> cart) { // filter Cart only get type(Product) and group the products by barcode var posibleProductsForDiscount = cart.Where(product => product.GetType() == typeof(Product)) .Where(product => Barcodes.Contains(product.Barcode)); if (posibleProductsForDiscount.Count() == N) { string description = "discount-"; decimal cartPrice = 0m; foreach (var product in posibleProductsForDiscount) { cartPrice += product.Amount; description += product.Barcode + "-"; } var discount = cartPrice * Percentage * -1; DiscountProduct = new DiscountProduct(discount, description); return(posibleProductsForDiscount.ToList()); } return(null); }
public override List <IProduct> CheckForDiscount(List <IProduct> cart) { // filter Cart only get type(Product) and group the products by barcode var posibleProductsForDiscount = cart.Where(product => product.GetType() == typeof(Product)) .Where(product => Barcodes.Contains(product.Barcode)); var amountOfGroups = posibleProductsForDiscount.GroupBy(group => group.Barcode).Count(); if (posibleProductsForDiscount.Count() == N && amountOfGroups >= 2) { string description = "discount-cheapest-"; decimal cartPrice = 0m; decimal discount = posibleProductsForDiscount.First().Amount; foreach (var product in posibleProductsForDiscount) { if (product.Amount < discount) { discount = product.Amount; } cartPrice += product.Amount; description += product.Barcode + "-"; } DiscountProduct = new DiscountProduct(discount * -1, description); return(posibleProductsForDiscount.ToList()); } return(null); }
public override List <IProduct> CheckForDiscount(List <IProduct> cart) { // filter Cart only get type(Product) and group the products by barcode var posibleProductsForDiscount = cart.Where(product => product.GetType() == typeof(Product)) .Where(product => Barcodes.Contains(product.Barcode)); var amountOfGroups = posibleProductsForDiscount.GroupBy(group => group.Barcode).Count(); if (posibleProductsForDiscount.Count() == 2 && amountOfGroups == 2) { string description = "Discount"; decimal cartPrice = 0m; foreach (var product in posibleProductsForDiscount) { cartPrice += product.Amount; description += "-" + product.Barcode; } DiscountProduct = new DiscountProduct((cartPrice - StaticDiscount) * -1, description); return(posibleProductsForDiscount.ToList()); } return(null); }
public virtual List <IProduct> CheckForDiscount(List <IProduct> cart) { // filter Cart only get type(Product) and group the products by barcode var productGroupBarcode = cart.Where(product => product.GetType() == typeof(Product)) .GroupBy(product => product.Barcode); // get one item if N or more are the same product var discountProductGroup = productGroupBarcode.Where(group => group.Count() >= N) .FirstOrDefault(); if (discountProductGroup != null) { var product = discountProductGroup.First(); decimal discount = ((product.Amount * N) * Percentage) * -1; DiscountProduct = new DiscountProduct(product, discount); return(discountProductGroup.ToList()); } return(null); }