From 8da9c65328dda75762b697c3a4021f6c843ea962 Mon Sep 17 00:00:00 2001 From: Loretta Date: Sun, 12 Oct 2025 07:47:55 +0200 Subject: [PATCH] improvements, fixes, etc... --- .../Controllers/CustomOrderController.cs | 58 ++++++++++--------- .../Domains/DataLayer/FruitBankDbContext.cs | 6 ++ .../DataLayer/Interfaces/IOrderDtoDbSet.cs | 10 ++++ .../Domains/DataLayer/OrderDtoDbTable.cs | 34 +++++++++++ .../Domains/DataLayer/ShippingDbTable.cs | 1 - .../Factories/CustomOrderModelFactory.cs | 9 +-- .../Infrastructure/PluginNopStartup.cs | 3 +- .../Mapping/NameCompatibility.cs | 2 + 8 files changed, 89 insertions(+), 34 deletions(-) create mode 100644 Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/Interfaces/IOrderDtoDbSet.cs create mode 100644 Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/OrderDtoDbTable.cs diff --git a/Nop.Plugin.Misc.AIPlugin/Areas/Admin/Controllers/CustomOrderController.cs b/Nop.Plugin.Misc.AIPlugin/Areas/Admin/Controllers/CustomOrderController.cs index f76f438..a24945c 100644 --- a/Nop.Plugin.Misc.AIPlugin/Areas/Admin/Controllers/CustomOrderController.cs +++ b/Nop.Plugin.Misc.AIPlugin/Areas/Admin/Controllers/CustomOrderController.cs @@ -1,8 +1,11 @@ using AyCode.Services.SignalRs; +using FruitBank.Common.Dtos; using FruitBank.Common.Interfaces; using FruitBank.Common.Server.Interfaces; using FruitBank.Common.SignalRs; using Microsoft.AspNetCore.Mvc; +using Nop.Core.Domain.Orders; +using Nop.Plugin.Misc.FruitBankPlugin.Domains.DataLayer; using Nop.Plugin.Misc.FruitBankPlugin.Factories; using Nop.Plugin.Misc.FruitBankPlugin.Models; using Nop.Services.Orders; @@ -15,33 +18,24 @@ using Nop.Web.Framework.Mvc.Filters; namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers { - public class CustomOrderSignalREndpoint(IOrderService orderService, IOrderModelFactory orderModelFactory) : ICustomOrderSignalREndpointServer + public class CustomOrderSignalREndpoint(FruitBankDbContext ctx) : ICustomOrderSignalREndpointServer { - private readonly IOrderService _orderService = orderService; - private readonly CustomOrderModelFactory _orderModelFactory = orderModelFactory as CustomOrderModelFactory; - - public async Task GetOrderModelsByFilter(OrderSearchModel searchModel) + [SignalR(SignalRTags.GetAllOrderDtos)] + public async Task> GetAllOrderDtos() { - var orderListModel = await _orderModelFactory.PrepareOrderListModelExtendedAsync(searchModel); - - Console.WriteLine($"Total: {orderListModel.RecordsTotal}, Data Count: {orderListModel.Data.Count()}"); - foreach (var item in orderListModel.Data.Take(3)) - { - Console.WriteLine($"Order: {item.Id}, {item.CustomOrderNumber}"); - } - - return orderListModel; + return await ctx.OrderDtos.GetAllDtos().ToListAsync(); } - [SignalR(SignalRTags.GetPendingOrderModels)] - public async Task GetPendingOrderModels() + [SignalR(SignalRTags.GetOrderDtoById)] + public async Task GetOrderDtoById(int orderId) { - var orderSearchModel = new OrderSearchModel - { - OrderStatusIds = new List { 1 } - }; + return await ctx.OrderDtos.GetDtoByIdAsync(orderId); + } - return await GetOrderModelsByFilter(orderSearchModel); + [SignalR(SignalRTags.GetPendingOrderDtos)] + public async Task> GetPendingOrderDtos() + { + return await ctx.OrderDtos.GetAllByStatusDto(OrderStatus.Pending).ToListAsync(); } } @@ -64,6 +58,15 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers // ... initialize other deps } + #region CustomOrderSignalREndpoint + public Task> GetAllOrderDtos() + => _customOrderSignalREndpoint.GetAllOrderDtos(); + public Task GetOrderDtoById(int orderId) + => _customOrderSignalREndpoint.GetOrderDtoById(orderId); + public Task> GetPendingOrderDtos() + => _customOrderSignalREndpoint.GetPendingOrderDtos(); + #endregion CustomOrderSignalREndpoint + [CheckPermission(StandardPermission.Orders.ORDERS_VIEW)] public virtual async Task List(List orderStatuses = null, List paymentStatuses = null, List shippingStatuses = null) { @@ -83,14 +86,14 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers public async Task OrderList(OrderSearchModel searchModel) { //prepare model - var orderListModel = await GetOrderModelsByFilter(searchModel); + var orderListModel = await GetOrderListModelByFilter(searchModel); var valami = Json(orderListModel); Console.WriteLine(valami); return valami; } - public async Task GetOrderModelsByFilter(OrderSearchModel searchModel) + public async Task GetOrderListModelByFilter(OrderSearchModel searchModel) { //return _customOrderService. var orderListModel = await _orderModelFactory.PrepareOrderListModelExtendedAsync(searchModel); @@ -104,15 +107,14 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers return orderListModel; } - [SignalR(SignalRTags.GetPendingOrderModels)] - public async Task GetPendingOrderModels() + public async Task GetPendingOrderListModel() { var orderSearchModel = new OrderSearchModel { - OrderStatusIds = new List { 1 } + OrderStatusIds = new List { (int)OrderStatus.Pending } }; - - return await GetOrderModelsByFilter(orderSearchModel); + + return await GetOrderListModelByFilter(orderSearchModel); } public virtual IActionResult Test() diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs index 514892e..ad05ec2 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs @@ -23,10 +23,12 @@ using System.Transactions; using FruitBank.Common.Dtos; using Mango.Nop.Core.Dtos; using Microsoft.CodeAnalysis.CSharp.Syntax; +using Nop.Core.Domain.Orders; namespace Nop.Plugin.Misc.FruitBankPlugin.Domains.DataLayer; public class FruitBankDbContext : MgDbContextBase, + IOrderDtoDbSet, IPartnerDbSet, IShippingDbSet, IShippingDocumentDbSet, @@ -41,6 +43,8 @@ public class FruitBankDbContext : MgDbContextBase, private readonly IProductService _productService; private readonly IStaticCacheManager _staticCacheManager; + public OrderDtoDbTable OrderDtos { get; set; } + public PartnerDbTable Partners { get; set; } public ShippingDbTable Shippings { get; set; } public ShippingDocumentDbTable ShippingDocuments { get; set; } @@ -60,6 +64,7 @@ public class FruitBankDbContext : MgDbContextBase, public FruitBankDbContext(INopDataProvider dataProvider, ILockService lockService, FruitBankAttributeService fruitBankAttributeService, IStoreContext storeContext, PartnerDbTable partnerDbTable, ShippingDbTable shippingDbTable, ShippingDocumentDbTable shippingDocumentDbTable, ShippingItemDbTable shippingItemDbTable, ShippingItemPalletDbTable shippingItemPalletDbTable, FilesDbTable filesDbTable, ShippingDocumentToFilesDbTable shippingDocumentToFilesDbTable, + OrderDtoDbTable orderDtoDbTable, IProductService productService, IStaticCacheManager staticCacheManager, IRepository productRepository, IRepository customerRepository, @@ -73,6 +78,7 @@ public class FruitBankDbContext : MgDbContextBase, _fruitBankAttributeService = fruitBankAttributeService; Files = filesDbTable; + OrderDtos = orderDtoDbTable; Partners = partnerDbTable; Shippings = shippingDbTable; ShippingDocuments = shippingDocumentDbTable; diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/Interfaces/IOrderDtoDbSet.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/Interfaces/IOrderDtoDbSet.cs new file mode 100644 index 0000000..bf36515 --- /dev/null +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/Interfaces/IOrderDtoDbSet.cs @@ -0,0 +1,10 @@ +using Mango.Nop.Core.Interfaces; +using Nop.Core.Domain.Orders; +using Nop.Data; + +namespace Nop.Plugin.Misc.FruitBankPlugin.Domains.DataLayer.Interfaces; + +public interface IOrderDtoDbSet : IMgDbTableBase where TDbTable : IRepository +{ + public TDbTable OrderDtos { get; set; } +} \ No newline at end of file diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/OrderDtoDbTable.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/OrderDtoDbTable.cs new file mode 100644 index 0000000..6f6cb0b --- /dev/null +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/OrderDtoDbTable.cs @@ -0,0 +1,34 @@ +using FruitBank.Common.Dtos; +using FruitBank.Common.Entities; +using LinqToDB; +using Mango.Nop.Core.Repositories; +using Nop.Core.Caching; +using Nop.Core.Configuration; +using Nop.Core.Domain.Orders; +using Nop.Core.Events; +using Nop.Data; +using Nop.Services.Logging; + +namespace Nop.Plugin.Misc.FruitBankPlugin.Domains.DataLayer; + + +public class OrderDtoDbTable : MgDbTableBase +{ + public OrderDtoDbTable(IEventPublisher eventPublisher, INopDataProvider dataProvider, IShortTermCacheManager shortTermCacheManager, IStaticCacheManager staticCacheManager, AppSettings appSettings, ILogger logger) + : base(eventPublisher, dataProvider, shortTermCacheManager, staticCacheManager, appSettings, logger) + { + } + + public IQueryable GetAllDtos() + { + return GetAll().Select(o => new OrderDto(o)); + } + + public Task GetDtoByIdAsync(int orderId) + { + return GetAll().Where(x => x.Id == orderId).Select(o => new OrderDto(o)).FirstOrDefaultAsync(null); + } + + public IQueryable GetAllByStatusDto(OrderStatus orderStatus) + => GetAll().Where(o => o.OrderStatusId == (int)orderStatus).Select(o => new OrderDto(o)); +} diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDbTable.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDbTable.cs index 17a037f..b74ba46 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDbTable.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDbTable.cs @@ -6,7 +6,6 @@ using Nop.Core.Configuration; using Nop.Core.Events; using Nop.Data; using Nop.Services.Logging; -using static LinqToDB.Reflection.Methods.LinqToDB.Insert; namespace Nop.Plugin.Misc.FruitBankPlugin.Domains.DataLayer; diff --git a/Nop.Plugin.Misc.AIPlugin/Factories/CustomOrderModelFactory.cs b/Nop.Plugin.Misc.AIPlugin/Factories/CustomOrderModelFactory.cs index 8a11a28..4478b65 100644 --- a/Nop.Plugin.Misc.AIPlugin/Factories/CustomOrderModelFactory.cs +++ b/Nop.Plugin.Misc.AIPlugin/Factories/CustomOrderModelFactory.cs @@ -32,7 +32,9 @@ using Nop.Services.Tax; using Nop.Services.Vendors; using Nop.Web.Areas.Admin.Factories; using Nop.Web.Areas.Admin.Models.Orders; +using System.Collections; using System.Reflection; +using System.Runtime.Intrinsics.Arm; namespace Nop.Plugin.Misc.FruitBankPlugin.Factories { @@ -176,13 +178,12 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Factories var orderListModelExtended = new OrderListModelExtended(); var extendedRows = new List(orderListModel.RecordsFiltered); - //TODO: Megnézni miért száll el az IEnumerable!!! - J. - //PropertyHelper.CopyPublicProperties(orderListModel, orderListModelExtended); + PropertyHelper.CopyPublicValueTypeProperties(orderListModel, orderListModelExtended); foreach (var orderModel in orderListModel.Data) { var orderModelExtended = new OrderModelExtended(); - PropertyHelper.CopyPublicProperties(orderModel, orderModelExtended); + PropertyHelper.CopyPublicValueTypeProperties(orderModel, orderModelExtended); orderModelExtended.IsMeasurable = await ShouldMarkAsNeedsMeasurementAsync(orderModel); @@ -190,7 +191,7 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Factories extendedRows.Add(orderModelExtended); } - orderListModelExtended.Data = extendedRows; // Different cast approach + orderListModelExtended.Data = extendedRows; return orderListModelExtended; } diff --git a/Nop.Plugin.Misc.AIPlugin/Infrastructure/PluginNopStartup.cs b/Nop.Plugin.Misc.AIPlugin/Infrastructure/PluginNopStartup.cs index 64d1f45..7566a12 100644 --- a/Nop.Plugin.Misc.AIPlugin/Infrastructure/PluginNopStartup.cs +++ b/Nop.Plugin.Misc.AIPlugin/Infrastructure/PluginNopStartup.cs @@ -57,6 +57,8 @@ public class PluginNopStartup : INopStartup //services.AddSingleton(); services.AddScoped(); + + services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); @@ -65,7 +67,6 @@ public class PluginNopStartup : INopStartup services.AddScoped(); services.AddScoped(); - services.AddScoped(); services.AddScoped(); services.AddScoped(); diff --git a/Nop.Plugin.Misc.AIPlugin/Mapping/NameCompatibility.cs b/Nop.Plugin.Misc.AIPlugin/Mapping/NameCompatibility.cs index ef598ad..9ba4d8e 100644 --- a/Nop.Plugin.Misc.AIPlugin/Mapping/NameCompatibility.cs +++ b/Nop.Plugin.Misc.AIPlugin/Mapping/NameCompatibility.cs @@ -1,4 +1,5 @@ using FruitBank.Common; +using FruitBank.Common.Dtos; using FruitBank.Common.Entities; using Nop.Data.Mapping; @@ -11,6 +12,7 @@ public partial class NameCompatibility : INameCompatibility /// public Dictionary TableNames => new Dictionary { + //{ typeof(OrderDto), "Order"}, { typeof(Pallet), FruitBankConstClient.PalletDbTableName}, { typeof(Files), FruitBankConstClient.FilesDbTableName}, { typeof(Partner), FruitBankConstClient.PartnerDbTableName },