예제 #1
0
        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);
        }