fix(desktop): count only active MaterialLedger holds and link the nest page

MaterialLedger's Release lets a hold go, so a Released hold no longer keeps
a sheet for the nest; only Proposed, Approved and AwaitingCloseout holds,
the statuses ML counts against free stock, are open. The Has Been Cut
note's link pointed at /Nests/{id}, which ML does not serve; its nest page
is /Nests/Details/{id}.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ajandClaude Opus 5.5 committed 2026-10-25 18:20:11 -04:00
1 parent c27188c722
commit 079dfaf9ea
6 files changed
+18 -15

No files matched your search

@@ -50,7 +50,7 @@ public sealed class LedgerHoldSummary
public int OpenHolds { get; }
/// <summary>Holds in any other status: closed, cancelled, exception or unknown.</summary>
/// <summary>Holds in any other status: released, closed, cancelled, exception or unknown.</summary>
public int ClosedHolds { get; }
/// <summary>Sheets without an open hold.</summary>
+3 -3
View File
@@ -30,13 +30,13 @@ public static class LedgerHoldStatuses
public const string Exception = "Exception";
/// <summary>
/// True for holds that still keep a sheet for the nest and need closing out. Closed,
/// cancelled, exception and unknown statuses are not open.
/// True for holds that still keep a sheet for the nest and need closing out: the statuses ML
/// counts against free stock. Released means the hold was let go, not sent to cutting, so it
/// is not open; nor are closed, cancelled, exception and unknown statuses.
/// </summary>
public static bool IsOpen(string? status) =>
string.Equals(status, Proposed, StringComparison.OrdinalIgnoreCase)
|| string.Equals(status, Approved, StringComparison.OrdinalIgnoreCase)
|| string.Equals(status, Released, StringComparison.OrdinalIgnoreCase)
|| string.Equals(status, AwaitingCloseout, StringComparison.OrdinalIgnoreCase);
}