ledger-import invoice_pdf (templates/invoice.typ): seller, bill-to, number, dates, terms, lines, total, each settled line and the balance due; money formatted in Rust (the template does no arithmetic), text as data, deterministic bytes. Stamps as a rubber stamp would mark it, in red: PAID (with the day it was paid in full: the invoice is then the customer's receipt), PARTIALLY PAID, PAST DUE, VOID; DRAFT in gray for S4's preview. ledger-package invoice_document builds it from the books as of a day: the derived figures (B-38), each payment that stands on its own line with its date, payment method and reference; re-created copies say so (the issued copy is kept from S4 on and never changes). books.document pdf hands it over as a download; the viewer's invoice page saves or opens it. The owner asked for the paid stamp with the payment's date and details (2026-10-24). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01T3gXMVt7XJPi6ens1or9Dj
This commit is contained in:
12 files changed
+843
-4
No files matched your search
@@ -175,6 +175,8 @@ fn a_documents_page_shows_its_timeline() {
|
||||
);
|
||||
// Received: nothing stands.
|
||||
assert!(h.query_by_label("$0.00").is_some());
|
||||
// An invoice can be saved as PDF (a bill can't: it is the vendor's).
|
||||
assert!(h.query_by_label_contains("Save invoice PDF").is_some());
|
||||
// A timeline row opens its entry.
|
||||
h.get_by_label_contains(&format!("Payment (reversed later), entry #{pay},"))
|
||||
.click();
|
||||
|
||||
Reference in new issue
Block a user