Пример #1
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 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);
        }