From 38aaab123646707ca47c62a6475adb18c532ec8f Mon Sep 17 00:00:00 2001 From: Loretta Date: Tue, 7 Oct 2025 07:23:32 +0200 Subject: [PATCH 1/2] imrpovements, fixes, etc... --- .../Domains/DataLayer/FruitBankDbContext.cs | 3 +++ .../Domains/DataLayer/ShippingDbTable.cs | 9 ++++++--- .../Domains/DataLayer/ShippingDocumentDbTable.cs | 4 +++- .../Domains/DataLayer/ShippingItemDbTable.cs | 4 ++-- .../DataLayer/ShippingItemPalletDbTable.cs | 16 +++++++++------- .../Mapping/NameCompatibility.cs | 1 + 6 files changed, 24 insertions(+), 13 deletions(-) diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs index 640c1b0..c851f48 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs @@ -289,6 +289,9 @@ public class FruitBankDbContext : MgDbContextBase, shippingItem.MeasuredGrossWeight += shippingItemPallet.GrossWeight; } + shippingItem.MeasuredNetWeight = double.Round(shippingItem.MeasuredNetWeight, 1); + shippingItem.MeasuredGrossWeight = double.Round(shippingItem.MeasuredGrossWeight, 1); + //if (shippingItem.MeasuredQuantity < 0) shippingItem.MeasuredQuantity = 0; //if (!shippingItem.IsMeasurable || shippingItem.MeasuredNetWeight < 0) shippingItem.MeasuredNetWeight = 0; //if (!shippingItem.IsMeasurable || shippingItem.MeasuredGrossWeight < 0) shippingItem.MeasuredGrossWeight = 0; diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDbTable.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDbTable.cs index df0f83e..17a037f 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDbTable.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDbTable.cs @@ -6,6 +6,7 @@ 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; @@ -23,9 +24,11 @@ public class ShippingDbTable : MgDbTableBase { return loadRelations ? GetAll() - .LoadWith(sd => sd.ShippingDocuments).ThenLoad(si => si.ShippingItems).ThenLoad(sip => sip.ShippingItemPallets) - .LoadWith(sd => sd.ShippingDocuments).ThenLoad(sdtof => sdtof.ShippingDocumentToFiles).ThenLoad(f => f.ShippingDocumentFile) - .LoadWith(sd => sd.ShippingDocuments).ThenLoad(p => p.Partner) + .LoadWith(s => s.ShippingDocuments).ThenLoad(sd => sd.ShippingItems).ThenLoad(si => si.ShippingItemPallets) + .LoadWith(s => s.ShippingDocuments).ThenLoad(sd => sd.ShippingItems).ThenLoad(si => si.Pallet) + .LoadWith(s => s.ShippingDocuments).ThenLoad(sd => sd.ShippingItems).ThenLoad(si => si.Product) + .LoadWith(s => s.ShippingDocuments).ThenLoad(sd => sd.ShippingDocumentToFiles).ThenLoad(sdtof => sdtof.ShippingDocumentFile) + .LoadWith(s => s.ShippingDocuments).ThenLoad(sd => sd.Partner) : GetAll(); } diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDocumentDbTable.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDocumentDbTable.cs index 6d5bcbf..1c45bb3 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDocumentDbTable.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDocumentDbTable.cs @@ -24,7 +24,9 @@ public class ShippingDocumentDbTable : MgDbTableBase return loadRelations ? GetAll() .LoadWith(sd => sd.Shipping) - .LoadWith(sd => sd.ShippingItems).ThenLoad(sip => sip.ShippingItemPallets) + .LoadWith(sd => sd.ShippingItems).ThenLoad(si => si.Pallet) + .LoadWith(sd => sd.ShippingItems).ThenLoad(si => si.Product) + .LoadWith(sd => sd.ShippingItems).ThenLoad(si => si.ShippingItemPallets) .LoadWith(sd => sd.ShippingDocumentToFiles).ThenLoad(sdtof => sdtof.ShippingDocumentFile) .LoadWith(sd => sd.Partner) : GetAll(); diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingItemDbTable.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingItemDbTable.cs index 6c47805..2474eee 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingItemDbTable.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingItemDbTable.cs @@ -39,7 +39,8 @@ public class ShippingItemDbTable : MgDbTableBase .LoadWith(si => si.ShippingDocument).ThenLoad(sd => sd.ShippingDocumentToFiles).ThenLoad(sdtof => sdtof.ShippingDocumentFile) .LoadWith(si => si.ShippingItemPallets) .LoadWith(si => si.Product) - : GetAll().LoadWith(si => si.ShippingItemPallets).LoadWith(si => si.Product); + .LoadWith(si => si.Pallet) + : GetAll().LoadWith(si => si.ShippingItemPallets).LoadWith(si => si.Product).LoadWith(si => si.Pallet); } public IQueryable GetAllNotMeasured(bool loadRelations) @@ -59,6 +60,5 @@ public class ShippingItemDbTable : MgDbTableBase { shippingItem.MeasuredNetWeight = double.Round(shippingItem.MeasuredNetWeight, 1); shippingItem.MeasuredGrossWeight = double.Round(shippingItem.MeasuredGrossWeight, 1); - } } \ No newline at end of file diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingItemPalletDbTable.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingItemPalletDbTable.cs index e7aaf11..74517ec 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingItemPalletDbTable.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingItemPalletDbTable.cs @@ -34,10 +34,11 @@ public class ShippingItemPalletDbTable : MgDbTableBase { return loadRelations ? GetAll() - .LoadWith(sip => sip.ShippingItem).ThenLoad(si => si.ShippingDocument).ThenLoad(sd => sd.Shipping) - .LoadWith(sip => sip.ShippingItem).ThenLoad(si => si.ShippingDocument).ThenLoad(p => p.Partner) - .LoadWith(sip => sip.ShippingItem).ThenLoad(si => si.ShippingDocument).ThenLoad(sd => sd.ShippingDocumentToFiles).ThenLoad(sdtof => sdtof.ShippingDocumentFile) - .LoadWith(sip => sip.ShippingItem).ThenLoad(si => si.Product) + .LoadWith(sip => sip.ShippingItem) + //.LoadWith(sip => sip.ShippingItem).ThenLoad(si => si.ShippingDocument).ThenLoad(sd => sd.Shipping) + //.LoadWith(sip => sip.ShippingItem).ThenLoad(si => si.ShippingDocument).ThenLoad(p => p.Partner) + //.LoadWith(sip => sip.ShippingItem).ThenLoad(si => si.ShippingDocument).ThenLoad(sd => sd.ShippingDocumentToFiles).ThenLoad(sdtof => sdtof.ShippingDocumentFile) + //.LoadWith(sip => sip.ShippingItem).ThenLoad(si => si.Product) : GetAll(); } @@ -47,9 +48,10 @@ public class ShippingItemPalletDbTable : MgDbTableBase public IQueryable GetAllByShippingItemIdAsync(int shippingItemId, bool loadRelations) => GetAll(loadRelations).Where(sip => sip.ShippingItemId == shippingItemId); - private static void RoundMeasuredValue(ShippingItemPallet shippingItem) + private static void RoundMeasuredValue(ShippingItemPallet shippingItemPallet) { - shippingItem.NetWeight = double.Round(shippingItem.NetWeight, 1); - shippingItem.GrossWeight = double.Round(shippingItem.GrossWeight, 1); + shippingItemPallet.PalletWeight = double.Round(shippingItemPallet.PalletWeight, 1); + shippingItemPallet.NetWeight = double.Round(shippingItemPallet.NetWeight, 1); + shippingItemPallet.GrossWeight = double.Round(shippingItemPallet.GrossWeight, 1); } } \ No newline at end of file diff --git a/Nop.Plugin.Misc.AIPlugin/Mapping/NameCompatibility.cs b/Nop.Plugin.Misc.AIPlugin/Mapping/NameCompatibility.cs index b2b9ccf..dbd82f3 100644 --- a/Nop.Plugin.Misc.AIPlugin/Mapping/NameCompatibility.cs +++ b/Nop.Plugin.Misc.AIPlugin/Mapping/NameCompatibility.cs @@ -11,6 +11,7 @@ public partial class NameCompatibility : INameCompatibility /// public Dictionary TableNames => new Dictionary { + { typeof(Pallet), FruitBankConstClient.PalletDbTableName}, { typeof(Files), FruitBankConstClient.FilesDbTableName}, { typeof(Partner), FruitBankConstClient.PartnerDbTableName }, { typeof(Shipping), FruitBankConstClient.ShippingDbTableName }, From c179a75ba2c8c5734079bb82d7ffcb474cc17146 Mon Sep 17 00:00:00 2001 From: Loretta Date: Thu, 9 Oct 2025 07:29:38 +0200 Subject: [PATCH 2/2] improvements, fixes, etc... --- .../Controllers/FruitBankDataController.cs | 18 ++++++ .../Domains/DataLayer/FruitBankDbContext.cs | 62 ++++++++++++++++--- .../DataLayer/ShippingItemPalletDbTable.cs | 12 ++-- 3 files changed, 76 insertions(+), 16 deletions(-) diff --git a/Nop.Plugin.Misc.AIPlugin/Controllers/FruitBankDataController.cs b/Nop.Plugin.Misc.AIPlugin/Controllers/FruitBankDataController.cs index 3bde3e9..3db022c 100644 --- a/Nop.Plugin.Misc.AIPlugin/Controllers/FruitBankDataController.cs +++ b/Nop.Plugin.Misc.AIPlugin/Controllers/FruitBankDataController.cs @@ -167,6 +167,24 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Controllers return await ctx.UpdateShippingItemPalletAsync(shippingItemPallet); } + [SignalR(SignalRTags.AddOrUpdateMeasuredShippingItemPallets)] + public async Task AddOrUpdateMeasuredShippingItemPallets(List shippingItemPallets) + { + ArgumentNullException.ThrowIfNull(shippingItemPallets); + + _logger.Detail($"AddOrUpdateMeasuredShippingItemPallets invoked; count: {shippingItemPallets.Count}"); + + if (shippingItemPallets.Count == 0) return null; + + var shippingItemId = shippingItemPallets.FirstOrDefault()!.ShippingItemId; + if (shippingItemId <= 0 || shippingItemPallets.Any(x => x.ShippingItemId != shippingItemId)) return null; + + var shippingItem = await ctx.ShippingItems.GetByIdAsync(shippingItemId, false); + shippingItem.ShippingItemPallets = shippingItemPallets.Where(sip => sip.IsValidMeasuringValues(shippingItem.IsMeasurable)).ToList(); + + return await UpdateMeasuredShippingItem(shippingItem); + } + [SignalR(SignalRTags.GetShippingDocuments)] public async Task> GetShippingDocuments() { diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs index c851f48..f0e3278 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs @@ -161,8 +161,7 @@ public class FruitBankDbContext : MgDbContextBase, public Task UpdateMeasuredShippingItemSafeAsync(ShippingItem shippingItem) { - if (shippingItem.IsValidMeasuringValues() && shippingItem.ShippingItemPallets?.Count == shippingItem.PalletsOnDocument) - return UpdateShippingItemSafeAsync(shippingItem); + if (shippingItem.IsValidMeasuringValues()) return UpdateShippingItemSafeAsync(shippingItem); Logger.Error("shippingItem.IsMeasurable && !shippingItem.IsValidMeasuringValues()"); return Task.FromResult(false); @@ -198,6 +197,7 @@ public class FruitBankDbContext : MgDbContextBase, shippingItem.IsMeasurable = productIsMeasurable; if (shippingItem.ShippingItemPallets is { Count: > 0 }) await AddOrUpdateShippingItemPalletAsync(shippingItem); + //await AddOrUpdateShippingItemPalletAsync(shippingItem.ShippingItemPallets.Where(x => x.IsValidMeasuringValues(shippingItem.IsMeasurable)), shippingItem); //Nem tudhatjuk, h minden Pallet-et tartalmaz-e a shippingItem paraméter! A Biztonság kedvéért lekérjük db-ből! - J. shippingItem.ShippingItemPallets = await ShippingItemPallets.GetAllByShippingItemIdAsync(shippingItem.Id, false).ToListAsync(); @@ -207,7 +207,7 @@ public class FruitBankDbContext : MgDbContextBase, if (dbShippingItem == null) throw new Exception($"dbShippingItem == null; shippingItem.Id: {shippingItem.Id}"); var isMeasuredPrerequisite = product != null && shippingItem.PalletsOnDocument == shippingItem.ShippingItemPallets.Count - && shippingItem.ShippingItemPallets.All(x => x.IsMeasured && x.IsValidMeasuringValues(shippingItem.IsMeasurable)); + && shippingItem.ShippingItemPallets.All(x => x.IsMeasuredAndValid(shippingItem.IsMeasurable)); SetupShippingItemMeasuringValues(shippingItem, isMeasuredPrerequisite); shippingItem.IsMeasured = isMeasuredPrerequisite && shippingItem.IsValidMeasuringValues(); @@ -305,6 +305,20 @@ public class FruitBankDbContext : MgDbContextBase, return shippingItemPallet; } + public Task AddShippingItemPalletSafeAsync(ShippingItemPallet shippingItemPallet) + { + return TransactionSafeAsync(async tr => + { + try + { + return (await AddShippingItemPalletAsync(shippingItemPallet)) != null; + } + catch (Exception ex) + { + throw new Exception($"AddShippingItemPalletSafeAsync->TransactionSafeAsync error! shippingItemPallet: {shippingItemPallet}; ex: {ex.Message}", ex); + } + }); + } public async Task UpdateShippingItemPalletAsync(ShippingItemPallet shippingItemPallet) { if (!await SetupShippingItemPalletMeauringValues(shippingItemPallet)) return null; @@ -313,7 +327,40 @@ public class FruitBankDbContext : MgDbContextBase, return shippingItemPallet; } - public async Task AddOrUpdateShippingItemPalletAsync(List shippingItemPallets, ShippingItem parentShippingItem) + public Task UpdateShippingItemPalletSafeAsync(ShippingItemPallet shippingItemPallet) + { + return TransactionSafeAsync(async tr => + { + try + { + return (await UpdateShippingItemPalletAsync(shippingItemPallet)) != null; + } + catch (Exception ex) + { + throw new Exception($"UpdateShippingItemPalletSafeAsync->TransactionSafeAsync error! shippingItemPallet: {shippingItemPallet}; ex: {ex.Message}", ex); + } + }); + } + + public Task AddOrUpdateShippingItemPalletSafeAsync(ShippingItem shippingItem) => AddOrUpdateShippingItemPalletSafeAsync(shippingItem.ShippingItemPallets!, shippingItem); + public Task AddOrUpdateShippingItemPalletSafeAsync(IEnumerable shippingItemPallets, ShippingItem parentShippingItem) + { + return TransactionSafeAsync(async tr => + { + try + { + await AddOrUpdateShippingItemPalletAsync(shippingItemPallets, parentShippingItem); + return true; + } + catch (Exception ex) + { + throw new Exception($"AddOrUpdateShippingItemPalletSafeAsync->TransactionSafeAsync error! ex: {ex.Message}", ex); + } + }); + } + + public Task AddOrUpdateShippingItemPalletAsync(ShippingItem shippingItem) => AddOrUpdateShippingItemPalletAsync(shippingItem.ShippingItemPallets!, shippingItem); + public async Task AddOrUpdateShippingItemPalletAsync(IEnumerable shippingItemPallets, ShippingItem parentShippingItem) { foreach (var shippingItemPallet in shippingItemPallets) { @@ -324,9 +371,6 @@ public class FruitBankDbContext : MgDbContextBase, } } - public Task AddOrUpdateShippingItemPalletAsync(ShippingItem shippingItem) - => AddOrUpdateShippingItemPalletAsync(shippingItem.ShippingItemPallets!, shippingItem); - public async Task AddOrUpdateShippingItemPalletAsync(ShippingItemPallet shippingItemPallet) { if (shippingItemPallet.Id <= 0) return await AddShippingItemPalletAsync(shippingItemPallet); @@ -341,12 +385,10 @@ public class FruitBankDbContext : MgDbContextBase, if (!shippingItem.IsMeasurable) { - shippingItemPallet.NetWeight = 0; + shippingItemPallet.PalletWeight = 0; shippingItemPallet.GrossWeight = 0; } - if (shippingItemPallet.Quantity < 0 || shippingItemPallet.NetWeight < 0 || shippingItemPallet.GrossWeight < 0) return false; - shippingItemPallet.IsMeasured = shippingItemPallet.IsValidMeasuringValues(shippingItem.IsMeasurable); return true; } diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingItemPalletDbTable.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingItemPalletDbTable.cs index 74517ec..e23fc54 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingItemPalletDbTable.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingItemPalletDbTable.cs @@ -18,13 +18,13 @@ public class ShippingItemPalletDbTable : MgDbTableBase protected override void OnUpdate(ShippingItemPallet entity) { - RoundMeasuredValue(entity); + BeforeInsertOrUpdate(entity); base.OnUpdate(entity); } protected override void OnInsert(ShippingItemPallet entity) { - RoundMeasuredValue(entity); + BeforeInsertOrUpdate(entity); base.OnInsert(entity); } @@ -48,10 +48,10 @@ public class ShippingItemPalletDbTable : MgDbTableBase public IQueryable GetAllByShippingItemIdAsync(int shippingItemId, bool loadRelations) => GetAll(loadRelations).Where(sip => sip.ShippingItemId == shippingItemId); - private static void RoundMeasuredValue(ShippingItemPallet shippingItemPallet) + private static void BeforeInsertOrUpdate(ShippingItemPallet shippingItemPallet) { - shippingItemPallet.PalletWeight = double.Round(shippingItemPallet.PalletWeight, 1); - shippingItemPallet.NetWeight = double.Round(shippingItemPallet.NetWeight, 1); - shippingItemPallet.GrossWeight = double.Round(shippingItemPallet.GrossWeight, 1); + if (shippingItemPallet.IsValidSafeMeasuringValues()) return; + + throw new Exception($"ShippingItemPalletDbTable->BeforeInsertOrUpdate(); Invalid measuring value(s); shippingItemPallet: {shippingItemPallet}"); } } \ No newline at end of file