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 408663c6..81225030 100644
--- a/fusion_plating/fusion_plating_configurator/models/sale_order_line.py
+++ b/fusion_plating/fusion_plating_configurator/models/sale_order_line.py
@@ -25,3 +25,19 @@ class SaleOrderLine(models.Model):
help='Lines sharing a tag (e.g. "WO#1") will be batched into one '
'manufacturing order when bridge_mrp generates MOs.',
)
+ x_fc_part_wo_description = fields.Text(
+ string='On Work Order',
+ help='Extra detail printed on the work order travelling sheet. '
+ 'Separate from the customer-facing line description.',
+ )
+ x_fc_start_at_node_id = fields.Many2one(
+ 'fusion.plating.process.node',
+ string='Start at Node',
+ help='For re-work jobs: pick the recipe step where this job '
+ 'should begin. bridge_mrp skips ancestor steps.',
+ )
+ x_fc_is_one_off = fields.Boolean(
+ string='One-off Part',
+ help='Flag for prototype / non-catalog parts that should not be '
+ 'reused after this order.',
+ )
diff --git a/fusion_plating/fusion_plating_configurator/views/sale_order_views.xml b/fusion_plating/fusion_plating_configurator/views/sale_order_views.xml
index 4802b3e5..9430010e 100644
--- a/fusion_plating/fusion_plating_configurator/views/sale_order_views.xml
+++ b/fusion_plating/fusion_plating_configurator/views/sale_order_views.xml
@@ -101,6 +101,8 @@
+
+
diff --git a/fusion_plating/fusion_plating_configurator/wizard/fp_direct_order_line.py b/fusion_plating/fusion_plating_configurator/wizard/fp_direct_order_line.py
index d5e8017a..d60bf854 100644
--- a/fusion_plating/fusion_plating_configurator/wizard/fp_direct_order_line.py
+++ b/fusion_plating/fusion_plating_configurator/wizard/fp_direct_order_line.py
@@ -85,6 +85,25 @@ class FpDirectOrderLine(models.TransientModel):
'will be batched into one manufacturing order.',
)
+ # ---- Phase C: polish ----
+ part_wo_description = fields.Text(
+ string='On Work Order',
+ help='Extra detail printed on the work order travelling sheet. '
+ 'Kept separate from the customer-facing description.',
+ )
+ start_at_node_id = fields.Many2one(
+ 'fusion.plating.process.node',
+ string='Start at Node',
+ domain="[('parent_id', 'child_of', coating_config_id and coating_config_id.recipe_id.id)]",
+ help='For re-work jobs: pick the recipe step where this job should '
+ 'begin. Skips ancestor steps in the generated work order.',
+ )
+ is_one_off = fields.Boolean(
+ string='One-off Part',
+ help='Do not save this as a reusable part in the catalog after the '
+ 'order is created. Useful for quote-only or prototype parts.',
+ )
+
# ---- Description ----
description_template_id = fields.Many2one(
'fp.sale.description.template',
diff --git a/fusion_plating/fusion_plating_configurator/wizard/fp_direct_order_wizard.py b/fusion_plating/fusion_plating_configurator/wizard/fp_direct_order_wizard.py
index ccb5db0a..2a64740d 100644
--- a/fusion_plating/fusion_plating_configurator/wizard/fp_direct_order_wizard.py
+++ b/fusion_plating/fusion_plating_configurator/wizard/fp_direct_order_wizard.py
@@ -243,6 +243,9 @@ class FpDirectOrderWizard(models.TransientModel):
'x_fc_part_deadline': line.part_deadline,
'x_fc_rush_order': line.rush_order,
'x_fc_wo_group_tag': line.wo_group_tag or False,
+ 'x_fc_part_wo_description': line.part_wo_description or False,
+ 'x_fc_start_at_node_id': line.start_at_node_id.id or False,
+ 'x_fc_is_one_off': line.is_one_off,
}))
# 5. Create + confirm
diff --git a/fusion_plating/fusion_plating_configurator/wizard/fp_direct_order_wizard_views.xml b/fusion_plating/fusion_plating_configurator/wizard/fp_direct_order_wizard_views.xml
index 67950799..ac2717d0 100644
--- a/fusion_plating/fusion_plating_configurator/wizard/fp_direct_order_wizard_views.xml
+++ b/fusion_plating/fusion_plating_configurator/wizard/fp_direct_order_wizard_views.xml
@@ -149,6 +149,14 @@
nolabel="1" colspan="2"
placeholder="Pick a template above, then tweak the text here."/>
+
+
+
+
+