[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.
pull/2174/head
Carlos Roca 2020-11-09 10:19:56 +01:00 committed by nguyenhk
parent acec64f61f
commit 7fb6885241
6 changed files with 64 additions and 72 deletions

View File

@ -178,6 +178,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
* Bhavesh Odedra <bodedra@opensourceintegrators.com> * Bhavesh Odedra <bodedra@opensourceintegrators.com>
* Dhara Solanki <dhara.solanki@initos.com> (http://www.initos.com) * Dhara Solanki <dhara.solanki@initos.com> (http://www.initos.com)

View File

@ -17,7 +17,10 @@
"license": "AGPL-3", "license": "AGPL-3",
"depends": ["web"], "depends": ["web"],
"assets": { "assets": {
"web.assets_backend": ["web_m2x_options/static/src/js/form.js"], "web.assets_backend": [
"web_m2x_options/static/src/js/form.js",
"web_m2x_options/static/src/js/ir_options.js",
],
"web.assets_qweb": ["web_m2x_options/static/src/xml/base.xml"], "web.assets_qweb": ["web_m2x_options/static/src/xml/base.xml"],
}, },
"installable": True, "installable": True,

View File

@ -13,4 +13,7 @@ class IrConfigParameter(models.Model):
"web_m2x_options.search_more", "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,5 +9,6 @@
* 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
* Bhavesh Odedra <bodedra@opensourceintegrators.com> * Bhavesh Odedra <bodedra@opensourceintegrators.com>
* Dhara Solanki <dhara.solanki@initos.com> (http://www.initos.com) * Dhara Solanki <dhara.solanki@initos.com> (http://www.initos.com)

View File

@ -6,9 +6,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,
@ -16,10 +17,12 @@ 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)) return false;
method: "get_web_m2x_options", 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",
@ -93,43 +96,13 @@ 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.then(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 = var m2o_dialog_opt =
this.is_option_set(this.nodeOptions.m2o_dialog) || is_option_set(this.nodeOptions.m2o_dialog) ||
(_.isUndefined(this.nodeOptions.m2o_dialog) && (_.isUndefined(this.nodeOptions.m2o_dialog) &&
this.is_option_set( is_option_set(ir_options["web_m2x_options.m2o_dialog"])) ||
this.ir_options["web_m2x_options.m2o_dialog"]
)) ||
(_.isUndefined(this.nodeOptions.m2o_dialog) && (_.isUndefined(this.nodeOptions.m2o_dialog) &&
_.isUndefined(this.ir_options["web_m2x_options.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();
} }
@ -137,14 +110,12 @@ odoo.define("web_m2x_options.web_m2x_options", function (require) {
_search: function (search_val) { _search: function (search_val) {
var self = this; var self = this;
if (search_val === undefined) {
return this._super.apply(this, arguments);
}
var def = new Promise((resolve) => { var def = new Promise((resolve) => {
// Add options limit used to change number of selections record // Add options limit used to change number of selections record
// returned. // returned.
if (!_.isUndefined(self.ir_options["web_m2x_options.limit"])) { if (!_.isUndefined(ir_options["web_m2x_options.limit"])) {
this.limit = parseInt(self.ir_options["web_m2x_options.limit"], 10); this.limit = parseInt(ir_options["web_m2x_options.limit"], 10);
} }
if (typeof self.nodeOptions.limit === "number") { if (typeof self.nodeOptions.limit === "number") {
@ -230,14 +201,12 @@ odoo.define("web_m2x_options.web_m2x_options", function (require) {
// 4- if set globally, apply its value // 4- if set globally, apply its value
// 5- if not set globally either, check if returned values are more than node's limit // 5- if not set globally either, check if returned values are more than node's limit
if (!_.isUndefined(self.nodeOptions.search_more)) { if (!_.isUndefined(self.nodeOptions.search_more)) {
var search_more = self.is_option_set( var search_more = is_option_set(self.nodeOptions.search_more);
self.nodeOptions.search_more
);
} else if ( } else if (
!_.isUndefined(self.ir_options["web_m2x_options.search_more"]) !_.isUndefined(ir_options["web_m2x_options.search_more"])
) { ) {
var search_more = self.is_option_set( var search_more = is_option_set(
self.ir_options["web_m2x_options.search_more"] ir_options["web_m2x_options.search_more"]
); );
} else { } else {
var search_more = values.length > self.limit; var search_more = values.length > self.limit;
@ -299,13 +268,13 @@ odoo.define("web_m2x_options.web_m2x_options", function (require) {
var raw_result = _.map(result, function (x) { var raw_result = _.map(result, function (x) {
return x[1]; 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( m2x_create_undef = _.isUndefined(
self.ir_options["web_m2x_options.create"] ir_options["web_m2x_options.create"]
), ),
m2x_create = self.is_option_set( m2x_create = is_option_set(
self.ir_options["web_m2x_options.create"] ir_options["web_m2x_options.create"]
); );
var show_create = var show_create =
(!self.nodeOptions && (m2x_create_undef || m2x_create)) || (!self.nodeOptions && (m2x_create_undef || m2x_create)) ||
@ -332,16 +301,16 @@ odoo.define("web_m2x_options.web_m2x_options", function (require) {
// Create and edit ... // Create and edit ...
var create_edit = var create_edit =
self.is_option_set(self.nodeOptions.create) || is_option_set(self.nodeOptions.create) ||
self.is_option_set(self.nodeOptions.create_edit), is_option_set(self.nodeOptions.create_edit),
create_edit_undef = create_edit_undef =
_.isUndefined(self.nodeOptions.create) && _.isUndefined(self.nodeOptions.create) &&
_.isUndefined(self.nodeOptions.create_edit), _.isUndefined(self.nodeOptions.create_edit),
m2x_create_edit_undef = _.isUndefined( m2x_create_edit_undef = _.isUndefined(
self.ir_options["web_m2x_options.create_edit"] ir_options["web_m2x_options.create_edit"]
), ),
m2x_create_edit = self.is_option_set( m2x_create_edit = is_option_set(
self.ir_options["web_m2x_options.create_edit"] ir_options["web_m2x_options.create_edit"]
); );
var show_create_edit = var show_create_edit =
(!self.nodeOptions && (!self.nodeOptions &&
@ -381,6 +350,17 @@ odoo.define("web_m2x_options.web_m2x_options", function (require) {
}); });
}); });
this.orderer.add(def); this.orderer.add(def);
// Add options limit used to change number of selections record
// returned.
if (!_.isUndefined(ir_options["web_m2x_options.limit"])) {
this.limit = parseInt(ir_options["web_m2x_options.limit"], 10);
}
if (typeof this.nodeOptions.limit === "number") {
this.limit = this.nodeOptions.limit;
}
return def; return def;
}, },
}); });
@ -396,17 +376,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);
@ -491,8 +463,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(this.nodeOptions.no_color_picker); var no_color_picker = is_option_set(this.nodeOptions.no_color_picker);
this._super.apply(this, arguments); this._super.apply(this, arguments);
if (!open && !no_color_picker) { if (!open && !no_color_picker) {
this._onOpenColorPicker(event); this._onOpenColorPicker(event);

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",
});
});