Invoice Detail View #697

Merged
tobru merged 14 commits from feat/invoice-detail into main 2026-09-24 09:39:19 +00:00
Owner
No description provided.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Every outside service must be mocked. The existing forbid_real_odoo
fixture only covers OdooClient; plain requests/urllib calls (such as the
invoice PDF fallback) could still leave the machine. Non-unix socket
connects and DNS lookups now raise NetworkAccessBlocked, a BaseException
so that broad `except Exception` clauses cannot swallow it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Odoo needs about 10 s to render an invoice PDF (measured on preprod,
where the filestore is missing so every download renders). The shared
10 s ODOO_TIMEOUT cut the request off right before the answer. The PDF
fetch now uses ODOO_PDF_TIMEOUT (30 s, below gunicorn's 60 s).

The error now names the exception type (still without the tokenised
URL), and the log tells "no stored PDF" apart from "stored PDF has no
content", which is what preprod shows.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Use the tax's "Label on Invoices" (description), falling back to its
name, like Odoo's own invoice report: "8.1%" instead of "8.1% Sales".

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
feat(invoices): dashboard header, grouped sections and instance links
All checks were successful
Tests / test (push) Successful in 2m15s
8d0da686ef
- Overview card with the total, payment state, an overdue marker and
  the invoice facts next to it.
- Line items grouped per Odoo section, each with its own subtotal.
- Subtotal, taxes, total and amount due in a separate summary block.
- Section titles naming one of the organization's instances (the
  billing annotation's itemGroupDescription) link to that instance.
- Page styles live in css/invoice.css.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
tobru merged commit 498e06cb54 into main 2026-09-24 09:39:19 +00:00
tobru deleted branch feat/invoice-detail 2026-09-24 09:39:19 +00:00
Sign in to join this conversation.
No description provided.