Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        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);
            }
        }