public ActionResult Configure(int discountId, int? discountRequirementId, decimal spentAmount, string settings)
        {
            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)
            {
                //update existing rule
                discountRequirement.SpentAmount = spentAmount;
                discountRequirement.ExtraData = settings;

                _discountService.UpdateDiscount(discount);
            }
            else
            {
                //save new rule
                discountRequirement = new DiscountRequirement()
                {
                    DiscountRequirementRuleSystemName = "DiscountRequirement.HadSpentAmount",
                    ExtraData = settings,
                    SpentAmount = spentAmount
                };
                discount.DiscountRequirements.Add(discountRequirement);
                _discountService.UpdateDiscount(discount);
            }
            return Json(new { Result = true, NewRequirementId = discountRequirement.Id }, JsonRequestBehavior.AllowGet);
        }
		public ActionResult Configure(int discountId, int? discountRequirementId, int storeId)
        {
			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)
			{
				discountRequirement.RestrictedToStoreId = storeId;
				_discountService.UpdateDiscount(discount);
			}
			else
			{
				//save new rule
				discountRequirement = new DiscountRequirement()
				{
					DiscountRequirementRuleSystemName = "DiscountRequirement.Store",
					RestrictedToStoreId = storeId
				};
				discount.DiscountRequirements.Add(discountRequirement);
				_discountService.UpdateDiscount(discount);
			}
			return Json(new { Result = true, NewRequirementId = discountRequirement.Id }, JsonRequestBehavior.AllowGet);
		}
        public void Can_save_and_load_discountRequirement()
        {
            var discountRequirement = new DiscountRequirement
            {
                DiscountRequirementRuleSystemName = "BillingCountryIs",
                SpentAmount = 1.1M,
                BillingCountryId = 2,
                ShippingCountryId =3,
                Discount = GetTestDiscount()
            };

            var fromDb = SaveAndLoadEntity(discountRequirement);
            fromDb.ShouldNotBeNull();
            fromDb.DiscountRequirementRuleSystemName.ShouldEqual("BillingCountryIs");
            fromDb.SpentAmount.ShouldEqual(1.1M);
            fromDb.BillingCountryId.ShouldEqual(2);
            fromDb.ShippingCountryId.ShouldEqual(3);


            fromDb.Discount.ShouldNotBeNull();
            fromDb.Discount.Name.ShouldEqual("Discount 1");
        }
        /// <summary>
        /// Delete discount requirement
        /// </summary>
        /// <param name="discountRequirement">Discount requirement</param>
        public virtual void DeleteDiscountRequirement(DiscountRequirement discountRequirement)
        {
            if (discountRequirement == null)
                throw new ArgumentNullException("discountRequirement");

            _discountRequirementRepository.Delete(discountRequirement);

            _cacheManager.RemoveByPattern(DISCOUNTS_PATTERN_KEY);

            //event notification
            _eventPublisher.EntityDeleted(discountRequirement);
        }