Tower: upload cetmix_tower_server 16.0.3.0.1 (via marketplace)
This commit is contained in:
101
addons/cetmix_tower_server/models/cx_tower_plan_line_action.py
Normal file
101
addons/cetmix_tower_server/models/cx_tower_plan_line_action.py
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
# Copyright (C) 2022 Cetmix OÜ
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
|
from odoo import _, api, fields, models
|
||||||
|
|
||||||
|
|
||||||
|
class CxTowerPlanLineAction(models.Model):
|
||||||
|
"""Flight Plan Line Action"""
|
||||||
|
|
||||||
|
_inherit = ["cx.tower.variable.mixin", "cx.tower.reference.mixin"]
|
||||||
|
_name = "cx.tower.plan.line.action"
|
||||||
|
_description = "Cetmix Tower Flight Plan Line Action"
|
||||||
|
|
||||||
|
active = fields.Boolean(default=True)
|
||||||
|
name = fields.Char(compute="_compute_name")
|
||||||
|
sequence = fields.Integer(default=10)
|
||||||
|
line_id = fields.Many2one(
|
||||||
|
comodel_name="cx.tower.plan.line", auto_join=True, ondelete="cascade"
|
||||||
|
)
|
||||||
|
plan_id = fields.Many2one(
|
||||||
|
comodel_name="cx.tower.plan",
|
||||||
|
related="line_id.plan_id",
|
||||||
|
store=True,
|
||||||
|
readonly=True,
|
||||||
|
)
|
||||||
|
condition = fields.Selection(
|
||||||
|
selection=[
|
||||||
|
("==", "=="),
|
||||||
|
("!=", "!="),
|
||||||
|
(">", ">"),
|
||||||
|
(">=", ">="),
|
||||||
|
("<", "<"),
|
||||||
|
("<=", "<="),
|
||||||
|
],
|
||||||
|
required=True,
|
||||||
|
)
|
||||||
|
value_char = fields.Char(string="Result", required=True)
|
||||||
|
action = fields.Selection(
|
||||||
|
selection=[
|
||||||
|
("e", "Exit with command exit code"),
|
||||||
|
("ec", "Exit with custom exit code"),
|
||||||
|
("n", "Run next command"),
|
||||||
|
],
|
||||||
|
required=True,
|
||||||
|
default="n",
|
||||||
|
)
|
||||||
|
custom_exit_code = fields.Integer(
|
||||||
|
help="Will be used instead of the command exit code"
|
||||||
|
)
|
||||||
|
access_level = fields.Selection(
|
||||||
|
related="line_id.access_level",
|
||||||
|
readonly=True,
|
||||||
|
store=True,
|
||||||
|
)
|
||||||
|
variable_value_ids = fields.One2many(
|
||||||
|
# Other field properties are defined in mixin
|
||||||
|
inverse_name="plan_line_action_id",
|
||||||
|
copy=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
@api.depends("condition", "action", "value_char")
|
||||||
|
def _compute_name(self):
|
||||||
|
action_selection_vals = dict(self._fields["action"].selection) # type: ignore
|
||||||
|
for rec in self:
|
||||||
|
# Some values are not updated until record is not saved.
|
||||||
|
# This is a disclaimer to avoid misunderstanding
|
||||||
|
if not isinstance(rec.id, int):
|
||||||
|
rec.name = _(
|
||||||
|
"...save record to see the final expression "
|
||||||
|
"or click the line to edit"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Compose name based on values
|
||||||
|
elif rec.condition and rec.action and rec.value_char:
|
||||||
|
action_string = action_selection_vals.get(rec.action)
|
||||||
|
|
||||||
|
# Add custom exit code if action presumes it
|
||||||
|
if rec.action == "ec":
|
||||||
|
action_string = f"{action_string} {rec.custom_exit_code}"
|
||||||
|
rec.name = " ".join(
|
||||||
|
(
|
||||||
|
_("If exit code"),
|
||||||
|
rec.condition,
|
||||||
|
rec.value_char,
|
||||||
|
_("then"),
|
||||||
|
action_string,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
rec.name = _("Wrong action")
|
||||||
|
|
||||||
|
def _get_dependent_model_relation_fields(self):
|
||||||
|
"""Check cx.tower.reference.mixin for the function documentation"""
|
||||||
|
res = super()._get_dependent_model_relation_fields()
|
||||||
|
return res + ["variable_value_ids"]
|
||||||
|
|
||||||
|
def _get_pre_populated_model_data(self):
|
||||||
|
"""Check cx.tower.reference.mixin for the function documentation"""
|
||||||
|
res = super()._get_pre_populated_model_data()
|
||||||
|
res.update({"cx.tower.plan.line.action": ["cx.tower.plan.line", "line_id"]})
|
||||||
|
return res
|
||||||
Reference in New Issue
Block a user