fix(bol): bigger title, shipper info, uniform headers, cargo qty, taller signatures

Five fixes applied to the Bill of Lading and (where relevant) all
report templates:

1. **Bigger title + BoL #** — portrait now uses h2 24pt (was h4 16pt),
   landscape h2 26pt; BoL # ticker is 13/14pt instead of body size.

2. **Shipper info missing** — root cause: `_fp_build_delivery_vals`
   was creating deliveries without `company_id`, so the BoL's
   `<span t-field="doc.company_id.name"/>` rendered empty. Two fixes:
   - Hook now sets `company_id = mo.company_id.id or env.company.id`.
   - Template falls back defensively to `env.company` when
     `doc.company_id` is empty (covers any legacy delivery that
     somehow slips through without it).
   - Backfilled 14 existing deliveries via SQL on entech.

3. **Uniform header backgrounds** — replaced mixed `info-header`
   (gray) + default-th (brand black) headers with a single
   `fp-header-primary` (brand black) across all sub-tables for a
   consistent look.

4. **Cargo description alignment + missing column** — added a QTY
   column (matches landscape variant), pulled from the linked MO
   via job_ref → mrp.production.product_qty. Added `.fp-cell-mid`
   utility class with `vertical-align: middle !important;` and
   applied it to every cargo + info cell so values sit centred
   instead of jammed against the top border.

5. **Signature box too short** — bumped `.sig-box` from 70 → 110 px
   (portrait) / 130 px (landscape), `.sig-line` from 28 → 60/70 px,
   added flex layout so the label sits at the bottom and signers
   have a real space to write in. Lives in the shared
   `report_base_styles.xml` so EVERY FP template benefits, not just
   the BoL.

Verified: BoL portrait renders cleanly at 140 KB with full shipper
block + uniform headers + middle-aligned cargo cells.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
gsinghpal
2026-04-19 07:29:28 -04:00
parent 82a2091914
commit 7ad7481195
8 changed files with 102 additions and 47 deletions

View File

@@ -0,0 +1,15 @@
env = env # noqa
import re
report = env.ref('fusion_plating_reports.action_report_fp_bol_portrait')
dlv = env['fusion.plating.delivery'].search([], order='id desc', limit=1)
html, _ = report.with_context(force_report_rendering=True
)._render_qweb_html(report.report_name, [dlv.id])
out = html.decode() if isinstance(html, bytes) else str(html)
# Pull just the SHIPPER td
m = re.search(r'>SHIPPER<.*?</thead>(.*?)</table>', out, re.S)
if m:
print('--- SHIPPER/CONSIGNEE table body ---')
print(m.group(1)[:2500])
else:
print('SHIPPER section not found, dumping first 2000 chars:')
print(out[:2000])

View File

@@ -0,0 +1,19 @@
env = env # noqa
co = env['res.company'].search([], limit=1)
p = co.partner_id
print('company:', co.name)
print(' partner_id:', p.id, p.name)
print(' street:', repr(p.street))
print(' street2:', repr(p.street2))
print(' city:', repr(p.city), 'zip:', repr(p.zip))
print(' state:', p.state_id.name if p.state_id else None)
print(' country:', p.country_id.name if p.country_id else None)
print(' phone:', repr(p.phone), 'email:', repr(p.email))
print()
# Also check if delivery has a source_facility_id with address
dlv = env['fusion.plating.delivery'].search([], order='id desc', limit=1)
if dlv.source_facility_id:
f = dlv.source_facility_id
print('facility:', f.name)
print(' address:', getattr(f, 'address', None) or getattr(f, 'street', None) or '(no address field)')
print(' fields:', [k for k in f._fields if 'addr' in k or 'street' in k or 'city' in k])

View File

@@ -0,0 +1,7 @@
env = env # noqa
dlv = env['fusion.plating.delivery'].search([], order='id desc', limit=1)
print('delivery:', dlv.name)
print(' company_id:', dlv.company_id, '/', dlv.company_id.name if dlv.company_id else None)
print(' source_facility_id:', dlv.source_facility_id, '/', dlv.source_facility_id.name if dlv.source_facility_id else None)
print(' has company_id field?', 'company_id' in dlv._fields)
print(' field def:', dlv._fields.get('company_id'))