private DiscountApplicationResult GetDiscountApplication(List <DiscountInfo> discounts, CartModel cart) { var discountApplicationInfo = new DiscountApplicationInfo(); var hashSet = new List <Discount>(); foreach (var discountInfo in discounts.FindAll(x => x.Status == DiscountStatus.ValidButNotApplied)) { var applicationInfo = _cartDiscountApplicationService.ApplyDiscount(discountInfo, cart); if (!applicationInfo.IsApplied) { continue; } discountApplicationInfo.Add(applicationInfo); hashSet.Add(discountInfo.Discount); } return(new DiscountApplicationResult { Info = discountApplicationInfo, AppliedDiscounts = hashSet }); }
public DiscountApplicationInfo ApplyDiscount(DiscountInfo discountInfo, CartModel cart) { var applications = _session.QueryOver <DiscountApplication>() .Where(application => application.Discount.Id == discountInfo.Discount.Id) .Cacheable() .List(); var discountApplicationInfo = new DiscountApplicationInfo(); foreach (var application in applications) { var fullName = application.GetType().FullName; if (!ApplicationApplierTypes.ContainsKey(fullName)) { continue; } var applier = _kernel.Get(ApplicationApplierTypes[fullName]) as DiscountApplicationApplier; if (applier != null) { discountApplicationInfo.Add(applier.Apply(application, cart, discountInfo.CheckLimitationsResult)); } } return(discountApplicationInfo); }