Deux enregistrements ont cessé d'être LIVRÉS en données pour devenir le produit d'un geste : créer une société, cocher une case, charger un plan comptable. Une migration n'en fait aucun. Le nettoyage des orphelins les emporte et rien ne les remet. `product.list0` est déclaré jusqu'en 16 : 1 liste en 16, 0 en 17, alors que le groupe compte six membres — tout devis s'ouvre alors sans liste de prix. Le modèle de rapprochement est déclaré en 12 seulement : 0 dès la 13, pour trois journaux de trésorerie. On n'invente rien : `_activate_or_create_pricelists` et `_load_data` du plan comptable, les méthodes qu'Odoo aurait appelées. Éprouvé sur copie : 0 → 1 liste, 0 → 4 modèles, un devis reprend « Par défaut (CAD) », un second passage ne double rien. --- EN --- Two records stopped being SHIPPED as data and became the product of a gesture: creating a company, ticking a box, loading a chart of accounts. A migration does none of them. The orphan cleanup takes them away and nothing brings them back. `product.list0` is declared up to 16: 1 pricelist in 16, 0 in 17, while the group has six members — every quotation then opens without a pricelist. The reconciliation model is declared in 12 only: 0 from 13 on, for three cash journals. Nothing is invented: `_activate_or_create_pricelists` and the chart template's `_load_data`, the methods Odoo itself would have called. Proven on a copy: 0 → 1 pricelist, 0 → 4 models, a quotation picks up « Par défaut (CAD) », a second pass duplicates nothing. Assisted-by: Claude Opus 5 |
||
|---|---|---|
| .. | ||
| check_cow_views.py | ||
| check_hidden_models.py | ||
| check_stale_scss.py | ||
| check_stale_scss_tui.py | ||
| cow_drift.py | ||
| cow_drift_tui.py | ||
| database_cleanup.py | ||
| dms_access_repair.py | ||
| fix_cow_render.py | ||
| fix_duplicate_index.py | ||
| fix_migration_odoo120_to_odoo130.sql | ||
| fix_migration_odoo130_to_odoo140.sql | ||
| fix_migration_odoo140_to_odoo150.py | ||
| fix_migration_odoo170_to_odoo180.sql | ||
| fix_view_type.py | ||
| neutralize_cow_views.py | ||
| README.base.md | ||
| README.fr.md | ||
| README.md | ||
| reset_stale_cow_tui.py | ||
| reset_stale_cow_views.py | ||
| restore_config_defaults.py | ||
| smoke_internal_ui.py | ||
| smoke_public_url.py | ||
| snapshot_cow_views.py | ||
| uninstall_module_list_odoo140_to_odoo150.txt | ||
| uninstall_module_list_odoo170_to_odoo180.txt | ||
Migration
Run this script when doing database migration. Example :
source ./.venv.odoo15.0_python3.8.20/bin/activate && cat ./script/odoo/migration/fix_migration_odoo140_to_odoo150.py | ./odoo15.0/odoo/odoo-bin shell -d DATABASE
Check uninstall_module_list_odoo140_to_odoo150.txt
Module lists to uninstall
Before a version bump, the migration uninstalls the modules listed in
uninstall_module_list_odoo<from>_to_odoo<to>.txt. Two locations are read, the
private one first, and the results are merged (duplicates dropped):
private/odoo/migration/<database>/uninstall_module_list_odooXX0_to_odooYY0.txt— specific to ONE database, not versioned. Which modules must be dropped depends on the data, so this is where nearly every entry belongs.script/odoo/migration/uninstall_module_list_odooXX0_to_odooYY0.txt— shared defaults, versioned, valid for every database.
Syntax: one module per line, with a justification after #. Commas and several
names per line are accepted; blank lines and full-line comments are ignored.
A module without a stated reason is flagged at runtime: removing a module is a
decision someone must be able to review later.
queue_job # blocks 12->13, trigger queue_job_notify
mgmtsystem_hazard # not ported to 13.0
web_syncer # dropped upstream