feat(promote-customer-spec): Phase A — recipe + spec foundation

- Add fp.recipe.thickness model (replaces fp.coating.thickness, scoped to recipe root)
- Add spec metadata + bake-relief fields to fusion.plating.process.node (recipe root):
  phosphorus_level, thickness_min/max/uom, thickness_option_ids,
  requires_bake_relief + bake_window_hours/temperature/duration
- Add recipe_ids M2M + print_on_cert to fusion.plating.customer.spec
- Add applicable_spec_ids reverse M2M as inherit in fusion_plating_quality
  (avoids circular dep — core can't reference customer.spec which lives in quality)
- Surface new fields on recipe form ("Specification & Bake" notebook page)
- Surface recipe linkage on customer spec form

Pure additive. Foundation for Phases B-E.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
gsinghpal
2026-05-15 00:50:17 -04:00
parent 13fd0712d9
commit 406cac1362
13 changed files with 266 additions and 2 deletions

View File

@@ -226,6 +226,44 @@
<page string="Notes" name="notes">
<field name="notes" placeholder="Internal notes..."/>
</page>
<page string="Specification &amp; Bake"
name="spec_metadata"
invisible="node_type != 'recipe' or parent_id">
<group>
<group string="Spec Metadata">
<field name="phosphorus_level"/>
<field name="thickness_min"/>
<field name="thickness_max"/>
<field name="thickness_uom"/>
</group>
<group string="Bake Relief (AMS 2759/9)">
<field name="requires_bake_relief"/>
<field name="bake_window_hours"
invisible="not requires_bake_relief"/>
<field name="bake_temperature"
invisible="not requires_bake_relief"/>
<field name="bake_temperature_uom"
invisible="not requires_bake_relief"/>
<field name="bake_duration_hours"
invisible="not requires_bake_relief"/>
</group>
</group>
<group string="Thickness Options">
<field name="thickness_option_ids" nolabel="1">
<list editable="bottom">
<field name="sequence" widget="handle"/>
<field name="value"/>
<field name="uom"/>
<field name="label" readonly="1"/>
<field name="note" optional="hide"/>
<field name="active" optional="hide"/>
</list>
</field>
</group>
<!-- Applicable Specifications group is added
by fusion_plating_quality via an inherit
view (the field lives there too). -->
</page>
</notebook>
</sheet>
<chatter/>

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2026 Nexa Systems Inc.
License OPL-1 (Odoo Proprietary License v1.0)
Part of the Fusion Plating product family.
-->
<odoo>
<record id="view_fp_recipe_thickness_list" model="ir.ui.view">
<field name="name">fp.recipe.thickness.list</field>
<field name="model">fp.recipe.thickness</field>
<field name="arch" type="xml">
<list string="Thickness Options" decoration-muted="not active" editable="bottom">
<field name="sequence" widget="handle"/>
<field name="recipe_id"/>
<field name="value"/>
<field name="uom"/>
<field name="label" string="Display"/>
<field name="note" optional="hide"/>
<field name="active" optional="hide"/>
</list>
</field>
</record>
</odoo>