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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }