summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorNicolas Lempereur <nle@odoo.com>2018-01-02 14:21:02 +0100
committerNicolas Lempereur <nle@odoo.com>2018-01-04 18:09:56 +0100
commitbc8f7a44d6e2c4153dbca9c06d3e5ecfea5a9855 (patch)
tree84054d7ac6fb4d830de45b92e3e3719180cb6e7b /addons
parentdd0453e610d355a58b16fcfbf701eb8dbe83099a (diff)
[FIX] mail,web: adapt email in m2m tags b92aaf1
Adapt commit b92aaf1 for framework changes in saas-16. That commit made Many2ManyTagsEmail widget display name_get gotten dynamically. This allow to have 'show_email' context key working and having the email displayed. This commit use the new views (as of saas-16) to do the same change. opw-801558 fixes #21812 fixes #21523 closes #21969
Diffstat (limited to 'addons')
-rw-r--r--addons/mail/static/src/js/many2many_tags_email.js39
-rw-r--r--addons/mail/static/tests/chatter_tests.js9
-rw-r--r--addons/web/static/src/xml/base.xml2
3 files changed, 35 insertions, 15 deletions
diff --git a/addons/mail/static/src/js/many2many_tags_email.js b/addons/mail/static/src/js/many2many_tags_email.js
index 874ae7ec00a..e11a147d8e1 100644
--- a/addons/mail/static/src/js/many2many_tags_email.js
+++ b/addons/mail/static/src/js/many2many_tags_email.js
@@ -21,9 +21,9 @@ BasicModel.include({
* @param {Object} record - an element from the localData
* @param {string} fieldName
* @return {Deferred<Object>} the deferred is resolved with the
- * invalidPartnerIds
+ * invalidPartnerIds and partnerNames
*/
- _setInvalidMany2ManyTagsEmail: function (record, fieldName) {
+ _fetchSpecialMany2ManyTagsEmail: function (record, fieldName) {
var self = this;
var localID = (record._changes && fieldName in record._changes) ?
record._changes[fieldName] :
@@ -37,14 +37,26 @@ BasicModel.include({
}
});
var def;
- if (invalidPartnerIds) {
+ if (invalidPartnerIds.length) {
// remove invalid partners
var changes = {operation: 'DELETE', ids: _.pluck(invalidPartnerIds, 'id')};
def = this._applyX2ManyChange(record, fieldName, changes);
}
return $.when(def).then(function () {
- return $.when({
- invalidPartnerIds: _.pluck(invalidPartnerIds, 'res_id'),
+ list = self._applyX2ManyOperations(self.localData[localID]);
+ if (list.res_ids.length) {
+ def = self._rpc({
+ model: list.model,
+ method: 'name_get',
+ args: list.res_ids,
+ context: record.getContext({fieldName: fieldName}),
+ });
+ }
+ return $.when(def).then(function (names) {
+ return $.when({
+ invalidPartnerIds: _.pluck(invalidPartnerIds, 'res_id'),
+ partnerNames: _.object(names),
+ });
});
});
},
@@ -54,7 +66,7 @@ var FieldMany2ManyTagsEmail = M2MTags.extend({
fieldsToFetch: _.extend({}, M2MTags.prototype.fieldsToFetch, {
email: {type: 'char'},
}),
- specialData: "_setInvalidMany2ManyTagsEmail",
+ specialData: "_fetchSpecialMany2ManyTagsEmail",
//--------------------------------------------------------------------------
// Private
@@ -131,14 +143,17 @@ var FieldMany2ManyTagsEmail = M2MTags.extend({
* Override for res.partner
* name_get is dynamic (based on context) while display_name is static
* (stored)
+ *
+ * @override
+ * @private
*/
- get_render_data: function(ids){
- this.dataset.cancel_read();
- return this.dataset.name_get(ids).then(function (names) {
- return _.map(names, function(name) {
- return {id: name[0], display_name: name[1]};
- });
+ _getRenderTagsContext: function () {
+ var result = this._super.apply(this, arguments);
+ var partnerNames = this.record.specialData[this.name].partnerNames;
+ _.each(result.elements, function (partner) {
+ partner.display_name = partnerNames[partner.id];
});
+ return result;
},
});
diff --git a/addons/mail/static/tests/chatter_tests.js b/addons/mail/static/tests/chatter_tests.js
index 409b729fc78..53b1cde91b9 100644
--- a/addons/mail/static/tests/chatter_tests.js
+++ b/addons/mail/static/tests/chatter_tests.js
@@ -1092,8 +1092,9 @@ QUnit.module('FieldMany2ManyTagsEmail', {
});
QUnit.test('fieldmany2many tags email', function (assert) {
- assert.expect(11);
+ assert.expect(13);
var done = assert.async();
+ var nameGottenIds = [[12], [12, 14]];
this.data.partner.records[0].timmy = [12, 14];
@@ -1113,7 +1114,11 @@ QUnit.test('fieldmany2many tags email', function (assert) {
mode: 'edit',
},
mockRPC: function (route, args) {
- if (args.method ==='read' && args.model === 'partner_type') {
+ if (route === "/web/dataset/call_kw/partner_type/name_get") {
+ assert.deepEqual(args.args, nameGottenIds.shift(),
+ "partner with email should be name_get'ed");
+ }
+ else if (args.method ==='read' && args.model === 'partner_type') {
assert.step(args.args[0]);
assert.deepEqual(args.args[1] , ['display_name', 'email'], "should read the email");
}
diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml
index d14c1f008fd..d07d3153303 100644
--- a/addons/web/static/src/xml/base.xml
+++ b/addons/web/static/src/xml/base.xml
@@ -760,7 +760,7 @@
<t t-name="FieldMany2ManyTag">
<t t-foreach="elements" t-as="el">
<span t-attf-class="badge dropdown o_tag_color_#{el[colorField] || 10}" t-att-data-color="el[colorField] || 10" t-att-data-index="el_index" t-att-data-id="el.id">
- <span class="o_badge_text"><t t-raw="el.display_name"/></span>
+ <span class="o_badge_text"><t t-esc="el.display_name"/></span>
<span t-if="!readonly" class="fa fa-times o_delete"/>
</span>
</t>