Tower: upload cetmix_tower_server 16.0.2.2.9 (via marketplace)
This commit is contained in:
149
addons/cetmix_tower_server/wizards/cx_tower_plan_run_wizard.py
Normal file
149
addons/cetmix_tower_server/wizards/cx_tower_plan_run_wizard.py
Normal file
@@ -0,0 +1,149 @@
|
|||||||
|
# Copyright (C) 2022 Cetmix OÜ
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
from odoo import _, api, fields, models
|
||||||
|
|
||||||
|
from ..models.tools import generate_random_id
|
||||||
|
|
||||||
|
|
||||||
|
class CxTowerPlanRunWizard(models.TransientModel):
|
||||||
|
"""
|
||||||
|
Wizard to run a flight plan on selected servers.
|
||||||
|
"""
|
||||||
|
|
||||||
|
_name = "cx.tower.plan.run.wizard"
|
||||||
|
_description = "Run Flight Plan in Wizard"
|
||||||
|
|
||||||
|
server_ids = fields.Many2many(
|
||||||
|
"cx.tower.server",
|
||||||
|
string="Servers",
|
||||||
|
)
|
||||||
|
plan_id = fields.Many2one(
|
||||||
|
string="Flight Plan",
|
||||||
|
comodel_name="cx.tower.plan",
|
||||||
|
required=True,
|
||||||
|
)
|
||||||
|
note = fields.Text(related="plan_id.note", readonly=True)
|
||||||
|
plan_domain = fields.Binary(
|
||||||
|
compute="_compute_plan_domain",
|
||||||
|
)
|
||||||
|
tag_ids = fields.Many2many(
|
||||||
|
comodel_name="cx.tower.tag",
|
||||||
|
string="Tags",
|
||||||
|
)
|
||||||
|
applicability = fields.Selection(
|
||||||
|
selection=[
|
||||||
|
("this", "For selected server(s)"),
|
||||||
|
("shared", "Non server restricted"),
|
||||||
|
],
|
||||||
|
default="shared",
|
||||||
|
required=True,
|
||||||
|
compute="_compute_show_servers",
|
||||||
|
readonly=False,
|
||||||
|
store=True,
|
||||||
|
help="Selected server(s): only Flight Plans that are specific"
|
||||||
|
" to the selected server(s)\n"
|
||||||
|
"Non server restricted: all Flight Plans that are "
|
||||||
|
"not specific to any server",
|
||||||
|
)
|
||||||
|
# Lines
|
||||||
|
plan_line_ids = fields.One2many(
|
||||||
|
string="Commands",
|
||||||
|
comodel_name="cx.tower.plan.line",
|
||||||
|
compute="_compute_plan_line_ids",
|
||||||
|
compute_sudo=True,
|
||||||
|
groups="cetmix_tower_server.group_manager",
|
||||||
|
)
|
||||||
|
show_servers = fields.Boolean(
|
||||||
|
compute="_compute_show_servers",
|
||||||
|
compute_sudo=True,
|
||||||
|
)
|
||||||
|
custom_variable_value_ids = fields.One2many(
|
||||||
|
"cx.tower.plan.run.wizard.variable.value",
|
||||||
|
"wizard_id",
|
||||||
|
)
|
||||||
|
|
||||||
|
@api.model
|
||||||
|
def default_get(self, fields_list):
|
||||||
|
res = super().default_get(fields_list)
|
||||||
|
if not self._is_privileged_user():
|
||||||
|
res["applicability"] = "this"
|
||||||
|
return res
|
||||||
|
|
||||||
|
@api.depends("server_ids")
|
||||||
|
def _compute_show_servers(self):
|
||||||
|
for rec in self:
|
||||||
|
rec.show_servers = bool(rec.server_ids and len(rec.server_ids) > 1)
|
||||||
|
|
||||||
|
@api.depends("plan_id")
|
||||||
|
def _compute_plan_line_ids(self):
|
||||||
|
"""Sel lines in wizard based on selected plan"""
|
||||||
|
for rec in self:
|
||||||
|
if rec.plan_id and rec.plan_id.line_ids:
|
||||||
|
rec.plan_line_ids = rec.plan_id.line_ids
|
||||||
|
else:
|
||||||
|
rec.plan_line_ids = None
|
||||||
|
|
||||||
|
@api.depends("applicability", "server_ids", "tag_ids")
|
||||||
|
def _compute_plan_domain(self):
|
||||||
|
"""Compose domain based on condition"""
|
||||||
|
for record in self:
|
||||||
|
domain = []
|
||||||
|
if record.applicability == "shared":
|
||||||
|
domain = [("server_ids", "=", False)]
|
||||||
|
elif record.applicability == "this":
|
||||||
|
domain.append(("server_ids", "in", record.server_ids.ids))
|
||||||
|
if record.tag_ids:
|
||||||
|
domain.append(("tag_ids", "in", record.tag_ids.ids))
|
||||||
|
record.plan_domain = domain
|
||||||
|
|
||||||
|
@api.onchange("applicability")
|
||||||
|
def _onchange_applicability(self):
|
||||||
|
"""Reset plan after change record type"""
|
||||||
|
self.plan_id = False
|
||||||
|
|
||||||
|
def run_flight_plan(self):
|
||||||
|
"""Run flight plan for selected servers"""
|
||||||
|
|
||||||
|
if self.plan_id and self.server_ids:
|
||||||
|
# Generate custom label. Will be used later to locate the command log
|
||||||
|
plan_label = generate_random_id(4)
|
||||||
|
# Add custom values for log
|
||||||
|
variable_values = {
|
||||||
|
value.variable_id.reference: value.value_char
|
||||||
|
for value in self.custom_variable_value_ids
|
||||||
|
}
|
||||||
|
custom_values = {
|
||||||
|
"plan_log": {"label": plan_label},
|
||||||
|
"variable_values": variable_values,
|
||||||
|
}
|
||||||
|
for server in self.server_ids:
|
||||||
|
server.run_flight_plan(self.plan_id, **custom_values)
|
||||||
|
return {
|
||||||
|
"type": "ir.actions.act_window",
|
||||||
|
"name": _("Plan Log"),
|
||||||
|
"res_model": "cx.tower.plan.log",
|
||||||
|
"view_mode": "tree,form",
|
||||||
|
"target": "current",
|
||||||
|
"context": {"search_default_label": plan_label},
|
||||||
|
}
|
||||||
|
|
||||||
|
def _is_privileged_user(self):
|
||||||
|
"""Return True if current user is in Manager or Root group."""
|
||||||
|
return self.env.user.has_group(
|
||||||
|
"cetmix_tower_server.group_manager"
|
||||||
|
) or self.env.user.has_group("cetmix_tower_server.group_root")
|
||||||
|
|
||||||
|
|
||||||
|
class CxTowerPlanRunWizardVariableValue(models.TransientModel):
|
||||||
|
"""
|
||||||
|
Custom variable values for flight plan run wizard
|
||||||
|
"""
|
||||||
|
|
||||||
|
_inherit = "cx.tower.custom.variable.value.mixin"
|
||||||
|
_name = "cx.tower.plan.run.wizard.variable.value"
|
||||||
|
_description = "Custom variable values for plan run wizard"
|
||||||
|
|
||||||
|
wizard_id = fields.Many2one(
|
||||||
|
"cx.tower.plan.run.wizard",
|
||||||
|
string="Wizard",
|
||||||
|
)
|
||||||
Reference in New Issue
Block a user