diff --git a/web_tree_many2one_clickable/README.rst b/web_tree_many2one_clickable/README.rst
index 511ff4b7d..7899e7b0d 100644
--- a/web_tree_many2one_clickable/README.rst
+++ b/web_tree_many2one_clickable/README.rst
@@ -1,4 +1,4 @@
-.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
+.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
@@ -6,42 +6,21 @@
Clickable many2one fields for tree views
========================================
-This addon provides a separate widget to allow many2one or reference 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.
+This addon forces Odoo to use many2one widget on a many2one fields in
+tree views. This allows users to open linked resources from trees directly,
+without accessing the form.
Configuration
=============
-After installation, all many2one and reference fields will be clickable
-by default. You can change this in *Configuration > Technical > Parameters > System parameters*,
-parameter with name `web_tree_many2one_clickable.default` setting it to `false`.
+After installation, all many2one and reference fields will be clickable by default.
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.
-
-If system parameter `web_tree_many2one_clickable.default` is `true` and you
-need to disable one field, then use `widget="many2one_unclickable"`
-
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
:alt: Try me on Runbot
- :target: https://runbot.odoo-community.org/runbot/162/10.0
+ :target: https://runbot.odoo-community.org/runbot/162/11.0
Bug Tracker
@@ -50,7 +29,7 @@ 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.
+help us smash it by providing a detailed and welcomed feedback.
Credits
@@ -63,6 +42,7 @@ Contributors
* Pedro M. Baeza
* Antonio Espinosa
* Sodexis
+* Artem Kostyuk
Maintainer
----------
diff --git a/web_tree_many2one_clickable/__init__.py b/web_tree_many2one_clickable/__init__.py
index 2977e4d65..d9d1f13de 100644
--- a/web_tree_many2one_clickable/__init__.py
+++ b/web_tree_many2one_clickable/__init__.py
@@ -1,2 +1 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
diff --git a/web_tree_many2one_clickable/__manifest__.py b/web_tree_many2one_clickable/__manifest__.py
index 47efc5f05..f4a92f8ab 100644
--- a/web_tree_many2one_clickable/__manifest__.py
+++ b/web_tree_many2one_clickable/__manifest__.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# Copyright 2013 Therp BV ().
# Copyright 2015 Pedro M. Baeza
# Copyright 2015 Antonio Espinosa
@@ -8,21 +7,19 @@
{
"name": "Clickable many2one fields for tree views",
"summary": "Open the linked resource when clicking on their name",
- "version": "10.0.1.0.0",
+ "version": "11.0.1.0.0",
"category": "Hidden",
- "website": "https://odoo-community.org/",
+ "website": "https://github.com/OCA/web",
"author": "Therp BV, "
"Tecnativa, "
+ "Camptocamp, "
"Odoo Community Association (OCA)",
"license": "AGPL-3",
- "application": False,
"installable": True,
"depends": [
'web',
],
"data": [
- 'data/ir_config_parameter.xml',
- 'views/asset.xml',
+ 'static/src/xml/assets.xml',
],
- "installable": True,
}
diff --git a/web_tree_many2one_clickable/data/ir_config_parameter.xml b/web_tree_many2one_clickable/data/ir_config_parameter.xml
deleted file mode 100644
index 9466714fe..000000000
--- a/web_tree_many2one_clickable/data/ir_config_parameter.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
- web_tree_many2one_clickable.default
- true
-
-
-
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
index 6ef9fe96c..47ef9d563 100644
--- 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
@@ -1,99 +1,21 @@
/* Copyright 2013 Therp BV ().
* Copyright 2015 Pedro M. Baeza
* Copyright 2016 Antonio Espinosa
- # Copyright 2017 Sodexis
+ * Copyright 2017 Sodexis
+ * Copyright 2018 Camptocamp SA
* License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). */
-odoo.define('web_tree_many2one_clickable.many2one_clickable', function(require) {
-"use strict";
+odoo.define('web_tree_many2one_clickable.many2one_clickable', function (require) {
+ var ListRenderer = require('web.ListRenderer');
-var core = require('web.core');
-var ListView = require('web.ListView');
-var Model = require('web.DataModel');
-
-var _t = core._t;
-var QWeb = core.qweb;
-var list_widget_registry = core.list_widget_registry;
-
-var promise;
-function clickable_get(callback){
- if (_.isUndefined(promise)) {
- promise = $.Deferred();
- new Model("ir.config_parameter")
- .call("get_param", ["web_tree_many2one_clickable.default", false])
- .done(function(value){
- promise.resolve(String(value).toLowerCase() === "true");
- })
- .fail(function(){
- promise.reject();
- });
- }
- return promise;
-}
-
-ListView.Column.include({
- 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.use_many2one_clickable = false;
- clickable_get().done($.proxy(function(value){
- this.use_many2one_clickable = value;
- }, this));
- }
- },
- _format: function (row_data, options) {
- if (this.type == 'many2one' &&
- (this.widget == 'many2one_unclickable' || this.use_many2one_clickable) &&
- !!row_data[this.id]) {
- var value = row_data[this.id].value;
- var name = value[1] ? value[1].split("\n")[0] : value[1];
- name = _.escape(name || options.value_if_empty);
- if (this.widget == 'many2one_unclickable') {
- return name;
- } else if (this.use_many2one_clickable) {
- var values = {
- model: this.relation,
- id: row_data[this.id].value[0],
- name: name,
- };
- if(this.type == 'reference' && !!row_data[this.id + '__display']) {
- values.model = row_data[this.id].value.split(',', 1)[0];
- values.id = row_data[this.id].value.split(',', 2)[1];
- values.name = _.escape(row_data[this.id + '__display'].value ||
- options.value_if_empty);
- }
- return _.str.sprintf(
- '%(name)s',
- values
- );
+ ListRenderer.include({
+ _renderBodyCell: function (record, node, colIndex, options) {
+ if (!node.attrs.widget && this.state.fields[node.attrs.name].type === 'many2one') {
+ // no explicit widget provided on a many2one field,
+ // force `many2one` widget
+ node.attrs.widget = 'many2one';
}
- } else {
- return this._super(row_data, options);
+ return this._super(record, node, colIndex, options);
}
- },
+ });
});
-
-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: $(this).data('many2one-clickable-model'),
- res_id: $(this).data('many2one-clickable-id'),
- views: [[false, 'form']],
- });
- });
- return result;
- },
-
-});
-
-list_widget_registry.add('field.many2one_clickable', ListView.Column);
-list_widget_registry.add('field.many2one_unclickable', ListView.Column);
-
-}); // odoo.define
diff --git a/web_tree_many2one_clickable/views/asset.xml b/web_tree_many2one_clickable/static/src/xml/assets.xml
similarity index 52%
rename from web_tree_many2one_clickable/views/asset.xml
rename to web_tree_many2one_clickable/static/src/xml/assets.xml
index 58d001301..a926e09f3 100644
--- a/web_tree_many2one_clickable/views/asset.xml
+++ b/web_tree_many2one_clickable/static/src/xml/assets.xml
@@ -3,10 +3,9 @@
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
-
+
-
+