feat(configurator): A5 - wizard schema (rename notes, add Express fields, retire manual currency_id)
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""Pre-migration for Express Orders (19.0.22.0.0).
|
||||
|
||||
Runs BEFORE Odoo's field-registration pass on `-u fusion_plating_configurator`,
|
||||
so the model can register `terms_and_conditions` and `pricelist_id` against
|
||||
columns that already hold data.
|
||||
|
||||
Actions:
|
||||
1. Rename `fp_direct_order_wizard.notes` → `terms_and_conditions`.
|
||||
Existing data preserves its semantic (always was customer-facing because
|
||||
the old `action_create_order` wrote it to sale.order.note).
|
||||
2. Add the new Express columns (idempotent — IF NOT EXISTS guards).
|
||||
3. Backfill `pricelist_id` from the legacy `currency_id` via any active
|
||||
pricelist matching the currency. After this, the model's stored-related
|
||||
currency_id (related='pricelist_id.currency_id') takes over.
|
||||
4. (No currency_id column drop here — Odoo's schema sync recognises the
|
||||
related field and keeps the column shape; data refreshes from the
|
||||
related lookup on subsequent writes.)
|
||||
|
||||
Dev-stage caveat: per the Express Orders design spec section 12, we are
|
||||
ignoring past orders. If `currency_id` data on legacy rows doesn't line up
|
||||
with the new pricelist_id-driven flow, that's acceptable.
|
||||
"""
|
||||
|
||||
|
||||
def migrate(cr, version):
|
||||
# 1. Rename notes → terms_and_conditions (same column, same data)
|
||||
cr.execute("""
|
||||
SELECT 1 FROM information_schema.columns
|
||||
WHERE table_name = 'fp_direct_order_wizard'
|
||||
AND column_name = 'notes'
|
||||
""")
|
||||
if cr.fetchone():
|
||||
cr.execute("""
|
||||
ALTER TABLE fp_direct_order_wizard
|
||||
RENAME COLUMN notes TO terms_and_conditions
|
||||
""")
|
||||
|
||||
# 2. Add new Express columns (idempotent)
|
||||
cr.execute("""
|
||||
ALTER TABLE fp_direct_order_wizard
|
||||
ADD COLUMN IF NOT EXISTS internal_notes TEXT
|
||||
""")
|
||||
cr.execute("""
|
||||
ALTER TABLE fp_direct_order_wizard
|
||||
ADD COLUMN IF NOT EXISTS pricelist_id INTEGER
|
||||
REFERENCES product_pricelist(id) ON DELETE SET NULL
|
||||
""")
|
||||
cr.execute("""
|
||||
ALTER TABLE fp_direct_order_wizard
|
||||
ADD COLUMN IF NOT EXISTS material_process VARCHAR
|
||||
""")
|
||||
cr.execute("""
|
||||
ALTER TABLE fp_direct_order_wizard
|
||||
ADD COLUMN IF NOT EXISTS validity_date DATE
|
||||
""")
|
||||
cr.execute("""
|
||||
ALTER TABLE fp_direct_order_wizard
|
||||
ADD COLUMN IF NOT EXISTS view_source VARCHAR DEFAULT 'legacy'
|
||||
""")
|
||||
# Note: view_source defaults to 'legacy' for EXISTING rows — they were
|
||||
# created via the legacy view. New rows default to 'express' via the model.
|
||||
|
||||
# 3. Backfill pricelist_id from any active pricelist matching the
|
||||
# legacy currency_id (only if the currency_id column still exists).
|
||||
cr.execute("""
|
||||
SELECT 1 FROM information_schema.columns
|
||||
WHERE table_name = 'fp_direct_order_wizard'
|
||||
AND column_name = 'currency_id'
|
||||
""")
|
||||
if cr.fetchone():
|
||||
cr.execute("""
|
||||
UPDATE fp_direct_order_wizard w
|
||||
SET pricelist_id = (
|
||||
SELECT p.id
|
||||
FROM product_pricelist p
|
||||
WHERE p.currency_id = w.currency_id
|
||||
AND p.active = TRUE
|
||||
ORDER BY p.id
|
||||
LIMIT 1
|
||||
)
|
||||
WHERE w.pricelist_id IS NULL
|
||||
AND w.currency_id IS NOT NULL
|
||||
""")
|
||||
Reference in New Issue
Block a user