From 9bcfb5c8d8dc2296a37b9b99ec1a0ea771d53977 Mon Sep 17 00:00:00 2001 From: jvm-odoo Date: Wed, 22 Apr 2020 06:51:15 +0000 Subject: [PATCH] [FIX] project: prevent changing company_id of an analytic account Issue - Have 2 company - Install Timesheet, Accounting, Project - Enable analytic accounting - Accounting > Settings > Analytic accounts - Remove the company_id of one of them which is linked to a project - Timesheet > add a line for this project Error Cause Timesheets lines are linked to a company and a project Removing the company_id of the project's analytic account create an inconsistency Solution Prevent changing the company_id of an analytic account which is linked to a project. OPW-2233266 closes odoo/odoo#50039 X-original-commit: 4895fb5029f492faf31b28b648e56ded8b3a83fb Signed-off-by: Jason Van Malder (jvm) --- addons/project/i18n/project.pot | 8 ++++++++ addons/project/models/analytic_account.py | 6 ++++++ 2 files changed, 14 insertions(+) diff --git a/addons/project/i18n/project.pot b/addons/project/i18n/project.pot index 323a2b5ad01..fd7341d2cae 100644 --- a/addons/project/i18n/project.pot +++ b/addons/project/i18n/project.pot @@ -3210,6 +3210,14 @@ msgid "" " and purpose of the stage." msgstr "" +#. module: project +#: code:addons/project/models/analytic_account.py:0 +#, python-format +msgid "" +"You cannot change the company of an analytical account if it is related to a" +" project." +msgstr "" + #. module: project #: code:addons/project/models/project.py:0 #, python-format diff --git a/addons/project/models/analytic_account.py b/addons/project/models/analytic_account.py index 794f882c318..5ff33265efa 100644 --- a/addons/project/models/analytic_account.py +++ b/addons/project/models/analytic_account.py @@ -19,6 +19,12 @@ class AccountAnalyticAccount(models.Model): for account in self: account.project_count = mapping.get(account.id, 0) + @api.constrains('company_id') + def _check_company_id(self): + for record in self: + if record.project_ids: + raise UserError(_('You cannot change the company of an analytical account if it is related to a project.')) + def unlink(self): projects = self.env['project.project'].search([('analytic_account_id', 'in', self.ids)]) has_tasks = self.env['project.task'].search_count([('project_id', 'in', projects.ids)])