diff --git a/.github/workflows/test-migration.yml b/.github/workflows/test-migration.yml
index 9402b852770..0cb8186ad3b 100644
--- a/.github/workflows/test-migration.yml
+++ b/.github/workflows/test-migration.yml
@@ -96,8 +96,10 @@ jobs:
pip install -q -r odoo/requirements.txt
pip install -r ./openupgrade/requirements.txt
pip install -U git+https://github.com/oca/openupgradelib
- # this is for v16 l10n_eg_edi_eta which crashes without it
+ # this is for v18 l10n_eg_edi_eta which crashes without it
pip install asn1crypto
+ # required by v18
+ pip install decorator
pip install coverage
# this is for account_peppol
pip install phonenumbers
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 35434e2b28b..52f78d1fe2c 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -101,7 +101,7 @@ repos:
hooks:
- id: trailing-whitespace
# exclude autogenerated files
- exclude: /README\.rst$|\.pot?$
+ exclude: /README\.rst$|\.pot?$|noupdate_changes(_work){0,1}.xml$
- id: end-of-file-fixer
# exclude autogenerated files
exclude: /README\.rst$|\.pot?$
diff --git a/docsource/modules180-190.rst b/docsource/modules180-190.rst
new file mode 100644
index 00000000000..470eab7215e
--- /dev/null
+++ b/docsource/modules180-190.rst
@@ -0,0 +1,1248 @@
+Module coverage 18.0 -> 19.0
+============================
+
+.. include:: coverage_legend.rst
+
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| Module | Status + Extra Information |
++===================================================+======================+=================================================+
+| account | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| account_check_printing | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| account_debit_note | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| account_edi | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| account_edi_proxy_client | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| account_edi_ubl_cii | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| account_edi_ubl_cii_tax_extension | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| account_fleet | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| account_payment | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| account_peppol | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |new| account_peppol_advanced_fields | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| account_qr_code_emv | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| account_qr_code_sepa | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| account_tax_python | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| account_update_tax_tags | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| analytic | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |new| api_doc | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| attachment_indexation | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| auth_ldap | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| auth_oauth | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| auth_passkey | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |new| auth_passkey_portal | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| auth_password_policy | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| auth_password_policy_portal | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| auth_password_policy_signup | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| auth_signup | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |new| auth_timeout | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| auth_totp | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| auth_totp_mail | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| auth_totp_mail_enforce | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| auth_totp_portal | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| barcodes | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| barcodes_gs1_nomenclature | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| base | |Done |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| base_address_extended | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| base_automation | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| base_geolocalize | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| base_iban | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| base_import | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| base_import_module | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| base_install_request | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| base_setup | |Nothing to do |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| base_sparse_field | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| base_vat | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| board | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| bus | |Nothing to do |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| calendar | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| calendar_sms | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| certificate | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| cloud_storage | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| cloud_storage_azure | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| cloud_storage_google | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| contacts | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| crm | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| crm_iap_enrich | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| crm_iap_mine | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| crm_livechat | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| crm_mail_plugin | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| crm_sms | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| data_recycle | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| delivery | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| delivery_mondialrelay | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| delivery_stock_picking_batch | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| digest | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| event | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| event_booth | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| event_booth_sale | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| event_crm | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| event_crm_sale | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| event_product | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| event_sale | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| event_sms | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| fleet | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| gamification | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| gamification_sale_crm | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| google_account | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |new| google_address_autocomplete | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| google_calendar | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| google_gmail | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| google_recaptcha | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| hr | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| hr_attendance | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| hr_calendar | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| hr_contract | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| hr_expense | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| hr_fleet | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| hr_gamification | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| hr_holidays | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| hr_holidays_attendance | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| hr_holidays_contract | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| hr_homeworking | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| hr_homeworking_calendar | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| hr_hourly_cost | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| hr_livechat | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| hr_maintenance | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| hr_org_chart | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| hr_presence | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| hr_recruitment | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| hr_recruitment_skills | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| hr_recruitment_sms | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| hr_recruitment_survey | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| hr_skills | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |new| hr_skills_event | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| hr_skills_slides | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| hr_skills_survey | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| hr_timesheet | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| hr_timesheet_attendance | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| hr_work_entry | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| hr_work_entry_contract | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| hr_work_entry_holidays | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |new| html_builder | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| html_editor | |Nothing to do |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| http_routing | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| iap | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| iap_crm | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| iap_mail | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| im_livechat | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |new| iot_base | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_account_edi_ubl_cii_tests | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_account_withholding_tax | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_account_withholding_tax_pos | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_ae | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |new| l10n_ae_pos | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_anz_ubl_pint | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_ar | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_ar_pos | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |new| l10n_ar_stock | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_ar_website_sale | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_ar_withholding | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_at | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_au | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_bd | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_be | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_be_pos_restaurant | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_be_pos_sale | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_bf | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_bg | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_bg_ledger | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_bh | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_bj | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_bo | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_br | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_br_sales | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_br_website_sale | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_ca | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_cd | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_cf | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_cg | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_ch | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_ch_pos | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_ci | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_cl | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_cm | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_cn | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_cn_city | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_co | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_co_pos | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_cr | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_cy | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_cz | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_de | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_din5008 | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_din5008_expense | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_din5008_purchase | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_din5008_repair | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_din5008_sale | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_din5008_stock | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_dk | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_dk_nemhandel | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_dk_oioubl | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_do | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_dz | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_ec | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |new| l10n_ec_sale | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_ec_stock | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| l10n_ec_website_sale | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_ee | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_eg | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_eg_edi_eta | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_es | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_es_edi_facturae | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_es_edi_sii | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_es_edi_tbai | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_es_edi_tbai_pos | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_es_edi_verifactu | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_es_edi_verifactu_pos | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| l10n_es_modelo130 | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_es_pos | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_et | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_eu_oss | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_fi | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_fi_sale | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_fr | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_fr_account | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_fr_facturx_chorus_pro | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_fr_hr_holidays | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_fr_hr_work_entry_holidays | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_fr_pos_cert | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_ga | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_gcc_invoice | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_gcc_invoice_stock_account | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_gcc_pos | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_gn | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_gq | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_gr | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_gr_edi | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_gt | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_gw | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_hk | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_hn | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_hr | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_hr_kuna | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_hu | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_hu_edi | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_id | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| l10n_id_efaktur | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_id_efaktur_coretax | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_id_pos | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_ie | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_il | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_in | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_in_edi | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| l10n_in_edi_ewaybill | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |new| l10n_in_ewaybill | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |new| l10n_in_ewaybill_irn | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| l10n_in_ewaybill_port | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_in_ewaybill_stock | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| l10n_in_gstin_status | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_in_hr_holidays | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_in_pos | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| l10n_in_purchase | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_in_purchase_stock | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_in_sale | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_in_sale_stock | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_in_stock | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| l10n_in_withholding | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| l10n_in_withholding_payment | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_iq | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_it | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_it_edi | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_it_edi_doi | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| l10n_it_edi_ndd | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| l10n_it_edi_ndd_account_dn | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_it_edi_sale | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| l10n_it_edi_website_sale | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| l10n_it_edi_withholding | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_it_stock_ddt | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_jo | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_jo_edi | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| l10n_jo_edi_extended | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_jp | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_jp_ubl_pint | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_ke | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_ke_edi_tremol | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_kh | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_km | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_kr | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_kw | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_kz | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_latam_base | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_latam_check | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_latam_invoice_document | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_lb_account | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |new| l10n_lk | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_lt | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_lu | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_lv | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_ma | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_mc | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_ml | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_mn | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_mt | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_mt_pos | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_mu_account | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_mx | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| l10n_mx_hr | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_my | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_my_edi | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| l10n_my_edi_extended | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_my_edi_pos | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_my_ubl_pint | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_mz | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_ne | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_ng | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_nl | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_no | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_nz | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_om | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_pa | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_pe | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_pe_pos | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| l10n_pe_website_sale | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_ph | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_pk | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_pl | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| l10n_pl_taxable_supply_date | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_pt | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_qa | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_ro | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_ro_edi | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_ro_edi_stock | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_ro_edi_stock_batch | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| l10n_ro_efactura_synchronize | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_rs | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_rs_edi | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_rw | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_sa | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_sa_edi | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_sa_edi_pos | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_sa_pos | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |new| l10n_sa_withholding_tax | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_se | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_sg | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_sg_ubl_pint | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_si | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_sk | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_sn | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_syscohada | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_td | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_test_pos_qr_payment | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_tg | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_th | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_tn | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_tr | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_tr_nilvera | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_tr_nilvera_edispatch | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_tr_nilvera_einvoice | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_tr_nilvera_einvoice_extended | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_tw | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_tw_edi_ecpay | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_tz_account | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_ua | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_ug | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_uk | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_us | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_us_account | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_uy | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_uy_pos | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| l10n_uy_website_sale | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_ve | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_vn | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_vn_edi_viettel | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_za | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| l10n_zm_account | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| link_tracker | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| loyalty | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| lunch | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| mail | |Done |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| mail_bot | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| mail_bot_hr | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| mail_group | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| mail_plugin | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| maintenance | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| marketing_card | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| mass_mailing | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| mass_mailing_crm | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| mass_mailing_crm_sms | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| mass_mailing_event | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| mass_mailing_event_sms | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| mass_mailing_event_track | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| mass_mailing_event_track_sms | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| mass_mailing_sale | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| mass_mailing_sale_sms | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| mass_mailing_slides | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| mass_mailing_sms | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| mass_mailing_themes | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| membership | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| microsoft_account | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| microsoft_calendar | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| microsoft_outlook | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| mrp | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| mrp_account | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| mrp_landed_costs | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| mrp_product_expiry | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| mrp_repair | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| mrp_subcontracting | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| mrp_subcontracting_account | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| mrp_subcontracting_dropshipping | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| mrp_subcontracting_landed_costs | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| mrp_subcontracting_purchase | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| mrp_subcontracting_repair | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| onboarding | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| partner_autocomplete | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |new| partnership | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| payment | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| payment_adyen | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| payment_aps | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| payment_asiapay | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| payment_authorize | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| payment_buckaroo | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| payment_custom | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| payment_demo | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |new| payment_dpo | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| payment_flutterwave | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |new| payment_iyzico | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| payment_mercado_pago | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| payment_mollie | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| payment_nuvei | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |new| payment_paymob | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| payment_paypal | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| payment_razorpay | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| payment_razorpay_oauth | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |new| payment_redsys | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| payment_stripe | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| payment_worldline | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| payment_xendit | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| phone_validation | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| point_of_sale | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| portal | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| portal_rating | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| pos_account_tax_python | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| pos_adyen | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| pos_discount | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| pos_epson_printer | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| pos_event | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| pos_event_sale | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |new| pos_glory_cash | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| pos_hr | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| pos_hr_restaurant | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |new| pos_imin | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| pos_loyalty | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| pos_mercado_pago | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| pos_mrp | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| pos_online_payment | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| pos_online_payment_self_order | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| pos_paytm | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| pos_pine_labs | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |new| pos_qfpay | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| pos_razorpay | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |new| pos_repair | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| pos_restaurant | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| pos_restaurant_adyen | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| pos_restaurant_loyalty | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| pos_restaurant_stripe | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| pos_sale | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| pos_sale_loyalty | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| pos_sale_margin | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| pos_self_order | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| pos_self_order_adyen | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| pos_self_order_epson_printer | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |new| pos_self_order_pine_labs | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |new| pos_self_order_qfpay | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| pos_self_order_razorpay | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| pos_self_order_sale | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| pos_self_order_stripe | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| pos_six | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| pos_sms | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| pos_stripe | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |new| pos_viva_com | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| pos_viva_wallet | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| privacy_lookup | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| product | |Done |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| product_email_template | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| product_expiry | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| product_images | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| product_margin | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| product_matrix | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| project | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| project_account | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| project_hr_expense | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| project_hr_skills | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| project_mail_plugin | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| project_mrp | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| project_mrp_account | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| project_mrp_sale | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| project_mrp_stock_landed_costs | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| project_purchase | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| project_purchase_stock | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| project_sale_expense | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| project_sms | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| project_stock | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| project_stock_account | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| project_stock_landed_costs | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| project_timesheet_holidays | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| project_todo | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| purchase | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| purchase_edi_ubl_bis3 | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| purchase_mrp | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| purchase_product_matrix | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| purchase_repair | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| purchase_requisition | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| purchase_requisition_sale | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| purchase_requisition_stock | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| purchase_stock | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| rating | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| repair | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| resource | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| resource_mail | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |new| rpc | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| sale | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| sale_async_emails | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| sale_crm | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| sale_edi_ubl | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| sale_expense | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| sale_expense_margin | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| sale_gelato | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| sale_gelato_stock | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| sale_loyalty | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| sale_loyalty_delivery | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| sale_management | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| sale_margin | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| sale_mrp | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| sale_mrp_margin | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| sale_pdf_quote_builder | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| sale_product_matrix | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| sale_project | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| sale_project_stock | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| sale_project_stock_account | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| sale_purchase | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| sale_purchase_project | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| sale_purchase_stock | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| sale_service | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| sale_sms | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| sale_stock | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| sale_stock_margin | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |new| sale_stock_product_expiry | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| sale_timesheet | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| sale_timesheet_margin | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| sales_team | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| sms | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| sms_twilio | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| snailmail | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| snailmail_account | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| social_media | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| spreadsheet | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| spreadsheet_account | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| spreadsheet_dashboard | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| spreadsheet_dashboard_account | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| spreadsheet_dashboard_event_sale | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| spreadsheet_dashboard_hr_expense | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| spreadsheet_dashboard_hr_timesheet | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| spreadsheet_dashboard_im_livechat | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| spreadsheet_dashboard_pos_hr | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| spreadsheet_dashboard_pos_restaurant | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| spreadsheet_dashboard_sale | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| spreadsheet_dashboard_sale_timesheet | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| spreadsheet_dashboard_stock_account | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| spreadsheet_dashboard_website_sale | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| spreadsheet_dashboard_website_sale_slides | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| stock | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| stock_account | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| stock_delivery | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| stock_dropshipping | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| stock_fleet | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| stock_landed_costs | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |new| stock_maintenance | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| stock_picking_batch | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| stock_sms | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| survey | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |new| survey_crm | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| theme_default | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| transifex | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| uom | |Done |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| utm | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| web | |Nothing to do |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| web_editor | |Merged into html_editor |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| web_hierarchy | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| web_tour | |Nothing to do |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| web_unsplash | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_blog | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_cf_turnstile | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_crm | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_crm_iap_reveal | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_crm_livechat | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_crm_partner_assign | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_crm_sms | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_customer | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_event | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_event_booth | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_event_booth_exhibitor | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_event_booth_sale | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_event_booth_sale_exhibitor | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_event_crm | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_event_exhibitor | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| website_event_jitsi | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| website_event_meet | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| website_event_meet_quiz | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_event_sale | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_event_track | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_event_track_live | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_event_track_live_quiz | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_event_track_quiz | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_forum | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_google_map | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_hr_recruitment | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |new| website_hr_recruitment_livechat | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| website_jitsi | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_links | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_livechat | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_mail | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_mail_group | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_mass_mailing | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_mass_mailing_sms | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| website_membership | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_partner | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_payment | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |del| website_payment_authorize | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_profile | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_project | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_sale | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_sale_autocomplete | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_sale_collect | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |new| website_sale_collect_wishlist | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_sale_comparison | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_sale_comparison_wishlist | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_sale_gelato | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_sale_loyalty | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_sale_mass_mailing | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_sale_mondialrelay | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_sale_mrp | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_sale_slides | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_sale_stock | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_sale_stock_wishlist | |No DB layout changes. |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_sale_wishlist | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_slides | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_slides_forum | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_slides_survey | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| website_sms | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
+| |new| website_timesheet | | |
++---------------------------------------------------+----------------------+-------------------------------------------------+
diff --git a/openupgrade_scripts/apriori.py b/openupgrade_scripts/apriori.py
index d0af4e560b6..819dcfff24e 100644
--- a/openupgrade_scripts/apriori.py
+++ b/openupgrade_scripts/apriori.py
@@ -9,7 +9,6 @@
"l10n_in_edi_ewaybill": "l10n_in_ewaybill",
"membership": "partnership",
"pos_viva_wallet": "pos_viva_com",
- "web_editor": "html_builder",
# odoo/enterprise
# OCA/...
}
@@ -43,6 +42,7 @@
"pos_self_order_epson_printer": "pos_self_order",
"sale_async_emails": "sale",
"website_membership": "website_crm_partner_assign",
+ "web_editor": "html_editor",
# odoo/enterprise
# OCA/...
}
diff --git a/openupgrade_scripts/scripts/base/19.0.1.3/noupdate_changes_work.xml b/openupgrade_scripts/scripts/base/19.0.1.3/noupdate_changes_work.xml
new file mode 100644
index 00000000000..55854af7503
--- /dev/null
+++ b/openupgrade_scripts/scripts/base/19.0.1.3/noupdate_changes_work.xml
@@ -0,0 +1,69 @@
+
+
+
+ AED
+
+
+ 1
+ TRN
+
+
+ Congo (DRC)
+
+
+ Congo (Republic)
+
+
+ CH-LI
+
+
+ EEU
+
+
+ EU
+
+
+ GCC
+
+
+ [('user_ids','in',[False,user.id])]
+ ir.filter: owner or global
+
+
+
+
+
+
+ [('user_ids', 'in', user.ids)]
+
+
+
+
+
+ VAT
+
+
+
+
+
+ SEPA
+
+
+ SA
+
+
+
+
+
+
+
+
diff --git a/openupgrade_scripts/scripts/base/19.0.1.3/post-migration.py b/openupgrade_scripts/scripts/base/19.0.1.3/post-migration.py
new file mode 100644
index 00000000000..a4997c2a6ba
--- /dev/null
+++ b/openupgrade_scripts/scripts/base/19.0.1.3/post-migration.py
@@ -0,0 +1,107 @@
+# Copyright 2025 Hunki Enterprises BV
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+from openupgradelib import openupgrade
+
+from odoo.fields import Command
+
+
+def _ir_actions_act_window_target(env):
+ """
+ selection value 'inline' was removed, map to 'current'
+ """
+ openupgrade.logged_query(
+ env.cr,
+ "UPDATE ir_act_window SET target='current' WHERE target='inline'",
+ )
+
+
+def _ir_actions_server_child_ids(env):
+ """
+ Field was changed from m2m to o2m - set parent_id from m2m table,
+ duplicate child actions that had multiple parents
+ """
+ env.cr.execute(
+ """
+ SELECT action_id, array_agg(server_id)
+ FROM rel_server_actions GROUP BY action_id
+ """
+ )
+ for action_id, parent_ids in env.cr.fetchall():
+ action = env["ir.actions.server"].browse(action_id)
+ parents = env["ir.actions.server"].browse(parent_ids)
+ action.parent_id = parents[0]
+ for parent in parents[1:]:
+ action.copy({"name": action.name, "parent_id": parent.id})
+
+
+def _ir_actions_server_html_value(env):
+ """
+ For evaluation_type 'value' and update_field_id.ttype == 'html',
+ new field html_value is used
+ """
+ for action in env["ir.actions.server"].search(
+ [
+ ("state", "=", "object_write"),
+ ("evaluation_type", "=", "value"),
+ ("update_field_id.ttype", "=", "html"),
+ ]
+ ):
+ action.write({"html_value": action.value})
+
+
+def _ir_filters_user_ids(env):
+ """
+ m2o user_id has been transformed to m2m user_ids
+ """
+ openupgrade.m2o_to_x2m(
+ env.cr, env["ir.filters"], env["ir.filters"]._table, "user_ids", "user_id"
+ )
+
+
+def _res_lang(env):
+ """
+ Char fields date_format, grouping and time_format have been dumbed down to
+ selection fields. Keep their original value in a legacy column, and map existing
+ values not in the selection to the default value
+ """
+ ResLang = env["res.lang"]
+ for field_name in ("date_format", "time_format", "grouping"):
+ field = ResLang._fields[field_name]
+ openupgrade.copy_columns(env.cr, {"res_lang": [(field_name, None, None)]})
+ openupgrade.logged_query(
+ env.cr,
+ f"UPDATE res_lang SET {field_name}=%(default)s "
+ f"WHERE {field_name} NOT IN %(selection)s",
+ {
+ "default": field.default(ResLang),
+ "selection": tuple(
+ value for value, _string in field._description_selection(env)
+ ),
+ },
+ )
+
+
+def _init_default_user_group(env):
+ """
+ Assign all groups of default_user to implied_ids of default_user_group
+ """
+ default_user = env.ref("base.default_user", raise_if_not_found=False)
+ if not default_user:
+ return
+ env.ref("base.default_user_group").write(
+ {
+ "implied_ids": [Command.set(default_user.group_ids.ids)],
+ }
+ )
+
+
+@openupgrade.migrate()
+def migrate(env, version):
+ openupgrade.load_data(env, "base", "19.0.1.3/noupdate_changes_work.xml")
+ _ir_actions_act_window_target(env)
+ _ir_actions_server_child_ids(env)
+ _ir_actions_server_html_value(env)
+ _ir_filters_user_ids(env)
+ _res_lang(env)
+ _init_default_user_group(env)
diff --git a/openupgrade_scripts/scripts/base/19.0.1.3/pre-migration.py b/openupgrade_scripts/scripts/base/19.0.1.3/pre-migration.py
new file mode 100644
index 00000000000..28873fe73c6
--- /dev/null
+++ b/openupgrade_scripts/scripts/base/19.0.1.3/pre-migration.py
@@ -0,0 +1,172 @@
+# Copyright 2025 Hunki Enterprises BV
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+from openupgradelib import openupgrade
+
+# pylint: disable=odoo-addons-relative-import
+from odoo.addons.openupgrade_scripts.apriori import merged_modules, renamed_modules
+
+_renamed_xmlids = [
+ ("l10n_fr.dom-tom", "base.dom-tom"),
+ ("l10n_at.state_at_1", "base.state_at_1"),
+ ("l10n_at.state_at_2", "base.state_at_2"),
+ ("l10n_at.state_at_3", "base.state_at_3"),
+ ("l10n_at.state_at_4", "base.state_at_4"),
+ ("l10n_at.state_at_5", "base.state_at_5"),
+ ("l10n_at.state_at_6", "base.state_at_6"),
+ ("l10n_at.state_at_7", "base.state_at_7"),
+ ("l10n_at.state_at_8", "base.state_at_8"),
+ ("l10n_at.state_at_9", "base.state_at_9"),
+ ("l10n_bd.state_bd_a", "base.state_bd_a"),
+ ("l10n_bd.state_bd_b", "base.state_bd_b"),
+ ("l10n_bd.state_bd_c", "base.state_bd_c"),
+ ("l10n_bd.state_bd_d", "base.state_bd_d"),
+ ("l10n_bd.state_bd_e", "base.state_bd_e"),
+ ("l10n_bd.state_bd_f", "base.state_bd_f"),
+ ("l10n_bd.state_bd_g", "base.state_bd_g"),
+ ("l10n_bd.state_bd_h", "base.state_bd_h"),
+ ("base.state_id_pp", "base.state_id_pe"),
+ ("l10n_iq.state_iq_01", "base.state_iq_01"),
+ ("l10n_iq.state_iq_01_ar", "base.state_iq_01_ar"),
+ ("l10n_iq.state_iq_02", "base.state_iq_02"),
+ ("l10n_iq.state_iq_02_ar", "base.state_iq_02_ar"),
+ ("l10n_iq.state_iq_03", "base.state_iq_03"),
+ ("l10n_iq.state_iq_03_ar", "base.state_iq_03_ar"),
+ ("l10n_iq.state_iq_04", "base.state_iq_04"),
+ ("l10n_iq.state_iq_04_ar", "base.state_iq_04_ar"),
+ ("l10n_iq.state_iq_05", "base.state_iq_05"),
+ ("l10n_iq.state_iq_05_ar", "base.state_iq_05_ar"),
+ ("l10n_iq.state_iq_06", "base.state_iq_06"),
+ ("l10n_iq.state_iq_06_ar", "base.state_iq_06_ar"),
+ ("l10n_iq.state_iq_07", "base.state_iq_07"),
+ ("l10n_iq.state_iq_07_ar", "base.state_iq_07_ar"),
+ ("l10n_iq.state_iq_08", "base.state_iq_08"),
+ ("l10n_iq.state_iq_08_ar", "base.state_iq_08_ar"),
+ ("l10n_iq.state_iq_09", "base.state_iq_09"),
+ ("l10n_iq.state_iq_09_ar", "base.state_iq_09_ar"),
+ ("l10n_iq.state_iq_10", "base.state_iq_10"),
+ ("l10n_iq.state_iq_10_ar", "base.state_iq_10_ar"),
+ ("l10n_iq.state_iq_11", "base.state_iq_11"),
+ ("l10n_iq.state_iq_11_ar", "base.state_iq_11_ar"),
+ ("l10n_iq.state_iq_12", "base.state_iq_12"),
+ ("l10n_iq.state_iq_12_ar", "base.state_iq_12_ar"),
+ ("l10n_iq.state_iq_13", "base.state_iq_13"),
+ ("l10n_iq.state_iq_13_ar", "base.state_iq_13_ar"),
+ ("l10n_iq.state_iq_14", "base.state_iq_14"),
+ ("l10n_iq.state_iq_14_ar", "base.state_iq_14_ar"),
+ ("l10n_iq.state_iq_15", "base.state_iq_15"),
+ ("l10n_iq.state_iq_15_ar", "base.state_iq_15_ar"),
+ ("l10n_iq.state_iq_16", "base.state_iq_16"),
+ ("l10n_iq.state_iq_16_ar", "base.state_iq_16_ar"),
+ ("l10n_iq.state_iq_17", "base.state_iq_17"),
+ ("l10n_iq.state_iq_17_ar", "base.state_iq_17_ar"),
+ ("l10n_iq.state_iq_18", "base.state_iq_18"),
+ ("l10n_iq.state_iq_18_ar", "base.state_iq_18_ar"),
+ ("l10n_pk.state_pk_ajk", "base.state_pk_ajk"),
+ ("l10n_pk.state_pk_ba", "base.state_pk_ba"),
+ ("l10n_pk.state_pk_gb", "base.state_pk_gb"),
+ ("l10n_pk.state_pk_is", "base.state_pk_is"),
+ ("l10n_pk.state_pk_kp", "base.state_pk_kp"),
+ ("l10n_pk.state_pk_pb", "base.state_pk_pb"),
+ ("l10n_pk.state_pk_sd", "base.state_pk_sd"),
+ ("l10n_pl.state_pl_ds", "base.state_pl_ds"),
+ ("l10n_pl.state_pl_kp", "base.state_pl_kp"),
+ ("l10n_pl.state_pl_lb", "base.state_pl_lb"),
+ ("l10n_pl.state_pl_ld", "base.state_pl_ld"),
+ ("l10n_pl.state_pl_ls", "base.state_pl_ls"),
+ ("l10n_pl.state_pl_mp", "base.state_pl_mp"),
+ ("l10n_pl.state_pl_mz", "base.state_pl_mz"),
+ ("l10n_pl.state_pl_op", "base.state_pl_op"),
+ ("l10n_pl.state_pl_pk", "base.state_pl_pk"),
+ ("l10n_pl.state_pl_pl", "base.state_pl_pl"),
+ ("l10n_pl.state_pl_pm", "base.state_pl_pm"),
+ ("l10n_pl.state_pl_sk", "base.state_pl_sk"),
+ ("l10n_pl.state_pl_sl", "base.state_pl_sl"),
+ ("l10n_pl.state_pl_wm", "base.state_pl_wm"),
+ ("l10n_pl.state_pl_wp", "base.state_pl_wp"),
+ ("l10n_pl.state_pl_zp", "base.state_pl_zp"),
+ ("l10n_tw.state_tw_chh", "base.state_tw_chh"),
+ ("l10n_tw.state_tw_cic", "base.state_tw_cic"),
+ ("l10n_tw.state_tw_cih", "base.state_tw_cih"),
+ ("l10n_tw.state_tw_hch", "base.state_tw_hch"),
+ ("l10n_tw.state_tw_hct", "base.state_tw_hct"),
+ ("l10n_tw.state_tw_hlh", "base.state_tw_hlh"),
+ ("l10n_tw.state_tw_ilh", "base.state_tw_ilh"),
+ ("l10n_tw.state_tw_khc", "base.state_tw_khc"),
+ ("l10n_tw.state_tw_klc", "base.state_tw_klc"),
+ ("l10n_tw.state_tw_kmc", "base.state_tw_kmc"),
+ ("l10n_tw.state_tw_lcc", "base.state_tw_lcc"),
+ ("l10n_tw.state_tw_mlh", "base.state_tw_mlh"),
+ ("l10n_tw.state_tw_ntc", "base.state_tw_ntc"),
+ ("l10n_tw.state_tw_ntpc", "base.state_tw_ntpc"),
+ ("l10n_tw.state_tw_phc", "base.state_tw_phc"),
+ ("l10n_tw.state_tw_pth", "base.state_tw_pth"),
+ ("l10n_tw.state_tw_tcc", "base.state_tw_tcc"),
+ ("l10n_tw.state_tw_tnh", "base.state_tw_tnh"),
+ ("l10n_tw.state_tw_tpc", "base.state_tw_tpc"),
+ ("l10n_tw.state_tw_tth", "base.state_tw_tth"),
+ ("l10n_tw.state_tw_tyc", "base.state_tw_tyc"),
+ ("l10n_tw.state_tw_ylh", "base.state_tw_ylh"),
+]
+
+_renamed_fields = [
+ (
+ "ir.actions.act_window",
+ "ir_act_window",
+ "groups_id",
+ "group_ids",
+ ),
+ (
+ "ir.actions.report",
+ "ir_act_report_xml",
+ "groups_id",
+ "group_ids",
+ ),
+ (
+ "ir.actions.server",
+ "ir_act_report_xml",
+ "groups_id",
+ "group_ids",
+ ),
+ (
+ "ir.ui.menu",
+ "ir_ui_menu",
+ "groups_id",
+ "group_ids",
+ ),
+ (
+ "ir.ui.view",
+ "ir_ui_view",
+ "groups_id",
+ "group_ids",
+ ),
+ (
+ "res.groups",
+ "res_groups",
+ "users",
+ "user_ids",
+ ),
+ (
+ "res.users",
+ "res_users",
+ "groups_id",
+ "group_ids",
+ ),
+]
+
+
+@openupgrade.migrate()
+def migrate(env, version):
+ openupgrade.logged_query(
+ env.cr,
+ f"""
+ CREATE TABLE {
+ openupgrade.get_legacy_name("ir_module_module")
+ } AS (SELECT name, state FROM ir_module_module);
+ """,
+ )
+ openupgrade.update_module_names(env.cr, renamed_modules.items())
+ openupgrade.update_module_names(env.cr, merged_modules.items(), merge_modules=True)
+ openupgrade.clean_transient_models(env.cr)
+ openupgrade.rename_xmlids(env.cr, _renamed_xmlids)
+ openupgrade.rename_fields(env, _renamed_fields)
diff --git a/openupgrade_scripts/scripts/base/19.0.1.3/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/base/19.0.1.3/upgrade_analysis_work.txt
new file mode 100644
index 00000000000..58b17faadbe
--- /dev/null
+++ b/openupgrade_scripts/scripts/base/19.0.1.3/upgrade_analysis_work.txt
@@ -0,0 +1,641 @@
+---Models in module 'base'---
+obsolete model res.partner.title
+
+# NOTHING TO DO: possibly some oca module will pick this up again
+
+new model ir.actions.server.history
+
+# NOTHING TO DO: new functionality
+
+new model properties.base.definition
+new model properties.base.definition.mixin [abstract]
+
+# NOTHING TO DO: handled by orm
+
+new model res.groups.privilege
+new model server.action.history.wizard [transient]
+
+# NOTHING TO DO: new functionality
+
+---Fields in module 'base'---
+account / res.company / company_registry_placeholder (char): not a function anymore
+account / res.company / company_registry_placeholder (char): now related
+base / ir.actions.act_url / _order : _order is now 'name, id' ('name')
+base / ir.actions.act_window / _order : _order is now 'name, id' ('name')
+base / ir.actions.act_window / cache (boolean) : NEW hasdefault: default
+
+# NOTHING TO DO
+
+base / ir.actions.act_window / group_ids (many2many) : NEW relation: res.groups
+base / ir.actions.act_window / groups_id (many2many) : DEL relation: res.groups
+
+# DONE: renamed groups_id to group_ids in pre-migration
+
+base / ir.actions.act_window / target (selection) : selection_keys removed: [inline]
+
+# DONE: set to 'current' in post-migration
+
+base / ir.actions.act_window_close / _order : _order is now 'name, id' ('name')
+base / ir.actions.actions / _order : _order is now 'name, id' ('name')
+base / ir.actions.client / _order : _order is now 'name, id' ('name')
+
+# NOTHING TO DO
+
+base / ir.actions.report / group_ids (many2many) : NEW relation: res.groups
+base / ir.actions.report / groups_id (many2many) : DEL relation: res.groups
+
+# DONE: renamed groups_id to group_ids in pre-migration
+
+base / ir.actions.server / _order : _order is now 'sequence,name,id' ('sequence,name')
+base / ir.actions.server / automated_name (char) : NEW isfunction: function, stored
+
+# NOTHING TO DO
+
+base / ir.actions.server / child_ids (many2many) : table is now 'False' ('rel_server_actions')
+base / ir.actions.server / child_ids (many2many) : type is now 'one2many' ('many2many')
+
+# DONE: set from m2m table in post-migration
+
+base / ir.actions.server / crud_model_id (many2one) : now a function
+
+# NOTHING TO DO: same computation function
+
+base / ir.actions.server / evaluation_type (selection) : selection_keys added: [sequence] (most likely nothing to do)
+
+# NOTHING TO DO
+
+base / ir.actions.server / group_ids (many2many) : NEW relation: res.groups
+base / ir.actions.server / groups_id (many2many) : DEL relation: res.groups
+
+# DONE: renamed groups_id to group_ids in pre-migration
+
+base / ir.actions.server / html_value (html) : NEW
+
+# DONE: filled from value in post-migration
+
+base / ir.actions.server / ir_cron_ids (one2many) : NEW relation: ir.cron
+
+# NOTHING TO DO: inverse of ir.cron#ir_actions_server_id
+
+base / ir.actions.server / model_name (char) : not stored anymore
+
+# NOTHING TO DO
+
+base / ir.actions.server / parent_id (many2one) : NEW relation: ir.actions.server
+
+# DONE: see above for child_ids
+
+base / ir.actions.server / sequence_id (many2one) : NEW relation: ir.sequence
+
+# NOTHING TO DO: new field for evaluation_type == 'sequence'
+
+base / ir.actions.server / state (selection) : selection_keys added: [object_copy] (most likely nothing to do)
+base / ir.actions.server / value_field_to_show (selection): selection_keys added: [html_value, sequence_id] (most likely nothing to do)
+
+# NOTHING TO DO
+
+base / ir.actions.server.history / action_id (many2one) : NEW relation: ir.actions.server, required
+base / ir.actions.server.history / code (text) : NEW
+
+# NOTHING TO DO: v19 keeps a history of code changes
+
+base / ir.cron / _order : _order is now 'cron_name, id' ('cron_name')
+
+# NOTHING TO DO
+
+base / ir.cron / child_ids (many2many) : type is now 'one2many' ('many2many')
+
+# NOTHING TO DO: inherited from ir.actions.server, handled there
+
+base / ir.cron.trigger / call_at (datetime) : now required
+base / ir.cron.trigger / cron_id (many2one) : now required
+
+# NOTHING TO DO: old records with missing fields will be cleaned up eventually
+
+base / ir.exports / _order : _order is now 'name, id' ('name')
+
+# NOTHING TO DO
+
+base / ir.filters / user_id (many2one) : DEL relation: res.users
+base / ir.filters / user_ids (many2many) : NEW relation: res.users
+
+# DONE: openupgrade.m2o_to_x2m in post-migration
+
+base / ir.mail_server / smtp_encryption (selection) : selection_keys added: [ssl_strict, starttls_strict] (most likely nothing to do)
+
+# NOTHING TO DO
+
+base / ir.model / abstract (boolean) : NEW
+base / ir.model / fold_name (char) : NEW
+
+# NOTHING TO DO: filled by orm
+
+base / ir.model.fields / _order : _order is now 'name, id' ('name')
+base / ir.model.fields / complete_name (char) : DEL
+
+# NOTHING TO DO
+
+base / ir.model.fields / translate (boolean) : selection_keys is now '['html_translate', 'standard', 'xml_translate']' ('False')
+base / ir.model.fields / translate (boolean) : type is now 'selection' ('boolean')
+
+# DONE: set column to NULL where it was FALSE in openupgrade_framework, because migration scripts are too late for it
+
+base / ir.module.category / _order : _order is now 'sequence, name, id' ('name')
+
+# NOTHING TO DO: we want to have the ordering by sequence as provided by Odoo
+
+base / ir.module.category / privilege_ids (one2many) : NEW relation: res.groups.privilege
+
+# NOTHING TO DO: new concept
+
+base / ir.profile / cpu_duration (float) : NEW
+base / ir.profile / others (text) : NEW
+
+# NOTHING TO DO: new funcitonality, no way of generating this data
+
+base / ir.sequence / _order : _order is now 'name, id' ('name')
+
+# NOTHING TO DO
+
+base / ir.ui.menu / group_ids (many2many) : NEW relation: res.groups
+base / ir.ui.menu / groups_id (many2many) : DEL relation: res.groups
+base / ir.ui.view / group_ids (many2many) : NEW relation: res.groups
+base / ir.ui.view / groups_id (many2many) : DEL relation: res.groups
+
+# DONE: renamed groups_id to group_ids in pre-migration
+
+base / ir.ui.view.custom / _order : _order is now 'create_date desc, id desc' ('create_date desc')
+
+# NOTHING TO DO
+
+base / properties.base.definition / properties_definition (properties_definition): NEW
+base / properties.base.definition / properties_field_id (many2one): NEW relation: ir.model.fields, required
+
+# NOTHING TO DO: filled by orm
+
+base / report.layout / _order : _order is now 'sequence, id' ('sequence')
+base / res.bank / _order : _order is now 'name, id' ('name')
+base / res.company / company_registry_placeholder (char): previously in module account
+
+# NOTHING TO DO
+
+base / res.company / mobile (char) : DEL
+
+# NOTHING TO DO: possibly some oca module will pick this up again
+
+base / res.country / _order : _order is now 'name, id' ('name')
+
+# NOTHING TO DO: possibly some oca module will pick this up again
+
+base / res.country.group / code (char) : NEW
+
+# NOTHING TO DO: filled in noupdate_changes.xml
+
+base / res.country.state / _order : _order is now 'code, id' ('code')
+base / res.currency.rate / _order : _order is now 'name desc, id' ('name desc')
+base / res.groups / _order : _order is now 'privilege_id, sequence, name, id' ('name')
+
+# NOTHING TO DO
+
+base / res.groups / category_id (many2one) : DEL relation: ir.module.category
+
+# NOTHING TO DO: code provided groups will set their own privilege if applicable, manually created ones will have to be assigned to whatever privilege makes sense
+
+base / res.groups / color (integer) : DEL
+
+# NOTHING TO DO
+
+base / res.groups / implied_by_ids (many2many) : NEW relation: res.groups
+
+# NOTHING TO DO: inverse of existing relation
+
+base / res.groups / privilege_id (many2one) : NEW relation: res.groups.privilege
+
+# NOTHING TO DO: new concept
+
+base / res.groups / sequence (integer) : NEW
+
+# NOTHING TO DO
+
+base / res.groups / user_ids (many2many) : NEW relation: res.users
+base / res.groups / users (many2many) : DEL relation: res.users
+
+# DONE: renamed field in pre-migration
+
+base / res.groups.privilege / category_id (many2one) : NEW relation: ir.module.category
+base / res.groups.privilege / description (text) : NEW
+base / res.groups.privilege / group_ids (one2many) : NEW relation: res.groups
+base / res.groups.privilege / name (char) : NEW required, translate
+base / res.groups.privilege / placeholder (char) : NEW hasdefault: default
+base / res.groups.privilege / sequence (integer) : NEW hasdefault: default
+
+# NOTHING TO DO: new concept
+
+base / res.lang / date_format (char) : selection_keys is now 'function' ('False')
+base / res.lang / date_format (char) : type is now 'selection' ('char')
+base / res.lang / grouping (char) : selection_keys is now '['[3,0]', '[3,2,0]']' ('False')
+base / res.lang / grouping (char) : type is now 'selection' ('char')
+base / res.lang / short_time_format (char) : DEL required
+base / res.lang / time_format (char) : selection_keys is now '['%H:%M:%S', '%I:%M:%S %p']' ('False')
+base / res.lang / time_format (char) : type is now 'selection' ('char')
+
+# DONE: copy original values to legacy column, map values not in selection to default value
+
+base / res.partner / mobile (char) : DEL
+
+# NOTHING TO DO: possibly some oca module will pick this up again
+
+base / res.partner / properties (properties) : NEW hasdefault: compute
+
+# NOTHING TO DO: new functionality
+
+base / res.partner / title (many2one) : DEL relation: res.partner.title
+
+# NOTHING TO DO: possibly some oca module will pick this up again
+
+base / res.partner.bank / clearing_number (char) : NEW
+base / res.partner.bank / note (text) : NEW
+
+# NOTHING TO DO: new functionality
+
+base / res.partner.category / _order : _order is now 'name, id' ('name')
+base / res.partner.industry / _order : _order is now 'name, id' ('name')
+
+# NOTHING TO DO
+
+base / res.partner.title / name (char) : DEL required
+base / res.partner.title / shortcut (char) : DEL
+
+# NOTHING TO DO: obsolete model
+
+base / res.users / group_ids (many2many) : NEW relation: res.groups, hasdefault: default
+base / res.users / groups_id (many2many) : DEL relation: res.groups
+
+# DONE: renamed groups_id to group_ids in pre-migration
+
+base / res.users / role (selection) : NEW selection_keys: ['group_system', 'group_user'], hasdefault: compute, stored: False
+base / res.users / view_group_hierarchy (json) : NEW hasdefault: default, stored: False
+
+# NOTHING TO DO: nonstored
+
+---XML records in module 'base'---
+NEW ir.actions.act_window: base.action_res_groups_privilege
+DEL ir.actions.act_window: base.action_partner_title_contact
+NEW ir.model.access: base.access_ir_actions_server_history_group_system
+NEW ir.model.access: base.access_properties_base_definition_group_system
+NEW ir.model.access: base.access_res_groups_privilege_group_erp_manager
+NEW ir.model.access: base.access_res_groups_privilege_group_user
+NEW ir.model.access: base.access_server_action_history_wizard
+DEL ir.model.access: base.access_res_partner_title_group_partner_manager
+DEL ir.model.access: base.access_res_partner_title_group_user
+NEW ir.model.constraint: base.constraint_ir_act_window_view_unique_mode_per_action
+NEW ir.model.constraint: base.constraint_ir_attachment_res_idx
+NEW ir.model.constraint: base.constraint_ir_filters_get_filters_index
+NEW ir.model.constraint: base.constraint_ir_model_data_model_res_id_index
+NEW ir.model.constraint: base.constraint_ir_model_data_module_name_uniq_index
+NEW ir.model.constraint: base.constraint_ir_ui_view_custom_user_id_ref_id
+NEW ir.model.constraint: base.constraint_ir_ui_view_model_type_inherit_id
+NEW ir.model.constraint: base.constraint_properties_base_definition_unique_properties_field_id
+NEW ir.model.constraint: base.constraint_res_country_group_check_code_uniq
+NEW ir.model.constraint: base.constraint_res_device_composite_idx
+NEW ir.model.constraint: base.constraint_res_device_log_composite_idx
+NEW ir.model.constraint: base.constraint_res_device_log_revoked_idx
+NEW ir.model.constraint: base.constraint_res_device_revoked_idx
+ir.model.constraint: base.constraint_res_groups_name_uniq (changed definition: is now 'UNIQUE (privilege_id, name)' ('unique(category_id,name)'))
+DEL ir.model.constraint: base.constraint_ir_filters_name_model_uid_unique
+NEW ir.module.category: base.module_category_esg
+NEW ir.module.category: base.module_category_human_resources_referrals
+NEW ir.module.category: base.module_category_internet_of_things_(iot)
+NEW ir.module.category: base.module_category_master_data
+NEW ir.module.category: base.module_category_shipping_connectors (noupdate)
+NEW ir.module.category: base.module_category_supply_chain (noupdate)
+DEL ir.module.category: base.module_category_inventory (noupdate)
+DEL ir.module.category: base.module_category_manufacturing (noupdate)
+DEL ir.module.category: base.module_category_usability
+DEL ir.module.category: base.module_category_user_type
+NEW ir.rule: base.properties_base_definition_rule_admin (noupdate)
+NEW ir.rule: base.res_users_rule_portal (noupdate)
+DEL ir.rule: base.ir_filters_delete_own_rule (noupdate)
+NEW ir.ui.menu: base.menu_action_res_groups_privilege
+NEW ir.ui.view: base.ir_filters_view_edit_form
+NEW ir.ui.view: base.res_users_apikeys_view_kanban
+NEW ir.ui.view: base.server_action_history_wizard_view
+NEW ir.ui.view: base.view_default_groups_form
+NEW ir.ui.view: base.view_groups_list
+NEW ir.ui.view: base.view_res_groups_privilege_form
+NEW ir.ui.view: base.view_res_groups_privilege_list
+NEW ir.ui.view: base.view_server_action_kanban
+DEL ir.ui.view: base.res_partner_view_form_private
+DEL ir.ui.view: base.user_groups_view
+DEL ir.ui.view: base.view_partner_title_form
+DEL ir.ui.view: base.view_partner_title_tree
+NEW res.country: base.xi (noupdate)
+NEW res.country.group: base.dom-tom [renamed from l10n_fr module] (noupdate) (noupdate switched)
+NEW res.country.group: base.europe_prefix (noupdate)
+
+# NOTHING TO DO
+
+NEW res.country.state: base.state_at_1 [renamed from l10n_at module]
+NEW res.country.state: base.state_at_2 [renamed from l10n_at module]
+NEW res.country.state: base.state_at_3 [renamed from l10n_at module]
+NEW res.country.state: base.state_at_4 [renamed from l10n_at module]
+NEW res.country.state: base.state_at_5 [renamed from l10n_at module]
+NEW res.country.state: base.state_at_6 [renamed from l10n_at module]
+NEW res.country.state: base.state_at_7 [renamed from l10n_at module]
+NEW res.country.state: base.state_at_8 [renamed from l10n_at module]
+NEW res.country.state: base.state_at_9 [renamed from l10n_at module]
+NEW res.country.state: base.state_bd_a [renamed from l10n_bd module]
+NEW res.country.state: base.state_bd_b [renamed from l10n_bd module]
+NEW res.country.state: base.state_bd_c [renamed from l10n_bd module]
+NEW res.country.state: base.state_bd_d [renamed from l10n_bd module]
+NEW res.country.state: base.state_bd_e [renamed from l10n_bd module]
+NEW res.country.state: base.state_bd_f [renamed from l10n_bd module]
+NEW res.country.state: base.state_bd_g [renamed from l10n_bd module]
+NEW res.country.state: base.state_bd_h [renamed from l10n_bd module]
+
+# DONE: renamed from l10n module
+
+NEW res.country.state: base.state_id_pe
+
+# DONE: renamed from base.state_id_pp
+
+NEW res.country.state: base.state_iq_01 [renamed from l10n_iq module]
+NEW res.country.state: base.state_iq_01_ar [renamed from l10n_iq module]
+NEW res.country.state: base.state_iq_02 [renamed from l10n_iq module]
+NEW res.country.state: base.state_iq_02_ar [renamed from l10n_iq module]
+NEW res.country.state: base.state_iq_03 [renamed from l10n_iq module]
+NEW res.country.state: base.state_iq_03_ar [renamed from l10n_iq module]
+NEW res.country.state: base.state_iq_04 [renamed from l10n_iq module]
+NEW res.country.state: base.state_iq_04_ar [renamed from l10n_iq module]
+NEW res.country.state: base.state_iq_05 [renamed from l10n_iq module]
+NEW res.country.state: base.state_iq_05_ar [renamed from l10n_iq module]
+NEW res.country.state: base.state_iq_06 [renamed from l10n_iq module]
+NEW res.country.state: base.state_iq_06_ar [renamed from l10n_iq module]
+NEW res.country.state: base.state_iq_07 [renamed from l10n_iq module]
+NEW res.country.state: base.state_iq_07_ar [renamed from l10n_iq module]
+NEW res.country.state: base.state_iq_08 [renamed from l10n_iq module]
+NEW res.country.state: base.state_iq_08_ar [renamed from l10n_iq module]
+NEW res.country.state: base.state_iq_09 [renamed from l10n_iq module]
+NEW res.country.state: base.state_iq_09_ar [renamed from l10n_iq module]
+NEW res.country.state: base.state_iq_10 [renamed from l10n_iq module]
+NEW res.country.state: base.state_iq_10_ar [renamed from l10n_iq module]
+NEW res.country.state: base.state_iq_11 [renamed from l10n_iq module]
+NEW res.country.state: base.state_iq_11_ar [renamed from l10n_iq module]
+NEW res.country.state: base.state_iq_12 [renamed from l10n_iq module]
+NEW res.country.state: base.state_iq_12_ar [renamed from l10n_iq module]
+NEW res.country.state: base.state_iq_13 [renamed from l10n_iq module]
+NEW res.country.state: base.state_iq_13_ar [renamed from l10n_iq module]
+NEW res.country.state: base.state_iq_14 [renamed from l10n_iq module]
+NEW res.country.state: base.state_iq_14_ar [renamed from l10n_iq module]
+NEW res.country.state: base.state_iq_15 [renamed from l10n_iq module]
+NEW res.country.state: base.state_iq_15_ar [renamed from l10n_iq module]
+NEW res.country.state: base.state_iq_16 [renamed from l10n_iq module]
+NEW res.country.state: base.state_iq_16_ar [renamed from l10n_iq module]
+NEW res.country.state: base.state_iq_17 [renamed from l10n_iq module]
+NEW res.country.state: base.state_iq_17_ar [renamed from l10n_iq module]
+NEW res.country.state: base.state_iq_18 [renamed from l10n_iq module]
+NEW res.country.state: base.state_iq_18_ar [renamed from l10n_iq module]
+
+# DONE: renamed from l10n module
+
+NEW res.country.state: base.state_ng_ab
+NEW res.country.state: base.state_ng_ad
+NEW res.country.state: base.state_ng_ak
+NEW res.country.state: base.state_ng_an
+NEW res.country.state: base.state_ng_ba
+NEW res.country.state: base.state_ng_be
+NEW res.country.state: base.state_ng_bo
+NEW res.country.state: base.state_ng_by
+NEW res.country.state: base.state_ng_cr
+NEW res.country.state: base.state_ng_de
+NEW res.country.state: base.state_ng_eb
+NEW res.country.state: base.state_ng_ed
+NEW res.country.state: base.state_ng_ek
+NEW res.country.state: base.state_ng_en
+NEW res.country.state: base.state_ng_fc
+NEW res.country.state: base.state_ng_go
+NEW res.country.state: base.state_ng_im
+NEW res.country.state: base.state_ng_ji
+NEW res.country.state: base.state_ng_ka
+NEW res.country.state: base.state_ng_ke
+NEW res.country.state: base.state_ng_kn
+NEW res.country.state: base.state_ng_ko
+NEW res.country.state: base.state_ng_kt
+NEW res.country.state: base.state_ng_kw
+NEW res.country.state: base.state_ng_la
+NEW res.country.state: base.state_ng_na
+NEW res.country.state: base.state_ng_ni
+NEW res.country.state: base.state_ng_og
+NEW res.country.state: base.state_ng_on
+NEW res.country.state: base.state_ng_os
+NEW res.country.state: base.state_ng_oy
+NEW res.country.state: base.state_ng_pl
+NEW res.country.state: base.state_ng_ri
+NEW res.country.state: base.state_ng_so
+NEW res.country.state: base.state_ng_ta
+NEW res.country.state: base.state_ng_yo
+NEW res.country.state: base.state_ng_za
+NEW res.country.state: base.state_ph_01
+NEW res.country.state: base.state_ph_02
+NEW res.country.state: base.state_ph_03
+NEW res.country.state: base.state_ph_04
+NEW res.country.state: base.state_ph_05
+NEW res.country.state: base.state_ph_06
+NEW res.country.state: base.state_ph_07
+NEW res.country.state: base.state_ph_08
+NEW res.country.state: base.state_ph_09
+NEW res.country.state: base.state_ph_10
+NEW res.country.state: base.state_ph_11
+NEW res.country.state: base.state_ph_12
+NEW res.country.state: base.state_ph_13
+NEW res.country.state: base.state_ph_14
+NEW res.country.state: base.state_ph_15
+NEW res.country.state: base.state_ph_16
+NEW res.country.state: base.state_ph_17
+NEW res.country.state: base.state_ph_18
+NEW res.country.state: base.state_ph_19
+NEW res.country.state: base.state_ph_20
+NEW res.country.state: base.state_ph_21
+NEW res.country.state: base.state_ph_22
+NEW res.country.state: base.state_ph_23
+NEW res.country.state: base.state_ph_24
+NEW res.country.state: base.state_ph_25
+NEW res.country.state: base.state_ph_26
+NEW res.country.state: base.state_ph_27
+NEW res.country.state: base.state_ph_28
+NEW res.country.state: base.state_ph_29
+NEW res.country.state: base.state_ph_30
+NEW res.country.state: base.state_ph_31
+NEW res.country.state: base.state_ph_32
+NEW res.country.state: base.state_ph_33
+NEW res.country.state: base.state_ph_34
+NEW res.country.state: base.state_ph_35
+NEW res.country.state: base.state_ph_36
+NEW res.country.state: base.state_ph_37
+NEW res.country.state: base.state_ph_38
+NEW res.country.state: base.state_ph_39
+NEW res.country.state: base.state_ph_40
+NEW res.country.state: base.state_ph_41
+NEW res.country.state: base.state_ph_42
+NEW res.country.state: base.state_ph_43
+NEW res.country.state: base.state_ph_44
+NEW res.country.state: base.state_ph_45
+NEW res.country.state: base.state_ph_46
+NEW res.country.state: base.state_ph_47
+NEW res.country.state: base.state_ph_48
+NEW res.country.state: base.state_ph_49
+NEW res.country.state: base.state_ph_50
+NEW res.country.state: base.state_ph_51
+NEW res.country.state: base.state_ph_52
+NEW res.country.state: base.state_ph_53
+NEW res.country.state: base.state_ph_54
+NEW res.country.state: base.state_ph_55
+NEW res.country.state: base.state_ph_56
+NEW res.country.state: base.state_ph_57
+NEW res.country.state: base.state_ph_58
+NEW res.country.state: base.state_ph_59
+NEW res.country.state: base.state_ph_60
+NEW res.country.state: base.state_ph_61
+NEW res.country.state: base.state_ph_62
+NEW res.country.state: base.state_ph_63
+NEW res.country.state: base.state_ph_64
+NEW res.country.state: base.state_ph_65
+NEW res.country.state: base.state_ph_66
+NEW res.country.state: base.state_ph_67
+NEW res.country.state: base.state_ph_68
+NEW res.country.state: base.state_ph_69
+NEW res.country.state: base.state_ph_70
+NEW res.country.state: base.state_ph_71
+NEW res.country.state: base.state_ph_72
+NEW res.country.state: base.state_ph_73
+NEW res.country.state: base.state_ph_74
+NEW res.country.state: base.state_ph_75
+NEW res.country.state: base.state_ph_76
+NEW res.country.state: base.state_ph_77
+NEW res.country.state: base.state_ph_78
+NEW res.country.state: base.state_ph_79
+NEW res.country.state: base.state_ph_80
+NEW res.country.state: base.state_ph_81
+NEW res.country.state: base.state_ph_82
+NEW res.country.state: base.state_ph_83
+
+# NOTHING TO DO
+
+NEW res.country.state: base.state_pk_ajk [renamed from l10n_pk module]
+NEW res.country.state: base.state_pk_ba [renamed from l10n_pk module]
+NEW res.country.state: base.state_pk_gb [renamed from l10n_pk module]
+NEW res.country.state: base.state_pk_is [renamed from l10n_pk module]
+NEW res.country.state: base.state_pk_kp [renamed from l10n_pk module]
+NEW res.country.state: base.state_pk_pb [renamed from l10n_pk module]
+NEW res.country.state: base.state_pk_sd [renamed from l10n_pk module]
+NEW res.country.state: base.state_pl_ds [renamed from l10n_pl module]
+NEW res.country.state: base.state_pl_kp [renamed from l10n_pl module]
+NEW res.country.state: base.state_pl_lb [renamed from l10n_pl module]
+NEW res.country.state: base.state_pl_ld [renamed from l10n_pl module]
+NEW res.country.state: base.state_pl_ls [renamed from l10n_pl module]
+NEW res.country.state: base.state_pl_mp [renamed from l10n_pl module]
+NEW res.country.state: base.state_pl_mz [renamed from l10n_pl module]
+NEW res.country.state: base.state_pl_op [renamed from l10n_pl module]
+NEW res.country.state: base.state_pl_pk [renamed from l10n_pl module]
+NEW res.country.state: base.state_pl_pl [renamed from l10n_pl module]
+NEW res.country.state: base.state_pl_pm [renamed from l10n_pl module]
+NEW res.country.state: base.state_pl_sk [renamed from l10n_pl module]
+NEW res.country.state: base.state_pl_sl [renamed from l10n_pl module]
+NEW res.country.state: base.state_pl_wm [renamed from l10n_pl module]
+NEW res.country.state: base.state_pl_wp [renamed from l10n_pl module]
+NEW res.country.state: base.state_pl_zp [renamed from l10n_pl module]
+
+# DONE: renamed from l10n module
+
+NEW res.country.state: base.state_so_1
+NEW res.country.state: base.state_so_2
+NEW res.country.state: base.state_so_3
+NEW res.country.state: base.state_so_4
+NEW res.country.state: base.state_so_5
+NEW res.country.state: base.state_so_6
+NEW res.country.state: base.state_so_7
+NEW res.country.state: base.state_so_8
+
+# NOTHING TO DO
+
+NEW res.country.state: base.state_tw_chh [renamed from l10n_tw module]
+NEW res.country.state: base.state_tw_cic [renamed from l10n_tw module]
+NEW res.country.state: base.state_tw_cih [renamed from l10n_tw module]
+NEW res.country.state: base.state_tw_hch [renamed from l10n_tw module]
+NEW res.country.state: base.state_tw_hct [renamed from l10n_tw module]
+NEW res.country.state: base.state_tw_hlh [renamed from l10n_tw module]
+NEW res.country.state: base.state_tw_ilh [renamed from l10n_tw module]
+NEW res.country.state: base.state_tw_khc [renamed from l10n_tw module]
+NEW res.country.state: base.state_tw_klc [renamed from l10n_tw module]
+NEW res.country.state: base.state_tw_kmc [renamed from l10n_tw module]
+NEW res.country.state: base.state_tw_lcc [renamed from l10n_tw module]
+NEW res.country.state: base.state_tw_mlh [renamed from l10n_tw module]
+NEW res.country.state: base.state_tw_ntc [renamed from l10n_tw module]
+NEW res.country.state: base.state_tw_ntpc [renamed from l10n_tw module]
+NEW res.country.state: base.state_tw_phc [renamed from l10n_tw module]
+NEW res.country.state: base.state_tw_pth [renamed from l10n_tw module]
+NEW res.country.state: base.state_tw_tcc [renamed from l10n_tw module]
+NEW res.country.state: base.state_tw_tnh [renamed from l10n_tw module]
+NEW res.country.state: base.state_tw_tpc [renamed from l10n_tw module]
+NEW res.country.state: base.state_tw_tth [renamed from l10n_tw module]
+NEW res.country.state: base.state_tw_tyc [renamed from l10n_tw module]
+NEW res.country.state: base.state_tw_ylh [renamed from l10n_tw module]
+
+# DONE: renamed from l10n module
+
+DEL res.country.state: base.state_id_pp
+
+# DONE: renamed to base.state_id_pe
+
+DEL res.country.state: base.state_vn_VN-03
+DEL res.country.state: base.state_vn_VN-06
+DEL res.country.state: base.state_vn_VN-14
+DEL res.country.state: base.state_vn_VN-20
+DEL res.country.state: base.state_vn_VN-24
+DEL res.country.state: base.state_vn_VN-27
+DEL res.country.state: base.state_vn_VN-28
+DEL res.country.state: base.state_vn_VN-31
+DEL res.country.state: base.state_vn_VN-32
+DEL res.country.state: base.state_vn_VN-36
+DEL res.country.state: base.state_vn_VN-40
+DEL res.country.state: base.state_vn_VN-41
+DEL res.country.state: base.state_vn_VN-43
+DEL res.country.state: base.state_vn_VN-46
+DEL res.country.state: base.state_vn_VN-47
+DEL res.country.state: base.state_vn_VN-50
+DEL res.country.state: base.state_vn_VN-51
+DEL res.country.state: base.state_vn_VN-52
+DEL res.country.state: base.state_vn_VN-53
+DEL res.country.state: base.state_vn_VN-54
+DEL res.country.state: base.state_vn_VN-55
+DEL res.country.state: base.state_vn_VN-57
+DEL res.country.state: base.state_vn_VN-58
+DEL res.country.state: base.state_vn_VN-61
+DEL res.country.state: base.state_vn_VN-63
+DEL res.country.state: base.state_vn_VN-67
+DEL res.country.state: base.state_vn_VN-70
+DEL res.country.state: base.state_vn_VN-72
+DEL res.country.state: base.state_vn_VN-73
+
+# NOTHING TO DO
+
+NEW res.groups: base.default_user_group (noupdate)
+
+# DONE: set implied_ids from base.default_user in post_migration
+
+NEW res.groups.privilege: base.res_groups_privilege_contact
+NEW res.groups.privilege: base.res_groups_privilege_export
+
+# NOTHING TO DO
+
+DEL res.partner.title: base.res_partner_title_doctor (noupdate)
+DEL res.partner.title: base.res_partner_title_madam (noupdate)
+DEL res.partner.title: base.res_partner_title_miss (noupdate)
+DEL res.partner.title: base.res_partner_title_mister (noupdate)
+DEL res.partner.title: base.res_partner_title_prof (noupdate)
+
+# NOTHING TO DO: will be cleaned by database_cleanup
+
+DEL res.users: base.default_user (noupdate)
+
+# DONE: see above for base.default_user_group
diff --git a/openupgrade_scripts/scripts/base/tests/data_base_migration.py b/openupgrade_scripts/scripts/base/tests/data_base_migration.py
new file mode 100644
index 00000000000..472065b3655
--- /dev/null
+++ b/openupgrade_scripts/scripts/base/tests/data_base_migration.py
@@ -0,0 +1,44 @@
+env = locals().get("env")
+# server action with multiple children
+parent_action1 = env["ir.actions.server"].create(
+ {
+ "name": "test server action 1",
+ "state": "multi",
+ "model_id": env.ref("base.model_ir_module_module").id,
+ "child_ids": [
+ (
+ 0,
+ 0,
+ {
+ "name": "child action 1",
+ "model_id": env.ref("base.model_ir_module_module").id,
+ },
+ ),
+ (
+ 0,
+ 0,
+ {
+ "name": "child action 2",
+ "model_id": env.ref("base.model_ir_module_module").id,
+ },
+ ),
+ ],
+ }
+)
+parent_action1.copy(
+ {
+ "name": "test server action 2",
+ "child_ids": [
+ (6, 0, parent_action1.child_ids.ids),
+ (
+ 0,
+ 0,
+ {
+ "name": "child action 3",
+ "model_id": env.ref("base.model_ir_module_module").id,
+ },
+ ),
+ ],
+ }
+)
+env.cr.commit()
diff --git a/openupgrade_scripts/scripts/base/tests/test_base_migration.py b/openupgrade_scripts/scripts/base/tests/test_base_migration.py
new file mode 100644
index 00000000000..525218394f5
--- /dev/null
+++ b/openupgrade_scripts/scripts/base/tests/test_base_migration.py
@@ -0,0 +1,26 @@
+from odoo.tests import TransactionCase
+
+from odoo.addons.openupgrade_framework import openupgrade_test
+
+
+@openupgrade_test
+class TestBaseMigration(TransactionCase):
+ def test_server_action_child_ids(self):
+ """
+ Test that server action children are migrated correctly
+ """
+ action1 = self.env["ir.actions.server"].search(
+ [("name", "=", "test server action 1")]
+ )
+ self.assertTrue(action1)
+ self.assertItemsEqual(
+ action1.child_ids.mapped("name"), ("child action 1", "child action 2")
+ )
+ action2 = self.env["ir.actions.server"].search(
+ [("name", "=", "test server action 2")]
+ )
+ self.assertTrue(action2)
+ self.assertItemsEqual(
+ action2.child_ids.mapped("name"),
+ ("child action 1", "child action 2", "child action 3"),
+ )
diff --git a/openupgrade_scripts/scripts/base_setup/19.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/base_setup/19.0.1.0/upgrade_analysis_work.txt
new file mode 100644
index 00000000000..c2b6706b5ae
--- /dev/null
+++ b/openupgrade_scripts/scripts/base_setup/19.0.1.0/upgrade_analysis_work.txt
@@ -0,0 +1,6 @@
+---Models in module 'base_setup'---
+---Fields in module 'base_setup'---
+---XML records in module 'base_setup'---
+DEL ir.config_parameter: base_setup.setup_default_user_rights (noupdate)
+
+# NOTHING TO DO: config parameter doesn't do anything
diff --git a/openupgrade_scripts/scripts/bus/19.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/bus/19.0.1.0/upgrade_analysis_work.txt
new file mode 100644
index 00000000000..b7c4485dc19
--- /dev/null
+++ b/openupgrade_scripts/scripts/bus/19.0.1.0/upgrade_analysis_work.txt
@@ -0,0 +1,20 @@
+---Models in module 'bus'---
+obsolete model bus.presence
+---Fields in module 'bus'---
+bus / bus.presence / last_poll (datetime) : DEL
+bus / bus.presence / last_presence (datetime) : DEL
+bus / bus.presence / status (selection) : DEL selection_keys: ['away', 'offline', 'online']
+bus / bus.presence / user_id (many2one) : DEL relation: res.users
+
+# NOTHING TO DO: obsolete model
+
+bus / res.partner / im_status (char) : module is now 'mail' ('bus')
+bus / res.users / im_status (char) : module is now 'mail' ('bus')
+
+# NOTHING TO DO: transient fields
+
+---XML records in module 'bus'---
+DEL ir.model.access: bus.access_bus_presence
+DEL ir.model.access: bus.access_bus_presence_portal
+
+# NOTHING TO DO
diff --git a/openupgrade_scripts/scripts/html_editor/19.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/html_editor/19.0.1.0/upgrade_analysis_work.txt
new file mode 100644
index 00000000000..b5ae3447fa2
--- /dev/null
+++ b/openupgrade_scripts/scripts/html_editor/19.0.1.0/upgrade_analysis_work.txt
@@ -0,0 +1,36 @@
+---Models in module 'html_editor'---
+new model html_editor.converter.test (renamed from web_editor.converter.test in module web_editor)
+new model html_editor.converter.test.sub (renamed from web_editor.converter.test.sub in module web_editor)
+
+# NOTHING TO DO: test model
+
+model html.field.history.mixin (moved from web_editor) [abstract]
+
+# NOTHING TO DO: model entries will be taken care of by module merge
+
+---Fields in module 'html_editor'---
+html_editor / web_editor.converter.test / _order : previously in module web_editor
+html_editor / web_editor.converter.test / binary (binary) : previously in module web_editor
+html_editor / web_editor.converter.test / char (char) : previously in module web_editor
+html_editor / web_editor.converter.test / date (date) : previously in module web_editor
+html_editor / web_editor.converter.test / datetime (datetime) : previously in module web_editor
+html_editor / web_editor.converter.test / display_name (char) : previously in module web_editor
+html_editor / web_editor.converter.test / float (float) : previously in module web_editor
+html_editor / web_editor.converter.test / html (html) : previously in module web_editor
+html_editor / web_editor.converter.test / integer (integer) : previously in module web_editor
+html_editor / web_editor.converter.test / many2one (many2one) : previously in module web_editor
+html_editor / web_editor.converter.test / numeric (float) : previously in module web_editor
+html_editor / web_editor.converter.test / selection_str (selection) : previously in module web_editor
+html_editor / web_editor.converter.test / text (text) : previously in module web_editor
+html_editor / web_editor.converter.test.sub / _order : previously in module web_editor
+html_editor / web_editor.converter.test.sub / display_name (char) : previously in module web_editor
+html_editor / web_editor.converter.test.sub / name (char) : previously in module web_editor
+web_editor / web_editor.converter.test / many2one (many2one) : relation is now 'html_editor.converter.test.sub' ('web_editor.converter.test.sub') [nothing to do]
+
+# NOTHING TO DO: test model
+
+---XML records in module 'html_editor'---
+NEW ir.model.access: html_editor.access_html_editor_converter_test
+NEW ir.model.access: html_editor.access_html_editor_converter_test_sub
+
+# NOTHING TO DO
diff --git a/openupgrade_scripts/scripts/mail/19.0.1.19/post-migration.py b/openupgrade_scripts/scripts/mail/19.0.1.19/post-migration.py
new file mode 100644
index 00000000000..bd6bba31bdb
--- /dev/null
+++ b/openupgrade_scripts/scripts/mail/19.0.1.19/post-migration.py
@@ -0,0 +1,32 @@
+# Copyright 2025 Hunki Enterprises BV
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+from openupgradelib import openupgrade
+
+
+def _mail_message_link_preview(env):
+ """
+ in v18, mail.link.preview linked directly to mail.message
+ in v19, it's mail.link.preview <- mail.message.link.preview -> mail.message
+ """
+ env.cr.execute(
+ """
+ INSERT INTO
+ mail_message_link_preview
+ (link_preview_id, message_id, is_hidden)
+ SELECT id, message_id, is_hidden FROM mail_link_preview
+ """
+ )
+
+
+@openupgrade.migrate()
+def migrate(env, version):
+ openupgrade.load_data(env, "mail", "19.0.1.19/noupdate_changes.xml")
+ _mail_message_link_preview(env)
+ openupgrade.delete_records_safely_by_xml_id(
+ env,
+ [
+ "mail.ir_cron_discuss_users_settings_unmute",
+ "mail.module_category_canned_response",
+ ],
+ )
diff --git a/openupgrade_scripts/scripts/mail/19.0.1.19/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/mail/19.0.1.19/upgrade_analysis_work.txt
new file mode 100644
index 00000000000..33bae9ae51e
--- /dev/null
+++ b/openupgrade_scripts/scripts/mail/19.0.1.19/upgrade_analysis_work.txt
@@ -0,0 +1,299 @@
+---Models in module 'mail'---
+obsolete model mail.resend.message [transient]
+obsolete model mail.resend.partner [transient]
+obsolete model mail.wizard.invite (renamed to mail.followers.edit) [transient]
+
+# NOTHING TO DO
+
+new model discuss.call.history
+
+# NOTHING TO DO: new model
+
+new model mail.activity.schedule.line [transient]
+new model mail.followers.edit (renamed from mail.wizard.invite) [transient]
+
+# NOTHING TO DO: wizards
+
+new model mail.message.link.preview
+
+# DONE: create from mail.link.preview records in post-migration
+
+new model mail.presence
+new model res.role
+---Fields in module 'mail'---
+mail / bus.presence / guest_id (many2one) : DEL relation: mail.guest
+
+# NOTHING TO DO
+
+mail / discuss.call.history / channel_id (many2one) : NEW relation: discuss.channel, required
+mail / discuss.call.history / end_dt (datetime) : NEW
+mail / discuss.call.history / start_call_message_id (many2one): NEW relation: mail.message
+mail / discuss.call.history / start_dt (datetime) : NEW required
+
+# NOTHING TO DO: new model
+
+mail / discuss.channel / allow_public_upload (boolean) : DEL
+
+# NOTHING TO DO: removed feature
+
+mail / discuss.channel / call_history_ids (one2many) : NEW relation: discuss.call.history
+
+# NOTHING TO DO: new model
+
+mail / discuss.channel.member / fold_state (selection) : DEL selection_keys: ['closed', 'folded', 'open']
+
+# NOTHING TO DO: removed feature
+
+mail / discuss.channel.rtc.session / partner_id (many2one) : is now stored
+
+# NOTHING TO DO: computed by orm, not relevant anyways because transient
+
+mail / fetchmail.server / error_date (datetime) : NEW
+mail / fetchmail.server / error_message (text) : NEW
+
+# NOTHING TO DO: new feature
+
+mail / ir.actions.server / activity_ids (one2many) : NEW relation: mail.activity
+mail / ir.actions.server / activity_summary (char) : now related
+mail / ir.actions.server / activity_type_id (many2one) : now related
+
+# NOTHING TO DO: inherits from mail.activity.mixin now, new feature
+
+mail / ir.actions.server / followers_partner_field_name (char): NEW hasdefault: compute
+mail / ir.actions.server / followers_type (selection) : NEW selection_keys: ['generic', 'specific'], hasdefault: compute
+
+# NOTHING TO DO: new feature
+
+mail / ir.actions.server / message_follower_ids (one2many): NEW relation: mail.followers
+mail / ir.actions.server / message_ids (one2many) : NEW relation: mail.message
+
+# NOTHING TO DO: inherits from mail.thread now, new feature
+
+mail / ir.actions.server / state (False) : selection_keys added: [object_copy] (most likely nothing to do)
+
+# NOTHING TO DO
+
+mail / ir.attachment / thumbnail (binary) : NEW attachment: True
+
+# NOTHING TO DO: functionality only used for pdfs and not mandatory, we skip generating them for performance reasons
+
+mail / ir.cron / activity_ids (one2many) : NEW relation: mail.activity
+mail / ir.cron / activity_user_id (many2one) : not related anymore
+mail / ir.cron / activity_user_id (many2one) : now a function
+mail / ir.cron / message_follower_ids (one2many): NEW relation: mail.followers
+mail / ir.cron / message_ids (one2many) : NEW relation: mail.message
+
+# NOTHING TO DO: inherited from ir.actions.server, new mixins
+
+mail / ir.mail_server / owner_limit_count (integer) : NEW
+mail / ir.mail_server / owner_limit_time (datetime) : NEW
+mail / ir.mail_server / owner_user_id (many2one) : NEW relation: res.users
+mail / mail.activity / feedback (text) : NEW
+
+# NOTHING TO DO: new feature
+
+mail / mail.activity / request_partner_id (many2one) : module is now 'website_slides' ('mail')
+mail / mail.activity.plan.template / _order : _order is now 'sequence, id' ('sequence,id')
+
+# NOTHING TO DO
+
+mail / mail.activity.plan.template / next_activity_ids (many2many) : NEW relation: mail.activity.type, hasdefault: compute
+
+# NOTHING TO DO: new feature
+
+mail / mail.activity.type / keep_done (boolean) : DEL
+mail / mail.canned.response / description (char) : DEL
+mail / mail.guest / email (char) : NEW
+mail / mail.guest / presence_ids (one2many) : NEW relation: mail.presence
+
+# NOTHING TO DO
+
+mail / mail.link.preview / is_hidden (boolean) : DEL
+mail / mail.link.preview / message_id (many2one) : DEL relation: mail.message
+mail / mail.link.preview / message_link_preview_ids (one2many): NEW relation: mail.message.link.preview
+
+# DONE: create message.link.preview records in post-migration
+
+mail / mail.mail / failure_type (selection) : selection_keys added: [mail_spam] (most likely nothing to do)
+
+# NOTHING TO DO
+
+mail / mail.message / call_history_ids (one2many) : NEW relation: discuss.call.history
+mail / mail.message / incoming_email_cc (char) : NEW
+mail / mail.message / incoming_email_to (text) : NEW
+
+# NOTHING TO DO: new feature
+
+mail / mail.message / link_preview_ids (one2many) : DEL relation: mail.link.preview
+mail / mail.message / message_link_preview_ids (one2many): NEW relation: mail.message.link.preview
+
+# DONE: see above mail.message.link.preview
+
+mail / mail.message / message_type (selection) : selection_keys added: [out_of_office] (most likely nothing to do)
+
+# NOTHING TO DO
+
+mail / mail.message / outgoing_email_to (char) : NEW
+
+# NOTHING TO DO: new feature
+
+mail / mail.message / record_name (char) : not stored anymore
+mail / mail.message / record_name (char) : now a function
+
+# NOTHING TO DO
+
+mail / mail.message.link.preview / is_hidden (boolean) : NEW
+mail / mail.message.link.preview / link_preview_id (many2one) : NEW relation: mail.link.preview, required
+mail / mail.message.link.preview / message_id (many2one) : NEW relation: mail.message, required
+mail / mail.message.link.preview / sequence (integer) : NEW
+
+# DONE: see above mail.message.link.preview
+
+mail / mail.notification / failure_type (selection) : selection_keys added: [mail_bl, mail_dup, mail_optout, mail_spam] (most likely nothing to do)
+
+# NOTHING TO DO
+
+mail / mail.notification / mail_email_address (char) : NEW
+
+# NOTHING TO DO: new feature
+
+mail / mail.presence / guest_id (many2one) : NEW relation: mail.guest
+mail / mail.presence / last_poll (datetime) : NEW hasdefault: default
+mail / mail.presence / last_presence (datetime) : NEW hasdefault: default
+mail / mail.presence / status (selection) : NEW selection_keys: ['away', 'offline', 'online'], hasdefault: default
+mail / mail.presence / user_id (many2one) : NEW relation: res.users
+mail / mail.scheduled.message / composition_comment_option (selection): NEW selection_keys: ['forward', 'reply_all']
+mail / mail.scheduled.message / send_context (json) : NEW
+mail / mail.template / _order : _order is now 'user_id, name, id' ('user_id,name,id')
+
+# NOTHING TO DO
+
+mail / res.company / alias_domain_name (char) : DEL
+
+# NOTHING TO DO: was related to alias_id.name
+
+mail / res.partner / channel_member_ids (one2many) : NEW relation: discuss.channel.member
+mail / res.partner / im_status (char) : previously in module bus
+mail / res.partner / rtc_session_ids (one2many) : NEW relation: discuss.channel.rtc.session
+mail / res.partner / starred_message_ids (many2many): DEL relation: mail.message
+
+# NOTHING TO DO
+
+mail / res.role / name (char) : NEW required
+mail / res.role / user_ids (many2many) : NEW relation: res.users
+
+# NOTHING TO DO: new feature
+
+mail / res.users / im_status (char) : previously in module bus
+mail / res.users / manual_im_status (selection) : NEW selection_keys: ['away', 'busy', 'offline']
+mail / res.users / out_of_office_from (datetime) : NEW
+mail / res.users / out_of_office_message (html) : NEW
+mail / res.users / out_of_office_to (datetime) : NEW
+mail / res.users / presence_ids (one2many) : NEW relation: mail.presence
+mail / res.users / role_ids (many2many) : NEW relation: res.role
+mail / res.users.settings / mute_until_dt (datetime) : DEL
+
+# NOTHING TO DO
+
+---XML records in module 'mail'---
+NEW ir.actions.act_window: mail.action_res_users_my_fullpage
+NEW ir.actions.act_window: mail.discuss_call_history_action
+NEW ir.actions.act_window: mail.discuss_channel_action
+NEW ir.actions.act_window: mail.res_role_action
+DEL ir.actions.act_window: mail.mail_resend_message_action
+DEL ir.actions.act_window: mail.mail_resend_partner_action
+NEW ir.actions.act_window.view: mail.action_res_users_my_fullpage_view
+NEW ir.actions.act_window.view: mail.mail_activity_action_my_view_calendar
+
+# NOTHING TO DO
+
+DEL ir.cron: mail.ir_cron_discuss_users_settings_unmute (noupdate)
+
+# DONE: deleted in post-migration
+
+NEW ir.model.access: mail.access_discuss_call_history_portal
+NEW ir.model.access: mail.access_discuss_call_history_public
+NEW ir.model.access: mail.access_discuss_call_history_user
+NEW ir.model.access: mail.access_mail_activity_schedule_line_user
+NEW ir.model.access: mail.access_mail_followers_edit
+NEW ir.model.access: mail.access_mail_message_link_preview_erp_manager
+NEW ir.model.access: mail.access_mail_presence
+NEW ir.model.access: mail.access_res_role_admin
+NEW ir.model.access: mail.access_res_role_user
+DEL ir.model.access: mail.access_mail_resend_message
+DEL ir.model.access: mail.access_mail_resend_partner
+DEL ir.model.access: mail.access_mail_wizard_invite
+NEW ir.model.constraint: mail.constraint_discuss_call_history_channel_id_end_dt_idx
+NEW ir.model.constraint: mail.constraint_discuss_call_history_channel_id_not_null_constraint
+NEW ir.model.constraint: mail.constraint_discuss_call_history_message_id_unique_constraint
+NEW ir.model.constraint: mail.constraint_discuss_call_history_start_dt_is_not_null_constraint
+NEW ir.model.constraint: mail.constraint_discuss_channel_member_guest_unique
+NEW ir.model.constraint: mail.constraint_discuss_channel_member_partner_unique
+NEW ir.model.constraint: mail.constraint_discuss_channel_member_seen_message_id_idx
+NEW ir.model.constraint: mail.constraint_ir_mail_server_unique_owner_user_id
+NEW ir.model.constraint: mail.constraint_mail_activity_check_res_id_is_set_if_model
+NEW ir.model.constraint: mail.constraint_mail_activity_check_user_id_is_set_if_model
+NEW ir.model.constraint: mail.constraint_mail_alias_name_domain_unique
+NEW ir.model.constraint: mail.constraint_mail_link_preview_unique_source_url
+NEW ir.model.constraint: mail.constraint_mail_message_link_preview_unique_message_link_preview
+NEW ir.model.constraint: mail.constraint_mail_message_model_res_id_id_idx
+NEW ir.model.constraint: mail.constraint_mail_message_model_res_id_idx
+NEW ir.model.constraint: mail.constraint_mail_message_reaction_guest_unique
+NEW ir.model.constraint: mail.constraint_mail_message_reaction_partner_unique
+NEW ir.model.constraint: mail.constraint_mail_message_translation_unique
+NEW ir.model.constraint: mail.constraint_mail_notification_author_id_notification_status_failure
+NEW ir.model.constraint: mail.constraint_mail_notification_notification_partner_or_email_required
+ir.model.constraint: mail.constraint_mail_notification_notification_partner_required (changed definition: is now 'CHECK(notification_type != 'inbox' OR res_partner_id IS NOT NULL)' ('check(notification_type not in('email','inbox') or res_partner_id is not null)'))
+NEW ir.model.constraint: mail.constraint_mail_notification_res_partner_id_is_read_notification__e5e0b7fb
+NEW ir.model.constraint: mail.constraint_mail_notification_unique_mail_message_id_res_partner_id_
+NEW ir.model.constraint: mail.constraint_mail_presence_guest_unique
+NEW ir.model.constraint: mail.constraint_mail_presence_partner_or_guest_exists
+NEW ir.model.constraint: mail.constraint_mail_presence_user_unique
+NEW ir.model.constraint: mail.constraint_res_role_unique_name
+NEW ir.model.constraint: mail.constraint_res_users_settings_volumes_guest_unique
+NEW ir.model.constraint: mail.constraint_res_users_settings_volumes_partner_unique
+DEL ir.model.constraint: mail.constraint_bus_presence_partner_or_guest_exists
+DEL ir.model.constraint: mail.constraint_discuss_channel_sub_channel_no_group_public_id
+DEL ir.model.constraint: mail.constraint_mail_activity_check_res_id_is_set
+
+# NOTHING TO DO
+
+DEL ir.module.category: mail.module_category_canned_response (noupdate)
+
+# DONE: deleted in post-migration
+
+NEW ir.rule: mail.ir_rule_discuss_call_history_read_all (noupdate)
+NEW ir.ui.menu: mail.discuss_call_history_menu
+NEW ir.ui.menu: mail.discuss_technical
+NEW ir.ui.menu: mail.main_menu_discuss
+NEW ir.ui.menu: mail.menu_channel
+NEW ir.ui.menu: mail.menu_roles
+NEW ir.ui.view: mail.account_security_alert
+NEW ir.ui.view: mail.discuss_call_history_view_form
+NEW ir.ui.view: mail.discuss_call_history_view_tree
+NEW ir.ui.view: mail.discuss_channel_invitation_template
+NEW ir.ui.view: mail.discuss_channel_view_list
+NEW ir.ui.view: mail.ir_cron_view_form
+NEW ir.ui.view: mail.ir_filters_view_form
+NEW ir.ui.view: mail.ir_filters_view_tree
+NEW ir.ui.view: mail.ir_mail_server_view_form
+NEW ir.ui.view: mail.mail_canned_response_view_kanban
+NEW ir.ui.view: mail.mail_followers_edit_form
+NEW ir.ui.view: mail.mail_followers_list_edit_form
+NEW ir.ui.view: mail.mail_notification_multi_invite
+NEW ir.ui.view: mail.message_link_preview_list
+NEW ir.ui.view: mail.message_notification_out_of_office
+NEW ir.ui.view: mail.res_role_view_form
+NEW ir.ui.view: mail.res_role_view_search
+NEW ir.ui.view: mail.res_role_view_tree
+NEW ir.ui.view: mail.view_ice_server_kanban
+NEW ir.ui.view: mail.view_ice_server_search
+DEL ir.ui.view: mail.account_security_setting_update
+DEL ir.ui.view: mail.mail_activity_type_form_inherit
+DEL ir.ui.view: mail.mail_resend_message_view_form
+DEL ir.ui.view: mail.mail_resend_partner_view_form
+DEL ir.ui.view: mail.mail_template_view_form_confirm_delete
+DEL ir.ui.view: mail.mail_wizard_invite_form
+NEW res.groups.privilege: mail.res_groups_privilege_canned_response (noupdate)
+
+# NOTHING TO DO
diff --git a/openupgrade_scripts/scripts/product/19.0.1.2/post-migration.py b/openupgrade_scripts/scripts/product/19.0.1.2/post-migration.py
new file mode 100644
index 00000000000..c6026b4ca68
--- /dev/null
+++ b/openupgrade_scripts/scripts/product/19.0.1.2/post-migration.py
@@ -0,0 +1,42 @@
+# Copyright 2025 Hunki Enterprises BV
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+from openupgradelib import openupgrade
+
+
+def _product_packaging(env):
+ """
+ Create UOMs corresponding to the previous packaging's qty field,
+ reuse existing UOMs
+ """
+ env.cr.execute("SELECT id, name, qty FROM product_uom")
+ for _id, name, qty in env.cr.fetchall():
+ product_uom = env["product.uom"].browse(_id)
+ uom = product_uom.product_id.uom_id
+
+ all_uoms = uom
+ while all_uoms.related_uom_ids - all_uoms:
+ all_uoms += all_uoms.related_uom_ids
+ while all_uoms.relative_uom_id - all_uoms:
+ all_uoms += all_uoms.relative_uom_id
+ existing_uom = env["uom.uom"]
+ for possible_uom in all_uoms:
+ if uom._compute_quantity(qty, possible_uom) == 1:
+ existing_uom = possible_uom
+ break
+
+ if not existing_uom:
+ existing_uom = env["uom.uom"].create(
+ {
+ "name": name,
+ "relative_uom_id": uom.id,
+ "relative_factor": qty,
+ }
+ )
+
+ product_uom.uom_id = existing_uom
+
+
+@openupgrade.migrate()
+def migrate(env, version):
+ _product_packaging(env)
diff --git a/openupgrade_scripts/scripts/product/19.0.1.2/pre-migration.py b/openupgrade_scripts/scripts/product/19.0.1.2/pre-migration.py
new file mode 100644
index 00000000000..91fe80dec8c
--- /dev/null
+++ b/openupgrade_scripts/scripts/product/19.0.1.2/pre-migration.py
@@ -0,0 +1,121 @@
+# Copyright 2025 Hunki Enterprises BV
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+from openupgradelib import openupgrade
+
+
+def _product_product_is_favorite(env):
+ """
+ Precreate product.product#is_favorite and set with sql
+ """
+ openupgrade.add_columns(
+ env, [("product.product", "is_favorite", "boolean", False, "product_product")]
+ )
+ env.cr.execute(
+ """
+ UPDATE product_product
+ SET is_favorite=product_template.is_favorite
+ FROM product_template
+ WHERE
+ product_product.product_tmpl_id=product_template.id
+ AND product_template.is_favorite
+ """
+ )
+
+
+def _product_supplierinfo_product_tmpl_id(env):
+ """
+ Precreate product.supplierinfo#{product_tmpl_id,product_uom_id} and set with sql
+ """
+ openupgrade.add_columns(
+ env,
+ [
+ (
+ "product.supplierinfo",
+ "product_tmpl_id",
+ "many2one",
+ None,
+ "product_supplierinfo",
+ ),
+ (
+ "product.supplierinfo",
+ "product_uom_id",
+ "many2one",
+ None,
+ "product_supplierinfo",
+ ),
+ ],
+ )
+ env.cr.execute(
+ """
+ UPDATE product_supplierinfo
+ SET product_tmpl_id=product_product.product_tmpl_id
+ FROM product_product
+ WHERE
+ product_supplierinfo.product_id=product_product.id
+ AND product_supplierinfo.product_tmpl_id IS NULL
+ """
+ )
+ env.cr.execute(
+ """
+ UPDATE product_supplierinfo
+ SET product_uom_id=product_template.uom_id
+ FROM product_template
+ WHERE
+ product_supplierinfo.product_tmpl_id=product_template.id
+ AND product_supplierinfo.product_id IS NULL
+ """
+ )
+ env.cr.execute(
+ """
+ UPDATE product_supplierinfo
+ SET product_uom_id=product_template.uom_id
+ FROM product_product, product_template
+ WHERE
+ product_supplierinfo.product_id=product_product.id
+ AND product_product.product_tmpl_id=product_template.id
+ AND product_supplierinfo.product_uom_id IS NULL
+ """
+ )
+
+
+def _prepare_product_packaging_migration(env):
+ """
+ product.packaging is replaced by UOMs being pointed at by records of product.uom
+ Rename product_packaging here to product_uom, and amend with data in post-migration
+ Set uom_id to dummy UOM to have the ORM set up the not null constraint correctly
+ """
+ openupgrade.rename_tables(env.cr, [("product_packaging", "product_uom")])
+ openupgrade.add_columns(
+ env,
+ [
+ (
+ "product.uom",
+ "uom_id",
+ "many2one",
+ env.ref("uom.product_uom_unit").id,
+ "product_uom",
+ ),
+ ],
+ )
+
+
+@openupgrade.migrate()
+def migrate(env, version):
+ openupgrade.delete_records_safely_by_xml_id(
+ env,
+ [
+ "product.constraint_product_packaging_positive_qty",
+ "product.product_packaging_comp_rule",
+ ],
+ )
+ openupgrade.rename_xmlids(
+ env.cr,
+ [
+ ("product.cat_expense", "product.product_category_expenses"),
+ ("product.product_category_all", "product.product_category_goods"),
+ ],
+ )
+ _product_product_is_favorite(env)
+ _product_supplierinfo_product_tmpl_id(env)
+ _prepare_product_packaging_migration(env)
diff --git a/openupgrade_scripts/scripts/product/19.0.1.2/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/product/19.0.1.2/upgrade_analysis_work.txt
new file mode 100644
index 00000000000..d65758c6587
--- /dev/null
+++ b/openupgrade_scripts/scripts/product/19.0.1.2/upgrade_analysis_work.txt
@@ -0,0 +1,127 @@
+---Models in module 'product'---
+obsolete model product.packaging (renamed to product.uom)
+new model product.uom (renamed from product.packaging)
+
+# DONE: packagings are folded into UOMs, with product.uom linking products to the UOM that used to be a packaging
+
+---Fields in module 'product'---
+product / product.attribute / display_type (selection) : selection_keys added: [image] (most likely nothing to do)
+
+# NOTHING TO DO
+
+product / product.packaging / _order : _order is now 'id' ('product_id, sequence, id')
+product / product.packaging / barcode (char) : now required
+product / product.packaging / name (char) : DEL required
+product / product.packaging / qty (float) : DEL
+product / product.packaging / sequence (integer) : DEL
+
+# DONE: table is renamed to product_uom in pre-migration and matching UOMs created in post-migration
+
+product / product.pricelist.item / company_id (many2one) : not related anymore
+product / product.pricelist.item / company_id (many2one) : now a function
+product / product.pricelist.item / currency_id (many2one) : not related anymore
+product / product.pricelist.item / currency_id (many2one) : now a function
+
+# NOTHING TO DO: related field was stored before
+
+product / product.product / _order : _order is now 'default_code, name, id' ('is_favorite desc, default_code, name, id')
+
+# NOTHING TO DO
+
+product / product.product / is_favorite (boolean) : is now stored
+
+# DONE: pre-created in pre-migration and filled from product_template
+
+product / product.product / is_in_selected_section_of_order (boolean): NEW
+
+# NOTHING TO DO: virtual field only used for searching
+
+product / product.product / packaging_ids (one2many) : DEL relation: product.packaging
+product / product.product / product_uom_ids (one2many) : NEW relation: product.uom
+
+# DONE: see above at product.packaging
+
+product / product.supplierinfo / product_tmpl_id (many2one) : now required
+product / product.supplierinfo / product_uom_id (many2one) : NEW relation: uom.uom, required, hasdefault: compute
+
+# DONE: filled from product_id
+
+product / product.tag / image (binary) : previously in module website_sale
+
+# NOTHING TO DO
+
+product / product.tag / visible_to_customers (boolean): NEW hasdefault: default
+
+# NOTHING TO DO
+
+product / product.template / pricelist_rule_ids (one2many) : NEW relation: product.pricelist.item
+
+# NOTHING TO DO
+
+product / product.template / uom_ids (many2many) : NEW relation: uom.uom
+product / product.template / uom_po_id (many2one) : DEL relation: uom.uom, required
+
+# NOTHING TO DO
+
+product / product.uom / uom_id (many2one) : NEW relation: uom.uom, required
+product / uom.uom / product_uom_ids (one2many) : NEW relation: product.uom
+
+# DONE: see above at product.packaging
+
+---XML records in module 'product'---
+DEL decimal.precision: product.decimal_product_uom [renamed to uom module] (noupdate)
+
+# DONE: in uom migration
+
+DEL ir.actions.act_window: product.action_packaging_view
+NEW ir.actions.server: product.action_product_print_labels
+NEW ir.actions.server: product.action_product_template_print_labels
+NEW ir.model.access: product.access_product_document_manager
+NEW ir.model.access: product.access_product_uom_manager
+NEW ir.model.access: product.access_product_uom_user
+NEW ir.model.access: product.access_uom_uom_product_manager
+DEL ir.model.access: product.access_product_packaging_manager
+DEL ir.model.access: product.access_product_packaging_user
+
+# NOTHING TO DO
+
+NEW ir.model.constraint: product.constraint_product_product_combination_unique
+NEW ir.model.constraint: product.constraint_product_product_is_favorite_index
+NEW ir.model.constraint: product.constraint_product_template_is_favorite_index
+NEW ir.model.constraint: product.constraint_product_uom_barcode_uniq
+DEL ir.model.constraint: product.constraint_product_packaging_barcode_uniq
+
+# NOTHING TO DO
+
+DEL ir.model.constraint: product.constraint_product_packaging_positive_qty
+DEL ir.rule: product.product_packaging_comp_rule (noupdate)
+
+# DONE: deleted in pre-migration
+
+NEW ir.ui.view: product.product_pricelist_item_product_product_form_view
+NEW ir.ui.view: product.product_pricelist_item_product_template_form_view
+NEW ir.ui.view: product.product_template_list_view_purchasable
+NEW ir.ui.view: product.product_template_list_view_sellable
+NEW ir.ui.view: product.product_uom_list_view
+NEW ir.ui.view: product.uom_uom_form_view_inherit
+DEL ir.ui.view: product.product_packaging_form_view
+DEL ir.ui.view: product.product_packaging_form_view2
+DEL ir.ui.view: product.product_packaging_search_view
+DEL ir.ui.view: product.product_packaging_tree_view
+DEL ir.ui.view: product.product_packaging_tree_view2
+
+# NOTHING TO DO
+
+NEW product.category: product.product_category_expenses (noupdate)
+NEW product.category: product.product_category_goods (noupdate)
+NEW product.category: product.product_category_services (noupdate)
+DEL product.category: product.cat_expense (noupdate)
+DEL product.category: product.product_category_1 (noupdate)
+DEL product.category: product.product_category_all (noupdate)
+
+# DONE: renamed in pre-migration
+
+DEL res.groups: product.group_stock_packaging
+NEW res.groups.privilege: product.res_groups_privilege_product
+
+# NOTHING TO DO
diff --git a/openupgrade_scripts/scripts/product/tests/data_product_migration.py b/openupgrade_scripts/scripts/product/tests/data_product_migration.py
new file mode 100644
index 00000000000..bb9afc0e2a8
--- /dev/null
+++ b/openupgrade_scripts/scripts/product/tests/data_product_migration.py
@@ -0,0 +1,32 @@
+env = locals().get("env")
+# packaging that should be assigned existing UOM
+product = env.ref("product.product_delivery_01")
+packaging = env["product.packaging"].create(
+ {
+ "name": "Sixpack",
+ "barcode": "42 42",
+ "product_id": product.id,
+ "qty": 6,
+ }
+)
+# packaging that should have a new UOM created
+product = env.ref("product.product_delivery_01")
+packaging = env["product.packaging"].create(
+ {
+ "name": "Thirteenpack",
+ "barcode": "42 43",
+ "product_id": product.id,
+ "qty": 13,
+ }
+)
+# packaging that should reuse UOM created for the one above
+product = env.ref("product.product_delivery_02")
+packaging = env["product.packaging"].create(
+ {
+ "name": "Thirteenpack",
+ "barcode": "42 44",
+ "product_id": product.id,
+ "qty": 13,
+ }
+)
+env.cr.commit()
diff --git a/openupgrade_scripts/scripts/product/tests/test_product_migration.py b/openupgrade_scripts/scripts/product/tests/test_product_migration.py
new file mode 100644
index 00000000000..a40753f3582
--- /dev/null
+++ b/openupgrade_scripts/scripts/product/tests/test_product_migration.py
@@ -0,0 +1,24 @@
+from odoo.tests import TransactionCase
+
+from odoo.addons.openupgrade_framework import openupgrade_test
+
+
+@openupgrade_test
+class TestProductMigration(TransactionCase):
+ def test_product_uom(self):
+ """
+ Test that packages have been correctly migrated to uoms
+ """
+ product = self.env.ref("product.product_delivery_01")
+ self.assertIn(
+ self.env.ref("uom.product_uom_pack_6"), product.product_uom_ids.uom_id
+ )
+ new_uom = product.product_uom_ids.uom_id - self.env.ref(
+ "uom.product_uom_pack_6"
+ )
+ self.assertEqual(new_uom.relative_uom_id, self.env.ref("uom.product_uom_unit"))
+ self.assertEqual(new_uom.relative_factor, 13)
+ self.assertEqual(
+ self.env.ref("product.product_delivery_02").product_uom_ids.uom_id,
+ new_uom,
+ )
diff --git a/openupgrade_scripts/scripts/uom/19.0.1.0/noupdate_changes_work.xml b/openupgrade_scripts/scripts/uom/19.0.1.0/noupdate_changes_work.xml
new file mode 100644
index 00000000000..ba0e7289c87
--- /dev/null
+++ b/openupgrade_scripts/scripts/uom/19.0.1.0/noupdate_changes_work.xml
@@ -0,0 +1,103 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 1000
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1000
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Ton
+
+
+
+
+
+
+
+
+
+
+
diff --git a/openupgrade_scripts/scripts/uom/19.0.1.0/post-migration.py b/openupgrade_scripts/scripts/uom/19.0.1.0/post-migration.py
new file mode 100644
index 00000000000..75ac9db015c
--- /dev/null
+++ b/openupgrade_scripts/scripts/uom/19.0.1.0/post-migration.py
@@ -0,0 +1,65 @@
+# Copyright 2025 Hunki Enterprises BV
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+from openupgradelib import openupgrade
+
+
+def _uom_relative_uom_id_relative_factor(env):
+ """
+ UOM categories have been obsoleted, UOMs are a tree now with the reference
+ unit as root and relative_factor giving the ratio to the UOM linked in
+ relative_uom_id
+ """
+
+ def has_xmlid(uom):
+ return env["ir.model.data"].search_count(
+ [
+ ("model", "=", "uom.uom"),
+ ("res_id", "=", uom.id),
+ ("module", "!=", "__export__"),
+ ]
+ )
+
+ env.cr.execute(
+ f"""
+ SELECT
+ array_agg(id),
+ array_agg({openupgrade.get_legacy_name("factor")}),
+ array_agg({openupgrade.get_legacy_name("uom_type")})
+ FROM
+ uom_uom
+ WHERE {openupgrade.get_legacy_name("category_id")} IS NOT NULL
+ GROUP BY {openupgrade.get_legacy_name("category_id")}
+ """
+ )
+ for ids, factors, uom_types in env.cr.fetchall():
+ uoms = env["uom.uom"].browse(ids)
+ uom2factor = dict(zip(uoms, factors, strict=False))
+ uom2type = dict(zip(uoms, uom_types, strict=False))
+
+ old_reference = uoms.filtered(
+ lambda x, uom2type=uom2type: uom2type[x] == "reference"
+ )
+
+ for uom in uoms - old_reference:
+ if has_xmlid(uom):
+ # uoms with xmlid will be updated by the migration of the module
+ # providing them
+ continue
+
+ relative_factor = (
+ uom2factor[uom] if uom2type[uom] == "bigger" else (1 / uom2factor[uom])
+ )
+
+ uom.write(
+ {
+ "relative_uom_id": old_reference,
+ "relative_factor": relative_factor,
+ }
+ )
+
+
+@openupgrade.migrate()
+def migrate(env, version):
+ openupgrade.load_data(env, "uom", "19.0.1.0/noupdate_changes_work.xml")
+ _uom_relative_uom_id_relative_factor(env)
diff --git a/openupgrade_scripts/scripts/uom/19.0.1.0/pre-migration.py b/openupgrade_scripts/scripts/uom/19.0.1.0/pre-migration.py
new file mode 100644
index 00000000000..635d213272e
--- /dev/null
+++ b/openupgrade_scripts/scripts/uom/19.0.1.0/pre-migration.py
@@ -0,0 +1,32 @@
+# Copyright 2025 Hunki Enterprises BV
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+from openupgradelib import openupgrade
+
+
+@openupgrade.migrate()
+def migrate(env, version):
+ openupgrade.copy_columns(
+ env.cr,
+ {
+ "uom_uom": [
+ ("category_id", None, None),
+ ("factor", None, None),
+ ("rounding", None, None),
+ ("uom_type", None, None),
+ ]
+ },
+ )
+ openupgrade.rename_xmlids(
+ env.cr,
+ [
+ ("product.decimal_product_uom", "uom.decimal_product_uom"),
+ ("uom.uom_square_foot", "uom.product_uom_square_foot"),
+ ("uom.uom_square_meter", "uom.product_uom_square_meter"),
+ ],
+ )
+ # this would be cleaned up after the migration, but we can't have it during
+ # migration
+ openupgrade.delete_sql_constraint_safely(
+ env, "uom", "uom_uom", "factor_reference_is_one"
+ )
diff --git a/openupgrade_scripts/scripts/uom/19.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/uom/19.0.1.0/upgrade_analysis_work.txt
new file mode 100644
index 00000000000..ea3c9aebe71
--- /dev/null
+++ b/openupgrade_scripts/scripts/uom/19.0.1.0/upgrade_analysis_work.txt
@@ -0,0 +1,70 @@
+---Models in module 'uom'---
+obsolete model uom.category
+---Fields in module 'uom'---
+uom / uom.category / name (char) : DEL required
+uom / uom.category / reference_uom_id (many2one) : DEL relation: uom.uom, stored: False
+uom / uom.category / uom_ids (one2many) : DEL relation: uom.uom
+
+# NOTHING TO DO
+
+uom / uom.uom / _order : _order is now 'sequence, relative_uom_id, id' ('factor DESC, id')
+
+# NOTHING TO DO
+
+uom / uom.uom / category_id (many2one) : DEL relation: uom.category, required
+
+# NOTHING TO DO
+
+uom / uom.uom / factor (float) : now a function
+uom / uom.uom / parent_path (char) : NEW
+uom / uom.uom / related_uom_ids (one2many) : NEW relation: uom.uom
+uom / uom.uom / relative_factor (float) : NEW required, hasdefault: default
+uom / uom.uom / relative_uom_id (many2one) : NEW relation: uom.uom
+
+# DONE: compute relative_factor, relative_uom_id for custom UOMs in post-migration
+
+uom / uom.uom / rounding (float) : not stored anymore
+
+# DONE: copied to legacy column in pre-migration
+
+uom / uom.uom / rounding (float) : now a function
+uom / uom.uom / sequence (integer) : NEW hasdefault: compute
+
+# NOTHING TO DO
+
+uom / uom.uom / uom_type (selection) : DEL required, selection_keys: ['bigger', 'reference', 'smaller']
+
+# DONE: copied to legacy column in pre-migration
+
+---XML records in module 'uom'---
+NEW decimal.precision: uom.decimal_product_uom [renamed from product module] (noupdate)
+
+# DONE: renamed in pre-migration
+
+DEL ir.actions.act_window: uom.product_uom_categ_form_action
+DEL ir.model.access: uom.access_uom_category_manager
+DEL ir.model.access: uom.access_uom_category_user
+ir.model.constraint: uom.constraint_uom_uom_factor_gt_zero (changed definition: is now 'CHECK (relative_factor!=0)' ('check(factor!=0)'))
+DEL ir.model.constraint: uom.constraint_uom_uom_factor_reference_is_one
+DEL ir.model.constraint: uom.constraint_uom_uom_rounding_gt_zero
+DEL ir.ui.view: uom.product_uom_categ_form_view
+DEL ir.ui.view: uom.product_uom_categ_tree_view
+DEL ir.ui.view: uom.uom_categ_view_search
+DEL uom.category: uom.product_uom_categ_energy (noupdate)
+DEL uom.category: uom.product_uom_categ_kgm (noupdate)
+DEL uom.category: uom.product_uom_categ_unit (noupdate)
+DEL uom.category: uom.product_uom_categ_vol (noupdate)
+DEL uom.category: uom.uom_categ_length (noupdate)
+DEL uom.category: uom.uom_categ_surface (noupdate)
+DEL uom.category: uom.uom_categ_wtime (noupdate)
+NEW uom.uom: uom.product_uom_milliliter (noupdate)
+NEW uom.uom: uom.product_uom_pack_6 (noupdate)
+
+# NOTHING TO DO
+
+NEW uom.uom: uom.product_uom_square_foot (noupdate)
+NEW uom.uom: uom.product_uom_square_meter (noupdate)
+DEL uom.uom: uom.uom_square_foot (noupdate)
+DEL uom.uom: uom.uom_square_meter (noupdate)
+
+# DONE: renamed in pre-migration
diff --git a/openupgrade_scripts/scripts/uom/tests/data_uom_migration.py b/openupgrade_scripts/scripts/uom/tests/data_uom_migration.py
new file mode 100644
index 00000000000..2136c11c219
--- /dev/null
+++ b/openupgrade_scripts/scripts/uom/tests/data_uom_migration.py
@@ -0,0 +1,51 @@
+env = locals().get("env")
+# decimeter
+env["uom.uom"].create(
+ {
+ "name": "dm",
+ "category_id": env.ref("uom.uom_categ_length").id,
+ "factor": 10,
+ "uom_type": "smaller",
+ }
+)
+# megameter
+env["uom.uom"].create(
+ {
+ "name": "Mm",
+ "category_id": env.ref("uom.uom_categ_length").id,
+ "factor": 1000000,
+ "uom_type": "bigger",
+ }
+)
+# entirely custom uom category
+uom_category = env["uom.category"].create(
+ {
+ "name": "Electric current",
+ }
+)
+env["uom.uom"].create(
+ {
+ "name": "A",
+ "category_id": uom_category.id,
+ "factor": 1,
+ "uom_type": "reference",
+ }
+)
+env["uom.uom"].create(
+ {
+ "name": "mA",
+ "category_id": uom_category.id,
+ "factor": 1000,
+ "uom_type": "smaller",
+ }
+)
+env["uom.uom"].create(
+ {
+ "name": "MA",
+ "category_id": uom_category.id,
+ "factor": 1000000,
+ "uom_type": "bigger",
+ }
+)
+
+env.cr.commit()
diff --git a/openupgrade_scripts/scripts/uom/tests/test_uom_migration.py b/openupgrade_scripts/scripts/uom/tests/test_uom_migration.py
new file mode 100644
index 00000000000..66faa649609
--- /dev/null
+++ b/openupgrade_scripts/scripts/uom/tests/test_uom_migration.py
@@ -0,0 +1,31 @@
+from odoo.tests import TransactionCase
+
+from odoo.addons.openupgrade_framework import openupgrade_test
+
+
+@openupgrade_test
+class TestUomMigration(TransactionCase):
+ def test_uoms(self):
+ """
+ Test that decimeters and megameters compute correctly
+ """
+ dm = self.env["uom.uom"].search([("name", "=", "dm")])
+ Mm = self.env["uom.uom"].search([("name", "=", "Mm")])
+ self.assertEqual(
+ dm._compute_quantity(1, Mm, round=False),
+ 0.0000001,
+ )
+ self.assertEqual(
+ Mm._compute_quantity(1, dm),
+ 10000000,
+ )
+ mA = self.env["uom.uom"].search([("name", "=", "mA")])
+ MA = self.env["uom.uom"].search([("name", "=", "MA")])
+ self.assertEqual(
+ mA._compute_quantity(1, MA, round=False),
+ 0.000000001,
+ )
+ self.assertEqual(
+ MA._compute_quantity(1, mA),
+ 1000000000,
+ )
diff --git a/openupgrade_scripts/scripts/web/19.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/web/19.0.1.0/upgrade_analysis_work.txt
new file mode 100644
index 00000000000..8e5e8f038be
--- /dev/null
+++ b/openupgrade_scripts/scripts/web/19.0.1.0/upgrade_analysis_work.txt
@@ -0,0 +1,26 @@
+---Models in module 'web'---
+new model res.users.settings.embedded.action
+---Fields in module 'web'---
+web / res.users.settings / embedded_actions_config_ids (one2many): NEW relation: res.users.settings.embedded.action
+web / res.users.settings.embedded.action / action_id (many2one) : NEW relation: ir.actions.act_window, required
+web / res.users.settings.embedded.action / embedded_actions_order (char) : NEW
+web / res.users.settings.embedded.action / embedded_actions_visibility (char): NEW
+web / res.users.settings.embedded.action / embedded_visibility (boolean) : NEW
+web / res.users.settings.embedded.action / res_id (integer) : NEW
+web / res.users.settings.embedded.action / res_model (char) : NEW required
+web / res.users.settings.embedded.action / user_setting_id (many2one) : NEW relation: res.users.settings, required
+
+# NOTHING TO DO: new model
+
+---XML records in module 'web'---
+NEW ir.model.access: web.access_res_users_settings_embedded_action_user
+NEW ir.model.constraint: web.constraint_res_users_settings_embedded_action_res_user_settings_e_91890fa3
+NEW ir.rule: web.res_users_settings_embedded_action_rule_admin (noupdate)
+NEW ir.rule: web.res_users_settings_embedded_action_rule_user (noupdate)
+NEW ir.ui.view: web.config_speedscope_index
+NEW ir.ui.view: web.login_oauth
+NEW ir.ui.view: web.view_memory
+NEW ir.ui.view: web.view_view_form_inherit_view
+DEL ir.ui.view: web.qunit_mobile_suite
+
+# NOTHING TO DO
diff --git a/openupgrade_scripts/scripts/web_tour/19.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/web_tour/19.0.1.0/upgrade_analysis_work.txt
new file mode 100644
index 00000000000..bcb562c2c3a
--- /dev/null
+++ b/openupgrade_scripts/scripts/web_tour/19.0.1.0/upgrade_analysis_work.txt
@@ -0,0 +1,10 @@
+---Models in module 'web_tour'---
+---Fields in module 'web_tour'---
+web_tour / web_tour.tour.step / tooltip_position (selection) : NEW selection_keys: ['bottom', 'left', 'right', 'top'], hasdefault: default
+
+# NOTHING TO DO: default set by ORM
+
+---XML records in module 'web_tour'---
+DEL ir.ui.view: web_tour.res_users_view_form
+
+# NOTHING TO DO