diff --git a/web_tree_many2one_clickable/README.rst b/web_tree_many2one_clickable/README.rst new file mode 100644 index 00000000..b00c817e --- /dev/null +++ b/web_tree_many2one_clickable/README.rst @@ -0,0 +1,65 @@ +Clickable many2one fields for tree views +======================================== + +This addon provides a separate widget to allow many2one fields in a tree view +open the linked resource when clicking on their name. + +You can also define a system parameter to have this behaviour for all the +existing many2one fields in tree views. + +Installation +============ + +Install it the regular way. + +Configuration +============= + +If you want to have all many2one fields clickable by default, you have to +define in *Configuration > Technical > Parameters > System parameters*, a new +parameter with name `web_tree_many2one_clickable.default` and with value +`true`. + +Usage +===== + +For the widget option, you need to add `widget="many2one_clickable"` attribute +in the XML field definition in the tree view. + +For example: + +`` + +will open the linked partner in a form view. + +Known issues / Roadmap +====================== + +* You cannot deactivate clickable behaviour for an specific many2one field if + you configure the system parameter. +* The value of the system parameter is retrieved for each many2one field + present in the view instead of only once. + +Credits +======= + +Contributors +------------ + +* Therp BV +* Pedro M. Baeza + +Maintainer +---------- + +.. image:: http://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: http://odoo-community.org + +This module is maintained by the OCA. + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +To contribute to this module, please visit http://odoo-community.org. diff --git a/web_tree_many2one_clickable/__init__.py b/web_tree_many2one_clickable/__init__.py new file mode 100644 index 00000000..f6974117 --- /dev/null +++ b/web_tree_many2one_clickable/__init__.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# This module copyright (C) 2013 Therp BV (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## diff --git a/web_tree_many2one_clickable/__openerp__.py b/web_tree_many2one_clickable/__openerp__.py new file mode 100644 index 00000000..98a8f17c --- /dev/null +++ b/web_tree_many2one_clickable/__openerp__.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# This module copyright +# (C) 2013 Therp BV (). +# (c) 2015 Serv. Tecnol. Avanzados (http://www.serviciosbaeza.com) +# Pedro M. Baeza +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +{ + "name": "Clickable many2one fields for tree views", + "version": "1.0", + "author": "Therp BV, " + "Serv. Tecnol. Avanzados - Pedro M. Baeza, " + "Odoo Community Association (OCA)", + "category": "Dependency", + "depends": [ + 'web', + ], + "data": [ + 'views/asset.xml', + ], + "installable": True, +} diff --git a/web_tree_many2one_clickable/static/description/icon.png b/web_tree_many2one_clickable/static/description/icon.png new file mode 100644 index 00000000..f1006195 Binary files /dev/null and b/web_tree_many2one_clickable/static/description/icon.png differ diff --git a/web_tree_many2one_clickable/static/src/js/web_tree_many2one_clickable.js b/web_tree_many2one_clickable/static/src/js/web_tree_many2one_clickable.js new file mode 100644 index 00000000..e05f226a --- /dev/null +++ b/web_tree_many2one_clickable/static/src/js/web_tree_many2one_clickable.js @@ -0,0 +1,102 @@ +//-*- coding: utf-8 -*- +//############################################################################ +// +// OpenERP, Open Source Management Solution +// This module copyright +// (C) 2013 Therp BV (). +// (c) 2015 Serv. Tecnol. Avanzados (http://www.serviciosbaeza.com) +// Pedro M. Baeza +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . +// +//############################################################################ + +openerp.web_tree_many2one_clickable = function(instance, local) +{ + instance.web.list.Column.include({ + /* + Load config parameter at init and store it in an accessible variable. + */ + init: function(id, tag, attrs) { + this._super(id, tag, attrs); + if (this.widget == 'many2one_clickable') { + this.use_many2one_clickable = true; + } else if (this.type == 'many2one') { + this.get_options(); + } + }, + + get_options: function() { + if (_.isUndefined(this.ir_option_clickable_loaded)) { + var self = this; // Needed for binding the instance + this.ir_option_clickable_loaded = $.Deferred(); + this.use_many2one_clickable = false; + (new instance.web.Model("ir.config_parameter")) + .query(["value"]) + .filter([['key', '=', 'web_tree_many2one_clickable.default']]) + .first() + .then(function(param) { + self.use_many2one_clickable = (param.value == 'true'); + self.ir_option_clickable_loaded.resolve(); + }); + return this.ir_option_clickable_loaded; + } + return $.when(); + }, + + _format: function (row_data, options) + { + if (this.use_many2one_clickable) { + return _.str.sprintf('%s', + this.relation, + row_data[this.id].value[0], + _.escape(row_data[this.id].value[1] || options.value_if_empty)); + } + else { + return this._super(row_data, options); + } + }, + + }); + + /* many2one_clickable widget */ + + instance.web.list.columns.add( + 'field.many2one_clickable', + 'instance.web_tree_many2one_clickable.Many2OneClickable'); + + instance.web_tree_many2one_clickable.Many2OneClickable = openerp.web.list.Column.extend({ + }); + + /* click action */ + + instance.web.ListView.List.include({ + render: function() + { + var result = this._super(this, arguments), + self = this; + this.$current.delegate('a[data-many2one-clickable-model]', + 'click', function() + { + self.view.do_action({ + type: 'ir.actions.act_window', + res_model: jQuery(this).data('many2one-clickable-model'), + res_id: jQuery(this).data('many2one-clickable-id'), + views: [[false, 'form']], + }); + }); + return result; + }, + }); +} diff --git a/web_tree_many2one_clickable/views/asset.xml b/web_tree_many2one_clickable/views/asset.xml new file mode 100644 index 00000000..9f221396 --- /dev/null +++ b/web_tree_many2one_clickable/views/asset.xml @@ -0,0 +1,12 @@ + + + + + + + +