This commit is contained in:
Adam 2025-10-10 02:43:36 +02:00
commit 244181bebd
7 changed files with 96 additions and 25 deletions

View File

@ -167,6 +167,24 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Controllers
return await ctx.UpdateShippingItemPalletAsync(shippingItemPallet);
}
[SignalR(SignalRTags.AddOrUpdateMeasuredShippingItemPallets)]
public async Task<ShippingItem> AddOrUpdateMeasuredShippingItemPallets(List<ShippingItemPallet> 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<List<ShippingDocument>> GetShippingDocuments()
{

View File

@ -161,8 +161,7 @@ public class FruitBankDbContext : MgDbContextBase,
public Task<bool> 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();
@ -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;
@ -302,6 +305,20 @@ public class FruitBankDbContext : MgDbContextBase,
return shippingItemPallet;
}
public Task<bool> 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<ShippingItemPallet?> UpdateShippingItemPalletAsync(ShippingItemPallet shippingItemPallet)
{
if (!await SetupShippingItemPalletMeauringValues(shippingItemPallet)) return null;
@ -310,7 +327,40 @@ public class FruitBankDbContext : MgDbContextBase,
return shippingItemPallet;
}
public async Task AddOrUpdateShippingItemPalletAsync(List<ShippingItemPallet> shippingItemPallets, ShippingItem parentShippingItem)
public Task<bool> 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<bool> AddOrUpdateShippingItemPalletSafeAsync(IEnumerable<ShippingItemPallet> 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<ShippingItemPallet> shippingItemPallets, ShippingItem parentShippingItem)
{
foreach (var shippingItemPallet in shippingItemPallets)
{
@ -321,9 +371,6 @@ public class FruitBankDbContext : MgDbContextBase,
}
}
public Task AddOrUpdateShippingItemPalletAsync(ShippingItem shippingItem)
=> AddOrUpdateShippingItemPalletAsync(shippingItem.ShippingItemPallets!, shippingItem);
public async Task<ShippingItemPallet?> AddOrUpdateShippingItemPalletAsync(ShippingItemPallet shippingItemPallet)
{
if (shippingItemPallet.Id <= 0) return await AddShippingItemPalletAsync(shippingItemPallet);
@ -338,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;
}

View File

@ -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<Shipping>
{
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();
}

View File

@ -24,7 +24,9 @@ public class ShippingDocumentDbTable : MgDbTableBase<ShippingDocument>
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();

View File

@ -39,7 +39,8 @@ public class ShippingItemDbTable : MgDbTableBase<ShippingItem>
.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<ShippingItem> GetAllNotMeasured(bool loadRelations)
@ -59,6 +60,5 @@ public class ShippingItemDbTable : MgDbTableBase<ShippingItem>
{
shippingItem.MeasuredNetWeight = double.Round(shippingItem.MeasuredNetWeight, 1);
shippingItem.MeasuredGrossWeight = double.Round(shippingItem.MeasuredGrossWeight, 1);
}
}

View File

@ -18,13 +18,13 @@ public class ShippingItemPalletDbTable : MgDbTableBase<ShippingItemPallet>
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);
}
@ -34,10 +34,11 @@ public class ShippingItemPalletDbTable : MgDbTableBase<ShippingItemPallet>
{
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<ShippingItemPallet>
public IQueryable<ShippingItemPallet> GetAllByShippingItemIdAsync(int shippingItemId, bool loadRelations)
=> GetAll(loadRelations).Where(sip => sip.ShippingItemId == shippingItemId);
private static void RoundMeasuredValue(ShippingItemPallet shippingItem)
private static void BeforeInsertOrUpdate(ShippingItemPallet shippingItemPallet)
{
shippingItem.NetWeight = double.Round(shippingItem.NetWeight, 1);
shippingItem.GrossWeight = double.Round(shippingItem.GrossWeight, 1);
if (shippingItemPallet.IsValidSafeMeasuringValues()) return;
throw new Exception($"ShippingItemPalletDbTable->BeforeInsertOrUpdate(); Invalid measuring value(s); shippingItemPallet: {shippingItemPallet}");
}
}

View File

@ -11,6 +11,7 @@ public partial class NameCompatibility : INameCompatibility
/// </summary>
public Dictionary<Type, string> TableNames => new Dictionary<Type, string>
{
{ typeof(Pallet), FruitBankConstClient.PalletDbTableName},
{ typeof(Files), FruitBankConstClient.FilesDbTableName},
{ typeof(Partner), FruitBankConstClient.PartnerDbTableName },
{ typeof(Shipping), FruitBankConstClient.ShippingDbTableName },