improvements, fixes, etc...

This commit is contained in:
Loretta 2025-11-04 15:31:49 +01:00
parent 5fad900897
commit 91c11ffc79
3 changed files with 112 additions and 4 deletions

View File

@ -1,4 +1,5 @@
using AyCode.Core.Loggers; using AyCode.Core.Extensions;
using AyCode.Core.Loggers;
using AyCode.Services.SignalRs; using AyCode.Services.SignalRs;
using DocumentFormat.OpenXml.Office2010.Excel; using DocumentFormat.OpenXml.Office2010.Excel;
using FruitBank.Common.Dtos; using FruitBank.Common.Dtos;
@ -17,6 +18,7 @@ using Nop.Core;
using Nop.Core.Domain.Customers; using Nop.Core.Domain.Customers;
using Nop.Plugin.Misc.FruitBankPlugin.Domains.DataLayer; using Nop.Plugin.Misc.FruitBankPlugin.Domains.DataLayer;
using Nop.Plugin.Misc.FruitBankPlugin.Factories; using Nop.Plugin.Misc.FruitBankPlugin.Factories;
using Nop.Plugin.Misc.FruitBankPlugin.Services;
using Nop.Services.Customers; using Nop.Services.Customers;
using Nop.Services.Localization; using Nop.Services.Localization;
using Nop.Web.Framework.Controllers; using Nop.Web.Framework.Controllers;
@ -27,6 +29,7 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Controllers
//https://linq2db.github.io/articles/sql/Join-Operators.html //https://linq2db.github.io/articles/sql/Join-Operators.html
public class FruitBankDataController( public class FruitBankDataController(
FruitBankDbContext ctx, FruitBankDbContext ctx,
MeasurementService measurementService,
IWorkContext workContext, IWorkContext workContext,
ICustomerService customerService, ICustomerService customerService,
ICustomerRegistrationService customerRegistrationService, ICustomerRegistrationService customerRegistrationService,
@ -36,6 +39,11 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Controllers
{ {
private readonly ILogger _logger = new Logger<FruitBankDataController>(logWriters.ToArray()); private readonly ILogger _logger = new Logger<FruitBankDataController>(logWriters.ToArray());
[SignalR(SignalRTags.ProcessAndSaveFullShippingJson)]
public async Task<List<Partner>> ProcessAndSaveFullShippingJson(string fullShippingJson, int customerId)
{
return await measurementService.ProcessAndSaveFullShippingJson(fullShippingJson, customerId);
}
[SignalR(SignalRTags.GetMeasuringModels)] [SignalR(SignalRTags.GetMeasuringModels)]
public Task<List<MeasuringModel>> GetMeasuringModels() public Task<List<MeasuringModel>> GetMeasuringModels()
@ -127,6 +135,17 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Controllers
return shippingItem; return shippingItem;
} }
[SignalR(SignalRTags.AddShippingItem)]
public async Task<ShippingItem> AddShippingItem(ShippingItem shippingItem)
{
ArgumentNullException.ThrowIfNull(shippingItem);
_logger.Detail($"AddShippingItem invoked; id: {shippingItem.Id}");
if (!await ctx.AddShippingItemAsync(shippingItem)) return null;
return await ctx.ShippingItems.GetByIdAsync(shippingItem.Id, shippingItem.ShippingDocument != null);
}
[SignalR(SignalRTags.UpdateShippingItem)] [SignalR(SignalRTags.UpdateShippingItem)]
public async Task<ShippingItem> UpdateShippingItem(ShippingItem shippingItem) public async Task<ShippingItem> UpdateShippingItem(ShippingItem shippingItem)
{ {
@ -218,6 +237,17 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Controllers
return await ctx.ShippingDocuments.GetByIdAsync(id, true); return await ctx.ShippingDocuments.GetByIdAsync(id, true);
} }
[SignalR(SignalRTags.AddShippingDocument)]
public async Task<ShippingDocument> AddShippingDocument(ShippingDocument shippingDocument)
{
ArgumentNullException.ThrowIfNull(shippingDocument);
_logger.Detail($"AddShippingDocument invoked; id: {shippingDocument.Id}");
await ctx.ShippingDocuments.InsertAsync(shippingDocument);
return await ctx.ShippingDocuments.GetByIdAsync(shippingDocument.Id, shippingDocument.Shipping != null || shippingDocument.Partner != null);
}
[SignalR(SignalRTags.UpdateShippingDocument)] [SignalR(SignalRTags.UpdateShippingDocument)]
public async Task<ShippingDocument> UpdateShippingDocument(ShippingDocument shippingDocument) public async Task<ShippingDocument> UpdateShippingDocument(ShippingDocument shippingDocument)
{ {

View File

@ -152,6 +152,25 @@ public class FruitBankDbContext : MgDbContextBase,
//public async Task<MeasuringAttributeValues?> GetMeasuringAttributeValuesByProductIdAsync(int productId) //public async Task<MeasuringAttributeValues?> GetMeasuringAttributeValuesByProductIdAsync(int productId)
// => await _fruitBankAttributeService.GetMeasuringAttributeValuesAsync<Product>(productId); // => await _fruitBankAttributeService.GetMeasuringAttributeValuesAsync<Product>(productId);
//public async Task<List<Partner>> ProcessAndSaveFullShippingDocumentJson(string fullShippingDocumentJson)
//{
// var partners = fullShippingDocumentJson.JsonTo<List<Partner>>();
// if (partners != null)
// {
// foreach (var partner in partners)
// {
// //await Partners.InsertAsync(partner);
// if (partner.ShippingDocuments == null) continue;
// foreach (var shippingDocument in partner.ShippingDocuments)
// {
// await ShippingDocuments.InsertAsync(shippingDocument);
// }
// }
// }
//}
public async Task DeleteShippingSafeAsync(Shipping shipping) public async Task DeleteShippingSafeAsync(Shipping shipping)
{ {
await TransactionSafeAsync(async _ => await TransactionSafeAsync(async _ =>
@ -186,6 +205,14 @@ public class FruitBankDbContext : MgDbContextBase,
Logger.Error("shippingItem.IsMeasurable && !shippingItem.IsValidMeasuringValues()"); Logger.Error("shippingItem.IsMeasurable && !shippingItem.IsValidMeasuringValues()");
return Task.FromResult(false); return Task.FromResult(false);
} }
public Task<bool> AddShippingItemSafeAsync(ShippingItem shippingItem)
=> TransactionSafeAsync(async _ => await AddShippingItemAsync(shippingItem));
public async Task<bool> AddShippingItemAsync(ShippingItem shippingItem)
{
await ShippingItems.InsertAsync(shippingItem);
return true;
}
public Task<bool> UpdateShippingItemSafeAsync(ShippingItem shippingItem) public Task<bool> UpdateShippingItemSafeAsync(ShippingItem shippingItem)
=> TransactionSafeAsync(async _ => await UpdateShippingItemAsync(shippingItem)); => TransactionSafeAsync(async _ => await UpdateShippingItemAsync(shippingItem));
@ -268,7 +295,7 @@ public class FruitBankDbContext : MgDbContextBase,
} }
//if (productIdUnchanged || !dbShippingItem.IsMeasured) return true; //if (productIdUnchanged || !dbShippingItem.IsMeasured) return true;
if (!productIdChanged && (shippingItem.IsMeasured || !dbShippingItem.IsMeasured)) return true; if (!dbShippingItem.ProductId.HasValue || (!productIdChanged && (shippingItem.IsMeasured || !dbShippingItem.IsMeasured))) return true;
productDto = await ProductDtos.GetByIdAsync(dbShippingItem.ProductId!.Value, true); productDto = await ProductDtos.GetByIdAsync(dbShippingItem.ProductId!.Value, true);

View File

@ -1,4 +1,5 @@
using AyCode.Core.Loggers; using AyCode.Core.Extensions;
using AyCode.Core.Loggers;
using AyCode.Services.Server.SignalRs; using AyCode.Services.Server.SignalRs;
using FruitBank.Common.Dtos; using FruitBank.Common.Dtos;
using FruitBank.Common.Entities; using FruitBank.Common.Entities;
@ -7,7 +8,9 @@ using FruitBank.Common.Server.Services.SignalRs;
using FruitBank.Common.Services; using FruitBank.Common.Services;
using Mango.Nop.Core.Extensions; using Mango.Nop.Core.Extensions;
using Mango.Nop.Core.Loggers; using Mango.Nop.Core.Loggers;
using Microsoft.CodeAnalysis.Operations;
using Nop.Core.Domain.Catalog; using Nop.Core.Domain.Catalog;
using Nop.Core.Domain.Common;
using Nop.Core.Domain.Orders; using Nop.Core.Domain.Orders;
using Nop.Core.Events; using Nop.Core.Events;
using Nop.Plugin.Misc.FruitBankPlugin.Domains.DataLayer; using Nop.Plugin.Misc.FruitBankPlugin.Domains.DataLayer;
@ -21,6 +24,7 @@ public class MeasurementService : MeasurementServiceBase<Logger>, IMeasurementSe
{ {
private readonly FruitBankDbContext _dbContext; private readonly FruitBankDbContext _dbContext;
private readonly IEventPublisher _eventPublisher; private readonly IEventPublisher _eventPublisher;
private readonly FruitBankAttributeService _fruitBankAttributeService;
private readonly SignalRSendToClientService _signalRSendToClientService; private readonly SignalRSendToClientService _signalRSendToClientService;
private readonly CustomPriceCalculationService _customPriceCalculationService; private readonly CustomPriceCalculationService _customPriceCalculationService;
@ -29,11 +33,11 @@ public class MeasurementService : MeasurementServiceBase<Logger>, IMeasurementSe
{ {
_dbContext = dbContext; _dbContext = dbContext;
_eventPublisher = eventPublisher; _eventPublisher = eventPublisher;
_fruitBankAttributeService = fruitBankAttributeService;
_signalRSendToClientService = signalRSendToClientService; _signalRSendToClientService = signalRSendToClientService;
_customPriceCalculationService = (CustomPriceCalculationService)customPriceCalculationService; _customPriceCalculationService = (CustomPriceCalculationService)customPriceCalculationService;
} }
public async Task DeleteOrderItemConstraintsAsync(int orderItemId) => await DeleteOrderItemConstraintsAsync(await _dbContext.OrderItems.GetByIdAsync(orderItemId)); public async Task DeleteOrderItemConstraintsAsync(int orderItemId) => await DeleteOrderItemConstraintsAsync(await _dbContext.OrderItems.GetByIdAsync(orderItemId));
public async Task DeleteOrderItemConstraintsAsync(OrderItem orderItem) public async Task DeleteOrderItemConstraintsAsync(OrderItem orderItem)
@ -73,6 +77,8 @@ public class MeasurementService : MeasurementServiceBase<Logger>, IMeasurementSe
var result = await _dbContext.TransactionSafeAsync(async _ => var result = await _dbContext.TransactionSafeAsync(async _ =>
{ {
await _fruitBankAttributeService.InsertOrUpdateGenericAttributeAsync<Order, int>(order.Id, nameof(IOrderDto.RevisorId), 0);
foreach (var orderItemPallet in orderItemPallets) foreach (var orderItemPallet in orderItemPallets)
{ {
orderItemPallet.RevisorId = 0; orderItemPallet.RevisorId = 0;
@ -93,4 +99,49 @@ public class MeasurementService : MeasurementServiceBase<Logger>, IMeasurementSe
await _signalRSendToClientService.SendOrderChanged(await _dbContext.OrderDtos.GetByIdAsync(orderItem.OrderId, true)); await _signalRSendToClientService.SendOrderChanged(await _dbContext.OrderDtos.GetByIdAsync(orderItem.OrderId, true));
return result; return result;
} }
public async Task<List<Partner>?> ProcessAndSaveFullShippingJson(string fullShippingJson, int customerId)
{
var partners = fullShippingJson.JsonTo<List<Partner>>();
if (partners == null || partners.Count == 0) return partners;
var a = partners.SelectMany(x => x.ShippingDocuments?.SelectMany(sd => sd.ShippingItems?.Where(si => si.ProductId.GetValueOrDefault(0) > 0).Select(si => si.ProductId!.Value) ?? []) ?? []).ToHashSet();
var productDtosById = await _dbContext.ProductDtos.GetAllByIds(a, false, false).ToDictionaryAsync(k => k.Id, v => v);
var result = await _dbContext.TransactionSafeAsync(async _ =>
{
foreach (var partner in partners)
{
//await _dbContext.Partners.InsertAsync(partner, false);
if (partner.ShippingDocuments == null) continue;
foreach (var shippingDocument in partner.ShippingDocuments)
{
//shippingDocument.PartnerId = 0;
await _dbContext.ShippingDocuments.InsertAsync(shippingDocument, false);
if (shippingDocument.ShippingItems == null) continue;
foreach (var shippingItem in shippingDocument.ShippingItems)
{
if (shippingItem.ProductId != null && productDtosById.TryGetValue(shippingItem.ProductId.Value, out var productDto))
{
shippingItem.Name = productDto.Name;
shippingItem.IsMeasurable = productDto.IsMeasurable;
//TODO: Update Product Incoming attribute! - J.
}
else shippingItem.ProductId = null;
shippingItem.ShippingDocumentId = shippingDocument.Id;
await _dbContext.ShippingItems.InsertAsync(shippingItem, false);
}
}
}
return true;
});
return result ? partners : null;
}
} }