feat(fusion_plating): kind.area_kind drives Shop Floor column routing

Add required area_kind Selection to fp.step.kind so each kind
self-declares which plant-view column its steps belong in. Replaces
the hardcoded _STEP_KIND_TO_AREA dict (removed in fp_job_step.py
in the follow-up commit).

- New `blast` kind for the Blasting column (sequence=35)
- 26 existing kind records seeded with area_kind in XML
- Pre-migrate 19.0.21.2.0 seeds existing rows BEFORE NOT NULL hits
  the schema; also activates derack/demask/gating that were
  deactivated in 19.0.20.6.0 but are needed for the full taxonomy
- Step Kind form + list views surface area_kind (badge + chip)
- Step Kind search adds Group By Shop Floor Column
- Simple Editor kind picker shows "Masking — Masking column"
  suffix so authors see the routing at pick time
- Add Hot Water Porosity Test (A-15) + Final Inspection / Packaging
  templates (used by 7+3 recipe nodes that previously had no
  library entry)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
gsinghpal
2026-05-24 17:02:02 -04:00
parent c75d2bde5a
commit 7b90f210b9
8 changed files with 223 additions and 10 deletions

View File

@@ -484,8 +484,15 @@ class SimpleRecipeController(http.Controller):
type='jsonrpc', auth='user')
def kinds_list(self):
"""Sub 14b — Step Kind dropdown options for the inline library
form. User-extensible via /fp/simple_recipe/kinds/create."""
form. User-extensible via /fp/simple_recipe/kinds/create.
2026-05-24 — payload now includes `area_kind` + a humanized
`area_kind_label` so the Simple Editor picker can render
"Masking — Masking column" and authors see which Shop Floor
column they're routing the step to.
"""
Kind = request.env['fp.step.kind']
area_labels = dict(Kind._fields['area_kind'].selection)
return {
'kinds': [
{
@@ -494,6 +501,8 @@ class SimpleRecipeController(http.Controller):
'name': k.name or '',
'icon': k.icon or '',
'sequence': k.sequence,
'area_kind': k.area_kind or '',
'area_kind_label': area_labels.get(k.area_kind, ''),
}
for k in Kind.search(
[('active', '=', True)], order='sequence, name',