From 02d07ac47eeb78a8848dad97bf4f09687f94994a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 15 Apr 2014 15:39:14 +0200 Subject: [PATCH] [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 --- addons/web/static/src/js/view_form.js | 71 +++++++++++++++++++++++++++ addons/web/static/src/xml/base.xml | 10 ++++ 2 files changed, 81 insertions(+) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 2a54ee85d52..5b98d6adf19 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -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', diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index 93904edb0b2..a08de0bc4bd 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -1080,6 +1080,16 @@ + +
+ + +
+