From 7d3b8f132a8656208694632a78221ea368880656 Mon Sep 17 00:00:00 2001 From: gsinghpal Date: Mon, 27 Apr 2026 21:55:48 -0400 Subject: [PATCH] =?UTF-8?q?fix(sub12c+):=20close=203=20known=20gaps=20?= =?UTF-8?q?=E2=80=94=20rack=20travel=20ticket,=20cert=20statement,=20CoC?= =?UTF-8?q?=20actuals?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Gap 1 — Rack Travel Ticket PDF (Sub 12b's Save+Print 404): + report_fp_rack_travel.xml in fusion_plating_reports — A5 landscape single page, big rack name, Code 128 of FP-RACK:, tag chips, contained part-batches table. + ir.actions.report bound to fusion.plating.rack so it appears in the rack form's Print menu too. + Sub 12b's rack_parts_dialog.js Save+Print URL fixed to use the standard /report/pdf// route. Gap 2 — Per-customer cert statement: + res.company.x_fc_default_cert_statement (company-level fallback). + res.partner.x_fc_cert_statement (per-customer override). + Surfaced on the partner form under the existing Cert + Document Routing block. + Chronological CoC body resolves: customer override → company default → hardcoded AS9100/ISO 9001 boilerplate. Three-tier fallback so existing certs without overrides keep working. Gap 3 — Chronological CoC 'Actual' column: + Build a captured_values_by_input dict from the move's transition_input_value_ids (Sub 12b captures these on every Move Parts commit). + Render typed Actual: text → as-is, number → with target unit, boolean → PASS/FAIL, date → formatted, attachment → '[Attachment]' placeholder. + Falls back to prompts from the destination step's step_input list when no values were captured (still useful as audit-of-what-was- asked even if blank). Version bumps: fusion_plating → 19.0.10.3.0 fusion_plating_reports → 19.0.10.1.0 fusion_plating_certificates → 19.0.5.3.0 Co-Authored-By: Claude Opus 4.7 (1M context) --- fusion_plating/fusion_plating/__manifest__.py | 2 +- .../fusion_plating/models/res_company.py | 12 ++ .../__manifest__.py | 2 +- .../models/res_partner.py | 11 ++ .../views/res_partner_views.xml | 11 ++ .../fusion_plating_reports/__manifest__.py | 3 +- .../report/report_coc_chronological.xml | 57 ++++++-- .../report/report_fp_rack_travel.xml | 138 ++++++++++++++++++ .../static/src/js/rack_parts_dialog.js | 5 +- 9 files changed, 224 insertions(+), 17 deletions(-) create mode 100644 fusion_plating/fusion_plating_reports/report/report_fp_rack_travel.xml diff --git a/fusion_plating/fusion_plating/__manifest__.py b/fusion_plating/fusion_plating/__manifest__.py index 8fbb4775..e4a82818 100644 --- a/fusion_plating/fusion_plating/__manifest__.py +++ b/fusion_plating/fusion_plating/__manifest__.py @@ -5,7 +5,7 @@ { 'name': 'Fusion Plating', - 'version': '19.0.10.2.0', + 'version': '19.0.10.3.0', 'category': 'Manufacturing/Plating', 'summary': 'Core plating / metal finishing ERP: facilities, processes, tanks, baths, jobs, operators.', 'description': """ diff --git a/fusion_plating/fusion_plating/models/res_company.py b/fusion_plating/fusion_plating/models/res_company.py index 3eab66f3..66e9fd14 100644 --- a/fusion_plating/fusion_plating/models/res_company.py +++ b/fusion_plating/fusion_plating/models/res_company.py @@ -173,3 +173,15 @@ class ResCompany(models.Model): 'recipe with preferred_editor=auto is selected. Per-recipe ' 'preferred_editor (tree/simple) overrides this.', ) + + # ===================================================================== + # Sub 12c+ — Default Certification Statement + # ===================================================================== + x_fc_default_cert_statement = fields.Text( + string='Default Cert Statement', + help='Boilerplate text printed in the Certificate of Conformance ' + '"Certification Statement" block. Per-customer override on ' + 'res.partner.x_fc_cert_statement takes precedence when set. ' + 'When BOTH are blank the report falls back to a hardcoded ' + 'AS9100/ISO 9001 statement.', + ) diff --git a/fusion_plating/fusion_plating_certificates/__manifest__.py b/fusion_plating/fusion_plating_certificates/__manifest__.py index 314906bc..91ce53da 100644 --- a/fusion_plating/fusion_plating_certificates/__manifest__.py +++ b/fusion_plating/fusion_plating_certificates/__manifest__.py @@ -5,7 +5,7 @@ { 'name': 'Fusion Plating — Certificates', - 'version': '19.0.5.2.0', + 'version': '19.0.5.3.0', 'category': 'Manufacturing/Plating', 'summary': 'Certificate registry for CoC, thickness reports, and quality documents.', 'description': """ diff --git a/fusion_plating/fusion_plating_certificates/models/res_partner.py b/fusion_plating/fusion_plating_certificates/models/res_partner.py index 2693a4eb..b2fc7cd7 100644 --- a/fusion_plating/fusion_plating_certificates/models/res_partner.py +++ b/fusion_plating/fusion_plating_certificates/models/res_partner.py @@ -87,3 +87,14 @@ class ResPartner(models.Model): 'use: a primary account-manager contact who wants full ' 'visibility into everything the shop sends out.', ) + + # ---- Sub 12c+ — Per-customer cert statement override ---------------- + x_fc_cert_statement = fields.Text( + string='Cert Statement Override', + help='Override boilerplate text printed in the Certificate of ' + 'Conformance "Certification Statement" block. When blank, ' + 'falls back to the company default (res.company.' + 'x_fc_default_cert_statement) and finally to a hardcoded ' + 'AS9100/ISO 9001 boilerplate. Useful for aerospace customers ' + 'who require specific NIST or DFARS language.', + ) diff --git a/fusion_plating/fusion_plating_certificates/views/res_partner_views.xml b/fusion_plating/fusion_plating_certificates/views/res_partner_views.xml index 28560ef7..9cc011e7 100644 --- a/fusion_plating/fusion_plating_certificates/views/res_partner_views.xml +++ b/fusion_plating/fusion_plating_certificates/views/res_partner_views.xml @@ -32,6 +32,17 @@ + +

+ Boilerplate text printed in the "Certification Statement" + block on this customer's CoC. Leave blank to use the + company default, then a hardcoded AS9100/ISO 9001 + statement. +

+ + +
diff --git a/fusion_plating/fusion_plating_reports/__manifest__.py b/fusion_plating/fusion_plating_reports/__manifest__.py index 06177051..2f6ac4b2 100644 --- a/fusion_plating/fusion_plating_reports/__manifest__.py +++ b/fusion_plating/fusion_plating_reports/__manifest__.py @@ -3,7 +3,7 @@ # License OPL-1 (Odoo Proprietary License v1.0) { 'name': 'Fusion Plating — Reports', - 'version': '19.0.10.0.0', + 'version': '19.0.10.1.0', 'category': 'Manufacturing/Plating', 'summary': 'PDF reports for Fusion Plating: quote, SO, WO, packing, BoL, CoC, invoice, receipt, quality + compliance.', 'depends': [ @@ -33,6 +33,7 @@ # Quality + compliance reports 'report/report_coc.xml', 'report/report_coc_chronological.xml', + 'report/report_fp_rack_travel.xml', 'report/report_ncr.xml', 'report/report_capa.xml', 'report/report_bath_chemistry_log.xml', diff --git a/fusion_plating/fusion_plating_reports/report/report_coc_chronological.xml b/fusion_plating/fusion_plating_reports/report/report_coc_chronological.xml index bc40666a..7212946f 100644 --- a/fusion_plating/fusion_plating_reports/report/report_coc_chronological.xml +++ b/fusion_plating/fusion_plating_reports/report/report_coc_chronological.xml @@ -112,20 +112,45 @@ - - + + + + + + + + + - + - + - + + + + + + + + + + + + + + + + + - @@ -168,6 +200,11 @@ + + + + +
NameDescriptionDescription TargetActualActual Recorded By
@@ -144,7 +169,14 @@ + + + + + + [Attachment] + +
@@ -183,12 +220,8 @@ Ref. WO# -

- We certify that the parts listed above have been processed - in accordance with the specifications referenced and that - all required tests have been performed. Records on file at - our facility per AS9100 / ISO 9001 retention policy. -

+

diff --git a/fusion_plating/fusion_plating_reports/report/report_fp_rack_travel.xml b/fusion_plating/fusion_plating_reports/report/report_fp_rack_travel.xml new file mode 100644 index 00000000..7e7df954 --- /dev/null +++ b/fusion_plating/fusion_plating_reports/report/report_fp_rack_travel.xml @@ -0,0 +1,138 @@ + + + + + + FP Rack Travel — A5 landscape + A5 + Landscape + 8 + 8 + 8 + 8 + 5 + 90 + + + + Rack Travel Ticket + fusion.plating.rack + qweb-pdf + fusion_plating_reports.report_fp_rack_travel_template + fusion_plating_reports.report_fp_rack_travel_template + 'Rack-Travel-%s' % (object.name or '').replace('/', '-') + + report + + + + + + diff --git a/fusion_plating/fusion_plating_shopfloor/static/src/js/rack_parts_dialog.js b/fusion_plating/fusion_plating_shopfloor/static/src/js/rack_parts_dialog.js index 333c81c8..3646fee9 100644 --- a/fusion_plating/fusion_plating_shopfloor/static/src/js/rack_parts_dialog.js +++ b/fusion_plating/fusion_plating_shopfloor/static/src/js/rack_parts_dialog.js @@ -76,9 +76,10 @@ export class FpRackPartsDialog extends Component { } this.props.close(); if (printAfter) { - // Sub 12c report — until it ships, this returns 404. + // Sub 12c+ rack travel ticket + // (fusion_plating_reports.action_report_fp_rack_travel). window.open( - `/web/report/pdf/fp.rack.travel/${this.state.selectedRackId}`, + `/report/pdf/fusion_plating_reports.action_report_fp_rack_travel/${this.state.selectedRackId}`, "_blank", ); }