From b85bde9854072a94a99156ef18d59e6183e2d41c Mon Sep 17 00:00:00 2001 From: Xavier Dubuc Date: Wed, 3 Mar 2021 16:41:09 +0000 Subject: [PATCH] [FIX] mail: do not show falsy value in tracking values messages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit task-2438828 closes odoo/odoo#67227 X-original-commit: 49585b8ee726af7edd113c3012b1168d24dc4d7c Signed-off-by: Alexandre Kühn (aku) --- .../static/src/components/message/message.js | 103 ++++-- .../static/src/components/message/message.xml | 8 +- .../src/components/message/message_tests.js | 340 +++++++++++++++++- .../mail/static/tests/helpers/mock_server.js | 4 + 4 files changed, 403 insertions(+), 52 deletions(-) diff --git a/addons/mail/static/src/components/message/message.js b/addons/mail/static/src/components/message/message.js index 52333f2cd5b..3f5314eef13 100644 --- a/addons/mail/static/src/components/message/message.js +++ b/addons/mail/static/src/components/message/message.js @@ -286,39 +286,76 @@ class Message extends Component { return this.message.tracking_value_ids.map(trackingValue => { const value = Object.assign({}, trackingValue); value.changed_field = _.str.sprintf(this.env._t("%s:"), value.changed_field); - if (value.field_type === 'datetime') { - if (value.old_value) { - value.old_value = - moment.utc(value.old_value).local().format('LLL'); - } - if (value.new_value) { - value.new_value = - moment.utc(value.new_value).local().format('LLL'); - } - } else if (value.field_type === 'date') { - if (value.old_value) { - value.old_value = - moment(value.old_value).local().format('LL'); - } - if (value.new_value) { - value.new_value = - moment(value.new_value).local().format('LL'); - } - } else if (value.field_type === 'boolean') { - if (value.old_value !== undefined){ - value.old_value = value.old_value ? this.env._t("True") : this.env._t("False"); - } - if (value.new_value !== undefined){ - value.new_value = value.new_value ? this.env._t("True") : this.env._t("False"); - } - } else if (value.field_type === 'monetary' && value.currency_id) { - const currency_id = this.env.session.currencies[value.currency_id] - if (value.old_value !== undefined) { - value.old_value = format.monetary(value.old_value, null, { currency: currency_id, forceString: true }); - } - if (value.new_value !== undefined) { - value.new_value = format.monetary(value.new_value, null, { currency: currency_id, forceString: true }); - } + /** + * Maps tracked field type to a JS formatter. Tracking values are + * not always stored in the same field type as their origin type. + * Field types that are not listed here are not supported by + * tracking in Python. Also see `create_tracking_values` in Python. + */ + switch (value.field_type) { + case 'boolean': + value.old_value = format.boolean(value.old_value, undefined, { forceString: true }); + value.new_value = format.boolean(value.new_value, undefined, { forceString: true }); + break; + /** + * many2one formatter exists but is expecting id/name_get or data + * object but only the target record name is known in this context. + * + * Selection formatter exists but requires knowing all + * possibilities and they are not given in this context. + */ + case 'char': + case 'many2one': + case 'selection': + value.old_value = format.char(value.old_value); + value.new_value = format.char(value.new_value); + break; + case 'date': + if (value.old_value) { + value.old_value = moment.utc(value.old_value); + } + if (value.new_value) { + value.new_value = moment.utc(value.new_value); + } + value.old_value = format.date(value.old_value); + value.new_value = format.date(value.new_value); + break; + case 'datetime': + if (value.old_value) { + value.old_value = moment.utc(value.old_value); + } + if (value.new_value) { + value.new_value = moment.utc(value.new_value); + } + value.old_value = format.datetime(value.old_value); + value.new_value = format.datetime(value.new_value); + break; + case 'float': + value.old_value = format.float(value.old_value); + value.new_value = format.float(value.new_value); + break; + case 'integer': + value.old_value = format.integer(value.old_value); + value.new_value = format.integer(value.new_value); + break; + case 'monetary': + value.old_value = format.monetary(value.old_value, undefined, { + currency: value.currency_id + ? this.env.session.currencies[value.currency_id] + : undefined, + forceString: true, + }); + value.new_value = format.monetary(value.new_value, undefined, { + currency: value.currency_id + ? this.env.session.currencies[value.currency_id] + : undefined, + forceString: true, + }); + break; + case 'text': + value.old_value = format.text(value.old_value); + value.new_value = format.text(value.new_value); + break; } return value; }); diff --git a/addons/mail/static/src/components/message/message.xml b/addons/mail/static/src/components/message/message.xml index fb263ea6bb8..ffc376ee1e7 100644 --- a/addons/mail/static/src/components/message/message.xml +++ b/addons/mail/static/src/components/message/message.xml @@ -167,9 +167,11 @@
  • -
    - -