46 lines
1.4 KiB
Python
46 lines
1.4 KiB
Python
# Copyright (C) 2026 Cetmix OÜ
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
from odoo import api, fields, models
|
|
|
|
|
|
class CxTowerMetadataMixin(models.AbstractModel):
|
|
"""Used to implement metadata in models."""
|
|
|
|
_name = "cx.tower.metadata.mixin"
|
|
_description = "Cetmix Tower metadata mixin"
|
|
|
|
metadata = fields.Json(
|
|
help="Additional metadata for this record",
|
|
readonly=True,
|
|
groups="cetmix_tower_server.group_manager",
|
|
)
|
|
metadata_text = fields.Text(
|
|
help="Additional metadata for this record",
|
|
compute="_compute_metadata_text",
|
|
groups="cetmix_tower_server.group_manager",
|
|
)
|
|
|
|
@api.depends("metadata")
|
|
def _compute_metadata_text(self):
|
|
"""
|
|
Compute the metadata text for the record
|
|
"""
|
|
for record in self:
|
|
record.metadata_text = str(record.metadata) if record.metadata else False
|
|
|
|
def update_metadata(self, metadata):
|
|
"""
|
|
Updates the metadata for the record.
|
|
Preserves the existing metadata.
|
|
|
|
Args:
|
|
metadata (dict): The metadata to update the record with
|
|
|
|
Returns:
|
|
bool: True if the metadata was updated, False otherwise
|
|
"""
|
|
self.ensure_one()
|
|
# Preserve the existing data in self.metadata.
|
|
self.write({"metadata": {**(self.metadata or {}), **metadata}})
|
|
return True
|