From f72a031a7e78acb510b0a018213b38b0702f4378 Mon Sep 17 00:00:00 2001 From: Loretta Date: Thu, 13 Nov 2025 19:58:39 +0100 Subject: [PATCH] StockQuantityHistoryExt, StockQuantityHistoryDto; improvements, fixes; --- .../Controllers/FruitBankDataController.cs | 43 +++++++++++-------- .../Domains/DataLayer/FruitBankDbContext.cs | 3 ++ .../StockQuantityHistoryDtoDbTable.cs | 37 ++++++++++++++++ .../Infrastructure/PluginNopStartup.cs | 2 + .../Mapping/NameCompatibility.cs | 6 +++ 5 files changed, 74 insertions(+), 17 deletions(-) create mode 100644 Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/StockQuantityHistoryDtoDbTable.cs diff --git a/Nop.Plugin.Misc.AIPlugin/Controllers/FruitBankDataController.cs b/Nop.Plugin.Misc.AIPlugin/Controllers/FruitBankDataController.cs index e66ec5d..b59c5dc 100644 --- a/Nop.Plugin.Misc.AIPlugin/Controllers/FruitBankDataController.cs +++ b/Nop.Plugin.Misc.AIPlugin/Controllers/FruitBankDataController.cs @@ -30,6 +30,7 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Controllers public class FruitBankDataController( FruitBankDbContext ctx, MeasurementService measurementService, + StockQuantityHistoryDtoDbTable stockQuantityHistoryDtoDbTable, IWorkContext workContext, ICustomerService customerService, ICustomerRegistrationService customerRegistrationService, @@ -51,6 +52,14 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Controllers throw new NotImplementedException("GetMeasuringModels"); } + [SignalR(SignalRTags.GetStockQuantityHistoryDtos)] + public async Task> GetStockQuantityHistoryDtos() + => await stockQuantityHistoryDtoDbTable.GetAll(true).ToListAsync(); + + [SignalR(SignalRTags.GetStockQuantityHistoryDtosByProductId)] + public async Task> GetStockQuantityHistoryDtosByProductId(int productId) + => await stockQuantityHistoryDtoDbTable.GetByProductIdAsync(productId, true).ToListAsync(); + [SignalR(SignalRTags.GetPartners)] public async Task> GetPartners() { @@ -313,26 +322,26 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Controllers switch (loginResult) { case CustomerLoginResults.Successful: - { - var customer = await customerService.GetCustomerByEmailAsync(customerEmail); - - var isInMeasuringRole = await customerService.IsInCustomerRoleAsync(customer, FruitBankConst.MeasuringRoleSystemName); - if (!isInMeasuringRole) { - resultLoginModel.ErrorMessage = "Is not in MeauringRole!"; + var customer = await customerService.GetCustomerByEmailAsync(customerEmail); + + var isInMeasuringRole = await customerService.IsInCustomerRoleAsync(customer, FruitBankConst.MeasuringRoleSystemName); + if (!isInMeasuringRole) + { + resultLoginModel.ErrorMessage = "Is not in MeauringRole!"; + break; + } + + //var actionResult = await customerRegistrationService.SignInCustomerAsync(customer, returnUrl, loginModel.RememberMe); + + //await _workContext.SetCurrentCustomerAsync(customer); + //await _authenticationService.SignInAsync(customer, isPersist); + ////raise event + //await _eventPublisher.PublishAsync(new CustomerLoggedinEvent(customer)); + + resultLoginModel.CustomerDto = new CustomerDto(customer); //customer.ToModel(); break; } - - //var actionResult = await customerRegistrationService.SignInCustomerAsync(customer, returnUrl, loginModel.RememberMe); - - //await _workContext.SetCurrentCustomerAsync(customer); - //await _authenticationService.SignInAsync(customer, isPersist); - ////raise event - //await _eventPublisher.PublishAsync(new CustomerLoggedinEvent(customer)); - - resultLoginModel.CustomerDto = new CustomerDto(customer); //customer.ToModel(); - break; - } case CustomerLoginResults.CustomerNotExist: resultLoginModel.ErrorMessage = await localizationService.GetResourceAsync("Account.Login.WrongCredentials.CustomerNotExist"); break; diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs index ff832af..1687da7 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs @@ -613,6 +613,9 @@ public class FruitBankDbContext : MgDbContextBase, if (productDto.StockQuantity < 0) Logger.Error($"productDto.StockQuantity < 0; Id: {productDto.Id}; StockQuantity: {productDto.StockQuantity}"); + //TODO: !!!!!!!!!!!!!!!! - J. + //await _productService.AdjustInventoryAsync(product, quantityInc, string.Empty, ""); + await ProductDtos.UpdateAsync(productDto, publishEvent); return await Task.FromResult(true); diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/StockQuantityHistoryDtoDbTable.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/StockQuantityHistoryDtoDbTable.cs new file mode 100644 index 0000000..15d173c --- /dev/null +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/StockQuantityHistoryDtoDbTable.cs @@ -0,0 +1,37 @@ +using FruitBank.Common.Dtos; +using FruitBank.Common.Entities; +using LinqToDB; +using Mango.Nop.Core.Entities; +using Mango.Nop.Core.Loggers; +using Mango.Nop.Data.Repositories; +using Nop.Core.Caching; +using Nop.Core.Configuration; +using Nop.Core.Domain.Catalog; +using Nop.Core.Events; +using Nop.Data; +using System.Linq.Expressions; + +namespace Nop.Plugin.Misc.FruitBankPlugin.Domains.DataLayer; + +public class StockQuantityHistoryDtoDbTable : MgDtoDbTableBase +{ + public StockQuantityHistoryDtoDbTable(IEventPublisher eventPublisher, INopDataProvider dataProvider, IShortTermCacheManager shortTermCacheManager, IStaticCacheManager staticCacheManager, AppSettings appSettings) + : base(eventPublisher, dataProvider, shortTermCacheManager, staticCacheManager, appSettings) + { + } + + public override IQueryable GetAll() => base.GetAll().LoadWith(sqh => sqh.StockQuantityHistoryExt); + + public IQueryable GetAll(bool loadProductRelation) + { + return loadProductRelation + ? GetAll().LoadWith(sqh => sqh.ProductDto).ThenLoad(p => p.GenericAttributes) + : GetAll(); + } + + public Task GetByIdAsync(int id, bool loadProductRelation) + => GetAll(loadProductRelation).FirstOrDefaultAsync(p => p.Id == id); + + public IQueryable GetByProductIdAsync(int productId, bool loadProductRelation) + => GetAll(loadProductRelation).Where(p => p.ProductId == productId); +} \ No newline at end of file diff --git a/Nop.Plugin.Misc.AIPlugin/Infrastructure/PluginNopStartup.cs b/Nop.Plugin.Misc.AIPlugin/Infrastructure/PluginNopStartup.cs index 8ed249d..5f5e50c 100644 --- a/Nop.Plugin.Misc.AIPlugin/Infrastructure/PluginNopStartup.cs +++ b/Nop.Plugin.Misc.AIPlugin/Infrastructure/PluginNopStartup.cs @@ -72,6 +72,8 @@ 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 9425e13..1a6c213 100644 --- a/Nop.Plugin.Misc.AIPlugin/Mapping/NameCompatibility.cs +++ b/Nop.Plugin.Misc.AIPlugin/Mapping/NameCompatibility.cs @@ -1,6 +1,8 @@ using FruitBank.Common; using FruitBank.Common.Dtos; using FruitBank.Common.Entities; +using Mango.Nop.Core.Dtos; +using Mango.Nop.Core.Entities; using Nop.Core.Domain.Catalog; using Nop.Core.Domain.Orders; using Nop.Data.Mapping; @@ -29,6 +31,10 @@ public partial class NameCompatibility : INameCompatibility { typeof(ShippingItemPallet), FruitBankConstClient.ShippingItemPalletDbTableName}, { typeof(ShippingDocumentToFiles), FruitBankConstClient.ShippingDocumentToFilesDbTableName}, + + { typeof(StockQuantityHistoryDto), nameof(StockQuantityHistory)}, + { typeof(StockQuantityHistoryExt), FruitBankConstClient.StockQuantityHistoryExtDbTableName}, + };