pastilhasandClaude Opus 5 06203f97b3 wrap the document, record and send-mail editors in real forms
typing into a field and pressing enter did nothing in the document editor, the
customer/item/payment/expense dialogs and the send-document dialog — inputs sat
in a div, so the button was the only way to submit. now each wraps in a
<form onSubmit>, with every non-submit button (cancel, close, add/remove line,
"same as billing") marked type="button" so it doesn't submit instead of doing
its own thing.

the record editors share one dialog shell (EditorShell), so a single form
there covers customer, item, payment and expense at once — kept the dialog's
grid gap intact with display:contents rather than nesting a box.

left the list-view filter boxes and the reports date-range picker alone: none
of them has a submit action, so there's nothing for enter to do.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 10:43:59 +00:00

Invoices

Your InvoiceShelf books, inside Officer — invoices, estimates, customers and payments, with the credentials held server-side.

What you get

  • Invoices — list, filter by status, open one and see its lines
  • Estimates — the same, before they become invoices
  • Customers and their history
  • Payments recorded against invoices
  • Multiple companies — add several sets of books and switch between them

Requirements

A running InvoiceShelf instance Officer can reach, and credentials for it.

Setup

Install the plugin, open /invoices, and add an account: a label, the URL, and the credentials. They are encrypted at rest and never sent to the browser. Mark one active.

The plugin does not install or supervise InvoiceShelf. Point it at one you already run.

Permissions

One permission, invoices, grantable per role like any other app permission.

Notes

  • The plugin is named invoices, not invoiceshelf — named for what it shows rather than the daemon behind it, which is what keeps the URL /invoices. See PLUGIN.md.
S
Description
No description provided
Readme
267 KiB
Languages
TypeScript 100%