Exemple #1
0
        /// <summary>
        /// Updates the discount
        /// </summary>
        /// <param name="discountId">Discount identifier</param>
        /// <param name="discountType">The discount type</param>
        /// <param name="discountRequirement">The discount requirement</param>
        /// <param name="requirementSpentAmount">The discount requirement - applies if customer has spent/purchased x.xx amount</param>
        /// <param name="requirementBillingCountryIs">The discount requirement - customer's billing country is... (used when requirement is set to "Billing country is")</param>
        /// <param name="requirementShippingCountryIs">The discount requirement - customer's shipping country is... (used when requirement is set to "Shipping country is")</param>
        /// <param name="discountLimitation">The discount limitation</param>
        /// <param name="limitationTimes">The discount limitation times (used when Limitation is set to "N Times Only" or "N Times Per Customer")</param>
        /// <param name="name">The name</param>
        /// <param name="usePercentage">A value indicating whether to use percentage</param>
        /// <param name="discountPercentage">The discount percentage</param>
        /// <param name="discountAmount">The discount amount</param>
        /// <param name="startDate">The discount start date and time</param>
        /// <param name="endDate">The discount end date and time</param>
        /// <param name="requiresCouponCode">The value indicating whether discount requires coupon code</param>
        /// <param name="couponCode">The coupon code</param>
        /// <param name="deleted">A value indicating whether the entity has been deleted</param>
        /// <returns>Discount</returns>
        public static Discount UpdateDiscount(int discountId, DiscountTypeEnum discountType,
                                              DiscountRequirementEnum discountRequirement, decimal requirementSpentAmount,
                                              int requirementBillingCountryIs, int requirementShippingCountryIs,
                                              DiscountLimitationEnum discountLimitation, int limitationTimes,
                                              string name, bool usePercentage,
                                              decimal discountPercentage, decimal discountAmount,
                                              DateTime startDate, DateTime endDate, bool requiresCouponCode,
                                              string couponCode, bool deleted)
        {
            if (startDate.CompareTo(endDate) >= 0)
            {
                throw new NopException("Start date should be less then expiration date");
            }

            if (requiresCouponCode && String.IsNullOrEmpty(couponCode))
            {
                throw new NopException("Discount requires coupon code. Coupon code could not be empty.");
            }

            name       = CommonHelper.EnsureMaximumLength(name, 100);
            couponCode = CommonHelper.EnsureMaximumLength(couponCode, 100);

            var discount = GetDiscountById(discountId);

            if (discount == null)
            {
                return(null);
            }

            var context = ObjectContextHelper.CurrentObjectContext;

            if (!context.IsAttached(discount))
            {
                context.Discounts.Attach(discount);
            }

            discount.DiscountTypeId               = (int)discountType;
            discount.DiscountRequirementId        = (int)discountRequirement;
            discount.RequirementSpentAmount       = requirementSpentAmount;
            discount.RequirementBillingCountryIs  = requirementBillingCountryIs;
            discount.RequirementShippingCountryIs = requirementShippingCountryIs;
            discount.DiscountLimitationId         = (int)discountLimitation;
            discount.LimitationTimes              = limitationTimes;
            discount.Name               = name;
            discount.UsePercentage      = usePercentage;
            discount.DiscountPercentage = discountPercentage;
            discount.DiscountAmount     = discountAmount;
            discount.StartDate          = startDate;
            discount.EndDate            = endDate;
            discount.RequiresCouponCode = requiresCouponCode;
            discount.CouponCode         = couponCode;
            discount.Deleted            = deleted;
            context.SaveChanges();

            if (DiscountManager.CacheEnabled)
            {
                NopRequestCache.RemoveByPattern(DISCOUNTS_PATTERN_KEY);
            }
            return(discount);
        }
Exemple #2
0
        private void TogglePanels()
        {
            DiscountRequirementEnum discountRequirement = (DiscountRequirementEnum)int.Parse(this.ddlDiscountRequirement.SelectedItem.Value);

            pnlCustomerRoles.Visible             = discountRequirement == DiscountRequirementEnum.MustBeAssignedToCustomerRole;
            pnlRestrictedProductVariants.Visible = (discountRequirement == DiscountRequirementEnum.HadPurchasedAllOfTheseProductVariants || discountRequirement == DiscountRequirementEnum.HadPurchasedOneOfTheseProductVariants);
        }
        /// <summary>
        /// Updates the discount
        /// </summary>
        /// <param name="discountId">Discount identifier</param>
        /// <param name="discountType">The discount type</param>
        /// <param name="discountRequirement">The discount requirement</param>
        /// <param name="discountLimitation">The discount limitation</param>
        /// <param name="name">The name</param>
        /// <param name="usePercentage">A value indicating whether to use percentage</param>
        /// <param name="discountPercentage">The discount percentage</param>
        /// <param name="discountAmount">The discount amount</param>
        /// <param name="startDate">The discount start date and time</param>
        /// <param name="endDate">The discount end date and time</param>
        /// <param name="requiresCouponCode">The value indicating whether discount requires coupon code</param>
        /// <param name="couponCode">The coupon code</param>
        /// <param name="deleted">A value indicating whether the entity has been deleted</param>
        /// <returns>Discount</returns>
        public static Discount UpdateDiscount(int discountId, DiscountTypeEnum discountType,
                                              DiscountRequirementEnum discountRequirement, DiscountLimitationEnum discountLimitation,
                                              string name, bool usePercentage, decimal discountPercentage, decimal discountAmount,
                                              DateTime startDate, DateTime endDate, bool requiresCouponCode,
                                              string couponCode, bool deleted)
        {
            if (startDate.CompareTo(endDate) >= 0)
            {
                throw new NopException("Start date should be less then expiration date");
            }

            if (requiresCouponCode && String.IsNullOrEmpty(couponCode))
            {
                throw new NopException("Discount requires coupon code. Coupon code could not be empty.");
            }

            var dbItem = DBProviderManager <DBDiscountProvider> .Provider.UpdateDiscount(discountId, (int)discountType,
                                                                                         (int)discountRequirement, (int)discountLimitation, name,
                                                                                         usePercentage, discountPercentage, discountAmount, startDate, endDate,
                                                                                         requiresCouponCode, couponCode, deleted);

            var discount = DBMapping(dbItem);

            if (DiscountManager.CacheEnabled)
            {
                NopCache.RemoveByPattern(DISCOUNTS_PATTERN_KEY);
            }
            return(discount);
        }
Exemple #4
0
        /// <summary>
        /// Get discount requirement name
        /// </summary>
        /// <param name="dr">Discount requirement</param>
        /// <returns>Discount requirement name</returns>
        public static string GetDiscountRequirementName(this DiscountRequirementEnum dr)
        {
            string name = IoC.Resolve <ILocalizationManager>().GetLocaleResourceString(
                string.Format("DiscountRequirement.{0}", (int)dr),
                NopContext.Current.WorkingLanguage.LanguageId,
                true,
                CommonHelper.ConvertEnum(dr.ToString()));

            return(name);
        }
        private void TogglePanels()
        {
            pnlDiscountPercentage.Visible = cbUsePercentage.Checked;
            pnlDiscountAmount.Visible     = !cbUsePercentage.Checked;
            pnlCouponCode.Visible         = cbRequiresCouponCode.Checked;

            DiscountRequirementEnum discountRequirement = (DiscountRequirementEnum)int.Parse(this.ddlDiscountRequirement.SelectedItem.Value);

            pnlCustomerRoles.Visible = discountRequirement == DiscountRequirementEnum.MustBeAssignedToCustomerRole;
        }
Exemple #6
0
        private void TogglePanels()
        {
            DiscountRequirementEnum discountRequirement = (DiscountRequirementEnum)int.Parse(this.ddlDiscountRequirement.SelectedItem.Value);

            pnlCustomerRoles.Visible             = discountRequirement == DiscountRequirementEnum.MustBeAssignedToCustomerRole;
            pnlRestrictedProductVariants.Visible = discountRequirement == DiscountRequirementEnum.HasAllOfTheseProductVariantsInTheCart ||
                                                   discountRequirement == DiscountRequirementEnum.HasOneOfTheseProductVariantsInTheCart ||
                                                   discountRequirement == DiscountRequirementEnum.HadPurchasedAllOfTheseProductVariants ||
                                                   discountRequirement == DiscountRequirementEnum.HadPurchasedOneOfTheseProductVariants;
            pnlRequirementSpentAmount.Visible       = discountRequirement == DiscountRequirementEnum.HadSpentAmount;
            pnlRequirementBillingCountryIs.Visible  = discountRequirement == DiscountRequirementEnum.BillingCountryIs;
            pnlRequirementShippingCountryIs.Visible = discountRequirement == DiscountRequirementEnum.ShippingCountryIs;
        }
Exemple #7
0
        /// <summary>
        /// Updates the discount
        /// </summary>
        /// <param name="DiscountID">Discount identifier</param>
        /// <param name="DiscountType">The discount type</param>
        /// <param name="DiscountRequirement">The discount requirement</param>
        /// <param name="Name">The name</param>
        /// <param name="UsePercentage">A value indicating whether to use percentage</param>
        /// <param name="DiscountPercentage">The discount percentage</param>
        /// <param name="DiscountAmount">The discount amount</param>
        /// <param name="StartDate">The discount start date and time</param>
        /// <param name="EndDate">The discount end date and time</param>
        /// <param name="RequiresCouponCode">The value indicating whether discount requires coupon code</param>
        /// <param name="CouponCode">The coupon code</param>
        /// <param name="Deleted">A value indicating whether the entity has been deleted</param>
        /// <returns>Discount</returns>
        public static Discount UpdateDiscount(int DiscountID, DiscountTypeEnum DiscountType,
                                              DiscountRequirementEnum DiscountRequirement, string Name, bool UsePercentage,
                                              decimal DiscountPercentage, decimal DiscountAmount, DateTime StartDate,
                                              DateTime EndDate, bool RequiresCouponCode, string CouponCode, bool Deleted)
        {
            if (StartDate.CompareTo(EndDate) >= 0)
            {
                throw new NopException("Start date should be less then expiration date");
            }

            //if ((DiscountType == DiscountTypeEnum.AssignedToWholeOrder) && !RequiresCouponCode)
            //{
            //    throw new NopException("Discounts assigned to whole order should require coupon code");
            //}

            //if ((DiscountType == DiscountTypeEnum.AssignedToWholeOrder)
            //    && RequiresCouponCode
            //    && String.IsNullOrEmpty(CouponCode))
            //{
            //    throw new NopException("Discounts assigned to whole order should require coupon code. Coupon code could not be empty.");
            //}

            if (RequiresCouponCode && String.IsNullOrEmpty(CouponCode))
            {
                throw new NopException("Discount requires coupon code. Coupon code could not be empty.");
            }

            DBDiscount dbItem = DBProviderManager <DBDiscountProvider> .Provider.UpdateDiscount(DiscountID, (int)DiscountType,
                                                                                                (int)DiscountRequirement, Name, UsePercentage, DiscountPercentage,
                                                                                                DiscountAmount, StartDate, EndDate,
                                                                                                RequiresCouponCode, CouponCode, Deleted);

            Discount discount = DBMapping(dbItem);

            if (DiscountManager.CacheEnabled)
            {
                NopCache.RemoveByPattern(DISCOUNTS_PATTERN_KEY);
            }
            return(discount);
        }
        /// <summary>
        /// Updates the discount
        /// </summary>
        /// <param name="DiscountID">Discount identifier</param>
        /// <param name="DiscountType">The discount type</param>
        /// <param name="DiscountRequirement">The discount requirement</param>
        /// <param name="Name">The name</param>
        /// <param name="UsePercentage">A value indicating whether to use percentage</param>
        /// <param name="DiscountPercentage">The discount percentage</param>
        /// <param name="DiscountAmount">The discount amount</param>
        /// <param name="StartDate">The discount start date and time</param>
        /// <param name="EndDate">The discount end date and time</param>
        /// <param name="RequiresCouponCode">The value indicating whether discount requires coupon code</param>
        /// <param name="CouponCode">The coupon code</param>
        /// <param name="Deleted">A value indicating whether the entity has been deleted</param>
        /// <returns>Discount</returns>
        public static Discount UpdateDiscount(int DiscountID, DiscountTypeEnum DiscountType,
            DiscountRequirementEnum DiscountRequirement, string Name, bool UsePercentage,
            decimal DiscountPercentage, decimal DiscountAmount, DateTime StartDate,
            DateTime EndDate, bool RequiresCouponCode, string CouponCode, bool Deleted)
        {
            if (StartDate.CompareTo(EndDate) >= 0)
                throw new NopException("Start date should be less then expiration date");

            //if ((DiscountType == DiscountTypeEnum.AssignedToWholeOrder) && !RequiresCouponCode)
            //{
            //    throw new NopException("Discounts assigned to whole order should require coupon code");
            //}

            //if ((DiscountType == DiscountTypeEnum.AssignedToWholeOrder)
            //    && RequiresCouponCode
            //    && String.IsNullOrEmpty(CouponCode))
            //{
            //    throw new NopException("Discounts assigned to whole order should require coupon code. Coupon code could not be empty.");
            //}

            if (RequiresCouponCode && String.IsNullOrEmpty(CouponCode))
            {
                throw new NopException("Discount requires coupon code. Coupon code could not be empty.");
            }

            DBDiscount dbItem = DBProviderManager<DBDiscountProvider>.Provider.UpdateDiscount(DiscountID, (int)DiscountType,
                (int)DiscountRequirement, Name, UsePercentage, DiscountPercentage,
                DiscountAmount, StartDate, EndDate,
                RequiresCouponCode, CouponCode, Deleted);
            Discount discount = DBMapping(dbItem);

            if (DiscountManager.CacheEnabled)
            {
                NopCache.RemoveByPattern(DISCOUNTS_PATTERN_KEY);
            }
            return discount;
        }
        /// <summary>
        /// Updates the discount
        /// </summary>
        /// <param name="discountId">Discount identifier</param>
        /// <param name="discountType">The discount type</param>
        /// <param name="discountRequirement">The discount requirement</param>
        /// <param name="requirementSpentAmount">The discount requirement - applies if customer has spent/purchased x.xx amount</param>
        /// <param name="requirementBillingCountryIs">The discount requirement - customer's billing country is... (used when requirement is set to "Billing country is")</param>
        /// <param name="requirementShippingCountryIs">The discount requirement - customer's shipping country is... (used when requirement is set to "Shipping country is")</param>
        /// <param name="discountLimitation">The discount limitation</param>
        /// <param name="limitationTimes">The discount limitation times (used when Limitation is set to "N Times Only" or "N Times Per Customer")</param>
        /// <param name="name">The name</param>
        /// <param name="usePercentage">A value indicating whether to use percentage</param>
        /// <param name="discountPercentage">The discount percentage</param>
        /// <param name="discountAmount">The discount amount</param>
        /// <param name="startDate">The discount start date and time</param>
        /// <param name="endDate">The discount end date and time</param>
        /// <param name="requiresCouponCode">The value indicating whether discount requires coupon code</param>
        /// <param name="couponCode">The coupon code</param>
        /// <param name="deleted">A value indicating whether the entity has been deleted</param>
        /// <returns>Discount</returns>
        public static Discount UpdateDiscount(int discountId, DiscountTypeEnum discountType,
            DiscountRequirementEnum discountRequirement, decimal requirementSpentAmount,
            int requirementBillingCountryIs, int requirementShippingCountryIs,
            DiscountLimitationEnum discountLimitation, int limitationTimes, 
            string name, bool usePercentage,
            decimal discountPercentage, decimal discountAmount,
            DateTime startDate, DateTime endDate, bool requiresCouponCode, 
            string couponCode, bool deleted)
        {
            if (startDate.CompareTo(endDate) >= 0)
                throw new NopException("Start date should be less then expiration date");

            if (requiresCouponCode && String.IsNullOrEmpty(couponCode))
            {
                throw new NopException("Discount requires coupon code. Coupon code could not be empty.");
            }

            name = CommonHelper.EnsureMaximumLength(name, 100);
            couponCode = CommonHelper.EnsureMaximumLength(couponCode, 100);

            var discount = GetDiscountById(discountId);
            if (discount == null)
                return null;

            var context = ObjectContextHelper.CurrentObjectContext;
            if (!context.IsAttached(discount))
                context.Discounts.Attach(discount);

            discount.DiscountTypeId = (int)discountType;
            discount.DiscountRequirementId = (int)discountRequirement;
            discount.RequirementSpentAmount = requirementSpentAmount;
            discount.RequirementBillingCountryIs = requirementBillingCountryIs;
            discount.RequirementShippingCountryIs = requirementShippingCountryIs;
            discount.DiscountLimitationId = (int)discountLimitation;
            discount.LimitationTimes = limitationTimes;
            discount.Name = name;
            discount.UsePercentage = usePercentage;
            discount.DiscountPercentage = discountPercentage;
            discount.DiscountAmount = discountAmount;
            discount.StartDate = startDate;
            discount.EndDate = endDate;
            discount.RequiresCouponCode = requiresCouponCode;
            discount.CouponCode = couponCode;
            discount.Deleted = deleted;
            context.SaveChanges();

            if (DiscountManager.CacheEnabled)
            {
                NopRequestCache.RemoveByPattern(DISCOUNTS_PATTERN_KEY);
            }
            return discount;
        }
Exemple #10
0
        public Discount SaveInfo()
        {
            //discou tn type
            DiscountTypeEnum discountType = (DiscountTypeEnum)int.Parse(this.ddlDiscountType.SelectedItem.Value);

            //requirements
            DiscountRequirementEnum discountRequirement = (DiscountRequirementEnum)int.Parse(this.ddlDiscountRequirement.SelectedItem.Value);

            int[] restrictedProductVariantIds = new int[0];
            if (discountRequirement == DiscountRequirementEnum.HadPurchasedAllOfTheseProductVariants || discountRequirement == DiscountRequirementEnum.HadPurchasedOneOfTheseProductVariants)
            {
                restrictedProductVariantIds = ParseListOfRestrictedProductVariants(txtRestrictedProductVariants.Text);
            }
            decimal requirementSpentAmount = txtRequirementSpentAmount.Value;

            int requirementBillingCountryIs  = int.Parse(this.ddlRequirementBillingCountryIs.SelectedItem.Value);
            int requirementShippingCountryIs = int.Parse(this.ddlRequirementShippingCountryIs.SelectedItem.Value);

            //limitation
            DiscountLimitationEnum discountLimitation = (DiscountLimitationEnum)int.Parse(this.ddlDiscountLimitation.SelectedItem.Value);
            int limitationTimes = txtLimitationTimes.Value;

            string  name               = txtName.Text.Trim();
            bool    usePercentage      = cbUsePercentage.Checked;
            decimal discountPercentage = txtDiscountPercentage.Value;
            decimal discountAmount     = txtDiscountAmount.Value;
            bool    requiresCouponCode = cbRequiresCouponCode.Checked;
            string  couponCode         = txtCouponCode.Text.Trim();

            //dates
            if (!ctrlStartDatePicker.SelectedDate.HasValue)
            {
                throw new NopException("Start date is not set");
            }
            DateTime discountStartDate = ctrlStartDatePicker.SelectedDate.Value;

            if (!ctrlEndDatePicker.SelectedDate.HasValue)
            {
                throw new NopException("End date is not set");
            }
            DateTime discountEndDate = ctrlEndDatePicker.SelectedDate.Value;

            discountStartDate = DateTime.SpecifyKind(discountStartDate, DateTimeKind.Utc);
            discountEndDate   = DateTime.SpecifyKind(discountEndDate, DateTimeKind.Utc);

            Discount discount = DiscountManager.GetDiscountById(this.DiscountId);

            if (discount != null)
            {
                discount = DiscountManager.UpdateDiscount(discount.DiscountId,
                                                          discountType,
                                                          discountRequirement,
                                                          requirementSpentAmount,
                                                          requirementBillingCountryIs,
                                                          requirementShippingCountryIs,
                                                          discountLimitation,
                                                          limitationTimes,
                                                          name,
                                                          usePercentage,
                                                          discountPercentage,
                                                          discountAmount,
                                                          discountStartDate,
                                                          discountEndDate,
                                                          requiresCouponCode,
                                                          couponCode,
                                                          discount.Deleted);

                //discount requirements
                foreach (CustomerRole customerRole in discount.CustomerRoles)
                {
                    CustomerManager.RemoveDiscountFromCustomerRole(customerRole.CustomerRoleId, discount.DiscountId);
                }
                foreach (int customerRoleId in CustomerRoleMappingControl.SelectedCustomerRoleIds)
                {
                    CustomerManager.AddDiscountToCustomerRole(customerRoleId, discount.DiscountId);
                }

                foreach (ProductVariant pv in ProductManager.GetProductVariantsRestrictedByDiscountId(discount.DiscountId))
                {
                    DiscountManager.RemoveDiscountRestriction(pv.ProductVariantId, discount.DiscountId);
                }
                foreach (int productVariantId in restrictedProductVariantIds)
                {
                    DiscountManager.AddDiscountRestriction(productVariantId, discount.DiscountId);
                }
            }
            else
            {
                discount = DiscountManager.InsertDiscount(discountType,
                                                          discountRequirement,
                                                          requirementSpentAmount,
                                                          requirementBillingCountryIs,
                                                          requirementShippingCountryIs,
                                                          discountLimitation,
                                                          limitationTimes,
                                                          name,
                                                          usePercentage,
                                                          discountPercentage,
                                                          discountAmount,
                                                          discountStartDate,
                                                          discountEndDate,
                                                          requiresCouponCode,
                                                          couponCode,
                                                          false);

                //discount requirements
                foreach (int customerRoleId in CustomerRoleMappingControl.SelectedCustomerRoleIds)
                {
                    CustomerManager.AddDiscountToCustomerRole(customerRoleId, discount.DiscountId);
                }

                foreach (int productVariantId in restrictedProductVariantIds)
                {
                    DiscountManager.AddDiscountRestriction(productVariantId, discount.DiscountId);
                }
            }

            return(discount);
        }
Exemple #11
0
        public Discount SaveInfo()
        {
            //discou tn type
            DiscountTypeEnum discountType = (DiscountTypeEnum)int.Parse(this.ddlDiscountType.SelectedItem.Value);

            //requirements
            DiscountRequirementEnum discountRequirement = (DiscountRequirementEnum)int.Parse(this.ddlDiscountRequirement.SelectedItem.Value);

            int[] restrictedProductVariantIds = new int[0];

            if (discountRequirement == DiscountRequirementEnum.HasAllOfTheseProductVariantsInTheCart ||
                discountRequirement == DiscountRequirementEnum.HasOneOfTheseProductVariantsInTheCart ||
                discountRequirement == DiscountRequirementEnum.HadPurchasedAllOfTheseProductVariants ||
                discountRequirement == DiscountRequirementEnum.HadPurchasedOneOfTheseProductVariants)
            {
                restrictedProductVariantIds = ParseListOfRestrictedProductVariants(txtRestrictedProductVariants.Text);
            }
            decimal requirementSpentAmount = txtRequirementSpentAmount.Value;

            int requirementBillingCountryIs  = int.Parse(this.ddlRequirementBillingCountryIs.SelectedItem.Value);
            int requirementShippingCountryIs = int.Parse(this.ddlRequirementShippingCountryIs.SelectedItem.Value);

            //limitation
            DiscountLimitationEnum discountLimitation = (DiscountLimitationEnum)int.Parse(this.ddlDiscountLimitation.SelectedItem.Value);
            int limitationTimes = txtLimitationTimes.Value;

            string  name               = txtName.Text.Trim();
            bool    usePercentage      = cbUsePercentage.Checked;
            decimal discountPercentage = txtDiscountPercentage.Value;
            decimal discountAmount     = txtDiscountAmount.Value;
            bool    requiresCouponCode = cbRequiresCouponCode.Checked;
            string  couponCode         = txtCouponCode.Text.Trim();

            //dates
            if (!ctrlStartDatePicker.SelectedDate.HasValue)
            {
                throw new NopException("Start date is not set");
            }
            DateTime discountStartDate = ctrlStartDatePicker.SelectedDate.Value;

            if (!ctrlEndDatePicker.SelectedDate.HasValue)
            {
                throw new NopException("End date is not set");
            }
            DateTime discountEndDate = ctrlEndDatePicker.SelectedDate.Value;

            discountStartDate = DateTime.SpecifyKind(discountStartDate, DateTimeKind.Utc);
            discountEndDate   = DateTime.SpecifyKind(discountEndDate, DateTimeKind.Utc);

            if (discountStartDate.CompareTo(discountEndDate) >= 0)
            {
                throw new NopException("Start date should be less then expiration date");
            }

            if (requiresCouponCode && String.IsNullOrEmpty(couponCode))
            {
                throw new NopException("Discount requires coupon code. Coupon code could not be empty.");
            }


            Discount discount = this.DiscountService.GetDiscountById(this.DiscountId);

            if (discount != null)
            {
                discount.DiscountTypeId               = (int)discountType;
                discount.DiscountRequirementId        = (int)discountRequirement;
                discount.RequirementSpentAmount       = requirementSpentAmount;
                discount.RequirementBillingCountryIs  = requirementBillingCountryIs;
                discount.RequirementShippingCountryIs = requirementShippingCountryIs;
                discount.DiscountLimitationId         = (int)discountLimitation;
                discount.LimitationTimes              = limitationTimes;
                discount.Name               = name;
                discount.UsePercentage      = usePercentage;
                discount.DiscountPercentage = discountPercentage;
                discount.DiscountAmount     = discountAmount;
                discount.StartDate          = discountStartDate;
                discount.EndDate            = discountEndDate;
                discount.RequiresCouponCode = requiresCouponCode;
                discount.CouponCode         = couponCode;
                this.DiscountService.UpdateDiscount(discount);

                //discount requirements
                foreach (CustomerRole customerRole in discount.CustomerRoles)
                {
                    this.CustomerService.RemoveDiscountFromCustomerRole(customerRole.CustomerRoleId, discount.DiscountId);
                }
                foreach (int customerRoleId in CustomerRoleMappingControl.SelectedCustomerRoleIds)
                {
                    this.CustomerService.AddDiscountToCustomerRole(customerRoleId, discount.DiscountId);
                }

                foreach (ProductVariant pv in this.ProductService.GetProductVariantsRestrictedByDiscountId(discount.DiscountId))
                {
                    this.DiscountService.RemoveDiscountRestriction(pv.ProductVariantId, discount.DiscountId);
                }
                foreach (int productVariantId in restrictedProductVariantIds)
                {
                    this.DiscountService.AddDiscountRestriction(productVariantId, discount.DiscountId);
                }
            }
            else
            {
                discount = new Discount()
                {
                    DiscountTypeId               = (int)discountType,
                    DiscountRequirementId        = (int)discountRequirement,
                    RequirementSpentAmount       = requirementSpentAmount,
                    RequirementBillingCountryIs  = requirementBillingCountryIs,
                    RequirementShippingCountryIs = requirementShippingCountryIs,
                    DiscountLimitationId         = (int)discountLimitation,
                    LimitationTimes              = limitationTimes,
                    Name               = name,
                    UsePercentage      = usePercentage,
                    DiscountPercentage = discountPercentage,
                    DiscountAmount     = discountAmount,
                    StartDate          = discountStartDate,
                    EndDate            = discountEndDate,
                    RequiresCouponCode = requiresCouponCode,
                    CouponCode         = couponCode
                };
                this.DiscountService.InsertDiscount(discount);

                //discount requirements
                foreach (int customerRoleId in CustomerRoleMappingControl.SelectedCustomerRoleIds)
                {
                    this.CustomerService.AddDiscountToCustomerRole(customerRoleId, discount.DiscountId);
                }

                foreach (int productVariantId in restrictedProductVariantIds)
                {
                    this.DiscountService.AddDiscountRestriction(productVariantId, discount.DiscountId);
                }
            }

            return(discount);
        }