[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:
@@ -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;
|
||||
},
|
||||
|
||||
});
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user