summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDidier (did) <did@odoo.com>2020-09-23 17:17:37 +0000
committerSébastien Theys <seb@odoo.com>2020-09-23 18:20:20 +0000
commit318135d38a743effbe7067ded4f3e6cb5b1d14e0 (patch)
treef1aa059f81cd05b2b4ba35af481af20c0dbc0e89
parentdc951b9c2e7948492137c313a80b0070c044b02f (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>
-rw-r--r--addons/hr/static/src/models/employee/employee.js2
-rw-r--r--addons/mail/static/src/components/activity/activity.js4
-rw-r--r--addons/mail/static/src/components/activity/activity.xml10
-rw-r--r--addons/mail/static/src/components/activity/activity_tests.js6
-rw-r--r--addons/mail/static/src/models/activity/activity.js4
-rw-r--r--addons/mail/static/src/models/partner/partner.js23
-rw-r--r--addons/mail/static/src/models/user/user.js54
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';