mirror of https://github.com/OCA/social.git
104 lines
3.7 KiB
Python
104 lines
3.7 KiB
Python
# Copyright 2018-2022 Camptocamp SA
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
|
|
import json
|
|
|
|
from odoo import api, fields, models
|
|
|
|
|
|
class MailTrackingValue(models.Model):
|
|
|
|
_inherit = "mail.tracking.value"
|
|
|
|
new_value_formatted = fields.Char(
|
|
compute="_compute_formatted_value", string="New value"
|
|
)
|
|
old_value_formatted = fields.Char(
|
|
compute="_compute_formatted_value", string="Old value"
|
|
)
|
|
record_name = fields.Char(related="mail_message_id.record_name")
|
|
model = fields.Char(related="mail_message_id.model", store="True", string="Model")
|
|
|
|
@api.depends(
|
|
"new_value_char",
|
|
"new_value_integer",
|
|
"new_value_float",
|
|
"new_value_text",
|
|
"new_value_datetime",
|
|
"new_value_monetary",
|
|
"old_value_char",
|
|
"old_value_integer",
|
|
"old_value_float",
|
|
"old_value_text",
|
|
"old_value_datetime",
|
|
"old_value_monetary",
|
|
)
|
|
def _compute_formatted_value(self):
|
|
"""Sets the value formatted field used in the view"""
|
|
for record in self:
|
|
if record.field_type in ("many2many", "one2many", "char"):
|
|
record.new_value_formatted = record.new_value_char
|
|
record.old_value_formatted = record.old_value_char
|
|
elif record.field_type == "integer":
|
|
record.new_value_formatted = str(record.new_value_integer)
|
|
record.old_value_formatted = str(record.old_value_integer)
|
|
elif record.field_type == "float":
|
|
record.new_value_formatted = str(record.new_value_float)
|
|
record.old_value_formatted = str(record.old_value_float)
|
|
elif record.field_type == "monetary":
|
|
record.new_value_formatted = str(record.new_value_monetary)
|
|
record.old_value_formatted = str(record.old_value_monetary)
|
|
elif record.field_type == "datetime":
|
|
record.new_value_formatted = str(record.new_value_datetime)
|
|
record.old_value_formatted = str(record.old_value_datetime)
|
|
elif record.field_type == "text":
|
|
record.new_value_formatted = record.new_value_text
|
|
record.old_value_formatted = record.old_value_text
|
|
|
|
@api.model
|
|
def create_tracking_values(
|
|
self,
|
|
initial_value,
|
|
new_value,
|
|
col_name,
|
|
col_info,
|
|
tracking_sequence,
|
|
model_name,
|
|
):
|
|
"""Add tacking capabilities for many2many and one2many fields"""
|
|
if col_info["type"] in ("many2many", "one2many"):
|
|
|
|
def get_values(source, prefix):
|
|
if source:
|
|
names = ", ".join(source.exists().mapped("display_name"))
|
|
json_ids = json.dumps(source.ids)
|
|
else:
|
|
names = ""
|
|
json_ids = json.dumps([])
|
|
return {
|
|
"{}_value_char".format(prefix): names,
|
|
"{}_value_text".format(prefix): json_ids,
|
|
}
|
|
|
|
field = self.env["ir.model.fields"]._get(model_name, col_name)
|
|
if not field:
|
|
return
|
|
|
|
values = {
|
|
"field": field.id,
|
|
"field_desc": col_info["string"],
|
|
"field_type": col_info["type"],
|
|
}
|
|
values.update(get_values(initial_value, "old"))
|
|
values.update(get_values(new_value, "new"))
|
|
return values
|
|
else:
|
|
return super().create_tracking_values(
|
|
initial_value,
|
|
new_value,
|
|
col_name,
|
|
col_info,
|
|
tracking_sequence,
|
|
model_name,
|
|
)
|