diff --git a/FruitBank.Common/Entities/EkaerHistory.cs b/FruitBank.Common/Entities/EkaerHistory.cs
index d2113409..34b9f56a 100644
--- a/FruitBank.Common/Entities/EkaerHistory.cs
+++ b/FruitBank.Common/Entities/EkaerHistory.cs
@@ -92,18 +92,21 @@ public static class EkaerStatusExtensions
public static bool NeedsCompletion(this EkaerStatus status) => status is EkaerStatus.SentWithMissingData;
}
-/// EkaerHistory-lekérdezés szűrő a tabokhoz. = 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.
+/// EkaerHistory-lekérdezés szűrő a tabokhoz, . A kategóriák diszjunkt
+/// StatusId-partíciók, ezért kombinálhatók (pl. ToSubmit | NeedsCompletion = minden, ami még nincs lezárva).
+/// = 0 (nincs bit = nincs szűrő → minden), egyúttal a biztonságos default; szándékosan NEM nullable.
+/// Vigyázat: HasFlag(All) mindig true (0 bit), ezért a szerver előbb a == All ágat nézi.
+[Flags]
public enum EkaerHistoryFilter
{
- /// Minden rekord (nincs szűrés).
+ /// Minden rekord (nincs szűrés). 0 = nincs bit → minden; egyúttal a biztonságos default.
All = 0,
/// Beküldésre váró: minden, ami még NINCS a NAV-nál (Pending/Generated/GeneratedWithWarning/ValidationError/SendError).
- ToSubmit,
+ ToSubmit = 1,
/// Elküldött és hiánytalan ().
- Sent,
+ Sent = 2,
/// Elküldve, de pótlásra vár ().
- NeedsCompletion,
+ NeedsCompletion = 4,
}
//public sealed class EkaerHistoryShipping : EkaerHistoryBase
diff --git a/FruitBank.Common/Interfaces/IFruitBankDataControllerCommon.cs b/FruitBank.Common/Interfaces/IFruitBankDataControllerCommon.cs
index 4152eb0c..703e61fe 100644
--- a/FruitBank.Common/Interfaces/IFruitBankDataControllerCommon.cs
+++ b/FruitBank.Common/Interfaces/IFruitBankDataControllerCommon.cs
@@ -37,6 +37,7 @@ public interface IFruitBankDataControllerCommon
public Task GenerateEkaerXmlDocument(int foreignKey, bool isOutgoing);
public Task CreateEkaerHistory(int foreignKey, bool isOutgoing);
public Task CreateMissingEkaerHistories(DateTime fromDate);
+ public Task GetEkaerHistoryCount(EkaerHistoryFilter filter);
#endregion EkaerHistory
#region CargoPartner
diff --git a/FruitBank.Common/SignalRs/SignalRTags.cs b/FruitBank.Common/SignalRs/SignalRTags.cs
index 3232da03..d62c2ec3 100644
--- a/FruitBank.Common/SignalRs/SignalRTags.cs
+++ b/FruitBank.Common/SignalRs/SignalRTags.cs
@@ -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;
diff --git a/FruitBankHybrid.Shared/Components/Grids/Ekaers/GridEkaerHistory.razor b/FruitBankHybrid.Shared/Components/Grids/Ekaers/GridEkaerHistory.razor
index b8861425..6fb0fa17 100644
--- a/FruitBankHybrid.Shared/Components/Grids/Ekaers/GridEkaerHistory.razor
+++ b/FruitBankHybrid.Shared/Components/Grids/Ekaers/GridEkaerHistory.razor
@@ -143,6 +143,10 @@
/// Szerver-oldali szűrő (a tabok adják): ToSubmit / Sent / NeedsCompletion. Default All = minden.
[Parameter] public EkaerHistoryFilter Filter { get; set; } = EkaerHistoryFilter.All;
+ /// 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.
+ [Parameter] public EventCallback OnDataChanged { get; set; }
+
public bool IsMasterGrid => ParentDataItem == null;
private LoggerClient _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();
}
}
diff --git a/FruitBankHybrid.Shared/Pages/Ekaer.razor b/FruitBankHybrid.Shared/Pages/Ekaer.razor
index a4ce3750..8dda41ef 100644
--- a/FruitBankHybrid.Shared/Pages/Ekaer.razor
+++ b/FruitBankHybrid.Shared/Pages/Ekaer.razor
@@ -15,15 +15,15 @@
IndicatorAreaVisible="false"
Text="Adatok szinkronizálása folyamatban...">
-
+
-
+
+
+
+
-
-
-
-
+
diff --git a/FruitBankHybrid.Shared/Pages/Ekaer.razor.cs b/FruitBankHybrid.Shared/Pages/Ekaer.razor.cs
index d7c2ecef..ce186905 100644
--- a/FruitBankHybrid.Shared/Pages/Ekaer.razor.cs
+++ b/FruitBankHybrid.Shared/Pages/Ekaer.razor.cs
@@ -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 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()
+ /// 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ó.
+ 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(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();
+ }
+
+ /// 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).
+ 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}");
+ }
}
}
diff --git a/FruitBankHybrid.Shared/Services/SignalRs/FruitBankSignalRClient.cs b/FruitBankHybrid.Shared/Services/SignalRs/FruitBankSignalRClient.cs
index a620ea2a..b0a74468 100644
--- a/FruitBankHybrid.Shared/Services/SignalRs/FruitBankSignalRClient.cs
+++ b/FruitBankHybrid.Shared/Services/SignalRs/FruitBankSignalRClient.cs
@@ -82,6 +82,7 @@ namespace FruitBankHybrid.Shared.Services.SignalRs
public Task GenerateEkaerXmlDocument(int foreignKey, bool isOutgoing) => GetByIdAsync(SignalRTags.GenerateEkaerXmlDocument, [foreignKey, isOutgoing]);
public Task CreateEkaerHistory(int foreignKey, bool isOutgoing) => GetByIdAsync(SignalRTags.CreateEkaerHistory, [foreignKey, isOutgoing]);
public Task CreateMissingEkaerHistories(DateTime fromDate) => GetByIdAsync(SignalRTags.CreateMissingEkaerHistories, fromDate);
+ public Task GetEkaerHistoryCount(EkaerHistoryFilter filter) => GetByIdAsync(SignalRTags.GetEkaerHistoryCount, filter);
#endregion EkaerHistory
#region CargoPartner