Mango.Nop.Plugins/Nop.Plugin.Misc.AIPlugin/Services/EventConsumer.cs

72 lines
2.8 KiB
C#

using System.Linq;
using Nop.Core.Domain.Catalog;
using Nop.Core.Domain.Orders;
using Nop.Services.Catalog;
using Nop.Services.Common;
using Nop.Services.Events;
using Nop.Services.Orders;
namespace Nop.Plugin.YourCompany.Measurement.Services
{
public class OrderPlacedConsumer : IConsumer<OrderPlacedEvent>
{
private readonly IGenericAttributeService _genericAttributeService;
private readonly IProductService _productService;
private readonly IOrderService _orderService;
private readonly IProductAttributeService _productAttributeService;
public OrderPlacedConsumer(
IGenericAttributeService genericAttributeService,
IProductService productService,
IOrderService orderService,
IProductAttributeService productAttributeService)
{
_genericAttributeService = genericAttributeService;
_productService = productService;
_orderService = orderService;
_productAttributeService = productAttributeService;
}
public async Task HandleEventAsync(OrderPlacedEvent eventMessage)
{
var order = eventMessage.Order;
var orderItems = await _orderService.GetOrderItemsAsync(order.Id);
bool requiresMeasurement = false;
foreach (var item in orderItems)
{
var product = await _productService.GetProductByIdAsync(item.ProductId);
// itt pl. egy custom flag a producton, ami jelzi, hogy mérés kell hozzá
// akár egy product attribute is lehet, vagy egy saját extension metódus
if (product != null)
{
var productAttributeMappings = await _productAttributeService.GetProductAttributeMappingsByProductIdAsync(product.Id);
//Product Attributes
foreach (var pam in productAttributeMappings)
{
var attributes = await _productAttributeService.GetProductAttributeValuesAsync(pam.Id);
foreach (var attr in attributes)
{
// you can check for specific attribute by its name or id
if (attr.Name == "NeedsToBeMeasured" && attr.IsPreSelected)
{
requiresMeasurement = true;
break;
}
}
}
}
}
if (requiresMeasurement)
{
// itt adjuk hozzá a GenericAttribute flag-et az orderhez
await _genericAttributeService.SaveAttributeAsync(order,
"PendingMeasurement", true);
}
}
}
}