Repository navigation
Conversation
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().
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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_modulesfor 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).