[IMP] web: many2many_tags_email: convert read id by search for load all ID with only one request

bzr revid: chm@openerp.com-20121106155024-x3buowqrlnlcv160
This commit is contained in:
Christophe Matthieu 2012-11-06 16:50:24 +01:00
parent 44284ca4a4
commit cb11c84fa3
1 changed files with 34 additions and 28 deletions

View File

@ -19,61 +19,67 @@ instance.web.form.FieldMany2ManyTagsEmail = instance.web.form.FieldMany2ManyTags
},
on_change_value_check : function () {
var self = this;
this.values = _.uniq(this.values);
// filter for removed values
var values_removed = _.difference(self.values, self.get('value'));
var values_removed = _.difference(this.values, this.get('value'));
if (values_removed.length) {
self.values = _.difference(self.values, values_removed);
this.set({'value': self.values});
this.values = _.difference(this.values, values_removed);
this.set({'value': this.values});
return false;
}
// find not checked values
var not_checked = _.difference(self.get('value'), self.values);
var not_checked = _.difference(this.get('value'), this.values);
// find not checked values and not on checking
var not_checked = _.difference(not_checked, self.values_checking);
var not_checked = _.difference(not_checked, this.values_checking);
_.each(not_checked, function (val, key) {
self.values_checking.push(val);
self._check_email_popup(val);
});
if(not_checked.length) {
// remember values on checking for cheked only one time
this.values_checking = this.values_checking.concat(not_checked);
// check values
this._check_email_popup(not_checked);
}
},
_check_email_popup: function (id) {
_check_email_popup: function (ids) {
var self = this;
new instance.web.Model('res.partner').call("read", [id, ["email", "notification_email_send"]], {context: this.build_context()})
.pipe(function (dict) {
if (!dict.email && (dict.notification_email_send == 'all' || dict.notification_email_send == 'comment')) {
new instance.web.Model('res.partner').call("search", [[
["id", "in", ids],
["email", "=", false],
["notification_email_send", "in", ['all', 'comment']] ]],
{context: this.build_context()})
.pipe(function (record_ids) {
// valid partner
var valid_partner = _.difference(ids, record_ids);
self.values = self.values.concat(valid_partner);
self.values_checking = _.difference(self.values_checking, valid_partner);
// unvalid partner
_.each(record_ids, function(id) {
var pop = new instance.web.form.FormOpenPopup(self);
pop.show_element(
'res.partner',
dict.id,
id,
self.build_context(),
{
title: _t("Please complete partner's informations and Email"),
}
);
pop.on('write_completed', self, function () {
self._checked(dict.id, true);
this.values.push(id);
this.values_checking = _.without(this.values_checking, id);
this.set({'value': this.values});
});
pop.on('closed', self, function () {
self._checked(dict.id, false);
this.values_checking = _.without(this.values_checking, id);
this.set({'value': this.values});
});
} else {
self._checked(dict.id, true);
}
});
});
},
_checked: function (id, access) {
if (access) {
this.values.push(id);
}
this.values_checking = _.without(this.values_checking, id);
this.set({'value': this.values});
},
});