Try your search with a different keyword or use * as a wildcard.
using Nop.Services.Customers;
using Nop.Services.Helpers;
using Nop.Services.Logging;
using Nop.Web.Areas.Admin.Infrastructure.Mapper.Extensions;
using Nop.Web.Areas.Admin.Models.Logging;
using Nop.Web.Framework.Models.Extensions;
namespace Nop.Web.Areas.Admin.Factories;
///
/// Represents the activity log model factory implementation
///
public partial class ActivityLogModelFactory : IActivityLogModelFactory
{
#region Fields
protected readonly IBaseAdminModelFactory _baseAdminModelFactory;
protected readonly ICustomerActivityService _customerActivityService;
protected readonly ICustomerService _customerService;
protected readonly IDateTimeHelper _dateTimeHelper;
#endregion
#region Ctor
public ActivityLogModelFactory(IBaseAdminModelFactory baseAdminModelFactory,
ICustomerActivityService customerActivityService,
ICustomerService customerService,
IDateTimeHelper dateTimeHelper)
{
_baseAdminModelFactory = baseAdminModelFactory;
_customerActivityService = customerActivityService;
_customerService = customerService;
_dateTimeHelper = dateTimeHelper;
}
#endregion
#region Utilities
///
/// Prepare activity log type models
///
///
/// A task that represents the asynchronous operation
/// The task result contains the list of activity log type models
///
protected virtual async Task> PrepareActivityLogTypeModelsAsync()
{
//prepare available activity log types
var availableActivityTypes = await _customerActivityService.GetAllActivityTypesAsync();
var models = availableActivityTypes.Select(activityType => activityType.ToModel()).ToList();
return models;
}
#endregion
#region Methods
///
/// Prepare activity log types search model
///
/// Activity log types search model
///
/// A task that represents the asynchronous operation
/// The task result contains the activity log types search model
///
public virtual async Task PrepareActivityLogTypeSearchModelAsync(ActivityLogTypeSearchModel searchModel)
{
ArgumentNullException.ThrowIfNull(searchModel);
searchModel.ActivityLogTypeListModel = await PrepareActivityLogTypeModelsAsync();
//prepare grid
searchModel.SetGridPageSize();
return searchModel;
}
///
/// Prepare activity log search model
///
/// Activity log search model
///
/// A task that represents the asynchronous operation
/// The task result contains the activity log search model
///
public virtual async Task PrepareActivityLogSearchModelAsync(ActivityLogSearchModel searchModel)
{
ArgumentNullException.ThrowIfNull(searchModel);
//prepare available activity log types
await _baseAdminModelFactory.PrepareActivityLogTypesAsync(searchModel.ActivityLogType);
//prepare grid
searchModel.SetGridPageSize();
return searchModel;
}
///
/// Prepare paged activity log list model
///
/// Activity log search model
///
/// A task that represents the asynchronous operation
/// The task result contains the activity log list model
///
public virtual async Task PrepareActivityLogListModelAsync(ActivityLogSearchModel searchModel)
{
ArgumentNullException.ThrowIfNull(searchModel);
//get parameters to filter log
var startDateValue = searchModel.CreatedOnFrom == null ? null
: (DateTime?)_dateTimeHelper.ConvertToUtcTime(searchModel.CreatedOnFrom.Value, await _dateTimeHelper.GetCurrentTimeZoneAsync());
var endDateValue = searchModel.CreatedOnTo == null ? null
: (DateTime?)_dateTimeHelper.ConvertToUtcTime(searchModel.CreatedOnTo.Value, await _dateTimeHelper.GetCurrentTimeZoneAsync()).AddDays(1);
//get log
var activityLog = await _customerActivityService.GetAllActivitiesAsync(createdOnFrom: startDateValue,
createdOnTo: endDateValue,
activityLogTypeId: searchModel.ActivityLogTypeId,
ipAddress: searchModel.IpAddress,
pageIndex: searchModel.Page - 1, pageSize: searchModel.PageSize);
if (activityLog is null)
return new ActivityLogListModel();
//prepare list model
var customerIds = activityLog.GroupBy(logItem => logItem.CustomerId).Select(logItem => logItem.Key);
var activityLogCustomers = await _customerService.GetCustomersByIdsAsync(customerIds.ToArray());
var model = await new ActivityLogListModel().PrepareToGridAsync(searchModel, activityLog, () =>
{
return activityLog.SelectAwait(async logItem =>
{
//fill in model values from the entity
var logItemModel = logItem.ToModel();
logItemModel.ActivityLogTypeName = (await _customerActivityService.GetActivityTypeByIdAsync(logItem.ActivityLogTypeId))?.Name;
logItemModel.CustomerEmail = activityLogCustomers?.FirstOrDefault(x => x.Id == logItem.CustomerId)?.Email;
//convert dates to the user time
logItemModel.CreatedOn = await _dateTimeHelper.ConvertToUserTimeAsync(logItem.CreatedOnUtc, DateTimeKind.Utc);
return logItemModel;
});
});
return model;
}
#endregion
}