diff --git a/addons/spreadsheet_dashboard/i18n/spreadsheet_dashboard.pot b/addons/spreadsheet_dashboard/i18n/spreadsheet_dashboard.pot index 91d94d264e8..98fe3c697bb 100644 --- a/addons/spreadsheet_dashboard/i18n/spreadsheet_dashboard.pot +++ b/addons/spreadsheet_dashboard/i18n/spreadsheet_dashboard.pot @@ -196,3 +196,10 @@ msgstr "" #: model:spreadsheet.dashboard.group,name:spreadsheet_dashboard.spreadsheet_dashboard_group_website msgid "Website" msgstr "" + +#. module: spreadsheet_dashboard +#. odoo-python +#: code:addons/spreadsheet_dashboard/models/spreadsheet_dashboard_group.py:0 +#, python-format +msgid "You cannot delete %s as it is used in another module." +msgstr "" diff --git a/addons/spreadsheet_dashboard/models/spreadsheet_dashboard_group.py b/addons/spreadsheet_dashboard/models/spreadsheet_dashboard_group.py index c5de8e1c437..d007ed79313 100644 --- a/addons/spreadsheet_dashboard/models/spreadsheet_dashboard_group.py +++ b/addons/spreadsheet_dashboard/models/spreadsheet_dashboard_group.py @@ -1,4 +1,5 @@ -from odoo import fields, models +from odoo import fields, models, api, _ +from odoo.exceptions import UserError class SpreadsheetDashboardGroup(models.Model): @@ -9,3 +10,11 @@ class SpreadsheetDashboardGroup(models.Model): name = fields.Char(required=True, translate=True) dashboard_ids = fields.One2many('spreadsheet.dashboard', 'dashboard_group_id') sequence = fields.Integer() + + @api.ondelete(at_uninstall=False) + def _unlink_except_spreadsheet_data(self): + external_ids = self.get_external_id() + for group in self: + external_id = external_ids[group.id] + if external_id and not external_id.startswith('__export__'): + raise UserError(_("You cannot delete %s as it is used in another module.", group.name)) diff --git a/addons/spreadsheet_dashboard/tests/test_spreadsheet_dashboard.py b/addons/spreadsheet_dashboard/tests/test_spreadsheet_dashboard.py index 5a92107357f..85da41a5784 100644 --- a/addons/spreadsheet_dashboard/tests/test_spreadsheet_dashboard.py +++ b/addons/spreadsheet_dashboard/tests/test_spreadsheet_dashboard.py @@ -1,4 +1,5 @@ from odoo.tests.common import TransactionCase +from odoo.exceptions import UserError class TestSpreadsheetDashboard(TransactionCase): @@ -17,3 +18,16 @@ class TestSpreadsheetDashboard(TransactionCase): dashboard.spreadsheet_data, '{"version": 1, "sheets": [{"id": "sheet1", "name": "Sheet1"}]}', ) + + def test_unlink_prevent_spreadsheet_group(self): + group = self.env["spreadsheet.dashboard.group"].create( + {"name": "a_group"} + ) + self.env['ir.model.data'].create({ + 'name': group.name, + 'module': 'spreadsheet_dashboard', + 'model': group._name, + 'res_id': group.id, + }) + with self.assertRaises(UserError, msg="You cannot delete a_group as it is used in another module"): + group.unlink()