From 7f15ee59653bdfc20ed8ecaaf21f3d5d2d0a1d88 Mon Sep 17 00:00:00 2001 From: paso-odoo Date: Tue, 18 Apr 2023 06:41:10 +0000 Subject: [PATCH] [FIX] spreadsheet_dashboard: fix external id not found issue in spreadsheet MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If applied, this commit will solve the 'external id not found' issue while the user had deleted the 'Logistics' dashboard and then install or upgrade the spreadsheet modules. Steps to produce: - Open the 'Logistics' dashboard from Spreadsheet > Configuration > Dashboards. - Delete all 'Spreadsheet' from Logistics. - Now delete the 'Logistics' dashboard from the action. - Install or Upgrade modules that are using that dashboard like spreadsheet_dashboard_stock, spreadsheet_dashboard_purchase, etc. sentry - 4083977216 see - https://tinyurl.com/2az3tqtv closes odoo/odoo#120528 X-original-commit: 9b295f5e478fc7b9a888ca07de267f0537fb02ae Signed-off-by: Lucas Lefèvre (lul) Signed-off-by: Parth Solanki (paso) --- .../i18n/spreadsheet_dashboard.pot | 7 +++++++ .../models/spreadsheet_dashboard_group.py | 11 ++++++++++- .../tests/test_spreadsheet_dashboard.py | 14 ++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) 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()