Exemplo n.º 1
0
        public CheckCodeResult CheckCode(CartModel cart, string discountCode, bool fromUrl)
        {
            DateTime now   = CurrentRequestData.Now;
            var      code  = discountCode.Trim();
            var      query = _session.QueryOver <Discount>().Where(x
                                                                   => (x.Code == code && x.RequiresCode) &&
                                                                   (x.ValidFrom == null || x.ValidFrom <= now) &&
                                                                   (x.ValidUntil == null || x.ValidUntil >= now));

            if (fromUrl)
            {
                query = query.Where(x => x.CanBeAppliedFromUrl);
            }

            var discount = query.Cacheable().List().FirstOrDefault();

            var defaultRedirectUrl = "/";
            var checkCodeResult    = new CheckCodeResult
            {
                RedirectUrl = discount != null
                    ? string.IsNullOrEmpty(discount.RedirectUrl)
                        ? defaultRedirectUrl
                        : discount.RedirectUrl
                    : defaultRedirectUrl,
            };

            if (discount == null)
            {
                checkCodeResult.Message = _stringResourceProvider.GetValue("The code you entered is not valid.");
                return(checkCodeResult);
            }
            var discounts = Get(cart, cart.DiscountCodes);

            discounts.Add(discount);

            var checkLimitationsResult = _cartDiscountApplicationService.CheckLimitations(discount, cart, discounts);

            if (checkLimitationsResult.Status == CheckLimitationsResultStatus.NeverValid)
            {
                checkCodeResult.Message = checkLimitationsResult.FormattedMessage;
                return(checkCodeResult);
            }

            checkCodeResult.Status =
                checkLimitationsResult.Status == CheckLimitationsResultStatus.CurrentlyInvalid
                    ? CheckLimitationsResultStatus.CurrentlyInvalid
                    : CheckLimitationsResultStatus.Success;
            if (fromUrl && checkLimitationsResult.Status == CheckLimitationsResultStatus.CurrentlyInvalid)
            {
                checkCodeResult.Message = string.IsNullOrWhiteSpace(discount.AppliedNotYetValidMessage)
                    ? checkLimitationsResult.FormattedMessage
                    : discount.AppliedNotYetValidMessage;
            }
            else
            {
                checkCodeResult.Message = discount.SuccessMessage;
            }

            return(checkCodeResult);
        }
Exemplo n.º 2
0
        public CheckCodeResult CheckCode(CartModel cart, string discountCode)
        {
            DateTime now       = CurrentRequestData.Now;
            var      code      = discountCode.Trim();
            var      discounts = _session.QueryOver <Discount>()
                                 .Where(
                discount =>
                (discount.Code == code && discount.RequiresCode) &&
                (discount.ValidFrom == null || discount.ValidFrom <= now) &&
                (discount.ValidUntil == null || discount.ValidUntil >= now))
                                 .Cacheable().List();

            if (!discounts.Any())
            {
                return(new CheckCodeResult
                {
                    Message = _stringResourceProvider.GetValue("The code you entered is not valid.")
                });
            }

            var checkLimitationsResults = discounts.Select(
                discount =>
                _cartDiscountApplicationService.CheckLimitations(discount, cart)).ToList();

            if (checkLimitationsResults.All(result => result.Status == CheckLimitationsResultStatus.NeverValid))
            {
                return(new CheckCodeResult
                {
                    Message = checkLimitationsResults.First().FormattedMessage
                });
            }
            return(new CheckCodeResult {
                Success = true
            });
        }
Exemplo n.º 3
0
        private List <DiscountInfo> GetDiscounts(Guid userGuid, CartModel cart)
        {
            List <string>    discountCodes = GetDiscountCodes(userGuid);
            IList <Discount> discounts     = _getValidDiscounts.Get(cart, discountCodes);

            var discountInfos = (from discount in discounts
                                 let result = _cartDiscountApplicationService.CheckLimitations(discount, cart)
                                              select new DiscountInfo(discount, result)).Where(
                info =>
                info.Status != DiscountStatus.AutomaticAndInvalid && info.Status != DiscountStatus.NeverValid)
                                .ToList();

            return(discountInfos);
        }