Try your search with a different keyword or use * as a wildcard.
using FluentValidation;
using Nop.Core.Domain.Customers;
using Nop.Services.Customers;
using Nop.Services.Directory;
using Nop.Services.Localization;
using Nop.Web.Areas.Admin.Models.Customers;
using Nop.Web.Framework.Validators;
namespace Nop.Web.Areas.Admin.Validators.Customers;
public partial class CustomerValidator : BaseNopValidator
{
public CustomerValidator(CustomerSettings customerSettings,
ICustomerService customerService,
ILocalizationService localizationService,
IStateProvinceService stateProvinceService)
{
//ensure that valid email address is entered if Registered role is checked to avoid registered customers with empty email address
RuleFor(x => x.Email)
.NotEmpty()
.IsEmailAddress()
//.WithMessage("Valid Email is required for customer to be in 'Registered' role")
.WithMessageAwait(localizationService.GetResourceAsync("Admin.Common.WrongEmail"))
//only for registered users
.WhenAwait(async x => await IsRegisteredCustomerRoleCheckedAsync(x, customerService));
//form fields
if (customerSettings.CountryEnabled && customerSettings.CountryRequired)
{
RuleFor(x => x.CountryId)
.NotEqual(0)
.WithMessageAwait(localizationService.GetResourceAsync("Account.Fields.Country.Required"))
//only for registered users
.WhenAwait(async x => await IsRegisteredCustomerRoleCheckedAsync(x, customerService));
}
if (customerSettings.CountryEnabled &&
customerSettings.StateProvinceEnabled &&
customerSettings.StateProvinceRequired)
{
RuleFor(x => x.StateProvinceId).MustAwait(async (x, context) =>
{
//does selected country have states?
var hasStates = (await stateProvinceService.GetStateProvincesByCountryIdAsync(x.CountryId)).Any();
if (hasStates)
{
//if yes, then ensure that a state is selected
if (x.StateProvinceId == 0)
return false;
}
return true;
}).WithMessageAwait(localizationService.GetResourceAsync("Account.Fields.StateProvince.Required"));
}
if (customerSettings.CompanyRequired && customerSettings.CompanyEnabled)
{
RuleFor(x => x.Company)
.NotEmpty()
.WithMessageAwait(localizationService.GetResourceAsync("Admin.Customers.Customers.Fields.Company.Required"))
//only for registered users
.WhenAwait(async x => await IsRegisteredCustomerRoleCheckedAsync(x, customerService));
}
if (customerSettings.StreetAddressRequired && customerSettings.StreetAddressEnabled)
{
RuleFor(x => x.StreetAddress)
.NotEmpty()
.WithMessageAwait(localizationService.GetResourceAsync("Admin.Customers.Customers.Fields.StreetAddress.Required"))
//only for registered users
.WhenAwait(async x => await IsRegisteredCustomerRoleCheckedAsync(x, customerService));
}
if (customerSettings.StreetAddress2Required && customerSettings.StreetAddress2Enabled)
{
RuleFor(x => x.StreetAddress2)
.NotEmpty()
.WithMessageAwait(localizationService.GetResourceAsync("Admin.Customers.Customers.Fields.StreetAddress2.Required"))
//only for registered users
.WhenAwait(async x => await IsRegisteredCustomerRoleCheckedAsync(x, customerService));
}
if (customerSettings.ZipPostalCodeRequired && customerSettings.ZipPostalCodeEnabled)
{
RuleFor(x => x.ZipPostalCode)
.NotEmpty()
.WithMessageAwait(localizationService.GetResourceAsync("Admin.Customers.Customers.Fields.ZipPostalCode.Required"))
//only for registered users
.WhenAwait(async x => await IsRegisteredCustomerRoleCheckedAsync(x, customerService));
}
if (customerSettings.CityRequired && customerSettings.CityEnabled)
{
RuleFor(x => x.City)
.NotEmpty()
.WithMessageAwait(localizationService.GetResourceAsync("Admin.Customers.Customers.Fields.City.Required"))
//only for registered users
.WhenAwait(async x => await IsRegisteredCustomerRoleCheckedAsync(x, customerService));
}
if (customerSettings.CountyRequired && customerSettings.CountyEnabled)
{
RuleFor(x => x.County)
.NotEmpty()
.WithMessageAwait(localizationService.GetResourceAsync("Admin.Customers.Customers.Fields.County.Required"))
//only for registered users
.WhenAwait(async x => await IsRegisteredCustomerRoleCheckedAsync(x, customerService));
}
if (customerSettings.PhoneRequired && customerSettings.PhoneEnabled)
{
RuleFor(x => x.Phone)
.NotEmpty()
.WithMessageAwait(localizationService.GetResourceAsync("Admin.Customers.Customers.Fields.Phone.Required"))
//only for registered users
.WhenAwait(async x => await IsRegisteredCustomerRoleCheckedAsync(x, customerService));
}
if (customerSettings.FaxRequired && customerSettings.FaxEnabled)
{
RuleFor(x => x.Fax)
.NotEmpty()
.WithMessageAwait(localizationService.GetResourceAsync("Admin.Customers.Customers.Fields.Fax.Required"))
//only for registered users
.WhenAwait(async x => await IsRegisteredCustomerRoleCheckedAsync(x, customerService));
}
SetDatabaseValidationRules();
}
protected virtual async Task IsRegisteredCustomerRoleCheckedAsync(CustomerModel model, ICustomerService customerService)
{
var allCustomerRoles = await customerService.GetAllCustomerRolesAsync(true);
var newCustomerRoles = new List();
foreach (var customerRole in allCustomerRoles)
if (model.SelectedCustomerRoleIds.Contains(customerRole.Id))
newCustomerRoles.Add(customerRole);
var isInRegisteredRole = newCustomerRoles.FirstOrDefault(cr => cr.SystemName == NopCustomerDefaults.RegisteredRoleName) != null;
return isInRegisteredRole;
}
}