Try your search with a different keyword or use * as a wildcard.
using Nop.Core;
using Nop.Services.Configuration;
using Nop.Services.Customers;
using Nop.Services.Discounts;
using Nop.Services.Localization;
using Nop.Services.Plugins;
using Nop.Web.Framework.Mvc.Routing;
namespace Nop.Plugin.DiscountRules.CustomerRoles;
public class CustomerRoleDiscountRequirementRule : BasePlugin, IDiscountRequirementRule
{
#region Fields
protected readonly ICustomerService _customerService;
protected readonly IDiscountService _discountService;
protected readonly ILocalizationService _localizationService;
protected readonly INopUrlHelper _nopUrlHelper;
protected readonly ISettingService _settingService;
protected readonly IWebHelper _webHelper;
#endregion
#region Ctor
public CustomerRoleDiscountRequirementRule(IDiscountService discountService,
ICustomerService customerService,
ILocalizationService localizationService,
INopUrlHelper nopUrlHelper,
ISettingService settingService,
IWebHelper webHelper)
{
_customerService = customerService;
_discountService = discountService;
_localizationService = localizationService;
_nopUrlHelper = nopUrlHelper;
_settingService = settingService;
_webHelper = webHelper;
}
#endregion
#region Methods
/// <summary>
/// Check discount requirement
/// </summary>
/// <param name="request">Object that contains all information required to check the requirement (Current customer, discount, etc)</param>
/// <returns>
/// A task that represents the asynchronous operation
/// The task result contains the result
/// </returns>
public async Task<DiscountRequirementValidationResult> CheckRequirementAsync(DiscountRequirementValidationRequest request)
{
ArgumentNullException.ThrowIfNull(request);
//invalid by default
var result = new DiscountRequirementValidationResult();
if (request.Customer == null)
return result;
//try to get saved restricted customer role identifier
var restrictedRoleId = await _settingService.GetSettingByKeyAsync<int>(string.Format(DiscountRequirementDefaults.SettingsKey, request.DiscountRequirementId));
if (restrictedRoleId == 0)
return result;
//result is valid if the customer belongs to the restricted role
result.IsValid = (await _customerService.GetCustomerRolesAsync(request.Customer)).Any(role => role.Id == restrictedRoleId);
return result;
}
/// <summary>
/// Get URL for rule configuration
/// </summary>
/// <param name="discountId">Discount identifier</param>
/// <param name="discountRequirementId">Discount requirement identifier (if editing)</param>
/// <returns>URL</returns>
public string GetConfigurationUrl(int discountId, int? discountRequirementId)
{
return _nopUrlHelper.RouteUrl(DiscountRequirementDefaults.ConfigurationRouteName,
new { discountId = discountId, discountRequirementId = discountRequirementId }, _webHelper.GetCurrentRequestProtocol());
}
/// <summary>
/// Install the plugin
/// </summary>
/// <returns>A task that represents the asynchronous operation</returns>
public override async Task InstallAsync()
{
//locales
await _localizationService.AddOrUpdateLocaleResourceAsync(new Dictionary<string, string>
{
["Plugins.DiscountRules.CustomerRoles.Fields.CustomerRole"] = "Required customer role",
["Plugins.DiscountRules.CustomerRoles.Fields.CustomerRole.Hint"] = "Discount will be applied if customer is in the selected customer role.",
["Plugins.DiscountRules.CustomerRoles.Fields.CustomerRole.Select"] = "Select customer role",
["Plugins.DiscountRules.CustomerRoles.Fields.CustomerRoleId.Required"] = "Customer role is required",
["Plugins.DiscountRules.CustomerRoles.Fields.DiscountId.Required"] = "Discount is required"
});
await base.InstallAsync();
}
/// <summary>
/// Uninstall the plugin
/// </summary>
/// <returns>A task that represents the asynchronous operation</returns>
public override async Task UninstallAsync()
{
//discount requirements
var discountRequirements = (await _discountService.GetAllDiscountRequirementsAsync())
.Where(discountRequirement => discountRequirement.DiscountRequirementRuleSystemName == DiscountRequirementDefaults.SystemName);
foreach (var discountRequirement in discountRequirements)
{
await _discountService.DeleteDiscountRequirementAsync(discountRequirement, false);
}
//locales
await _localizationService.DeleteLocaleResourcesAsync("Plugins.DiscountRules.CustomerRoles");
await base.UninstallAsync();
}
#endregion
}