You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

85 lines
3.4 KiB

  1. # Copyright 2018 Camptocamp SA
  2. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
  3. import json
  4. from odoo import api, fields, models
  5. class MailTrackingValue(models.Model):
  6. _inherit = "mail.tracking.value"
  7. new_value_formatted = fields.Char(
  8. compute='_compute_formatted_value',
  9. string='New value',
  10. )
  11. old_value_formatted = fields.Char(
  12. compute='_compute_formatted_value',
  13. string='Old value',
  14. )
  15. record_name = fields.Char(
  16. related='mail_message_id.record_name',
  17. )
  18. model = fields.Char(
  19. related='mail_message_id.model',
  20. store='True',
  21. string='Model',
  22. )
  23. @api.depends('new_value_char', 'new_value_integer', 'new_value_float',
  24. 'new_value_text', 'new_value_datetime', 'new_value_monetary',
  25. 'old_value_char', 'old_value_integer', 'old_value_float',
  26. 'old_value_text', 'old_value_datetime', 'old_value_monetary')
  27. def _compute_formatted_value(self):
  28. """ Sets the value formatted field used in the view """
  29. for record in self:
  30. if record.field_type in ('many2many', 'one2many', 'char'):
  31. record.new_value_formatted = record.new_value_char
  32. record.old_value_formatted = record.old_value_char
  33. elif record.field_type == 'integer':
  34. record.new_value_formatted = str(record.new_value_integer)
  35. record.old_value_formatted = str(record.old_value_integer)
  36. elif record.field_type == 'float':
  37. record.new_value_formatted = str(record.new_value_float)
  38. record.old_value_formatted = str(record.old_value_float)
  39. elif record.field_type == 'monetary':
  40. record.new_value_formatted = str(record.new_value_monetary)
  41. record.old_value_formatted = str(record.old_value_monetary)
  42. elif record.field_type == 'datetime':
  43. record.new_value_formatted = str(record.new_value_datetime)
  44. record.old_value_formatted = str(record.old_value_datetime)
  45. elif record.field_type == 'text':
  46. record.new_value_formatted = record.new_value_text
  47. record.old_value_formatted = record.old_value_text
  48. @api.model
  49. def create_tracking_values(self, old_value, new_value, col_name, col_info):
  50. """ Add tacking capabilities for many2many and one2many fields """
  51. if col_info['type'] in ('many2many', 'one2many'):
  52. def get_values(source, prefix):
  53. if source:
  54. names = ', '.join(source.mapped('display_name'))
  55. json_ids = json.dumps(source.ids)
  56. else:
  57. names = ''
  58. json_ids = json.dumps([])
  59. return {
  60. '{}_value_char'.format(prefix): names,
  61. '{}_value_text'.format(prefix): json_ids,
  62. }
  63. values = {
  64. 'field': col_name,
  65. 'field_desc': col_info['string'],
  66. 'field_type': col_info['type'],
  67. }
  68. values.update(get_values(old_value, 'old'))
  69. values.update(get_values(new_value, 'new'))
  70. return values
  71. else:
  72. return super().create_tracking_values(
  73. old_value, new_value,
  74. col_name, col_info
  75. )