public DiscountRequirementsPlugin(
     ILocalizationService localizationService,
     ILanguageService languageService,
     CustomerRoleDiscountRequirementRule customerRoleDiscountRequirementRule,
     HadSpentAmountDiscountRequirementRule hadSpentAmountDiscountRequirementRule,
     HasAllProductsDiscountRequirementRule hasAllProductsDiscountRequirementRule,
     HasOneProductDiscountRequirementRule hasOneProductDiscountRequirementRule,
     ShoppingCartDiscountRequirementRule shoppingCartDiscountRequirementRule)
 {
     _localizationService = localizationService;
     _languageService     = languageService;
     _customerRoleDiscountRequirementRule   = customerRoleDiscountRequirementRule;
     _hadSpentAmountDiscountRequirementRule = hadSpentAmountDiscountRequirementRule;
     _hasAllProductsDiscountRequirementRule = hasAllProductsDiscountRequirementRule;
     _hasOneProductDiscountRequirementRule  = hasOneProductDiscountRequirementRule;
     _shoppingCartDiscountRequirementRule   = shoppingCartDiscountRequirementRule;
 }
        public ActionResult Configure(int discountId, int?discountRequirementId)
        {
            var discount = _discountService.GetDiscountById(discountId);

            if (discount == null)
            {
                throw new ArgumentException("Discount could not be loaded");
            }

            DiscountRequirement discountRequirement = null;

            if (discountRequirementId.HasValue)
            {
                discountRequirement = discount.DiscountRequirements.Where(dr => dr.Id == discountRequirementId.Value).FirstOrDefault();
                if (discountRequirement == null)
                {
                    return(Content("Failed to load requirement."));
                }
            }

            // parse settings from ExtraData
            string extraData = null;

            if (discountRequirement != null)
            {
                extraData = discountRequirement.ExtraData;
            }
            var settings = HadSpentAmountDiscountRequirementRule.DeserializeSettings(extraData);

            var model = new RequirementModel();

            model.RequirementId = discountRequirementId.HasValue ? discountRequirementId.Value : 0;
            model.DiscountId    = discountId;
            model.SpentAmount   = discountRequirement != null ? discountRequirement.SpentAmount : decimal.Zero;
            model.LimitToCurrentBasketSubTotal    = settings.LimitToCurrentBasketSubTotal;
            model.BasketSubTotalIncludesDiscounts = settings.BasketSubTotalIncludesDiscounts;

            //add a prefix
            ViewData.TemplateInfo.HtmlFieldPrefix = string.Format("DiscountRulesHadSpentAmount{0}", discountRequirementId.HasValue ? discountRequirementId.Value.ToString() : "0");

            return(View("SmartStore.Plugin.DiscountRules.HadSpentAmount.Views.DiscountRulesHadSpentAmount.Configure", model));
        }