// Calculate amount on the basis of quantity public int GetTotalPrice(List <SkuProductCart> skuProductCarts) { int amount = 0; Dictionary <string, int> rulesDict = ActiveRules.GetRulesDict(); foreach (var item in skuProductCarts) { switch (item.SkuProduct.SkuType) { case "A": amount = amount + (item.Quantity / 3) * rulesDict["3A"] + (item.Quantity % 3) * item.SkuProduct.Price; break; case "B": amount = amount + (item.Quantity / 2) * rulesDict["2B"] + (item.Quantity % 2) * item.SkuProduct.Price; break; } } return(amount); }
//Case For calculating amount id both Cand D type is present public int GetTotalPrice(List <SkuProductCart> skuProductCarts) { int amount = 0; var productCountByType = skuProductCarts.Where(x => x.SkuProduct.SkuType == "C" || x.SkuProduct.SkuType == "D").GroupBy(xy => xy.SkuProduct.SkuType) .SelectMany(x => x.ToList()).ToList(); switch (productCountByType.Count()) { case 2: var minQuantity = skuProductCarts.Where(x => x.SkuProduct.SkuType == "C" || x.SkuProduct.SkuType == "D").Min(x => x.Quantity); var maxType = skuProductCarts.OrderByDescending(x => x.Quantity).FirstOrDefault(); amount = ActiveRules.GetRulesDict()["CD"] * minQuantity + (maxType.Quantity - minQuantity) * maxType.SkuProduct.Price; break; case 1: foreach (var item in skuProductCarts) { amount = amount + GetTotalPriceForIndividualUnit(item.SkuProduct, item.Quantity, ActiveRules.GetRulesDict()); } break; } return(amount); }