72 lines
2.8 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
}
|