diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs index ac7e381..aac6e04 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs @@ -4,26 +4,17 @@ using AyCode.Utils.Extensions; using FruitBank.Common.Entities; using FruitBank.Common.Interfaces; using FruitBank.Common.Models; -using FruitBank.Common.Server; -using LinqToDB; -using LinqToDB.Common; -using Mango.Nop.Core.Loggers; using Mango.Nop.Core.Repositories; using Nop.Core; using Nop.Core.Caching; -using Nop.Core.ComponentModel; using Nop.Core.Domain.Catalog; using Nop.Core.Domain.Customers; using Nop.Data; using Nop.Plugin.Misc.FruitBankPlugin.Domains.DataLayer.Interfaces; using Nop.Plugin.Misc.FruitBankPlugin.Services; using Nop.Services.Catalog; -using Nop.Services.Common; -using System.Transactions; -using DevExpress.XtraExport.Helpers; using FruitBank.Common.Dtos; -using Mango.Nop.Core.Dtos; -using Microsoft.CodeAnalysis.CSharp.Syntax; +using Mango.Nop.Core.Extensions; using Nop.Core.Domain.Orders; namespace Nop.Plugin.Misc.FruitBankPlugin.Domains.DataLayer; @@ -185,17 +176,17 @@ public class FruitBankDbContext : MgDbContextBase, { try { - Product? product = null; + ProductDto? productDto = null; var productIsMeasurable = false; if (shippingItem.ProductId > 0) { - product = await Products.GetByIdAsync(shippingItem.ProductId); + productDto = await ProductDtos.GetByIdAsync(shippingItem.ProductId!.Value, true); - if (product == null) + if (productDto == null) throw new Exception($"shippingItem.ProductId > 0 && product == null; shippingItem.ProductId: {shippingItem.ProductId}"); - productIsMeasurable = await _fruitBankAttributeService.IsMeasurableEntityAsync(product.Id); + productIsMeasurable = productDto.IsMeasurable; } shippingItem.IsMeasurable = productIsMeasurable; @@ -211,7 +202,7 @@ public class FruitBankDbContext : MgDbContextBase, var dbShippingItem = await ShippingItems.GetByIdAsync(shippingItem.Id, false); if (dbShippingItem == null) throw new Exception($"dbShippingItem == null; shippingItem.Id: {shippingItem.Id}"); - var isMeasuredPrerequisite = product != null && shippingItem.PalletsOnDocument == shippingItem.ShippingItemPallets.Count + var isMeasuredPrerequisite = productDto != null && shippingItem.PalletsOnDocument == shippingItem.ShippingItemPallets.Count && shippingItem.ShippingItemPallets.All(x => x.IsMeasuredAndValid(shippingItem.IsMeasurable)); SetupShippingItemMeasuringValues(shippingItem, isMeasuredPrerequisite); @@ -234,36 +225,51 @@ public class FruitBankDbContext : MgDbContextBase, if (shippingItem.IsMeasured) { - product!.StockQuantity += productIdChanged ? shippingItem.MeasuredQuantity : shippingItem.MeasuredQuantity - dbShippingItem.MeasuredQuantity; + var quantityInc = productIdChanged ? shippingItem.MeasuredQuantity : shippingItem.MeasuredQuantity - dbShippingItem.MeasuredQuantity; + productDto!.StockQuantity += quantityInc; - if (!await UpdateProductStockQuantityAsync(product, true)) - throw new Exception($"UpdateProductStockQuantity() == false; shippingItem! product.Id: {product.Id}"); + if (!await UpdateProductDtoStockQuantityAsync(productDto, true)) + throw new Exception($"UpdateProductStockQuantity() == false; shippingItem! product.Id: {productDto.Id}"); + + var incomingQuantity = productDto.GenericAttributes.GetValueOrNull(nameof(IIncomingQuantity.IncomingQuantity)); + if (incomingQuantity != null) + { + await _fruitBankAttributeService.UpdateGenericAttributeAsync + (productDto.Id, nameof(IIncomingQuantity.IncomingQuantity), incomingQuantity.Value - quantityInc); + } if (productIsMeasurable) - await _fruitBankAttributeService.InsertOrUpdateMeasuringAttributeValuesAsync(product.Id, + { + await _fruitBankAttributeService.InsertOrUpdateMeasuringAttributeValuesAsync(productDto.Id, productIdChanged ? shippingItem.MeasuredNetWeight : shippingItem.MeasuredNetWeight - dbShippingItem.MeasuredNetWeight, - productIdChanged ? shippingItem.MeasuredGrossWeight : shippingItem.MeasuredGrossWeight - dbShippingItem.MeasuredGrossWeight, shippingItem.IsMeasurable, true); + } } //if (productIdUnchanged || !dbShippingItem.IsMeasured) return true; if (!productIdChanged && (shippingItem.IsMeasured || !dbShippingItem.IsMeasured)) return true; - product = await Products.GetByIdAsync(dbShippingItem.ProductId); - - if (product != null) + productDto = await ProductDtos.GetByIdAsync(dbShippingItem.ProductId); + + if (productDto != null) { - productIsMeasurable = await _fruitBankAttributeService.IsMeasurableEntityAsync(product.Id); - product.StockQuantity -= dbShippingItem.MeasuredQuantity; + productIsMeasurable = productDto.IsMeasurable; + productDto.StockQuantity -= dbShippingItem.MeasuredQuantity; - if (!await UpdateProductStockQuantityAsync(product, true)) - throw new Exception($"UpdateProductStockQuantity() == false; dbShippingItem! product.Id: {product.Id}"); + if (!await UpdateProductDtoStockQuantityAsync(productDto, true)) + throw new Exception($"UpdateProductStockQuantity() == false; dbShippingItem! product.Id: {productDto.Id}"); + + var incomingQuantity = productDto.GenericAttributes.GetValueOrNull(nameof(IIncomingQuantity.IncomingQuantity)); + if (incomingQuantity != null) + { + await _fruitBankAttributeService.UpdateGenericAttributeAsync + (productDto.Id, nameof(IIncomingQuantity.IncomingQuantity), incomingQuantity.Value + dbShippingItem.MeasuredQuantity); + } if (!productIsMeasurable) return true; - var measuringValues = new MeasuringAttributeValues(product.Id, -dbShippingItem.MeasuredNetWeight, -dbShippingItem.MeasuredGrossWeight, dbShippingItem.IsMeasurable); + var measuringValues = new MeasuringAttributeValues(productDto.Id, -dbShippingItem.MeasuredNetWeight, dbShippingItem.IsMeasurable); await _fruitBankAttributeService.InsertOrUpdateMeasuringAttributeValuesAsync(measuringValues, true); - } else Logger.Warning($"product == null; dbShippingItem.ProductId: {dbShippingItem.ProductId}"); //else //TODO: productIdUnchanged-et lekezelni! - J. @@ -389,7 +395,7 @@ public class FruitBankDbContext : MgDbContextBase, (orderItemDto.Id, nameof(IMeasuringNetWeight.NetWeight), orderItemDto.NetWeight); await _fruitBankAttributeService.InsertOrUpdateMeasuringAttributeValuesAsync - (orderItemDto.ProductId, -(orderItemDto.NetWeight-gaNetWeight), 0, orderItemDto.IsMeasurable, true); + (orderItemDto.ProductId, -(orderItemDto.NetWeight-gaNetWeight), orderItemDto.IsMeasurable, true); } return orderDto; @@ -439,22 +445,22 @@ public class FruitBankDbContext : MgDbContextBase, return true; } - private async Task UpdateProductStockQuantityAsync(int productId, bool publishEvent) + private async Task UpdateProductDtoStockQuantityAsync(int productDtoId, bool publishEvent) { - var product = await Products.GetByIdAsync(productId); - if (product != null) return await UpdateProductStockQuantityAsync(product, publishEvent); + var productDto = await ProductDtos.GetByIdAsync(productDtoId); + if (productDto != null) return await UpdateProductDtoStockQuantityAsync(productDto, publishEvent); - Logger.Error($"product == null; id: {productId}"); + Logger.Error($"product == null; id: {productDtoId}"); return await Task.FromResult(false); } - private async Task UpdateProductStockQuantityAsync(Product product, bool publishEvent) + private async Task UpdateProductDtoStockQuantityAsync(ProductDto productDto, bool publishEvent) { //Itt mi legyen? RollBack? - J. - if (product.StockQuantity < 0) - Logger.Error($"product.StockQuantity < 0; Id: {product.Id}; StockQuantity: {product.StockQuantity}"); + if (productDto.StockQuantity < 0) + Logger.Error($"productDto.StockQuantity < 0; Id: {productDto.Id}; StockQuantity: {productDto.StockQuantity}"); - await Products.UpdateAsync(product, publishEvent); + await ProductDtos.UpdateAsync(productDto, publishEvent); return await Task.FromResult(true); //var updatedRowsCount = await DataProvider.ExecuteNonQueryAsync($"update product set {nameof(Product.StockQuantity)} = {product.StockQuantity} where {nameof(Product.Id)} = {product.Id}"); diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/OrderDtoDbTable.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/OrderDtoDbTable.cs index f890da3..174096c 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/OrderDtoDbTable.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/OrderDtoDbTable.cs @@ -11,7 +11,7 @@ using Nop.Services.Logging; namespace Nop.Plugin.Misc.FruitBankPlugin.Domains.DataLayer; -public class OrderDtoDbTable : MgDbTableBase +public class OrderDtoDbTable : MgDtoDbTableBase { public OrderDtoDbTable(IEventPublisher eventPublisher, INopDataProvider dataProvider, IShortTermCacheManager shortTermCacheManager, IStaticCacheManager staticCacheManager, AppSettings appSettings, ILogger logger) : base(eventPublisher, dataProvider, shortTermCacheManager, staticCacheManager, appSettings, logger) @@ -28,9 +28,9 @@ public class OrderDtoDbTable : MgDbTableBase .LoadWith(o => o.OrderItemDtos).ThenLoad(oi => oi.OrderItemPallets); } - public Task GetByIdAsync(int orderId) => GetAll(true).Where(x => x.Id == orderId).FirstOrDefaultAsync(null); + public Task GetByIdAsync(int orderId, bool loadRelations) => GetAll(loadRelations).Where(x => x.Id == orderId).FirstOrDefaultAsync(null); - public IQueryable GetAllByOrderStatus(OrderStatus orderStatus) => GetAll(true).Where(o => o.OrderStatusId == (int)orderStatus); + public IQueryable GetAllByOrderStatus(OrderStatus orderStatus, bool loadRelations = true) => GetAll(loadRelations).Where(o => o.OrderStatusId == (int)orderStatus); - public IQueryable GetAllByIds(IEnumerable orderIds) => GetAll(true).Where(o => orderIds.Contains(o.Id)); + public IQueryable GetAllByIds(IEnumerable orderIds, bool loadRelations = true) => GetAll(loadRelations).Where(o => orderIds.Contains(o.Id)); } diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/OrderItemDtoDbTable.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/OrderItemDtoDbTable.cs index 81e4d04..d3f8aca 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/OrderItemDtoDbTable.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/OrderItemDtoDbTable.cs @@ -3,13 +3,14 @@ using LinqToDB; using Mango.Nop.Core.Repositories; using Nop.Core.Caching; using Nop.Core.Configuration; +using Nop.Core.Domain.Orders; using Nop.Core.Events; using Nop.Data; using Nop.Services.Logging; namespace Nop.Plugin.Misc.FruitBankPlugin.Domains.DataLayer; -public class OrderItemDtoDbTable : MgDbTableBase +public class OrderItemDtoDbTable : MgDtoDbTableBase { public OrderItemDtoDbTable(IEventPublisher eventPublisher, INopDataProvider dataProvider, IShortTermCacheManager shortTermCacheManager, IStaticCacheManager staticCacheManager, AppSettings appSettings, ILogger logger) : base(eventPublisher, dataProvider, shortTermCacheManager, staticCacheManager, appSettings, logger) @@ -25,7 +26,7 @@ public class OrderItemDtoDbTable : MgDbTableBase .LoadWith(oi => oi.ProductDto).ThenLoad(prod => prod.GenericAttributes); } - public Task GetByIdAsync(int orderItemId) => GetAll(true).Where(x => x.Id == orderItemId).FirstOrDefaultAsync(null); + public Task GetByIdAsync(int orderItemId, bool loadRelations) => GetAll(loadRelations).Where(x => x.Id == orderItemId).FirstOrDefaultAsync(null); - public IQueryable GetAllByOrderId(int orderId)=> GetAll(true).Where(o => o.OrderId == orderId); + public IQueryable GetAllByOrderId(int orderId, bool loadRelations = true)=> GetAll(loadRelations).Where(o => o.OrderId == orderId); } \ No newline at end of file diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ProductDtoDbTable.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ProductDtoDbTable.cs index cb3bc6e..ad69ff8 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ProductDtoDbTable.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ProductDtoDbTable.cs @@ -3,13 +3,14 @@ using LinqToDB; using Mango.Nop.Core.Repositories; using Nop.Core.Caching; using Nop.Core.Configuration; +using Nop.Core.Domain.Catalog; using Nop.Core.Events; using Nop.Data; using Nop.Services.Logging; namespace Nop.Plugin.Misc.FruitBankPlugin.Domains.DataLayer; -public class ProductDtoDbTable : MgDbTableBase +public class ProductDtoDbTable : MgDtoDbTableBase { public ProductDtoDbTable(IEventPublisher eventPublisher, INopDataProvider dataProvider, IShortTermCacheManager shortTermCacheManager, IStaticCacheManager staticCacheManager, AppSettings appSettings, ILogger logger) : base(eventPublisher, dataProvider, shortTermCacheManager, staticCacheManager, appSettings, logger) @@ -21,7 +22,7 @@ public class ProductDtoDbTable : MgDbTableBase return GetAll().LoadWith(p => p.GenericAttributes); } - public Task GetByIdAsync(int productId) => GetAll(true).Where(x => x.Id == productId).FirstOrDefaultAsync(null); + public Task GetByIdAsync(int productId, bool loadRelations) => GetAll(loadRelations).Where(x => x.Id == productId).FirstOrDefaultAsync(null); - public IQueryable GetAllByIds(IEnumerable productIds) => GetAll(true).Where(p => productIds.Contains(p.Id)); + public IQueryable GetAllByIds(IEnumerable productIds, bool loadRelations = true) => GetAll(loadRelations).Where(p => productIds.Contains(p.Id)); } \ No newline at end of file diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/EventConsumers/FruitBankEventConsumer.cs b/Nop.Plugin.Misc.AIPlugin/Domains/EventConsumers/FruitBankEventConsumer.cs index 71e3b24..c0e100d 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/EventConsumers/FruitBankEventConsumer.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/EventConsumers/FruitBankEventConsumer.cs @@ -1,9 +1,12 @@ -using AyCode.Core.Loggers; +using System.Diagnostics.CodeAnalysis; +using AyCode.Core.Loggers; using AyCode.Interfaces.Entities; +using FruitBank.Common.Dtos; using FruitBank.Common.Entities; using FruitBank.Common.Interfaces; using FruitBank.Common.Loggers; using FruitBank.Common.Server; +using Humanizer; using Mango.Nop.Core.Loggers; using Mango.Nop.Services; using Microsoft.AspNetCore.Http; @@ -36,58 +39,83 @@ public class FruitBankEventConsumer(IHttpContextAccessor httpContextAcc, FruitBa { var product = eventMessage.Entity; - await SaveProductCustomAttributesAsync(eventMessage.Entity); + var saveProductCustomAttributesResult = await SaveProductCustomAttributesAsync(eventMessage.Entity); - var isMeasurableProduct = await fruitBankAttributeService.IsMeasurableEntityAsync(product.Id); + //var isMeasurableProduct = await fruitBankAttributeService.IsMeasurableEntityAsync(product.Id); - var shippingItems = await ctx.ShippingItems.Table - .Where(si => si.ProductId == product.Id && !si.IsMeasured && si.IsMeasurable != isMeasurableProduct) - .ToListAsync(); + if (saveProductCustomAttributesResult is { IsMeasurableChanged: true, IsMeasurable: not null }) + { + var shippingItems = await ctx.ShippingItems.Table + .Where(si => si.ProductId == product.Id && !si.IsMeasured && si.IsMeasurable != saveProductCustomAttributesResult.IsMeasurable.Value) + .ToListAsync(); - foreach (var shippingItem in shippingItems) - shippingItem.IsMeasurable = isMeasurableProduct; + if (shippingItems.Count > 0) + { + foreach (var shippingItem in shippingItems) shippingItem.IsMeasurable = saveProductCustomAttributesResult.IsMeasurable.Value; + await ctx.ShippingItems.UpdateAsync(shippingItems, false); + } + } - await ctx.ShippingItems.UpdateAsync(shippingItems, false); await base.HandleEventAsync(eventMessage); } public override async Task HandleEventAsync(EntityInsertedEvent eventMessage) { - await SaveProductCustomAttributesAsync(eventMessage.Entity); + await SaveProductCustomAttributesAsync(eventMessage.Entity); //TODO: ez ide miért kell? - J. await base.HandleEventAsync(eventMessage); } - private async Task SaveProductCustomAttributesAsync(Product product) + /// + /// + /// + /// + /// IsMeasureable + /// + + private async Task<(bool IsMeasurableChanged, bool? IsMeasurable)> SaveProductCustomAttributesAsync(Product product) { - if (product == null) return; + if (product == null) return (false, null); - var form = HttpContextAccessor.HttpContext?.Request?.Form; - if (form == null || form.Count == 0) return; + var hasForm = HttpContextAccessor.HttpContext?.Request?.HasFormContentType ?? false; + var form = hasForm ? HttpContextAccessor.HttpContext.Request.Form : null; - if (form.ContainsKey(nameof(IMeasurable.IsMeasurable)) && form.ContainsKey(nameof(IMeasuringNetWeight.NetWeight))) + if (form == null || form.Count == 0 || + !form.ContainsKey(nameof(IMeasurable.IsMeasurable)) || !form.ContainsKey(nameof(IMeasuringNetWeight.NetWeight)) || + !form.ContainsKey(nameof(IIncomingQuantity.IncomingQuantity)) || !form.ContainsKey(nameof(ITare.Tare))) return (false, null); + + bool? isMeasurable = null; + var isMeasurableChanged = false; + + var productDto = product.Id > 0 ? await ctx.ProductDtos.GetByIdAsync(product.Id, false) : null; + + //IsMeasurable + isMeasurable = form[nameof(IMeasurable.IsMeasurable)].ToString().Contains("true"); + if (productDto == null || productDto.IsMeasurable != isMeasurable.Value) { - var isMeasurable = form[nameof(IMeasurable.IsMeasurable)].ToString().Contains("true"); - //var isMeasurable = CommonHelper.To(form[nameof(IMeasurable.IsMeasurable)].ToString()); - var netWeight = CommonHelper.To(form[nameof(IMeasuringNetWeight.NetWeight)].ToString()); - - await fruitBankAttributeService.InsertOrUpdateMeasuringAttributeValuesAsync(product.Id, netWeight, 0, isMeasurable, false); + await fruitBankAttributeService.InsertOrUpdateGenericAttributeAsync(product.Id, nameof(IMeasurable.IsMeasurable), isMeasurable.Value); + isMeasurableChanged = true; } - if (form.ContainsKey(nameof(ITare.Tare))) - { - var tare = CommonHelper.To(form[nameof(ITare.Tare)].ToString()); - if (tare < 0) throw new Exception($"FruitBankEventConsumer->SaveProductCustomAttributesAsync(); (tare < 0); productId: {product.Id}; tare: {tare}"); + //NetWeight + var netWeight = double.Round(CommonHelper.To(form[nameof(IMeasuringNetWeight.NetWeight)].ToString()), 1); + if (productDto == null || productDto.NetWeight != netWeight) + await fruitBankAttributeService.InsertOrUpdateGenericAttributeAsync(product.Id, nameof(IMeasuringNetWeight.NetWeight), netWeight); + + //Tára + var tare = double.Round(CommonHelper.To(form[nameof(ITare.Tare)].ToString()), 1); + if (tare < 0) throw new Exception($"FruitBankEventConsumer->SaveProductCustomAttributesAsync(); (tare < 0); productId: {product.Id}; tare: {tare}"); + if (productDto == null || productDto.Tare != tare) await fruitBankAttributeService.InsertOrUpdateGenericAttributeAsync(product.Id, nameof(ITare.Tare), tare); - } - if (form.ContainsKey(nameof(IIncomingQuantity.IncomingQuantity))) - { - var incomingQuantity = CommonHelper.To(form[nameof(IIncomingQuantity.IncomingQuantity)].ToString()); - if (incomingQuantity < 0) throw new Exception($"FruitBankEventConsumer->SaveProductCustomAttributesAsync(); (incomingQuantity < 0); productId: {product.Id}; incomingQuantity: {incomingQuantity}"); + //IncomingQuantity + var incomingQuantity = CommonHelper.To(form[nameof(IIncomingQuantity.IncomingQuantity)].ToString()); + if (incomingQuantity < 0) throw new Exception($"FruitBankEventConsumer->SaveProductCustomAttributesAsync(); (incomingQuantity < 0); productId: {product.Id}; incomingQuantity: {incomingQuantity}"); + if (productDto == null || productDto.IncomingQuantity != incomingQuantity) await fruitBankAttributeService.InsertOrUpdateGenericAttributeAsync(product.Id, nameof(IIncomingQuantity.IncomingQuantity), incomingQuantity); - } + + return (isMeasurableChanged, isMeasurable); } public async Task HandleEventAsync(EntityInsertedEvent eventMessage) diff --git a/Nop.Plugin.Misc.AIPlugin/Factories/CustomOrderModelFactory.cs b/Nop.Plugin.Misc.AIPlugin/Factories/CustomOrderModelFactory.cs index 9732000..844463e 100644 --- a/Nop.Plugin.Misc.AIPlugin/Factories/CustomOrderModelFactory.cs +++ b/Nop.Plugin.Misc.AIPlugin/Factories/CustomOrderModelFactory.cs @@ -44,7 +44,7 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Factories { public class CustomOrderModelFactory : MgOrderModelFactory { - private FruitBankDbContext _ctx; + private readonly FruitBankDbContext _ctx; private readonly IOrderMeasurementService _orderMeasurementService; #region Ctor diff --git a/Nop.Plugin.Misc.AIPlugin/Factories/CustomProductModelFactory.cs b/Nop.Plugin.Misc.AIPlugin/Factories/CustomProductModelFactory.cs index f7d0a8e..9bb3a9b 100644 --- a/Nop.Plugin.Misc.AIPlugin/Factories/CustomProductModelFactory.cs +++ b/Nop.Plugin.Misc.AIPlugin/Factories/CustomProductModelFactory.cs @@ -30,7 +30,7 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Factories; public class CustomProductModelFactory : MgProductModelFactory { - private FruitBankDbContext _ctx; + private readonly FruitBankDbContext _ctx; public CustomProductModelFactory(FruitBankDbContext ctx,CatalogSettings catalogSettings, CurrencySettings currencySettings, IAddressService addressService, IBaseAdminModelFactory baseAdminModelFactory, ICategoryService categoryService, ICurrencyService currencyService, ICustomerService customerService, IDateTimeHelper dateTimeHelper, IDiscountService discountService, IDiscountSupportedModelFactory discountSupportedModelFactory, ILocalizationService localizationService, ILocalizedModelFactory localizedModelFactory, IManufacturerService manufacturerService, IMeasureService measureService, IOrderService orderService, IPictureService pictureService, IPriceFormatter priceFormatter, IProductAttributeFormatter productAttributeFormatter, IProductAttributeParser productAttributeParser, IProductAttributeService productAttributeService, IProductService productService, IProductTagService productTagService, IProductTemplateService productTemplateService, ISettingModelFactory settingModelFactory, ISettingService settingService, IShipmentService shipmentService, IShippingService shippingService, IShoppingCartService shoppingCartService, ISpecificationAttributeService specificationAttributeService, IStoreMappingSupportedModelFactory storeMappingSupportedModelFactory, IStoreContext storeContext, IStoreService storeService, IUrlRecordService urlRecordService, IVideoService videoService, IWorkContext workContext, MeasureSettings measureSettings, NopHttpClient nopHttpClient, TaxSettings taxSettings, VendorSettings vendorSettings, IGenericAttributeService genericAttributeService) : base(catalogSettings, currencySettings, addressService, baseAdminModelFactory, categoryService, currencyService, customerService, dateTimeHelper, discountService, discountSupportedModelFactory, localizationService, localizedModelFactory, manufacturerService, measureService, orderService, pictureService, priceFormatter, productAttributeFormatter, productAttributeParser, productAttributeService, productService, productTagService, productTemplateService, settingModelFactory, settingService, shipmentService, shippingService, shoppingCartService, specificationAttributeService, storeMappingSupportedModelFactory, storeContext, storeService, urlRecordService, videoService, workContext, measureSettings, nopHttpClient, taxSettings, vendorSettings, genericAttributeService) { @@ -52,11 +52,6 @@ public class CustomProductModelFactory : MgProductModelFactory { - //Console.WriteLine(productModelExtended.Id); - //productModelExtended.StockQuantityStr = productModelExtended.StockQuantity.ToString(); - //productModelExtended.NetWeight = 101.2d; - //return; - productDtosById ??= await _ctx.ProductDtos.GetAllByIds(productListModel.Data.Select(x => x.Id)).ToDictionaryAsync(k => k.Id, v => v); var productDto = productDtosById[productModelExtended.Id]; diff --git a/Nop.Plugin.Misc.AIPlugin/Factories/MgBase/MgOrderModelFactory.cs b/Nop.Plugin.Misc.AIPlugin/Factories/MgBase/MgOrderModelFactory.cs index ac63bbf..7ea8e50 100644 --- a/Nop.Plugin.Misc.AIPlugin/Factories/MgBase/MgOrderModelFactory.cs +++ b/Nop.Plugin.Misc.AIPlugin/Factories/MgBase/MgOrderModelFactory.cs @@ -162,7 +162,8 @@ public class MgOrderModelFactory : OrderMode orderListModel.Data = null; - var orderListModelExtended = orderListModel.ToJson().JsonTo(); + //var orderListModelExtended = orderListModel.ToJson().JsonTo(); + var orderListModelExtended = orderListModel.CloneTo(); orderListModelExtended.Data = extendedRows; return orderListModelExtended; diff --git a/Nop.Plugin.Misc.AIPlugin/Factories/MgBase/MgProductModelFactory.cs b/Nop.Plugin.Misc.AIPlugin/Factories/MgBase/MgProductModelFactory.cs index 0153cf0..8754204 100644 --- a/Nop.Plugin.Misc.AIPlugin/Factories/MgBase/MgProductModelFactory.cs +++ b/Nop.Plugin.Misc.AIPlugin/Factories/MgBase/MgProductModelFactory.cs @@ -156,7 +156,8 @@ public class MgProductModelFactory : Pro productListModel.Data = null; - var productListModelExtended = productListModel.ToJson().JsonTo(); + //var productListModelExtended = productListModel.ToJson().JsonTo(); + var productListModelExtended = productListModel.CloneTo(); productListModelExtended.Data = extendedRows; return productListModelExtended; diff --git a/Nop.Plugin.Misc.AIPlugin/Services/FruitBankAttributeService.cs b/Nop.Plugin.Misc.AIPlugin/Services/FruitBankAttributeService.cs index ea6f623..a3a1f0e 100644 --- a/Nop.Plugin.Misc.AIPlugin/Services/FruitBankAttributeService.cs +++ b/Nop.Plugin.Misc.AIPlugin/Services/FruitBankAttributeService.cs @@ -10,7 +10,6 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Services; public class FruitBankAttributeService(IGenericAttributeService genericAttributeService, IStoreContext storeContext) { private const string NET_WEIGHT_KEY = nameof(IMeasuringAttributeValues.NetWeight); - private const string GROSS_WEIGHT_KEY = nameof(IMeasuringAttributeValues.GrossWeight); private const string IS_MEASURABLE_KEY = nameof(IMeasuringAttributeValues.IsMeasurable); @@ -31,11 +30,11 @@ public class FruitBankAttributeService(IGenericAttributeService genericAttribute public async Task?> GetMeasuringAttributesAsync(int entityId, int storeId) { var measuringAttributes = (await genericAttributeService.GetAttributesForEntityAsync(entityId, typeof(TEntity).Name)) - .Where(ga => ga.StoreId == storeId && ga.Key is NET_WEIGHT_KEY or GROSS_WEIGHT_KEY or IS_MEASURABLE_KEY) + .Where(ga => ga.StoreId == storeId && ga.Key is NET_WEIGHT_KEY or IS_MEASURABLE_KEY) .ToList(); if (measuringAttributes.Count == 0) return null; - if (measuringAttributes.Count != 3) throw new Exception($"FruitBankAttributeService->GetMeasuringAttributesAsync(); measuringAttributes.Count != 3; entityId: {entityId}"); + if (measuringAttributes.Count != 2) throw new Exception($"FruitBankAttributeService->GetMeasuringAttributesAsync(); measuringAttributes.Count != 2; entityId: {entityId}"); return measuringAttributes; } @@ -51,7 +50,6 @@ public class FruitBankAttributeService(IGenericAttributeService genericAttribute var measuringAttributeValues = new MeasuringAttributeValues( entityId, CommonHelper.To(measuringAttributes.Single(ga => ga.Key == NET_WEIGHT_KEY).Value), - CommonHelper.To(measuringAttributes.Single(ga => ga.Key == GROSS_WEIGHT_KEY).Value), CommonHelper.To(measuringAttributes.Single(ga => ga.Key == IS_MEASURABLE_KEY).Value)); return measuringAttributeValues; @@ -64,13 +62,12 @@ public class FruitBankAttributeService(IGenericAttributeService genericAttribute return measurableAttribute != null && CommonHelper.To(measurableAttribute.Value); } - public async Task InsertOrUpdateMeasuringAttributeValuesAsync(int entityId, double netWeight, double grossWeight, bool isMeasurable, bool cumulativeWeightUpdate) + public async Task InsertOrUpdateMeasuringAttributeValuesAsync(int entityId, double netWeight, bool isMeasurable, bool cumulativeWeightUpdate) { var measuringAttributeValues = new MeasuringAttributeValues { Id = entityId, NetWeight = netWeight, - GrossWeight = grossWeight, IsMeasurable = isMeasurable }; @@ -91,27 +88,15 @@ public class FruitBankAttributeService(IGenericAttributeService genericAttribute if (measuringAttributes == null) { await InsertGenericAttributeAsync(entityId, NET_WEIGHT_KEY, double.Round(measuringAttributeValues.NetWeight, 1), storeId); - await InsertGenericAttributeAsync(entityId, GROSS_WEIGHT_KEY, double.Round(measuringAttributeValues.GrossWeight, 1), storeId); await InsertGenericAttributeAsync(entityId, IS_MEASURABLE_KEY, measuringAttributeValues.IsMeasurable, storeId); return; } 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); - - //var grossWeightAttribute = measuringAttributes?.SingleOrDefault(ma => ma.Key == GROSS_WEIGHT_KEY); - //if (grossWeightAttribute != null) await UpdateMeasuringWeightAttributeValueAsync(grossWeightAttribute, measuringAttributeValues.GrossWeight, cumulativeWeightUpdate); - //else await InsertGenericAttributeAsync(entityId, GROSS_WEIGHT_KEY, measuringAttributeValues.GrossWeight, storeId); - - //var isMeasurableAttribute = measuringAttributes?.SingleOrDefault(ma => ma.Key == IS_MEASURABLE_KEY); - //if (isMeasurableAttribute != null) await UpdateGenericAttributeAsync(isMeasurableAttribute, measuringAttributeValues.IsMeasurable); - //else await InsertGenericAttributeAsync(entityId, IS_MEASURABLE_KEY, measuringAttributeValues.IsMeasurable, storeId); + //TODO: ezzel mi legyen? - J. + //await UpdateGenericAttributeAsync(measuringAttributes.Single(ma => ma.Key == IS_MEASURABLE_KEY), measuringAttributeValues.IsMeasurable); } private async Task UpdateMeasuringWeightAttributeValueAsync(GenericAttribute genericAttribute, double newWeightValue, bool cumulativeWeightUpdate)