Refactor SignalR, pallet editing, and error handling
- Refactored SignalRMessageToClientWithText<T> to use explicit constructors and properties. - Added Shipping.Comment column to GridShippingDocument.razor. - Updated PalletItemComponent: renamed audit callback, added pre-save/audit callback, improved UI refresh logic. - MeasuringOut now uses new callbacks and _enablePalletItems flag to control editability during save/audit. - Wrapped SignalR message handling and logout logic in try/catch for better error logging. - MainLayout and MeasuringOut now implement IDisposable to unsubscribe SignalR events. - UI editability and state updates improved for thread safety and responsiveness.
This commit is contained in:
parent
f5915f7f72
commit
a73b72f831
|
|
@ -2,8 +2,16 @@
|
||||||
|
|
||||||
namespace FruitBank.Common.Models.SignalRs;
|
namespace FruitBank.Common.Models.SignalRs;
|
||||||
|
|
||||||
public class SignalRMessageToClientWithText<T>(string? message, T? content)
|
public class SignalRMessageToClientWithText<T>
|
||||||
{
|
{
|
||||||
public string? Message { get; set; } = message;
|
public SignalRMessageToClientWithText()
|
||||||
public T? Content { get; set; } = content;
|
{}
|
||||||
|
public SignalRMessageToClientWithText(string? message, T? content) : this()
|
||||||
|
{
|
||||||
|
Message = message;
|
||||||
|
Content = content;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string? Message { get; set; }
|
||||||
|
public T? Content { get; set; }
|
||||||
}
|
}
|
||||||
|
|
@ -57,6 +57,7 @@
|
||||||
<DxListEditorColumn FieldName="@nameof(Shipping.Id)" />
|
<DxListEditorColumn FieldName="@nameof(Shipping.Id)" />
|
||||||
<DxListEditorColumn FieldName="@nameof(Shipping.ShippingDate)" />
|
<DxListEditorColumn FieldName="@nameof(Shipping.ShippingDate)" />
|
||||||
<DxListEditorColumn FieldName="@nameof(Shipping.LicencePlate)" />
|
<DxListEditorColumn FieldName="@nameof(Shipping.LicencePlate)" />
|
||||||
|
<DxListEditorColumn FieldName="@nameof(Shipping.Comment)" />
|
||||||
</Columns>
|
</Columns>
|
||||||
</DxComboBoxSettings>
|
</DxComboBoxSettings>
|
||||||
</EditSettings>
|
</EditSettings>
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,7 @@
|
||||||
}
|
}
|
||||||
</DxFormLayout>
|
</DxFormLayout>
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
[Inject] public required IEnumerable<IAcLogWriterClientBase> LogWriters { get; set; }
|
[Inject] public required IEnumerable<IAcLogWriterClientBase> LogWriters { get; set; }
|
||||||
[Inject] public required FruitBankSignalRClient FruitBankSignalRClient { get; set; }
|
[Inject] public required FruitBankSignalRClient FruitBankSignalRClient { get; set; }
|
||||||
[Inject] public required LoggedInModel LoggedInModel { get; set; }
|
[Inject] public required LoggedInModel LoggedInModel { get; set; }
|
||||||
|
|
@ -75,10 +75,14 @@
|
||||||
[Parameter] public int? MaxTrayQuantity { get; set; } = null;
|
[Parameter] public int? MaxTrayQuantity { get; set; } = null;
|
||||||
[Parameter] public bool Editable { get; set; } = true;
|
[Parameter] public bool Editable { get; set; } = true;
|
||||||
|
|
||||||
//[Parameter] public EventCallback OnPalletItemSaveClick { get; set; }
|
|
||||||
[Parameter] public Func<TPalletItem?, Task>? OnPalletItemSaved { get; set; }
|
[Parameter] public Func<TPalletItem?, Task>? OnPalletItemSaved { get; set; }
|
||||||
[Parameter] public Func<TPalletItem, Task>? OnPalletItemValueChanged { get; set; }
|
[Parameter] public Func<TPalletItem, Task>? OnPalletItemValueChanged { get; set; }
|
||||||
[Parameter] public Func<TPalletItem?, Task>? OnPalletItemAuditedClick { get; set; }
|
[Parameter] public Func<TPalletItem?, Task>? OnPalletItemAudited { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Before Save or Audit
|
||||||
|
/// </summary>
|
||||||
|
[Parameter] public Func<TPalletItem?, Task>? OnPalletItemSaveOrAuditClick { get; set; }
|
||||||
|
|
||||||
//public bool LoadingPanelVisible { get; set; } = false;
|
//public bool LoadingPanelVisible { get; set; } = false;
|
||||||
//public bool Editable => !HasAuditButton || (OrderItemPallet.IsAudited);
|
//public bool Editable => !HasAuditButton || (OrderItemPallet.IsAudited);
|
||||||
|
|
@ -119,6 +123,8 @@
|
||||||
|
|
||||||
PalletItem.ModifierId = LoggedInModel.CustomerDto?.Id;
|
PalletItem.ModifierId = LoggedInModel.CustomerDto?.Id;
|
||||||
|
|
||||||
|
if (OnPalletItemSaveOrAuditClick != null) await OnPalletItemSaveOrAuditClick.Invoke(PalletItem);
|
||||||
|
|
||||||
var responseShippingItemPallet = await FruitBankSignalRClient.PostDataAsync(AddOrUpdateSignalRTag!.Value, PalletItem);
|
var responseShippingItemPallet = await FruitBankSignalRClient.PostDataAsync(AddOrUpdateSignalRTag!.Value, PalletItem);
|
||||||
if (responseShippingItemPallet != null) PalletItem.Id = responseShippingItemPallet.Id; //Az UpdateCollection miatt kell, hogy megtalálja mit kell kicserélni! - J.
|
if (responseShippingItemPallet != null) PalletItem.Id = responseShippingItemPallet.Id; //Az UpdateCollection miatt kell, hogy megtalálja mit kell kicserélni! - J.
|
||||||
//else _logger.Error($"Sikertelen volt a raklap adatainak mentése!");
|
//else _logger.Error($"Sikertelen volt a raklap adatainak mentése!");
|
||||||
|
|
@ -126,7 +132,7 @@
|
||||||
if (OnPalletItemSaved != null) await OnPalletItemSaved.Invoke(responseShippingItemPallet);
|
if (OnPalletItemSaved != null) await OnPalletItemSaved.Invoke(responseShippingItemPallet);
|
||||||
//LoadingPanelVisible = false;
|
//LoadingPanelVisible = false;
|
||||||
|
|
||||||
StateHasChanged();
|
await InvokeAsync(StateHasChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async Task OnItemUpdating(string fieldName, object newValue, TPalletItem palletItem)
|
protected async Task OnItemUpdating(string fieldName, object newValue, TPalletItem palletItem)
|
||||||
|
|
@ -172,15 +178,17 @@
|
||||||
|
|
||||||
private async Task PalletItemAuditedClick()
|
private async Task PalletItemAuditedClick()
|
||||||
{
|
{
|
||||||
if (OnPalletItemAuditedClick != null)
|
if (OnPalletItemAudited != null)
|
||||||
{
|
{
|
||||||
if (OrderItemPallet == null) throw new Exception($"PalletItemComponent->PalletItemAuditedClick(); OrderItemPallet == null");
|
if (OrderItemPallet == null) throw new Exception($"PalletItemComponent->PalletItemAuditedClick(); OrderItemPallet == null");
|
||||||
|
|
||||||
if (await DialogService.ShowConfirmBoxAsync("Megerősítés", "Biztoan jóváhagyja a mérést? Jóváhagyás után a mérés nem módosítható!", MessageBoxRenderStyle.Info))
|
if (await DialogService.ShowConfirmBoxAsync("Megerősítés", "Biztoan jóváhagyja a mérést? Jóváhagyás után a mérés nem módosítható!", MessageBoxRenderStyle.Info))
|
||||||
{
|
{
|
||||||
|
if (OnPalletItemSaveOrAuditClick != null) await OnPalletItemSaveOrAuditClick.Invoke(PalletItem);
|
||||||
|
|
||||||
OrderItemPallet.RevisorId = LoggedInModel.CustomerDto!.Id;
|
OrderItemPallet.RevisorId = LoggedInModel.CustomerDto!.Id;
|
||||||
|
|
||||||
StateHasChanged(); //Az Audit button miatt kell a StateHasChanged(), most már van RevisorId és emiatt disabled lesz...
|
await InvokeAsync(StateHasChanged); //Az Audit button miatt kell a StateHasChanged(), most már van RevisorId és emiatt disabled lesz...
|
||||||
|
|
||||||
PalletItem.SetParentPropToNull();
|
PalletItem.SetParentPropToNull();
|
||||||
|
|
||||||
|
|
@ -191,7 +199,7 @@
|
||||||
await DialogService.ShowMessageBoxAsync("Hiba", "Adatok mentése sikertelen volt, ellenőrizze a mérés adatait!", MessageBoxRenderStyle.Danger);
|
await DialogService.ShowMessageBoxAsync("Hiba", "Adatok mentése sikertelen volt, ellenőrizze a mérés adatait!", MessageBoxRenderStyle.Danger);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (OnPalletItemAuditedClick != null) await OnPalletItemAuditedClick.Invoke(responseShippingItemPallet);
|
await OnPalletItemAudited.Invoke(responseShippingItemPallet);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ using Microsoft.AspNetCore.Components;
|
||||||
|
|
||||||
namespace FruitBankHybrid.Shared.Layout;
|
namespace FruitBankHybrid.Shared.Layout;
|
||||||
|
|
||||||
public partial class MainLayout : LayoutComponentBase
|
public partial class MainLayout : LayoutComponentBase, IDisposable
|
||||||
{
|
{
|
||||||
[Inject] public required IEnumerable<IAcLogWriterClientBase> LogWriters { get; set; }
|
[Inject] public required IEnumerable<IAcLogWriterClientBase> LogWriters { get; set; }
|
||||||
[Inject] public required NavigationManager NavManager { get; set; }
|
[Inject] public required NavigationManager NavManager { get; set; }
|
||||||
|
|
@ -70,43 +70,57 @@ public partial class MainLayout : LayoutComponentBase
|
||||||
{
|
{
|
||||||
if (messageTag != SignalRTags.NotificationReceived || !LoggedInModel.IsLoggedIn) return;
|
if (messageTag != SignalRTags.NotificationReceived || !LoggedInModel.IsLoggedIn) return;
|
||||||
|
|
||||||
var notificationMessage = responseDataMessage?.GetResponseData<SignalRMessageToClientWithText<OrderDto>>();
|
try
|
||||||
if (notificationMessage == null)
|
|
||||||
{
|
{
|
||||||
_logger.Error($"notificationMessage == null");
|
var notificationMessage = responseDataMessage?.GetResponseData<SignalRMessageToClientWithText<OrderDto>>();
|
||||||
return;
|
if (notificationMessage == null)
|
||||||
|
{
|
||||||
|
_logger.Error($"MainLayout.SignalRClientOnMessageReceived; notificationMessage == null; messageTag: {messageTag}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
toastOrderNumber = null;
|
||||||
|
toastDateOfReceipt = null;
|
||||||
|
|
||||||
|
toastMessage = notificationMessage.Message;
|
||||||
|
|
||||||
|
var orderDto = notificationMessage.Content;
|
||||||
|
var hasPermission = orderDto == null || (orderDto.HasMeasuringAccess(LoggedInModel.CustomerDto!.Id, LoggedInModel.IsRevisor) || orderDto.MeasurementOwnerId == 0);
|
||||||
|
|
||||||
|
if (orderDto != null && hasPermission)
|
||||||
|
{
|
||||||
|
toastOrderNumber = orderDto.CustomOrderNumber;
|
||||||
|
toastDateOfReceipt = orderDto.DateOfReceipt;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!hasPermission) return;
|
||||||
|
|
||||||
|
_logger.Debug($"MainLayout.SignalRClientOnMessageReceived; NotificationMessage received. {toastMessage}");
|
||||||
|
|
||||||
|
await InvokeAsync(() =>
|
||||||
|
{
|
||||||
|
orderNotificationToast?.Show();
|
||||||
|
StateHasChanged();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
catch (Exception ex)
|
||||||
toastOrderNumber = null;
|
|
||||||
toastDateOfReceipt = null;
|
|
||||||
|
|
||||||
toastMessage = notificationMessage.Message;
|
|
||||||
|
|
||||||
var orderDto = notificationMessage.Content;
|
|
||||||
var hasPermission = orderDto == null || (orderDto.HasMeasuringAccess(LoggedInModel.CustomerDto!.Id, LoggedInModel.IsRevisor) || orderDto.MeasurementOwnerId == 0);
|
|
||||||
|
|
||||||
if (orderDto != null && hasPermission)
|
|
||||||
{
|
{
|
||||||
toastOrderNumber = orderDto.CustomOrderNumber;
|
_logger.Error($"MainLayout.SignalRClientOnMessageReceived ERROR; messageTag: {messageTag}", ex);
|
||||||
toastDateOfReceipt = orderDto.DateOfReceipt;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!hasPermission) return;
|
|
||||||
|
|
||||||
_logger.Debug($"NotificationMessage received. {toastMessage}");
|
|
||||||
|
|
||||||
await InvokeAsync(() =>
|
|
||||||
{
|
|
||||||
orderNotificationToast?.Show();
|
|
||||||
StateHasChanged();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void OnLogoutClick()
|
private async void OnLogoutClick()
|
||||||
{
|
{
|
||||||
await LoggedInModel.LogOutAsync();
|
try
|
||||||
RefreshMainLayout();
|
{
|
||||||
NavManager.NavigateTo("/Login");
|
await LoggedInModel.LogOutAsync();
|
||||||
|
RefreshMainLayout();
|
||||||
|
NavManager.NavigateTo("/Login");
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
_logger.Error($"OnLogoutClick error");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RefreshMainLayout()
|
public void RefreshMainLayout()
|
||||||
|
|
|
||||||
|
|
@ -176,7 +176,8 @@
|
||||||
{
|
{
|
||||||
var selectedOrderItem = (OrderItemDto)(context.DataItem);
|
var selectedOrderItem = (OrderItemDto)(context.DataItem);
|
||||||
|
|
||||||
<DxFormLayout Context="ctxFormLayout" Data="@selectedOrderItem" CaptionPosition="CaptionPosition.Vertical" CssClass="w-100">
|
<DxFormLayout Context="ctxFormLayout" Data="@selectedOrderItem" CaptionPosition="CaptionPosition.Vertical"
|
||||||
|
CssClass="w-100">
|
||||||
<DxFormLayoutItem Context="ctxFormLayoutItem" ColSpanMd="12">
|
<DxFormLayoutItem Context="ctxFormLayoutItem" ColSpanMd="12">
|
||||||
@for (var index = 0; index < (selectedOrderItem?.OrderItemPallets?.Count ?? 0); index++)
|
@for (var index = 0; index < (selectedOrderItem?.OrderItemPallets?.Count ?? 0); index++)
|
||||||
{
|
{
|
||||||
|
|
@ -185,14 +186,15 @@
|
||||||
|
|
||||||
<PalletItemComponent IsMeasurable="@selectedOrderItem.IsMeasurable"
|
<PalletItemComponent IsMeasurable="@selectedOrderItem.IsMeasurable"
|
||||||
MeasuringIndex="@localI"
|
MeasuringIndex="@localI"
|
||||||
Editable="@(!currentOrderItemPallet.IsAudited && !(SelectedOrder?.IsComplete ?? false))"
|
Editable="@(_enablePalletItems && !currentOrderItemPallet.IsAudited && !(SelectedOrder?.IsComplete ?? false))"
|
||||||
PalletItem="@currentOrderItemPallet"
|
PalletItem="@currentOrderItemPallet"
|
||||||
ProductId="@selectedOrderItem.ProductId"
|
ProductId="@selectedOrderItem.ProductId"
|
||||||
MaxTrayQuantity="@selectedOrderItem.Quantity"
|
MaxTrayQuantity="@selectedOrderItem.Quantity"
|
||||||
AddOrUpdateSignalRTag="SignalRTags.AddOrUpdateMeasuredOrderItemPallet"
|
AddOrUpdateSignalRTag="SignalRTags.AddOrUpdateMeasuredOrderItemPallet"
|
||||||
|
OnPalletItemSaveOrAuditClick="pallet => OnOrderItemSaveOrAuditClick(pallet, selectedOrderItem)"
|
||||||
OnPalletItemSaved="pallet => OnOrderItemPalletSaved(pallet, selectedOrderItem)"
|
OnPalletItemSaved="pallet => OnOrderItemPalletSaved(pallet, selectedOrderItem)"
|
||||||
OnPalletItemValueChanged="pallet => OnOrderItemPalletValueChanged(pallet, selectedOrderItem)"
|
OnPalletItemValueChanged="pallet => OnOrderItemPalletValueChanged(pallet, selectedOrderItem)"
|
||||||
OnPalletItemAuditedClick="pallet => OnPalletItemAuditedClick(pallet, selectedOrderItem)">
|
OnPalletItemAudited="pallet => OnOrderItemAudited(pallet, selectedOrderItem)">
|
||||||
</PalletItemComponent>
|
</PalletItemComponent>
|
||||||
}
|
}
|
||||||
</DxFormLayoutItem>
|
</DxFormLayoutItem>
|
||||||
|
|
|
||||||
|
|
@ -17,9 +17,10 @@ using Nop.Core.Domain.Orders;
|
||||||
|
|
||||||
namespace FruitBankHybrid.Shared.Pages
|
namespace FruitBankHybrid.Shared.Pages
|
||||||
{
|
{
|
||||||
public partial class MeasuringOut : ComponentBase
|
public partial class MeasuringOut : ComponentBase, IDisposable
|
||||||
{
|
{
|
||||||
private readonly Lock _lock = new Lock();
|
private readonly Lock _lock = new Lock();
|
||||||
|
|
||||||
[Inject] public required IEnumerable<IAcLogWriterClientBase> LogWriters { get; set; }
|
[Inject] public required IEnumerable<IAcLogWriterClientBase> LogWriters { get; set; }
|
||||||
[Inject] public required FruitBankSignalRClient FruitBankSignalRClient { get; set; }
|
[Inject] public required FruitBankSignalRClient FruitBankSignalRClient { get; set; }
|
||||||
[Inject] public required NavigationManager NavManager{ get; set; }
|
[Inject] public required NavigationManager NavManager{ get; set; }
|
||||||
|
|
@ -29,6 +30,7 @@ namespace FruitBankHybrid.Shared.Pages
|
||||||
private LoggerClient _logger = null!;
|
private LoggerClient _logger = null!;
|
||||||
private string _errorText;
|
private string _errorText;
|
||||||
|
|
||||||
|
private bool _enablePalletItems = true;
|
||||||
private int _lastDaysCount = 1;
|
private int _lastDaysCount = 1;
|
||||||
public bool HasMeasuringAccess;
|
public bool HasMeasuringAccess;
|
||||||
public bool LoadingPanelVisible { get; set; } = true;
|
public bool LoadingPanelVisible { get; set; } = true;
|
||||||
|
|
@ -59,99 +61,106 @@ namespace FruitBankHybrid.Shared.Pages
|
||||||
if (messageTag != SignalRTags.SendOrderItemDeleted && messageTag != SignalRTags.SendOrderChanged && messageTag != SignalRTags.SendOrderItemChanged &&
|
if (messageTag != SignalRTags.SendOrderItemDeleted && messageTag != SignalRTags.SendOrderChanged && messageTag != SignalRTags.SendOrderItemChanged &&
|
||||||
messageTag != SignalRTags.SendOrderItemPalletChanged && messageTag != SignalRTags.SendProductChanged) return;
|
messageTag != SignalRTags.SendOrderItemPalletChanged && messageTag != SignalRTags.SendProductChanged) return;
|
||||||
|
|
||||||
_logger.DebugConditional($"SignalRClientOnMessageReceived received. {responseDataMessage}");
|
_logger.DebugConditional($"MeasuringOut.SignalRClientOnMessageReceived received. {responseDataMessage}");
|
||||||
|
|
||||||
OrderDto? orderDto;
|
try
|
||||||
OrderItem? orderItem;
|
|
||||||
OrderItemDto? orderItemDto;
|
|
||||||
|
|
||||||
switch (messageTag)
|
|
||||||
{
|
{
|
||||||
case SignalRTags.SendOrderItemDeleted:
|
OrderDto? orderDto;
|
||||||
orderItem = responseDataMessage?.GetResponseData<OrderItem>();
|
OrderItem? orderItem;
|
||||||
if (orderItem == null) break;
|
OrderItemDto? orderItemDto;
|
||||||
|
|
||||||
lock (_lock)
|
switch (messageTag)
|
||||||
{
|
{
|
||||||
orderDto = SelectedDayOrders.FirstOrDefault(o => o.OrderItemDtos.Any(oi => oi.Id == orderItem.Id));
|
case SignalRTags.SendOrderItemDeleted:
|
||||||
orderDto?.OrderItemDtos.RemoveAll(oi => oi.Id == orderItem.Id);
|
orderItem = responseDataMessage?.GetResponseData<OrderItem>();
|
||||||
}
|
if (orderItem == null) break;
|
||||||
|
|
||||||
await InvokeAsync(StateHasChanged);
|
lock (_lock)
|
||||||
return;
|
{
|
||||||
case SignalRTags.SendOrderChanged:
|
orderDto = SelectedDayOrders.FirstOrDefault(o => o.OrderItemDtos.Any(oi => oi.Id == orderItem.Id));
|
||||||
orderDto = responseDataMessage?.GetResponseData<OrderDto>();
|
orderDto?.OrderItemDtos.RemoveAll(oi => oi.Id == orderItem.Id);
|
||||||
if (orderDto == null) break;
|
}
|
||||||
|
|
||||||
if (orderDto.DateOfReceipt == null) return;
|
await InvokeAsync(StateHasChanged);
|
||||||
|
return;
|
||||||
|
case SignalRTags.SendOrderChanged:
|
||||||
|
orderDto = responseDataMessage?.GetResponseData<OrderDto>();
|
||||||
|
if (orderDto == null) break;
|
||||||
|
|
||||||
lock (_lock)
|
if (orderDto.DateOfReceipt == null) return;
|
||||||
{
|
|
||||||
if (_measuringDates.All(x => x.DateTime.Date != orderDto.DateOfReceipt.Value.Date))
|
|
||||||
_measuringDates.Add(new MeasuringDateSelectorModel(orderDto.Id, orderDto.DateOfReceipt.Value.Date, orderDto.IsMeasured));
|
|
||||||
|
|
||||||
if (SelectedDate != orderDto.DateOfReceipt.Value.Date) return;
|
lock (_lock)
|
||||||
|
{
|
||||||
|
if (_measuringDates.All(x => x.DateTime.Date != orderDto.DateOfReceipt.Value.Date))
|
||||||
|
_measuringDates.Add(new MeasuringDateSelectorModel(orderDto.Id, orderDto.DateOfReceipt.Value.Date, orderDto.IsMeasured));
|
||||||
|
|
||||||
//Elég lenne ez is, csak a CopyTo a Collection - ökben lévő elemeket hozzáfűzi és duplikálva lesznek... -J.
|
if (SelectedDate != orderDto.DateOfReceipt.Value.Date) return;
|
||||||
if (SelectedOrder?.Id == orderDto.Id) orderDto.CopyTo(SelectedOrder);
|
|
||||||
else SelectedDayOrders.UpdateCollection(orderDto, false);
|
|
||||||
|
|
||||||
//var selectedOrderId = SelectedOrder?.Id;
|
//Elég lenne ez is, csak a CopyTo a Collection - ökben lévő elemeket hozzáfűzi és duplikálva lesznek... -J.
|
||||||
//SelectedDayOrders.UpdateCollection(orderDto, false);
|
if (SelectedOrder?.Id == orderDto.Id) orderDto.CopyTo(SelectedOrder);
|
||||||
|
else SelectedDayOrders.UpdateCollection(orderDto, false);
|
||||||
|
|
||||||
//if (selectedOrderId.GetValueOrDefault(-1) == orderDto.Id) SelectedOrder = orderDto;
|
//var selectedOrderId = SelectedOrder?.Id;
|
||||||
}
|
//SelectedDayOrders.UpdateCollection(orderDto, false);
|
||||||
|
|
||||||
await InvokeAsync(StateHasChanged);
|
//if (selectedOrderId.GetValueOrDefault(-1) == orderDto.Id) SelectedOrder = orderDto;
|
||||||
return;
|
}
|
||||||
case SignalRTags.SendOrderItemChanged:
|
|
||||||
orderItemDto = responseDataMessage?.GetResponseData<OrderItemDto>();
|
|
||||||
if (orderItemDto == null) break;
|
|
||||||
|
|
||||||
lock (_lock)
|
await InvokeAsync(StateHasChanged);
|
||||||
{
|
return;
|
||||||
var localOrderDto = SelectedDayOrders.FirstOrDefault(o => o.OrderItemDtos.Any(oi => oi.Id == orderItemDto.Id));
|
case SignalRTags.SendOrderItemChanged:
|
||||||
var localOrderItemDto = localOrderDto?.OrderItemDtos.FirstOrDefault(x => x.Id == orderItemDto.Id);
|
orderItemDto = responseDataMessage?.GetResponseData<OrderItemDto>();
|
||||||
|
if (orderItemDto == null) break;
|
||||||
if (localOrderItemDto == null) return;
|
|
||||||
|
|
||||||
//orderItemDto.OrderDto = localOrderDto!;
|
lock (_lock)
|
||||||
|
{
|
||||||
|
var localOrderDto = SelectedDayOrders.FirstOrDefault(o => o.OrderItemDtos.Any(oi => oi.Id == orderItemDto.Id));
|
||||||
|
var localOrderItemDto = localOrderDto?.OrderItemDtos.FirstOrDefault(x => x.Id == orderItemDto.Id);
|
||||||
|
|
||||||
localOrderItemDto.Quantity = orderItemDto.Quantity;
|
if (localOrderItemDto == null) return;
|
||||||
localOrderItemDto.GenericAttributes.UpdateBaseEntityCollection(orderItemDto.GenericAttributes, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
await InvokeAsync(StateHasChanged);
|
//orderItemDto.OrderDto = localOrderDto!;
|
||||||
return;
|
|
||||||
case SignalRTags.SendOrderItemPalletChanged:
|
|
||||||
var orderItemPallet = responseDataMessage?.GetResponseData<OrderItemPallet>();
|
|
||||||
if (orderItemPallet == null) break;
|
|
||||||
|
|
||||||
lock (_lock)
|
localOrderItemDto.Quantity = orderItemDto.Quantity;
|
||||||
{
|
localOrderItemDto.GenericAttributes.UpdateBaseEntityCollection(orderItemDto.GenericAttributes, false);
|
||||||
var orderItemDtos = SelectedDayOrders.FirstOrDefault(x => x.OrderItemDtos.Any(oi => oi.Id == orderItemPallet.OrderItemId))?.OrderItemDtos;
|
}
|
||||||
|
|
||||||
orderItemDto = orderItemDtos?.FirstOrDefault(oi => oi.Id == orderItemPallet.OrderItemId);
|
|
||||||
if (orderItemDto == null) return;
|
|
||||||
|
|
||||||
orderItemPallet.OrderItemDto = orderItemDto;
|
await InvokeAsync(StateHasChanged);
|
||||||
var orderItemPalletsCount = orderItemDto.OrderItemPallets.Count;
|
return;
|
||||||
|
case SignalRTags.SendOrderItemPalletChanged:
|
||||||
|
var orderItemPallet = responseDataMessage?.GetResponseData<OrderItemPallet>();
|
||||||
|
if (orderItemPallet == null) break;
|
||||||
|
|
||||||
if (orderItemDto.OrderItemPallets[orderItemPalletsCount - 1].Id == 0) orderItemDto.OrderItemPallets.Insert(orderItemPalletsCount - 1, orderItemPallet);
|
lock (_lock)
|
||||||
else orderItemDto.OrderItemPallets.UpdateCollection(orderItemPallet, false);
|
{
|
||||||
}
|
var orderItemDtos = SelectedDayOrders.FirstOrDefault(x => x.OrderItemDtos.Any(oi => oi.Id == orderItemPallet.OrderItemId))?.OrderItemDtos;
|
||||||
|
|
||||||
await InvokeAsync(StateHasChanged);
|
orderItemDto = orderItemDtos?.FirstOrDefault(oi => oi.Id == orderItemPallet.OrderItemId);
|
||||||
return;
|
if (orderItemDto == null) return;
|
||||||
case SignalRTags.SendProductChanged:
|
|
||||||
var productDto = responseDataMessage?.GetResponseData<ProductDto>();
|
|
||||||
if (productDto == null) break;
|
|
||||||
|
|
||||||
await InvokeAsync(StateHasChanged);
|
orderItemPallet.OrderItemDto = orderItemDto;
|
||||||
return;
|
var orderItemPalletsCount = orderItemDto.OrderItemPallets.Count;
|
||||||
|
|
||||||
|
if (orderItemDto.OrderItemPallets[orderItemPalletsCount - 1].Id == 0) orderItemDto.OrderItemPallets.Insert(orderItemPalletsCount - 1, orderItemPallet);
|
||||||
|
else orderItemDto.OrderItemPallets.UpdateCollection(orderItemPallet, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
await InvokeAsync(StateHasChanged);
|
||||||
|
return;
|
||||||
|
case SignalRTags.SendProductChanged:
|
||||||
|
var productDto = responseDataMessage?.GetResponseData<ProductDto>();
|
||||||
|
if (productDto == null) break;
|
||||||
|
|
||||||
|
await InvokeAsync(StateHasChanged);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_logger.Error($"MeasuringOut.SignalRClientOnMessageReceived message == null; messageTag: {messageTag}");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.Error($"MeasuringOut.SignalRClientOnMessageReceived ERROR; messageTag: {messageTag}", ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
_logger.Error($"SignalRClientOnMessageReceived message == null");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task RefreshOrdersFromDb(DateTime dateTime, int lastDaysCount)
|
private async Task RefreshOrdersFromDb(DateTime dateTime, int lastDaysCount)
|
||||||
|
|
@ -241,12 +250,25 @@ namespace FruitBankHybrid.Shared.Pages
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task OnPalletItemAuditedClick(OrderItemPallet? orderItemPallet, OrderItemDto selectedOrderItemDto)
|
private async Task OnOrderItemAudited(OrderItemPallet? orderItemPallet, OrderItemDto selectedOrderItemDto)
|
||||||
{
|
{
|
||||||
if (orderItemPallet == null) return;
|
if (orderItemPallet == null) return;
|
||||||
|
|
||||||
|
_enablePalletItems = false;
|
||||||
|
|
||||||
|
await InvokeAsync(StateHasChanged);
|
||||||
await OnOrderItemPalletSaved(orderItemPallet, selectedOrderItemDto);
|
await OnOrderItemPalletSaved(orderItemPallet, selectedOrderItemDto);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task OnOrderItemSaveOrAuditClick(OrderItemPallet? orderItemPallet, OrderItemDto selectedOrderItemDto)
|
||||||
|
{
|
||||||
|
if (orderItemPallet != null)
|
||||||
|
{
|
||||||
|
_enablePalletItems = false;
|
||||||
|
await InvokeAsync(StateHasChanged);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private async Task OnOrderItemPalletSaved(OrderItemPallet? orderItemPallet, OrderItemDto selectedOrderItemDto)
|
private async Task OnOrderItemPalletSaved(OrderItemPallet? orderItemPallet, OrderItemDto selectedOrderItemDto)
|
||||||
{
|
{
|
||||||
if (orderItemPallet != null)
|
if (orderItemPallet != null)
|
||||||
|
|
@ -258,7 +280,8 @@ namespace FruitBankHybrid.Shared.Pages
|
||||||
}
|
}
|
||||||
else await DialogService.ShowMessageBoxAsync("Hiba", "Adatok mentése sikertelen volt, ellenőrizze a mérés adatait!", MessageBoxRenderStyle.Danger);
|
else await DialogService.ShowMessageBoxAsync("Hiba", "Adatok mentése sikertelen volt, ellenőrizze a mérés adatait!", MessageBoxRenderStyle.Danger);
|
||||||
|
|
||||||
StateHasChanged();
|
_enablePalletItems = true;
|
||||||
|
await InvokeAsync(StateHasChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Task AddNewPalletItemClick(OrderItemDto selectedOrderItemDto)
|
private Task AddNewPalletItemClick(OrderItemDto selectedOrderItemDto)
|
||||||
|
|
@ -359,5 +382,10 @@ namespace FruitBankHybrid.Shared.Pages
|
||||||
orderDto.GenericAttributes.UpdateBaseEntityCollection(genericAttributes, false);
|
orderDto.GenericAttributes.UpdateBaseEntityCollection(genericAttributes, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
FruitBankSignalRClient.OnMessageReceived -= SignalRClientOnMessageReceived;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue