` to keep it together when it fits and naturally wrap to a fresh page when it doesn't. | `fusion_plating_reports/report/report_coc.xml` |
| **`opacity` + `italic` muted text renders jagged on entech wkhtmltopdf** | The obvious pattern for a subtle footnote — `font-style: italic; opacity: 0.7;` (used by `.fp-coc .small-label`) — produces washed-out, jagged characters that look "broken" or "messed up" on the printed PDF. Visually it reads as garbled text even though the source is clean. **Use solid grey (`color: #555`) at normal weight instead** for muted secondary text. Same workaround applies to any `opacity`-driven greyed-out element bound for wkhtmltopdf. The existing `.small-label` class still exists for legacy callers but new code should prefer an explicit `color:` style. | `fusion_plating_reports` |
-| **wkhtmltopdf header overlap — paperformat.margin_top, NOT body padding-top** | The wkhtmltopdf header zone is sized by `report.paperformat.margin_top` (and `header_spacing`). If the `web.external_layout` header (logo + address etc.) renders ~28mm tall but paperformat reserves only 8mm, page 2+ has the header bleeding over body content (the overlap shows up as the company logo printed *on top of* the signature, readings table, etc.). The anti-pattern is "fix" it by adding `padding-top: 50mm` to the body wrapper — this only pads page 1 (single one-shot padding) and does nothing for subsequent pages, while also wasting 50mm of usable space on page 1. **Right fix:** size `paperformat.margin_top` to the actual rendered header height, then drop body `padding-top` to a tiny visual gap (~5mm). Each report can have its own paperformat — `report_coc_en` / `report_coc_fr` use "Fusion Plating CoC" (id 13); the legacy `report_coc` uses "A4 Landscape (Fusion Plating)" (id 12). Update the right one and don't bleed changes across reports. | `fusion_plating_reports`, `report.paperformat` |
+| **wkhtmltopdf header overlap — paperformat.margin_top, NOT body padding-top** | The wkhtmltopdf header zone is sized by `report.paperformat.margin_top` (and `header_spacing`). If the `web.external_layout` header (logo + address etc.) renders ~28mm tall but paperformat reserves only 8mm, page 2+ has the header bleeding over body content (the overlap shows up as the company logo printed *on top of* the signature, readings table, etc.). The anti-pattern is "fix" it by adding `padding-top: 50mm` to the body wrapper — this only pads page 1 (single one-shot padding) and does nothing for subsequent pages, while also wasting 50mm of usable space on page 1. **Right fix:** size `paperformat.margin_top` to the actual rendered header height, then drop body `padding-top` to a tiny visual gap (~5mm). Each report can have its own paperformat — `report_coc_en` / `report_coc_fr` use "Fusion Plating CoC" (id 13); the legacy `report_coc` uses "A4 Landscape (Fusion Plating)" (id 12). Update the right one and don't bleed changes across reports. **Corollary — don't use negative `margin-top` to "tighten" the gap** (e.g. `.my-page { margin-top: -10px; }` to pull the H1 up under the header). The body wrapper sits at the bottom edge of the reserved margin_top zone; any negative margin pushes content INTO the header band, where wkhtmltopdf clips the top of glyphs (looks like the title is half-eaten). If the gap really feels too big, shrink the title font instead, or reduce `paperformat.margin_top` so the entire header zone is shorter. **For customer-facing portrait reports** (SO confirmation, quote, invoice, packing slip, BoL) the canonical compact paperformat is `fusion_plating_reports.paperformat_fp_a4_portrait` (margin_top=22mm, header_spacing=3mm, keeps the standard header band). Bind it via `
` rather than creating yet-another-one. **Two compounding-padding traps to be aware of:** (1) Odoo's `.page` class has `padding: 1cm` baked in (Bootstrap-derived). If you wrap your body in `
` AND add a body `padding-top: 15mm`, you get the paperformat margin_top + 10mm Odoo + 15mm yours = ~65mm of dead space above the title. To remove the .page contribution without losing its left/right padding, override only the top: `.fp-report.fp-sale .page { padding-top: 0 !important; }`. CoC sidesteps this by NOT using an inner `.page` div — it wraps directly in `
` and puts padding on that. (2) The base `.fp-report table.bordered th, .fp-report table.bordered td` rule applies borders explicitly, BUT a separate cascade still bleeds borders onto NESTED `
` elements even when the inner table has no `.bordered` class — `border: 0 !important` on the cells does NOT reliably override it (some wkhtmltopdf rendering paths still draw the lines). **Don't use a `` for non-bordered layouts** like a title/barcode strip; use `` + `float: right` / flexbox instead. Saves an hour of CSS specificity arguments with wkhtmltopdf. (3) **CSS comments inside QWeb `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+ OrderedComm.
+ |
+
+ ShippedEXP
+ |
+
+ B/OÀ venir
+ |
+
+ Part NumberN° de pièce
+ |
+
+ POB/C
+ |
+
+ WOB/T
+ |
+
+ ProcessProcédé
+ |
+
+ Description
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ -
+ |
+
+
+ |
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+ Received By
+ / Reçu par
+
+
+ Print name & signature
+ |
+
+
+ Received Date
+ / Date de réception
+
+
+ YYYY-MM-DD
+ |
+
+
+
+
+
+ Scan the QR Code to Sign
+ Scannez le code QR pour signer
+
+ |
+
+
+
+
+
@@ -16,6 +155,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -24,92 +182,67 @@
-
-
-
-
- | FROM |
- SHIP TO |
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
- |
- |
- |
-
-
-
+ |
+
+
+
+
+ |
+
+
+
+
- -
|
|
-
-
+
+
- | PART NUMBER |
- DESCRIPTION |
- QTY |
- UOM |
- LOT / SERIAL |
+
+ Ship ViaMode d'expédition
+ |
+
+ Shipping DateDate d'expédition
+ |
+
+ Tracking #N° de suivi
+ |
-
-
-
- |
-
- |
-
-
- |
-
-
- |
- |
-
-
-
-
-
-
- |
-
-
+
+ |
+
+
+
+
+ —
+ |
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -118,21 +251,8 @@
-
-
-
-
-
-
Shipper (Signature / Date)
-
-
-
-
-
-
Receiver (Signature / Date)
-
-
-
+
+
@@ -149,6 +269,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
@@ -157,104 +289,67 @@
-
-
-
-
- | FROM |
- SHIP TO |
-
-
+
+
-
-
-
+ |
+
+
+
+
|
-
-
-
+ |
+
+
+
+
|
-
-
+
+
- | SHIP DATE |
- SOURCE |
- OPERATION |
- CARRIER |
- TRACKING REF |
+
+ Ship ViaMode d'expédition
+ |
+
+ Shipping DateDate d'expédition
+ |
+
+ Tracking #N° de suivi
+ |
- |
- |
- |
-
-
-
+ |
+
+
+
- -
- |
-
-
-
-
- -
+ —
|
+ |
|
-
-
-
-
- | PART NUMBER |
- DESCRIPTION |
- ORDERED |
- DONE |
- UOM |
- LOT / SERIAL |
- NOTES |
-
-
-
-
-
-
- |
-
- |
-
-
- |
-
-
- |
-
-
- |
- |
-
-
-
-
-
-
- |
- |
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -264,21 +359,8 @@
-
-
-
-
-
-
Shipper (Signature / Date)
-
-
-
-
-
-
Receiver (Signature / Date)
-
-
-
+
+
diff --git a/fusion_plating/fusion_plating_reports/report/report_fp_sale.xml b/fusion_plating/fusion_plating_reports/report/report_fp_sale.xml
index 101b2e80..cb2be321 100644
--- a/fusion_plating/fusion_plating_reports/report/report_fp_sale.xml
+++ b/fusion_plating/fusion_plating_reports/report/report_fp_sale.xml
@@ -11,28 +11,99 @@
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
-
-
- Quotation #
- Sales Order #
-
-
+
+
+
+
+
![Order Barcode]()
+
+
+
+
+ /
+ #
+
+
-
+
- | BILLING ADDRESS |
- SHIPPING ADDRESS |
+
+ Billing Address/Adresse de facturation
+ |
+
+ Shipping Address/Adresse d'expédition
+ |
@@ -49,115 +120,144 @@
-
+
-
-
-
-
-
+
+
+
+
+
|
- |
- |
- |
- RUSH
- Standard
+
+
+
+ —
+ |
+ |
+ |
+
+
+ Rush / Urgent
+
+ Standard
|
-
-
+
+
-
-
-
+
+
+
- |
- |
-
-
-
- |
+ |
+ |
+ |
-
-
-
-
-
-
-
-
-
-
-
-
-
- |
- |
- |
- |
-
-
-
-
-
-
+
- Blanket Order.
+ Blanket Order / Commande ouverte.
Parts will be released in quantities over time.
- Partial shipments blocked.
+ Partial shipments blocked / Expéditions partielles bloquées.
The order ships as one complete batch.
-
+
- | PART NUMBER |
- DESCRIPTION |
- QTY |
- UOM |
- UNIT PRICE |
- TAXES |
- AMOUNT |
+
+ Part Number/N° de pièce
+ |
+
+ Description/Description
+ |
+
+ Qty
+ Qté
+ |
+
+ UOM
+ UDM
+ |
+
+ Unit Price
+ Prix unitaire
+ |
+
+ Amount
+ Montant
+ |
- |
+ |
- |
+ |
|
+
+ -
+
+
|
@@ -169,9 +269,6 @@
|
|
-
-
- |
|
@@ -184,37 +281,38 @@
-
- Payment Terms:
-
-
-
-
- Invoice Strategy:
-
-
-
- (%)
-
-
+
+ Payment Terms / Modalités de paiement:
+
+
+
+
+
+
- | Subtotal |
+
+ Subtotal/Sous-total
+ |
|
- | Taxes |
+
+ Taxes/Taxes
+ |
|
- | Grand Total |
+
+ Grand Total/Total général
+ |
|
@@ -226,7 +324,7 @@
-
Notes:
+
Notes / Remarques:
@@ -234,7 +332,7 @@
-
Terms and Conditions:
+
Terms and Conditions / Conditions générales: