feat(billing): explain frozen-invoice immutability on detail page (PMS-580) #389

Merged
longjacksonle merged 1 commit from feat/PMS-580-invoice-frozen-ui-note into main 2026-06-30 17:40:59 +02:00

PMS-580 (found in PMS-560 Invoices smoke), UI half

The smoke test read a sent invoice's lack of edit / cancel / void actions as a bug. It is intended: once sent, an invoice is a finalized financial record. This spells that out in the UI so the missing actions read as deliberate.

Change (invoice detail page, src/pages/billing.rs)

  • A frozen invoice now shows a short inline note under the header. Copy is status-aware:
    • sent / partially_paid: finalized record, can't be edited / cancelled / voided, Record Payment collects the balance, corrections via credit note.
    • paid: paid and finalized, corrections via credit note.
    • void / written_off: kept on record, can't be edited or reinstated.
  • The Void button (rendered only for draft / pending) gains a tooltip: Void is the pre-send back-out and is unavailable once sent.

No logic or status change. Action gating is unchanged and already matches the server (update_invoice rejects changes once is_frozen).

Companion

The documentation half (full lifecycle + the AC3 decision that no separate pre-send "cancel" control is needed) is a mokosh-server PR adding dev-docs/invoice-lifecycle.md.

Test

Open a draft invoice: hover Void to see the tooltip; no frozen note. Open a sent / paid / void invoice: the inline note explains the immutability and there is no Edit / Send / Void.

🤖 Generated with Claude Code

## PMS-580 (found in PMS-560 Invoices smoke), UI half The smoke test read a sent invoice's lack of edit / cancel / void actions as a bug. It is intended: once sent, an invoice is a finalized financial record. This spells that out in the UI so the missing actions read as deliberate. ## Change (invoice detail page, `src/pages/billing.rs`) - A frozen invoice now shows a short inline note under the header. Copy is status-aware: - sent / partially_paid: finalized record, can't be edited / cancelled / voided, Record Payment collects the balance, corrections via credit note. - paid: paid and finalized, corrections via credit note. - void / written_off: kept on record, can't be edited or reinstated. - The Void button (rendered only for draft / pending) gains a tooltip: Void is the pre-send back-out and is unavailable once sent. No logic or status change. Action gating is unchanged and already matches the server (`update_invoice` rejects changes once `is_frozen`). ## Companion The documentation half (full lifecycle + the AC3 decision that no separate pre-send "cancel" control is needed) is a mokosh-server PR adding `dev-docs/invoice-lifecycle.md`. ## Test Open a draft invoice: hover Void to see the tooltip; no frozen note. Open a sent / paid / void invoice: the inline note explains the immutability and there is no Edit / Send / Void. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
feat(billing): explain frozen-invoice immutability on detail page (PMS-580)
All checks were successful
Check / fmt + clippy + tests (pull_request) Successful in 1m22s
Create release / Create release from merged PR (pull_request) Has been skipped
e94da3c94d
A smoke test (PMS-560) read the absence of edit / cancel / void actions on a sent invoice as a bug. It is intended: a sent invoice is a finalized financial record. This makes that obvious in the UI instead of leaving the user to guess.

On the invoice detail page, a frozen invoice (sent, partially_paid, paid, void, written_off) now shows a short inline note stating that it is a finalized record, that it can't be edited / cancelled / voided, that Record Payment collects the balance, and that corrections go through a credit note. The Void button (shown only for draft / pending) gains a tooltip clarifying that Void is the pre-send back-out and is unavailable once sent. No logic or status change; the action gating is unchanged and already matches the server.

Companion to the mokosh-server doc PR that captures the full lifecycle and the AC3 decision (no separate pre-send "cancel" control needed).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
longjacksonle deleted branch feat/PMS-580-invoice-frozen-ui-note 2026-06-30 17:40:59 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
psa-systems/mokosh-apps!389
No description provided.