Browse Source

Backported from 8.0 to 7.0 the ability to use ir.config_parameter options to disable "Create..." and "Create and Edit..." entry for all widgets in the odoo instance.

pull/114/head
jbeficent 10 years ago
parent
commit
4420e6c38b
  1. 29
      web_m2x_options/README.rst
  2. 75
      web_m2x_options/static/src/js/form.js

29
web_m2x_options/README.rst

@ -11,6 +11,8 @@ control options.
** New: support many2manytags widget ! ** ** New: support many2manytags widget ! **
** New: support global option management with ir.config_parameter ! **
Options provided includes possibility to remove "Create..." and/or "Create and Options provided includes possibility to remove "Create..." and/or "Create and
Edit..." entries from many2one drop down. You can also change default number of Edit..." entries from many2one drop down. You can also change default number of
proposition appearing in the drop-down. Or prevent the dialog box poping in proposition appearing in the drop-down. Or prevent the dialog box poping in
@ -46,6 +48,31 @@ New option
Number of displayed record in drop-down panel Number of displayed record in drop-down panel
ir.config_parameter options
---------------------------
Now you can disable "Create..." and "Create and Edit..." entry for all widgets in the odoo instance.
If you disable one option, you can enable it for particular field by setting "create: True" option directly on the field definition.
``web_m2x_options.create`` *boolean* (Default: depends if user have create rights)
Whether to display the "Create..." entry in dropdown panel for all fields in the odoo instance.
``web_m2x_options.create_edit`` *boolean* (Default: depends if user have create rights)
Whether to display "Create and Edit..." entry in dropdown panel for all fields in the odoo instance.
``web_m2x_options.limit`` *int* (Default: openerp default value is ``7``)
Number of displayed records in drop-down panel for all fields in the odoo instance
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_edit: False
- web_m2x_options.limit: 10
Example Example
------- -------
@ -59,5 +86,5 @@ Note
---- ----
Double check that you have no inherited view that remote ``options`` you set on a field ! Double check that you have no inherited view that remote ``options`` you set on a field !
If nothing work, add a debugger in the first ligne of ``get_search_result method`` and enable debug mode in OpenERP. When you write something in a many2one field, javascript debugger should pause. If not verify your installation.
If nothing work, add a debugger in the first line of ``get_search_result`` method and enable debug mode in OpenERP. When you write something in a many2one field, javascript debugger should pause. If not verify your installation.

75
web_m2x_options/static/src/js/form.js

@ -8,8 +8,35 @@ openerp.web_m2x_options = function (instance) {
_t = instance.web._t, _t = instance.web._t,
_lt = instance.web._lt; _lt = instance.web._lt;
var OPTIONS = ['web_m2x_options.create',
'web_m2x_options.create_edit',
'web_m2x_options.limit',];
instance.web.form.FieldMany2One.include({ instance.web.form.FieldMany2One.include({
start: function() {
this._super.apply(this, arguments);
return this.get_options();
},
get_options: function() {
var self = this;
if (!_.isUndefined(this.view) && _.isUndefined(this.view.ir_options_loaded)) {
this.view.ir_options_loaded = $.Deferred();
this.view.ir_options = {};
(new instance.web.Model("ir.config_parameter"))
.query(["key", "value"]).filter([['key', 'in', OPTIONS]])
.all().then(function(records) {
_(records).each(function(record) {
self.view.ir_options[record.key] = record.value;
});
self.view.ir_options_loaded.resolve();
});
return this.view.ir_options_loaded;
}
return $.when();
},
show_error_displayer: function () { show_error_displayer: function () {
if ((typeof this.options.m2o_dialog === 'undefined' && this.can_create) || if ((typeof this.options.m2o_dialog === 'undefined' && this.can_create) ||
this.options.m2o_dialog) { this.options.m2o_dialog) {
@ -24,6 +51,12 @@ openerp.web_m2x_options = function (instance) {
// 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.view))
return this._super.apply(this, arguments);
if (!_.isUndefined(this.view.ir_options['web_m2x_options.limit'])) {
this.limit = parseInt(this.view.ir_options['web_m2x_options.limit']);
}
if (typeof this.options.limit === 'number') { if (typeof this.options.limit === 'number') {
this.limit = this.options.limit; this.limit = this.options.limit;
} }
@ -65,7 +98,7 @@ openerp.web_m2x_options = function (instance) {
}; };
}); });
// search more... if more results that max
// search more... if more results than max
if (values.length > self.limit) { if (values.length > self.limit) {
values = values.slice(0, self.limit); values = values.slice(0, self.limit);
@ -88,7 +121,8 @@ openerp.web_m2x_options = function (instance) {
return x[1]; return x[1];
}); });
if ((typeof self.options.create === 'undefined' && can_create) ||
if ((_.isUndefined(self.options.create) && _.isUndefined(self.view.ir_options['web_m2x_options.create']) && can_create) ||
(_.isUndefined(self.options.create) && self.view.ir_options['web_m2x_options.create'] == "True") ||
self.options.create) { self.options.create) {
if (search_val.length > 0 && if (search_val.length > 0 &&
@ -106,9 +140,11 @@ openerp.web_m2x_options = function (instance) {
} }
} }
// create... // create...
if ((typeof self.options.create_edit === 'undefined' && can_create) ||
if ((_.isUndefined(self.options.create_edit) && _.isUndefined(self.view.ir_options['web_m2x_options.create_edit']) && can_create) ||
(_.isUndefined(self.options.create) && self.view.ir_options['web_m2x_options.create_edit'] == "True") ||
self.options.create_edit) { self.options.create_edit) {
values.push({ values.push({
@ -138,6 +174,28 @@ openerp.web_m2x_options = function (instance) {
} }
}, },
start: function() {
this._super.apply(this, arguments);
return this.get_options();
},
get_options: function() {
var self = this;
if (_.isUndefined(this.view.ir_options_loaded)) {
this.view.ir_options_loaded = $.Deferred();
this.view.ir_options = {};
(new instance.web.Model("ir.config_parameter"))
.query(["key", "value"]).filter([['key', 'in', OPTIONS]])
.all().then(function(records) {
_(records).each(function(record) {
self.view.ir_options[record.key] = record.value;
});
self.view.ir_options_loaded.resolve();
});
}
return this.view.ir_options_loaded;
},
/** /**
* Call this method to search using a string. * Call this method to search using a string.
*/ */
@ -148,6 +206,10 @@ openerp.web_m2x_options = function (instance) {
// 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.view.ir_options['web_m2x_options.limit'])) {
this.limit = parseInt(this.view.ir_options['web_m2x_options.limit']);
}
if (typeof this.options.limit === 'number') { if (typeof this.options.limit === 'number') {
this.limit = this.options.limit; this.limit = this.options.limit;
} }
@ -186,7 +248,8 @@ openerp.web_m2x_options = function (instance) {
} }
// quick create // quick create
if ((typeof self.options.create === 'undefined') ||
if ((_.isUndefined(self.options.create) && _.isUndefined(self.view.ir_options['web_m2x_options.create'])) ||
(_.isUndefined(self.options.create) && self.view.ir_options['web_m2x_options.create'] == 'True') ||
self.options.create) { self.options.create) {
var raw_result = _(data.result).map(function(x) {return x[1];}); var raw_result = _(data.result).map(function(x) {return x[1];});
@ -201,10 +264,10 @@ openerp.web_m2x_options = function (instance) {
}); });
} }
} }
// create... // create...
if ((typeof self.options.create_edit === 'undefined') ||
if ((_.isUndefined(self.options.create_edit === 'undefined') && _.isUndefined(self.view.ir_options['web_m2x_options.create_edit'])) ||
(_.isUndefined(self.options.create) && self.view.ir_options['web_m2x_options.create_edit'] == 'True') ||
self.options.create_edit) { self.options.create_edit) {
values.push({ values.push({

Loading…
Cancel
Save