diff --git a/fusion_plating/fusion_plating/__manifest__.py b/fusion_plating/fusion_plating/__manifest__.py
index 73807f6e..481acfec 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.7',
+ 'version': '19.0.18.15.8',
'category': 'Manufacturing/Plating',
'summary': 'Core plating / metal finishing ERP: facilities, processes, tanks, baths, jobs, operators.',
'description': """
diff --git a/fusion_plating/fusion_plating/views/fp_job_views.xml b/fusion_plating/fusion_plating/views/fp_job_views.xml
index ddc9633b..4f6f198a 100644
--- a/fusion_plating/fusion_plating/views/fp_job_views.xml
+++ b/fusion_plating/fusion_plating/views/fp_job_views.xml
@@ -43,6 +43,9 @@
+
+
+
diff --git a/fusion_plating/fusion_plating_configurator/__manifest__.py b/fusion_plating/fusion_plating_configurator/__manifest__.py
index 67aa5e18..9c4d5050 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.1',
+ 'version': '19.0.18.10.2',
'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 f272fb10..9a420184 100644
--- a/fusion_plating/fusion_plating_configurator/models/sale_order_line.py
+++ b/fusion_plating/fusion_plating_configurator/models/sale_order_line.py
@@ -684,3 +684,22 @@ class SaleOrderLine(models.Model):
readonly=True,
store=True,
)
+
+ x_fc_delivery_method = fields.Selection(
+ related='order_id.x_fc_delivery_method',
+ string='Delivery Method',
+ readonly=True,
+ store=True,
+ )
+ x_fc_ship_via = fields.Char(
+ related='order_id.x_fc_ship_via',
+ string='Ship Via',
+ readonly=True,
+ store=True,
+ )
+ x_fc_invoice_strategy = fields.Selection(
+ related='order_id.x_fc_invoice_strategy',
+ string='Invoice Strategy',
+ readonly=True,
+ store=True,
+ )
diff --git a/fusion_plating/fusion_plating_jobs/__manifest__.py b/fusion_plating/fusion_plating_jobs/__manifest__.py
index 0d7b7ab1..a0fbb61e 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.3',
+ 'version': '19.0.8.21.4',
'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/models/fp_job.py b/fusion_plating/fusion_plating_jobs/models/fp_job.py
index c10d4df0..28fa0cfc 100644
--- a/fusion_plating/fusion_plating_jobs/models/fp_job.py
+++ b/fusion_plating/fusion_plating_jobs/models/fp_job.py
@@ -23,6 +23,26 @@ _logger = logging.getLogger(__name__)
class FpJob(models.Model):
_inherit = 'fp.job'
+ # ---- Tier 3 mirrors from sale.order -----------------------------
+ # Related (not stored) — pure display mirrors. Values may change on
+ # the SO after job confirm (e.g. customer changes carrier preference)
+ # and the WO should reflect the latest; related auto-follows.
+ x_fc_delivery_method = fields.Selection(
+ related='sale_order_id.x_fc_delivery_method',
+ string='Delivery Method',
+ readonly=True,
+ )
+ x_fc_ship_via = fields.Char(
+ related='sale_order_id.x_fc_ship_via',
+ string='Ship Via',
+ readonly=True,
+ )
+ x_fc_invoice_strategy = fields.Selection(
+ related='sale_order_id.x_fc_invoice_strategy',
+ string='Invoice Strategy',
+ readonly=True,
+ )
+
part_catalog_id = fields.Many2one(
'fp.part.catalog',
string='Part',