public bool CanUseInCartBaseOnProductCategoryAndSku(Discount discount, CouponUsageResponse res = null) { if (discount.DiscountType == DiscountType.AssignedToSkus) { var shoppingCartItemIds = _workContext.CurrentUser.ShoppingCartItems.Select(x => x.ProductId); if (!_discountDataService.Query.Any(x => x.Id == discount.Id && x.AppliedToProducts.Any(p => shoppingCartItemIds.Contains(p.Id)))) { if (res != null) { res.Message = "این تخفیف شامل حال سبد خرید شما نمیشود"; } return(false); } } if (discount.DiscountType == DiscountType.AssignedToCategories) { var allCatIds = discount.GetAllDiscountAppliedCategories(_productCategoryDataService).Select(x => x.Id); if (!_productDataService.Query.Any(x => allCatIds.Contains(x.PrimaryCategoryId))) { if (res != null) { res.Message = "این تخفیف شامل حال سبد خرید شما نمیشود"; } return(false); } } return(true); }
public async Task <CouponUsageResponse> AddCouponCodeUsage(string coupon) { var res = new CouponUsageResponse { Succeed = false, Message = "کد تخفیف وارد شده معتبر نمی باشد." }; var currUserId = _identityManager.GetCurrentIdentity().GetUserId().ToGuid(); var discount = await _discountDataService.Query.FirstOrDefaultAsync(x => x.CouponCode == coupon || x.CouponCodes.Any(cc => cc.Code == coupon)); if (discount == null) { return(res); } if (_couponCodeDataService.Query.Any(x => x.Code == coupon && (x.Reserved || x.UsedById.HasValue))) { res.Message = "این کد تخفیف منقضی شده"; } if (discount.CouponCodeType == CouponCodeType.Single && !_discountValidator.CanUseBaseOnLimitation(discount, currUserId, res)) { return(res); } if (!_discountValidator.CanUseInCartBaseOnProductCategoryAndSku(discount, res)) { return(res); } if (!_discountValidator.CanUseInCartBaseOnOrderTotal(discount, res)) { return(res); } var exiting = GetCustomAttribute(UserAttributes.CouponCodeUsage + coupon); if (exiting == null) { await SaveCustomAttributeAsync(UserAttributes.CouponCodeUsage + coupon, coupon); } res.Succeed = true; res.Message = "کپن تخفیف اعمال شد"; _cachedCouponCodeUsages?.Add(new CouponCodeUsage() { Code = coupon, DisocuntId = discount.Id, DiscountName = discount.Name }); return(res); }
public List <CouponCodeUsage> GetUsedCouponCodeUsages() { if (_cachedCouponCodeUsages != null) { return(_cachedCouponCodeUsages); } var usedCouponCodes = GetUserCopuponUsagesFromAttributes(); var couponCodeUsages = new List <CouponCodeUsage>(); GetUsedCouponCodeDiscounts().Include(x => x.CouponCodes).ToList().ForEach(x => { if (x.CouponCodeType == CouponCodeType.Multi) { var couponCode = x.CouponCodes.First(c => usedCouponCodes.Contains(x.CouponCode)); var couponUsageResponse = new CouponUsageResponse(); couponCodeUsages.Add(new CouponCodeUsage { Code = couponCode.Code, DisocuntId = x.Id, DiscountName = x.Name, Expired = couponCode.UsedById.HasValue || !_discountValidator.CanUseBaseOnStartAndEndDate(x) || !_discountValidator.CanUseInCartBaseOnOrderTotal(x, couponUsageResponse) || !_discountValidator.CanUseInCartBaseOnProductCategoryAndSku(x, couponUsageResponse), }); } else { var couponUsageResponse = new CouponUsageResponse(); couponCodeUsages.Add(new CouponCodeUsage { Code = x.CouponCode, DisocuntId = x.Id, DiscountName = x.Name, Expired = !_discountValidator.CanUseBaseOnLimitation(x, _currUserId.Value, couponUsageResponse) || !_discountValidator.CanUseBaseOnStartAndEndDate(x) || !_discountValidator.CanUseInCartBaseOnOrderTotal(x, couponUsageResponse) || !_discountValidator.CanUseInCartBaseOnProductCategoryAndSku(x, couponUsageResponse), Message = couponUsageResponse.Message }); } }); _cachedCouponCodeUsages = couponCodeUsages; return(couponCodeUsages); }
public bool CanUseInCartBaseOnOrderTotal(Discount discount, CouponUsageResponse res = null) { if (discount.DiscountType == DiscountType.AssignedToOrderSubTotal && discount.MinimumCartAmountRequirement.HasValue) { var cartTotal = _workContext.CurrentUser.ShoppingCartItems.Sum(x => x.Product.Price * x.Quantity); if (cartTotal < discount.MinimumCartAmountRequirement) { if (res != null) { res.Message = "این تخفیف شامل حال سبد خرید شما نمیشود"; } return(false); } } return(true); }
public bool CanUseBaseOnLimitation(Discount discount, Guid currUserId, CouponUsageResponse res = null) { switch (discount.LimitationType) { case DiscountLimitationType.NTimesOnly: { var usedTimes = _discountUsageDataService.Query.Count(x => x.DiscountId == discount.Id && x.Order.OrderStatus != OrderStatus.Cancelled); if (usedTimes >= discount.LimitationTimes) { if (res != null) { res.Message = "تعداد استفاده از این کد تخفیف به پایان رسید"; } return(false); } } break; case DiscountLimitationType.NTimesPerCustomer: { if (_identityManager.GetCurrentIdentity().IsAuthenticated) { var usedTimes = _discountUsageDataService.Query.Count(x => x.DiscountId == discount.Id && x.Order.CreatorId == currUserId && x.Order.OrderStatus != OrderStatus.Cancelled); if (usedTimes >= discount.LimitationTimes) { if (res != null) { res.Message = "تعداد استفاده از این کد تخفیف برای شما به پایان رسید"; } return(false); } } } break; } return(true); }
public async Task <CouponUsageResponse> AddCouponCodeUsage(string coupon) { var res = new CouponUsageResponse { Succeed = false, Message = "کد تخفیف وارد شده معتبر نمی باشد." }; var currUserId = _identityManager.GetCurrentIdentity().GetUserId().ToGuid(); var discount = _discountDataService.Query.FirstOrDefault(x => x.CouponCode == coupon || x.CouponCodes.Any(cc => cc.Code == coupon)); if (discount == null) { return(res); } if (!_discountValidator.CanUseBaseOnStartAndEndDate(discount)) { return(res); } if (!_discountValidator.CanUseBaseOnLimitation(discount, currUserId, res)) { return(res); } if (!_discountValidator.CanUseInCartBaseOnProductCategoryAndSku(discount, res)) { return(res); } if (!_discountValidator.CanUseInCartBaseOnOrderTotal(discount, res)) { return(res); } _discounts.Add(discount); res.Succeed = true; res.Message = "کپن تخفیف اعمال شد"; return(res); }