diff --git a/Nop.Plugin.Misc.AIPlugin/Controllers/FruitBankDataController.cs b/Nop.Plugin.Misc.AIPlugin/Controllers/FruitBankDataController.cs index 069a182..6dd7a57 100644 --- a/Nop.Plugin.Misc.AIPlugin/Controllers/FruitBankDataController.cs +++ b/Nop.Plugin.Misc.AIPlugin/Controllers/FruitBankDataController.cs @@ -160,7 +160,7 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Controllers { _logger.Detail($"GetShippingDocumentById invoked; id: {id}"); - return await ctx.ShippingDocuments.GetByIdAsync(id); + return await ctx.ShippingDocuments.GetByIdAsync(id, true); } [SignalR(SignalRTags.UpdateShippingDocument)] @@ -171,7 +171,7 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Controllers _logger.Detail($"UpdateShippingDocument invoked; id: {shippingDocument.Id}"); await ctx.ShippingDocuments.UpdateAsync(shippingDocument); - return await ctx.ShippingDocuments.GetByIdAsync(shippingDocument.Id, shippingDocument.Shipping != null); + return await ctx.ShippingDocuments.GetByIdAsync(shippingDocument.Id, shippingDocument.Shipping != null || shippingDocument.Partner != null); } [SignalR(SignalRTags.GetMeasuringUsers)] diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FilesDbTable.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FilesDbTable.cs new file mode 100644 index 0000000..3e15761 --- /dev/null +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FilesDbTable.cs @@ -0,0 +1,14 @@ +using FruitBank.Common.Entities; +using Mango.Nop.Core.Repositories; +using Nop.Core.Caching; +using Nop.Core.Configuration; +using Nop.Core.Events; +using Nop.Data; +using Nop.Services.Logging; + +namespace Nop.Plugin.Misc.FruitBankPlugin.Domains.DataLayer; + +public class FilesDbTable(IEventPublisher eventPublisher, INopDataProvider dataProvider, IShortTermCacheManager shortTermCacheManager, IStaticCacheManager staticCacheManager, AppSettings appSettings, ILogger logger) : MgDbTableBase(eventPublisher, dataProvider, shortTermCacheManager, staticCacheManager, appSettings, logger) +{ + +} \ No newline at end of file diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs index 4ff2f63..82277cf 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs @@ -25,27 +25,37 @@ using Mango.Nop.Core.Dtos; namespace Nop.Plugin.Misc.FruitBankPlugin.Domains.DataLayer; -public class FruitBankDbContext : MgDbContextBase, IPartnerDbSet, IShippingDbSet, IShippingDocumentDbSet, IShippingItemDbSet, IShippingItemPalletDbSet +public class FruitBankDbContext : MgDbContextBase, + IPartnerDbSet, + IShippingDbSet, + IShippingDocumentDbSet, + IShippingItemDbSet, + IShippingItemPalletDbSet, + IShippingDocumentToFilesDbSet, + IFilesDbSet { private readonly FruitBankAttributeService _fruitBankAttributeService; private readonly IStoreContext _storeContext; private readonly IProductService _productService; private readonly IStaticCacheManager _staticCacheManager; - + public PartnerDbTable Partners { get; set; } public ShippingDbTable Shippings { get; set; } public ShippingDocumentDbTable ShippingDocuments { get; set; } public ShippingItemDbTable ShippingItems { get; set; } public ShippingItemPalletDbTable ShippingItemPallets { get; set; } + public FilesDbTable Files { get; set; } + public ShippingDocumentToFilesDbTable ShippingDocumentToFiles { get; set; } + public IRepository Products { get; set; } public IRepository Customers { get; set; } public IRepository CustomerRoles { get; set; } public IRepository CustomerRoleMappings { get; set; } - public FruitBankDbContext(INopDataProvider dataProvider, ILockService lockService, FruitBankAttributeService fruitBankAttributeService, IStoreContext storeContext, - PartnerDbTable partnerDbTable, ShippingDbTable shippingDbTable, ShippingDocumentDbTable shippingDocumentDbTable, ShippingItemDbTable shippingItemDbTable, ShippingItemPalletDbTable shippingItemPalletDbTable, + PartnerDbTable partnerDbTable, ShippingDbTable shippingDbTable, ShippingDocumentDbTable shippingDocumentDbTable, ShippingItemDbTable shippingItemDbTable, + ShippingItemPalletDbTable shippingItemPalletDbTable, FilesDbTable filesDbTable, ShippingDocumentToFilesDbTable shippingDocumentToFilesDbTable, IProductService productService, IStaticCacheManager staticCacheManager, IRepository productRepository, IRepository customerRepository, @@ -58,11 +68,13 @@ public class FruitBankDbContext : MgDbContextBase, IPartnerDbSet _staticCacheManager = staticCacheManager; _fruitBankAttributeService = fruitBankAttributeService; + Files = filesDbTable; Partners = partnerDbTable; Shippings = shippingDbTable; ShippingDocuments = shippingDocumentDbTable; ShippingItems = shippingItemDbTable; ShippingItemPallets = shippingItemPalletDbTable; + ShippingDocumentToFiles = shippingDocumentToFilesDbTable; Products = productRepository; Customers = customerRepository; diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/Interfaces/IFilesDbSet.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/Interfaces/IFilesDbSet.cs new file mode 100644 index 0000000..7d08c28 --- /dev/null +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/Interfaces/IFilesDbSet.cs @@ -0,0 +1,10 @@ +using FruitBank.Common.Entities; +using Mango.Nop.Core.Interfaces; +using Nop.Data; + +namespace Nop.Plugin.Misc.FruitBankPlugin.Domains.DataLayer.Interfaces; + +public interface IFilesDbSet : IMgDbTableBase where TDbTable : IRepository +{ + public TDbTable Files { get; set; } +} \ No newline at end of file diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/Interfaces/IShippingDocumentToFilesDbSet.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/Interfaces/IShippingDocumentToFilesDbSet.cs new file mode 100644 index 0000000..7a2761d --- /dev/null +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/Interfaces/IShippingDocumentToFilesDbSet.cs @@ -0,0 +1,10 @@ +using FruitBank.Common.Entities; +using Mango.Nop.Core.Interfaces; +using Nop.Data; + +namespace Nop.Plugin.Misc.FruitBankPlugin.Domains.DataLayer.Interfaces; + +public interface IShippingDocumentToFilesDbSet : IMgDbTableBase where TDbTable : IRepository +{ + public TDbTable ShippingDocumentToFiles { get; set; } +} \ No newline at end of file diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/PartnerDbTable.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/PartnerDbTable.cs index 712516e..63f2fc6 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/PartnerDbTable.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/PartnerDbTable.cs @@ -25,56 +25,10 @@ public class PartnerDbTable : MgDbTableBase ? GetAll() .LoadWith(sd => sd.ShippingDocuments).ThenLoad(s => s.Shipping) .LoadWith(sd => sd.ShippingDocuments).ThenLoad(si => si.ShippingItems).ThenLoad(sip => sip.ShippingItemPallets) + .LoadWith(sd => sd.ShippingDocuments).ThenLoad(sdtof => sdtof.ShippingDocumentToFiles).ThenLoad(f => f.ShippingDocumentFile) : GetAll(); } public Task GetByIdAsync(int id, bool loadRelations) => GetAll(loadRelations).FirstOrDefaultAsync(p => p.Id == id); - - - //public IOrderedQueryable GetAllLastBidByAuctionId(int auctionId) - //{ - // return GetAllByAuctionId(auctionId) - // .OrderByDescending(x => x.Id) - // .GroupBy(x => x.AuctionId, (_, bids) => bids.FirstOrDefault()) - // .OrderByDescending(percentGroup => percentGroup.Id); - //} - - //public IOrderedQueryable GetLastAuctionBidByProductToAuctionId(int productToAuctionId) - // => GetAllByProductToAuctionId(productToAuctionId).OrderByDescending(x => x.Id); - - //public Task GetBidsCountByProductToAuctionIdAsync(int productToAuctionId) - // => Table.CountAsync(x => x.ProductAuctionMappingId == productToAuctionId); - - //public IQueryable GetAllByAuctionId(int auctionId) - // => Table.Where(x => x.AuctionId == auctionId); - - //public IQueryable GetAllByProductToAuctionId(int productToAuctionId) - // => Table.Where(x => x.ProductAuctionMappingId == productToAuctionId); - - //public Task HasBidByProductToAuctionIdAsync(int productToAuctionId) - //{ - // return Table.AnyAsync(x => x.ProductAuctionMappingId == productToAuctionId); - //} - - //public async Task RevertByProductToAuctionIdAsync(int productToAuctionId) - //{ - // var lastBid = await GetLastAuctionBidByProductToAuctionId(productToAuctionId).FirstOrDefaultAsync(); - // if (lastBid == null) - // { - // await Logger.InformationAsync($"AuctionBidDbTable.RevertByProductToAuctionIdAsync(); (lastBid == null); productToAuction.Id: {productToAuctionId}"); - // return null; - // } - - // await DeleteAsync(lastBid); - // return await GetLastAuctionBidByProductToAuctionId(productToAuctionId).FirstOrDefaultAsync(); - //} - - //public async Task DeleteAllByProductToAuctionIdAsync(int productToAuctionId) - //{ - // var deletedBids = await DeleteAsync(x => x.ProductAuctionMappingId == productToAuctionId); - // await Logger.InformationAsync($"AuctionBidDbTable.DeleteAllByProductToAuctionIdAsync(); productToAuction.Id: {productToAuctionId}; deletedBids: {deletedBids}"); - - // return deletedBids; - //} } \ No newline at end of file diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDbTable.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDbTable.cs index f6421c7..df0f83e 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDbTable.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDbTable.cs @@ -24,6 +24,7 @@ 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) : GetAll(); } diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDocumentDbTable.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDocumentDbTable.cs index 8f150f9..6d5bcbf 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDocumentDbTable.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDocumentDbTable.cs @@ -23,9 +23,10 @@ public class ShippingDocumentDbTable : MgDbTableBase { return loadRelations ? GetAll() - .LoadWith(s => s.Shipping) - .LoadWith(si => si.ShippingItems).ThenLoad(sip => sip.ShippingItemPallets) - .LoadWith(p => p.Partner) + .LoadWith(sd => sd.Shipping) + .LoadWith(sd => sd.ShippingItems).ThenLoad(sip => sip.ShippingItemPallets) + .LoadWith(sd => sd.ShippingDocumentToFiles).ThenLoad(sdtof => sdtof.ShippingDocumentFile) + .LoadWith(sd => sd.Partner) : GetAll(); } diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDocumentToFilesDbTable.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDocumentToFilesDbTable.cs new file mode 100644 index 0000000..bd6e71c --- /dev/null +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDocumentToFilesDbTable.cs @@ -0,0 +1,14 @@ +using FruitBank.Common.Entities; +using Nop.Services.Logging; +using Mango.Nop.Core.Repositories; +using Nop.Core.Caching; +using Nop.Core.Configuration; +using Nop.Core.Events; +using Nop.Data; + +namespace Nop.Plugin.Misc.FruitBankPlugin.Domains.DataLayer; + +public class ShippingDocumentToFilesDbTable(IEventPublisher eventPublisher, INopDataProvider dataProvider, IShortTermCacheManager shortTermCacheManager, IStaticCacheManager staticCacheManager, AppSettings appSettings, ILogger logger) : MgDbTableBase(eventPublisher, dataProvider, shortTermCacheManager, staticCacheManager, appSettings, logger) +{ + +} \ No newline at end of file diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingItemDbTable.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingItemDbTable.cs index 785fad3..b5ac6df 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingItemDbTable.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingItemDbTable.cs @@ -36,6 +36,7 @@ public class ShippingItemDbTable : MgDbTableBase ? GetAll() .LoadWith(si => si.ShippingDocument).ThenLoad(s => s.Shipping) .LoadWith(si => si.ShippingDocument).ThenLoad(p => p.Partner) + .LoadWith(si => si.ShippingDocument).ThenLoad(sd => sd.ShippingDocumentToFiles).ThenLoad(sdtof => sdtof.ShippingDocumentFile) .LoadWith(si => si.ShippingItemPallets) .LoadWith(si => si.Product) : GetAll(); diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingItemPalletDbTable.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingItemPalletDbTable.cs index 9c1471e..e7aaf11 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingItemPalletDbTable.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingItemPalletDbTable.cs @@ -36,6 +36,7 @@ public class ShippingItemPalletDbTable : MgDbTableBase ? 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) : GetAll(); } diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/EventConsumers/FruitBankEventConsumer.cs b/Nop.Plugin.Misc.AIPlugin/Domains/EventConsumers/FruitBankEventConsumer.cs index e494ecd..707cb1c 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/EventConsumers/FruitBankEventConsumer.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/EventConsumers/FruitBankEventConsumer.cs @@ -30,6 +30,9 @@ public class FruitBankEventConsumer(IHttpContextAccessor httpContextAccessor, Fr .Where(si => si.ProductId == product.Id && !si.IsMeasured && si.IsMeasurable != isMeasurableProduct) .ToListAsync(); + foreach (var shippingItem in shippingItems) + shippingItem.IsMeasurable = isMeasurableProduct; + await ctx.ShippingItems.UpdateAsync(shippingItems, false); await base.HandleEventAsync(eventMessage); } diff --git a/Nop.Plugin.Misc.AIPlugin/Infrastructure/PluginNopStartup.cs b/Nop.Plugin.Misc.AIPlugin/Infrastructure/PluginNopStartup.cs index 357dc3c..71b1492 100644 --- a/Nop.Plugin.Misc.AIPlugin/Infrastructure/PluginNopStartup.cs +++ b/Nop.Plugin.Misc.AIPlugin/Infrastructure/PluginNopStartup.cs @@ -60,6 +60,9 @@ public class PluginNopStartup : INopStartup services.AddScoped(); services.AddScoped(); 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 32de6f6..b2b9ccf 100644 --- a/Nop.Plugin.Misc.AIPlugin/Mapping/NameCompatibility.cs +++ b/Nop.Plugin.Misc.AIPlugin/Mapping/NameCompatibility.cs @@ -11,11 +11,13 @@ public partial class NameCompatibility : INameCompatibility /// public Dictionary TableNames => new Dictionary { + { typeof(Files), FruitBankConstClient.FilesDbTableName}, { typeof(Partner), FruitBankConstClient.PartnerDbTableName }, { typeof(Shipping), FruitBankConstClient.ShippingDbTableName }, { typeof(ShippingDocument), FruitBankConstClient.ShippingDocumentDbTableName }, { typeof(ShippingItem), FruitBankConstClient.ShippingItemDbTableName}, { typeof(ShippingItemPallet), FruitBankConstClient.ShippingItemPalletDbTableName}, + { typeof(ShippingDocumentToFiles), FruitBankConstClient.ShippingDocumentToFilesDbTableName}, }; diff --git a/Nop.Plugin.Misc.AIPlugin/Services/FruitBankAttributeService.cs b/Nop.Plugin.Misc.AIPlugin/Services/FruitBankAttributeService.cs index 36f2abe..c35463c 100644 --- a/Nop.Plugin.Misc.AIPlugin/Services/FruitBankAttributeService.cs +++ b/Nop.Plugin.Misc.AIPlugin/Services/FruitBankAttributeService.cs @@ -74,7 +74,7 @@ public class FruitBankAttributeService(IGenericAttributeService genericAttribute public async Task InsertOrUpdateMeasuringAttributeValuesAsync(IMeasuringAttributeValues measuringAttributeValues, bool cumulativeWeightUpdate, int storeId) { - if (!measuringAttributeValues.HasMeasuringValues()) throw new Exception($"FruitBankAttributeService->InsertOrUpdateMeasuringAttributeValuesAsync; measuringAttributeValues.HasMeasuringValues() == false; keyGroup: {typeof(TEntity).Name} values: {measuringAttributeValues}"); + if (!measuringAttributeValues.HasMeasuringValues()) throw new Exception($"FruitBankAttributeService->InsertOrUpdateMeasuringAttributeValuesAsync; measuringAttributeValues.HasMeasuringValues() == false; keyGroup: {typeof(TEntity).Name}; values: {measuringAttributeValues}"); var entityId = measuringAttributeValues.Id; var measuringAttributes = await GetMeasuringAttributesAsync(entityId, storeId); @@ -91,7 +91,7 @@ public class FruitBankAttributeService(IGenericAttributeService genericAttribute await UpdateMeasuringWeightAttributeValueAsync(measuringAttributes.Single(ma => ma.Key == NET_WEIGHT_KEY), measuringAttributeValues.NetWeight, cumulativeWeightUpdate); await UpdateMeasuringWeightAttributeValueAsync(measuringAttributes.Single(ma => ma.Key == GROSS_WEIGHT_KEY), measuringAttributeValues.GrossWeight, cumulativeWeightUpdate); await UpdateGenericAttributeAsync(measuringAttributes.Single(ma => ma.Key == IS_MEASURABLE_KEY), measuringAttributeValues.IsMeasurable); - + //var netWeightAttribute = measuringAttributes?.SingleOrDefault(ma => ma.Key == NET_WEIGHT_KEY); //if (netWeightAttribute != null) await UpdateMeasuringWeightAttributeValueAsync(netWeightAttribute, measuringAttributeValues.NetWeight, cumulativeWeightUpdate); //else await InsertGenericAttributeAsync(entityId, NET_WEIGHT_KEY, measuringAttributeValues.NetWeight, storeId);