3
0
Fork 0

[IMP] web_m2x_options: Efficiency

Improved the efficiency of code: With this improvement we achieve to just do an rpc call when the js file is called instead of do the call for each field.
12.0
Carlos Roca 2020-11-09 10:19:56 +01:00
parent 8577fedd00
commit 5427b0e57f
6 changed files with 46 additions and 62 deletions

View File

@ -177,6 +177,7 @@ Contributors
* Jairo Llopis <jairo.llopis@tecnativa.com> * Jairo Llopis <jairo.llopis@tecnativa.com>
* David Vidal <david.vidal@tecnativa.com> * David Vidal <david.vidal@tecnativa.com>
* Ernesto Tejeda <ernesto.tejeda87@gmail.com> * Ernesto Tejeda <ernesto.tejeda87@gmail.com>
* Carlos Roca
Maintainers Maintainers
~~~~~~~~~~~ ~~~~~~~~~~~

View File

@ -9,4 +9,7 @@ class IrConfigParameter(models.Model):
opts = ['web_m2x_options.create', 'web_m2x_options.create_edit', opts = ['web_m2x_options.create', 'web_m2x_options.create_edit',
'web_m2x_options.limit', 'web_m2x_options.search_more', 'web_m2x_options.limit', 'web_m2x_options.search_more',
'web_m2x_options.m2o_dialog'] 'web_m2x_options.m2o_dialog']
return self.sudo().search_read([['key', 'in', opts]], ["key", "value"]) return {
res["key"]: res["value"] for res in self.sudo().search_read(
[['key', 'in', opts]], ["key", "value"])
}

View File

@ -9,3 +9,4 @@
* Jairo Llopis <jairo.llopis@tecnativa.com> * Jairo Llopis <jairo.llopis@tecnativa.com>
* David Vidal <david.vidal@tecnativa.com> * David Vidal <david.vidal@tecnativa.com>
* Ernesto Tejeda <ernesto.tejeda87@gmail.com> * Ernesto Tejeda <ernesto.tejeda87@gmail.com>
* Carlos Roca

View File

@ -7,9 +7,10 @@ odoo.define('web_m2x_options.web_m2x_options', function (require) {
var core = require('web.core'), var core = require('web.core'),
data = require('web.data'), data = require('web.data'),
Dialog = require('web.Dialog'), Dialog = require('web.Dialog'),
FormView = require("web.FormView"),
view_dialogs = require('web.view_dialogs'), view_dialogs = require('web.view_dialogs'),
relational_fields = require('web.relational_fields'), relational_fields = require('web.relational_fields'),
rpc = require('web.rpc'); ir_options = require('web_m2x_options.ir_options');
var _t = core._t, var _t = core._t,
FieldMany2ManyTags = relational_fields.FieldMany2ManyTags, FieldMany2ManyTags = relational_fields.FieldMany2ManyTags,
@ -17,10 +18,15 @@ odoo.define('web_m2x_options.web_m2x_options', function (require) {
FieldOne2Many = relational_fields.FieldOne2Many, FieldOne2Many = relational_fields.FieldOne2Many,
FormFieldMany2ManyTags = relational_fields.FormFieldMany2ManyTags; FormFieldMany2ManyTags = relational_fields.FormFieldMany2ManyTags;
var web_m2x_options = rpc.query({ function is_option_set (option) {
model: "ir.config_parameter", if (_.isUndefined(option))
method: 'get_web_m2x_options', return false;
}); if (typeof option === 'string')
return option === 'true' || option === 'True';
if (typeof option === 'boolean')
return option;
return false
};
var M2ODialog = Dialog.extend({ var M2ODialog = Dialog.extend({
template: "M2ODialog", template: "M2ODialog",
@ -81,39 +87,8 @@ odoo.define('web_m2x_options.web_m2x_options', function (require) {
}); });
FieldMany2One.include({ FieldMany2One.include({
start: function () {
this._super.apply(this, arguments);
return this.get_options();
},
get_options: function () {
var self = this;
if (_.isUndefined(this.ir_options_loaded)) {
this.ir_options_loaded = $.Deferred();
this.ir_options = {};
web_m2x_options.done(function (records) {
_(records).each(function(record) {
self.ir_options[record.key] = record.value;
});
self.ir_options_loaded.resolve();
});
}
return $.when();
},
is_option_set: function (option) {
if (_.isUndefined(option))
return false;
if (typeof option === 'string')
return option === 'true' || option === 'True';
if (typeof option === 'boolean')
return option;
return false
},
_onInputFocusout: function () { _onInputFocusout: function () {
var m2o_dialog_opt = this.is_option_set(this.nodeOptions.m2o_dialog) || _.isUndefined(this.nodeOptions.m2o_dialog) && this.is_option_set(this.ir_options['web_m2x_options.m2o_dialog']) || _.isUndefined(this.nodeOptions.m2o_dialog) && _.isUndefined(this.ir_options['web_m2x_options.m2o_dialog']); var m2o_dialog_opt = is_option_set(this.nodeOptions.m2o_dialog) || _.isUndefined(this.nodeOptions.m2o_dialog) && is_option_set(ir_options['web_m2x_options.m2o_dialog']) || _.isUndefined(this.nodeOptions.m2o_dialog) && _.isUndefined(ir_options['web_m2x_options.m2o_dialog']);
if (this.can_create && this.floating && m2o_dialog_opt) { if (this.can_create && this.floating && m2o_dialog_opt) {
new M2ODialog(this, this.string, this.$input.val()).open(); new M2ODialog(this, this.string, this.$input.val()).open();
} }
@ -126,8 +101,8 @@ odoo.define('web_m2x_options.web_m2x_options', function (require) {
// add options limit used to change number of selections record // add options limit used to change number of selections record
// returned. // returned.
if (!_.isUndefined(this.ir_options['web_m2x_options.limit'])) { if (!_.isUndefined(ir_options['web_m2x_options.limit'])) {
this.limit = parseInt(this.ir_options['web_m2x_options.limit'], 10); this.limit = parseInt(ir_options['web_m2x_options.limit'], 10);
} }
if (typeof this.nodeOptions.limit === 'number') { if (typeof this.nodeOptions.limit === 'number') {
@ -198,9 +173,9 @@ odoo.define('web_m2x_options.web_m2x_options', function (require) {
} }
// search more... if more results that max // search more... if more results that max
var can_search_more = (self.nodeOptions && self.is_option_set(self.nodeOptions.search_more)), var can_search_more = (self.nodeOptions && is_option_set(self.nodeOptions.search_more)),
search_more_undef = _.isUndefined(self.nodeOptions.search_more) && _.isUndefined(self.ir_options['web_m2x_options.search_more']), search_more_undef = _.isUndefined(self.nodeOptions.search_more) && _.isUndefined(ir_options['web_m2x_options.search_more']),
search_more = self.is_option_set(self.ir_options['web_m2x_options.search_more']); search_more = is_option_set(ir_options['web_m2x_options.search_more']);
if (values.length > self.limit) { if (values.length > self.limit) {
values = values.slice(0, self.limit); values = values.slice(0, self.limit);
@ -232,10 +207,10 @@ odoo.define('web_m2x_options.web_m2x_options', function (require) {
var create_enabled = self.can_create && !self.nodeOptions.no_create; var create_enabled = self.can_create && !self.nodeOptions.no_create;
// quick create // quick create
var raw_result = _.map(result, function (x) { return x[1]; }); var raw_result = _.map(result, function (x) { return x[1]; });
var quick_create = self.is_option_set(self.nodeOptions.create), var quick_create = is_option_set(self.nodeOptions.create),
quick_create_undef = _.isUndefined(self.nodeOptions.create), quick_create_undef = _.isUndefined(self.nodeOptions.create),
m2x_create_undef = _.isUndefined(self.ir_options['web_m2x_options.create']), m2x_create_undef = _.isUndefined(ir_options['web_m2x_options.create']),
m2x_create = self.is_option_set(self.ir_options['web_m2x_options.create']); m2x_create = is_option_set(ir_options['web_m2x_options.create']);
var show_create = (!self.nodeOptions && (m2x_create_undef || m2x_create)) || (self.nodeOptions && (quick_create || (quick_create_undef && (m2x_create_undef || m2x_create)))); var show_create = (!self.nodeOptions && (m2x_create_undef || m2x_create)) || (self.nodeOptions && (quick_create || (quick_create_undef && (m2x_create_undef || m2x_create))));
if (create_enabled && !self.nodeOptions.no_quick_create && if (create_enabled && !self.nodeOptions.no_quick_create &&
search_val.length > 0 && !_.contains(raw_result, search_val) && search_val.length > 0 && !_.contains(raw_result, search_val) &&
@ -249,10 +224,10 @@ odoo.define('web_m2x_options.web_m2x_options', function (require) {
} }
// create and edit ... // create and edit ...
var create_edit = self.is_option_set(self.nodeOptions.create) || self.is_option_set(self.nodeOptions.create_edit), var create_edit = is_option_set(self.nodeOptions.create) || is_option_set(self.nodeOptions.create_edit),
create_edit_undef = _.isUndefined(self.nodeOptions.create) && _.isUndefined(self.nodeOptions.create_edit), create_edit_undef = _.isUndefined(self.nodeOptions.create) && _.isUndefined(self.nodeOptions.create_edit),
m2x_create_edit_undef = _.isUndefined(self.ir_options['web_m2x_options.create_edit']), m2x_create_edit_undef = _.isUndefined(ir_options['web_m2x_options.create_edit']),
m2x_create_edit = self.is_option_set(self.ir_options['web_m2x_options.create_edit']); m2x_create_edit = is_option_set(ir_options['web_m2x_options.create_edit']);
var show_create_edit = (!self.nodeOptions && (m2x_create_edit_undef || m2x_create_edit)) || (self.nodeOptions && (create_edit || (create_edit_undef && (m2x_create_edit_undef || m2x_create_edit)))); var show_create_edit = (!self.nodeOptions && (m2x_create_edit_undef || m2x_create_edit)) || (self.nodeOptions && (create_edit || (create_edit_undef && (m2x_create_edit_undef || m2x_create_edit))));
if (create_enabled && !self.nodeOptions.no_create_edit && show_create_edit) { if (create_enabled && !self.nodeOptions.no_create_edit && show_create_edit) {
var createAndEditAction = function () { var createAndEditAction = function () {
@ -291,19 +266,9 @@ odoo.define('web_m2x_options.web_m2x_options', function (require) {
return result; return result;
}, },
is_option_set: function (option) {
if (_.isUndefined(option))
return false;
if (typeof option === 'string')
return option === 'true' || option === 'True';
if (typeof option === 'boolean')
return option;
return false
},
_onOpenBadge: function (event) { _onOpenBadge: function (event) {
var self = this; var self = this;
var open = (self.nodeOptions && self.is_option_set(self.nodeOptions.open)); var open = (self.nodeOptions && is_option_set(self.nodeOptions.open));
if (open) { if (open) {
var context = self.record.getContext(self.recordParams); var context = self.record.getContext(self.recordParams);
var id = parseInt($(event.currentTarget).data('id'), 10); var id = parseInt($(event.currentTarget).data('id'), 10);
@ -383,8 +348,8 @@ odoo.define('web_m2x_options.web_m2x_options', function (require) {
}), }),
_onOpenBadge: function (event) { _onOpenBadge: function (event) {
var open = this.is_option_set(this.nodeOptions.open); var open = is_option_set(this.nodeOptions.open);
var no_color_picker = this.is_option_set( var no_color_picker = is_option_set(
this.nodeOptions.no_color_picker this.nodeOptions.no_color_picker
); );
this._super.apply(this, arguments); this._super.apply(this, arguments);

View File

@ -0,0 +1,12 @@
/* Copyright 2020 Tecnativa - Carlos Roca
* * License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). */
odoo.define('web_m2x_options.ir_options', function (require) {
"use strict";
var rpc = require('web.rpc');
return rpc.query({
model: "ir.config_parameter",
method: 'get_web_m2x_options',
});
});

View File

@ -6,6 +6,8 @@
<xpath expr="." position="inside"> <xpath expr="." position="inside">
<script type="text/javascript" <script type="text/javascript"
src="/web_m2x_options/static/src/js/form.js"></script> src="/web_m2x_options/static/src/js/form.js"></script>
<script type="text/javascript"
src="/web_m2x_options/static/src/js/ir_options.js"></script>
</xpath> </xpath>
</template> </template>