public decimal CalculateCharge(Order order) { decimal grandTotal = 0.0M; List <Discount> discountList = Discount.All; Dictionary <string, int> orderItems = new Dictionary <string, int>(); orderItems.Clear(); foreach (SKU sku in SKU.All) { if (order.LineItems.Any(x => x.ToString().Equals(sku.ID))) { int count = order.LineItems.Where(x => x.ToString().Equals(sku.ID)).Count(); orderItems.Add(sku.ID, count); } } foreach (Discount discount in Discount.All) { decimal discountPrice; orderItems = ApplyDiscount(orderItems, discount, out discountPrice); grandTotal = grandTotal + discountPrice; } foreach (var item in orderItems) { grandTotal = grandTotal + (SKU.GetSKUPriceBasedOnId(item.Key) * item.Value); } return(grandTotal); }