Reputation: 404
I want to hide "Create and Edit" button in all form
and also I want to show "Search More" button in all form
Currently Im using odoo 10.
Let's see this addons
https://apps.openerp.com/apps/modules/9.0/web_m2x_options/
I have tried to using that addons, but it does not works at all.
Someone can help me in these case? whether using that addons, or another simple ways to do what I need to do.
I would be apreciate for any responses.
Thanks in advance.
Upvotes: 3
Views: 3987
Reputation: 14751
Here i will change the default behavor of odoo to show create and edit when i want to by using this :
<field name="many2one_field" options="{'create':true, 'quick_create':true}"/>
Now under your costum module direcotry define a javascript file to change the many2one widget
you_costum_module_directory_name
--> static
--> src
--> js
--> costum_many2one_widget.js
javascript file:
odoo.define('you_costum_module_directory_name.costum_many2one_widget' , function(require) {
// I hope that you know how to add this to odoo backendassets
// first we need core
var core = require('web.core');
// it's needed when we override get_search_result
var data = require('web.data');
// NOTE: i may forget to require some object in the code by mistake check it
// now we must get the many2one widget for form widget
var FieldMany2One = core.form_widget_registry.get('many2one');
// now we can override the method to change the behavor
FieldMany2one.include({
// if you want the search more to be always shown we must overrid
// get_search_result and we need to require every thing we need first like data object
// now to show search more always we must reimplement the
get_search_result: function(search_val) {
var self = this;
var dataset = new data.DataSet(this, this.field.relation, self.build_context());
this.last_query = search_val;
var exclusion_domain = [], ids_blacklist = this.get_search_blacklist();
if (!_(ids_blacklist).isEmpty()) {
exclusion_domain.push(['id', 'not in', ids_blacklist]);
}
return this.orderer.add(dataset.name_search(
search_val, new data.CompoundDomain(self.build_domain(), exclusion_domain),
'ilike', this.limit + 1, self.build_context())).then(function(_data) {
self.last_search = _data;
// possible selections for the m2o
var values = _.map(_data, function(x) {
x[1] = x[1].split("\n")[0];
return {
label: _.str.escapeHTML(x[1].trim()) || data.noDisplayContent,
value: x[1],
name: x[1],
id: x[0],
};
});
// show search more if there is only one element at least
// you can make it 0 if you want
if (values.length >= 1) {
values = values.slice(0, self.limit);
values.push({
label: _t("Search More..."),
action: function() {
dataset.name_search(search_val, self.build_domain(), 'ilike', 160).done(function(_data) {
self._search_create_popup("search", _data);
});
},
classname: 'o_m2o_dropdown_option'
});
}
// if the user provide an option quick_create show quick create
var raw_result = _(_data.result).map(function(x) {return x[1];});
if (
search_val.length > 0 &&
!_.include(raw_result, search_val) &&
self.options && self.options.quick_create
) {
self.can_create && values.push({
label: _.str.sprintf(_t('Create "<strong>%s</strong>"'),
$('<span />').text(search_val).html()),
action: function() {
self._quick_create(search_val);
},
classname: 'o_m2o_dropdown_option'
});
}
// if the user provide a create option show create and Edit option
if (self.options && self.options.create && self.can_create){
values.push({
label: _t("Create and Edit..."),
action: function() {
self._search_create_popup("form", undefined, self._create_context(search_val));
},
classname: 'o_m2o_dropdown_option'
});
}
else if (values.length === 0) {
values.push({
label: _t("No results to show..."),
action: function() {},
classname: 'o_m2o_dropdown_option'
});
}
return values;
});
}
});
// id don't know if this line is required or not
// but if we have to registre the widget again
core.form_widget_registry.add('many2one', FieldMany2One);
});
Now you need to add the js file to you backendassets template
you_costum_module_directory_name
--> static
--> src
--> js
--> costum_many2one_widget.js
--> xml
--> widgets.xml
add xml file to manifest :
<?xml version="1.0" encoding="utf-8" ?>
<openerp> <!-- odoo in odoo 10.0 -->
<data>
<!--We need to load our js file to backend_assets-->
<template id="assets_backend" name="many2one new edits " inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<script type="text/javascript" src="/you_costum_module_directory_name/static/src/js/costum_many2one_widget.js"></script>
</xpath>
</template>
</data>
</openerp>
in your manifest __openerp__.py
add the xml file:
Upvotes: 2
Reputation: 1155
It's possible to use it for all module. But You need to create a record in the ir.config.parameter.
Configuration -> Technical -> Parameters -> System Parameters
To remove the create_edit button you must add this information.
Key :"web_m2x_options.create_edit" Value : "false".
And to add search more on any many2one and Many2many field, you must add.
Key :"web_m2x_options.search_more" Value : "true".
PS: You can see more information on this github page https://github.com/OCA/web/tree/9.0/web_m2x_options
Upvotes: 2
Reputation: 3822
You can take a slection widget to your field :
<field name="your_one2many_field" widget="selection"/>
To hide "Create and edit" use :
<field name="your_one2many_field" options="{'no_create_edit':True}"/>
Upvotes: 1