Tower: upload cetmix_tower_server 16.0.3.0.1 (via marketplace)
This commit is contained in:
100
addons/cetmix_tower_server/models/cx_tower_jet_action.py
Normal file
100
addons/cetmix_tower_server/models/cx_tower_jet_action.py
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
# Copyright (C) 2024 Cetmix OÜ
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
|
from odoo import _, fields, models
|
||||||
|
from odoo.exceptions import ValidationError
|
||||||
|
|
||||||
|
|
||||||
|
class CxTowerJetAction(models.Model):
|
||||||
|
"""Jet Actions represent transitions between states in a jet's lifecycle"""
|
||||||
|
|
||||||
|
_name = "cx.tower.jet.action"
|
||||||
|
_description = "Cetmix Tower Jet Action"
|
||||||
|
_inherit = ["cx.tower.reference.mixin", "cx.tower.access.mixin"]
|
||||||
|
_order = "priority, id"
|
||||||
|
|
||||||
|
active = fields.Boolean(related="jet_template_id.active", readonly=True)
|
||||||
|
priority = fields.Integer(default=10, required=True)
|
||||||
|
jet_template_id = fields.Many2one(
|
||||||
|
comodel_name="cx.tower.jet.template",
|
||||||
|
string="Jet Template",
|
||||||
|
help="Jet template that this action belongs to",
|
||||||
|
ondelete="cascade",
|
||||||
|
)
|
||||||
|
color = fields.Integer(related="state_to_id.color", readonly=True)
|
||||||
|
note = fields.Text()
|
||||||
|
|
||||||
|
# -- State Transitions
|
||||||
|
state_from_id = fields.Many2one(
|
||||||
|
comodel_name="cx.tower.jet.state",
|
||||||
|
string="From State",
|
||||||
|
help="Source state for this transition. Leave blank for an initial state",
|
||||||
|
ondelete="restrict",
|
||||||
|
)
|
||||||
|
|
||||||
|
state_transit_id = fields.Many2one(
|
||||||
|
comodel_name="cx.tower.jet.state",
|
||||||
|
string="Transit State",
|
||||||
|
required=True,
|
||||||
|
help="Intermediate state during the transition",
|
||||||
|
ondelete="restrict",
|
||||||
|
)
|
||||||
|
|
||||||
|
state_to_id = fields.Many2one(
|
||||||
|
comodel_name="cx.tower.jet.state",
|
||||||
|
string="To State",
|
||||||
|
help="Destination state for this transition. Leave blank for a final state",
|
||||||
|
ondelete="restrict",
|
||||||
|
)
|
||||||
|
|
||||||
|
state_error_id = fields.Many2one(
|
||||||
|
comodel_name="cx.tower.jet.state",
|
||||||
|
string="Error State",
|
||||||
|
help="State to transition to if an error occurs",
|
||||||
|
ondelete="restrict",
|
||||||
|
)
|
||||||
|
|
||||||
|
plan_id = fields.Many2one(
|
||||||
|
string="Flight Plan",
|
||||||
|
comodel_name="cx.tower.plan",
|
||||||
|
help="Flight plan to execute when this action is triggered",
|
||||||
|
)
|
||||||
|
|
||||||
|
# TODO: ensure that all actions belong to the same jet template
|
||||||
|
|
||||||
|
def trigger(self, jet=None):
|
||||||
|
"""Trigger jet action on a given jet.
|
||||||
|
If jet is not provided, the action will be triggered on the jet
|
||||||
|
in the context key "jet_id".
|
||||||
|
|
||||||
|
Args:
|
||||||
|
jet (cx.tower.jet): Jet to trigger the action.
|
||||||
|
"""
|
||||||
|
self.ensure_one()
|
||||||
|
|
||||||
|
# Try to obtain jet from context if not provided as an argument
|
||||||
|
if jet is None:
|
||||||
|
jet_id = self.env.context.get("jet_id")
|
||||||
|
|
||||||
|
# Just return, no exceptions for now
|
||||||
|
if not jet_id:
|
||||||
|
return
|
||||||
|
|
||||||
|
jet = self.env["cx.tower.jet"].browse(jet_id)
|
||||||
|
|
||||||
|
# Ensure that the action is for a single jet
|
||||||
|
if not jet or len(jet) > 1:
|
||||||
|
raise ValidationError(_("Action can be triggered only for a single jet"))
|
||||||
|
|
||||||
|
# Trigger the action
|
||||||
|
jet._trigger_action(self)
|
||||||
|
|
||||||
|
# ------------------------------
|
||||||
|
# Reference mixin methods
|
||||||
|
# ------------------------------
|
||||||
|
def _get_pre_populated_model_data(self):
|
||||||
|
res = super()._get_pre_populated_model_data()
|
||||||
|
res.update(
|
||||||
|
{"cx.tower.jet.action": ["cx.tower.jet.template", "jet_template_id"]}
|
||||||
|
)
|
||||||
|
return res
|
||||||
Reference in New Issue
Block a user