/// <summary> /// This method returns all active reward products for this reward. /// </summary> public IList <Product> GetActiveRewardProducts(IList <Product> productsInShoppingCart) { if (!isEligible) { throw new Exception("IsEligible must be called first to ensure the customer is eligible for any discounts."); } IList <string> ebRewardProductsInCart = productsInShoppingCart.Where(p => p.Discounts.Any(d => d.DiscountType == DiscountType.EBRewards)).Select(p => p.ItemCode).ToList(); var activeRewardProducts = new List <Product>(); var rewards = RewardService.GetCustomerEbRewardDiscounts(CustomerId) // AzamNote: This is where we let the reward be redeemable for 30 days after completion!!! .Where(ebr => !ebr.HasBeenRedeemed && ebr.CompletionDate >= DateTime.Now); foreach (var reward in rewards) { var product = ProductService.GetProductByItemCode(reward.ItemCode, returnLongDetail: false); if (ebRewardProductsInCart.Contains(product.ItemCode)) { continue; } var discount = new EBRewardDiscount() { CustomerExtendedDetailId = reward.CustomerExtendedDetailId, ItemCode = reward.ItemCode, DiscountAmount = reward.DiscountPercent, DiscountPercent = reward.DiscountPercent, DiscountType = DiscountType.EBRewards, PhaseNumber = reward.PhaseNumber, HasBeenRedeemed = reward.HasBeenRedeemed, CompletionDate = reward.CompletionDate, }; product.EligibleDiscounts.Add(discount); activeRewardProducts.Add(product); } return(activeRewardProducts); }
protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType) { if (modelType != typeof(Discount)) { return(base.CreateModel(controllerContext, bindingContext, modelType)); } var discountType = 0; var result = bindingContext.ValueProvider.GetValue(bindingContext.ModelName + "[DiscountType]"); if (null == result || !int.TryParse(result.AttemptedValue, out discountType)) { return(null); } switch (discountType) { case (int)DiscountType.Fixed: return(new FixedDiscount()); case (int)DiscountType.Percent: return(new PercentDiscount()); case (int)DiscountType.RewardsCash: return(new CashRewardDiscount()); case (int)DiscountType.HalfOffCredits: return(new HalfOffDiscount(DiscountType.HalfOffCredits)); //case (int)DiscountType.BookingRewards: // return new BookingRewardDiscount(); case (int)DiscountType.HostSpecial: var hostSpecialDiscount = new HostSpecialDiscount(); bindingContext.ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => hostSpecialDiscount, typeof(HostSpecialDiscount)); return(hostSpecialDiscount); case (int)DiscountType.EBRewards: var ebRewardDiscount = new EBRewardDiscount(); bindingContext.ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => ebRewardDiscount, typeof(EBRewardDiscount)); return(ebRewardDiscount); //return new EBRewardDiscount(); case (int)DiscountType.SAHalfOff: return(new HalfOffDiscount(DiscountType.SAHalfOff)); case (int)DiscountType.SAHalfOffOngoing: return(new HalfOffDiscount(DiscountType.SAHalfOffOngoing)); case (int)DiscountType.NewProductsLaunchReward: return(new NewProductsLaunchDiscount()); case (int)DiscountType.RecruitingReward: return(new RecruitingRewardDiscount()); case (int)DiscountType.EnrolleeReward: return(new EnrolleeRewardDiscount()); case (int)DiscountType.RetailPromoFixed: return(new RetailFixedDiscount()); case (int)DiscountType.RetailPromoPercent: return(new RetailPercentDiscount()); case (int)DiscountType.PromoCode: return(new PromoCodePercentDiscount()); default: return(null); } }