Exemple #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);
        }
Exemple #2
0
        public CheckCodeResult AddDiscountCode(string code)
        {
            HashSet <string> codes      = _cartDiscountCodeService.Get();
            CheckCodeResult  codeResult = _getValidDiscounts.CheckCode(_cart, code);

            if (codeResult.Success)
            {
                codes.Add(code);
                _cartDiscountCodeService.SaveDiscounts(codes);
            }
            return(codeResult);
        }
Exemple #3
0
        public CheckCodeResult AddDiscountCode(string code, bool fromUrl, Uri referrer = null)
        {
            HashSet <string> codes      = _cartDiscountCodeService.Get();
            CheckCodeResult  codeResult = _getValidDiscounts.CheckCode(_cart, code, fromUrl);

            if (codeResult.Success)
            {
                codes.Add(code);
                _cartDiscountCodeService.SaveDiscounts(codes);
            }
            if (referrer != null && (!referrer.IsAbsoluteUri || referrer.Authority == _site.BaseUrl))
            {
                codeResult.RedirectUrl = referrer.ToString();
            }
            return(codeResult);
        }