Skip to content

[20.0][OU-IMP] migration scripts from a production 15.0 to 20.0 run (stacked on #6068) - #1

Open
ristecona wants to merge 17 commits into
20.0-base-6068from
feature/20.0-ou-scripts
Open

ristecona wants to merge 17 commits into
20.0-base-6068from
feature/20.0-ou-scripts

Conversation

@ristecona

Copy link
Copy Markdown
Owner

Migration scripts for Odoo 20.0 that were needed to take a real production database (Odoo 15.0 Community, 44 websites, about 22 GB) through OpenUpgrade to 20.0. This pull request is stacked on OCA#6068 (the base migration, which builds on OCA#6046): its base branch is the head of OCA#6068, so only the scripts below show in the diff. It is meant to be retargeted at OCA/OpenUpgrade 20.0 once those two are merged.

What is in it, one commit per module: apriori.merged_modules for the modules that website_sale, website_sale_stock, account and website_address_autocomplete absorbed (website_sale_comparison, website_sale_wishlist, website_sale_comparison_wishlist, website_sale_stock_wishlist, account_add_gln, base_vat, website_sale_autocomplete); the uom_id renames in product, purchase, stock, mrp, purchase_requisition and repair; mail (duplicate chats before the unique member_indices index); account (the stock valuation action path, payment state in_process now paid, the reconciliation model types); sale (sale_delay as a company dependent field, the accrued revenue action); mass_mailing (the merge action of mailing lists); payment (payment methods belong to a provider in 20.0, 4,177 transactions moved to the method of their own provider); product (the percentage pricelist rule is called discount); stock (tracking none is no longer valid, the label formats); website_sale (the variant images are converted in SQL, because Odoo's own conversion dies with a MemoryError on 626,715 variant images).

Tested by running the whole chain 15.0 to 20.0 on the production backup (hop to 20.0: 31 minutes), then updating 24 ported custom modules, installing the rest, rendering 44 websites and validating 4,509 views, and by opening records on the result. Not tested: databases without these modules, multi company data, and the scripts of modules the production database does not have. The analysis files of the base pull request were not changed. The stored selection values were checked on the migrated database only (13 fields had values that 20.0 rejects; the ones with a generic fix are converted here).

website_sale_comparison, website_sale_wishlist and website_sale_comparison_wishlist are part of website_sale, website_sale_stock_wishlist of website_sale_stock, account_add_gln and base_vat of account, and website_sale_autocomplete of website_address_autocomplete. Without the entries the old modules stay installed with their records, and the per-module records collide with the ones the new modules load (unique path of ir.actions.act_window for the attribute categories).
The stock valuation report moved from stock_account to account. When it keeps its old external id, loading account inserts a second action with the same path and stops on the unique constraint.
… index

Odoo 20 stores the sorted members of a chat in member_indices with a unique index. Older databases hold several chats between the same people, which stops the upgrade when the index is created. Duplicates are merged into one chat, with their messages, attachments and followers.
The mass_mailing.mailing_list_merge_action server action collides with the window action of the same name in 20.0.
Odoo 20 names the unit of measure of a line uom_id on every model, where it was product_uom_id or product_uom. The columns and fields are renamed so the data stays and the new required column has its values.
Odoo 20 names the unit of measure of a line uom_id on every model, where it was product_uom_id or product_uom. The columns and fields are renamed so the data stays and the new required column has its values.
Odoo 20 names the unit of measure of a line uom_id on every model, where it was product_uom_id or product_uom. The columns and fields are renamed so the data stays and the new required column has its values.
Odoo 20 names the unit of measure of a line uom_id on every model, where it was product_uom_id or product_uom. The columns and fields are renamed so the data stays and the new required column has its values.
…om_id

Odoo 20 names the unit of measure of a line uom_id on every model, where it was product_uom_id or product_uom. The columns and fields are renamed so the data stays and the new required column has its values.
Odoo 20 names the unit of measure of a line uom_id on every model, where it was product_uom_id or product_uom. The columns and fields are renamed so the data stays and the new required column has its values.
sale_delay becomes a company dependent field stored as jsonb, so the integer values are kept in a legacy column and converted. The accrued revenue server action is replaced by a window action with the same name.
Odoo converts the old variant images in data.xml with product.template._create_extra_variant_images, which reads the content of every image into memory and creates one record each: with 626,715 variant images the upgrade dies with a MemoryError. The same conversion is done in SQL, comparing stored checksums, with an ANALYZE of the new tables so the planner does not pick plans that never finish, and the function is replaced by a no-op marked with api.model for data.xml.
Up to 19.0 a payment method is shared by the providers that list it. In 20.0 every method has a provider (required, unique with the code) and transactions and tokens point at the method of their own provider. Each provider with transactions or tokens on an old method gets a method of its own and the references move over. The redirect form view reference of the providers is cleared so the obsolete views can be deleted.
Odoo 20 keeps only lot and serial as the tracking method of a template; the none of 19.0 is
not a valid value, and the computation of store_by hands it on, so opening a product failed
with Wrong value for product.template.store_by: 'none'. The operation type label formats are
named barcode_<layout> now.
compute_price lost percentage and formula and gained discount and markup in 20.0. The rules
that took a percentage off become discount.
A payment in state in_process (posted, not matched) is paid in 20.0, Odoo recomputes paid
and reconciled. The reconciliation models of type invoice_matching and writeoff_button are
matching_rule and reco_model.
20.0 adds an address step and a payment confirmation step. Odoo creates
the per-website copies of the generic steps only in post_init_hook, so a
database coming from 19.0 has none for the new steps and /shop/address
fails with Expected singleton: website.checkout.step().
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant