chore(plating): de-dash shipped code + intake-neutral customer emails

Replace em-dashes and en-dashes with hyphens across 789 shipped source
files (py/xml/js/scss) so the delivered module reads as human-written;
em-dashes had become a recognizable AI-generated tell. Internal .md dev
notes are excluded. The WO-sticker mojibake strippers keep their dash
search targets (now written — / –). No logic changes: comments
and display strings only; validated with py_compile + lxml parse.

Rewrite the 7 customer notification emails to be intake-neutral
(ship-in / drop-off / pickup) and repair-aware, and fix the Shipped
email documents line (packing slip vs bill of lading; certificate only
when issued). Subjects use a hyphen separator.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
gsinghpal
2026-06-05 00:16:19 -04:00
parent c9eb61ee0c
commit 8c76a16366
789 changed files with 4692 additions and 4692 deletions

View File

@@ -2,7 +2,7 @@
# Copyright 2026 Nexa Systems Inc.
# License OPL-1 (Odoo Proprietary License v1.0)
#
# 19.0.10.24.0 Plant-view Shop Floor kanban redesign.
# 19.0.10.24.0 - Plant-view Shop Floor kanban redesign.
# Backfill fp.job.step.last_activity_at from write_date so existing
# in-progress steps don't immediately trip the S16 idle-warning gate
# (8 hours since last activity) on first compute after deploy.

View File

@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
# Copyright 2026 Nexa Systems Inc.
# License OPL-1 (Odoo Proprietary License v1.0)
"""19.0.10.25.0 Template metadata backfill + recipe-node repointing.
"""19.0.10.25.0 - Template metadata backfill + recipe-node repointing.
Runs AFTER fusion_plating's pre-migrate 19.0.21.2.0 (which seeds
kind.area_kind and activates derack/demask/gating). At this point:
@@ -17,7 +17,7 @@ This migration:
3. Recomputes area_kind on all fp.job.step rows.
4. Recomputes active_step_id + card_state on in-flight jobs.
All phases idempotent re-running -u is safe.
All phases idempotent - re-running -u is safe.
See docs/superpowers/specs/2026-05-24-shopfloor-live-step-fix-design.md.
"""
@@ -82,7 +82,7 @@ NODE_REPOINTING = [
def migrate(cr, version):
env = Environment(cr, SUPERUSER_ID, {})
# Phase 1 Template metadata backfill. Idempotent: only fills
# Phase 1 - Template metadata backfill. Idempotent: only fills
# NULL/empty fields, doesn't overwrite admin edits.
Tpl = env['fp.step.template']
Kind = env['fp.step.kind']
@@ -110,7 +110,7 @@ def migrate(cr, version):
fixed_tpl,
)
# Phase 2 Recipe node repointing. Idempotent: AND k.code != %s
# Phase 2 - Recipe node repointing. Idempotent: AND k.code != %s
# ensures already-correct rows are skipped on re-run.
for filter_sql, cur_code, new_code, desc in NODE_REPOINTING:
params = [new_code]
@@ -132,7 +132,7 @@ def migrate(cr, version):
cr.rowcount, desc,
)
# Phase 3 Recompute area_kind on every fp.job.step row.
# Phase 3 - Recompute area_kind on every fp.job.step row.
steps = env['fp.job.step'].search([])
if steps:
steps._compute_area_kind()
@@ -141,7 +141,7 @@ def migrate(cr, version):
'[live-step-fix] recomputed area_kind on %s steps', len(steps),
)
# Phase 4 Recompute active_step_id + card_state on in-flight jobs.
# Phase 4 - Recompute active_step_id + card_state on in-flight jobs.
jobs = env['fp.job'].search([
('state', 'in', ('confirmed', 'in_progress')),
])

View File

@@ -162,7 +162,7 @@ def migrate(cr, version):
# without rolling back the others.
clone_recipes = Node.search([
('node_type', '=', 'recipe'),
('name', 'ilike', '%%'),
('name', 'ilike', '% - %'),
])
if not clone_recipes:
_logger.info(
@@ -188,7 +188,7 @@ def migrate(cr, version):
failed.append((cid, cname, type(e).__name__, str(e)[:120]))
_logger.warning(
'[recipe-cleanup] Phase 3: failed to delete '
'clone %s ("%s"): %s continuing',
'clone %s ("%s"): %s - continuing',
cid, cname, type(e).__name__,
)
_logger.info(

View File

@@ -8,7 +8,7 @@ Spec: docs/superpowers/specs/2026-05-25-post-shop-cert-shipping-job-states-desig
Rules:
- in_progress + all steps terminal + draft cert exists → awaiting_cert
- in_progress + all steps terminal + no cert required → awaiting_ship
- done jobs LEFT ALONE historically completed (already shipped)
- done jobs LEFT ALONE - historically completed (already shipped)
Idempotent: re-running on a fresh upgrade is a no-op because no
in_progress job will match the all-terminal predicate after the first
@@ -23,7 +23,7 @@ _logger = logging.getLogger(__name__)
def migrate(cr, version):
"""Post-migrate entrypoint called by Odoo after the module's
"""Post-migrate entrypoint - called by Odoo after the module's
XML/Python loads on -u of fusion_plating_jobs."""
# ---- Pass 1: in_progress + all-terminal + draft cert → awaiting_cert

View File

@@ -2,7 +2,7 @@
# Copyright 2026 Nexa Systems Inc.
# License OPL-1
#
# Phase 1 (Sub 11) relocate ir.model.data XML IDs from
# Phase 1 (Sub 11) - relocate ir.model.data XML IDs from
# fusion_plating_bridge_mrp to fusion_plating_jobs for the four
# models that moved: fp.work.role, fp.operator.proficiency,
# fp.qc.checklist.template (+line), fp.job.consumption.
@@ -10,7 +10,7 @@
# Pre-migration so Odoo's normal load pass sees the records under the
# new module owner, not as orphans pending deletion.
#
# Idempotent `ON CONFLICT DO NOTHING` skips rows already migrated.
# Idempotent - `ON CONFLICT DO NOTHING` skips rows already migrated.
import logging
@@ -19,7 +19,7 @@ _logger = logging.getLogger(__name__)
def migrate(cr, version):
if not version:
return # Fresh install nothing to migrate
return # Fresh install - nothing to migrate
moves = [
# (xmlid pattern, list of model identifiers to move)
@@ -77,7 +77,7 @@ def migrate(cr, version):
# Phase 1 swap: fp.job.consumption columns. Drop the legacy
# MRP-pointing columns (production_id, workorder_id) from the
# already-existing table there are zero rows referencing MRP, and
# already-existing table - there are zero rows referencing MRP, and
# the new model declares job_id / step_id instead.
cr.execute(
"""