forked from Techsystech/web
[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.17.0
parent
bf17a7d618
commit
eade95d350
|
@ -23,7 +23,7 @@ web_m2x_options
|
|||
:target: https://runbot.odoo-community.org/runbot/162/15.0
|
||||
:alt: Try me on Runbot
|
||||
|
||||
|badge1| |badge2| |badge3| |badge4| |badge5|
|
||||
|badge1| |badge2| |badge3| |badge4| |badge5|
|
||||
|
||||
This modules modifies "many2one" and "many2manytags" form widgets so as to add some new display
|
||||
control options.
|
||||
|
@ -178,6 +178,7 @@ Contributors
|
|||
* Jairo Llopis <jairo.llopis@tecnativa.com>
|
||||
* David Vidal <david.vidal@tecnativa.com>
|
||||
* Ernesto Tejeda <ernesto.tejeda87@gmail.com>
|
||||
* Carlos Roca
|
||||
* Bhavesh Odedra <bodedra@opensourceintegrators.com>
|
||||
* Dhara Solanki <dhara.solanki@initos.com> (http://www.initos.com)
|
||||
|
||||
|
|
|
@ -17,7 +17,10 @@
|
|||
"license": "AGPL-3",
|
||||
"depends": ["web"],
|
||||
"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"],
|
||||
},
|
||||
"installable": True,
|
||||
|
|
|
@ -13,4 +13,7 @@ class IrConfigParameter(models.Model):
|
|||
"web_m2x_options.search_more",
|
||||
"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"])
|
||||
}
|
||||
|
|
|
@ -9,5 +9,6 @@
|
|||
* Jairo Llopis <jairo.llopis@tecnativa.com>
|
||||
* David Vidal <david.vidal@tecnativa.com>
|
||||
* Ernesto Tejeda <ernesto.tejeda87@gmail.com>
|
||||
* Carlos Roca
|
||||
* Bhavesh Odedra <bodedra@opensourceintegrators.com>
|
||||
* Dhara Solanki <dhara.solanki@initos.com> (http://www.initos.com)
|
||||
|
|
|
@ -6,9 +6,10 @@ odoo.define("web_m2x_options.web_m2x_options", function (require) {
|
|||
var core = require("web.core"),
|
||||
data = require("web.data"),
|
||||
Dialog = require("web.Dialog"),
|
||||
FormView = require("web.FormView"),
|
||||
view_dialogs = require("web.view_dialogs"),
|
||||
relational_fields = require("web.relational_fields"),
|
||||
rpc = require("web.rpc");
|
||||
ir_options = require("web_m2x_options.ir_options");
|
||||
|
||||
var _t = core._t,
|
||||
FieldMany2ManyTags = relational_fields.FieldMany2ManyTags,
|
||||
|
@ -16,10 +17,12 @@ odoo.define("web_m2x_options.web_m2x_options", function (require) {
|
|||
FieldOne2Many = relational_fields.FieldOne2Many,
|
||||
FormFieldMany2ManyTags = relational_fields.FormFieldMany2ManyTags;
|
||||
|
||||
var web_m2x_options = rpc.query({
|
||||
model: "ir.config_parameter",
|
||||
method: "get_web_m2x_options",
|
||||
});
|
||||
function is_option_set(option) {
|
||||
if (_.isUndefined(option)) return false;
|
||||
if (typeof option === "string") return option === "true" || option === "True";
|
||||
if (typeof option === "boolean") return option;
|
||||
return false;
|
||||
}
|
||||
|
||||
var M2ODialog = Dialog.extend({
|
||||
template: "M2ODialog",
|
||||
|
@ -93,43 +96,13 @@ odoo.define("web_m2x_options.web_m2x_options", function (require) {
|
|||
});
|
||||
|
||||
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 () {
|
||||
var m2o_dialog_opt =
|
||||
this.is_option_set(this.nodeOptions.m2o_dialog) ||
|
||||
is_option_set(this.nodeOptions.m2o_dialog) ||
|
||||
(_.isUndefined(this.nodeOptions.m2o_dialog) &&
|
||||
this.is_option_set(
|
||||
this.ir_options["web_m2x_options.m2o_dialog"]
|
||||
)) ||
|
||||
is_option_set(ir_options["web_m2x_options.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) {
|
||||
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) {
|
||||
var self = this;
|
||||
if (search_val === undefined) {
|
||||
return this._super.apply(this, arguments);
|
||||
}
|
||||
|
||||
var def = new Promise((resolve) => {
|
||||
// Add options limit used to change number of selections record
|
||||
// returned.
|
||||
if (!_.isUndefined(self.ir_options["web_m2x_options.limit"])) {
|
||||
this.limit = parseInt(self.ir_options["web_m2x_options.limit"], 10);
|
||||
if (!_.isUndefined(ir_options["web_m2x_options.limit"])) {
|
||||
this.limit = parseInt(ir_options["web_m2x_options.limit"], 10);
|
||||
}
|
||||
|
||||
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
|
||||
// 5- if not set globally either, check if returned values are more than node's limit
|
||||
if (!_.isUndefined(self.nodeOptions.search_more)) {
|
||||
var search_more = self.is_option_set(
|
||||
self.nodeOptions.search_more
|
||||
);
|
||||
var search_more = is_option_set(self.nodeOptions.search_more);
|
||||
} 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(
|
||||
self.ir_options["web_m2x_options.search_more"]
|
||||
var search_more = is_option_set(
|
||||
ir_options["web_m2x_options.search_more"]
|
||||
);
|
||||
} else {
|
||||
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) {
|
||||
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),
|
||||
m2x_create_undef = _.isUndefined(
|
||||
self.ir_options["web_m2x_options.create"]
|
||||
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)) ||
|
||||
|
@ -332,16 +301,16 @@ odoo.define("web_m2x_options.web_m2x_options", function (require) {
|
|||
// Create and edit ...
|
||||
|
||||
var create_edit =
|
||||
self.is_option_set(self.nodeOptions.create) ||
|
||||
self.is_option_set(self.nodeOptions.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),
|
||||
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(
|
||||
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 &&
|
||||
|
@ -381,6 +350,17 @@ odoo.define("web_m2x_options.web_m2x_options", function (require) {
|
|||
});
|
||||
});
|
||||
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;
|
||||
},
|
||||
});
|
||||
|
@ -396,17 +376,9 @@ odoo.define("web_m2x_options.web_m2x_options", function (require) {
|
|||
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) {
|
||||
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) {
|
||||
var context = self.record.getContext(self.recordParams);
|
||||
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) {
|
||||
var open = this.is_option_set(this.nodeOptions.open);
|
||||
var no_color_picker = this.is_option_set(this.nodeOptions.no_color_picker);
|
||||
var open = is_option_set(this.nodeOptions.open);
|
||||
var no_color_picker = is_option_set(this.nodeOptions.no_color_picker);
|
||||
this._super.apply(this, arguments);
|
||||
if (!open && !no_color_picker) {
|
||||
this._onOpenColorPicker(event);
|
||||
|
|
|
@ -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",
|
||||
});
|
||||
});
|
Loading…
Reference in New Issue