EkaerHistoryFilter: add [Flags], tab count refresh, API
- Refactored EkaerHistoryFilter as a [Flags] enum for combinable filters and improved docs. - Added GetEkaerHistoryCount SignalR API and client method. - GridEkaerHistory now notifies parent on data changes via OnDataChanged callback. - Ekaer.razor tabs now show live "NeedsCompletion" counts and refresh on tab/data changes. - Updated tab order, filter assignments, and disabled tab reordering.
This commit is contained in:
parent
1e41632599
commit
6f46aaebb0
|
|
@ -92,18 +92,21 @@ public static class EkaerStatusExtensions
|
|||
public static bool NeedsCompletion(this EkaerStatus status) => status is EkaerStatus.SentWithMissingData;
|
||||
}
|
||||
|
||||
/// <summary>EkaerHistory-lekérdezés szűrő a tabokhoz. <see cref="All"/> = 0 (minden) — szándékosan explicit, NEM nullable,
|
||||
/// hogy ne kelljen null-t kezelni sehol; a default érték (0) automatikusan „minden", ami biztonságos.</summary>
|
||||
/// <summary>EkaerHistory-lekérdezés szűrő a tabokhoz, <see cref="FlagsAttribute"/>. A kategóriák diszjunkt
|
||||
/// StatusId-partíciók, ezért kombinálhatók (pl. <c>ToSubmit | NeedsCompletion</c> = minden, ami még nincs lezárva).
|
||||
/// <see cref="All"/> = 0 (nincs bit = nincs szűrő → minden), egyúttal a biztonságos default; szándékosan NEM nullable.
|
||||
/// Vigyázat: <c>HasFlag(All)</c> mindig true (0 bit), ezért a szerver előbb a <c>== All</c> ágat nézi.</summary>
|
||||
[Flags]
|
||||
public enum EkaerHistoryFilter
|
||||
{
|
||||
/// <summary>Minden rekord (nincs szűrés).</summary>
|
||||
/// <summary>Minden rekord (nincs szűrés). 0 = nincs bit → minden; egyúttal a biztonságos default.</summary>
|
||||
All = 0,
|
||||
/// <summary>Beküldésre váró: minden, ami még NINCS a NAV-nál (Pending/Generated/GeneratedWithWarning/ValidationError/SendError).</summary>
|
||||
ToSubmit,
|
||||
ToSubmit = 1,
|
||||
/// <summary>Elküldött és hiánytalan (<see cref="EkaerStatus.Sent"/>).</summary>
|
||||
Sent,
|
||||
Sent = 2,
|
||||
/// <summary>Elküldve, de pótlásra vár (<see cref="EkaerStatus.SentWithMissingData"/>).</summary>
|
||||
NeedsCompletion,
|
||||
NeedsCompletion = 4,
|
||||
}
|
||||
|
||||
//public sealed class EkaerHistoryShipping : EkaerHistoryBase
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ public interface IFruitBankDataControllerCommon
|
|||
public Task<EkaerHistory?> GenerateEkaerXmlDocument(int foreignKey, bool isOutgoing);
|
||||
public Task<EkaerHistory?> CreateEkaerHistory(int foreignKey, bool isOutgoing);
|
||||
public Task<int> CreateMissingEkaerHistories(DateTime fromDate);
|
||||
public Task<int> GetEkaerHistoryCount(EkaerHistoryFilter filter);
|
||||
#endregion EkaerHistory
|
||||
|
||||
#region CargoPartner
|
||||
|
|
|
|||
|
|
@ -126,6 +126,7 @@ public class SignalRTags : AcSignalRTags
|
|||
public const int GenerateEkaerXmlDocument = 190;
|
||||
public const int CreateEkaerHistory = 191;
|
||||
public const int CreateMissingEkaerHistories = 192;
|
||||
public const int GetEkaerHistoryCount = 193;
|
||||
|
||||
public const int AuthenticateUser = 195;
|
||||
public const int RefreshToken = 200;
|
||||
|
|
|
|||
|
|
@ -143,6 +143,10 @@
|
|||
/// <summary>Szerver-oldali szűrő (a tabok adják): ToSubmit / Sent / NeedsCompletion. Default All = minden.</summary>
|
||||
[Parameter] public EkaerHistoryFilter Filter { get; set; } = EkaerHistoryFilter.All;
|
||||
|
||||
/// <summary>A szülő (oldal) értesítése, ha egy művelet státuszt válthatott (generálás / kézi mentés / jövőbeni beküldés) —
|
||||
/// hogy a fül-számlálók azonnal frissüljenek, mert a sor átkerülhet másik tabra.</summary>
|
||||
[Parameter] public EventCallback OnDataChanged { get; set; }
|
||||
|
||||
public bool IsMasterGrid => ParentDataItem == null;
|
||||
|
||||
private LoggerClient<GridEkaerHistory> _logger;
|
||||
|
|
@ -170,7 +174,10 @@
|
|||
if (Grid == null) return;
|
||||
|
||||
if (Grid.IsEditing() && !Grid.IsEditingNewRow())
|
||||
{
|
||||
await Grid.SaveChangesAsync();
|
||||
await NotifyDataChanged(); // kézi szerkesztés (pl. Status → SentWithMissingData) → fül-szám frissítése
|
||||
}
|
||||
|
||||
FocusedRowVisibleIndex = args.VisibleIndex;
|
||||
EditItemsEnabled = true;
|
||||
|
|
@ -186,6 +193,9 @@
|
|||
private static bool CanCopy(EkaerHistory ekaerHistory)
|
||||
=> ekaerHistory.Status.IsSubmittable() && !string.IsNullOrWhiteSpace(ekaerHistory.XmlDoc);
|
||||
|
||||
// A szülő-oldal (fül-számlálók) értesítése egy státuszt érintő művelet után. Üres delegáltnál no-op.
|
||||
private Task NotifyDataChanged() => OnDataChanged.HasDelegate ? OnDataChanged.InvokeAsync() : Task.CompletedTask;
|
||||
|
||||
private async Task OnGenerateClick(EkaerHistory ekaerHistory)
|
||||
{
|
||||
if (!_generatingIds.Add(ekaerHistory.Id)) return;
|
||||
|
|
@ -217,6 +227,7 @@
|
|||
{
|
||||
_generatingIds.Remove(ekaerHistory.Id);
|
||||
Grid?.Reload();
|
||||
await NotifyDataChanged();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -15,15 +15,15 @@
|
|||
IndicatorAreaVisible="false"
|
||||
Text="Adatok szinkronizálása folyamatban...">
|
||||
|
||||
<DxTabs ActiveTabIndexChanged="(i) => OnActiveTabChanged(i)" RenderMode="TabsRenderMode.OnDemand" AllowTabReorder="true">
|
||||
<DxTabs ActiveTabIndexChanged="(i) => OnActiveTabChanged(i)" RenderMode="TabsRenderMode.OnDemand" AllowTabReorder="false">
|
||||
<DxTabPage Text="Beküldésre váró">
|
||||
<GridEkaerHistory @ref="gridEkaerHistoryPending" Filter="EkaerHistoryFilter.ToSubmit"></GridEkaerHistory>
|
||||
<GridEkaerHistory @ref="gridEkaerHistoryPending" Filter="EkaerHistoryFilter.ToSubmit" OnDataChanged="RefreshNeedsCompletionCountAsync"></GridEkaerHistory>
|
||||
</DxTabPage>
|
||||
<DxTabPage Text="@NeedsCompletionTabText">
|
||||
<GridEkaerHistory @ref="gridEkaerHistoryNeedsCompletion" Filter="EkaerHistoryFilter.ToSubmit" OnDataChanged="RefreshNeedsCompletionCountAsync"></GridEkaerHistory>
|
||||
</DxTabPage>
|
||||
<DxTabPage Text="Elküldött">
|
||||
<GridEkaerHistory @ref="gridEkaerHistorySent" Filter="EkaerHistoryFilter.Sent"></GridEkaerHistory>
|
||||
</DxTabPage>
|
||||
<DxTabPage Text="Pótlásra váró">
|
||||
<GridEkaerHistory @ref="gridEkaerHistoryNeedsCompletion" Filter="EkaerHistoryFilter.NeedsCompletion"></GridEkaerHistory>
|
||||
<GridEkaerHistory @ref="gridEkaerHistorySent" Filter="EkaerHistoryFilter.Sent" OnDataChanged="RefreshNeedsCompletionCountAsync"></GridEkaerHistory>
|
||||
</DxTabPage>
|
||||
</DxTabs>
|
||||
</DxLoadingPanel>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,9 @@
|
|||
using AyCode.Core.Loggers;
|
||||
using FruitBank.Common.Entities;
|
||||
using FruitBank.Common.Models;
|
||||
using FruitBankHybrid.Shared.Components.Grids.Ekaers;
|
||||
using FruitBankHybrid.Shared.Services.Loggers;
|
||||
using FruitBankHybrid.Shared.Services.SignalRs;
|
||||
using Mango.Nop.Core.Loggers;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
|
||||
|
|
@ -12,6 +14,7 @@ public partial class Ekaer : ComponentBase
|
|||
[Inject] public required IEnumerable<IAcLogWriterClientBase> LogWriters { get; set; }
|
||||
[Inject] public required NavigationManager NavManager { get; set; }
|
||||
[Inject] public required LoggedInModel LoggedInModel { get; set; }
|
||||
[Inject] public required FruitBankSignalRClient FruitBankSignalRClient { get; set; }
|
||||
|
||||
private GridEkaerHistory gridEkaerHistoryPending;
|
||||
private GridEkaerHistory gridEkaerHistorySent;
|
||||
|
|
@ -20,20 +23,40 @@ public partial class Ekaer : ComponentBase
|
|||
private ILogger _logger = null!;
|
||||
public int ActiveTabIndex;
|
||||
|
||||
protected override Task OnInitializedAsync()
|
||||
/// <summary>Pótlásra váró (SentWithMissingData) rekordok száma a fül feliratához — hogy ránézésre látsszon, ha van pótolnivaló.</summary>
|
||||
private int _needsCompletionCount;
|
||||
public string NeedsCompletionTabText => _needsCompletionCount > 0 ? $"Pótlásra váró ({_needsCompletionCount})" : "Pótlásra váró";
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
if (!LoggedInModel.IsRevisor) NavManager.NavigateTo("/Login");
|
||||
|
||||
_logger = new LoggerClient<Ekaer>(LogWriters.ToArray());
|
||||
_logger.Info("OnInitializedAsync");
|
||||
|
||||
return base.OnInitializedAsync();
|
||||
await base.OnInitializedAsync();
|
||||
await RefreshNeedsCompletionCountAsync();
|
||||
}
|
||||
|
||||
protected Task OnActiveTabChanged(int activeTabIndex)
|
||||
protected async Task OnActiveTabChanged(int activeTabIndex)
|
||||
{
|
||||
ActiveTabIndex = activeTabIndex;
|
||||
// A fülek tartalma (EKÁER-grid) külön feladat — több előfeltétele van (kliens-metódus, szűrés).
|
||||
return Task.CompletedTask;
|
||||
// Fülváltáskor frissítjük a számlálót — a gridben végzett művelet (generálás/státusz-állítás) megváltoztathatta.
|
||||
await RefreshNeedsCompletionCountAsync();
|
||||
}
|
||||
|
||||
/// <summary>A „Pótlásra váró" rekordok számának frissítése a fül feliratához (a count endpointról, flag-szűrővel).</summary>
|
||||
private async Task RefreshNeedsCompletionCountAsync()
|
||||
{
|
||||
try
|
||||
{
|
||||
//_needsCompletionCount = await FruitBankSignalRClient.GetEkaerHistoryCount(EkaerHistoryFilter.NeedsCompletion);
|
||||
_needsCompletionCount = await FruitBankSignalRClient.GetEkaerHistoryCount(EkaerHistoryFilter.ToSubmit);
|
||||
StateHasChanged();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.Error($"GetEkaerHistoryCount hiba: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -82,6 +82,7 @@ namespace FruitBankHybrid.Shared.Services.SignalRs
|
|||
public Task<EkaerHistory?> GenerateEkaerXmlDocument(int foreignKey, bool isOutgoing) => GetByIdAsync<EkaerHistory?>(SignalRTags.GenerateEkaerXmlDocument, [foreignKey, isOutgoing]);
|
||||
public Task<EkaerHistory?> CreateEkaerHistory(int foreignKey, bool isOutgoing) => GetByIdAsync<EkaerHistory?>(SignalRTags.CreateEkaerHistory, [foreignKey, isOutgoing]);
|
||||
public Task<int> CreateMissingEkaerHistories(DateTime fromDate) => GetByIdAsync<int>(SignalRTags.CreateMissingEkaerHistories, fromDate);
|
||||
public Task<int> GetEkaerHistoryCount(EkaerHistoryFilter filter) => GetByIdAsync<int>(SignalRTags.GetEkaerHistoryCount, filter);
|
||||
#endregion EkaerHistory
|
||||
|
||||
#region CargoPartner
|
||||
|
|
|
|||
Loading…
Reference in New Issue