This commit is contained in:
Adam 2025-10-20 17:51:14 +02:00
commit a15b906907
5 changed files with 51 additions and 19 deletions

View File

@ -73,7 +73,8 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers
[NonAction] public Task<List<OrderDto>> GetAllOrderDtos() => _customOrderSignalREndpoint.GetAllOrderDtos();
[NonAction]public Task<OrderDto> GetOrderDtoById(int orderId) => _customOrderSignalREndpoint.GetOrderDtoById(orderId);
[NonAction]public Task<List<OrderDto>> GetPendingOrderDtos() => _customOrderSignalREndpoint.GetPendingOrderDtos();
[NonAction]public Task<OrderDto> SetOrderStatusToComplete(int orderId) => _customOrderSignalREndpoint.SetOrderStatusToComplete(orderId);
[NonAction] public Task<OrderDto> StartMeasuring(int orderId, int userId) => _customOrderSignalREndpoint.StartMeasuring(orderId, userId);
[NonAction]public Task<OrderDto> SetOrderStatusToComplete(int orderId, int revisorId) => _customOrderSignalREndpoint.SetOrderStatusToComplete(orderId, revisorId);
[NonAction] public Task<List<OrderDto>> GetAllOrderDtoByIds(int[] orderIds) => _customOrderSignalREndpoint.GetAllOrderDtoByIds(orderIds);
[NonAction] public Task<OrderItemPallet> AddOrUpdateMeasuredOrderItemPallet(OrderItemPallet orderItemPallet) => _customOrderSignalREndpoint.AddOrUpdateMeasuredOrderItemPallet(orderItemPallet);
#endregion CustomOrderSignalREndpoint
@ -404,7 +405,6 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers
return Json(result);
}
//[HttpPost]
//public async Task<IActionResult> CreateInvoice(int orderId)
//{

View File

@ -26,7 +26,7 @@ public class CustomOrderSignalREndpoint(FruitBankDbContext ctx, IWorkContext wor
[SignalR(SignalRTags.GetOrderDtoById)]
public async Task<OrderDto> GetOrderDtoById(int orderId)
{
return await ctx.OrderDtos.GetByIdAsync(orderId);
return await ctx.OrderDtos.GetByIdAsync(orderId, true);
}
[SignalR(SignalRTags.GetPendingOrderDtos)]
@ -41,13 +41,22 @@ public class CustomOrderSignalREndpoint(FruitBankDbContext ctx, IWorkContext wor
return await ctx.OrderDtos.GetAllByIds(orderIds).ToListAsync();
}
[SignalR(SignalRTags.SetOrderStatusToComplete)]
public async Task<OrderDto> SetOrderStatusToComplete(int orderId)
[SignalR(SignalRTags.StartMeasuring)]
public async Task<OrderDto> StartMeasuring(int orderId, int userId)
{
_logger.Detail($"SetOrderStatusToComplete invoked; orderId: {orderId}");
_logger.Detail($"StartMeasuring invoked; orderId: {orderId}; userId: {userId}");
if (!await ctx.SetOrderStatusToCompleteSafe(orderId)) return null;
return await ctx.OrderDtos.GetByIdAsync(orderId);
if (!await ctx.StartMeasuringSafeAsync(orderId, userId)) return null;
return await ctx.OrderDtos.GetByIdAsync(orderId, true);
}
[SignalR(SignalRTags.SetOrderStatusToComplete)]
public async Task<OrderDto> SetOrderStatusToComplete(int orderId, int revisorId)
{
_logger.Detail($"SetOrderStatusToComplete invoked; orderId: {orderId}; revisorId: {revisorId}");
if (!await ctx.SetOrderStatusToCompleteSafeAsync(orderId, revisorId)) return null;
return await ctx.OrderDtos.GetByIdAsync(orderId, true);
}
[SignalR(SignalRTags.AddOrUpdateMeasuredOrderItemPallet)]
@ -55,8 +64,7 @@ public class CustomOrderSignalREndpoint(FruitBankDbContext ctx, IWorkContext wor
{
ArgumentNullException.ThrowIfNull(orderItemPallet);
var customer = await workContext.GetCurrentCustomerAsync();
_logger.Detail($"AddOrUpdateMeasuredOrderItemPallet invoked; {orderItemPallet}; CustomerId: {customer?.Id}");
_logger.Detail($"AddOrUpdateMeasuredOrderItemPallet invoked; {orderItemPallet}");
if (!await ctx.AddOrUpdateOrderItemPalletSafeAsync(orderItemPallet)) return null;
return await ctx.OrderItemPallets.GetByIdAsync(orderItemPallet.Id, false);

View File

@ -32,7 +32,7 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers
public ManagementPageController(IPermissionService permissionService, FruitBankDbContext fruitBankDbContext, AICalculationService aiCalculationService, OpenAIApiService openAIApiService, IEnumerable<IAcLogWriterBase> logWriters)
{
_logger = new Logger<CustomOrderController>(logWriters.ToArray());
_logger = new Logger<ManagementPageController>(logWriters.ToArray());
_permissionService = permissionService;
_dbContext = fruitBankDbContext;

View File

@ -1,4 +1,5 @@
#nullable enable
using AyCode.Core.Extensions;
using AyCode.Core.Loggers;
using AyCode.Utils.Extensions;
using FruitBank.Common.Entities;
@ -371,20 +372,38 @@ public class FruitBankDbContext : MgDbContextBase,
return true;
});
}
public async Task<bool> StartMeasuringSafeAsync(int orderId, int revisorId)
=> await TransactionSafeAsync(async _ => await StartMeasuringAsync(orderId, revisorId) != null);
public async Task<bool> SetOrderStatusToCompleteSafe(int orderId)
=> await TransactionSafeAsync(async _ => await SetOrderStatusToComplete(orderId) != null);
public async Task<OrderDto?> SetOrderStatusToComplete(int orderId)
public async Task<OrderDto?> StartMeasuringAsync(int orderId, int customerId)
{
var orderDto = await OrderDtos.GetByIdAsync(orderId);
if (customerId <= 0) return null;
var orderDto = await OrderDtos.GetByIdAsync(orderId, true);
if (orderDto == null || orderDto.MeasurementOwnerId > 0) return orderDto;
await _fruitBankAttributeService.InsertOrUpdateGenericAttributeAsync<Order, int>(orderDto.Id, nameof(IOrderDto.MeasurementOwnerId), customerId);
return orderDto;
}
public async Task<bool> SetOrderStatusToCompleteSafeAsync(int orderId, int revisorId)
=> await TransactionSafeAsync(async _ => await SetOrderStatusToCompleteAsync(orderId, revisorId) != null);
public async Task<OrderDto?> SetOrderStatusToCompleteAsync(int orderId, int revisorId)
{
if (revisorId <= 0) return null;
var orderDto = await OrderDtos.GetByIdAsync(orderId, true);
if (orderDto == null) return null;
if (!orderDto.IsMeasured || orderDto.OrderStatus == OrderStatus.Complete) return null; //throw new Exception($"SetOrderDtoToComplete; orderDto.IsMeasured == false; {orderDto}");
if (!orderDto.IsMeasuredAndValid() || orderDto.OrderStatus == OrderStatus.Complete) return null; //throw new Exception($"SetOrderDtoToComplete; orderDto.IsMeasured == false; {orderDto}");
orderDto.OrderStatus = OrderStatus.Complete;
await OrderDtos.UpdateAsync(orderDto);
await _fruitBankAttributeService.InsertOrUpdateGenericAttributeAsync<Order, int>(orderDto.Id, nameof(IOrderDto.RevisorId), revisorId);
foreach (var orderItemDto in orderDto.OrderItemDtos)
{
if (!orderItemDto.IsMeasurable) continue;
@ -443,7 +462,11 @@ public class FruitBankDbContext : MgDbContextBase,
if (orderItemPallet.OrderItemDto?.ProductDto == null) orderItemDto = await OrderItemDtos.GetByIdAsync(orderItemPallet.OrderItemId, true);
else orderItemDto = orderItemPallet.OrderItemDto;
if (orderItemDto == null || orderItemPallet.OrderItemId != orderItemDto.Id) return false;
if (orderItemDto == null || orderItemPallet.OrderItemId != orderItemDto.Id || //orderItemDto.IsOtherMeasuringInProgress(orderItemPallet.CreatorId) ||
orderItemPallet.TrayQuantity > orderItemDto.Quantity || !orderItemPallet.IsValidSafeMeasuringValues()) return false;
orderItemDto.OrderItemPallets.UpdateCollection(orderItemPallet, false);
if (orderItemDto.TrayQuantity > orderItemDto.Quantity) return false;
orderItemPallet.SetupCustomItemPalletMeauringValues(orderItemDto.IsMeasurable);
return true;

View File

@ -30,7 +30,8 @@ public class OrderDtoDbTable : MgDtoDbTableBase<OrderDto, Order>
public Task<OrderDto> GetByIdAsync(int orderId, bool loadRelations) => GetAll(loadRelations).Where(x => x.Id == orderId).FirstOrDefaultAsync(null);
public IQueryable<OrderDto> GetAllByOrderStatus(OrderStatus orderStatus, bool loadRelations = true) => GetAll(loadRelations).Where(o => o.OrderStatusId == (int)orderStatus);
public IQueryable<OrderDto> GetAllByOrderStatus(OrderStatus orderStatus, bool loadRelations = true)
=> GetAll(loadRelations);//.Where(o => o.OrderStatusId == (int)orderStatus);
public IQueryable<OrderDto> GetAllByIds(IEnumerable<int> orderIds, bool loadRelations = true) => GetAll(loadRelations).Where(o => orderIds.Contains(o.Id));
}