Try your search with a different keyword or use * as a wildcard.
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.AspNetCore.Mvc.Rendering;
using Nop.Core.Domain.Discounts;
using Nop.Plugin.DiscountRules.CustomerRoles.Models;
using Nop.Services.Configuration;
using Nop.Services.Customers;
using Nop.Services.Discounts;
using Nop.Services.Localization;
using Nop.Services.Security;
using Nop.Web.Framework;
using Nop.Web.Framework.Controllers;
using Nop.Web.Framework.Mvc.Filters;
namespace Nop.Plugin.DiscountRules.CustomerRoles.Controllers;
[AuthorizeAdmin]
[Area(AreaNames.ADMIN)]
[AutoValidateAntiforgeryToken]
public class DiscountRulesCustomerRolesController : BasePluginController
{
#region Fields
protected readonly ICustomerService _customerService;
protected readonly IDiscountService _discountService;
protected readonly ILocalizationService _localizationService;
protected readonly IPermissionService _permissionService;
protected readonly ISettingService _settingService;
#endregion
#region Ctor
public DiscountRulesCustomerRolesController(ICustomerService customerService,
IDiscountService discountService,
ILocalizationService localizationService,
IPermissionService permissionService,
ISettingService settingService)
{
_customerService = customerService;
_discountService = discountService;
_localizationService = localizationService;
_permissionService = permissionService;
_settingService = settingService;
}
#endregion
#region Utilities
///
/// Get errors message from model state
///
/// Model state
/// Errors message
protected IEnumerable GetErrorsFromModelState(ModelStateDictionary modelState)
{
return ModelState.Values.SelectMany(v => v.Errors.Select(e => e.ErrorMessage));
}
#endregion
#region Methods
public async Task Configure(int discountId, int? discountRequirementId)
{
if (!await _permissionService.AuthorizeAsync(StandardPermissionProvider.ManageDiscounts))
return Content("Access denied");
//load the discount
var discount = await _discountService.GetDiscountByIdAsync(discountId)
?? throw new ArgumentException("Discount could not be loaded");
//check whether the discount requirement exists
if (discountRequirementId.HasValue && await _discountService.GetDiscountRequirementByIdAsync(discountRequirementId.Value) is null)
return Content("Failed to load requirement.");
//try to get previously saved restricted customer role identifier
var restrictedRoleId = await _settingService.GetSettingByKeyAsync(string.Format(DiscountRequirementDefaults.SettingsKey, discountRequirementId ?? 0));
var model = new RequirementModel
{
RequirementId = discountRequirementId ?? 0,
DiscountId = discountId,
CustomerRoleId = restrictedRoleId,
//set available customer roles
AvailableCustomerRoles = (await _customerService.GetAllCustomerRolesAsync(true)).Select(role => new SelectListItem
{
Text = role.Name,
Value = role.Id.ToString(),
Selected = role.Id == restrictedRoleId
}).ToList()
};
model.AvailableCustomerRoles.Insert(0, new SelectListItem
{
Text = await _localizationService.GetResourceAsync("Plugins.DiscountRules.CustomerRoles.Fields.CustomerRole.Select"),
Value = "0"
});
//set the HTML field prefix
ViewData.TemplateInfo.HtmlFieldPrefix = string.Format(DiscountRequirementDefaults.HtmlFieldPrefix, discountRequirementId ?? 0);
return View("~/Plugins/DiscountRules.CustomerRoles/Views/Configure.cshtml", model);
}
[HttpPost]
public async Task Configure(RequirementModel model)
{
if (!await _permissionService.AuthorizeAsync(StandardPermissionProvider.ManageDiscounts))
return Content("Access denied");
if (ModelState.IsValid)
{
//load the discount
var discount = await _discountService.GetDiscountByIdAsync(model.DiscountId);
if (discount == null)
return NotFound(new { Errors = new[] { "Discount could not be loaded" } });
//get the discount requirement
var discountRequirement = await _discountService.GetDiscountRequirementByIdAsync(model.RequirementId);
//the discount requirement does not exist, so create a new one
if (discountRequirement == null)
{
discountRequirement = new DiscountRequirement
{
DiscountId = discount.Id,
DiscountRequirementRuleSystemName = DiscountRequirementDefaults.SystemName
};
await _discountService.InsertDiscountRequirementAsync(discountRequirement);
}
//save restricted customer role identifier
await _settingService.SetSettingAsync(string.Format(DiscountRequirementDefaults.SettingsKey, discountRequirement.Id), model.CustomerRoleId);
return Ok(new { NewRequirementId = discountRequirement.Id });
}
return Ok(new { Errors = GetErrorsFromModelState(ModelState) });
}
#endregion
}