[ADD] web: form: added char domain widget coming from mass_mailing. This widget
is used to compute the number of records according ot a domain, and to allow selecting documents. bzr revid: tde@openerp.com-20140415133914-v8fm6wn7up9ds85i
This commit is contained in:
parent
c25b816a3b
commit
02d07ac47e
|
@ -2435,6 +2435,76 @@ instance.web.form.FieldFloat = instance.web.form.FieldChar.extend({
|
|||
}
|
||||
});
|
||||
|
||||
instance.web.form.FieldCharDomain = instance.web.form.AbstractField.extend(instance.web.form.ReinitializeFieldMixin, {
|
||||
init: function(field_manager, node) {
|
||||
this._super.apply(this, arguments);
|
||||
},
|
||||
start: function() {
|
||||
var self=this;
|
||||
this._super.apply(this, arguments);
|
||||
this.on("change:effective_readonly", this, function () {
|
||||
this.display_field();
|
||||
this.render_value();
|
||||
});
|
||||
this.$('button.select_records').on('click', self.on_click);
|
||||
this.display_field();
|
||||
return this._super();
|
||||
},
|
||||
render_value: function() {
|
||||
this.$('button.select_records').css('visibility', this.get('effective_readonly') ? 'hidden': '');
|
||||
},
|
||||
set_value: function(value_) {
|
||||
var self = this;
|
||||
this.set('value', value_ || false);
|
||||
this.display_field();
|
||||
},
|
||||
display_field: function() {
|
||||
var self = this;
|
||||
this.$el.html(instance.web.qweb.render("FieldCharDomain", {widget: this}));
|
||||
if (this.get('value')) {
|
||||
var domain = instance.web.pyeval.eval('domain', this.get('value'));
|
||||
var relation = this.getParent().fields.mailing_model.get('value')[0];
|
||||
var ds = new instance.web.DataSetStatic(self, relation, self.build_context());
|
||||
ds.call('search_count', [domain]).then(function (results) {
|
||||
$('.oe_domain_count', self.$el).text(results + ' records selected');
|
||||
$('button span', self.$el).text(' Change selection');
|
||||
});
|
||||
} else {
|
||||
$('.oe_domain_count', this.$el).text('0 record selected');
|
||||
$('button span', this.$el).text(' Select records');
|
||||
};
|
||||
},
|
||||
on_click: function(ev) {
|
||||
var self = this;
|
||||
var model = this.options.model || this.field_manager.get_field_value(this.options.model_field);
|
||||
this.pop = new instance.web.form.SelectCreatePopup(this);
|
||||
this.pop.select_element(
|
||||
model, {title: 'Select records...'},
|
||||
[], this.build_context());
|
||||
this.pop.on("elements_selected", self, function(element_ids) {
|
||||
if (this.pop.$('input.oe_list_record_selector').prop('checked')) {
|
||||
var search_data = this.pop.searchview.build_search_data();
|
||||
var domain_done = instance.web.pyeval.eval_domains_and_contexts({
|
||||
domains: search_data.domains,
|
||||
contexts: search_data.contexts,
|
||||
group_by_seq: search_data.groupbys || []
|
||||
}).then(function (results) {
|
||||
return results.domain;
|
||||
});
|
||||
}
|
||||
else {
|
||||
var domain = ["id", "in", element_ids];
|
||||
var domain_done = $.Deferred().resolve(domain);
|
||||
}
|
||||
$.when(domain_done).then(function (domain) {
|
||||
var domain = self.pop.dataset.domain.concat(domain || []);
|
||||
self.set_value(JSON.stringify(domain))
|
||||
});
|
||||
});
|
||||
event.preventDefault();
|
||||
},
|
||||
});
|
||||
|
||||
instance.web.DateTimeWidget = instance.web.Widget.extend({
|
||||
template: "web.datepicker",
|
||||
jqueryui_object: 'datetimepicker',
|
||||
|
@ -5990,6 +6060,7 @@ instance.web.form.widgets = new instance.web.Registry({
|
|||
'url' : 'instance.web.form.FieldUrl',
|
||||
'text' : 'instance.web.form.FieldText',
|
||||
'html' : 'instance.web.form.FieldTextHtml',
|
||||
'char_domain': 'instance.web.form.FieldCharDomain',
|
||||
'date' : 'instance.web.form.FieldDate',
|
||||
'datetime' : 'instance.web.form.FieldDatetime',
|
||||
'selection' : 'instance.web.form.FieldSelection',
|
||||
|
|
|
@ -1080,6 +1080,16 @@
|
|||
</t>
|
||||
</div>
|
||||
</t>
|
||||
<t t-name="FieldCharDomain">
|
||||
<div class="oe_form_field">
|
||||
<span class="oe_domain_count"/>
|
||||
<button class="oe_button oe_link select_records" type="button"
|
||||
t-att-style="widget.node.attrs.style"
|
||||
t-att-accesskey="widget.node.attrs.accesskey">
|
||||
<span class="fa fa-arrow-right"/>
|
||||
</button>
|
||||
</div>
|
||||
</t>
|
||||
<t t-name="web.datepicker">
|
||||
<span>
|
||||
<t t-set="placeholder" t-value="widget.getParent().node and widget.getParent().node.attrs.placeholder"/>
|
||||
|
|
Loading…
Reference in New Issue