From 1531b29de44fbc2efe89b940462734c74396c7d9 Mon Sep 17 00:00:00 2001 From: Jairo Llopis Date: Thu, 25 Jun 2020 08:27:08 +0100 Subject: [PATCH] [FIX] contract: do not die if modified partner has contracts in several companies In a multicompany scenario where a contact belongs to a company and has contracts in several companies, if the user goes to the contact to edit anything, when saving, it will trigger the recomputation of the `commercial_partner_id` field, which gets populated to all the related contracts, and will undeniably fail with an `AccessError`. A simple test is provided that, without the fix, fails like this: ``` 2020-06-25 07:21:24,859 33 ERROR devel odoo.addons.contract.tests.test_contract: ERROR: test_multicompany_partner_edited (odoo.addons.contract.tests.test_contract.TestContract) 2020-06-25 07:21:24,859 33 ERROR devel odoo.addons.contract.tests.test_contract: ` Editing a partner with contracts in several companies works. 2020-06-25 07:21:24,859 33 ERROR devel odoo.addons.contract.tests.test_contract: Traceback (most recent call last): 2020-06-25 07:21:24,859 33 ERROR devel odoo.addons.contract.tests.test_contract: ` File "/opt/odoo/auto/addons/contract/tests/test_contract.py", line 2513, in test_multicompany_partner_edited 2020-06-25 07:21:24,859 33 ERROR devel odoo.addons.contract.tests.test_contract: ` 'parent_id': parent_partner.id, 2020-06-25 07:21:24,859 33 ERROR devel odoo.addons.contract.tests.test_contract: ` File "/opt/odoo/auto/addons/partner_autocomplete/models/res_partner.py", line 183, in write 2020-06-25 07:21:24,860 33 ERROR devel odoo.addons.contract.tests.test_contract: ` res = super(ResPartner, self).write(values) 2020-06-25 07:21:24,860 33 ERROR devel odoo.addons.contract.tests.test_contract: ` File "/opt/odoo/custom/src/odoo/odoo/addons/base/models/res_partner.py", line 570, in write 2020-06-25 07:21:24,860 33 ERROR devel odoo.addons.contract.tests.test_contract: ` result = result and super(Partner, self).write(vals) 2020-06-25 07:21:24,860 33 ERROR devel odoo.addons.contract.tests.test_contract: ` File "/opt/odoo/auto/addons/mail/models/mail_thread.py", line 321, in write 2020-06-25 07:21:24,860 33 ERROR devel odoo.addons.contract.tests.test_contract: ` result = super(MailThread, self).write(values) 2020-06-25 07:21:24,860 33 ERROR devel odoo.addons.contract.tests.test_contract: ` File "/opt/odoo/auto/addons/mail/models/mail_activity.py", line 613, in write 2020-06-25 07:21:24,860 33 ERROR devel odoo.addons.contract.tests.test_contract: ` return super(MailActivityMixin, self).write(vals) 2020-06-25 07:21:24,860 33 ERROR devel odoo.addons.contract.tests.test_contract: ` File "/opt/odoo/custom/src/odoo/odoo/models.py", line 3381, in write 2020-06-25 07:21:24,860 33 ERROR devel odoo.addons.contract.tests.test_contract: ` self.recompute() 2020-06-25 07:21:24,860 33 ERROR devel odoo.addons.contract.tests.test_contract: ` File "/opt/odoo/custom/src/odoo/odoo/models.py", line 5308, in recompute 2020-06-25 07:21:24,860 33 ERROR devel odoo.addons.contract.tests.test_contract: ` target._write(dict(vals)) 2020-06-25 07:21:24,860 33 ERROR devel odoo.addons.contract.tests.test_contract: ` File "/opt/odoo/custom/src/odoo/odoo/models.py", line 3433, in _write 2020-06-25 07:21:24,860 33 ERROR devel odoo.addons.contract.tests.test_contract: ` self.check_access_rule('write') 2020-06-25 07:21:24,860 33 ERROR devel odoo.addons.contract.tests.test_contract: ` File "/opt/odoo/custom/src/odoo/odoo/models.py", line 3081, in check_access_rule 2020-06-25 07:21:24,860 33 ERROR devel odoo.addons.contract.tests.test_contract: ` + ' - ({} {}, {} {})'.format(_('Records:'), invalid.ids[:6], _('User:'), self._uid) 2020-06-25 07:21:24,861 33 ERROR devel odoo.addons.contract.tests.test_contract: ` odoo.exceptions.AccessError: ('The requested operation cannot be completed due to security restrictions. Please contact your system administrator.\n\n(Document type: Contract, Operation: write) - (Records: [101], User: 12)', None) ``` @Tecnativa TT24482 --- contract/__manifest__.py | 2 +- contract/i18n/am.po | 10 +++++----- contract/i18n/ar.po | 10 +++++----- contract/i18n/bg.po | 10 +++++----- contract/i18n/bs.po | 10 +++++----- contract/i18n/ca.po | 10 +++++----- contract/i18n/contract.pot | 10 +++++----- contract/i18n/cs.po | 10 +++++----- contract/i18n/da.po | 10 +++++----- contract/i18n/de.po | 10 +++++----- contract/i18n/el_GR.po | 10 +++++----- contract/i18n/en_GB.po | 10 +++++----- contract/i18n/es.po | 10 +++++----- contract/i18n/es_AR.po | 10 +++++----- contract/i18n/es_CL.po | 10 +++++----- contract/i18n/es_CO.po | 10 +++++----- contract/i18n/es_CR.po | 10 +++++----- contract/i18n/es_DO.po | 10 +++++----- contract/i18n/es_EC.po | 10 +++++----- contract/i18n/es_ES.po | 10 +++++----- contract/i18n/es_MX.po | 10 +++++----- contract/i18n/es_PY.po | 10 +++++----- contract/i18n/es_VE.po | 10 +++++----- contract/i18n/et.po | 10 +++++----- contract/i18n/eu.po | 10 +++++----- contract/i18n/fa.po | 10 +++++----- contract/i18n/fi.po | 10 +++++----- contract/i18n/fr.po | 10 +++++----- contract/i18n/fr_CA.po | 10 +++++----- contract/i18n/fr_CH.po | 10 +++++----- contract/i18n/gl.po | 10 +++++----- contract/i18n/gl_ES.po | 10 +++++----- contract/i18n/he.po | 10 +++++----- contract/i18n/hi_IN.po | 10 +++++----- contract/i18n/hr.po | 10 +++++----- contract/i18n/hr_HR.po | 10 +++++----- contract/i18n/hu.po | 10 +++++----- contract/i18n/id.po | 10 +++++----- contract/i18n/it.po | 10 +++++----- contract/i18n/ja.po | 10 +++++----- contract/i18n/ko.po | 10 +++++----- contract/i18n/lt.po | 10 +++++----- contract/i18n/lt_LT.po | 10 +++++----- contract/i18n/lv.po | 10 +++++----- contract/i18n/mk.po | 10 +++++----- contract/i18n/mn.po | 10 +++++----- contract/i18n/nb.po | 10 +++++----- contract/i18n/nb_NO.po | 10 +++++----- contract/i18n/nl.po | 10 +++++----- contract/i18n/nl_BE.po | 10 +++++----- contract/i18n/nl_NL.po | 10 +++++----- contract/i18n/pl.po | 10 +++++----- contract/i18n/pt.po | 10 +++++----- contract/i18n/pt_BR.po | 18 +++++++++--------- contract/i18n/pt_PT.po | 10 +++++----- contract/i18n/ro.po | 10 +++++----- contract/i18n/ru.po | 10 +++++----- contract/i18n/sk.po | 10 +++++----- contract/i18n/sk_SK.po | 10 +++++----- contract/i18n/sl.po | 10 +++++----- contract/i18n/sr.po | 10 +++++----- contract/i18n/sr@latin.po | 10 +++++----- contract/i18n/sv.po | 10 +++++----- contract/i18n/th.po | 10 +++++----- contract/i18n/tr.po | 10 +++++----- contract/i18n/tr_TR.po | 10 +++++----- contract/i18n/uk.po | 10 +++++----- contract/i18n/vi.po | 10 +++++----- contract/i18n/vi_VN.po | 10 +++++----- contract/i18n/zh_CN.po | 10 +++++----- contract/i18n/zh_TW.po | 10 +++++----- contract/models/contract.py | 1 + contract/tests/test_contract.py | 25 +++++++++++++++++++++++++ 73 files changed, 381 insertions(+), 355 deletions(-) diff --git a/contract/__manifest__.py b/contract/__manifest__.py index 95667771b..c2a68fe6b 100644 --- a/contract/__manifest__.py +++ b/contract/__manifest__.py @@ -9,7 +9,7 @@ { 'name': 'Recurring - Contracts Management', - 'version': '12.0.7.2.1', + 'version': '12.0.7.2.2', 'category': 'Contract Management', 'license': 'AGPL-3', 'author': "OpenERP SA, " diff --git a/contract/i18n/am.po b/contract/i18n/am.po index d36e7b547..90c02eafc 100644 --- a/contract/i18n/am.po +++ b/contract/i18n/am.po @@ -388,7 +388,7 @@ msgid "Company" msgstr "" #. module: contract -#: code:addons/contract/models/contract.py:360 +#: code:addons/contract/models/contract.py:361 #, python-format msgid "Compose Email" msgstr "" @@ -602,7 +602,7 @@ msgid "Contract lines" msgstr "" #. module: contract -#: code:addons/contract/models/contract.py:502 +#: code:addons/contract/models/contract.py:503 #, python-format msgid "" "Contract manually invoiced: Invoice" msgstr "" @@ -1211,7 +1211,7 @@ msgid "Planned" msgstr "" #. module: contract -#: code:addons/contract/models/contract.py:318 +#: code:addons/contract/models/contract.py:319 #, python-format msgid "Please define a %s journal for the company '%s'." msgstr "" @@ -1523,7 +1523,7 @@ msgid "Technical field for UX purpose." msgstr "" #. module: contract -#: code:addons/contract/models/contract.py:530 +#: code:addons/contract/models/contract.py:531 #: model_terms:ir.ui.view,arch_db:contract.contract_contract_form_view #: model_terms:ir.ui.view,arch_db:contract.contract_contract_terminate_form_view #, python-format @@ -1720,7 +1720,7 @@ msgid "Year(s)" msgstr "" #. module: contract -#: code:addons/contract/models/contract.py:544 +#: code:addons/contract/models/contract.py:545 #, python-format msgid "You are not allowed to terminate contracts." msgstr "" diff --git a/contract/i18n/cs.po b/contract/i18n/cs.po index 680120080..af9c500c8 100644 --- a/contract/i18n/cs.po +++ b/contract/i18n/cs.po @@ -388,7 +388,7 @@ msgid "Company" msgstr "" #. module: contract -#: code:addons/contract/models/contract.py:360 +#: code:addons/contract/models/contract.py:361 #, python-format msgid "Compose Email" msgstr "" @@ -602,7 +602,7 @@ msgid "Contract lines" msgstr "" #. module: contract -#: code:addons/contract/models/contract.py:502 +#: code:addons/contract/models/contract.py:503 #, python-format msgid "" "Contract manually invoiced: \n" -"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/teams/" -"23907/pt_BR/)\n" +"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/" +"teams/23907/pt_BR/)\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -164,8 +164,8 @@ msgstr "" "\n" " contract to invoice\n" " \n" -" \n" +" \n" " contracts to invoice\n" " " @@ -469,7 +469,7 @@ msgid "Company" msgstr "Empresa" #. module: contract -#: code:addons/contract/models/contract.py:360 +#: code:addons/contract/models/contract.py:361 #, python-format msgid "Compose Email" msgstr "Escrever E-mail" @@ -706,7 +706,7 @@ msgid "Contract lines" msgstr "Linhas de Contrato" #. module: contract -#: code:addons/contract/models/contract.py:502 +#: code:addons/contract/models/contract.py:503 #, python-format msgid "" "Contract manually invoiced: