mirror of https://github.com/OCA/web.git
commit
9b552beb75
|
@ -23,7 +23,7 @@ web_m2x_options
|
||||||
:target: https://runbot.odoo-community.org/runbot/162/14.0
|
:target: https://runbot.odoo-community.org/runbot/162/14.0
|
||||||
:alt: Try me on Runbot
|
: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
|
This modules modifies "many2one" and "many2manytags" form widgets so as to add some new display
|
||||||
control options.
|
control options.
|
||||||
|
@ -115,6 +115,10 @@ If you disable one option, you can enable it for particular field by setting "cr
|
||||||
|
|
||||||
Whether the field should always show "Search more..." entry or not.
|
Whether the field should always show "Search more..." entry or not.
|
||||||
|
|
||||||
|
``web_m2x_options.field_limit_entries`` *int*
|
||||||
|
|
||||||
|
Number of displayed lines on all One2many fields
|
||||||
|
|
||||||
To add these parameters go to Configuration -> Technical -> Parameters -> System Parameters and add new parameters like:
|
To add these parameters go to Configuration -> Technical -> Parameters -> System Parameters and add new parameters like:
|
||||||
|
|
||||||
- web_m2x_options.create: False
|
- web_m2x_options.create: False
|
||||||
|
@ -122,6 +126,7 @@ To add these parameters go to Configuration -> Technical -> Parameters -> System
|
||||||
- web_m2x_options.m2o_dialog: False
|
- web_m2x_options.m2o_dialog: False
|
||||||
- web_m2x_options.limit: 10
|
- web_m2x_options.limit: 10
|
||||||
- web_m2x_options.search_more: True
|
- web_m2x_options.search_more: True
|
||||||
|
- web_m2x_options.field_limit_entries: 5
|
||||||
|
|
||||||
|
|
||||||
Example
|
Example
|
||||||
|
@ -178,6 +183,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)
|
||||||
|
|
||||||
|
|
|
@ -12,5 +12,9 @@ class IrConfigParameter(models.Model):
|
||||||
"web_m2x_options.limit",
|
"web_m2x_options.limit",
|
||||||
"web_m2x_options.search_more",
|
"web_m2x_options.search_more",
|
||||||
"web_m2x_options.m2o_dialog",
|
"web_m2x_options.m2o_dialog",
|
||||||
|
"web_m2x_options.field_limit_entries",
|
||||||
]
|
]
|
||||||
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>
|
* 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)
|
||||||
|
|
|
@ -37,7 +37,7 @@ in the field's options dict
|
||||||
|
|
||||||
``open`` *boolean* (Default: ``False``)
|
``open`` *boolean* (Default: ``False``)
|
||||||
|
|
||||||
Makes many2many_tags buttons that open the linked resource
|
Makes many2many_tags and one2many rows buttons that open the linked resource
|
||||||
|
|
||||||
``no_color_picker`` *boolean* (Default: ``False``)
|
``no_color_picker`` *boolean* (Default: ``False``)
|
||||||
|
|
||||||
|
@ -69,6 +69,10 @@ If you disable one option, you can enable it for particular field by setting "cr
|
||||||
|
|
||||||
Whether the field should always show "Search more..." entry or not.
|
Whether the field should always show "Search more..." entry or not.
|
||||||
|
|
||||||
|
``web_m2x_options.field_limit_entries`` *int*
|
||||||
|
|
||||||
|
Number of displayed lines on all One2many fields
|
||||||
|
|
||||||
To add these parameters go to Configuration -> Technical -> Parameters -> System Parameters and add new parameters like:
|
To add these parameters go to Configuration -> Technical -> Parameters -> System Parameters and add new parameters like:
|
||||||
|
|
||||||
- web_m2x_options.create: False
|
- web_m2x_options.create: False
|
||||||
|
@ -76,6 +80,7 @@ To add these parameters go to Configuration -> Technical -> Parameters -> System
|
||||||
- web_m2x_options.m2o_dialog: False
|
- web_m2x_options.m2o_dialog: False
|
||||||
- web_m2x_options.limit: 10
|
- web_m2x_options.limit: 10
|
||||||
- web_m2x_options.search_more: True
|
- web_m2x_options.search_more: True
|
||||||
|
- web_m2x_options.field_limit_entries: 5
|
||||||
|
|
||||||
|
|
||||||
Example
|
Example
|
||||||
|
|
|
@ -7,19 +7,23 @@ 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,
|
||||||
FieldMany2One = relational_fields.FieldMany2One,
|
FieldMany2One = relational_fields.FieldMany2One,
|
||||||
|
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 +97,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 +111,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 +202,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 +269,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 +302,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 +351,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 +377,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);
|
||||||
|
@ -462,14 +435,37 @@ odoo.define("web_m2x_options.web_m2x_options", function (require) {
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
FieldOne2Many.include({
|
||||||
|
_onOpenRecord: function (ev) {
|
||||||
|
var self = this;
|
||||||
|
var open = this.nodeOptions.open;
|
||||||
|
if (open && self.mode === "readonly") {
|
||||||
|
ev.stopPropagation();
|
||||||
|
var id = ev.data.id;
|
||||||
|
var res_id = self.record.data[self.name].data.filter(
|
||||||
|
(line) => line.id === id
|
||||||
|
)[0].res_id;
|
||||||
|
self._rpc({
|
||||||
|
model: self.field.relation,
|
||||||
|
method: "get_formview_action",
|
||||||
|
args: [[res_id]],
|
||||||
|
}).then(function (action) {
|
||||||
|
return self.do_action(action);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
return this._super.apply(this, arguments);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
FormFieldMany2ManyTags.include({
|
FormFieldMany2ManyTags.include({
|
||||||
events: _.extend({}, FormFieldMany2ManyTags.prototype.events, {
|
events: _.extend({}, FormFieldMany2ManyTags.prototype.events, {
|
||||||
"click .badge": "_onOpenBadge",
|
"click .badge": "_onOpenBadge",
|
||||||
}),
|
}),
|
||||||
|
|
||||||
_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);
|
||||||
|
@ -479,4 +475,16 @@ odoo.define("web_m2x_options.web_m2x_options", function (require) {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Extending class to allow change the limit of o2m registry entries using the
|
||||||
|
// system parameter "web_m2x_options.field_limit_entries".
|
||||||
|
FormView.include({
|
||||||
|
_setSubViewLimit: function (attrs) {
|
||||||
|
this._super(attrs);
|
||||||
|
var limit = ir_options["web_m2x_options.field_limit_entries"];
|
||||||
|
if (!_.isUndefined(limit)) {
|
||||||
|
attrs.limit = parseInt(limit);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -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",
|
||||||
|
});
|
||||||
|
});
|
|
@ -5,7 +5,7 @@
|
||||||
<t t-extend="FieldMany2One">
|
<t t-extend="FieldMany2One">
|
||||||
<t t-jquery=".o_external_button" t-operation="attributes">
|
<t t-jquery=".o_external_button" t-operation="attributes">
|
||||||
<attribute name="t-if">
|
<attribute name="t-if">
|
||||||
!(widget.nodeOptions.no_open || widget.nodeOptions.no_open_edit)
|
!(widget.nodeOptions.no_open || widget.nodeOptions.no_open_edit || widget.noOpen)
|
||||||
</attribute>
|
</attribute>
|
||||||
</t>
|
</t>
|
||||||
</t>
|
</t>
|
||||||
|
|
|
@ -16,15 +16,13 @@ class TestIrConfigParameter(common.SavepointCase):
|
||||||
|
|
||||||
def test_web_m2x_options_key(self):
|
def test_web_m2x_options_key(self):
|
||||||
web_m2x_options = self.env["ir.config_parameter"].get_web_m2x_options()
|
web_m2x_options = self.env["ir.config_parameter"].get_web_m2x_options()
|
||||||
options = {opt["key"]: opt["value"] for opt in web_m2x_options}
|
self.assertIn("web_m2x_options.limit", web_m2x_options)
|
||||||
self.assertIn("web_m2x_options.limit", options)
|
self.assertNotIn("web_m2x_options.m2o_dialog_test", web_m2x_options)
|
||||||
self.assertNotIn("web_m2x_options.m2o_dialog_test", options)
|
|
||||||
|
|
||||||
def test_web_m2x_options_value(self):
|
def test_web_m2x_options_value(self):
|
||||||
web_m2x_options = self.env["ir.config_parameter"].get_web_m2x_options()
|
web_m2x_options = self.env["ir.config_parameter"].get_web_m2x_options()
|
||||||
options = {opt["key"]: opt["value"] for opt in web_m2x_options}
|
self.assertEqual(web_m2x_options["web_m2x_options.limit"], "10")
|
||||||
self.assertEqual(options["web_m2x_options.limit"], "10")
|
self.assertTrue(bool(web_m2x_options["web_m2x_options.create_edit"]))
|
||||||
self.assertTrue(bool(options["web_m2x_options.create_edit"]))
|
self.assertTrue(bool(web_m2x_options["web_m2x_options.create"]))
|
||||||
self.assertTrue(bool(options["web_m2x_options.create"]))
|
self.assertEqual(web_m2x_options["web_m2x_options.search_more"], "False")
|
||||||
self.assertEqual(options["web_m2x_options.search_more"], "False")
|
self.assertTrue(bool(web_m2x_options["web_m2x_options.m2o_dialog"]))
|
||||||
self.assertTrue(bool(options["web_m2x_options.m2o_dialog"]))
|
|
||||||
|
|
|
@ -10,6 +10,10 @@
|
||||||
type="text/javascript"
|
type="text/javascript"
|
||||||
src="/web_m2x_options/static/src/js/form.js"
|
src="/web_m2x_options/static/src/js/form.js"
|
||||||
/>
|
/>
|
||||||
|
<script
|
||||||
|
type="text/javascript"
|
||||||
|
src="/web_m2x_options/static/src/js/ir_options.js"
|
||||||
|
/>
|
||||||
</xpath>
|
</xpath>
|
||||||
</template>
|
</template>
|
||||||
</odoo>
|
</odoo>
|
||||||
|
|
Loading…
Reference in New Issue