You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
3.7 KiB
96 lines
3.7 KiB
/* Copyright 2019 Tecnativa - David Vidal
|
|
* License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). */
|
|
|
|
odoo.define("web_widget_domain_editor_dialog.DomainEditorDialog", function (require) {
|
|
"use strict";
|
|
|
|
var core = require("web.core");
|
|
var view_dialogs = require('web.view_dialogs');
|
|
var SearchView = require('web.SearchView');
|
|
var _t = core._t;
|
|
|
|
var DomainEditorDialog = view_dialogs.SelectCreateDialog.extend({
|
|
init: function () {
|
|
this._super.apply(this, arguments);
|
|
var _this = this;
|
|
this.options = _.defaults(this.options, {
|
|
initial_facet: {
|
|
category: _t("Custom Filter"),
|
|
icon: 'fa-circle',
|
|
field: {
|
|
get_context: function () {
|
|
return _this.options.context;
|
|
},
|
|
get_groupby: function () {
|
|
return [];
|
|
},
|
|
get_domain: function () {
|
|
return _this.options.default_domain;
|
|
},
|
|
},
|
|
values: [{label: _t("Selected domain"), value: null}],
|
|
},
|
|
});
|
|
},
|
|
|
|
start: function () {
|
|
var search_view = _.find(
|
|
this.getChildren(), function (x) {
|
|
return x instanceof SearchView;
|
|
});
|
|
if (this.options.initial_facet && search_view) {
|
|
search_view.query.reset([this.options.initial_facet], {
|
|
preventSearch: true,
|
|
});
|
|
search_view.do_search();
|
|
}
|
|
this._super.apply(this, arguments);
|
|
},
|
|
|
|
get_domain: function (selected_ids) {
|
|
var group_domain = [];
|
|
var search_data = this.list_controller.renderer.state;
|
|
var domain = search_data.domain;
|
|
if (this.$('.o_list_record_selector input').prop('checked')) {
|
|
if (search_data.groupedBy.length) {
|
|
group_domain = _.filter(
|
|
search_data.data, function (x) {
|
|
return x.res_ids.length;
|
|
})
|
|
.map(function (x) {
|
|
return x.domain;
|
|
});
|
|
group_domain = _.flatten(group_domain, true);
|
|
// Compute domain difference
|
|
_.each(domain, function (d) {
|
|
group_domain = _.without(
|
|
group_domain, _.filter(group_domain, function (x) {
|
|
return _.isEqual(x, d);
|
|
})[0]);
|
|
});
|
|
// Strip operators to leave just the group domains
|
|
group_domain = _.without(group_domain, "&");
|
|
// Add OR operators if there is more than one group
|
|
group_domain = _.times(
|
|
group_domain.length - 1,
|
|
_.constant('|')).concat(group_domain);
|
|
}
|
|
} else {
|
|
var ids = selected_ids.map(function (x) {
|
|
return x.id;
|
|
});
|
|
domain = domain.concat([["id", "in", ids]]);
|
|
}
|
|
return domain.concat(group_domain);
|
|
},
|
|
|
|
on_view_list_loaded: function () {
|
|
this.$('.o_list_record_selector input').prop('checked', true);
|
|
this.$footer.find(".o_selectcreatepopup_search_select")
|
|
.prop('disabled', false);
|
|
},
|
|
});
|
|
|
|
return DomainEditorDialog;
|
|
|
|
});
|