diff --git a/server_action_navigate/__manifest__.py b/server_action_navigate/__manifest__.py
index 12d8164b8..14a1affa8 100644
--- a/server_action_navigate/__manifest__.py
+++ b/server_action_navigate/__manifest__.py
@@ -12,9 +12,6 @@
"license": "AGPL-3",
"depends": ["base"],
"maintainers": ["legalsylvain"],
- "data": [
- "security/ir.model.access.csv",
- "views/view_ir_actions_server.xml",
- ],
+ "data": ["security/ir.model.access.csv", "views/view_ir_actions_server.xml"],
"demo": ["demo/ir_actions_server.xml"],
}
diff --git a/server_action_navigate/demo/ir_actions_server.xml b/server_action_navigate/demo/ir_actions_server.xml
index f5e0ce01f..f04aecd23 100644
--- a/server_action_navigate/demo/ir_actions_server.xml
+++ b/server_action_navigate/demo/ir_actions_server.xml
@@ -1,32 +1,26 @@
-
+
-
-
See tags of Partners
navigate
-
+
-
-
+
1
-
+
-
-
+
2
-
+
-
-
+
-
diff --git a/server_action_navigate/models/ir_actions_server.py b/server_action_navigate/models/ir_actions_server.py
index d22c1f2ec..5395cbba8 100644
--- a/server_action_navigate/models/ir_actions_server.py
+++ b/server_action_navigate/models/ir_actions_server.py
@@ -13,25 +13,29 @@ class IrActionsServer(models.Model):
navigate_action_id = fields.Many2one(
string="Navigation Action",
- comodel_name='ir.actions.act_window',
+ comodel_name="ir.actions.act_window",
domain="[('res_model', '=', max_navigate_line_model)]",
help="Define here the action used when the navigation will be executed"
- " if empty, a generic action will be used.")
+ " if empty, a generic action will be used.",
+ )
navigate_line_ids = fields.One2many(
comodel_name="ir.actions.server.navigate.line",
- string="Navigate Lines", inverse_name="action_id")
+ string="Navigate Lines",
+ inverse_name="action_id",
+ )
max_navigate_line_sequence = fields.Integer(
- string='Max Navigate sequence in lines',
- compute='_compute_max_navigate_line',
- store=True
+ string="Max Navigate sequence in lines",
+ compute="_compute_max_navigate_line",
+ store=True,
)
max_navigate_line_model = fields.Char(
string="Max Navigate Model in lines",
compute="_compute_max_navigate_line",
- store=True)
+ store=True,
+ )
@api.depends("navigate_line_ids", "model_id")
def _compute_max_navigate_line(self):
@@ -43,11 +47,13 @@ class IrActionsServer(models.Model):
"""
for action in self:
action.max_navigate_line_sequence = (
- max(action.mapped('navigate_line_ids.sequence') or [0]) + 1)
- action.max_navigate_line_model =\
- action.navigate_line_ids\
- and action.navigate_line_ids[-1].field_model\
+ max(action.mapped("navigate_line_ids.sequence") or [0]) + 1
+ )
+ action.max_navigate_line_model = (
+ action.navigate_line_ids
+ and action.navigate_line_ids[-1].field_model
or action.model_id.model
+ )
def delete_last_line(self):
self.ensure_one()
@@ -56,34 +62,34 @@ class IrActionsServer(models.Model):
@api.model
def run_action_navigate_multi(self, action, eval_context=None):
- IrModel = self.env['ir.model']
+ IrModel = self.env["ir.model"]
lines = action.navigate_line_ids
if not lines:
- raise UserError(_(
- "The Action Server %s is not correctly set\n"
- " : No fields defined"))
+ raise UserError(
+ _("The Action Server %s is not correctly set\n" " : No fields defined")
+ )
mapped_field_value = ".".join(lines.mapped("field_id.name"))
- item_ids = eval_context['records'].mapped(mapped_field_value).ids
- domain = "[('id','in',[" + ','.join(map(str, item_ids)) + "])]"
+ item_ids = eval_context["records"].mapped(mapped_field_value).ids
+ domain = "[('id','in',[" + ",".join(map(str, item_ids)) + "])]"
# Use Defined action if defined
if action.navigate_action_id:
return_action = action.navigate_action_id
result = return_action.read()[0]
- result['domain'] = domain
+ result["domain"] = domain
else:
# Otherwise, return a default action
model_name = action.max_navigate_line_model
- model = IrModel.search([('model', '=', model_name)])
- view_mode = 'tree,form'
+ model = IrModel.search([("model", "=", model_name)])
+ view_mode = "tree,form"
result = {
- 'name': model.name,
- 'domain': domain,
- 'res_model': model_name,
- 'target': 'current',
- 'type': 'ir.actions.act_window',
- 'view_mode': view_mode,
+ "name": model.name,
+ "domain": domain,
+ "res_model": model_name,
+ "target": "current",
+ "type": "ir.actions.act_window",
+ "view_mode": view_mode,
}
return result
diff --git a/server_action_navigate/models/ir_actions_server_navigate_line.py b/server_action_navigate/models/ir_actions_server_navigate_line.py
index c56731eb7..72e02c290 100644
--- a/server_action_navigate/models/ir_actions_server_navigate_line.py
+++ b/server_action_navigate/models/ir_actions_server_navigate_line.py
@@ -12,33 +12,34 @@ class IrActionsServerNavigateLine(models.Model):
sequence = fields.Integer(string="Sequence", default=1)
- field_model = fields.Char(
- string="Model", related="field_id.relation", store=True)
+ field_model = fields.Char(string="Model", related="field_id.relation", store=True)
action_id = fields.Many2one(
- comodel_name="ir.actions.server", string="Action",
- required=True, ondelete="cascade")
+ comodel_name="ir.actions.server",
+ string="Action",
+ required=True,
+ ondelete="cascade",
+ )
field_id = fields.Many2one(
- comodel_name="ir.model.fields", string="Field",
- required=True)
+ comodel_name="ir.model.fields", string="Field", required=True
+ )
# when adding a record, onchange is called for every field on the
# form, also in editable list views
- @api.onchange('field_id')
+ @api.onchange("field_id")
def _onchange_field_id(self):
# check out the docstring of this in odoo/models.py
lines = self.action_id.resolve_2many_commands(
- 'navigate_line_ids',
- self.env.context.get('navigate_line_ids', []),
+ "navigate_line_ids", self.env.context.get("navigate_line_ids", []),
)
lines = sum(map(self.new, lines), self.browse([]))
model = lines[-1:].field_id.relation or self.action_id.model_id.model
return {
- 'domain': {
- 'field_id': [
- ('ttype', 'in', ['many2one', 'one2many', 'many2many']),
- ('model', '=', model),
+ "domain": {
+ "field_id": [
+ ("ttype", "in", ["many2one", "one2many", "many2many"]),
+ ("model", "=", model),
],
}
}
diff --git a/server_action_navigate/tests/test_module.py b/server_action_navigate/tests/test_module.py
index cb9257b62..aac624e46 100644
--- a/server_action_navigate/tests/test_module.py
+++ b/server_action_navigate/tests/test_module.py
@@ -3,50 +3,46 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo.tests.common import TransactionCase
-
from odoo.tools.safe_eval import safe_eval
class TestModule(TransactionCase):
-
def setUp(self):
super().setUp()
self.action_server = self.env.ref(
- "server_action_navigate.navigate_partner_2_tags")
+ "server_action_navigate.navigate_partner_2_tags"
+ )
self.users = self.env["res.users"].search([])
def test_action_result(self):
result = self.action_server.with_context(
- active_model="res.users",
- active_ids=self.users.ids).run()
+ active_model="res.users", active_ids=self.users.ids
+ ).run()
self.assertEqual(result.get("id", False), False)
- self.assertEqual(
- result.get('res_model', False), 'res.partner.category')
+ self.assertEqual(result.get("res_model", False), "res.partner.category")
self.assertEqual(
- safe_eval(result.get('domain', [])),
- [("id", "in", self.users.mapped("partner_id.category_id").ids)]
+ safe_eval(result.get("domain", [])),
+ [("id", "in", self.users.mapped("partner_id.category_id").ids)],
)
def test_delete_last_line(self):
line_qty = len(self.action_server.navigate_line_ids)
self.action_server.delete_last_line()
- self.assertEqual(
- line_qty - 1,
- len(self.action_server.navigate_line_ids)
- )
+ self.assertEqual(line_qty - 1, len(self.action_server.navigate_line_ids))
def test_action_navigate_with_action(self):
self.action_server.navigate_action_id = self.env.ref(
- "base.action_partner_category_form")
+ "base.action_partner_category_form"
+ )
result = self.action_server.with_context(
- active_model="res.users",
- active_ids=self.users.ids).run()
+ active_model="res.users", active_ids=self.users.ids
+ ).run()
self.assertEqual(
result.get("id", False),
self.env.ref("base.action_partner_category_form").id,
- )
+ )
diff --git a/server_action_navigate/views/view_ir_actions_server.xml b/server_action_navigate/views/view_ir_actions_server.xml
index 76114798f..21f028760 100644
--- a/server_action_navigate/views/view_ir_actions_server.xml
+++ b/server_action_navigate/views/view_ir_actions_server.xml
@@ -1,40 +1,55 @@
-
+
-
-
ir.actions.server
-
-
+
-
+
-
-
+
+
-
-
+
+
-
+
-
+
-
+
-