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