58 lines
2.3 KiB
C#
58 lines
2.3 KiB
C#
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.AspNetCore.Mvc.Filters;
|
|
using Nop.Core.Domain.Orders;
|
|
using Nop.Services.Orders;
|
|
using Nop.Services.Common;
|
|
using System.Threading.Tasks;
|
|
using Nop.Core;
|
|
using Nop.Plugin.Misc.FruitBankPlugin.Services;
|
|
|
|
namespace Nop.Plugin.Misc.FruitBankPlugin.Filters
|
|
{
|
|
public class PendingMeasurementCheckoutFilter : IAsyncActionFilter
|
|
{
|
|
private readonly IWorkContext _workContext;
|
|
private readonly IOrderService _orderService;
|
|
private readonly IOrderMeasurementService _orderMeasurementService;
|
|
|
|
public PendingMeasurementCheckoutFilter(
|
|
IWorkContext workContext,
|
|
IOrderService orderService,
|
|
IOrderMeasurementService orderMeasurementService)
|
|
{
|
|
_workContext = workContext;
|
|
_orderService = orderService;
|
|
_orderMeasurementService = orderMeasurementService;
|
|
}
|
|
|
|
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
|
|
{
|
|
// csak a ConfirmOrder action-nál kell ellenőrizni
|
|
var actionName = context.ActionDescriptor.RouteValues["action"];
|
|
var controllerName = context.ActionDescriptor.RouteValues["controller"];
|
|
|
|
if (controllerName == "Checkout" && actionName == "ConfirmOrder")
|
|
{
|
|
// lekérjük a user aktuális kosarát
|
|
var customer = await _workContext.GetCurrentCustomerAsync();
|
|
var order = await _orderService.GetOrderByIdAsync((int)context.ActionArguments["orderId"]); // ha van orderId param
|
|
|
|
if (order != null && await _orderMeasurementService.IsPendingMeasurementAsync(order))
|
|
{
|
|
order.OrderStatus = OrderStatus.Processing;
|
|
order.PaymentStatus = Core.Domain.Payments.PaymentStatus.Pending;
|
|
context.Result = new RedirectToRouteResult(new
|
|
{
|
|
controller = "Checkout",
|
|
action = "PendingMeasurementWarning"
|
|
});
|
|
return; // itt kilépünk, a fizetés nem engedélyezett
|
|
}
|
|
}
|
|
|
|
await next(); // mehet a többi pipeline
|
|
}
|
|
}
|
|
}
|
|
|