OCA / OpenUpgrade

Open source upgrade path for Odoo/OpenERP
https://oca.github.io/OpenUpgrade/
GNU Affero General Public License v3.0
739 stars 695 forks source link

[16.0][account] Missing field and field information for account #4281

Closed mholthausen closed 8 months ago

mholthausen commented 9 months ago

Module

account (account.move and account.payment)

Describe the bug

I have installed a fresh odoo15 and installed the app "account". After the upgrade to odoo16 I get the following error when I try to open the view of the Invoicong app in odoo:

Error: Missing field string information for the field 'authorized_transaction_ids' from the 'account.move' model
    at http://localhost:8070/web/assets/135-057a973/web.assets_backend.min.js:6753:258
    at traverse (http://localhost:8070/web/assets/135-057a973/web.assets_backend.min.js:6748:200)
    at http://localhost:8070/web/assets/135-057a973/web.assets_backend.min.js:6748:242
    at _.each._.forEach (http://localhost:8070/web/assets/134-6323ddf/web.assets_common.min.js:63:404)
    at traverse (http://localhost:8070/web/assets/135-057a973/web.assets_backend.min.js:6748:211)
    at http://localhost:8070/web/assets/135-057a973/web.assets_backend.min.js:6748:242
    at _.each._.forEach (http://localhost:8070/web/assets/134-6323ddf/web.assets_common.min.js:63:404)
    at traverse (http://localhost:8070/web/assets/135-057a973/web.assets_backend.min.js:6748:211)
    at processArch (http://localhost:8070/web/assets/135-057a973/web.assets_backend.min.js:6752:180)
    at generateLegacyLoadViewsResult (http://localhost:8070/web/assets/135-057a973/web.assets_backend.min.js:6750:106)

I tried to run an upgrade of the app "account" from the App view. But during this process, I get the following error (it says: the field "amount_available_for_refund" does not exist in model "account.payment"):

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 1591, in _serve_db
    return service_model.retrying(self._serve_ir_http, self.env)
  File "/usr/lib/python3/dist-packages/odoo/service/model.py", line 133, in retrying
    result = func()
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 1618, in _serve_ir_http
    response = self.dispatcher.dispatch(rule.endpoint, args)
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 1822, in dispatch
    result = self.request.registry['ir.http']._dispatch(endpoint)
  File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_http.py", line 154, in _dispatch
    result = endpoint(**request.params)
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 697, in route_wrapper
    result = endpoint(self, *args, **params_ok)
  File "/usr/lib/python3/dist-packages/odoo/addons/web/controllers/dataset.py", line 46, in call_button
    action = self._call_kw(model, method, args, kwargs)
  File "/usr/lib/python3/dist-packages/odoo/addons/web/controllers/dataset.py", line 33, in _call_kw
    return call_kw(request.env[model], method, args, kwargs)
  File "/usr/lib/python3/dist-packages/odoo/api.py", line 466, in call_kw
    result = _call_kw_multi(method, model, args, kwargs)
  File "/usr/lib/python3/dist-packages/odoo/api.py", line 453, in _call_kw_multi
    result = method(recs, *args, **kwargs)
  File "<decorator-gen-83>", line 2, in button_immediate_upgrade
  File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_module.py", line 74, in check_and_log
    return method(self, *args, **kwargs)
  File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_module.py", line 665, in button_immediate_upgrade
    return self._button_immediate_function(type(self).button_upgrade)
  File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_module.py", line 598, in _button_immediate_function
    registry = modules.registry.Registry.new(self._cr.dbname, update_module=True)
  File "<decorator-gen-16>", line 2, in new
  File "/usr/lib/python3/dist-packages/odoo/tools/func.py", line 87, in locked
    return func(inst, *args, **kwargs)
  File "/usr/lib/python3/dist-packages/odoo/modules/registry.py", line 90, in new
    odoo.modules.load_modules(registry, force_demo, status, update_module)
  File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 484, in load_modules
    processed_modules += load_marked_modules(cr, graph,
  File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 372, in load_marked_modules
    loaded, processed = load_module_graph(
  File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 231, in load_module_graph
    load_data(cr, idref, mode, kind='data', package=package)
  File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 71, in load_data
    tools.convert_file(cr, package.name, filename, idref, mode, noupdate, kind)
  File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 763, in convert_file
    convert_xml_import(cr, module, fp, idref, mode, noupdate)
  File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 829, in convert_xml_import
    obj.parse(doc.getroot())
  File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 749, in parse
    self._tag_root(de)
  File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 698, in _tag_root
    f(rec)
  File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 709, in _tag_root
    raise ParseError(msg) from None  # Restart with "--log-handler odoo.tools.convert:DEBUG" for complete traceback
odoo.tools.convert.ParseError: while parsing /usr/lib/python3/dist-packages/odoo/addons/account/views/account_payment_view.xml:146
Fehler bei der Validierung der Ansicht nahe:

<form string="Register Payment" __validate__="1">
                    <header>
                        <button name="action_post" string="Confirm" type="object" class="oe_highlight" attrs="{'invisible': [('state', '!=', 'draft')]}" data-hotkey="v"/>
                        <button name="action_draft" string="Reset To Draft" type="object" class="btn btn-secondary" attrs="{'invisible': [('state', 'not in', ('posted', 'cancel'))]}" groups="account.group_account_invoice" data-hotkey="w"/>
                <field name="amount_available_for_refund" invisible="1"/>

Das Feld „amount_available_for_refund“ existiert nicht im Modell „account.payment“

View error context:
{'file': '/usr/lib/python3/dist-packages/odoo/addons/account/views/account_payment_view.xml',
 'line': 3,
 'name': 'account.payment.form',
 'view': ir.ui.view(510,),
 'view.model': 'account.payment',
 'view.parent': ir.ui.view(),
 'xmlid': 'view_account_payment_form'}

The above server error caused the following client error:
RPC_ERROR: Odoo Server Error
    at makeErrorFromResponse (http://localhost:8070/web/assets/135-057a973/web.assets_backend.min.js:992:163)
    at XMLHttpRequest.<anonymous> (http://localhost:8070/web/assets/135-057a973/web.assets_backend.min.js:1000:13)

To Reproduce

Affected versions: 16.0

Steps to reproduce the behavior:

  1. Install clean version of odoo15
  2. Install App "account"
  3. Run upgrade to version odoo16 as described here Running the migration
  4. Open the app Invoicing (account) in odoo16 and the first error occurs
  5. Try to upgrade the app "account" and second error occurs

Expected behavior I would expect the app account (without any modules or data) to be accessible after the upgrade without error messages, or at least that the app can be upgraded without errors and can then be used again.

mholthausen commented 8 months ago

Are there any new findings on this? We would like to upgrade our odoo15, but we are failing at the same point with our production instance as with the fresh installation described above.

legalsylvain commented 8 months ago

What is the state of the module account_payment ?

mholthausen commented 8 months ago

What do you mean by "state of the module"? Where can I check this? The only thing I can find is an upgrade_analysis.txt from the openupgrade_scripts folder (account_payment/16.0.2.0):

---Models in module 'account_payment'---
model payment.refund.wizard (moved from payment) [transient]
---Fields in module 'account_payment'---
account_payment / account.bank.statement.line / amount_paid (float)           : previously in module payment
account_payment / account.bank.statement.line / authorized_transaction_ids (many2many): previously in module payment
account_payment / account.bank.statement.line / transaction_ids (many2many)   : previously in module payment
account_payment / account.move             / amount_paid (float)           : previously in module payment
account_payment / account.move             / authorized_transaction_ids (many2many): previously in module payment
account_payment / account.move             / transaction_ids (many2many)   : previously in module payment
account_payment / account.payment          / amount_available_for_refund (float): previously in module payment
account_payment / account.payment          / amount_paid (float)           : previously in module payment
account_payment / account.payment          / authorized_transaction_ids (many2many): previously in module payment
account_payment / account.payment          / payment_token_id (many2one)   : previously in module payment
account_payment / account.payment          / payment_transaction_id (many2one): previously in module payment
account_payment / account.payment          / refunds_count (integer)       : previously in module payment
account_payment / account.payment          / source_payment_id (many2one)  : previously in module payment
account_payment / account.payment          / suitable_payment_token_ids (many2many): previously in module payment
account_payment / account.payment          / transaction_ids (many2many)   : previously in module payment
account_payment / account.payment          / use_electronic_payment_method (boolean): previously in module payment
account_payment / account.payment.method.line / payment_provider_id (many2one): NEW relation: payment.provider, isfunction: function, stored
account_payment / payment.transaction      / invoice_ids (many2many)       : previously in module payment
account_payment / payment.transaction      / invoices_count (integer)      : previously in module payment
account_payment / payment.transaction      / payment_id (many2one)         : previously in module payment
---XML records in module 'account_payment'---
NEW ir.actions.act_window: account_payment.action_invoice_order_generate_link [renamed from payment module]
NEW ir.model.access: account_payment.payment_link_wizard [renamed from payment module]
NEW ir.model.access: account_payment.payment_refund_wizard [renamed from payment module]
NEW ir.rule: account_payment.payment_token_billing_rule [renamed from payment module] (noupdate)
NEW ir.rule: account_payment.payment_transaction_billing_rule [renamed from payment module] (noupdate)
NEW ir.ui.menu: account_payment.payment_icon_menu [renamed from payment module]
NEW ir.ui.menu: account_payment.payment_provider_menu
NEW ir.ui.menu: account_payment.payment_token_menu [renamed from payment module]
NEW ir.ui.menu: account_payment.payment_transaction_menu [renamed from payment module]
NEW ir.ui.view: account_payment.account_invoice_view_form_inherit_payment
NEW ir.ui.view: account_payment.payment_checkout_inherit
NEW ir.ui.view: account_payment.payment_manage_inherit
NEW ir.ui.view: account_payment.payment_provider_form
NEW ir.ui.view: account_payment.payment_refund_wizard_view_form
NEW ir.ui.view: account_payment.payment_transaction_form
NEW ir.ui.view: account_payment.view_account_journal_form
NEW ir.ui.view: account_payment.view_account_payment_form_inherit_payment
NEW ir.ui.view: account_payment.view_account_payment_register_form_inherit_payment

In addition, I cannot find the fields mentioned in the error messages (authorized_transaction_ids and amount_available_for_refund) in the databases for either odoo15 or odoo16. Therefore, I do not understand how and where I can add these fields myself.

legalsylvain commented 8 months ago

amount_available_for_refund in in account in 15.0 and in account_payment in 16.0 module. but the new module is auto_installable, if account is installed. That's why, I ask for the state of the record "account_payment" in the ir_module_module table.

mholthausen commented 8 months ago

First of all, "account" was installed in 15.0 and "account_payment" was uninstalled. After an update to 16.0, the state for "account_payment" remained uninstalled, although auto_install was set to true. I then installed this in the odoo15 installation and updated to odoo16 again. Then the state here is "installed" and the error messages no longer appear. I wasn't aware that another module had to be installed tor run the upgrade successfully. Although an upgrade of the app via the App Store still fails (Field "amount_available_for_refund" does not exist in model "account.payment"). But I don't think this is absolutely necessary as the app itself seems to work. Thank you.

mholthausen commented 8 months ago

Although I can now at least call up the "Invoicing" app again, I still receive errors in various other places for missing field information or entire fields after upgrading to odoo16:

Invoicing -> Configuration -> Journals:

UncaughtPromiseError
Uncaught Promise > Missing field string information for the field 'payment_acquirer_id' from the 'account.payment.method.line' model
Error: Missing field string information for the field 'payment_acquirer_id' from the 'account.payment.method.line' model
    at http://localhost:8070/web/assets/134-6af315d/web.assets_backend.min.js:6760:258
    at traverse (http://localhost:8070/web/assets/134-6af315d/web.assets_backend.min.js:6755:200)
    at http://localhost:8070/web/assets/134-6af315d/web.assets_backend.min.js:6755:242
    at _.each._.forEach (http://localhost:8070/web/assets/133-6323ddf/web.assets_common.min.js:63:404)
    at traverse (http://localhost:8070/web/assets/134-6af315d/web.assets_backend.min.js:6755:211)
    at processArch (http://localhost:8070/web/assets/134-6af315d/web.assets_backend.min.js:6759:180)
    at http://localhost:8070/web/assets/134-6af315d/web.assets_backend.min.js:6762:266
    at traverse (http://localhost:8070/web/assets/134-6af315d/web.assets_backend.min.js:6755:200)
    at http://localhost:8070/web/assets/134-6af315d/web.assets_backend.min.js:6755:242
    at _.each._.forEach (http://localhost:8070/web/assets/133-6323ddf/web.assets_common.min.js:63:404)

Update app account:

<form string="Register Payment" __validate__="1">
                    <header>
                        <button name="action_post" string="Confirm" type="object" class="oe_highlight" attrs="{'invisible': [('state', '!=', 'draft')]}" data-hotkey="v"/>
                        <button name="action_draft" string="Reset To Draft" type="object" class="btn btn-secondary" attrs="{'invisible': [('state', 'not in', ('posted', 'cancel'))]}" groups="account.group_account_invoice" data-hotkey="w"/>
                <field name="amount_available_for_refund" invisible="1"/>

Field "amount_available_for_refund" does not exist in model "account.payment"

View error context:
{'file': '/usr/lib/python3/dist-packages/odoo/addons/account/views/account_payment_view.xml',
 'line': 3,
 'name': 'account.payment.form',
 'view': ir.ui.view(510,),
 'view.model': 'account.payment',
 'view.parent': ir.ui.view(),
 'xmlid': 'view_account_payment_form'}

Update module "account_payment":

<form string="Account Journal" __validate__="1">
                    <field name="company_id" invisible="1"/>
                    <field name="bank_statements_source" invisible="1"/>
                    <sheet>
                        <div name="button_box" class="oe_button_box">

Field "payment_acquirer_id" does not exist in model "account.payment.method.line"

View error context:
{'file': '/usr/lib/python3/dist-packages/odoo/addons/account_payment/views/account_journal_views.xml',
 'line': 3,
 'name': 'account.journal.form.inherit.payment',
 'view': ir.ui.view(822,),
 'view.model': 'account.journal',
 'view.parent': ir.ui.view(559,),
 'xmlid': 'view_account_journal_form'}

I've installed module "Payment - Account / Invoice Online Payment Patch", because patch sounds like some troubleshooting but still no changes.

Is there a list or detailed instructions for "account" somewhere on what may need to be set, installed or uninstalled for the invoicing app upgrade process to run successfully? Unfortunately, I don't know what to do. On the migration page (https://github.com/OCA/OpenUpgrade/issues/3681) there is a tick next to "account" and also next to "account_payment", which indicates to me that the upgrade process is complete. I'm beginning to assume that in our case a new installation of odoo17 and a CSV export and import of the customer data pool is the better way, as I'm just chasing from one error to the next.

pedrobaeza commented 8 months ago

It seems you are not executing correctly the upgrade. There should be traces in the migration log about the migration queries.

mholthausen commented 8 months ago

Thank you very much! Where exactly can I find this upgrade log file? I only see the upgrade_analysis.txt files for many individual modules (openupgrade_scripts/scripts/). For account_payment, for example, the following is shown there:

---Models in module 'account_payment'---
model payment.refund.wizard (moved from payment) [transient]
---Fields in module 'account_payment'---
account_payment / account.bank.statement.line / amount_paid (float)           : previously in module payment
account_payment / account.bank.statement.line / authorized_transaction_ids (many2many): previously in module payment
account_payment / account.bank.statement.line / transaction_ids (many2many)   : previously in module payment
account_payment / account.move             / amount_paid (float)           : previously in module payment
account_payment / account.move             / authorized_transaction_ids (many2many): previously in module payment
account_payment / account.move             / transaction_ids (many2many)   : previously in module payment
account_payment / account.payment          / amount_available_for_refund (float): previously in module payment
account_payment / account.payment          / amount_paid (float)           : previously in module payment
account_payment / account.payment          / authorized_transaction_ids (many2many): previously in module payment
account_payment / account.payment          / payment_token_id (many2one)   : previously in module payment
account_payment / account.payment          / payment_transaction_id (many2one): previously in module payment
account_payment / account.payment          / refunds_count (integer)       : previously in module payment
account_payment / account.payment          / source_payment_id (many2one)  : previously in module payment
account_payment / account.payment          / suitable_payment_token_ids (many2many): previously in module payment
account_payment / account.payment          / transaction_ids (many2many)   : previously in module payment
account_payment / account.payment          / use_electronic_payment_method (boolean): previously in module payment
account_payment / account.payment.method.line / payment_provider_id (many2one): NEW relation: payment.provider, isfunction: function, stored
account_payment / payment.transaction      / invoice_ids (many2many)       : previously in module payment
account_payment / payment.transaction      / invoices_count (integer)      : previously in module payment
account_payment / payment.transaction      / payment_id (many2one)         : previously in module payment
---XML records in module 'account_payment'---
NEW ir.actions.act_window: account_payment.action_invoice_order_generate_link [renamed from payment module]
NEW ir.model.access: account_payment.payment_link_wizard [renamed from payment module]
NEW ir.model.access: account_payment.payment_refund_wizard [renamed from payment module]
NEW ir.rule: account_payment.payment_token_billing_rule [renamed from payment module] (noupdate)
NEW ir.rule: account_payment.payment_transaction_billing_rule [renamed from payment module] (noupdate)
NEW ir.ui.menu: account_payment.payment_icon_menu [renamed from payment module]
NEW ir.ui.menu: account_payment.payment_provider_menu
NEW ir.ui.menu: account_payment.payment_token_menu [renamed from payment module]
NEW ir.ui.menu: account_payment.payment_transaction_menu [renamed from payment module]
NEW ir.ui.view: account_payment.account_invoice_view_form_inherit_payment
NEW ir.ui.view: account_payment.payment_checkout_inherit
NEW ir.ui.view: account_payment.payment_manage_inherit
NEW ir.ui.view: account_payment.payment_provider_form
NEW ir.ui.view: account_payment.payment_refund_wizard_view_form
NEW ir.ui.view: account_payment.payment_transaction_form
NEW ir.ui.view: account_payment.view_account_journal_form
NEW ir.ui.view: account_payment.view_account_payment_form_inherit_payment
NEW ir.ui.view: account_payment.view_account_payment_register_form_inherit_payment

and for the module account:

---Models in module 'account'---
obsolete model account.account.type
obsolete model account.analytic.default
obsolete model account.bank.statement.cashbox
obsolete model account.bank.statement.closebalance [transient]
obsolete model account.cashbox.line
obsolete model account.common.journal.report [transient]
obsolete model account.common.report [transient]
obsolete model account.print.journal [transient]
obsolete model account.tax.carryover.line
obsolete model account.tax.report
obsolete model account.tax.report.line
obsolete model cash.box.out [transient]
obsolete model report.account.report_journal [abstract]
obsolete model tax.adjustments.wizard [transient]
new model account.report
new model account.report.column
new model account.report.expression
new model account.report.external.value
new model account.report.line
---Fields in module 'account'---
account      / account.account          / account_type (selection)      : NEW required, selection_keys: ['asset_cash', 'asset_current', 'asset_fixed', 'asset_non_current', 'asset_prepayments', 'asset_receivable', 'equity', 'equity_unaffected', 'expense', 'expense_depreciation', 'expense_direct_cost', 'income', 'income_other', 'liability_credit_card', 'liability_current', 'liability_non_current', 'liability_payable', 'off_balance'], hasdefault: compute
account      / account.account          / include_initial_balance (boolean): NEW isfunction: function, stored
account      / account.account          / internal_group (selection)    : not related anymore
account      / account.account          / internal_group (selection)    : now a function
account      / account.account          / internal_group (selection)    : selection_keys is now '['asset', 'equity', 'expense', 'income', 'liability', 'off_balance']' ('function')
account      / account.account          / internal_type (selection)     : DEL selection_keys: function
account      / account.account          / non_trade (boolean)           : NEW hasdefault: default
account      / account.account          / user_type_id (many2one)       : DEL relation: account.account.type, required
account      / account.account.tag      / tax_report_line_ids (many2many): DEL relation: account.tax.report.line
account      / account.account.template / account_type (selection)      : NEW selection_keys: ['asset_cash', 'asset_current', 'asset_fixed', 'asset_non_current', 'asset_prepayments', 'asset_receivable', 'equity', 'equity_unaffected', 'expense', 'expense_depreciation', 'expense_direct_cost', 'income', 'income_other', 'liability_credit_card', 'liability_current', 'liability_non_current', 'liability_payable', 'off_balance']
account      / account.account.template / user_type_id (many2one)       : DEL relation: account.account.type, required
account      / account.account.type     / include_initial_balance (boolean): DEL
account      / account.account.type     / internal_group (selection)    : DEL required, selection_keys: ['asset', 'equity', 'expense', 'income', 'liability', 'off_balance']
account      / account.account.type     / name (char)                   : DEL required
account      / account.account.type     / note (text)                   : DEL
account      / account.account.type     / type (selection)              : DEL required, selection_keys: ['liquidity', 'other', 'payable', 'receivable']
account      / account.analytic.applicability / account_prefix (char)         : NEW
account      / account.analytic.applicability / business_domain (False)       : NEW selection_keys: ['bill', 'general', 'invoice'], mode: modify
account      / account.analytic.applicability / product_categ_id (many2one)   : NEW relation: product.category
account      / account.analytic.default / account_id (many2one)         : DEL relation: account.account
account      / account.analytic.default / analytic_id (many2one)        : DEL relation: account.analytic.account
account      / account.analytic.default / analytic_tag_ids (many2many)  : DEL relation: account.analytic.tag
account      / account.analytic.default / company_id (many2one)         : DEL relation: res.company
account      / account.analytic.default / date_start (date)             : DEL
account      / account.analytic.default / date_stop (date)              : DEL
account      / account.analytic.default / partner_id (many2one)         : DEL relation: res.partner
account      / account.analytic.default / product_id (many2one)         : DEL relation: product.product
account      / account.analytic.default / sequence (integer)            : DEL
account      / account.analytic.default / user_id (many2one)            : DEL relation: res.users
account      / account.analytic.distribution.model / account_prefix (char)         : NEW
account      / account.analytic.distribution.model / product_categ_id (many2one)   : NEW relation: product.category
account      / account.analytic.distribution.model / product_id (many2one)         : NEW relation: product.product
account      / account.analytic.line    / general_account_id (many2one) : not related anymore
account      / account.analytic.line    / journal_id (many2one)         : NEW relation: account.journal, isrelated: related, stored
account      / account.analytic.line    / move_id (many2one)            : DEL relation: account.move.line
account      / account.analytic.line    / move_line_id (many2one)       : NEW relation: account.move.line
account      / account.analytic.line    / partner_id (False)            : previously in module hr_timesheet
account      / account.bank.statement   / _order                        : _order is now 'first_line_index desc' ('date desc, name desc, id desc')
account      / account.bank.statement   / attachment_ids (many2many)    : NEW relation: ir.attachment
account      / account.bank.statement   / cashbox_end_id (many2one)     : DEL relation: account.bank.statement.cashbox
account      / account.bank.statement   / cashbox_start_id (many2one)   : DEL relation: account.bank.statement.cashbox
account      / account.bank.statement   / date (date)                   : now a function
account      / account.bank.statement   / date_done (datetime)          : DEL
account      / account.bank.statement   / difference (float)            : DEL
account      / account.bank.statement   / first_line_index (char)       : NEW isfunction: function, stored
account      / account.bank.statement   / is_complete (boolean)         : NEW isfunction: function, stored
account      / account.bank.statement   / is_valid_balance_start (boolean): DEL
account      / account.bank.statement   / journal_id (many2one)         : now a function
account      / account.bank.statement   / line_ids (one2many)           : now required
account      / account.bank.statement   / message_follower_ids (one2many): DEL relation: mail.followers
account      / account.bank.statement   / message_ids (one2many)        : DEL relation: mail.message
account      / account.bank.statement   / message_main_attachment_id (many2one): DEL relation: ir.attachment
account      / account.bank.statement   / move_line_ids (one2many)      : DEL relation: account.move.line
account      / account.bank.statement   / previous_statement_id (many2one): DEL relation: account.bank.statement
account      / account.bank.statement   / sequence_number (integer)     : DEL
account      / account.bank.statement   / sequence_prefix (char)        : DEL
account      / account.bank.statement   / state (selection)             : DEL required, selection_keys: ['confirm', 'open', 'posted']
account      / account.bank.statement   / total_entry_encoding (float)  : DEL
account      / account.bank.statement   / user_id (many2one)            : DEL relation: res.users
account      / account.bank.statement   / website_message_ids (one2many): DEL relation: mail.message
account      / account.bank.statement.cashbox / cashbox_lines_ids (one2many)  : DEL relation: account.cashbox.line
account      / account.bank.statement.cashbox / end_bank_stmt_ids (one2many)  : DEL relation: account.bank.statement
account      / account.bank.statement.cashbox / start_bank_stmt_ids (one2many): DEL relation: account.bank.statement
account      / account.bank.statement.line / _order                        : _order is now 'internal_index desc' ('statement_id desc, date, sequence, id desc')
account      / account.bank.statement.line / auto_post (boolean)           : now required
account      / account.bank.statement.line / auto_post (boolean)           : selection_keys is now 'function' ('False')
account      / account.bank.statement.line / auto_post (boolean)           : type is now 'selection' ('boolean')
account      / account.bank.statement.line / currency_id (many2one)        : now a function
account      / account.bank.statement.line / internal_index (char)         : NEW isfunction: function, stored
account      / account.bank.statement.line / invoice_outstanding_credits_debits_widget (text): type is now 'binary' ('text')
account      / account.bank.statement.line / invoice_payments_widget (text): type is now 'binary' ('text')
account      / account.bank.statement.line / partner_shipping_id (many2one): previously in module sale
account      / account.bank.statement.line / state (selection)             : now required
account      / account.cashbox.line     / cashbox_id (many2one)         : DEL relation: account.bank.statement.cashbox
account      / account.cashbox.line     / coin_value (float)            : DEL required
account      / account.cashbox.line     / number (integer)              : DEL
account      / account.chart.template   / account_journal_early_pay_discount_gain_account_id (many2one): NEW relation: account.account.template
account      / account.chart.template   / account_journal_early_pay_discount_loss_account_id (many2one): NEW relation: account.account.template
account      / account.chart.template   / complete_tax_set (boolean)    : DEL
account      / account.chart.template   / use_storno_accounting (boolean): NEW hasdefault: default
account      / account.journal          / default_account_type (many2one): relation is now 'False' ('account.account.type') [nothing to do]
account      / account.journal          / default_account_type (many2one): type is now 'char' ('many2one')
account      / account.journal          / payment_sequence (boolean)    : NEW hasdefault: default
account      / account.journal          / type_control_ids (many2many)  : DEL relation: account.account.type
account      / account.move             / attachment_ids (one2many)     : NEW relation: ir.attachment
account      / account.move             / auto_post (boolean)           : now required
account      / account.move             / auto_post (boolean)           : selection_keys is now '['at_date', 'monthly', 'no', 'quarterly', 'yearly']' ('False')
account      / account.move             / auto_post (boolean)           : type is now 'selection' ('boolean')
account      / account.move             / auto_post_origin_id (many2one): NEW relation: account.move
account      / account.move             / auto_post_until (date)        : NEW hasdefault: compute
account      / account.move             / currency_id (many2one)        : now a function
account      / account.move             / invoice_outstanding_credits_debits_widget (text): type is now 'binary' ('text')
account      / account.move             / invoice_payments_widget (text): type is now 'binary' ('text')
account      / account.move             / is_storno (boolean)           : NEW hasdefault: compute
account      / account.move             / partner_shipping_id (many2one): previously in module sale
account      / account.move             / payment_ids (one2many)        : NEW relation: account.payment
account      / account.move             / quick_edit_total_amount (float): NEW
account      / account.move             / statement_line_ids (one2many) : NEW relation: account.bank.statement.line
account      / account.move             / tax_totals_json (char)        : DEL
account      / account.move.line        / _order                        : _order is now 'date desc, move_name desc, sequence, id' ('date desc, move_name desc, id')
account      / account.move.line        / account_id (many2one)         : now a function
account      / account.move.line        / amount_currency (float)       : now a function
account      / account.move.line        / analytic_account_id (many2one): DEL relation: account.analytic.account
account      / account.move.line        / analytic_distribution_stored_char (char): NEW isfunction: function, stored
account      / account.move.line        / analytic_tag_ids (many2many)  : DEL relation: account.analytic.tag
account      / account.move.line        / balance (float)               : not a function anymore
account      / account.move.line        / credit (float)                : now a function
account      / account.move.line        / debit (float)                 : now a function
account      / account.move.line        / discount_amount_currency (float): NEW
account      / account.move.line        / discount_balance (float)      : NEW
account      / account.move.line        / discount_date (date)          : NEW
account      / account.move.line        / discount_percentage (float)   : NEW
account      / account.move.line        / display_type (selection)      : now required
account      / account.move.line        / display_type (selection)      : selection_keys is now '['cogs', 'epd', 'line_note', 'line_section', 'payment_term', 'product', 'rounding', 'tax']' ('['line_note', 'line_section']')
account      / account.move.line        / exclude_from_invoice_tab (boolean): DEL
account      / account.move.line        / is_rounding_line (boolean)    : DEL
account      / account.move.line        / partner_id (many2one)         : now a function
account      / account.move.line        / price_subtotal (float)        : now a function
account      / account.move.line        / price_total (float)           : now a function
account      / account.move.line        / recompute_tax_line (boolean)  : DEL
account      / account.move.line        / tax_line_id (many2one)        : not a function anymore
account      / account.move.line        / tax_line_id (many2one)        : now related
account      / account.partial.reconcile / credit_currency_id (many2one) : not a function anymore
account      / account.partial.reconcile / credit_currency_id (many2one) : now related
account      / account.partial.reconcile / debit_currency_id (many2one)  : not a function anymore
account      / account.partial.reconcile / debit_currency_id (many2one)  : now related
account      / account.partial.reconcile / exchange_move_id (many2one)   : NEW relation: account.move
account      / account.payment          / amount_company_currency_signed (float): is now stored
account      / account.payment          / auto_post (boolean)           : now required
account      / account.payment          / auto_post (boolean)           : selection_keys is now 'function' ('False')
account      / account.payment          / auto_post (boolean)           : type is now 'selection' ('boolean')
account      / account.payment          / invoice_outstanding_credits_debits_widget (text): type is now 'binary' ('text')
account      / account.payment          / invoice_payments_widget (text): type is now 'binary' ('text')
account      / account.payment          / partner_shipping_id (many2one): previously in module sale
account      / account.payment.term     / display_on_invoice (boolean)  : NEW
account      / account.payment.term     / example_amount (float)        : NEW hasdefault: default
account      / account.payment.term     / example_date (date)           : NEW hasdefault: default
account      / account.payment.term.line / _order                        : _order is now 'id' ('sequence, id')
account      / account.payment.term.line / day_of_the_month (integer)    : DEL
account      / account.payment.term.line / days_after (integer)          : NEW
account      / account.payment.term.line / discount_days (integer)       : NEW
account      / account.payment.term.line / discount_percentage (float)   : NEW
account      / account.payment.term.line / end_month (boolean)           : NEW
account      / account.payment.term.line / months (integer)              : NEW required, hasdefault: default
account      / account.payment.term.line / option (selection)            : DEL required, selection_keys: ['after_invoice_month', 'day_after_invoice_date', 'day_current_month', 'day_following_month']
account      / account.payment.term.line / sequence (integer)            : DEL
account      / account.reconcile.model.line / analytic_account_id (many2one): DEL relation: account.analytic.account
account      / account.reconcile.model.line / analytic_distribution_stored_char (char): NEW isfunction: function, stored
account      / account.reconcile.model.line / analytic_tag_ids (many2many)  : DEL relation: account.analytic.tag
account      / account.report           / availability_condition (selection): NEW selection_keys: ['always', 'coa', 'country'], hasdefault: compute
account      / account.report           / chart_template_id (many2one)  : NEW relation: account.chart.template
account      / account.report           / column_ids (one2many)         : NEW relation: account.report.column
account      / account.report           / country_id (many2one)         : NEW relation: res.country
account      / account.report           / default_opening_date_filter (selection): NEW selection_keys: ['last_month', 'last_quarter', 'last_year', 'this_month', 'this_quarter', 'this_year', 'today'], hasdefault: compute
account      / account.report           / filter_account_type (boolean) : NEW hasdefault: compute
account      / account.report           / filter_analytic (boolean)     : NEW hasdefault: compute
account      / account.report           / filter_date_range (boolean)   : NEW hasdefault: compute
account      / account.report           / filter_fiscal_position (boolean): NEW hasdefault: compute
account      / account.report           / filter_growth_comparison (boolean): NEW hasdefault: compute
account      / account.report           / filter_hierarchy (selection)  : NEW selection_keys: ['by_default', 'never', 'optional'], hasdefault: compute
account      / account.report           / filter_journals (boolean)     : NEW hasdefault: compute
account      / account.report           / filter_multi_company (selection): NEW selection_keys: ['disabled', 'selector', 'tax_units'], hasdefault: compute
account      / account.report           / filter_partner (boolean)      : NEW hasdefault: compute
account      / account.report           / filter_period_comparison (boolean): NEW hasdefault: compute
account      / account.report           / filter_show_draft (boolean)   : NEW hasdefault: compute
account      / account.report           / filter_unfold_all (boolean)   : NEW hasdefault: compute
account      / account.report           / filter_unreconciled (boolean) : NEW hasdefault: compute
account      / account.report           / line_ids (one2many)           : NEW relation: account.report.line
account      / account.report           / load_more_limit (integer)     : NEW
account      / account.report           / name (char)                   : NEW required
account      / account.report           / only_tax_exigible (boolean)   : NEW
account      / account.report           / root_report_id (many2one)     : NEW relation: account.report
account      / account.report           / search_bar (boolean)          : NEW
account      / account.report           / variant_report_ids (one2many) : NEW relation: account.report
account      / account.report.column    / blank_if_zero (boolean)       : NEW hasdefault: default
account      / account.report.column    / custom_audit_action_id (many2one): NEW relation: ir.actions.act_window
account      / account.report.column    / expression_label (char)       : NEW required
account      / account.report.column    / figure_type (selection)       : NEW required, selection_keys: ['date', 'datetime', 'float', 'integer', 'monetary', 'none', 'percentage'], hasdefault: default
account      / account.report.column    / name (char)                   : NEW required
account      / account.report.column    / report_id (many2one)          : NEW relation: account.report
account      / account.report.column    / sequence (integer)            : NEW
account      / account.report.column    / sortable (boolean)            : NEW
account      / account.report.expression / auditable (boolean)           : NEW hasdefault: compute
account      / account.report.expression / blank_if_zero (boolean)       : NEW
account      / account.report.expression / carryover_target (char)       : NEW
account      / account.report.expression / date_scope (selection)        : NEW required, selection_keys: ['from_beginning', 'from_fiscalyear', 'normal', 'previous_tax_period', 'strict_range', 'to_beginning_of_fiscalyear', 'to_beginning_of_period'], hasdefault: default
account      / account.report.expression / engine (selection)            : NEW required, selection_keys: ['account_codes', 'aggregation', 'custom', 'domain', 'external', 'tax_tags']
account      / account.report.expression / figure_type (selection)       : NEW selection_keys: ['date', 'datetime', 'float', 'integer', 'monetary', 'none', 'percentage']
account      / account.report.expression / formula (char)                : NEW required
account      / account.report.expression / green_on_positive (boolean)   : NEW hasdefault: default
account      / account.report.expression / label (char)                  : NEW required
account      / account.report.expression / report_line_id (many2one)     : NEW relation: account.report.line, required
account      / account.report.expression / subformula (char)             : NEW
account      / account.report.external.value / carryover_origin_expression_label (char): NEW
account      / account.report.external.value / carryover_origin_report_line_id (many2one): NEW relation: account.report.line
account      / account.report.external.value / company_id (many2one)         : NEW relation: res.company, required, hasdefault: default
account      / account.report.external.value / date (date)                   : NEW required
account      / account.report.external.value / foreign_vat_fiscal_position_id (many2one): NEW relation: account.fiscal.position
account      / account.report.external.value / name (char)                   : NEW required
account      / account.report.external.value / target_report_expression_id (many2one): NEW relation: account.report.expression, required
account      / account.report.external.value / value (float)                 : NEW required
account      / account.report.line      / account_codes_formula (char)  : NEW
account      / account.report.line      / action_id (many2one)          : NEW relation: ir.actions.actions
account      / account.report.line      / aggregation_formula (char)    : NEW
account      / account.report.line      / children_ids (one2many)       : NEW relation: account.report.line
account      / account.report.line      / code (char)                   : NEW
account      / account.report.line      / domain_formula (char)         : NEW
account      / account.report.line      / expression_ids (one2many)     : NEW relation: account.report.expression
account      / account.report.line      / foldable (boolean)            : NEW
account      / account.report.line      / groupby (char)                : NEW
account      / account.report.line      / hide_if_zero (boolean)        : NEW
account      / account.report.line      / hierarchy_level (integer)     : NEW required, hasdefault: compute
account      / account.report.line      / name (char)                   : NEW required
account      / account.report.line      / parent_id (many2one)          : NEW relation: account.report.line
account      / account.report.line      / print_on_new_page (boolean)   : NEW
account      / account.report.line      / report_id (many2one)          : NEW relation: account.report, required, hasdefault: compute
account      / account.report.line      / sequence (integer)            : NEW
account      / account.tax              / name_searchable (char)        : NEW
account      / account.tax              / real_amount (float)           : NEW isfunction: function, stored
account      / account.tax.carryover.line / amount (float)                : DEL required
account      / account.tax.carryover.line / company_id (many2one)         : DEL relation: res.company, required
account      / account.tax.carryover.line / date (date)                   : DEL required
account      / account.tax.carryover.line / foreign_vat_fiscal_position_id (many2one): DEL relation: account.fiscal.position
account      / account.tax.carryover.line / name (char)                   : DEL required
account      / account.tax.carryover.line / tax_report_line_id (many2one) : DEL relation: account.tax.report.line
account      / account.tax.repartition.line.template / minus_report_expression_ids (many2many): NEW relation: account.report.expression
account      / account.tax.repartition.line.template / minus_report_line_ids (many2many): DEL relation: account.tax.report.line
account      / account.tax.repartition.line.template / plus_report_expression_ids (many2many): NEW relation: account.report.expression
account      / account.tax.repartition.line.template / plus_report_line_ids (many2many): DEL relation: account.tax.report.line
account      / account.tax.report       / country_id (many2one)         : DEL relation: res.country, required
account      / account.tax.report       / line_ids (one2many)           : DEL relation: account.tax.report.line
account      / account.tax.report       / name (char)                   : DEL required
account      / account.tax.report       / root_line_ids (one2many)      : DEL relation: account.tax.report.line
account      / account.tax.report.line  / carry_over_condition_method (selection): DEL selection_keys: ['always_carry_over_and_set_to_0', 'no_negative_amount_carry_over_condition']
account      / account.tax.report.line  / carry_over_destination_line_id (many2one): DEL relation: account.tax.report.line
account      / account.tax.report.line  / carryover_line_ids (one2many) : DEL relation: account.tax.carryover.line
account      / account.tax.report.line  / children_line_ids (one2many)  : DEL relation: account.tax.report.line
account      / account.tax.report.line  / code (char)                   : DEL
account      / account.tax.report.line  / formula (char)                : DEL
account      / account.tax.report.line  / is_carryover_persistent (boolean): DEL
account      / account.tax.report.line  / is_carryover_used_in_balance (boolean): DEL
account      / account.tax.report.line  / name (char)                   : DEL required
account      / account.tax.report.line  / parent_id (many2one)          : DEL relation: account.tax.report.line
account      / account.tax.report.line  / parent_path (char)            : DEL
account      / account.tax.report.line  / report_action_id (many2one)   : DEL relation: ir.actions.act_window
account      / account.tax.report.line  / report_id (many2one)          : DEL relation: account.tax.report, required
account      / account.tax.report.line  / sequence (integer)            : DEL required
account      / account.tax.report.line  / tag_ids (many2many)           : DEL relation: account.account.tag
account      / account.tax.report.line  / tag_name (char)               : DEL
account      / res.company              / account_journal_early_pay_discount_gain_account_id (many2one): NEW relation: account.account
account      / res.company              / account_journal_early_pay_discount_loss_account_id (many2one): NEW relation: account.account
account      / res.company              / account_onboarding_create_invoice_state (selection): not stored anymore
account      / res.company              / account_onboarding_create_invoice_state (selection): now a function
account      / res.company              / account_onboarding_create_invoice_state_flag (boolean): NEW hasdefault: default
account      / res.company              / account_storno (boolean)      : NEW
account      / res.company              / account_use_credit_limit (boolean): NEW
account      / res.company              / early_pay_discount_computation (selection): NEW selection_keys: ['excluded', 'included', 'mixed'], hasdefault: compute
account      / res.company              / message_follower_ids (one2many): NEW relation: mail.followers
account      / res.company              / message_ids (one2many)        : NEW relation: mail.message
account      / res.company              / message_main_attachment_id (many2one): NEW relation: ir.attachment
account      / res.company              / quick_edit_mode (selection)   : NEW selection_keys: ['in_invoices', 'out_and_in_invoices', 'out_invoices']
account      / res.company              / website_message_ids (one2many): NEW relation: mail.message
account      / res.partner              / credit_limit (float)          : previously in module base
account      / res.partner.bank         / activity_ids (one2many)       : NEW relation: mail.activity
account      / res.partner.bank         / message_follower_ids (one2many): NEW relation: mail.followers
account      / res.partner.bank         / message_ids (one2many)        : NEW relation: mail.message
account      / res.partner.bank         / message_main_attachment_id (many2one): NEW relation: ir.attachment
account      / res.partner.bank         / website_message_ids (one2many): NEW relation: mail.message
account      / res.users                / credit_limit (float)          : previously in module base
---XML records in module 'account'---
DEL account.account.type: account.data_account_off_sheet (noupdate)
DEL account.account.type: account.data_account_type_credit_card (noupdate)
DEL account.account.type: account.data_account_type_current_assets (noupdate)
DEL account.account.type: account.data_account_type_current_liabilities (noupdate)
DEL account.account.type: account.data_account_type_depreciation (noupdate)
DEL account.account.type: account.data_account_type_direct_costs (noupdate)
DEL account.account.type: account.data_account_type_equity (noupdate)
DEL account.account.type: account.data_account_type_expenses (noupdate)
DEL account.account.type: account.data_account_type_fixed_assets (noupdate)
DEL account.account.type: account.data_account_type_liquidity (noupdate)
DEL account.account.type: account.data_account_type_non_current_assets (noupdate)
DEL account.account.type: account.data_account_type_non_current_liabilities (noupdate)
DEL account.account.type: account.data_account_type_other_income (noupdate)
DEL account.account.type: account.data_account_type_payable (noupdate)
DEL account.account.type: account.data_account_type_prepayments (noupdate)
DEL account.account.type: account.data_account_type_receivable (noupdate)
DEL account.account.type: account.data_account_type_revenue (noupdate)
DEL account.account.type: account.data_unaffected_earnings (noupdate)
NEW account.payment.term: account.account_payment_term_30_days_end_month_the_10 (noupdate)
NEW account.payment.term: account.account_payment_term_30days_early_discount (noupdate)
NEW account.report: account.generic_tax_report
NEW account.report: account.generic_tax_report_account_tax
NEW account.report: account.generic_tax_report_tax_account
NEW account.report.column: account.generic_tax_report_account_tax_column_net
NEW account.report.column: account.generic_tax_report_account_tax_column_tax
NEW account.report.column: account.generic_tax_report_column_net
NEW account.report.column: account.generic_tax_report_column_tax
NEW account.report.column: account.generic_tax_report_tax_account_column_net
NEW account.report.column: account.generic_tax_report_tax_account_column_tax
NEW ir.actions.act_window: account.action_account_moves_all_grouped_matching
DEL ir.actions.act_window: account.action_account_chart_template_form
DEL ir.actions.act_window: account.action_account_moves_ledger_general
DEL ir.actions.act_window: account.action_account_type_form
DEL ir.actions.act_window: account.action_analytic_default_list
DEL ir.actions.act_window: account.action_bank_statement_line
DEL ir.actions.act_window: account.action_configure_tax_report
DEL ir.actions.act_window: account.action_view_account_bnk_stmt_check
DEL ir.actions.act_window: account.analytic_rule_action_user
DEL ir.actions.act_window: account.tax_adjustments_form
DEL ir.actions.act_window.view: account.action_bank_statement_form_bank
DEL ir.actions.report: account.action_report_journal
NEW ir.model.access: account.access_account_analytic_distribution_invoice
NEW ir.model.access: account.access_account_analytic_distribution_readonly
NEW ir.model.access: account.access_account_analytic_plan_accountant
NEW ir.model.access: account.access_account_report_ac_user
NEW ir.model.access: account.access_account_report_column_ac_user
NEW ir.model.access: account.access_account_report_column_readonly
NEW ir.model.access: account.access_account_report_expression_ac_user
NEW ir.model.access: account.access_account_report_expression_readonly
NEW ir.model.access: account.access_account_report_external_value_ac_user
NEW ir.model.access: account.access_account_report_external_value_readonly
NEW ir.model.access: account.access_account_report_line_ac_user
NEW ir.model.access: account.access_account_report_line_readonly
NEW ir.model.access: account.access_account_report_readonly
DEL ir.model.access: account.access_account_account_type_invoice
DEL ir.model.access: account.access_account_account_type_manager
DEL ir.model.access: account.access_account_account_type_readonly
DEL ir.model.access: account.access_account_analytic_default
DEL ir.model.access: account.access_account_analytic_default_analytic
DEL ir.model.access: account.access_account_analytic_default_invoice
DEL ir.model.access: account.access_account_bank_statement_closebalance
DEL ir.model.access: account.access_account_cashbox
DEL ir.model.access: account.access_account_cashbox_line
DEL ir.model.access: account.access_account_common_journal_report
DEL ir.model.access: account.access_account_common_report
DEL ir.model.access: account.access_account_print_journal
DEL ir.model.access: account.access_account_tax_carryover_line_ac_user
DEL ir.model.access: account.access_account_tax_carryover_line_readonly
DEL ir.model.access: account.access_account_tax_report_ac_user
DEL ir.model.access: account.access_account_tax_report_invoice
DEL ir.model.access: account.access_account_tax_report_line_ac_user
DEL ir.model.access: account.access_account_tax_report_line_readonly
DEL ir.model.access: account.access_cash_box_out
DEL ir.model.access: account.access_tax_adjustments_wizard
ir.model.constraint: account.constraint_account_journal_code_company_uniq (changed definition: is now 'unique(company_id,code)' ('unique(code,company_id)'))
NEW ir.model.constraint: account.constraint_account_journal_group_uniq_name
ir.model.constraint: account.constraint_account_move_line_check_accountable_required_fields (changed definition: is now 'check(display_type in('line_section','line_note') or account_id is not null)' ('check(coalesce(display_type in('line_section','line_note'),'f') or account_id is not null)'))
ir.model.constraint: account.constraint_account_move_line_check_amount_currency_balance_sign (changed definition: is now 'check(    display_type in('line_section','line_note')    or(    (balance <= 0 and amount_currency <= 0)    or    (balance >= 0 and amount_currency >= 0)    )   )' ('check(   (    (currency_id != company_currency_id)    and    (    (debit - credit <= 0 and amount_currency <= 0)     or    (debit - credit >= 0 and amount_currency >= 0)    )    )    or   (    currency_id = company_currency_id    and    round(debit - credit - amount_currency,2) = 0    )   )'))
ir.model.constraint: account.constraint_account_move_line_check_credit_debit (changed definition: is now 'check(display_type in('line_section','line_note') or credit * debit=0)' ('check(credit + debit>=0 and credit * debit=0)'))
NEW ir.model.constraint: account.constraint_account_reconcile_model_name_unique
NEW ir.model.constraint: account.constraint_account_report_line_code_uniq
NEW ir.rule: account.report_external_value_comp_rule (noupdate)
DEL ir.rule: account.account_tax_carryover_line_comp_rule (noupdate)
DEL ir.rule: account.analytic_default_comp_rule (noupdate)
NEW ir.ui.menu: account.account_analytic_plan_menu
NEW ir.ui.menu: account.menu_analytic__distribution_model
DEL ir.ui.menu: account.account_analytic_group_menu
DEL ir.ui.menu: account.account_analytic_tag_menu
DEL ir.ui.menu: account.menu_action_account_moves_journal_bank_cash
DEL ir.ui.menu: account.menu_action_account_moves_journal_misc
DEL ir.ui.menu: account.menu_action_account_moves_journal_purchase
DEL ir.ui.menu: account.menu_action_account_moves_journal_sales
DEL ir.ui.menu: account.menu_action_account_moves_ledger_general
DEL ir.ui.menu: account.menu_action_account_moves_ledger_partner
DEL ir.ui.menu: account.menu_action_tax_adjustment
DEL ir.ui.menu: account.menu_analytic_default_list
DEL ir.ui.menu: account.menu_configure_tax_report
DEL ir.ui.menu: account.menu_finance_entries_accounting_journals
DEL ir.ui.menu: account.menu_finance_entries_accounting_ledgers
NEW ir.ui.view: account.account_analytic_distribution_model_form_inherit
NEW ir.ui.view: account.account_analytic_distribution_model_tree_inherit
NEW ir.ui.view: account.account_analytic_plan_form_view_inherit_account
NEW ir.ui.view: account.portal_invoice_required_fields_form
NEW ir.ui.view: account.view_account_analytic_line_filter_inherit
NEW ir.ui.view: account.view_onboarding_tax_tree
NEW ir.ui.view: account.view_partner_bank_form_inherit_account
NEW ir.ui.view: account.view_tax_group_form
DEL ir.ui.view: account.account_common_report_view
DEL ir.ui.view: account.account_tax_carryover_line_form
DEL ir.ui.view: account.account_tax_carryover_line_tree
DEL ir.ui.view: account.account_tax_report_form
DEL ir.ui.view: account.account_tax_report_line_form
DEL ir.ui.view: account.account_tax_report_line_tree
DEL ir.ui.view: account.account_tax_report_search
DEL ir.ui.view: account.account_tax_report_tree
DEL ir.ui.view: account.cash_box_out_form
DEL ir.ui.view: account.report_journal
DEL ir.ui.view: account.tax_adjustments_wizard
DEL ir.ui.view: account.view_account_analytic_default_form
DEL ir.ui.view: account.view_account_analytic_default_form_search
DEL ir.ui.view: account.view_account_analytic_default_kanban
DEL ir.ui.view: account.view_account_analytic_default_tree
DEL ir.ui.view: account.view_account_bnk_stmt_cashbox
DEL ir.ui.view: account.view_account_bnk_stmt_cashbox_footer
DEL ir.ui.view: account.view_account_bnk_stmt_check
DEL ir.ui.view: account.view_account_chart_template_form
DEL ir.ui.view: account.view_account_chart_template_seacrh
DEL ir.ui.view: account.view_account_chart_template_tree
DEL ir.ui.view: account.view_account_invoice_report_search_analytic_accounting
DEL ir.ui.view: account.view_account_move_line_filter_with_root_selection
DEL ir.ui.view: account.view_account_template_form
DEL ir.ui.view: account.view_account_template_search
DEL ir.ui.view: account.view_account_template_tree
DEL ir.ui.view: account.view_account_type_form
DEL ir.ui.view: account.view_account_type_search
DEL ir.ui.view: account.view_account_type_tree
DEL ir.ui.view: account.view_bank_statement_form
DEL ir.ui.view: account.view_bank_statement_line_form
DEL ir.ui.view: account.view_bank_statement_line_search
DEL ir.ui.view: account.view_bank_statement_line_tree
DEL ir.ui.view: account.view_company_partner_bank_form
DEL ir.ui.view: account.view_move_line_tree_grouped
DEL ir.ui.view: account.view_payment_term_line_form
DEL ir.ui.view: account.view_payment_term_line_tree
NEW res.groups: account.group_delivery_invoice_address [renamed from sale module]

Odoo is running in a docker compose environment with the postgres and im starting the upgrade with the command command: --database odoo --upgrade-path=/mnt/extra-addons/openupgrade_scripts/scripts --load=base,web,openupgrade_framework --update all --stop-after-init. "openupgrade_framework" and "openupgrade_scripts" are placed in the odoo16 addons directory.

pedrobaeza commented 8 months ago

The command with the --update all should throw logs of the migration.

mholthausen commented 8 months ago

Okay, in addition to many INFO statements where a "creating or updating database tables" is executed, I also see some errors from Postgres, e.g. check constraint "mail_channel_group_public_id_check" of relation "mail_channel" is violated by some row, odoo then reports: Table 'mail_channel': unable to add constraint 'mail_channel_group_public_id_check' as CHECK (channel_type = 'channel' OR group_public_id IS NULL). But warnings are also returned, e.g: WARNING odoo odoo.addons.openupgrade_framework.odoo_patch.odoo.addons.base.models.ir_ui_view: Cannot render the custom view account.view_account_payment_form for the model account.payment. Suppose you are migrating between major versions of Odoo. Please check the content of the view manually after the migration. Or ERRORS. e.g.: Error: Field "payment_transaction_id" does not exist

However, the whole upgrade process then aborts in the end after prompting the following message odoo.exceptions.ValidationError: A record of another model account.tax.report was found for the external ID l10n_en.tax_report when trying to create/update a record of the model account.report (13739). In the account_report table, however, I cannot find a l10n_en.tax_report field.

I really don't understand what else I need to do as the odoo15 installation is completely empty to test the upgrade process, uses the latest docker image of version 15 and only has account and account_payment installed.

pedrobaeza commented 8 months ago

I think openupgrade_framework is not being really loaded. You can check it at the beginning of the log. Maybe you need to hire an expert in this tool for doing this work.

remi-filament commented 8 months ago

Hi @mholthausen thank you for reporting this issue. I faced the same error today a JS Uncaught Promise with the following : Error: Missing field string information for the field 'authorized_transaction_ids' from the 'account.move' model

I used OpenUpgrade on a fresh 15.0 database with only purchase installed.

The issue here was that account_payment module was not installed on v16.0. Basically, between 15.0 and 16.0 part of the payment code was moved to account_payment but the later was not installed on v15 and OpenUpgrade migration script do not force the installation of account_payment so it remains uninstalled on v16 (although it is auto-install in v16.0 code).

The solution is here to install account_payment module.

I am not sure why the account_payment would not auto_install though ? Any idea @pedrobaeza ?

pedrobaeza commented 8 months ago

In theory the module should be installed if there's a dependency chain, but if no module depends on it, that's why it's not installed, even due to the auto_install property.

mholthausen commented 8 months ago

@remi-filament thanks for coming back to this issue. I did that, installed account_payment in v15. The original error (that I could no longer call up invoicing) has been fixed. But now all the other error messages and warnings that I have documented here appear.

remi-filament commented 8 months ago

@mholthausen as Pedro mentioned in a previous comment, it seems that you are not running OpenUpgrade properly. You should follow instructions from here : https://oca.github.io/OpenUpgrade/040_run_migration.html

Basically, you need to run through the following steps :

  1. Get a v15 database
  2. Get Odoo v16 code + OpenUpgrade v16 code + latest openupgradelib
  3. Run migration against v15 database (with above code and adding --upgrade-path=/openupgrade_scripts/scripts --update all --stop-after-init --load=base,web,openupgrade_framework to the command line)
  4. Run your upgraded v16 database on Odoo v16 code and check for any issue
remi-filament commented 8 months ago

In theory the module should be installed if there's a dependency chain, but if no module depends on it, that's why it's not installed, even due to the auto_install property.

@pedrobaeza thanks for your answer, would it then be necessary to take extra action in OpenUpgrade migration scripts to force install this account_payment module ?

I see a number of scenarios, but not sure which one fits better OpenUpgrade strategy :

  1. we do nothing else in OpenUpgrade : it is up to the user migrating to install manually account_payment
  2. we raise a log during payment migration to inform end user that she/he probably needs to manually install account_payment
  3. we add to payment migration script to force install account_payment module if account is installed (expected behavior of Odoo since account_payment is "auto_install" = ["account"]

I would be in favor of the last option, since more transparent to migration user, but am not sure how it was done in the past on OpenUpgrade (assuming that this problem already existed on previous migrations for other modules) ?

cc @legalsylvain

pedrobaeza commented 8 months ago

Option 3 may be the way.

legalsylvain commented 8 months ago

cc @legalsylvain

Well, i'm pretty lost. let's try to sum up :

In V15 :

Module dependencies auto_install
account | base_setup, product, analytic, portal, digest
payment | account | True
account_payment | payment

There is no module that depends on account_payment (in CE and EE). So except explicit installation, account_payment is not installed in a V15 instance.

run_odoo_15 -d test_account_15 -i account --stop-after-init
test_account_15=# select name, state from ir_module_module where name in ('account', 'account_payment', 'payment');
      name       |   state   
-----------------+-----------
 account         | installed
 account_payment | uninstalled
 payment         | installed

In V16 :

*** : Changes, regarding V15.

Module dependencies auto_install
account | base_setup, product, analytic, portal, digest
payment | portal *** ***
account_payment | account, payment | account

In that version account_payment is auto_installed when account is installed, that forces payment installation. So all database with account installed will have payment and account_payment installed.

The following modules depends on account_payment : CE : website_payment , sale, account_payment_invoice_online_payment_patch + some EE modules.

run_odoo_16 -d test_account_16 -i account --stop-after-init
test_account_16=# select name, state from ir_module_module where name in ('account', 'account_payment', 'payment');
      name       |   state   
-----------------+-----------
 account         | installed
 account_payment | installed
 payment         | installed

My point of view

remi-filament commented 8 months ago

I proposed a fix in #4310

Thanks for your analysis @legalsylvain it is even worse if you look at the workaround they implemented in module account_payment_invoice_online_payment_patch with commit https://github.com/odoo/odoo/pull/110177/commits/acd0f4624463e426a6996e1faa7db9e5155ccb32

Basically, in v16 without this patch if you want to disable online payment on invoice, it would uninstall account_payment and therefore all dependencies (mainly sale) so they introduced the patch module to be able to disable online payment without uninstalling account_payment...

pedrobaeza commented 8 months ago

Rest of procedure doubts, please use the Discussions section.