From 5fad9008972362e208ef9db813aa6c4b6d34a42c Mon Sep 17 00:00:00 2001 From: Loretta Date: Mon, 3 Nov 2025 06:44:45 +0100 Subject: [PATCH] Implement OrderItemMeasuringReset to MeasurementService --- .../Domains/DataLayer/FruitBankDbContext.cs | 16 +++++++ .../Services/MeasurementService.cs | 43 +++++++++++++++++-- 2 files changed, 56 insertions(+), 3 deletions(-) diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs index b60b8ad..bef2367 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs @@ -460,6 +460,22 @@ public class FruitBankDbContext : MgDbContextBase, return orderDto; } + public async Task SetOrderStatusToPendingSafeAsync(Order order) + => await TransactionSafeAsync(async _ => await SetOrderStatusToPendingAsync(order)); + + public async Task SetOrderStatusToPendingAsync(Order order) + { + if (order.OrderStatus == OrderStatus.Pending) return true; + + var prevOrderStatus = order.OrderStatus; + order.OrderStatus = OrderStatus.Pending; + + await Orders.UpdateAsync(order, false); + await _eventPublisher.PublishAsync(new OrderStatusChangedEvent(order, prevOrderStatus)); + + return true; + } + public Task DeleteOrderItemConstraintsSafeAsync(OrderItem orderItem, bool publishEvent = false) { return TransactionSafeAsync(async _ => diff --git a/Nop.Plugin.Misc.AIPlugin/Services/MeasurementService.cs b/Nop.Plugin.Misc.AIPlugin/Services/MeasurementService.cs index 518e5f3..10fe2dd 100644 --- a/Nop.Plugin.Misc.AIPlugin/Services/MeasurementService.cs +++ b/Nop.Plugin.Misc.AIPlugin/Services/MeasurementService.cs @@ -1,5 +1,7 @@ using AyCode.Core.Loggers; +using AyCode.Services.Server.SignalRs; using FruitBank.Common.Dtos; +using FruitBank.Common.Entities; using FruitBank.Common.Interfaces; using FruitBank.Common.Server.Services.SignalRs; using FruitBank.Common.Services; @@ -7,8 +9,10 @@ using Mango.Nop.Core.Extensions; using Mango.Nop.Core.Loggers; using Nop.Core.Domain.Catalog; using Nop.Core.Domain.Orders; +using Nop.Core.Events; using Nop.Plugin.Misc.FruitBankPlugin.Domains.DataLayer; using Nop.Services.Catalog; +using Nop.Services.Events; namespace Nop.Plugin.Misc.FruitBankPlugin.Services; @@ -16,18 +20,20 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Services; public class MeasurementService : MeasurementServiceBase, IMeasurementService { private readonly FruitBankDbContext _dbContext; + private readonly IEventPublisher _eventPublisher; private readonly SignalRSendToClientService _signalRSendToClientService; private readonly CustomPriceCalculationService _customPriceCalculationService; - public MeasurementService(FruitBankDbContext dbContext, SignalRSendToClientService signalRSendToClientService, FruitBankAttributeService fruitBankAttributeService, - IPriceCalculationService customPriceCalculationService, IEnumerable logWriters) : base(new Logger(logWriters.ToArray())) + public MeasurementService(FruitBankDbContext dbContext, SignalRSendToClientService signalRSendToClientService, FruitBankAttributeService fruitBankAttributeService, + IPriceCalculationService customPriceCalculationService, IEventPublisher eventPublisher, IEnumerable logWriters) : base(new Logger(logWriters.ToArray())) { _dbContext = dbContext; + _eventPublisher = eventPublisher; _signalRSendToClientService = signalRSendToClientService; _customPriceCalculationService = (CustomPriceCalculationService)customPriceCalculationService; } - + public async Task DeleteOrderItemConstraintsAsync(int orderItemId) => await DeleteOrderItemConstraintsAsync(await _dbContext.OrderItems.GetByIdAsync(orderItemId)); public async Task DeleteOrderItemConstraintsAsync(OrderItem orderItem) @@ -56,4 +62,35 @@ public class MeasurementService : MeasurementServiceBase, IMeasurementSe await _customPriceCalculationService.CheckAndUpdateOrderTotalPrice(order); } } + + public async Task OrderItemMeasuringReset(int orderItemId) + => await OrderItemMeasuringReset(await _dbContext.OrderItems.GetByIdAsync(orderItemId)); + + public async Task OrderItemMeasuringReset(OrderItem orderItem) + { + var order = await _dbContext.Orders.GetByIdAsync(orderItem.OrderId); + var orderItemPallets = await _dbContext.OrderItemPallets.GetAllByOrderItemId(orderItem.Id, false).ToListAsync(); + + var result = await _dbContext.TransactionSafeAsync(async _ => + { + foreach (var orderItemPallet in orderItemPallets) + { + orderItemPallet.RevisorId = 0; + await _dbContext.OrderItemPallets.UpdateAsync(orderItemPallet); + } + + if (order.OrderStatus == OrderStatus.Complete) + await _dbContext.SetOrderStatusToPendingAsync(order); + + return true; + }); + + if (!result) return result; + + foreach (var orderItemPallet in orderItemPallets) + await _signalRSendToClientService.SendOrderItemPalletChanged(orderItemPallet); + + await _signalRSendToClientService.SendOrderChanged(await _dbContext.OrderDtos.GetByIdAsync(orderItem.OrderId, true)); + return result; + } } \ No newline at end of file