Try your search with a different keyword or use * as a wildcard.
using Microsoft.AspNetCore.Mvc.Rendering;
using Nop.Core.Domain.Catalog;
using Nop.Services.Helpers;
using Nop.Services.Localization;
using Nop.Services.Messages;
using Nop.Services.Stores;
using Nop.Web.Areas.Admin.Infrastructure.Mapper.Extensions;
using Nop.Web.Areas.Admin.Models.Messages;
using Nop.Web.Framework.Extensions;
using Nop.Web.Framework.Models.Extensions;
namespace Nop.Web.Areas.Admin.Factories;
///
/// Represents the newsletter subscription model factory implementation
///
public partial class NewsletterSubscriptionModelFactory : INewsletterSubscriptionModelFactory
{
#region Fields
protected readonly CatalogSettings _catalogSettings;
protected readonly IBaseAdminModelFactory _baseAdminModelFactory;
protected readonly IDateTimeHelper _dateTimeHelper;
protected readonly ILanguageService _languageService;
protected readonly ILocalizationService _localizationService;
protected readonly INewsLetterSubscriptionService _newsLetterSubscriptionService;
protected readonly IStoreService _storeService;
#endregion
#region Ctor
public NewsletterSubscriptionModelFactory(CatalogSettings catalogSettings,
IBaseAdminModelFactory baseAdminModelFactory,
IDateTimeHelper dateTimeHelper,
ILanguageService languageService,
ILocalizationService localizationService,
INewsLetterSubscriptionService newsLetterSubscriptionService,
IStoreService storeService)
{
_catalogSettings = catalogSettings;
_baseAdminModelFactory = baseAdminModelFactory;
_dateTimeHelper = dateTimeHelper;
_languageService = languageService;
_localizationService = localizationService;
_newsLetterSubscriptionService = newsLetterSubscriptionService;
_storeService = storeService;
}
#endregion
#region Methods
///
/// Prepare newsletter subscription search model
///
/// Newsletter subscription search model
///
/// A task that represents the asynchronous operation
/// The task result contains the newsletter subscription search model
///
public virtual async Task PrepareNewsletterSubscriptionSearchModelAsync(NewsletterSubscriptionSearchModel searchModel)
{
ArgumentNullException.ThrowIfNull(searchModel);
//prepare available stores
await _baseAdminModelFactory.PrepareStoresAsync(searchModel.AvailableStores);
//prepare available customer roles
await _baseAdminModelFactory.PrepareCustomerRolesAsync(searchModel.AvailableCustomerRoles);
//prepare "activated" filter (0 - all; 1 - activated only; 2 - deactivated only)
searchModel.ActiveList.Add(new SelectListItem
{
Value = "0",
Text = await _localizationService.GetResourceAsync("Admin.Promotions.NewsLetterSubscriptions.List.SearchActive.All")
});
searchModel.ActiveList.Add(new SelectListItem
{
Value = "1",
Text = await _localizationService.GetResourceAsync("Admin.Promotions.NewsLetterSubscriptions.List.SearchActive.ActiveOnly")
});
searchModel.ActiveList.Add(new SelectListItem
{
Value = "2",
Text = await _localizationService.GetResourceAsync("Admin.Promotions.NewsLetterSubscriptions.List.SearchActive.NotActiveOnly")
});
searchModel.HideStoresList = _catalogSettings.IgnoreStoreLimitations || searchModel.AvailableStores.SelectionIsNotPossible();
//prepare page parameters
searchModel.SetGridPageSize();
return searchModel;
}
///
/// Prepare paged newsletter subscription list model
///
/// Newsletter subscription search model
///
/// A task that represents the asynchronous operation
/// The task result contains the newsletter subscription list model
///
public virtual async Task PrepareNewsletterSubscriptionListModelAsync(NewsletterSubscriptionSearchModel searchModel)
{
ArgumentNullException.ThrowIfNull(searchModel);
//get parameters to filter newsletter subscriptions
var isActivatedOnly = searchModel.ActiveId == 0 ? null : searchModel.ActiveId == 1 ? true : (bool?)false;
var startDateValue = !searchModel.StartDate.HasValue ? null
: (DateTime?)_dateTimeHelper.ConvertToUtcTime(searchModel.StartDate.Value, await _dateTimeHelper.GetCurrentTimeZoneAsync());
var endDateValue = !searchModel.EndDate.HasValue ? null
: (DateTime?)_dateTimeHelper.ConvertToUtcTime(searchModel.EndDate.Value, await _dateTimeHelper.GetCurrentTimeZoneAsync()).AddDays(1);
//get newsletter subscriptions
var newsletterSubscriptions = await _newsLetterSubscriptionService.GetAllNewsLetterSubscriptionsAsync(email: searchModel.SearchEmail,
customerRoleId: searchModel.CustomerRoleId,
storeId: searchModel.StoreId,
isActive: isActivatedOnly,
createdFromUtc: startDateValue,
createdToUtc: endDateValue,
pageIndex: searchModel.Page - 1, pageSize: searchModel.PageSize);
//prepare list model
var model = await new NewsletterSubscriptionListModel().PrepareToGridAsync(searchModel, newsletterSubscriptions, () =>
{
return newsletterSubscriptions.SelectAwait(async subscription =>
{
//fill in model values from the entity
var subscriptionModel = subscription.ToModel();
//convert dates to the user time
subscriptionModel.CreatedOn = (await _dateTimeHelper.ConvertToUserTimeAsync(subscription.CreatedOnUtc, DateTimeKind.Utc)).ToString();
//fill in additional values (not existing in the entity)
subscriptionModel.StoreName = (await _storeService.GetStoreByIdAsync(subscription.StoreId))?.Name ?? "Deleted";
subscriptionModel.LanguageName = (await _languageService.GetLanguageByIdAsync(subscription.LanguageId))?.Name ?? string.Empty;
return subscriptionModel;
});
});
return model;
}
#endregion
}