57 lines
1.9 KiB
Python
57 lines
1.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Copyright 2026 Nexa Systems Inc.
|
|
# License OPL-1
|
|
# Sub 9 — Process Variants per Part. Runs on upgrade to 19.0.15.0.0.
|
|
#
|
|
# For every part that had a default_process_id, mark its root node as
|
|
# the default variant and seed a friendly label. Idempotent (NULL guards).
|
|
|
|
import logging
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
|
|
def migrate(cr, version):
|
|
if not version:
|
|
return # Fresh install — nothing to migrate
|
|
|
|
_logger.info("Sub 9: backfilling process variant flags")
|
|
|
|
# Step 1: Mark each part's existing default_process_id root as the
|
|
# default variant. The flag is cleared on every other root so we
|
|
# land in a consistent "exactly one default" state.
|
|
cr.execute("""
|
|
UPDATE fusion_plating_process_node
|
|
SET is_default_variant = FALSE
|
|
WHERE parent_id IS NULL
|
|
AND node_type = 'recipe'
|
|
AND part_catalog_id IS NOT NULL
|
|
""")
|
|
_logger.info("Sub 9: cleared is_default_variant on %d roots", cr.rowcount)
|
|
|
|
cr.execute("""
|
|
UPDATE fusion_plating_process_node node
|
|
SET is_default_variant = TRUE
|
|
FROM fp_part_catalog part
|
|
WHERE part.default_process_id = node.id
|
|
AND node.parent_id IS NULL
|
|
AND node.node_type = 'recipe'
|
|
AND node.part_catalog_id = part.id
|
|
""")
|
|
_logger.info(
|
|
"Sub 9: flagged is_default_variant on %d roots (one per part with default_process_id)",
|
|
cr.rowcount,
|
|
)
|
|
|
|
# Step 2: Seed variant_label='Default' on the now-flagged variants
|
|
# so the picker shows something readable. Only fills NULL/empty.
|
|
cr.execute("""
|
|
UPDATE fusion_plating_process_node
|
|
SET variant_label = 'Default'
|
|
WHERE is_default_variant = TRUE
|
|
AND (variant_label IS NULL OR variant_label = '')
|
|
""")
|
|
_logger.info("Sub 9: seeded variant_label='Default' on %d records", cr.rowcount)
|
|
|
|
_logger.info("Sub 9: migration complete")
|