private double getAvailableCampaignDiscountByProduct(Dictionary <string, double> calculatedDiscounts, Tuple <Campaign, double> campaignWithDiscount, Product product) { double productDiscount = 0.0; if (campaignWithDiscount.Item1 == null) { return(productDiscount); } if (campaignWithDiscount.Item1.Category != product.Category) { return(productDiscount); } if (calculatedDiscounts != null) { if (calculatedDiscounts.TryGetValue(product.Category.Title, out double discount)) { return(discount); } } var selectedShoppingCartItemsByCategory = ShoppingCartItems.Where(it => it.Key.Category == campaignWithDiscount.Item1.Category).ToDictionary(it => it.Key, it => it.Value); if (selectedShoppingCartItemsByCategory.Count > 0) { productDiscount = campaignWithDiscount.Item2 / selectedShoppingCartItemsByCategory.Count; calculatedDiscounts.Add(product.Category.Title, productDiscount); } return(productDiscount); }
private double calculateCampaignDiscount(Campaign campaign) { if (campaign == null) { throw new ArgumentNullException("campaign is Null"); } double totalAmount = 0; int totalNumberOfProduct = 0; double campaignDiscount = 0; var selectedShoppingCartItemsByCategory = ShoppingCartItems.Where(it => it.Key.Category == campaign.Category).ToDictionary(it => it.Key, it => it.Value); foreach (var item in selectedShoppingCartItemsByCategory) { totalNumberOfProduct += item.Value; totalAmount += (item.Value * item.Key.Price); } if (totalNumberOfProduct <= campaign.MinimumAmount) { return(campaignDiscount); } if (campaign.DiscountType == DiscountType.Rate) { campaignDiscount = totalAmount * (campaign.DiscountAmount / 100); } else { campaignDiscount = campaign.DiscountAmount; } return(campaignDiscount); }
public void RemoveFromCart(Product product) { var productInItem = ShoppingCartItems.Where(x => x.Product.Equals(product)).FirstOrDefault(); if (productInItem != null) { ShoppingCartItems.Remove(productInItem); } }