From c750b33651913060473fafa703edf1743a2cc57b Mon Sep 17 00:00:00 2001 From: Loretta Date: Tue, 18 Nov 2025 12:52:08 +0100 Subject: [PATCH 1/4] fixes --- .../Domains/DataLayer/FruitBankDbContext.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs index fe05339..06855d3 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs @@ -315,7 +315,7 @@ public class FruitBankDbContext : MgDbContextBase, //await _fruitBankAttributeService.InsertOrUpdateMeasuringAttributeValuesAsync(productDto.Id, weightToChange, shippingItem.IsMeasurable, true); } - await UpdateStockQuantityAndWeightAsync(productDto, quantityInc, $"Bejövő mérés, shippingItem: #{shippingItem.Id}", weightToChange); + await UpdateStockQuantityAndWeightAsync(productDto, quantityInc, $"Áru bevételezés, shippingItem: #{shippingItem.Id}", weightToChange); //productDto!.StockQuantity += quantityInc; } @@ -346,7 +346,7 @@ public class FruitBankDbContext : MgDbContextBase, //} await UpdateStockQuantityAndWeightAsync(productDto, -dbShippingItem.MeasuredQuantity, - $"Bejövő mérés, ShippingItem.Id: #{shippingItem.Id}. Product.Id megváltozott, #{productDto.Id}->#{shippingItem.ProductId}!", + $"Áru bevételezés, ShippingItem.Id: #{shippingItem.Id}. Product.Id megváltozott, #{productDto.Id}->#{shippingItem.ProductId}!", -dbShippingItem.MeasuredNetWeight); //productDto!.StockQuantity -= dbShippingItem.MeasuredQuantity; @@ -515,7 +515,7 @@ public class FruitBankDbContext : MgDbContextBase, //await _fruitBankAttributeService.InsertOrUpdateMeasuringAttributeValuesAsync(orderItemDto.ProductId, productWeightToChange, orderItemDto.IsMeasurable, true); await UpdateStockQuantityAndWeightAsync(orderItemDto.ProductId, 0, - $"Kimenő mérés, OrderStatus set to complete. Rendelés: #{orderDto.Id}, rendelés tétel: #{orderItemDto.Id}", + $"Áru kiadás, OrderStatus set to complete. Rendelés: #{orderDto.Id}, rendelés tétel: #{orderItemDto.Id}", productWeightToChange); } From 0db7f7f34287269b644af3db1fa342cdd17b2ceb Mon Sep 17 00:00:00 2001 From: Loretta Date: Tue, 18 Nov 2025 13:02:44 +0100 Subject: [PATCH 2/4] ... --- .../Areas/Admin/Controllers/CustomOrderController.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Nop.Plugin.Misc.AIPlugin/Areas/Admin/Controllers/CustomOrderController.cs b/Nop.Plugin.Misc.AIPlugin/Areas/Admin/Controllers/CustomOrderController.cs index fd09144..3e1958e 100644 --- a/Nop.Plugin.Misc.AIPlugin/Areas/Admin/Controllers/CustomOrderController.cs +++ b/Nop.Plugin.Misc.AIPlugin/Areas/Admin/Controllers/CustomOrderController.cs @@ -1212,9 +1212,9 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers } // Validate stock - var stockQuantity = await _productService.GetTotalStockQuantityAsync(product); + //var stockQuantity = await _productService.GetTotalStockQuantityAsync(product); var productDto = productDtosByOrderItemId[productModel.Id]; - var isMeasurable = productDto.IsMeasurable; + //var isMeasurable = productDto.IsMeasurable; //if (stockQuantity < productModel.Quantity) //{ From dd0d4f20973f7380afa31b2c3a5de7cd7ddfcc7e Mon Sep 17 00:00:00 2001 From: Loretta Date: Thu, 20 Nov 2025 08:30:46 +0100 Subject: [PATCH 3/4] improvements, fixes --- .../Controllers/CustomOrderController.cs | 41 +++++++++++++++---- .../Models/Order/OrderSearchModelExtended.cs | 6 +++ .../Controllers/FruitBankDataController.cs | 10 ++++- .../Domains/DataLayer/FruitBankDbContext.cs | 14 ++++++- 4 files changed, 59 insertions(+), 12 deletions(-) diff --git a/Nop.Plugin.Misc.AIPlugin/Areas/Admin/Controllers/CustomOrderController.cs b/Nop.Plugin.Misc.AIPlugin/Areas/Admin/Controllers/CustomOrderController.cs index 3e1958e..a2bf204 100644 --- a/Nop.Plugin.Misc.AIPlugin/Areas/Admin/Controllers/CustomOrderController.cs +++ b/Nop.Plugin.Misc.AIPlugin/Areas/Admin/Controllers/CustomOrderController.cs @@ -2,6 +2,8 @@ using AyCode.Core.Loggers; using AyCode.Services.Server.SignalRs; using AyCode.Services.SignalRs; +using AyCode.Utils.Extensions; +using FluentMigrator.Runner.Generators.Base; using FruitBank.Common.Dtos; using FruitBank.Common.Entities; using FruitBank.Common.Interfaces; @@ -225,10 +227,15 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers OrderStatusIds = orderStatuses, PaymentStatusIds = paymentStatuses, ShippingStatusIds = shippingStatuses, + Length = 50, AvailablePageSizes = "20,50,100,500", + SortColumn = "Id", SortColumnDirection = "desc", }); + model.SetGridSort("Id", "desc"); + model.SetGridPageSize(50, "20,50,100,500"); + return View("~/Plugins/Misc.FruitBankPlugin/Areas/Admin/Views/Order/List.cshtml", model); } @@ -237,6 +244,12 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers public async Task OrderList(OrderSearchModelExtended searchModel) { //prepare model + //if (searchModel.SortColumn.IsNullOrWhiteSpace()) + //{ + // searchModel.SortColumn = "Id"; + // searchModel.SortColumnDirection = "desc"; + //} + var orderListModel = await GetOrderListModelByFilter(searchModel); //var orderListModel = new OrderListModel(); @@ -294,19 +307,29 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers public async Task GetOrderListModelByFilter(OrderSearchModelExtended searchModel) { - - var sortColumnIndex = Request.Form["order[0][column]"].FirstOrDefault(); - var sortDirection = Request.Form["order[0][dir]"].FirstOrDefault(); - - if (!string.IsNullOrEmpty(sortColumnIndex)) + //if (searchModel.SortColumn.IsNullOrWhiteSpace()) { - // Get the column name from the column index - var columnName = Request.Form[$"columns[{sortColumnIndex}][data]"].FirstOrDefault(); + var sortColumnIndex = Request.Form["order[0][column]"].FirstOrDefault(); + var sortDirection = Request.Form["order[0][dir]"].FirstOrDefault(); - searchModel.SortColumn = columnName; - searchModel.SortColumnDirection = sortDirection; // "asc" or "desc" + if (!string.IsNullOrEmpty(sortColumnIndex)) + { + // Get the column name from the column index + var columnName = Request.Form[$"columns[{sortColumnIndex}][data]"].FirstOrDefault(); + + searchModel.SortColumn = columnName; + + if(int.Parse(sortColumnIndex) > 0) searchModel.SortColumnDirection = sortDirection; // "asc" or "desc" + else searchModel.SortColumnDirection = "desc"; + } + //else + //{ + // searchModel.SortColumn = "Id"; + // searchModel.SortColumnDirection = "desc"; + //} } + // Get the paginated data var orderListModel = await _orderModelFactory.PrepareOrderListModelExtendedAsync(searchModel); diff --git a/Nop.Plugin.Misc.AIPlugin/Areas/Admin/Models/Order/OrderSearchModelExtended.cs b/Nop.Plugin.Misc.AIPlugin/Areas/Admin/Models/Order/OrderSearchModelExtended.cs index 011b20a..a825dd7 100644 --- a/Nop.Plugin.Misc.AIPlugin/Areas/Admin/Models/Order/OrderSearchModelExtended.cs +++ b/Nop.Plugin.Misc.AIPlugin/Areas/Admin/Models/Order/OrderSearchModelExtended.cs @@ -18,5 +18,11 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Models.Order public string SortColumn { get; set; } public string SortColumnDirection { get; set; } + public void SetGridSort(string columnName, string columnDirection = "asc") + { + SortColumn = "Id"; + SortColumnDirection = columnDirection; + } + } } diff --git a/Nop.Plugin.Misc.AIPlugin/Controllers/FruitBankDataController.cs b/Nop.Plugin.Misc.AIPlugin/Controllers/FruitBankDataController.cs index 5dde516..b0caa6f 100644 --- a/Nop.Plugin.Misc.AIPlugin/Controllers/FruitBankDataController.cs +++ b/Nop.Plugin.Misc.AIPlugin/Controllers/FruitBankDataController.cs @@ -134,6 +134,14 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Controllers return await ctx.ShippingItems.GetAll(true).ToListAsync(); } + [SignalR(SignalRTags.GetShippingItemsByDocumentId)] + public async Task> GetShippingItemsByDocumentId(int shippingDocumentId) + { + _logger.Detail($"GetShippingItemsByDocumentId invoked"); + + return await ctx.ShippingItems.GetAllByShippingDocumentIdAsync(shippingDocumentId, true).ToListAsync(); + } + [SignalR(SignalRTags.GetShippingItemById)] public async Task GetShippingItemById(int id) { @@ -151,7 +159,7 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Controllers _logger.Detail($"AddShippingItem invoked; id: {shippingItem.Id}"); if (!await ctx.AddShippingItemAsync(shippingItem)) return null; - return await ctx.ShippingItems.GetByIdAsync(shippingItem.Id, shippingItem.ShippingDocument != null); + return await ctx.ShippingItems.GetByIdAsync(shippingItem.Id, true); } [SignalR(SignalRTags.UpdateShippingItem)] diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs index 06855d3..bc33984 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/FruitBankDbContext.cs @@ -227,10 +227,19 @@ public class FruitBankDbContext : MgDbContextBase, if (productId > 0) { - var productDto = await ProductDtos.GetByIdAsync(productId); - shippingItem.IsMeasurable = productDto?.IsMeasurable ?? false; + var productDto = await ProductDtos.GetByIdAsync(productId, true); + + if (productDto != null) + { + shippingItem.IsMeasurable = productDto.IsMeasurable; + shippingItem.Name = productDto.Name; + } } + //IDEIGLENES, AMÍG NEM VEZETJÜK KI A shippingItem.Name-et! + if (shippingItem.Name.IsNullOrEmpty() && !shippingItem.NameOnDocument.IsNullOrEmpty()) shippingItem.Name = shippingItem.NameOnDocument; + else if (shippingItem.Name.IsNullOrEmpty()) shippingItem.Name = string.Empty; + await ShippingItems.InsertAsync(shippingItem); return true; } @@ -256,6 +265,7 @@ public class FruitBankDbContext : MgDbContextBase, throw new Exception($"shippingItem.ProductId > 0 && product == null; shippingItem.ProductId: {shippingItem.ProductId}"); productIsMeasurable = productDto.IsMeasurable; + shippingItem.Name = productDto.Name; } shippingItem.IsMeasurable = productIsMeasurable; From f71acbf5621aefbe222f62323ac2117d09ed02eb Mon Sep 17 00:00:00 2001 From: Loretta Date: Thu, 20 Nov 2025 09:18:16 +0100 Subject: [PATCH 4/4] Discount unitprice fix --- .../Controllers/CustomOrderController.cs | 46 +++++++++++++------ 1 file changed, 32 insertions(+), 14 deletions(-) diff --git a/Nop.Plugin.Misc.AIPlugin/Areas/Admin/Controllers/CustomOrderController.cs b/Nop.Plugin.Misc.AIPlugin/Areas/Admin/Controllers/CustomOrderController.cs index a2bf204..3474ada 100644 --- a/Nop.Plugin.Misc.AIPlugin/Areas/Admin/Controllers/CustomOrderController.cs +++ b/Nop.Plugin.Misc.AIPlugin/Areas/Admin/Controllers/CustomOrderController.cs @@ -547,16 +547,28 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers throw new Exception($"{errorText}"); } + var valami = await _priceCalculationService.GetFinalPriceAsync(product, customer, store, includeDiscounts: true); + var unitPrice = valami.finalPrice; + + // Calculate tax + var (unitPriceInclTaxValue, _) = await _taxService.GetProductPriceAsync(product, unitPrice, true, customer); + var (unitPriceExclTaxValue, _) = await _taxService.GetProductPriceAsync(product, unitPrice, false, customer); + + var orderItem = new OrderItem { OrderId = order.Id, ProductId = item.Id, Quantity = item.Quantity, - UnitPriceInclTax = item.Price, - UnitPriceExclTax = item.Price, - PriceInclTax = isMeasurable ? 0 : item.Price * item.Quantity, - PriceExclTax = isMeasurable ? 0 : item.Price * item.Quantity, - OriginalProductCost = product.ProductCost, + + UnitPriceInclTax = unitPriceInclTaxValue, + UnitPriceExclTax = unitPriceExclTaxValue, + + PriceInclTax = isMeasurable ? 0 : unitPriceInclTaxValue * item.Quantity, + PriceExclTax = isMeasurable ? 0 : unitPriceExclTaxValue * item.Quantity, + + OriginalProductCost = await _priceCalculationService.GetProductCostAsync(product, null), + AttributeDescription = string.Empty, AttributesXml = string.Empty, DiscountAmountInclTax = 0, @@ -1215,6 +1227,7 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers } var productDtosByOrderItemId = await _dbContext.ProductDtos.GetAllByIds(products.Select(x => x.Id).ToArray()).ToDictionaryAsync(k => k.Id, v => v); + var customer = await _customerService.GetCustomerByIdAsync(order.CustomerId); var store = await _storeContext.GetCurrentStoreAsync(); var admin = await _workContext.GetCurrentCustomerAsync(); @@ -1222,8 +1235,6 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers var transactionSuccess = await _dbContext.TransactionSafeAsync(async _ => { - - // Add each product to the order foreach (var productModel in products) { @@ -1237,7 +1248,7 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers // Validate stock //var stockQuantity = await _productService.GetTotalStockQuantityAsync(product); var productDto = productDtosByOrderItemId[productModel.Id]; - //var isMeasurable = productDto.IsMeasurable; + var isMeasurable = productDto.IsMeasurable; //if (stockQuantity < productModel.Quantity) //{ @@ -1264,9 +1275,6 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers var valami = await _priceCalculationService.GetFinalPriceAsync(product, customer, store, includeDiscounts: true); - var originalPrice = valami.priceWithoutDiscounts; - var discountAmount = valami.appliedDiscountAmount; - var discountedPrice = valami.appliedDiscounts; var unitPrice = valami.finalPrice; // Calculate tax @@ -1279,12 +1287,22 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers OrderItemGuid = Guid.NewGuid(), OrderId = order.Id, ProductId = product.Id, + Quantity = productModel.Quantity, + UnitPriceInclTax = unitPriceInclTaxValue, UnitPriceExclTax = unitPriceExclTaxValue, - PriceInclTax = unitPriceInclTaxValue * productModel.Quantity, - PriceExclTax = unitPriceExclTaxValue * productModel.Quantity, + + PriceInclTax = isMeasurable ? 0 : unitPriceInclTaxValue * productModel.Quantity, + PriceExclTax = isMeasurable ? 0 : unitPriceExclTaxValue * productModel.Quantity, + OriginalProductCost = await _priceCalculationService.GetProductCostAsync(product, null), - Quantity = productModel.Quantity, + + //UnitPriceInclTax = unitPriceInclTaxValue, + //UnitPriceExclTax = unitPriceExclTaxValue, + //PriceInclTax = unitPriceInclTaxValue * productModel.Quantity, + //PriceExclTax = unitPriceExclTaxValue * productModel.Quantity, + //OriginalProductCost = await _priceCalculationService.GetProductCostAsync(product, null), + DiscountAmountInclTax = decimal.Zero, DiscountAmountExclTax = decimal.Zero, DownloadCount = 0,