Try your search with a different keyword or use * as a wildcard.
using System.Globalization;
using Nop.Core;
using Nop.Core.Domain.Orders;
using Nop.Services.Customers;
using Nop.Services.Helpers;
using Nop.Services.Localization;
using Nop.Services.Orders;
using Nop.Services.Payments;
using Nop.Web.Areas.Admin.Infrastructure.Mapper.Extensions;
using Nop.Web.Areas.Admin.Models.Orders;
using Nop.Web.Framework.Models.Extensions;
namespace Nop.Web.Areas.Admin.Factories;
///
/// Represents the recurring payment model factory implementation
///
public partial class RecurringPaymentModelFactory : IRecurringPaymentModelFactory
{
#region Fields
protected readonly IDateTimeHelper _dateTimeHelper;
protected readonly ICustomerService _customerService;
protected readonly ILocalizationService _localizationService;
protected readonly IOrderProcessingService _orderProcessingService;
protected readonly IOrderService _orderService;
protected readonly IPaymentService _paymentService;
protected readonly IWorkContext _workContext;
#endregion
#region Ctor
public RecurringPaymentModelFactory(IDateTimeHelper dateTimeHelper,
ICustomerService customerService,
ILocalizationService localizationService,
IOrderProcessingService orderProcessingService,
IOrderService orderService,
IPaymentService paymentService,
IWorkContext workContext)
{
_dateTimeHelper = dateTimeHelper;
_customerService = customerService;
_localizationService = localizationService;
_orderProcessingService = orderProcessingService;
_orderService = orderService;
_paymentService = paymentService;
_workContext = workContext;
}
#endregion
#region Utilities
///
/// Prepare recurring payment history search model
///
/// Recurring payment history search model
/// Recurring payment
/// Recurring payment history search model
protected virtual RecurringPaymentHistorySearchModel PrepareRecurringPaymentHistorySearchModel(RecurringPaymentHistorySearchModel searchModel,
RecurringPayment recurringPayment)
{
ArgumentNullException.ThrowIfNull(searchModel);
ArgumentNullException.ThrowIfNull(recurringPayment);
searchModel.RecurringPaymentId = recurringPayment.Id;
//prepare page parameters
searchModel.SetGridPageSize();
return searchModel;
}
#endregion
#region Methods
///
/// Prepare recurring payment search model
///
/// Recurring payment search model
///
/// A task that represents the asynchronous operation
/// The task result contains the recurring payment search model
///
public virtual Task PrepareRecurringPaymentSearchModelAsync(RecurringPaymentSearchModel searchModel)
{
ArgumentNullException.ThrowIfNull(searchModel);
//prepare page parameters
searchModel.SetGridPageSize();
return Task.FromResult(searchModel);
}
///
/// Prepare paged recurring payment list model
///
/// Recurring payment search model
///
/// A task that represents the asynchronous operation
/// The task result contains the recurring payment list model
///
public virtual async Task PrepareRecurringPaymentListModelAsync(RecurringPaymentSearchModel searchModel)
{
ArgumentNullException.ThrowIfNull(searchModel);
//get recurringPayments
var recurringPayments = await _orderService.SearchRecurringPaymentsAsync(showHidden: true,
pageIndex: searchModel.Page - 1, pageSize: searchModel.PageSize);
//prepare list model
var model = await new RecurringPaymentListModel().PrepareToGridAsync(searchModel, recurringPayments, () =>
{
return recurringPayments.SelectAwait(async recurringPayment =>
{
//fill in model values from the entity
var recurringPaymentModel = recurringPayment.ToModel();
var order = await _orderService.GetOrderByIdAsync(recurringPayment.InitialOrderId);
var customer = await _customerService.GetCustomerByIdAsync(order.CustomerId);
//convert dates to the user time
if ((await _orderProcessingService.GetNextPaymentDateAsync(recurringPayment)) is DateTime nextPaymentDate)
{
recurringPaymentModel.NextPaymentDate = (await _dateTimeHelper
.ConvertToUserTimeAsync(nextPaymentDate, DateTimeKind.Utc)).ToString(CultureInfo.InvariantCulture);
recurringPaymentModel.CyclesRemaining = await _orderProcessingService.GetCyclesRemainingAsync(recurringPayment);
}
recurringPaymentModel.StartDate = (await _dateTimeHelper
.ConvertToUserTimeAsync(recurringPayment.StartDateUtc, DateTimeKind.Utc)).ToString(CultureInfo.InvariantCulture);
//fill in additional values (not existing in the entity)
recurringPaymentModel.CustomerId = customer.Id;
recurringPaymentModel.InitialOrderId = order.Id;
recurringPaymentModel.CyclePeriodStr = await _localizationService.GetLocalizedEnumAsync(recurringPayment.CyclePeriod);
recurringPaymentModel.CustomerEmail = (await _customerService.IsRegisteredAsync(customer))
? customer.Email
: await _localizationService.GetResourceAsync("Admin.Customers.Guest");
return recurringPaymentModel;
});
});
return model;
}
///
/// Prepare recurring payment model
///
/// Recurring payment model
/// Recurring payment
/// Whether to exclude populating of some properties of model
///
/// A task that represents the asynchronous operation
/// The task result contains the recurring payment model
///
public virtual async Task PrepareRecurringPaymentModelAsync(RecurringPaymentModel model,
RecurringPayment recurringPayment, bool excludeProperties = false)
{
if (recurringPayment == null)
return model;
//fill in model values from the entity
if (model == null)
model = recurringPayment.ToModel();
var order = await _orderService.GetOrderByIdAsync(recurringPayment.InitialOrderId);
var customer = await _customerService.GetCustomerByIdAsync(order.CustomerId);
//convert dates to the user time
if (await _orderProcessingService.GetNextPaymentDateAsync(recurringPayment) is DateTime nextPaymentDate)
{
model.NextPaymentDate = (await _dateTimeHelper.ConvertToUserTimeAsync(nextPaymentDate, DateTimeKind.Utc)).ToString(CultureInfo.InvariantCulture);
model.CyclesRemaining = await _orderProcessingService.GetCyclesRemainingAsync(recurringPayment);
}
model.StartDate = (await _dateTimeHelper.ConvertToUserTimeAsync(recurringPayment.StartDateUtc, DateTimeKind.Utc)).ToString(CultureInfo.InvariantCulture);
model.CustomerId = customer.Id;
model.InitialOrderId = order.Id;
model.CustomerEmail = await _customerService.IsRegisteredAsync(customer)
? customer.Email : await _localizationService.GetResourceAsync("Admin.Customers.Guest");
model.PaymentType = await _localizationService.GetLocalizedEnumAsync(await _paymentService
.GetRecurringPaymentTypeAsync(order.PaymentMethodSystemName));
model.CanCancelRecurringPayment = await _orderProcessingService.CanCancelRecurringPaymentAsync(await _workContext.GetCurrentCustomerAsync(), recurringPayment);
//prepare nested search model
PrepareRecurringPaymentHistorySearchModel(model.RecurringPaymentHistorySearchModel, recurringPayment);
return model;
}
///
/// Prepare paged recurring payment history list model
///
/// Recurring payment history search model
/// Recurring payment
///
/// A task that represents the asynchronous operation
/// The task result contains the recurring payment history list model
///
public virtual async Task PrepareRecurringPaymentHistoryListModelAsync(RecurringPaymentHistorySearchModel searchModel,
RecurringPayment recurringPayment)
{
ArgumentNullException.ThrowIfNull(searchModel);
ArgumentNullException.ThrowIfNull(recurringPayment);
//get recurring payments history
var recurringPayments = (await _orderService.GetRecurringPaymentHistoryAsync(recurringPayment))
.OrderBy(historyEntry => historyEntry.CreatedOnUtc).ToList()
.ToPagedList(searchModel);
//prepare list model
var model = await new RecurringPaymentHistoryListModel().PrepareToGridAsync(searchModel, recurringPayments, () =>
{
return recurringPayments.SelectAwait(async historyEntry =>
{
//fill in model values from the entity
var historyModel = historyEntry.ToModel();
//convert dates to the user time
historyModel.CreatedOn = await _dateTimeHelper.ConvertToUserTimeAsync(historyEntry.CreatedOnUtc, DateTimeKind.Utc);
//fill in additional values (not existing in the entity)
var order = await _orderService.GetOrderByIdAsync(historyEntry.OrderId);
if (order == null)
return historyModel;
historyModel.OrderStatus = await _localizationService.GetLocalizedEnumAsync(order.OrderStatus);
historyModel.PaymentStatus = await _localizationService.GetLocalizedEnumAsync(order.PaymentStatus);
historyModel.ShippingStatus = await _localizationService.GetLocalizedEnumAsync(order.ShippingStatus);
historyModel.CustomOrderNumber = order.CustomOrderNumber;
return historyModel;
});
});
return model;
}
#endregion
}