diff options
| author | Didier (did) <did@odoo.com> | 2020-09-23 17:17:37 +0000 |
|---|---|---|
| committer | Sébastien Theys <seb@odoo.com> | 2020-09-23 18:20:20 +0000 |
| commit | 318135d38a743effbe7067ded4f3e6cb5b1d14e0 (patch) | |
| tree | f1aa059f81cd05b2b4ba35af481af20c0dbc0e89 | |
| parent | dc951b9c2e7948492137c313a80b0070c044b02f (diff) | |
[FIX] mail: compute display_name for partner and user
task-2322135
closes odoo/odoo#58371
X-original-commit: d9bdbde95c3694ecdaccd58b5475631137c22e93
Related: odoo/enterprise#13476
Signed-off-by: Sébastien Theys (seb) <seb@odoo.com>
Co-authored-by: Sébastien Theys <seb@odoo.com>
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 @@ <div class="o_Activity_sidebar"> <div class="o_Activity_user"> <t t-if="activity.assignee"> - <img class="o_Activity_userAvatar" t-attf-src="/web/image/res.users/{{ activity.assignee.id }}/image_128" t-att-alt="activity.assignee.nameOrDisplayName()"/> + <img class="o_Activity_userAvatar" t-attf-src="/web/image/res.users/{{ activity.assignee.id }}/image_128" t-att-alt="activity.assignee.nameOrDisplayName"/> </t> <div class="o_Activity_iconContainer" t-att-class="{ @@ -65,17 +65,17 @@ <dt>Created</dt> <dd class="o_Activity_detailsCreation"> <t t-esc="formattedCreateDatetime"/> - <img class="o_Activity_detailsUserAvatar o_Activity_detailsCreatorAvatar" t-attf-src="/web/image/res.users/{{ activity.creator.id }}/image_128" t-att-title="activity.creator.nameOrDisplayName()" t-att-alt="activity.creator.nameOrDisplayName()"/> + <img class="o_Activity_detailsUserAvatar o_Activity_detailsCreatorAvatar" t-attf-src="/web/image/res.users/{{ activity.creator.id }}/image_128" t-att-title="activity.creator.nameOrDisplayName" t-att-alt="activity.creator.nameOrDisplayName"/> <span class="o_Activity_detailsCreator"> - <t t-esc="activity.creator.nameOrDisplayName()"/> + <t t-esc="activity.creator.nameOrDisplayName"/> </span> </dd> </t> <t t-if="activity.assignee"> <dt>Assigned to</dt> <dd class="o_Activity_detailsAssignation"> - <img class="o_Activity_detailsUserAvatar o_Activity_detailsAssignationUserAvatar" t-attf-src="/web/image/res.users/{{ activity.assignee.id }}/image_128" t-att-title="activity.assignee.nameOrDisplayName()" t-att-alt="activity.assignee.nameOrDisplayName()"/> - <t t-esc="activity.assignee.nameOrDisplayName()"/> + <img class="o_Activity_detailsUserAvatar o_Activity_detailsAssignationUserAvatar" t-attf-src="/web/image/res.users/{{ activity.assignee.id }}/image_128" t-att-title="activity.assignee.nameOrDisplayName" t-att-alt="activity.assignee.nameOrDisplayName"/> + <t t-esc="activity.assignee.nameOrDisplayName"/> </dd> </t> <dt>Due on</dt> 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 @@ -85,17 +85,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. * * If a chat is not appropriate, a notification is displayed instead. @@ -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'; |
