using Nop.Services.Common; using Nop.Services.Helpers; using Nop.Services.ScheduleTasks; using Nop.Web.Areas.Admin.Infrastructure.Mapper.Extensions; using Nop.Web.Areas.Admin.Models.Tasks; using Nop.Web.Framework.Models.Extensions; using Task = System.Threading.Tasks.Task; namespace Nop.Web.Areas.Admin.Factories; /// /// Represents the schedule task model factory implementation /// public partial class ScheduleTaskModelFactory : IScheduleTaskModelFactory { #region Fields protected readonly IDateTimeHelper _dateTimeHelper; protected readonly IScheduleTaskService _scheduleTaskService; #endregion #region Ctor public ScheduleTaskModelFactory(IDateTimeHelper dateTimeHelper, IScheduleTaskService scheduleTaskService) { _dateTimeHelper = dateTimeHelper; _scheduleTaskService = scheduleTaskService; } #endregion #region Methods /// /// Prepare schedule task search model /// /// Schedule task search model /// /// A task that represents the asynchronous operation /// The task result contains the schedule task search model /// public virtual Task PrepareScheduleTaskSearchModelAsync(ScheduleTaskSearchModel searchModel) { ArgumentNullException.ThrowIfNull(searchModel); //prepare page parameters searchModel.SetGridPageSize(); return Task.FromResult(searchModel); } /// /// Prepare paged schedule task list model /// /// Schedule task search model /// /// A task that represents the asynchronous operation /// The task result contains the schedule task list model /// public virtual async Task PrepareScheduleTaskListModelAsync(ScheduleTaskSearchModel searchModel) { ArgumentNullException.ThrowIfNull(searchModel); //get schedule tasks var scheduleTasks = (await _scheduleTaskService.GetAllTasksAsync(true)) .Where(task => !string.Equals(task.Name, nameof(ResetLicenseCheckTask), StringComparison.InvariantCultureIgnoreCase)) .ToList() .ToPagedList(searchModel); //prepare list model var model = await new ScheduleTaskListModel().PrepareToGridAsync(searchModel, scheduleTasks, () => { return scheduleTasks.SelectAwait(async scheduleTask => { //fill in model values from the entity var scheduleTaskModel = scheduleTask.ToModel(); //convert dates to the user time if (scheduleTask.LastStartUtc.HasValue) { scheduleTaskModel.LastStartUtc = (await _dateTimeHelper .ConvertToUserTimeAsync(scheduleTask.LastStartUtc.Value, DateTimeKind.Utc)).ToString("G"); } if (scheduleTask.LastEndUtc.HasValue) { scheduleTaskModel.LastEndUtc = (await _dateTimeHelper .ConvertToUserTimeAsync(scheduleTask.LastEndUtc.Value, DateTimeKind.Utc)).ToString("G"); } if (scheduleTask.LastSuccessUtc.HasValue) { scheduleTaskModel.LastSuccessUtc = (await _dateTimeHelper .ConvertToUserTimeAsync(scheduleTask.LastSuccessUtc.Value, DateTimeKind.Utc)).ToString("G"); } return scheduleTaskModel; }); }); return model; } #endregion }