feat(promote-customer-spec): Phase D — reports + tablet payload include spec
Reports updated to print Specification (with revision via display_name): - report_fp_sale.xml — header sections show "SPECIFICATION" instead of "COATING CONFIG", reads doc.x_fc_customer_spec_id (added on sale.order via quality inherit, computed from line.customer_spec_id) - report_fp_wo_sticker.xml — propagates _spec alongside _coating - fusion_plating_reports/report_fp_job_traveller.xml — header row now shows Specification (falls back to coating) - fusion_plating_jobs/report_fp_job_traveller.xml — same fall-back - fusion_plating_jobs/report_fp_job_sticker.xml — _spec added sale.order.x_fc_customer_spec_id added as a stored compute on sale.order (in quality) so reports can render order-level spec. Mirrors the line's first spec; updates on line edit. Tablet payload (shopfloor_controller.py): - spec_label added to the job payload dict - defensive 'customer_spec_id' in job._fields check (shopfloor doesn't depend on quality — circular if added) Portal: deferred (same circular-dep issue, more substantial UI rewrite needed; Phase E backlog item). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
# License OPL-1 (Odoo Proprietary License v1.0)
|
||||
{
|
||||
'name': 'Fusion Plating — Native Jobs',
|
||||
'version': '19.0.9.0.0',
|
||||
'version': '19.0.9.1.0',
|
||||
'category': 'Manufacturing/Plating',
|
||||
'summary': 'Native plating job model — replaces mrp.production / mrp.workorder bridge.',
|
||||
'author': 'Nexa Systems Inc.',
|
||||
|
||||
@@ -57,6 +57,7 @@
|
||||
<t t-set="_line" t-value="job.sale_order_line_ids[:1]"/>
|
||||
<t t-set="_part" t-value="('part_catalog_id' in job._fields and job.part_catalog_id) or False"/>
|
||||
<t t-set="_coating" t-value="('coating_config_id' in job._fields and job.coating_config_id) or False"/>
|
||||
<t t-set="_spec" t-value="('customer_spec_id' in job._fields and job.customer_spec_id) or False"/>
|
||||
<t t-set="_process" t-value="job.recipe_id or False"/>
|
||||
<t t-set="_due" t-value="job.date_deadline or False"/>
|
||||
<t t-set="_qty" t-value="job.qty"/>
|
||||
@@ -99,6 +100,7 @@
|
||||
<t t-set="_line" t-value="job.sale_order_line_ids[:1]"/>
|
||||
<t t-set="_part" t-value="('part_catalog_id' in job._fields and job.part_catalog_id) or False"/>
|
||||
<t t-set="_coating" t-value="('coating_config_id' in job._fields and job.coating_config_id) or False"/>
|
||||
<t t-set="_spec" t-value="('customer_spec_id' in job._fields and job.customer_spec_id) or False"/>
|
||||
<t t-set="_process" t-value="job.recipe_id or False"/>
|
||||
<t t-set="_due" t-value="job.date_deadline or False"/>
|
||||
<t t-set="_qty" t-value="job.qty"/>
|
||||
|
||||
@@ -200,7 +200,10 @@
|
||||
<t t-else="">—</t>
|
||||
</td>
|
||||
<td>
|
||||
<t t-if="'coating_config_id' in job._fields and job.coating_config_id">
|
||||
<t t-if="'customer_spec_id' in job._fields and job.customer_spec_id">
|
||||
<span t-esc="job.customer_spec_id.display_name"/>
|
||||
</t>
|
||||
<t t-elif="'coating_config_id' in job._fields and job.coating_config_id">
|
||||
<span t-esc="job.coating_config_id.name"/>
|
||||
</t>
|
||||
</td>
|
||||
|
||||
Reference in New Issue
Block a user