[FIX] mail: compute display_name for partner and user

task-2322135

closes odoo/odoo#58374

X-original-commit: d9bdbde95c3694ecdaccd58b5475631137c22e93
Related: odoo/enterprise#13478
Signed-off-by: Sébastien Theys (seb) <seb@odoo.com>
Co-authored-by: Sébastien Theys <seb@odoo.com>
This commit is contained in:
Didier (did)
2020-09-23 18:59:24 +00:00
committed by Sébastien Theys
co-authored by Sébastien Theys
parent 86959c0144
commit add71e94b5
7 changed files with 71 additions and 32 deletions
@@ -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]];
}
@@ -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);
}
/**
@@ -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>
@@ -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',
@@ -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],
}],
];
}
@@ -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';
+37 -17
View File
@@ -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';