From 3cf18efd99b2fda075c3ce3914dbbd6594607668 Mon Sep 17 00:00:00 2001 From: Loretta Date: Wed, 17 Jun 2026 13:54:46 +0200 Subject: [PATCH] Add summary fields to EkaerHistory and grid display Added ShippingDate and Partner fields to EkaerHistory with ToonDescription metadata. Introduced SetSummary method in FruitBankEkaerService and interface for setting these fields. Updated EkaerHistoryMapping with a future-use Comment property. Extended FullProcessModel for tests. Displayed new fields in GridEkaerHistory.razor as read-only columns. --- .../Services/Ekaer/FruitBankEkaerService.cs | 6 ++++++ .../Services/Ekaer/IFruitBankEkaerService.cs | 5 +++++ FruitBank.Common/Entities/EkaerHistory.cs | 6 ++++++ FruitBank.Common/Entities/EkaerHistoryMapping.cs | 3 +++ FruitBankHybrid.Shared.Tests/ToonTests.cs | 1 + .../Components/Grids/Ekaers/GridEkaerHistory.razor | 2 ++ 6 files changed, 23 insertions(+) diff --git a/FruitBank.Common.Server/Services/Ekaer/FruitBankEkaerService.cs b/FruitBank.Common.Server/Services/Ekaer/FruitBankEkaerService.cs index f0175bbf..23f266a0 100644 --- a/FruitBank.Common.Server/Services/Ekaer/FruitBankEkaerService.cs +++ b/FruitBank.Common.Server/Services/Ekaer/FruitBankEkaerService.cs @@ -66,6 +66,12 @@ public sealed class FruitBankEkaerService : IFruitBankEkaerService public EkaerObligationResult EvaluateObligation(OrderDto order) => EkaerReportability.Evaluate(_mapper.ToConsignment(order, _settings.Company), _settings); + public void SetSummary(EkaerHistory history, DateTime? shippingDate, string? partner) + { + history.ShippingDate = shippingDate; + history.Partner = partner; + } + /// Config-kapu: külföldi (nem HUF) feladónál az árfolyam kötelező — különben a leképezés ELŐTT /// ValidationError (nincs félrevezető XML). null = rendben, mehet a generálás. private EkaerHistory? TryConfigError(EkaerHistory ekaerHistory, string? currency) diff --git a/FruitBank.Common.Server/Services/Ekaer/IFruitBankEkaerService.cs b/FruitBank.Common.Server/Services/Ekaer/IFruitBankEkaerService.cs index 929d2107..a6f9619f 100644 --- a/FruitBank.Common.Server/Services/Ekaer/IFruitBankEkaerService.cs +++ b/FruitBank.Common.Server/Services/Ekaer/IFruitBankEkaerService.cs @@ -45,4 +45,9 @@ public interface IFruitBankEkaerService /// Eldönti egy kimenő rendelés EKÁER-kötelezettségét (ugyanaz a logika, a rendelés tételeire). EkaerObligationResult EvaluateObligation(OrderDto order); + + /// Beállítja a deklaráció () összegző mezőit (DB-mentes): ShippingDate + Partner. + /// A csoporton belül invariánsak; a forrás-kinyerés (bejövő: doc.ShippingDate + Partner.Name; kimenő: order.DateOfReceipt + + /// Customer.Company) a hívóé. Fallback NINCS — null/üres marad, ha hiányzik. + void SetSummary(EkaerHistory history, DateTime? shippingDate, string? partner); } diff --git a/FruitBank.Common/Entities/EkaerHistory.cs b/FruitBank.Common/Entities/EkaerHistory.cs index 47a3060f..e9a9e26b 100644 --- a/FruitBank.Common/Entities/EkaerHistory.cs +++ b/FruitBank.Common/Entities/EkaerHistory.cs @@ -19,6 +19,12 @@ public sealed class EkaerHistory: MgEntityBase, ITimeStampInfo [ToonDescription(Purpose = "Direction of the goods movement: false = incoming shipment (Shipping), true = outgoing delivery (Order).")] public bool IsOutgoing { get; set; } + [ToonDescription(Purpose = "Declaration-level date snapshot (group-invariant): inbound = the ShippingDocument's ShippingDate, outbound = the Order's DateOfReceipt. Set at create, refreshed on Generate. NO fallback — null if missing (the data gap is visible in the grid).")] + public DateTime? ShippingDate { get; set; } + + [ToonDescription(Purpose = "Declaration-level other-party name snapshot (group-invariant): inbound = the supplier Partner.Name, outbound = the buyer Customer.Company. Set at create, refreshed on Generate. NO fallback — null/empty if missing.")] + public string? Partner { get; set; } + [ToonDescription(Purpose = "Lifecycle state of the declaration, stored as int (see EkaerStatus): 0 Pending (auto-created, not yet generated), 1 Generated (tradeCard XML produced and valid), 2 ValidationError (generation produced errors, see ErrorText), 3 Sent (accepted by NAV, EkaerNumber filled), 4 SendError (NAV call failed, see ErrorText).")] public int StatusId { get; set; } diff --git a/FruitBank.Common/Entities/EkaerHistoryMapping.cs b/FruitBank.Common/Entities/EkaerHistoryMapping.cs index 27fc7b00..614fd7e4 100644 --- a/FruitBank.Common/Entities/EkaerHistoryMapping.cs +++ b/FruitBank.Common/Entities/EkaerHistoryMapping.cs @@ -18,6 +18,9 @@ public sealed class EkaerHistoryMapping : MgEntityBase, ITimeStampInfo [ToonDescription(Purpose = "Id of the covered source entity: ShippingDocument.Id when the parent EkaerHistory.IsOutgoing is false, Order id when true.")] public int ForeignKey { get; set; } + [ToonDescription(Purpose = "Reserved for future PER-DOCUMENT detail. Currently NOT populated — the declaration-level summary (date + other party), being group-invariant, lives on EkaerHistory.ShippingDate + EkaerHistory.Partner instead. The column is kept for later document-specific notes.")] + public string? Comment { get; set; } + [Association(ThisKey = nameof(EkaerHistoryId), OtherKey = nameof(EkaerHistory.Id), CanBeNull = true)] public EkaerHistory? EkaerHistory { get; set; } diff --git a/FruitBankHybrid.Shared.Tests/ToonTests.cs b/FruitBankHybrid.Shared.Tests/ToonTests.cs index fa8609e4..7e0223aa 100644 --- a/FruitBankHybrid.Shared.Tests/ToonTests.cs +++ b/FruitBankHybrid.Shared.Tests/ToonTests.cs @@ -88,6 +88,7 @@ public class FullProcessModel public List Orders { get; set; } public List PreOrders { get; set; } public List StockTakings { get; set; } + public List EkaerHistories { get; set; } } [TestClass] diff --git a/FruitBankHybrid.Shared/Components/Grids/Ekaers/GridEkaerHistory.razor b/FruitBankHybrid.Shared/Components/Grids/Ekaers/GridEkaerHistory.razor index a5d62d52..e3f7e648 100644 --- a/FruitBankHybrid.Shared/Components/Grids/Ekaers/GridEkaerHistory.razor +++ b/FruitBankHybrid.Shared/Components/Grids/Ekaers/GridEkaerHistory.razor @@ -49,6 +49,8 @@ } + + @* A kézi NAV-beadás fázisában a Status / EKÁER szám / SentDate kézzel szerkeszthető. *@