diff --git a/Nop.Plugin.Misc.AIPlugin/Areas/Admin/Controllers/CustomOrderController.cs b/Nop.Plugin.Misc.AIPlugin/Areas/Admin/Controllers/CustomOrderController.cs index 0b654a0..572ae1d 100644 --- a/Nop.Plugin.Misc.AIPlugin/Areas/Admin/Controllers/CustomOrderController.cs +++ b/Nop.Plugin.Misc.AIPlugin/Areas/Admin/Controllers/CustomOrderController.cs @@ -170,7 +170,7 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers public Task> GetPendingOrderDtos() => _customOrderSignalREndpoint.GetPendingOrderDtos(); [NonAction] - public Task> GetPendingOrderDtosForMeasuring() => _customOrderSignalREndpoint.GetPendingOrderDtosForMeasuring(); + public Task> GetPendingOrderDtosForMeasuring(int lastDaysCount) => _customOrderSignalREndpoint.GetPendingOrderDtosForMeasuring(lastDaysCount); [NonAction] public Task StartMeasuring(int orderId, int userId) => _customOrderSignalREndpoint.StartMeasuring(orderId, userId); diff --git a/Nop.Plugin.Misc.AIPlugin/Areas/Admin/Controllers/CustomOrderSignalREndpoint.cs b/Nop.Plugin.Misc.AIPlugin/Areas/Admin/Controllers/CustomOrderSignalREndpoint.cs index 52d482a..65d7d0e 100644 --- a/Nop.Plugin.Misc.AIPlugin/Areas/Admin/Controllers/CustomOrderSignalREndpoint.cs +++ b/Nop.Plugin.Misc.AIPlugin/Areas/Admin/Controllers/CustomOrderSignalREndpoint.cs @@ -41,9 +41,18 @@ public class CustomOrderSignalREndpoint(FruitBankDbContext ctx, SignalRSendToCli } [SignalR(SignalRTags.GetPendingOrderDtosForMeasuring)] - public async Task> GetPendingOrderDtosForMeasuring() + public async Task> GetPendingOrderDtosForMeasuring(int lastDaysCount) { - return await ctx.OrderDtos.GetAllForMeasuring().ToListAsync(); + var fromDate = DateTime.Now.AddDays(-lastDaysCount); + return await ctx.OrderDtos.GetAllForMeasuring(fromDate).ToListAsync(); + } + + [SignalR(SignalRTags.GetOrderDatesForMeasuring)] + public async Task> GetOrderDatesForMeasuring(int lastDaysCount) + { + var fromDate = DateTime.Now.AddDays(-lastDaysCount); + //return await ctx.OrderDtos.GetAllForMeasuring(fromDate).Select(x => new MeasuringOrderDate(...)).ToListAsync(); + return null; } [SignalR(SignalRTags.GetAllOrderDtoByIds)] diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs index 17348de..ff832af 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs @@ -179,7 +179,6 @@ public class FruitBankDbContext : MgDbContextBase, return true; }); } - public async Task DeleteShippingDocumentSafeAsync(ShippingDocument shippingDocument) { await TransactionSafeAsync(async _ => @@ -205,11 +204,20 @@ public class FruitBankDbContext : MgDbContextBase, Logger.Error("shippingItem.IsMeasurable && !shippingItem.IsValidMeasuringValues()"); return Task.FromResult(false); } + public Task AddShippingItemSafeAsync(ShippingItem shippingItem) => TransactionSafeAsync(async _ => await AddShippingItemAsync(shippingItem)); public async Task AddShippingItemAsync(ShippingItem shippingItem) { + var productId = shippingItem.ProductId.GetValueOrDefault(0); + + if (productId > 0) + { + var productDto = await ProductDtos.GetByIdAsync(productId); + shippingItem.IsMeasurable = productDto?.IsMeasurable ?? false; + } + await ShippingItems.InsertAsync(shippingItem); return true; } @@ -528,16 +536,17 @@ public class FruitBankDbContext : MgDbContextBase, await _fruitBankAttributeService.InsertOrUpdateGenericAttributeAsync(productDto.Id, nameof(IMeasuringNetWeight.NetWeight), newProductNetWeight); - Logger.Info($"DeleteOrderItemConstraints; Product netWeight updated! productId: {productDto.Id}; newNetWeight: {newProductNetWeight}; oldNetWeight: {productDto.NetWeight}; deleted orderItemNetWeight: {validOrderItemNetWeight}; orderItem.Id: {orderItem.Id};"); + Logger.Info($"DbContext->DeleteOrderItemConstraintsAsync(); Product netWeight updated! productId: {productDto.Id}; newNetWeight: {newProductNetWeight}; oldNetWeight: {productDto.NetWeight}; deleted orderItemNetWeight: {validOrderItemNetWeight}; orderItem.Id: {orderItem.Id};"); } } await _fruitBankAttributeService.DeleteGenericAttributesAsync(orderItemGenericAttributes); var deletedPalletCount = await OrderItemPallets.DeleteAsync(x => x.OrderItemId == orderItem.Id); - //await OrderItems.DeleteAsync(orderItem, publishEvent); + var order = await Orders.GetByIdAsync(orderItem.OrderId); + // await _customPriceCalculationService.CheckAndUpdateOrderTotalPrice(order); - Logger.Info($"DeleteOrderItemConstraints; OrderItem constraints deleted! deletedPalletCount: {deletedPalletCount}; orderItem.Id: {orderItem.Id};"); + Logger.Info($"DbContext->DeleteOrderItemConstraintsAsync(); OrderItem constraints deleted! deletedPalletCount: {deletedPalletCount}; deletedAttributesCount: {orderItemGenericAttributes.Count}; orderItem.Id: {orderItem.Id};"); } public async Task AddOrderItemPalletAsync(OrderItemPallet orderItemPallet) diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/OrderDtoDbTable.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/OrderDtoDbTable.cs index a2be19e..3e19d00 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/OrderDtoDbTable.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/OrderDtoDbTable.cs @@ -21,12 +21,18 @@ public class OrderDtoDbTable : MgDtoDbTableBase public IQueryable GetAll(bool loadRelations) { - return GetAll() - .LoadWith(o => o.GenericAttributes) - .LoadWith(o => o.Customer) - .LoadWith(o => o.OrderItemDtos).ThenLoad(oi => oi.ProductDto).ThenLoad(prod => prod.GenericAttributes) - .LoadWith(o => o.OrderItemDtos).ThenLoad(oi => oi.GenericAttributes) - .LoadWith(o => o.OrderItemDtos).ThenLoad(oi => oi.OrderItemPallets); + if (loadRelations) + { + return GetAll() + .LoadWith(o => o.GenericAttributes) + .LoadWith(o => o.Customer) + .LoadWith(o => o.OrderNotes) + .LoadWith(o => o.OrderItemDtos).ThenLoad(oi => oi.ProductDto).ThenLoad(prod => prod.GenericAttributes) + .LoadWith(o => o.OrderItemDtos).ThenLoad(oi => oi.GenericAttributes) + .LoadWith(o => o.OrderItemDtos).ThenLoad(oi => oi.OrderItemPallets); + } + + return GetAll().LoadWith(o => o.GenericAttributes); } public Task GetByIdAsync(int orderId, bool loadRelations) => GetAll(loadRelations).Where(x => x.Id == orderId).FirstOrDefaultAsync(null); @@ -34,10 +40,11 @@ public class OrderDtoDbTable : MgDtoDbTableBase public IQueryable GetAllByOrderStatus(OrderStatus orderStatus, bool loadRelations = true) => GetAll(loadRelations).Where(o => o.OrderStatusId == (int)orderStatus); - public IQueryable GetAllForMeasuring(bool loadRelations = true) - => GetAll(loadRelations).Where(o => o.PaymentStatusId < (int)PaymentStatus.Paid && o.GenericAttributes.Any(ga => ga.Key == nameof(OrderDto.DateOfReceipt))); - //=> GetAllByOrderStatus(OrderStatus.Pending, loadRelations).Where(o => o.GenericAttributes.Any(ga => ga.Key == nameof(OrderDto.DateOfReceipt))); - + public IQueryable GetAllForMeasuring(DateTime fromDate, bool loadRelations = true) + => GetAll(loadRelations).Where(o => o.PaymentStatusId < (int)PaymentStatus.Paid + && o.OrderStatusId != (int)OrderStatus.Cancelled + && o.GenericAttributes.Any(ga => ga.Key == nameof(OrderDto.DateOfReceipt) && DateTime.Parse(ga.Value) >= fromDate.Date)); + public IQueryable GetAllByProductId(int productId, bool loadRelations = true) => GetAll(loadRelations).Where(o => o.OrderItemDtos.Any(oi => oi.ProductId == productId)); public IQueryable GetAllByIds(IEnumerable orderIds, bool loadRelations = true) => GetAll(loadRelations).Where(o => orderIds.Contains(o.Id)); diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/OrderItemDtoDbTable.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/OrderItemDtoDbTable.cs index 77ac036..626cecb 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/OrderItemDtoDbTable.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/OrderItemDtoDbTable.cs @@ -21,7 +21,8 @@ public class OrderItemDtoDbTable : MgDtoDbTableBase { return GetAll() .LoadWith(oi => oi.GenericAttributes) - .LoadWith(oi => oi.OrderDto).ThenLoad(prod => prod.GenericAttributes) + .LoadWith(oi => oi.OrderDto).ThenLoad(o => o.OrderNotes) + .LoadWith(oi => oi.OrderDto).ThenLoad(o => o.GenericAttributes) .LoadWith(oi => oi.OrderItemPallets).ThenLoad(oip => oip.OrderItemDto).ThenLoad(oi => oi.GenericAttributes) .LoadWith(oi => oi.ProductDto).ThenLoad(prod => prod.GenericAttributes); } diff --git a/Nop.Plugin.Misc.AIPlugin/Infrastructure/PluginNopStartup.cs b/Nop.Plugin.Misc.AIPlugin/Infrastructure/PluginNopStartup.cs index 362a928..8ed249d 100644 --- a/Nop.Plugin.Misc.AIPlugin/Infrastructure/PluginNopStartup.cs +++ b/Nop.Plugin.Misc.AIPlugin/Infrastructure/PluginNopStartup.cs @@ -115,7 +115,7 @@ public class PluginNopStartup : INopStartup services.AddSignalR(hubOptions => { //hubOptions.EnableDetailedErrors = true; - hubOptions.MaximumReceiveMessageSize = 256 * 1024; + hubOptions.MaximumReceiveMessageSize = null;// 256 * 1024; hubOptions.KeepAliveInterval = TimeSpan.FromSeconds(FruitBankConstClient.SignalRKeepAliveIntervalSecond); hubOptions.ClientTimeoutInterval = TimeSpan.FromSeconds(FruitBankConstClient.SignarlRTimeoutIntervalSecond); }); diff --git a/Nop.Plugin.Misc.AIPlugin/Services/MeasurementService.cs b/Nop.Plugin.Misc.AIPlugin/Services/MeasurementService.cs index 3f263d5..49873e8 100644 --- a/Nop.Plugin.Misc.AIPlugin/Services/MeasurementService.cs +++ b/Nop.Plugin.Misc.AIPlugin/Services/MeasurementService.cs @@ -42,12 +42,15 @@ public class MeasurementService : MeasurementServiceBase, IMeasurementSe public async Task DeleteOrderItemConstraintsAsync(OrderItem orderItem) { - Logger.Info($"DeleteOrderItemConstraintsAsync invoked; orderItem.Id: {orderItem?.Id}"); + Logger.Info($"MeasurementService->DeleteOrderItemConstraintsAsync() invoked; orderItem.Id: {orderItem?.Id}"); if (orderItem == null) return; await _dbContext.DeleteOrderItemConstraintsSafeAsync(orderItem); await _signalRSendToClientService.SendOrderItemDeleted(orderItem); + + var order = await _dbContext.Orders.GetByIdAsync(orderItem.OrderId); + await _customPriceCalculationService.CheckAndUpdateOrderTotalPrice(order); } public async Task OrderItemInsertedOrUpdatedPostProcess(OrderItem orderItem)