Tower: upload cetmix_tower_server 16.0.3.0.1 (via marketplace)
This commit is contained in:
91
addons/cetmix_tower_server/models/cx_tower_jet_state.py
Normal file
91
addons/cetmix_tower_server/models/cx_tower_jet_state.py
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
# 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 AccessError, ValidationError
|
||||||
|
|
||||||
|
|
||||||
|
class CxTowerJetState(models.Model):
|
||||||
|
"""Jet States represent the different states a jet can be in during its lifecycle"""
|
||||||
|
|
||||||
|
_name = "cx.tower.jet.state"
|
||||||
|
_description = "Cetmix Tower Jet State"
|
||||||
|
_inherit = ["cx.tower.reference.mixin", "cx.tower.access.mixin"]
|
||||||
|
_order = "sequence, id"
|
||||||
|
|
||||||
|
sequence = fields.Integer(default=10, required=True)
|
||||||
|
active = fields.Boolean(default=True)
|
||||||
|
color = fields.Integer()
|
||||||
|
note = fields.Text()
|
||||||
|
|
||||||
|
# Set default access level to User
|
||||||
|
access_level = fields.Selection(default="1")
|
||||||
|
|
||||||
|
def unlink(self):
|
||||||
|
"""
|
||||||
|
Do not allow to unlink a state
|
||||||
|
if it is used in any action
|
||||||
|
"""
|
||||||
|
actions = self.env["cx.tower.jet.action"].search(
|
||||||
|
[
|
||||||
|
"|",
|
||||||
|
"|",
|
||||||
|
("state_from_id", "in", self.ids),
|
||||||
|
("state_to_id", "in", self.ids),
|
||||||
|
("state_transit_id", "in", self.ids),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
if actions:
|
||||||
|
raise ValidationError(
|
||||||
|
_(
|
||||||
|
"Some states are still used in the following actions: %(actions)s"
|
||||||
|
"\nJet templates: %(templates)s",
|
||||||
|
actions=", ".join(set(actions.mapped("name"))),
|
||||||
|
templates=", ".join(set(actions.mapped("jet_template_id.name"))),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return super().unlink()
|
||||||
|
|
||||||
|
def set_state(self, jet=None):
|
||||||
|
"""Sets the state of the jet
|
||||||
|
|
||||||
|
Args:
|
||||||
|
jet (cx.tower.jet): Jet to set the state.
|
||||||
|
"""
|
||||||
|
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 state is set for a single jet
|
||||||
|
if not jet or len(jet) > 1:
|
||||||
|
raise ValidationError(_("State can be set only for a single jet"))
|
||||||
|
|
||||||
|
# Check access to the jet
|
||||||
|
jet.check_access_rights("read")
|
||||||
|
jet.check_access_rule("write")
|
||||||
|
|
||||||
|
# Get user access level
|
||||||
|
user_access_level = self.env.user._cetmix_tower_access_level()
|
||||||
|
|
||||||
|
# If user is manager but is not added as a manager to the jet,
|
||||||
|
# his access level is considered as user.
|
||||||
|
# NB: record access is already checked above.
|
||||||
|
if user_access_level == "2" and self.env.user not in jet.manager_ids:
|
||||||
|
user_access_level = "1"
|
||||||
|
|
||||||
|
# Check if user access level is equal or greater
|
||||||
|
if self.access_level > user_access_level:
|
||||||
|
raise AccessError(
|
||||||
|
_("You are not allowed to set the '%(state)s' state!", state=self.name)
|
||||||
|
)
|
||||||
|
|
||||||
|
# Bring the jet to the state
|
||||||
|
jet._bring_to_state(self)
|
||||||
Reference in New Issue
Block a user