private bool ApplyManufacturerDiscount(DiscountCoupon discountCoupon, Cart cart)
        {
            var manufacturerIds = discountCoupon.RestrictionIds();
            var cartItemUpdated = false;

            foreach (var cartItem in cart.CartItems)
            {
                if (cartItem.Product.ManufacturerId.HasValue &&
                    manufacturerIds.Contains(cartItem.Product.ManufacturerId.Value))
                {
                    cartItem.Discount = discountCoupon.GetDiscountAmount(cartItem.Price, cartItem.Quantity);
                    cartItemUpdated   = true;
                }
            }
            if (cartItemUpdated && discountCoupon.MaximumDiscountAmount > 0 &&
                cart.CartItems.Sum(x => x.Discount) > discountCoupon.MaximumDiscountAmount)
            {
                cart.Discount = discountCoupon.MaximumDiscountAmount;
                foreach (var cartItem in cart.CartItems)
                {
                    cartItem.Discount = 0;
                }
            }
            return(cartItemUpdated);
        }
        public ActionResult Index()
        {
            decimal GrandTotal = 0;;

            EducationShoppingCartTempViewModel educationshoppingModel = new EducationShoppingCartTempViewModel();

            if (Session["Countdown"] != null)
            {
                _shoppingeducationService.ResetShippingOrderQuentityStock(HCRGUser.UID);
                Session["Countdown"] = null;
                Session["StartDate"] = null;
            }
            educationshoppingModel.EducationShoppingCartTempResults = Mapper.Map <IEnumerable <EducationShoppingCart> >(_shoppingeducationService.GetEducationShoppingCartByUserID(HCRGUser.UID));
            List <DiscountCoupon> List_DiscountCoupon = new List <DiscountCoupon>();

            foreach (EducationShoppingCart viewmodel in educationshoppingModel.EducationShoppingCartTempResults)
            {
                if (viewmodel.CoupanID != null)
                {
                    DiscountCoupon discountCoupon = new DiscountCoupon();
                    discountCoupon = Mapper.Map <DiscountCoupon>(_discountCouponService.GetDiscountCouponByID(Convert.ToInt32(viewmodel.CoupanID)));
                    List_DiscountCoupon.Add(discountCoupon);
                }
                GrandTotal += viewmodel.Amount;
            }

            educationshoppingModel.DiscountCouponResults = List_DiscountCoupon.AsEnumerable();
            TempData["TotalAmount"] = GrandTotal;
            return(View(educationshoppingModel));
        }
        private bool ApplyRoleDiscount(DiscountCoupon discountCoupon, Cart cart)
        {
            var roleIds = discountCoupon.RestrictionIds();
            var user    = _userService.Get(cart.UserId);

            if (user.Roles.Any(x => roleIds.Contains(x.Id)))
            {
                foreach (var cartItem in cart.CartItems)
                {
                    cartItem.Discount = discountCoupon.GetDiscountAmount(cartItem.Price, cartItem.Quantity);
                }

                if (discountCoupon.MaximumDiscountAmount > 0 &&
                    cart.CartItems.Sum(x => x.Discount) > discountCoupon.MaximumDiscountAmount)
                {
                    cart.Discount = discountCoupon.MaximumDiscountAmount;
                    foreach (var cartItem in cart.CartItems)
                    {
                        cartItem.Discount = 0;
                    }
                }
                return(true);
            }
            return(false);
        }
        private bool ApplyVendorDiscount(DiscountCoupon discountCoupon, Cart cart)
        {
            var vendorIds        = discountCoupon.RestrictionIds().ToArray();
            var vendorProductIds = _productService.GetProductIdsByVendorIds(vendorIds);
            var cartUpdated      = false;

            foreach (var cartItem in cart.CartItems)
            {
                if (vendorProductIds.Contains(cartItem.ProductId))
                {
                    cartItem.Discount = discountCoupon.GetDiscountAmount(cartItem.Price, cartItem.Quantity);
                    cartUpdated       = true;
                }
            }

            if (cartUpdated && discountCoupon.MaximumDiscountAmount > 0 &&
                cart.CartItems.Sum(x => x.Discount) > discountCoupon.MaximumDiscountAmount)
            {
                cart.Discount = discountCoupon.MaximumDiscountAmount;
                foreach (var cartItem in cart.CartItems)
                {
                    cartItem.Discount = 0;
                }
            }
            return(cartUpdated);
        }
        public JsonResult Add(IEnumerable <Education> myList, string CouponType, string CouponDiscount, string CouponExpiryDate, string noofcoupon, string couponFor)
        {
            List <DiscountCoupon> list_discountCoupon = new List <DiscountCoupon>();
            DiscountCoupon        discountCoupon      = new DiscountCoupon();

            foreach (var item in myList)
            {
                for (int i = 0; i < Convert.ToInt32(noofcoupon); i++)
                {
                    discountCoupon = new DiscountCoupon();
                    discountCoupon.CouponDiscount   = Convert.ToDecimal(CouponDiscount);
                    discountCoupon.CouponExpiryDate = Convert.ToDateTime(CouponExpiryDate);  //DateTime.ParseExact(CouponExpiryDate, format, en.DateTimeFormat);
                    discountCoupon.CouponIssueDate  = DateTime.Now;
                    discountCoupon.CouponCode       = MakeCoupon(10);
                    discountCoupon.CoupanValid      = true;
                    discountCoupon.CouponType       = CouponType;
                    discountCoupon.ClientID         = HCRGCLIENT.ClientID;
                    if (couponFor == GlobalConst.CouponType.Course)
                    {
                        discountCoupon.CouponProduactID    = 0;
                        discountCoupon.CouponEducationID   = item.EducationID;
                        discountCoupon.CouponEducationName = item.CourseName;
                    }
                    else
                    {
                        discountCoupon.CouponProduactID    = 1;
                        discountCoupon.CouponEducationID   = 0;
                        discountCoupon.CouponEducationName = "";
                    }
                    discountCoupon.CouponID = _DiscountCouponService.AddDiscountCoupon(Mapper.Map <HCRGUniversityMgtApp.NEPService.DiscountCouponService.DiscountCoupon>(discountCoupon));
                    list_discountCoupon.Add(discountCoupon);
                }
            }
            return(Json(list_discountCoupon, GlobalConst.Message.text_html));
        }
        private bool ApplyShippingDiscount(DiscountCoupon discountCoupon, Cart cart)
        {
            var discount = discountCoupon.GetDiscountAmount(cart.ShippingFee, 1);

            cart.Discount = discount;
            return(true);
        }
        private bool ApplyOrderSubTotalDiscount(DiscountCoupon discountCoupon, Cart cart)
        {
            var subTotal = GetOrderSubTotal(cart);

            cart.Discount = discountCoupon.GetDiscountAmount(subTotal, 1);
            return(true);
        }
Exemple #8
0
        public ActionResult DeleteConfirmed(int id)
        {
            DiscountCoupon discountCoupon = db.DiscountCoupons.Find(id);

            db.DiscountCoupons.Remove(discountCoupon);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
 public virtual async Task InsertCouponCode(string discountId, string couponCode)
 {
     var coupon = new DiscountCoupon {
         CouponCode = couponCode.ToUpper(),
         DiscountId = discountId
     };
     await _discountService.InsertDiscountCoupon(coupon);
 }
Exemple #10
0
    protected void btnAdd_Click(object sender, EventArgs e) //add the new discount coupon
    {
        Admin  a = (Admin)Session["admin"];
        double disAMT;

        if (tbxAMT.Text == "")
        {
            disAMT = 0;
        }
        else
        {
            disAMT = Convert.ToDouble(tbxAMT.Text);
        }
        DiscountCoupon dc = new DiscountCoupon()
        {
            CouponCode  = tbxCc.Text,
            Name        = tbxName.Text,
            Description = tbxDesc.Text,
            Percentage  = tbxPercentage.Text,
            Amount      = disAMT,
            StartDate   = Convert.ToDateTime(tbxSd.Text),
            EndDate     = Convert.ToDateTime(tbxEd.Text),
            AdminID     = a
        };

        if (Convert.ToDateTime(tbxSd.Text) < DateTime.Now) //to check the start date must be future and cannot be past
        {
            lblOutput.Text = "Start date must be in the future";
        }
        else
        {
            if (Convert.ToDateTime(tbxEd.Text) < Convert.ToDateTime(tbxSd.Text)) //to check end date cannot be before the start date
            {
                lblOutput.Text = "End date cannot be before the start date";
            }
            else
            {
                try
                {
                    int id = DiscountCouponDB.addDiscountCoupon(dc); //add row into the database
                    lblOutput.Text = id + "Added Successfully!";
                    gvBind();
                    tbxAMT.Text        = "";
                    tbxCc.Text         = "";
                    tbxDesc.Text       = "";
                    tbxEd.Text         = "";
                    tbxName.Text       = "";
                    tbxPercentage.Text = "";
                    tbxSd.Text         = "";
                }
                catch (Exception ex)
                {
                    lblOutput.Text = "Cannot Add!" + ex.Message; //to show the error message cannot add the discount coupon
                }
            }
        }
    }
        private bool ApplyShippingMethodDiscount(DiscountCoupon discountCoupon, Cart cart)
        {
            var shippingMethodNames = discountCoupon.RestrictionValues();

            if (shippingMethodNames.Contains(cart.ShippingMethodName))
            {
                return(ApplyShippingDiscount(discountCoupon, cart));
            }
            return(false);
        }
Exemple #12
0
 private bool ChangeLockState(DiscountCoupon vDiscountCoupon, bool vState)
 {
     using (FRShoppingEntities frenty = new FRShoppingEntities())
     {
         DiscountCoupon up = frenty.DiscountCoupons.FirstOrDefault(e => e.DiscountCouponId == vDiscountCoupon.DiscountCouponId);
         up.UpdatedDate = DateTime.Now;
         up.Active      = vState;
         return(frenty.SaveChanges() > 0 ? true : false);
     }
 }
Exemple #13
0
 public ActionResult Edit([Bind(Include = "ID,Name,Description,Percent,CreatedDate,ExpirationDate,IsActive")] DiscountCoupon discountCoupon)
 {
     if (ModelState.IsValid)
     {
         db.Entry(discountCoupon).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     return(View(discountCoupon));
 }
Exemple #14
0
        public ActionResult Create([Bind(Include = "ID,Name,Description,Percent,CreatedDate,ExpirationDate,IsActive")] DiscountCoupon discountCoupon)
        {
            if (ModelState.IsValid)
            {
                discountCoupon.CreatedDate = DateTime.Now;
                db.DiscountCoupons.Add(discountCoupon);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            return(View(discountCoupon));
        }
 public JsonResult ApplyCoupon(DiscountCoupon discountcoupon, string Couponcode)
 {
     discountcoupon = Mapper.Map <DiscountCoupon>(_discountCouponService.GetDiscountCouponByCouponCode(Couponcode));
     if (discountcoupon.CoupanValid && discountcoupon.CouponExpiryDate >= DateTime.Now)
     {
         return(Json(discountcoupon));
     }
     else
     {
         return(Json(GlobalConst.Message.CoupanNotValid));
     }
 }
Exemple #16
0
        internal static void AddDiscountCoupon(string id, DiscountCoupon promotion)
        {
            promotion.CompanyId = id;
            new CompanyManager().GetCompanies().Find(c => c.Id.Equals(id)).DiscountCoupons.Add(promotion);

            foreach (var user in new UserManager().GetUsers())
            {
                if (UserManager.IsUserSubscribed(user.Id, promotion.CompanyId))
                {
                    NotificationManager.CreateNotificationAsync(user.Id, promotion.CompanyId, promotion.Id, (int)Notification.AllowedNotificationTypes.CREATED);
                }
            }
        }
        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);
        }
Exemple #18
0
        public DiscountCoupon AddDiscountCoupon(DiscountCoupon vDiscountCoupon)
        {
            try
            {
                Shoppingctx.DiscountCoupons.Add(vDiscountCoupon);
                base.PurgeCacheItems(CacheKey);

                return(Shoppingctx.SaveChanges() > 0 ? vDiscountCoupon : null);
            }
            catch
            {
                return(null);
            }
        }
Exemple #19
0
        // GET: DiscountCoupons/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            DiscountCoupon discountCoupon = db.DiscountCoupons.Find(id);

            if (discountCoupon == null)
            {
                return(HttpNotFound());
            }
            return(View(discountCoupon));
        }
Exemple #20
0
 private void SetPromotionType(int value)
 {
     if (value == (int)AddPromotionPassThroughElement.IDENTIFIERS.EVENT)
     {
         Promotion = new Event();
     }
     else if (value == (int)AddPromotionPassThroughElement.IDENTIFIERS.DISCOUNTCODE)
     {
         Promotion = new DiscountCoupon();
     }
     else
     {
         Promotion = new Promotion();
     }
 }
        private bool ApplyCategoryDiscount(DiscountCoupon discountCoupon, Cart cart)
        {
            var categoryIds        = discountCoupon.RestrictionIds().ToArray();
            var categoryProductIds = _productService.GetProductIdsByCategoryIds(categoryIds);
            var cartUpdated        = false;

            foreach (var cartItem in cart.CartItems)
            {
                if (categoryProductIds.Contains(cartItem.ProductId))
                {
                    cartItem.Discount = discountCoupon.GetDiscountAmount(cartItem.Price, cartItem.Quantity);
                    cartUpdated       = true;
                }
            }
            return(cartUpdated);
        }
        /// <summary>
        /// To Apply Discount on Quantity
        /// </summary>
        /// <param name="BilledItems"></param>
        /// <param name="findCop"></param>
        /// <param name="findItem"></param>
        /// <param name="billedItem"></param>
        /// <param name="Qnum"></param>
        /// <remarks> This Methods First calculates total quantity by iterating through items if needed. Calculate Discount Quantity by adding Discount coupon details.
        ///  Total Discount Quantity will be calculated by dividing total quantity and Discount Quantity. Total cost will be calculated after removing discount quantity
        /// </remarks>
        public static void ApplyDiscount(Dictionary <int, BilledItem> BilledItems, DiscountCoupon findCop, Item findItem, BilledItem billedItem, double Qnum)
        {
            BilledItems.TryGetValue(findItem.Id, out BilledItem DictValue);
            double totalQty = Qnum;

            if (DictValue != null)
            {
                totalQty = DictValue.ItmQuantity + Qnum;
            }
            int    totalQtyWithDiscout = findCop.CDetails.CDiscountVal + findCop.CDetails.CMinVal;
            double totalDiscountQty    = (int)totalQty / totalQtyWithDiscout;

            billedItem.DisCntDetails = "Buy " + findCop.CDetails.CMinVal.ToString() + " Get " + findCop.CDetails.CDiscountVal.ToString() + " Free";
            billedItem.TotCost       = (totalQty - totalDiscountQty) * findItem.Cost;
            billedItem.ItmQuantity   = totalQty;
        }
    //if user apply with the discount coupon
    protected void btnApply_Click(object sender, EventArgs e)
    {
        //retrieve the shopping cart session
        ShoppingCart sc = (ShoppingCart)Session["cart"];
        //initialize the total amount with double
        double tAmt = Convert.ToDouble(sc.TotalPrice);
        //get discount coupon from database
        DiscountCoupon dc = DiscountCouponDB.getDiscountCouponByCode(tbxDC.Text);

        //check if discount coupon is not null
        if (dc != null)
        {
            if (dc.EndDate > DateTime.Now)                     //check the enddate from datetime.now functions
            {
                Session["DC"] = dc;                            //create a session for discount coupon
                if (dc.Percentage == null)                     // check if the percentage is null
                {
                    double netAMT = sc.TotalPrice - dc.Amount; //total price will be minus from the amount
                    sc.DiscountedAmt      = dc.Amount;         //show the amount price of discount coupon
                    lblDiscountAmt.Text   = "$" + dc.Amount;   //show with the dollar sign
                    sc.NetAMount          = (tAmt - dc.Amount);
                    lblNetAmount.Text     = "$" + sc.NetAMount;
                    lblTax.Text           = sc.Tax.ToString("C");
                    lblAmtPayable.Text    = sc.AmtPayable.ToString("C");
                    Session["AmtPayable"] = sc.AmtPayable; //create a session for amt payable
                }
                else
                {
                    sc.DiscountedAmt      = tAmt * Convert.ToDouble(dc.Percentage);          //if the amount is null, then the price will be minus from the percentage
                    sc.NetAMount          = tAmt - (tAmt * Convert.ToDouble(dc.Percentage)); //netamount times with discount percentage
                    lblDiscountAmt.Text   = "$" + sc.DiscountedAmt;                          //show with the dollar sign
                    lblNetAmount.Text     = "$" + sc.NetAMount;
                    lblTax.Text           = sc.Tax.ToString("C");
                    lblAmtPayable.Text    = sc.AmtPayable.ToString("C");
                    Session["AmtPayable"] = sc.AmtPayable; //create a session for amt payable
                }
            }
            else
            {
                lblError.Text = "Coupon has expired"; //if the coupon code has expired, show the error message
            }
        }
        else
        {
            lblError.Text = "Coupon Code is not valid"; //when the coupon code is not valid
        }
    }
        private bool ApplyProductDiscount(DiscountCoupon discountCoupon, Cart cart)
        {
            var productIds      = discountCoupon.RestrictionIds();
            var cartItemUpdated = false;

            foreach (var cartItem in cart.CartItems)
            {
                if (!productIds.Contains(cartItem.ProductId))
                {
                    continue;
                }
                cartItem.Discount   = discountCoupon.GetDiscountAmount(cartItem.Price, cartItem.Quantity);
                cartItem.FinalPrice = cartItem.Price - cartItem.Discount;
                cartItemUpdated     = true;
            }
            return(cartItemUpdated);
        }
        private bool ApplyPaymentMethodDiscount(DiscountCoupon discountCoupon, Cart cart)
        {
            var paymentMethodNames = discountCoupon.RestrictionValues();

            if (paymentMethodNames.Contains(cart.PaymentMethodName))
            {
                var paymentHandler = PluginHelper.GetPaymentHandler(cart.PaymentMethodName);
                var discount       = discountCoupon.GetDiscountAmount(paymentHandler.GetPaymentHandlerFee(cart), 1);
                if (discountCoupon.HasCouponCode)
                {
                    cart.Discount = discount;
                }
                cart.PaymentMethodFee = cart.PaymentMethodFee - discount;
                return(true);
            }
            return(false);
        }
Exemple #26
0
        protected virtual async Task InstallDiscounts()
        {
            var discounts = new List <Discount>
            {
                new Discount
                {
                    Name                 = "Sample discount with coupon code",
                    DiscountTypeId       = DiscountType.AssignedToOrderTotal,
                    DiscountLimitationId = DiscountLimitationType.Nolimits,
                    UsePercentage        = false,
                    DiscountAmount       = 10,
                    RequiresCouponCode   = true,
                    IsEnabled            = true,
                    CurrencyCode         = "USD"
                },
                new Discount
                {
                    Name                 = "'20% order total' discount",
                    DiscountTypeId       = DiscountType.AssignedToOrderTotal,
                    DiscountLimitationId = DiscountLimitationType.Nolimits,
                    UsePercentage        = true,
                    DiscountPercentage   = 20,
                    StartDateUtc         = new DateTime(2010, 1, 1),
                    EndDateUtc           = new DateTime(2030, 1, 1),
                    RequiresCouponCode   = true,
                    IsEnabled            = true,
                    CurrencyCode         = "USD"
                },
            };
            await _discountRepository.InsertAsync(discounts);

            var coupon1 = new DiscountCoupon
            {
                CouponCode = "123",
                DiscountId = _discountRepository.Table.Where(x => x.Name == "Sample discount with coupon code").FirstOrDefault().Id
            };
            await _discountCouponRepository.InsertAsync(coupon1);

            var coupon2 = new DiscountCoupon
            {
                CouponCode = "456",
                DiscountId = _discountRepository.Table.Where(x => x.Name == "'20% order total' discount").FirstOrDefault().Id
            };
            await _discountCouponRepository.InsertAsync(coupon2);
        }
        private bool ApplyOrderTotalDiscount(DiscountCoupon discountCoupon, Cart cart)
        {
            var orderTotalForDiscount = decimal.Zero;
            var otherOrderTotal       = decimal.Zero;

            foreach (var cartItem in cart.CartItems)
            {
                if (discountCoupon.ExcludeAlreadyDiscountedProducts && cartItem.Discount > 0)
                {
                    otherOrderTotal += cartItem.Tax + cartItem.Price * cartItem.Quantity;
                    continue;
                }
                orderTotalForDiscount += cartItem.Tax + cartItem.Price * cartItem.Quantity;
            }

            cart.Discount = discountCoupon.GetDiscountAmount(orderTotalForDiscount, 1);
            return(true);
        }
Exemple #28
0
        public DiscountCoupon AddDiscountCoupon(int vDiscountCouponID, int vBizInfoID, string vTitle, string vDescription, int vDiscountPercentage, decimal vOrderMinimum, DateTime vStartDate, DateTime vExpirationDate, DateTime vAddedDate, string vAddedBy, DateTime vUpdatedDate, string vUpdatedBy, bool vActive)
        {
            DiscountCoupon lDiscountCoupon = new DiscountCoupon();

            using (FRShoppingEntities frctx = new FRShoppingEntities())
            {
                if (vDiscountCouponID > 0)
                {
                    lDiscountCoupon                    = frctx.DiscountCoupons.FirstOrDefault(u => u.DiscountCouponId == vDiscountCouponID);
                    lDiscountCoupon.Title              = vTitle;
                    lDiscountCoupon.Description        = vDescription;
                    lDiscountCoupon.DiscountPercentage = vDiscountPercentage;
                    lDiscountCoupon.OrderMinimum       = vOrderMinimum;
                    lDiscountCoupon.StartDate          = vStartDate;
                    lDiscountCoupon.ExpirationDate     = vExpirationDate;

                    lDiscountCoupon.UpdatedDate = vUpdatedDate;
                    lDiscountCoupon.UpdatedBy   = vUpdatedBy;
                    lDiscountCoupon.Active      = vActive;
                    return(frctx.SaveChanges() > 0 ? lDiscountCoupon : null);
                }
                else
                {
                    lDiscountCoupon.Title              = vTitle;
                    lDiscountCoupon.Description        = vDescription;
                    lDiscountCoupon.DiscountPercentage = vDiscountPercentage;
                    lDiscountCoupon.OrderMinimum       = vOrderMinimum;
                    lDiscountCoupon.StartDate          = vStartDate;
                    lDiscountCoupon.ExpirationDate     = vExpirationDate;

                    lDiscountCoupon.BizInfoId   = vBizInfoID;
                    lDiscountCoupon.AddedDate   = vAddedDate;
                    lDiscountCoupon.AddedBy     = vAddedBy;
                    lDiscountCoupon.UpdatedDate = vUpdatedDate;
                    lDiscountCoupon.UpdatedBy   = vUpdatedBy;
                    lDiscountCoupon.Active      = vActive;
                    return(AddDiscountCoupon(lDiscountCoupon));
                }
            }
        }
        private decimal GetProductDiscountedPrice(DiscountCoupon discountCoupon, Product product, ProductVariant variant, User user, int quantity)
        {
            var price = variant?.Price ?? product.Price;

            switch (discountCoupon.RestrictionType)
            {
            case RestrictionType.Products:
                return(discountCoupon.RestrictionIds().Contains(product.Id) ? discountCoupon.GetDiscountAmount(price, quantity) : 0);

            case RestrictionType.Categories:
                var categoryIds        = discountCoupon.RestrictionIds().ToArray();
                var categoryProductIds = _productService.GetProductIdsByCategoryIds(categoryIds);
                return(categoryProductIds.Contains(product.Id) ? discountCoupon.GetDiscountAmount(price, quantity) : 0);

            case RestrictionType.Users:
                return(discountCoupon.RestrictionIds().Contains(user.Id) ? discountCoupon.GetDiscountAmount(price, quantity) : 0);

            case RestrictionType.UserGroups:
                return(0);

            case RestrictionType.Roles:
                var roleIds = discountCoupon.RestrictionIds();
                return(user.Roles.Any(x => roleIds.Contains(x.Id)) ? discountCoupon.GetDiscountAmount(price, quantity) : 0);

            case RestrictionType.Vendors:
                var vendorIds        = discountCoupon.RestrictionIds().ToArray();
                var vendorProductIds = _productService.GetProductIdsByVendorIds(vendorIds);
                return(vendorProductIds.Contains(product.Id) ? discountCoupon.GetDiscountAmount(price, quantity) : 0);

            case RestrictionType.Manufacturers:
                return(product.ManufacturerId.HasValue &&
                       discountCoupon.RestrictionIds().Contains(product.ManufacturerId.Value)
                        ? discountCoupon.GetDiscountAmount(price, quantity)
                        : 0);

            default:
                return(0);
            }
        }
        public static decimal GetDiscountAmount(this DiscountCoupon discountCoupon, decimal amount, int times)
        {
            if (amount == 0)
            {
                return(0);
            }
            amount = times * amount;
            var maxAmount = discountCoupon.MaximumDiscountAmount;

            if (maxAmount == 0)
            {
                maxAmount = decimal.MaxValue;
            }

            var discountAmount = discountCoupon.CalculationType == CalculationType.FixedAmount
                ? discountCoupon.DiscountValue * times
                : (amount * discountCoupon.DiscountValue) / 100;

            if (discountAmount > maxAmount)
            {
                discountAmount = maxAmount;
            }
            return(discountAmount);
        }