using AyCode.Core.Loggers; using FruitBank.Common.Dtos; using FruitBank.Common.Interfaces; using FruitBank.Common.Server.Services.SignalRs; using FruitBank.Common.Services; using Mango.Nop.Core.Extensions; using Mango.Nop.Core.Loggers; using Nop.Core.Domain.Catalog; using Nop.Core.Domain.Orders; using Nop.Plugin.Misc.FruitBankPlugin.Domains.DataLayer; using Nop.Services.Catalog; namespace Nop.Plugin.Misc.FruitBankPlugin.Services; #nullable enable public class MeasurementService : MeasurementServiceBase, IMeasurementService { private readonly FruitBankDbContext _dbContext; 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())) { _dbContext = dbContext; _signalRSendToClientService = signalRSendToClientService; _customPriceCalculationService = (CustomPriceCalculationService)customPriceCalculationService; } public async Task DeleteOrderItemConstraintsAsync(int orderItemId) => await DeleteOrderItemConstraintsAsync(await _dbContext.OrderItems.GetByIdAsync(orderItemId)); public async Task DeleteOrderItemConstraintsAsync(OrderItem orderItem) { Logger.Info($"DeleteOrderItemConstraintsAsync invoked; orderItem.Id: {orderItem?.Id}"); if (orderItem == null) return; await _dbContext.DeleteOrderItemConstraintsSafeAsync(orderItem); await _signalRSendToClientService.SendOrderItemDeleted(orderItem); } public async Task OrderItemInsertedOrUpdatedPostProcess(OrderItem orderItem) { var orderItemDto = await _dbContext.OrderItemDtos.GetByIdAsync(orderItem.Id, true); await CheckAndUpdateOrderItemFinalPricesAsync(orderItem, orderItemDto); await _signalRSendToClientService.SendOrderItemChanged(orderItemDto); } public async Task CheckAndUpdateOrderItemFinalPricesAsync(OrderItem orderItem, OrderItemDto? orderItemDtoHelper = null) { if (await _customPriceCalculationService.CheckAndUpdateOrderItemFinalPricesAsync(orderItem, orderItemDtoHelper)) { var order = await _dbContext.Orders.GetByIdAsync(orderItem.OrderId); await _customPriceCalculationService.CheckAndUpdateOrderTotalPrice(order); } } }