feat(configurator): part-scoped process name shows part id + revision

User feedback: the Process tab on fp.part.catalog was displaying a
bare template name ("General Processing"), making it impossible to
tell at a glance that the clone belonged to this specific part.

Root clone now inherits the template name with a part-identifier
suffix appended:
  "General Processing — 1234567 Rev 2"

Only the ROOT gets the suffix — child nodes keep their clean source
names so the tree-editor canvas doesn't get cluttered.

Suffix logic avoids doubling "Rev": if part.revision is already
prefixed with "Rev " (e.g. "Rev 2"), we don't prepend another one.

Post-upgrade hook backfills existing part-cloned roots that
pre-date this change so users see the new format without having
to re-compose (which would otherwise wipe their customisations).

fusion_plating_configurator → 19.0.13.0.0

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
gsinghpal
2026-04-23 08:33:07 -04:00
parent 274236d34c
commit acb406950f
3 changed files with 69 additions and 2 deletions

View File

@@ -51,8 +51,30 @@ def _clone_subtree(env, source, part, parent):
"""
Node = env['fusion.plating.process.node']
# Root clone gets a part-identifier suffix so the part form's
# Default Process field reads like "General Processing — 1234567
# Rev 2" instead of a bare template name. Child nodes keep the
# source names unchanged — the suffix would only clutter the tree.
if parent is False:
suffix_bits = []
if part.part_number:
suffix_bits.append(part.part_number)
if part.revision:
# `revision` sometimes already carries a "Rev " prefix
# (e.g. "Rev 2") — don't double up.
rev = (part.revision or '').strip()
if rev and not rev.lower().startswith('rev'):
rev = 'Rev %s' % rev
if rev:
suffix_bits.append(rev)
node_name = source.name or ''
if suffix_bits:
node_name = '%s%s' % (node_name, ' '.join(suffix_bits))
else:
node_name = source.name
vals = {
'name': source.name,
'name': node_name,
'code': False, # codes must be globally unique; don't carry over
'node_type': source.node_type,
'sequence': source.sequence,