diff --git a/bi_sql_editor_server_actions/__init__.py b/bi_sql_editor_server_actions/__init__.py new file mode 100644 index 000000000..83e553ac4 --- /dev/null +++ b/bi_sql_editor_server_actions/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import models diff --git a/bi_sql_editor_server_actions/__manifest__.py b/bi_sql_editor_server_actions/__manifest__.py new file mode 100644 index 000000000..a386223c6 --- /dev/null +++ b/bi_sql_editor_server_actions/__manifest__.py @@ -0,0 +1,18 @@ +# Copyright (C) 2017 - Today: GRAP (http://www.grap.coop) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +{ + "name": "BI SQL Editor Server Actions", + "summary": "Add server actions on BI Views builder module", + "version": "13.0.1.0.1", + "license": "AGPL-3", + "category": "Reporting", + "author": "GRAP,Odoo Community Association (OCA)", + "website": "https://github.com/OCA/reporting-engine", + "depends": ["base", "bi_sql_editor"], + "data": ["views/ir_actions_server_view.xml", "views/view_bi_sql_view.xml"], + "demo": [], + "maintainers": ["vnahaulogy"], + "installable": True, +} diff --git a/bi_sql_editor_server_actions/models/__init__.py b/bi_sql_editor_server_actions/models/__init__.py new file mode 100644 index 000000000..45217529f --- /dev/null +++ b/bi_sql_editor_server_actions/models/__init__.py @@ -0,0 +1,4 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import ir_actions_server +from . import bi_sql_view diff --git a/bi_sql_editor_server_actions/models/bi_sql_view.py b/bi_sql_editor_server_actions/models/bi_sql_view.py new file mode 100644 index 000000000..c57e1f3cc --- /dev/null +++ b/bi_sql_editor_server_actions/models/bi_sql_view.py @@ -0,0 +1,37 @@ +# Copyright (C) 2017 - Today: GRAP (http://www.grap.coop) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import SUPERUSER_ID, _, api, fields, models + + +class BiSQLView(models.Model): + _name = "bi.sql.view" + _inherit = ["bi.sql.view"] + + server_action_ids = fields.Many2many( + comodel_name="ir.actions.server", + readonly=True, + states={"model_valid": [("readonly", False)]}, + ) + + def unlink(self): + if self.mapped("server_action_ids"): + self.mapped("server_action_ids").unlink() + return super(BiSQLView, self).unlink() + + def button_create_sql_view_and_model(self): + res = super(BiSQLView, self).button_create_sql_view_and_model() + for sql_view in self: + sql_view.server_action_ids.write({"model_id": sql_view.model_id.id}) + return res + + def button_set_draft(self): + self.mapped("server_action_ids").unlink_action() + # Avoid the on cascade delete + self.mapped("server_action_ids").write({"model_id": False}) + return super(BiSQLView, self).button_set_draft() + + def button_create_ui(self): + self.server_action_ids.create_action() + return super(BiSQLView, self).button_create_ui() diff --git a/bi_sql_editor_server_actions/models/ir_actions_server.py b/bi_sql_editor_server_actions/models/ir_actions_server.py new file mode 100644 index 000000000..8c2ec2819 --- /dev/null +++ b/bi_sql_editor_server_actions/models/ir_actions_server.py @@ -0,0 +1,11 @@ +# Copyright (C) 2017 - Today: GRAP (http://www.grap.coop) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import _, api, fields, models + + +class IrActionsServer(models.Model): + _inherit = "ir.actions.server" + + model_id = fields.Many2one(required=False) diff --git a/bi_sql_editor_server_actions/readme/CONTRIBUTORS.rst b/bi_sql_editor_server_actions/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..f33452656 --- /dev/null +++ b/bi_sql_editor_server_actions/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Nagy Valentin diff --git a/bi_sql_editor_server_actions/readme/DESCRIPTION.rst b/bi_sql_editor_server_actions/readme/DESCRIPTION.rst new file mode 100644 index 000000000..b2af36e53 --- /dev/null +++ b/bi_sql_editor_server_actions/readme/DESCRIPTION.rst @@ -0,0 +1,7 @@ +This module extends the functionality of bi_sql_editor module, to allow the addition +of server actions on the newly generated view. + +Warning +------- +This module will set the required parameter of the 'model_id' field on the server action object +to false. diff --git a/bi_sql_editor_server_actions/tests/__init__.py b/bi_sql_editor_server_actions/tests/__init__.py new file mode 100644 index 000000000..11418a695 --- /dev/null +++ b/bi_sql_editor_server_actions/tests/__init__.py @@ -0,0 +1,2 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from . import test_bi_sql_view_server_action diff --git a/bi_sql_editor_server_actions/tests/test_bi_sql_view_server_action.py b/bi_sql_editor_server_actions/tests/test_bi_sql_view_server_action.py new file mode 100644 index 000000000..90ef96975 --- /dev/null +++ b/bi_sql_editor_server_actions/tests/test_bi_sql_view_server_action.py @@ -0,0 +1,44 @@ +# Copyright 2017 Onestein () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo.exceptions import AccessError, UserError +from odoo.tests.common import SingleTransactionCase, at_install, post_install + + +@at_install(False) +@post_install(True) +class TestBiSqlViewEditorServerAction(SingleTransactionCase): + @classmethod + def setUpClass(cls): + super(TestBiSqlViewEditorServerAction, cls).setUpClass() + cls.bi_sql_view = cls.env["bi.sql.view"] + cls.ir_actions_server = cls.env["ir.actions.server"] + cls.server_action_ids = cls.ir_actions_server.create( + {"name": "x_server_action_name", "state": "code"} + ) + cls.view = cls.bi_sql_view.create( + { + "name": "Partners View 3", + "is_materialized": True, + "technical_name": "partners_view_3", + "query": "SELECT name as x_name, street as x_street," + "company_id as x_company_id FROM res_partner " + "ORDER BY name", + "server_action_ids": [(6, 0, cls.server_action_ids.ids)], + } + ) + + def test_server_actions_flow(self): + self.assertTrue(self.view.server_action_ids) + self.assertFalse(self.view.server_action_ids.model_id) + self.view.button_validate_sql_expression() + self.view.button_create_sql_view_and_model() + self.assertEqual(self.view.server_action_ids.model_id, self.view.model_id) + self.view.button_set_draft() + self.assertTrue(self.view.server_action_ids) + self.assertFalse(self.view.server_action_ids.model_id) + self.view.unlink() + server_action = self.ir_actions_server.search( + [("name", "=", "x_server_action_name")] + ) + self.assertEqual(len(server_action), 0, "Server action not deleted") diff --git a/bi_sql_editor_server_actions/views/ir_actions_server_view.xml b/bi_sql_editor_server_actions/views/ir_actions_server_view.xml new file mode 100644 index 000000000..74135bece --- /dev/null +++ b/bi_sql_editor_server_actions/views/ir_actions_server_view.xml @@ -0,0 +1,18 @@ + + + + + ir.actions.server.inherited.form + ir.actions.server + + + + True + + + + diff --git a/bi_sql_editor_server_actions/views/view_bi_sql_view.xml b/bi_sql_editor_server_actions/views/view_bi_sql_view.xml new file mode 100644 index 000000000..d443856c6 --- /dev/null +++ b/bi_sql_editor_server_actions/views/view_bi_sql_view.xml @@ -0,0 +1,23 @@ + + + + + bi.sql.action.server.view.form + bi.sql.view + + + + + + + + + +