diff --git a/odoo/addons/base/i18n/base.pot b/odoo/addons/base/i18n/base.pot index 424adb8a8e7..41b75b2d060 100644 --- a/odoo/addons/base/i18n/base.pot +++ b/odoo/addons/base/i18n/base.pot @@ -31475,6 +31475,14 @@ msgstr "" #. module: base #. odoo-python +#: code:addons/base/models/res_lang.py:0 +#, python-format +msgid "" +"You cannot archive the language in which Odoo was setup as it is used by " +"automated processes." +msgstr "" + +#. module: base #: code:addons/base/models/res_partner.py:0 #, python-format msgid "You cannot create recursive Partner hierarchies." diff --git a/odoo/addons/base/models/res_lang.py b/odoo/addons/base/models/res_lang.py index ff8ae31778b..0ebfd61f430 100644 --- a/odoo/addons/base/models/res_lang.py +++ b/odoo/addons/base/models/res_lang.py @@ -292,10 +292,12 @@ class Lang(models.Model): if 'code' in vals and any(code != vals['code'] for code in lang_codes): raise UserError(_("Language code cannot be modified.")) if vals.get('active') == False: - if self.env['res.users'].search_count([('lang', 'in', lang_codes)]): + if self.env['res.users'].with_context(active_test=True).search_count([('lang', 'in', lang_codes)], limit=1): raise UserError(_("Cannot deactivate a language that is currently used by users.")) - if self.env['res.partner'].search_count([('lang', 'in', lang_codes)]): + if self.env['res.partner'].with_context(active_test=True).search_count([('lang', 'in', lang_codes)], limit=1): raise UserError(_("Cannot deactivate a language that is currently used by contacts.")) + if self.env['res.users'].with_context(active_test=False).search_count([('lang', 'in', lang_codes)], limit=1): + raise UserError(_("You cannot archive the language in which Odoo was setup as it is used by automated processes.")) # delete linked ir.default specifying default partner's language self.env['ir.default'].discard_values('res.partner', 'lang', lang_codes) diff --git a/odoo/addons/base/tests/test_res_lang.py b/odoo/addons/base/tests/test_res_lang.py index 3f6cf27b64e..bf42748e225 100644 --- a/odoo/addons/base/tests/test_res_lang.py +++ b/odoo/addons/base/tests/test_res_lang.py @@ -2,6 +2,7 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. from odoo.tests.common import TransactionCase +from odoo.exceptions import UserError class test_res_lang(TransactionCase): @@ -40,3 +41,21 @@ class test_res_lang(TransactionCase): assert intersperse("abc12", [3], '.') == ('abc12', 0) assert intersperse("abc12", [2], '.') == ('abc12', 0) assert intersperse("abc12", [1], '.') == ('abc1.2', 1) + + def test_inactive_users_lang_deactivation(self): + # activate the language en_GB + language = self.env['res.lang']._activate_lang('en_GB') + + # assign it to an inactive (new) user + user = self.env['res.users'].create({ + 'name': 'Foo', + 'login': 'foo@example.com', + 'lang': 'en_GB', + 'active': False, + }) + + # make sure it is only used by that user + self.assertEqual(self.env['res.users'].with_context(active_test=False).search([('lang', '=', 'en_GB')]), user) + + with self.assertRaises(UserError): + language.active = False