diff --git a/web_widget_radio_tree/README.rst b/web_widget_radio_tree/README.rst
new file mode 100644
index 00000000..35fa88b2
--- /dev/null
+++ b/web_widget_radio_tree/README.rst
@@ -0,0 +1,75 @@
+.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
+ :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+
+=====================
+Web widget radio tree
+=====================
+
+This module allows to use input radio in a tree view inside a form, in order to ensure the user marks only one record.
+
+Example: You have a partner company from with many contacts. The contacts are shown in a tree and you want to specify only one as preferred.
+
+Usage
+=====
+
+In the view declaration, put widget='radio_tree' attribute in the field tag::
+
+ ...
+
+
+
+ ...
+
+
+Bug Tracker
+===========
+
+Bugs are tracked on `GitHub Issues
+`_. In case of trouble, please
+check there if your issue has already been reported. If you spotted it first,
+help us smashing it by providing a detailed and welcomed `feedback
+`_.
+
+Credits
+=======
+
+Images
+------
+
+* Odoo Community Association: `Icon `_.
+
+Contributors
+------------
+
+* Cesar Lage
+* Robert Rübner
+
+Maintainer
+----------
+
+.. image:: https://odoo-community.org/logo.png
+ :alt: Odoo Community Association
+ :target: https://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 https://odoo-community.org.
\ No newline at end of file
diff --git a/web_widget_radio_tree/__init__.py b/web_widget_radio_tree/__init__.py
new file mode 100644
index 00000000..add09d83
--- /dev/null
+++ b/web_widget_radio_tree/__init__.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Odoo, an open source suite of business apps
+# This module copyright (C) 2015 bloopark systems ().
+#
+# 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_widget_radio_tree/__openerp__.py b/web_widget_radio_tree/__openerp__.py
new file mode 100644
index 00000000..c2c0ae36
--- /dev/null
+++ b/web_widget_radio_tree/__openerp__.py
@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Odoo, an open source suite of business apps
+# This module copyright (C) 2015 bloopark systems ().
+#
+# 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': "Web Widget Radio Tree",
+ 'summary': """Add radio buttons for records in tree.""",
+ 'author': "bloopark systems GmbH & Co. KG",
+ 'website': "http://www.bloopark.de",
+ 'category': 'web',
+ 'version': '1.0',
+ 'depends': [
+ 'web',
+ ],
+ 'data': [
+ 'views/assets.xml',
+ ],
+ 'qweb': [
+ 'static/src/xml/widget.xml',
+ ],
+ 'installable': True,
+ 'auto_install': False,
+}
diff --git a/web_widget_radio_tree/static/src/js/widget.js b/web_widget_radio_tree/static/src/js/widget.js
new file mode 100644
index 00000000..fbb8b0d4
--- /dev/null
+++ b/web_widget_radio_tree/static/src/js/widget.js
@@ -0,0 +1,90 @@
+openerp.web_widget_radio_tree = function (instance) {
+
+ var QWeb = instance.web.qweb;
+
+ instance.web.list.columns.add('field.radio_tree', 'instance.web.list.RadioTreeColumn');
+
+ instance.web.list.RadioTreeColumn = instance.web.list.Column.extend({
+ _format: function (row_data, options) {
+ var name = options.model + '_' + this.id;
+ return _.template(
+ ' readonly="readonly">', {
+ name: name,
+ checked: row_data[this.id].value ? 'checked' : '',
+ });
+ }
+ });
+
+ instance.web.form.widgets.add('radio_tree', 'instance.web.form.RadioTree');
+
+ instance.web.form.RadioTree = instance.web.form.FieldBoolean.extend({
+ template: 'RadioTree',
+ start: function() {
+ var self = this;
+ this.$checkbox = $('input', this.$el);
+ var radio_name = this.__parentedParent.model + '_' + this.$checkbox[0].name;
+ this.$checkbox.attr('name', radio_name);
+ this.setupFocus(this.$checkbox);
+ this.$el.click(_.bind(function() {
+ self.clean_radio_in_records();
+ this.internal_set_value(true);
+ }, this));
+ var check_readonly = function() {
+ self.$checkbox.prop('disabled', self.get('effective_readonly'));
+ self.click_disabled_boolean();
+ };
+ this.on('change:effective_readonly', this, check_readonly);
+ check_readonly.call(this);
+ this._super.apply(this, arguments);
+ },
+ click_disabled_boolean: function(){
+ var $disabled = this.$el.find('input[type=radio]:disabled');
+ $disabled.each(function (){
+ $(this).next('div').remove();
+ $(this).closest('span').append($(''));
+ });
+ },
+ clean_radio_in_records: function() {
+ var name = (this.$checkbox[0].name).split('_')[1];
+ var ids = this.__parentedParent.dataset.ids;
+ var current_id = this.__parentedParent.datarecord.id;
+
+ // updating write hash
+ var already_added = [];
+ var to_write = this.__parentedParent.dataset.to_write;
+ for (var j=0; j
+
+
+
+
+
+
+
diff --git a/web_widget_radio_tree/views/assets.xml b/web_widget_radio_tree/views/assets.xml
new file mode 100644
index 00000000..c1c7d187
--- /dev/null
+++ b/web_widget_radio_tree/views/assets.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+