feat(billing): InvoiceNew form, route-param title, PaymentList links (PMC-60) #34

Closed
David wants to merge 0 commits from feat/pmc-60-billing-ui into main
Owner

Summary

Closes PMC-60 (Billing UI). PMC-62/63 closed in audit; PMC-61/64/65 land here.

  • PMC-65: InvoiceDetailPage uses Invoice {props.id} for header + tab title instead of hardcoded INV-2025-001.
  • PMC-64: PaymentList invoice cells linkified to InvoiceDetail; extracted into a PaymentRow component so the rsx stays readable.
  • PMC-61: InvoiceNewPage form scaffolded with bill-to / contract / dates / single line-item / notes. Submit stays stubbed (1s timeout + navigate) until the server billing module ships - the form just provides the shape.

Test plan

  • cargo check --features web clean
  • /invoices/abc shows "Invoice abc" header
  • /payments invoice cells navigate to /invoices/:id
  • /invoices/new renders the form; submit shows loading then navigates to /invoices

🤖 Generated with Claude Code

## Summary Closes PMC-60 (Billing UI). PMC-62/63 closed in audit; PMC-61/64/65 land here. - `PMC-65`: InvoiceDetailPage uses `Invoice {props.id}` for header + tab title instead of hardcoded INV-2025-001. - `PMC-64`: PaymentList invoice cells linkified to InvoiceDetail; extracted into a PaymentRow component so the rsx stays readable. - `PMC-61`: InvoiceNewPage form scaffolded with bill-to / contract / dates / single line-item / notes. Submit stays stubbed (1s timeout + navigate) until the server billing module ships - the form just provides the shape. ## Test plan - [ ] `cargo check --features web` clean - [ ] /invoices/abc shows "Invoice abc" header - [ ] /payments invoice cells navigate to /invoices/:id - [ ] /invoices/new renders the form; submit shows loading then navigates to /invoices 🤖 Generated with [Claude Code](https://claude.com/claude-code)
InvoiceDetailPage hardcoded "Invoice INV-2025-001" so every invoice URL rendered the same header. Switch the title and tab title to "Invoice {props.id}" so navigation reflects the route. Real invoice numbers replace the bare id once the billing module ships server-side.

#PMC-65 State Done
Payment rows on /payments rendered "INV-2024-097" as a blue-styled span - clickable-looking but a dead text cell. Extract the row to a PaymentRow component that wraps the invoice label in a Link to InvoiceDetail (using a stable id; live ids replace these strings once the billing module ships).

#PMC-64 State Done
feat(billing): implement InvoiceNewPage form (PMC-61)
Some checks failed
Check / clippy + fmt + tests (pull_request) Failing after 3s
Create release / Create release from merged PR (pull_request) Has been skipped
b424683e74
InvoiceNewPage was a placeholder shell with literal "Invoice creation form would go here." text. Add a real form with bill-to / contract / issue-date / due-date / a single line-item row (description, qty, unit price) / notes - matching the field set the server's billing module will eventually need.

Multi-line invoices are deferred to the server module landing (added a small inline note rather than scaffolding repeater logic against a 501 endpoint). Submit rides the stubbed-form pattern (1s timeout + navigate to list) until the billing module ships.

#PMC-61 State Done
vas2000-work closed this pull request 2026-05-21 01:21:57 +02:00
Some checks failed
Check / clippy + fmt + tests (pull_request) Failing after 3s
Required
Details
Create release / Create release from merged PR (pull_request) Has been skipped

Pull request closed

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!34
No description provided.