Tower: upload cetmix_tower_server 16.0.3.0.1 (via marketplace)
This commit is contained in:
82
addons/cetmix_tower_server/models/cx_tower_variable_mixin.py
Normal file
82
addons/cetmix_tower_server/models/cx_tower_variable_mixin.py
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
# Copyright (C) 2022 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 TowerVariableMixin(models.AbstractModel):
|
||||||
|
"""Used to implement variables and variable values.
|
||||||
|
Inherit in your model if you want to use variables in it.
|
||||||
|
"""
|
||||||
|
|
||||||
|
_name = "cx.tower.variable.mixin"
|
||||||
|
_description = "Tower Variables mixin"
|
||||||
|
|
||||||
|
variable_value_ids = fields.One2many(
|
||||||
|
string="Variable Values",
|
||||||
|
comodel_name="cx.tower.variable.value",
|
||||||
|
auto_join=True,
|
||||||
|
help="Variable values for selected record",
|
||||||
|
)
|
||||||
|
|
||||||
|
def get_variable_value(self, variable_reference, no_fallback=False):
|
||||||
|
"""Get the value of a variable.
|
||||||
|
IMPORTANT: This is the generic method that returns the value of the variable
|
||||||
|
for the current record.
|
||||||
|
It doesn't evaluate fallback values,eg "jet->template->server->global".
|
||||||
|
Inherit and override this method to implement a proper value parsing logic.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
variable_reference (str): The reference of the variable to get the value for
|
||||||
|
no_fallback (bool): If True, return current record value
|
||||||
|
without checking fallback values.
|
||||||
|
Returns:
|
||||||
|
str: The value of the variable for the current record or None
|
||||||
|
"""
|
||||||
|
self.ensure_one()
|
||||||
|
|
||||||
|
# Get the variable value for the current record
|
||||||
|
variable_value = self.variable_value_ids.filtered(
|
||||||
|
lambda v: v.variable_reference == variable_reference
|
||||||
|
)
|
||||||
|
if variable_value:
|
||||||
|
return variable_value.value_char
|
||||||
|
|
||||||
|
def set_variable_value(self, variable_reference, value):
|
||||||
|
"""Set the value of a variable.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
variable_reference (str): The reference of the variable to set the value for
|
||||||
|
value (str): The value to set for the variable
|
||||||
|
"""
|
||||||
|
self.ensure_one()
|
||||||
|
|
||||||
|
# Check if the variable value exists and update it
|
||||||
|
variable_value = self.variable_value_ids.filtered(
|
||||||
|
lambda v: v.variable_reference == variable_reference
|
||||||
|
)
|
||||||
|
if variable_value:
|
||||||
|
# Do nothing if the value is the same
|
||||||
|
if variable_value.value_char == value:
|
||||||
|
return
|
||||||
|
variable_value.value_char = value
|
||||||
|
return
|
||||||
|
|
||||||
|
# Get the variable
|
||||||
|
variable = self.env["cx.tower.variable"].get_by_reference(variable_reference)
|
||||||
|
if not variable:
|
||||||
|
raise ValidationError(
|
||||||
|
_(
|
||||||
|
"Variable '%(variable_reference)s' not found",
|
||||||
|
variable_reference=variable_reference,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
# Create a new variable value
|
||||||
|
self.write(
|
||||||
|
{
|
||||||
|
"variable_value_ids": [
|
||||||
|
(0, 0, {"variable_id": variable.id, "value_char": value})
|
||||||
|
]
|
||||||
|
}
|
||||||
|
)
|
||||||
Reference in New Issue
Block a user