Adds legacy_mrp_production_id (Integer index) on fp.job and
legacy_mrp_workorder_id on fp.job.step. Used as the idempotency
key during cutover migration.
Three scripts under fusion_plating_jobs/scripts/:
- audit_pre_migration.py — counts and data-quality concerns BEFORE
- migrate_to_fp_jobs.py — copies MO->fp.job, WO->fp.job.step, time
logs, rebinds cross-refs (batches,
holds, certs, readings, portals,
inspections, deliveries). Idempotent.
- audit_post_migration.py — counts and verifies AFTER
Migration is run manually from \`odoo shell\` at cutover (not as
auto post-migration hook, for safety). README explains usage.
Tests verify the legacy id fields exist and the migration script
files are well-formed Python.
Manifest 19.0.1.9.0 -> 19.0.2.0.0.
Part of: native job model migration (spec 2026-04-25)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
52 lines
2.1 KiB
Markdown
52 lines
2.1 KiB
Markdown
# Native job migration scripts
|
|
|
|
## migrate_to_fp_jobs.py
|
|
|
|
Copies live `mrp.production` / `mrp.workorder` records into the native
|
|
`fp.job` / `fp.job.step` model. Idempotent — safe to run multiple times.
|
|
|
|
### Usage
|
|
|
|
Run from the host (e.g. entech) using `odoo shell`:
|
|
|
|
```bash
|
|
ssh pve-worker5 "pct exec 111 -- bash -c 'su - odoo -s /bin/bash -c \"/usr/bin/odoo shell -c /etc/odoo/odoo.conf -d admin\" < /mnt/extra-addons/custom/fusion_plating_jobs/scripts/migrate_to_fp_jobs.py'"
|
|
```
|
|
|
|
Or interactively from `odoo shell` (Python `exec` builtin, not a shell call):
|
|
|
|
```python
|
|
exec(open('/mnt/extra-addons/custom/fusion_plating_jobs/scripts/migrate_to_fp_jobs.py').read())
|
|
```
|
|
|
|
### What it does
|
|
|
|
1. For every `mrp.production` record, creates a parallel `fp.job` with the same name and fields. Skips MOs that already have a fp.job mirror (`fp.job.legacy_mrp_production_id == mo.id`).
|
|
2. For every `mrp.workorder` record, creates a parallel `fp.job.step`. Skips already-migrated WOs.
|
|
3. Migrates `mrp.workorder.time_ids` to `fp.job.step.timelog`.
|
|
4. Rebinds cross-references on dependent models (batches, holds, certs, deliveries, portal jobs, racking inspections).
|
|
5. Audit log written to `/tmp/fp_jobs_migration.log` and to a chatter post on each migrated job.
|
|
|
|
### Safety
|
|
|
|
- Idempotent. Re-running skips already-migrated records.
|
|
- Read-only on legacy MO/WO records. Original data untouched.
|
|
- Cross-reference rebinds add new x_fc_job_id / x_fc_step_id values without removing legacy production_id / workorder_id values. Both stay populated for the 2-week shadow period.
|
|
- Wrap in a transaction (default for `odoo shell`); if anything fails, rollback.
|
|
|
|
### Pre-migration audit
|
|
|
|
Run `audit_pre_migration.py` first to see what's about to happen. The
|
|
script uses Python's `exec` builtin to load the file inside the running
|
|
shell session — no shell exec involved.
|
|
|
|
Reports counts of MO/WO/dependent records and any data-quality concerns
|
|
(MOs with no recipe, WOs with no work centre, etc).
|
|
|
|
### Post-migration audit
|
|
|
|
Run `audit_post_migration.py` after to verify counts match.
|
|
|
|
Reports row counts on fp.job, fp.job.step, and confirms all dependent
|
|
records have new x_fc_*_id values.
|