69 lines
2.9 KiB
Python
Executable File
69 lines
2.9 KiB
Python
Executable File
# Copyright 2025 Tecnativa - Víctor Martínez
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
from odoo import api, models
|
|
from odoo.tools import html2plaintext
|
|
|
|
|
|
class MailTracking(models.Model):
|
|
_inherit = "mail.tracking.value"
|
|
|
|
# TODO: Remove if merged https://github.com/odoo/odoo/pull/156236
|
|
def _create_tracking_values_property(
|
|
self, initial_value, new_value, col_name, col_info, record
|
|
):
|
|
field = self.env["ir.model.fields"]._get(record._name, col_name)
|
|
field_info = {
|
|
"desc": f"{field.field_description}: {col_info['string']}",
|
|
"name": col_name,
|
|
"type": col_info["type"],
|
|
}
|
|
if col_info["type"] in ("many2one", "many2many"):
|
|
comodel = self.env[col_info["comodel"]]
|
|
initial_value = comodel.browse(initial_value) if initial_value else False
|
|
new_value = comodel.browse(new_value) if new_value else False
|
|
values = self.env["mail.tracking.value"]._create_tracking_values(
|
|
initial_value, new_value, col_name, col_info, record
|
|
)
|
|
del values["field_id"]
|
|
return {**values, "field_info": field_info}
|
|
|
|
@api.model
|
|
def _create_tracking_values(
|
|
self, initial_value, new_value, col_name, col_info, record
|
|
):
|
|
try:
|
|
return super()._create_tracking_values(
|
|
initial_value, new_value, col_name, col_info, record
|
|
)
|
|
except NotImplementedError:
|
|
if col_info["type"] == "html":
|
|
field = self.env["ir.model.fields"]._get(record._name, col_name)
|
|
values = {"field_id": field.id}
|
|
values.update(
|
|
{
|
|
"old_value_char": html2plaintext(initial_value) or "",
|
|
"new_value_char": html2plaintext(new_value) or "",
|
|
}
|
|
)
|
|
return values
|
|
elif col_info["type"] == "properties":
|
|
# TODO: Remove if merged https://github.com/odoo/odoo/pull/156236
|
|
# A return is necessary to avoid the NotImplementedError error
|
|
field = self.env["ir.model.fields"]._get(record._name, col_name)
|
|
return {"field_id": field.id}
|
|
elif col_info["type"] == "tags":
|
|
# TODO: Remove if merged https://github.com/odoo/odoo/pull/156236
|
|
field = self.env["ir.model.fields"]._get(record._name, col_name)
|
|
return {
|
|
"field_id": field.id,
|
|
"old_value_char": (
|
|
", ".join(value for value in initial_value)
|
|
if initial_value
|
|
else ""
|
|
),
|
|
"new_value_char": (
|
|
", ".join(value for value in new_value) if new_value else ""
|
|
),
|
|
}
|
|
raise
|