imporvements, fixes, etc...

This commit is contained in:
Loretta 2025-10-31 05:37:12 +01:00
parent d53c44d2db
commit dd270f6eca
8 changed files with 95 additions and 62 deletions

View File

@ -6,6 +6,7 @@ using FruitBank.Common.Models.SignalRs;
using FruitBank.Common.SignalRs;
using Mango.Nop.Core.Loggers;
using Microsoft.AspNetCore.SignalR;
using Nop.Core.Domain.Orders;
namespace FruitBank.Common.Server.Services.SignalRs;
@ -25,6 +26,7 @@ public class SignalRSendToClientService(IHubContext<DevAdminSignalRHub, IAcSigna
public Task SendOrderChanged(OrderDto orderDto) => base.SendMessageToAllClients(SignalRTags.SendOrderChanged, orderDto);
public Task SendOrderItemChanged(OrderItemDto orderItemDto) => base.SendMessageToAllClients(SignalRTags.SendOrderItemChanged, orderItemDto);
public Task SendOrderItemDeleted(OrderItem orderItem) => base.SendMessageToAllClients(SignalRTags.SendOrderItemDeleted, orderItem);
public Task SendOrderItemPalletChanged(OrderItemPallet orderItemPallet) => base.SendMessageToAllClients(SignalRTags.SendOrderItemPalletChanged, orderItemPallet);
public Task SendShippingChanged(Shipping shipping) => base.SendMessageToAllClients(SignalRTags.SendShippingChanged, shipping);

View File

@ -1,8 +1,10 @@
using FruitBank.Common.Interfaces;
using AyCode.Core.Loggers;
using FruitBank.Common.Interfaces;
using Mango.Nop.Core.Loggers;
namespace FruitBank.Common.Services;
public class MeasurementServiceBase : IMeasurementServiceBase
public abstract class MeasurementServiceBase<TLogger>(TLogger logger) : IMeasurementServiceBase where TLogger : ILogger
{
public TLogger Logger => logger;
}

View File

@ -76,7 +76,8 @@ public class SignalRTags : AcSignalRTags
#region SendToClient
public const int SendOrderChanged = 500;
public const int SendOrderItemChanged = 501;
public const int SendOrderItemPalletChanged = 502;
public const int SendOrderItemDeleted = 502;
public const int SendOrderItemPalletChanged = 503;
public const int SendShippingChanged = 520;
public const int SendShippingItemChanged = 521;

View File

@ -52,7 +52,7 @@
@if (HasAuditButton)
{
<DxFormLayoutItem Context="ctxFromLayoutItemPallet" ColSpanMd="1">
<DxButton Enabled="@(IsEditable && OrderItemPallet!.IsMeasuredAndValid(IsMeasurable) && !OrderItemPallet.IsAudited)"
<DxButton Enabled="@(IsEditable && OrderItemPallet!.IsMeasuredAndValid(IsMeasurable) && !OrderItemPallet.IsAudited && IsMaxTrayQuantityValid)"
Text="@(OrderItemPallet!.IsAudited ? "Jóváhagyva" : "Jóváhagy")" Click="() => PalletItemAuditedClick()" CssClass="w-100" />
</DxFormLayoutItem>
}
@ -91,9 +91,11 @@
private bool GetBtnSaveEnabled()
{
return IsEditable && PalletItem.IsValidMeasuringValues(IsMeasurable) && !PalletItem.IsMeasured && (!MaxTrayQuantity.HasValue || PalletItem.TrayQuantity <= MaxTrayQuantity.Value);
return IsEditable && PalletItem.IsValidMeasuringValues(IsMeasurable) && !PalletItem.IsMeasured && IsMaxTrayQuantityValid;
}
private bool IsMaxTrayQuantityValid => (!MaxTrayQuantity.HasValue || PalletItem.TrayQuantity <= MaxTrayQuantity.Value);
protected override async Task OnInitializedAsync()
{
BtnSaveEnabled = GetBtnSaveEnabled();// PalletItem.IsValidMeasuringValues(IsMeasurable) && !PalletItem.IsMeasured;
@ -147,7 +149,7 @@
palletItem.TrayQuantity = (int)newValue;
if (palletItem.TrayQuantity < 0) palletItem.TrayQuantity = 0;
//else if (MaxTrayQuantity.HasValue && palletItem.TrayQuantity > MaxTrayQuantity.Value) palletItem.TrayQuantity = MaxTrayQuantity.Value;
//else if (!IsMaxTrayQuantityValid) palletItem.TrayQuantity = MaxTrayQuantity!.Value;
break;
case nameof(IMeasuringItemPalletBase.GrossWeight):

View File

@ -26,7 +26,7 @@ public partial class MainLayout : LayoutComponentBase
private EventCallback RefreshMainLayoutEventCallback => EventCallback.Factory.Create(this, RefreshMainLayout);
private NavMenu _navMenu = null!;
private ILogger _logger = null!;
private LoggerClient _logger = null!;
protected override void OnInitialized()
{
@ -54,23 +54,27 @@ public partial class MainLayout : LayoutComponentBase
return Task.CompletedTask;
}
if (!(notificationMessage.Content?.HasMeasuringAccess(LoggedInModel.CustomerDto!.Id, LoggedInModel.IsRevisor) ?? LoggedInModel.IsRevisor)) return Task.CompletedTask;
var messageText = $"{notificationMessage.Message}";
if (notificationMessage.Content != null)
var orderDto = notificationMessage.Content;
if ((orderDto?.HasMeasuringAccess(LoggedInModel.CustomerDto!.Id, LoggedInModel.IsRevisor) ?? LoggedInModel.IsRevisor) || orderDto?.MeasurementOwnerId == 0)
{
messageText += $" Rendelés: #{notificationMessage.Content.CustomOrderNumber}. Átvétel: {notificationMessage.Content.DateOfReceipt}";
var messageText = $"{notificationMessage.Message}";
if (orderDto != null)
{
messageText += $" Rendelés: #{orderDto.CustomOrderNumber}. Átvétel: {orderDto.DateOfReceipt}";
}
_logger.Debug($"NotificationMessage received. {messageText}");
ToastService.ShowToast(new ToastOptions
{
ProviderName = "Positioning",
Title = "Értesítő!",
Text = messageText,
});
return Task.CompletedTask;
}
_logger.Info($"NotificationMessage received. {messageText}");
ToastService.ShowToast(new ToastOptions
{
ProviderName = "Positioning",
Title = "Király vagyok!",
Text = messageText,
});
return Task.CompletedTask;
}

View File

@ -156,41 +156,38 @@
@{
if (context.Level == 0)
{
//var orderItemPallet = ((OrderItemPallet)(context.DataItem));
//text = ((OrderItemPallet)(context.DataItem)).OrderItemId.ToString() + " dfgdfsg";
//var selectedOrderItemDto = SelectedOrder!.OrderItemDtos.First(x => x.Id == orderItemPallet.OrderItemId);
var selectedOrderItemDto = (OrderItemDto)(context.DataItem);
SelectedOrderItem = selectedOrderItemDto;
<DxFormLayout Context="ctxFormLayout" Data="@selectedOrderItemDto" CaptionPosition="CaptionPosition.Vertical" CssClass="w-100">
var selectedOrderItem = (OrderItemDto)(context.DataItem);
<DxFormLayout Context="ctxFormLayout" Data="@selectedOrderItem" CaptionPosition="CaptionPosition.Vertical" CssClass="w-100">
<DxFormLayoutItem Context="ctxFormLayoutItem" ColSpanMd="12">
@for (var index = 0; index < (selectedOrderItemDto?.OrderItemPallets?.Count ?? 0); index++)
@for (var index = 0; index < (selectedOrderItem?.OrderItemPallets?.Count ?? 0); index++)
{
var localI = index + 1;
var currentOrderItemPallet = selectedOrderItemDto!.OrderItemPallets![index];
var currentOrderItemPallet = selectedOrderItem!.OrderItemPallets![index];
<PalletItemComponent IsMeasurable="@selectedOrderItemDto.IsMeasurable"
<PalletItemComponent IsMeasurable="@selectedOrderItem.IsMeasurable"
MeasuringIndex="@localI"
IsEditable="@(!currentOrderItemPallet.IsAudited && !(SelectedOrder?.IsComplete ?? false))"
PalletItem="@currentOrderItemPallet"
ProductId="@selectedOrderItemDto.ProductId"
MaxTrayQuantity="@selectedOrderItemDto.Quantity"
ProductId="@selectedOrderItem.ProductId"
MaxTrayQuantity="@selectedOrderItem.Quantity"
AddOrUpdateSignalRTag="SignalRTags.AddOrUpdateMeasuredOrderItemPallet"
OnPalletItemSaved="pallet => OnOrderItemPalletSaved(pallet, selectedOrderItemDto)"
OnPalletItemValueChanged="pallet => OnOrderItemPalletValueChanged(pallet, selectedOrderItemDto)"
OnPalletItemAuditedClick="pallet => OnPalletItemAuditedClick(pallet, selectedOrderItemDto)">
OnPalletItemSaved="pallet => OnOrderItemPalletSaved(pallet, selectedOrderItem)"
OnPalletItemValueChanged="pallet => OnOrderItemPalletValueChanged(pallet, selectedOrderItem)"
OnPalletItemAuditedClick="pallet => OnPalletItemAuditedClick(pallet, selectedOrderItem)">
</PalletItemComponent>
}
</DxFormLayoutItem>
<DxFormLayoutItem Context="ctxFromLayoutNewPallet" ColSpanMd="2" BeginRow="true">
<DxButton Text="Új sor" Click="() => AddNewPalletItemClick(selectedOrderItemDto)" CssClass="w-100"
<DxButton Text="Új sor" Click="() => AddNewPalletItemClick(selectedOrderItem)" CssClass="w-100"
Visible="@(!(SelectedOrder?.IsComplete ?? false))"
Enabled="@(selectedOrderItemDto.OrderItemPallets[^1].Id > 0)" />
Enabled="@(selectedOrderItem.OrderItemPallets[^1].Id > 0)" />
</DxFormLayoutItem>
<DxFormLayoutItem Context="ctxFromLayoutNewPallet" ColSpanMd="3">
<DxButton Text="Utolsó sor törlése" Click="() => LastPalletItemDeleteClick(selectedOrderItemDto)" CssClass="w-100"
<DxButton Text="Utolsó sor törlése" Click="() => LastPalletItemDeleteClick(selectedOrderItem)" CssClass="w-100"
Visible="@(!(SelectedOrder?.IsComplete ?? false))"
Enabled="@(selectedOrderItemDto.OrderItemPallets.Count > 1 && selectedOrderItemDto.OrderItemPallets[^1].Id <= 0)" />
Enabled="@(selectedOrderItem.OrderItemPallets.Count > 1 && selectedOrderItem.OrderItemPallets[^1].Id <= 0)" />
</DxFormLayoutItem>
<DxFormLayoutItem Context="ctxFromLayoutNewPallet" ColSpanMd="7" />
@ -201,9 +198,9 @@
<DxFormLayoutItem Context="dfcadsc2" ColSpanMd="2" BeginRow="false" />
<DxFormLayoutItem Context="dfcadsc2" ColSpanMd="2" BeginRow="false" />
<DxFormLayoutItem Context="dfcadsc2" ColSpanMd="1" BeginRow="false" />
<DxFormLayoutItem Context="dfcadsc2" ColSpanMd="2" BeginRow="false"><strong>Rekesz: @(selectedOrderItemDto.TrayQuantity) db</strong></DxFormLayoutItem>
<DxFormLayoutItem Context="dfcadsc2" ColSpanMd="2" BeginRow="false"><strong>Br: @(selectedOrderItemDto.GrossWeight) kg</strong></DxFormLayoutItem>
<DxFormLayoutItem Context="dfcadsc2" ColSpanMd="1" BeginRow="false"><strong>Net: @(selectedOrderItemDto.NetWeight) kg</strong></DxFormLayoutItem>
<DxFormLayoutItem Context="dfcadsc2" ColSpanMd="2" BeginRow="false"><strong>Rekesz: @(selectedOrderItem.TrayQuantity) db</strong></DxFormLayoutItem>
<DxFormLayoutItem Context="dfcadsc2" ColSpanMd="2" BeginRow="false"><strong>Br: @(selectedOrderItem.GrossWeight) kg</strong></DxFormLayoutItem>
<DxFormLayoutItem Context="dfcadsc2" ColSpanMd="1" BeginRow="false"><strong>Net: @(selectedOrderItem.NetWeight) kg</strong></DxFormLayoutItem>
<DxFormLayoutItem Context="dfcadsc2" ColSpanMd="1" BeginRow="false" />
</DxFormLayout>
</DxFormLayoutItem>

View File

@ -37,7 +37,7 @@ namespace FruitBankHybrid.Shared.Pages
[Inject] private IDialogService DialogService { get; set; } = null!;
[Inject] public required LoggedInModel LoggedInModel { get; set; }
private ILogger _logger = null!;
private LoggerClient _logger = null!;
private string _errorText;
public bool HasMeasuringAccess;
@ -46,7 +46,7 @@ namespace FruitBankHybrid.Shared.Pages
private DateTime SelectedDate;
private List<OrderDto> SelectedDayOrders { get; set; } = null!;
private OrderDto? SelectedOrder { get; set; }
private OrderItemDto? SelectedOrderItem { get; set; }
//private OrderItemDto? SelectedOrderItem { get; set; }
private List<MeasuringDateSelectorModel> _measuringDates = null!;
@ -68,15 +68,29 @@ namespace FruitBankHybrid.Shared.Pages
{
if (!LoggedInModel.IsLoggedIn) return;
if (messageTag != SignalRTags.SendOrderChanged && messageTag != SignalRTags.SendOrderItemChanged &&
if (messageTag != SignalRTags.SendOrderItemDeleted && messageTag != SignalRTags.SendOrderChanged && messageTag != SignalRTags.SendOrderItemChanged &&
messageTag != SignalRTags.SendOrderItemPalletChanged && messageTag != SignalRTags.SendProductChanged) return;
_logger.Detail($"SignalRClientOnMessageReceived received. {jsonMessage}");
_logger.DebugConditional($"SignalRClientOnMessageReceived received. {jsonMessage}");
OrderDto? orderDto;
OrderItem? orderItem;
OrderItemDto? orderItemDto;
switch (messageTag)
{
case SignalRTags.SendOrderItemDeleted:
orderItem = jsonMessage?.JsonTo<OrderItem>();
if (orderItem == null) break;
lock (_lock)
{
orderDto = SelectedDayOrders.FirstOrDefault(o => o.OrderItemDtos.Any(oi => oi.Id == orderItem.Id));
orderDto?.OrderItemDtos.RemoveAll(oi => oi.Id == orderItem.Id);
}
await InvokeAsync(StateHasChanged);
return;
case SignalRTags.SendOrderChanged:
orderDto = jsonMessage?.JsonTo<OrderDto>();
if (orderDto == null) break;
@ -91,17 +105,27 @@ namespace FruitBankHybrid.Shared.Pages
if (SelectedDate != orderDto.DateOfReceipt.Value.Date) return;
var selectedOrderId = SelectedOrder?.Id;
SelectedDayOrders.UpdateCollection(orderDto, false);
if (selectedOrderId.GetValueOrDefault(-1) == orderDto.Id) SelectedOrder = orderDto;
}
await InvokeAsync(StateHasChanged);
return;
case SignalRTags.SendOrderItemChanged:
var orderItemDto = jsonMessage?.JsonTo<OrderItemDto>();
orderItemDto = jsonMessage?.JsonTo<OrderItemDto>();
if (orderItemDto == null) break;
lock (_lock)
{
var localOrderDto = SelectedDayOrders.FirstOrDefault(o => o.OrderItemDtos.Any(oi => oi.Id == orderItemDto.Id));
var localOrderItemDto = localOrderDto?.OrderItemDtos.First(x => x.Id == orderItemDto.Id)!;
localOrderItemDto.Quantity = orderItemDto.Quantity;
localOrderItemDto.GenericAttributes.UpdateBaseEntityCollection(orderItemDto.GenericAttributes, false);
}
await InvokeAsync(StateHasChanged);
return;
case SignalRTags.SendOrderItemPalletChanged:
var orderItemPallet = jsonMessage?.JsonTo<OrderItemPallet>();
@ -110,13 +134,14 @@ namespace FruitBankHybrid.Shared.Pages
lock (_lock)
{
var orderItemDtos = SelectedDayOrders.FirstOrDefault(x => x.OrderItemDtos.Any(oi => oi.Id == orderItemPallet.OrderItemId))?.OrderItemDtos;
var orderItem = orderItemDtos?.FirstOrDefault(oi => oi.Id == orderItemPallet.OrderItemId);
if (orderItem == null) return;
orderItemDto = orderItemDtos?.FirstOrDefault(oi => oi.Id == orderItemPallet.OrderItemId);
if (orderItemDto == null) return;
var orderItemPalletsCount = orderItem.OrderItemPallets.Count;
var orderItemPalletsCount = orderItemDto.OrderItemPallets.Count;
if (orderItem.OrderItemPallets[orderItemPalletsCount - 1].Id == 0) orderItem.OrderItemPallets.Insert(orderItemPalletsCount - 1, orderItemPallet);
else orderItem.OrderItemPallets.UpdateCollection(orderItemPallet, false);
if (orderItemDto.OrderItemPallets[orderItemPalletsCount - 1].Id == 0) orderItemDto.OrderItemPallets.Insert(orderItemPalletsCount - 1, orderItemPallet);
else orderItemDto.OrderItemPallets.UpdateCollection(orderItemPallet, false);
}
await InvokeAsync(StateHasChanged);
@ -125,6 +150,7 @@ namespace FruitBankHybrid.Shared.Pages
var productDto = jsonMessage?.JsonTo<ProductDto>();
if (productDto == null) break;
await InvokeAsync(StateHasChanged);
return;
}

View File

@ -1,20 +1,19 @@
using DevExpress.Blazor;
using AyCode.Core.Loggers;
using DevExpress.Blazor;
using FruitBank.Common.Dtos;
using FruitBank.Common.Entities;
using FruitBank.Common.Interfaces;
using FruitBank.Common.Services;
using FruitBankHybrid.Shared.Models;
using FruitBankHybrid.Shared.Services.Loggers;
using Mango.Nop.Core.Dtos;
using Mango.Nop.Core.Loggers;
namespace FruitBankHybrid.Shared.Services;
public class MeasurementService : MeasurementServiceBase, IMeasurementService
public class MeasurementService(IEnumerable<IAcLogWriterClientBase> logWriters) :
MeasurementServiceBase<LoggerClient>(new LoggerClient<MeasurementService>(logWriters.ToArray())), IMeasurementService
{
public MeasurementService()
{
}
public static bool DaysEqual(DateTime date1, DateTime date2)
=> (date1.Year == date2.Year && date1.DayOfYear == date2.DayOfYear);