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)); }
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); }
public bool CanApplyDiscount(int couponCodeId, int userId, out DiscountApplicationStatus status) { var discountCoupon = _discountCouponService.FirstOrDefault(x => x.Id == couponCodeId); return(CanApplyDiscount(discountCoupon, userId, out status)); }