diff options
| author | Nicolas Lempereur <nle@odoo.com> | 2018-01-02 14:21:02 +0100 |
|---|---|---|
| committer | Nicolas Lempereur <nle@odoo.com> | 2018-01-04 18:09:56 +0100 |
| commit | bc8f7a44d6e2c4153dbca9c06d3e5ecfea5a9855 (patch) | |
| tree | 84054d7ac6fb4d830de45b92e3e3719180cb6e7b /addons | |
| parent | dd0453e610d355a58b16fcfbf701eb8dbe83099a (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.js | 39 | ||||
| -rw-r--r-- | addons/mail/static/tests/chatter_tests.js | 9 | ||||
| -rw-r--r-- | addons/web/static/src/xml/base.xml | 2 |
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> |
