From 2d9779047bbf19a51b7fd889e116538bffbf10cb Mon Sep 17 00:00:00 2001 From: gsinghpal Date: Tue, 12 May 2026 08:45:59 -0400 Subject: [PATCH] fix(jobs): registry load failure after Tier 2/3 persistence patches MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two compounding issues introduced by the persistence audit work: 1. fields.Text mismatch: sale.order.x_fc_internal_note and x_fc_external_note are actually fields.Html. I declared the sale.order.line related mirrors and the fp.job stored copies as fields.Text, so setup_related raised: TypeError: Type of related field sale.order.line.x_fc_internal_note is inconsistent with sale.order.x_fc_internal_note Fixed by switching both Note fields on fp.job and sale.order.line to fields.Html. 2. Module-load-order: Tier 3 fields (x_fc_delivery_method, x_fc_ship_via, x_fc_invoice_strategy) are defined in fusion_plating_jobs (related to sale.order via _inherit), but I referenced them in fusion_plating core's fp_job_views.xml — which loads BEFORE fusion_plating_jobs registers the fields. View validator raised "Field x_fc_delivery_method does not exist". Fixed by removing those 3 fields from the core view group and adding them via xpath in fusion_plating_jobs's fp_job_form_inherit (which loads after the fields are registered). Both fixes deployed and verified — registry loads in 2s, all field types match, related path resolves correctly. No data loss; the fp.job rows that already had stored Text content for internal_note / external_note will carry over into the Html field intact. Co-Authored-By: Claude Opus 4.7 (1M context) --- fusion_plating/fusion_plating/__manifest__.py | 2 +- fusion_plating/fusion_plating/models/fp_job.py | 4 ++-- fusion_plating/fusion_plating/views/fp_job_views.xml | 3 --- fusion_plating/fusion_plating_configurator/__manifest__.py | 2 +- .../fusion_plating_configurator/models/sale_order_line.py | 4 ++-- fusion_plating/fusion_plating_jobs/__manifest__.py | 2 +- .../fusion_plating_jobs/views/fp_job_form_inherit.xml | 5 +++++ 7 files changed, 12 insertions(+), 10 deletions(-) diff --git a/fusion_plating/fusion_plating/__manifest__.py b/fusion_plating/fusion_plating/__manifest__.py index 481acfec..5fdaff1a 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.18.15.8', + 'version': '19.0.18.15.10', 'category': 'Manufacturing/Plating', 'summary': 'Core plating / metal finishing ERP: facilities, processes, tanks, baths, jobs, operators.', 'description': """ diff --git a/fusion_plating/fusion_plating/models/fp_job.py b/fusion_plating/fusion_plating/models/fp_job.py index b81ddbc2..cbfc9e33 100644 --- a/fusion_plating/fusion_plating/models/fp_job.py +++ b/fusion_plating/fusion_plating/models/fp_job.py @@ -308,12 +308,12 @@ class FpJob(models.Model): ) # ---- Operational notes mirrored from sale.order ------------------ - x_fc_internal_note = fields.Text( + x_fc_internal_note = fields.Html( string='Internal Note', tracking=True, help='Shop-internal notes from the order. Not shown to customer.', ) - x_fc_external_note = fields.Text( + x_fc_external_note = fields.Html( string='External Note', tracking=True, help='Customer-facing notes copied from the sale order. Printed ' diff --git a/fusion_plating/fusion_plating/views/fp_job_views.xml b/fusion_plating/fusion_plating/views/fp_job_views.xml index 4f6f198a..ddc9633b 100644 --- a/fusion_plating/fusion_plating/views/fp_job_views.xml +++ b/fusion_plating/fusion_plating/views/fp_job_views.xml @@ -43,9 +43,6 @@ - - - diff --git a/fusion_plating/fusion_plating_configurator/__manifest__.py b/fusion_plating/fusion_plating_configurator/__manifest__.py index 9c4d5050..2472a0ab 100644 --- a/fusion_plating/fusion_plating_configurator/__manifest__.py +++ b/fusion_plating/fusion_plating_configurator/__manifest__.py @@ -5,7 +5,7 @@ { 'name': 'Fusion Plating — Configurator', - 'version': '19.0.18.10.2', + 'version': '19.0.18.10.3', 'category': 'Manufacturing/Plating', 'summary': 'Quotation configurator with part catalog, coating configs, and formula-based pricing engine.', 'description': """ diff --git a/fusion_plating/fusion_plating_configurator/models/sale_order_line.py b/fusion_plating/fusion_plating_configurator/models/sale_order_line.py index 9a420184..8695a22d 100644 --- a/fusion_plating/fusion_plating_configurator/models/sale_order_line.py +++ b/fusion_plating/fusion_plating_configurator/models/sale_order_line.py @@ -672,13 +672,13 @@ class SaleOrderLine(models.Model): readonly=True, store=True, ) - x_fc_internal_note = fields.Text( + x_fc_internal_note = fields.Html( related='order_id.x_fc_internal_note', string='Internal Note', readonly=True, store=True, ) - x_fc_external_note = fields.Text( + x_fc_external_note = fields.Html( related='order_id.x_fc_external_note', string='External Note', readonly=True, diff --git a/fusion_plating/fusion_plating_jobs/__manifest__.py b/fusion_plating/fusion_plating_jobs/__manifest__.py index a0fbb61e..910c2352 100644 --- a/fusion_plating/fusion_plating_jobs/__manifest__.py +++ b/fusion_plating/fusion_plating_jobs/__manifest__.py @@ -3,7 +3,7 @@ # License OPL-1 (Odoo Proprietary License v1.0) { 'name': 'Fusion Plating — Native Jobs', - 'version': '19.0.8.21.4', + 'version': '19.0.8.21.5', 'category': 'Manufacturing/Plating', 'summary': 'Native plating job model — replaces mrp.production / mrp.workorder bridge.', 'author': 'Nexa Systems Inc.', diff --git a/fusion_plating/fusion_plating_jobs/views/fp_job_form_inherit.xml b/fusion_plating/fusion_plating_jobs/views/fp_job_form_inherit.xml index e62891bd..0531c26f 100644 --- a/fusion_plating/fusion_plating_jobs/views/fp_job_form_inherit.xml +++ b/fusion_plating/fusion_plating_jobs/views/fp_job_form_inherit.xml @@ -283,6 +283,11 @@ + + + + +