Tower: upload cetmix_tower_server 16.0.2.2.9 (via marketplace)
This commit is contained in:
100
addons/cetmix_tower_server/models/cx_tower_shortcut.py
Normal file
100
addons/cetmix_tower_server/models/cx_tower_shortcut.py
Normal file
@@ -0,0 +1,100 @@
|
||||
# Copyright (C) 2024 Cetmix OÜ
|
||||
# License OPL-1 (https://apps.odoocdn.com/loempia/static/examples/LICENSE).
|
||||
from odoo import _, fields, models
|
||||
|
||||
|
||||
class CxTowerShortcut(models.Model):
|
||||
"""
|
||||
Cetmix Tower Shortcut.
|
||||
Used to run commands or flight plans with a single click.
|
||||
"""
|
||||
|
||||
_name = "cx.tower.shortcut"
|
||||
_inherit = ["cx.tower.access.mixin", "cx.tower.reference.mixin"]
|
||||
_description = "Cetmix Tower Shortcut"
|
||||
_order = "sequence, name"
|
||||
|
||||
active = fields.Boolean(default=True)
|
||||
sequence = fields.Integer(default=10)
|
||||
server_ids = fields.Many2many(
|
||||
string="Servers",
|
||||
comodel_name="cx.tower.server",
|
||||
relation="cx_tower_server_shortcut_rel",
|
||||
column1="shortcut_id",
|
||||
column2="server_id",
|
||||
)
|
||||
server_template_ids = fields.Many2many(
|
||||
string="Server Templates",
|
||||
comodel_name="cx.tower.server.template",
|
||||
relation="cx_tower_server_template_shortcut_rel",
|
||||
column1="shortcut_id",
|
||||
column2="server_template_id",
|
||||
)
|
||||
action = fields.Selection(
|
||||
selection=[("command", "Command"), ("plan", "Flight Plan")], required=True
|
||||
)
|
||||
command_id = fields.Many2one(comodel_name="cx.tower.command")
|
||||
use_sudo = fields.Boolean(
|
||||
help="Run command using 'sudo'",
|
||||
)
|
||||
plan_id = fields.Many2one(string="Flight Plan", comodel_name="cx.tower.plan")
|
||||
note = fields.Text()
|
||||
|
||||
def run(self, server=None):
|
||||
"""Runs related shortcut action
|
||||
|
||||
Args:
|
||||
server (cx.tower.server): Server to run the shortcut.
|
||||
"""
|
||||
self.ensure_one()
|
||||
|
||||
# Try to obtain server from context if not provided as an argument
|
||||
if server is None:
|
||||
server_id = self.env.context.get("server_id")
|
||||
|
||||
# Just return, no exceptions for now
|
||||
if not server_id:
|
||||
return
|
||||
|
||||
server = self.env["cx.tower.server"].browse(server_id)
|
||||
|
||||
# Just return, no exceptions for now
|
||||
if not server:
|
||||
return
|
||||
|
||||
# Use the first server record if several are passed
|
||||
if len(server) > 1:
|
||||
server = server[0]
|
||||
if self.action == "command" and self.command_id:
|
||||
server.run_command(self.sudo().command_id, sudo=self.use_sudo)
|
||||
elif self.action == "plan" and self.plan_id:
|
||||
server.run_flight_plan(self.sudo().plan_id)
|
||||
|
||||
# Notify
|
||||
return self._notify_on_run(server)
|
||||
|
||||
def _notify_on_run(self, server):
|
||||
"""Send notification when plan is triggered.
|
||||
Override to implement custom notifications.
|
||||
|
||||
Args:
|
||||
server (cx.tower.server()): Server action was triggered for
|
||||
|
||||
Returns:
|
||||
`ir.action.client`: Web client notification.
|
||||
"""
|
||||
self.ensure_one()
|
||||
|
||||
notification = {
|
||||
"type": "ir.actions.client",
|
||||
"tag": "display_notification",
|
||||
"params": {
|
||||
"title": _("%(shr)s triggered", shr=self.name),
|
||||
"message": _(
|
||||
"Check %(t)s log for result",
|
||||
t="flight plan" if self.action == "plan" else "command",
|
||||
),
|
||||
"sticky": False,
|
||||
},
|
||||
}
|
||||
return notification
|
||||
Reference in New Issue
Block a user