[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
This commit is contained in:
Nicolas Lempereur
2018-01-04 18:09:56 +01:00
parent dd0453e610
commit bc8f7a44d6
3 changed files with 35 additions and 15 deletions
@@ -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;
},
});
+7 -2
View File
@@ -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");
}
+1 -1
View File
@@ -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>