Пример #1
0
        public bool CanApplyDiscount(string couponCode, int userId, out DiscountApplicationStatus status)
        {
            if (couponCode.IsNullEmptyOrWhiteSpace())
            {
                status = DiscountApplicationStatus.InvalidCode;
                return(false);
            }

            //first get the coupon
            var discountCoupon = _discountCouponService.GetByCouponCode(couponCode);

            return(CanApplyDiscount(discountCoupon, userId, out status));
        }
Пример #2
0
        public bool CanApplyDiscount(DiscountCoupon discountCoupon, int userId, out DiscountApplicationStatus status)
        {
            if (discountCoupon == null || !discountCoupon.Enabled)
            {
                status = DiscountApplicationStatus.InvalidCode;
                return(false);
            }
            if (discountCoupon.Expired)
            {
                status = DiscountApplicationStatus.Expired;
                return(false);
            }

            //first the dates
            if (discountCoupon.StartDate > DateTime.UtcNow)
            {
                status = DiscountApplicationStatus.InvalidCode;
                return(false);
            }

            if (discountCoupon.EndDate.HasValue && discountCoupon.EndDate < DateTime.UtcNow)
            {
                status = DiscountApplicationStatus.Expired;
                return(false);
            }
            //number of usages
            if (discountCoupon.TotalNumberOfTimes > 0)
            {
                var orderCount = _orderService.Count(x =>
                                                     x.DiscountId == discountCoupon.Id && x.PaymentStatus == PaymentStatus.Complete);
                if (orderCount >= discountCoupon.TotalNumberOfTimes)
                {
                    status = DiscountApplicationStatus.Exhausted;
                    return(false);
                }
            }
            if (discountCoupon.NumberOfTimesPerUser > 0)
            {
                var orderCount = _orderService.Count(x =>
                                                     x.DiscountId == discountCoupon.Id && x.PaymentStatus == PaymentStatus.Complete && x.UserId == userId);
                if (orderCount >= discountCoupon.NumberOfTimesPerUser)
                {
                    status = DiscountApplicationStatus.Exhausted;
                    return(false);
                }
            }

            status = DiscountApplicationStatus.Success;
            return(true);
        }
Пример #3
0
        public bool CanApplyDiscount(int couponCodeId, int userId, out DiscountApplicationStatus status)
        {
            var discountCoupon = _discountCouponService.FirstOrDefault(x => x.Id == couponCodeId);

            return(CanApplyDiscount(discountCoupon, userId, out status));
        }