[ADD] report_carbone, jsonifier, export_json : carbone is an alternative to Py3o
This commit is contained in:
59
report_carbone/models/base/ir_exports.py
Normal file
59
report_carbone/models/base/ir_exports.py
Normal file
@@ -0,0 +1,59 @@
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class IrExportsCarbone(models.Model):
|
||||
_inherit = "ir.exports"
|
||||
|
||||
is_global_export = fields.Boolean(string="Global Export")
|
||||
|
||||
|
||||
class IrExportsLineCarbone(models.Model):
|
||||
_inherit = "ir.exports.line"
|
||||
|
||||
field_label = fields.Char(string="Field label", help="Name render in model view", compute="_compute_field_label")
|
||||
|
||||
def _get_fields_model_data(self, model_name: str):
|
||||
model = self.env[model_name]
|
||||
return model.fields_get(attributes=["string", "relation"])
|
||||
|
||||
def _get_fields_model_data(self, model_name: str):
|
||||
model = self.env[model_name]
|
||||
return model.fields_get(attributes=["string", "relation"])
|
||||
|
||||
def _get_field_label_recursive(self, field_path, current_model):
|
||||
"""
|
||||
Recursively retrieves the label of a field for relations
|
||||
:param field_path: Field path (ex: 'company_id/name' ou 'partner_id/country_id/name')
|
||||
:param current_model: Current model name
|
||||
:return: Field label
|
||||
"""
|
||||
path_parts = field_path.split("/")
|
||||
fields = self._get_fields_model_data(current_model)
|
||||
current_field = path_parts[0]
|
||||
|
||||
field_info = fields.get(current_field)
|
||||
if not field_info:
|
||||
return field_path
|
||||
|
||||
if len(path_parts) == 1:
|
||||
return field_info.get("string", current_field)
|
||||
|
||||
relation_model = field_info.get("relation")
|
||||
if not relation_model:
|
||||
return field_path
|
||||
|
||||
remaining_path = "/".join(path_parts[1:])
|
||||
return self._get_field_label_recursive(remaining_path, relation_model)
|
||||
|
||||
def _compute_field_label(self):
|
||||
for rec in self:
|
||||
field_label = ""
|
||||
current_model = self.export_id.resource
|
||||
fields = self._get_fields_model_data(current_model)
|
||||
if rec.name and "/" in rec.name:
|
||||
field_label = self._get_field_label_recursive(rec.name, current_model)
|
||||
else:
|
||||
field_get_information_field = fields.get(rec.name)
|
||||
if field_get_information_field:
|
||||
field_label = field_get_information_field.get("string")
|
||||
rec.field_label = field_label
|
||||
Reference in New Issue
Block a user