From add71e94b5ced64da0050ce15dd2387337086a7b Mon Sep 17 00:00:00 2001 From: "Didier (did)" Date: Wed, 23 Sep 2020 17:17:37 +0000 Subject: [PATCH] [FIX] mail: compute display_name for partner and user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit task-2322135 closes odoo/odoo#58374 X-original-commit: d9bdbde95c3694ecdaccd58b5475631137c22e93 Related: odoo/enterprise#13478 Signed-off-by: Sébastien Theys (seb) Co-authored-by: Sébastien Theys --- .../hr/static/src/models/employee/employee.js | 2 +- .../src/components/activity/activity.js | 4 +- .../src/components/activity/activity.xml | 10 ++-- .../src/components/activity/activity_tests.js | 6 +-- .../static/src/models/activity/activity.js | 4 +- .../mail/static/src/models/partner/partner.js | 23 +++++++- addons/mail/static/src/models/user/user.js | 54 +++++++++++++------ 7 files changed, 71 insertions(+), 32 deletions(-) diff --git a/addons/hr/static/src/models/employee/employee.js b/addons/hr/static/src/models/employee/employee.js index 0cf877baab6..6d3c12cb14b 100644 --- a/addons/hr/static/src/models/employee/employee.js +++ b/addons/hr/static/src/models/employee/employee.js @@ -36,7 +36,7 @@ function factory(dependencies) { const userData = { id: userNameGet[0], partner: [['insert', partnerData]], - partnerDisplayName: userNameGet[1], + display_name: userNameGet[1], }; data2.user = [['insert', userData]]; } diff --git a/addons/mail/static/src/components/activity/activity.js b/addons/mail/static/src/components/activity/activity.js index 45fb2d12a8e..633c43820d6 100644 --- a/addons/mail/static/src/components/activity/activity.js +++ b/addons/mail/static/src/components/activity/activity.js @@ -34,7 +34,7 @@ class Activity extends Component { assigneeNameOrDisplayName: ( activity && activity.assignee && - activity.assignee.nameOrDisplayName() + activity.assignee.nameOrDisplayName ), }; }); @@ -60,7 +60,7 @@ class Activity extends Component { * @returns {string} */ get assignedUserText() { - return _.str.sprintf(this.env._t("for %s"), this.activity.assignee.nameOrDisplayName()); + return _.str.sprintf(this.env._t("for %s"), this.activity.assignee.nameOrDisplayName); } /** diff --git a/addons/mail/static/src/components/activity/activity.xml b/addons/mail/static/src/components/activity/activity.xml index d8ae1808bf5..87b22dbca99 100644 --- a/addons/mail/static/src/components/activity/activity.xml +++ b/addons/mail/static/src/components/activity/activity.xml @@ -7,7 +7,7 @@
- +
- + - +
Assigned to
- - + +
Due on
diff --git a/addons/mail/static/src/components/activity/activity_tests.js b/addons/mail/static/src/components/activity/activity_tests.js index dce0969159d..bea2a552a5f 100644 --- a/addons/mail/static/src/components/activity/activity_tests.js +++ b/addons/mail/static/src/components/activity/activity_tests.js @@ -375,7 +375,7 @@ QUnit.test('activity details toggle', async function (assert) { const tomorrow = new Date(); tomorrow.setDate(today.getDate() + 1); const activity = this.env.models['mail.activity'].create({ - creator: [['insert', { id: 1, partnerDisplayName: "Admin" }]], + creator: [['insert', { id: 1, display_name: "Admin" }]], dateCreate: date_to_str(today), dateDeadline: date_to_str(tomorrow), state: 'planned', @@ -425,8 +425,8 @@ QUnit.test('activity details layout', async function (assert) { const tomorrow = new Date(); tomorrow.setDate(today.getDate() + 1); const activity = this.env.models['mail.activity'].create({ - assignee: [['insert', { id: 10, partnerDisplayName: "Pauvre pomme" }]], - creator: [['insert', { id: 1, partnerDisplayName: "Admin" }]], + assignee: [['insert', { id: 10, display_name: "Pauvre pomme" }]], + creator: [['insert', { id: 1, display_name: "Admin" }]], dateCreate: date_to_str(today), dateDeadline: date_to_str(tomorrow), state: 'planned', diff --git a/addons/mail/static/src/models/activity/activity.js b/addons/mail/static/src/models/activity/activity.js index 4e654e3c456..7b2cd9bc0eb 100644 --- a/addons/mail/static/src/models/activity/activity.js +++ b/addons/mail/static/src/models/activity/activity.js @@ -94,7 +94,7 @@ function factory(dependencies) { data2.creator = [ ['insert', { id: data.create_uid[0], - partnerDisplayName: data.create_uid[1], + display_name: data.create_uid[1], }], ]; } @@ -109,7 +109,7 @@ function factory(dependencies) { data2.assignee = [ ['insert', { id: data.user_id[0], - partnerDisplayName: data.user_id[1], + display_name: data.user_id[1], }], ]; } diff --git a/addons/mail/static/src/models/partner/partner.js b/addons/mail/static/src/models/partner/partner.js index eb56720b862..4a8a1c54f0d 100644 --- a/addons/mail/static/src/models/partner/partner.js +++ b/addons/mail/static/src/models/partner/partner.js @@ -56,7 +56,7 @@ function factory(dependencies) { data2.user = [ ['insert', { id: data.user_id[0], - partnerDisplayName: data.user_id[1], + display_name: data.user_id[1], }], ]; } @@ -246,7 +246,15 @@ function factory(dependencies) { /** * @private - * @returns {string} + * @returns {string|undefined} + */ + _computeDisplayName() { + return this.display_name || this.user && this.user.display_name; + } + + /** + * @private + * @returns {string|undefined} */ _computeNameOrDisplayName() { return this.name || this.display_name; @@ -263,7 +271,12 @@ function factory(dependencies) { }), country: many2one('mail.country'), display_name: attr({ + compute: '_computeDisplayName', default: "", + dependencies: [ + 'display_name', + 'userDisplayName', + ], }), email: attr(), failureNotifications: one2many('mail.notification', { @@ -304,6 +317,12 @@ function factory(dependencies) { user: one2one('mail.user', { inverse: 'partner', }), + /** + * Serves as compute dependency. + */ + userDisplayName: attr({ + related: 'user.display_name', + }), }; Partner.modelName = 'mail.partner'; diff --git a/addons/mail/static/src/models/user/user.js b/addons/mail/static/src/models/user/user.js index 18b2c28e1ac..7fc23b1e17f 100644 --- a/addons/mail/static/src/models/user/user.js +++ b/addons/mail/static/src/models/user/user.js @@ -84,17 +84,6 @@ function factory(dependencies) { }); } - /** - * @returns {string} - */ - nameOrDisplayName() { - const partner = this.partner; - if (!partner) { - return this.partnerDisplayName; - } - return partner.nameOrDisplayName; - } - /** * Gets the chat between this user and the current user. * @@ -195,25 +184,56 @@ function factory(dependencies) { } /** - * @override + * @private + * @returns {string|undefined} */ - _updateAfter(previous) { - if (this.partnerDisplayName && this.partner) { - this.partner.update({ display_name: this.partnerDisplayName }); - } + _computeDisplayName() { + return this.display_name || this.partner && this.partner.display_name; } + /** + * @private + * @returns {string|undefined} + */ + _computeNameOrDisplayName() { + return this.partner && this.partner.nameOrDisplayName || this.display_name; + } } User.fields = { id: attr(), + display_name: attr({ + compute: '_computeDisplayName', + dependencies: [ + 'display_name', + 'partnerDisplayName', + ], + }), model: attr({ default: 'res.user', }), + nameOrDisplayName: attr({ + compute: '_computeNameOrDisplayName', + dependencies: [ + 'display_name', + 'partnerNameOrDisplayName', + ] + }), partner: one2one('mail.partner', { inverse: 'user', }), - partnerDisplayName: attr(), + /** + * Serves as compute dependency. + */ + partnerDisplayName: attr({ + related: 'partner.display_name', + }), + /** + * Serves as compute dependency. + */ + partnerNameOrDisplayName: attr({ + related: 'partner.nameOrDisplayName', + }), }; User.modelName = 'mail.user';