3
0
Fork 0

[MIG] web_tree_many2one_clickable: Migration to 11.0

16.0
Artem Kostyuk 2018-02-20 12:48:30 +02:00 committed by tarteo
parent c36cb88f21
commit d0dd5546c0
6 changed files with 26 additions and 141 deletions

View File

@ -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 :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3 :alt: License: AGPL-3
@ -6,42 +6,21 @@
Clickable many2one fields for tree views Clickable many2one fields for tree views
======================================== ========================================
This addon provides a separate widget to allow many2one or reference fields in This addon forces Odoo to use many2one widget on a many2one fields in
a tree view open the linked resource when clicking on their name. tree views. This allows users to open linked resources from trees directly,
without accessing the form.
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 Configuration
============= =============
After installation, all many2one and reference fields will be clickable After installation, all many2one and reference fields will be clickable by default.
by default. You can change this in *Configuration > Technical > Parameters > System parameters*,
parameter with name `web_tree_many2one_clickable.default` setting it to `false`.
Usage Usage
===== =====
For the widget option, you need to add `widget="many2one_clickable"` attribute
in the XML field definition in the tree view.
For example:
`<field name="partner_id" widget="many2one_clickable" />`
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 .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
:alt: Try me on Runbot :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 Bug Tracker
@ -50,7 +29,7 @@ Bug Tracker
Bugs are tracked on `GitHub Issues Bugs are tracked on `GitHub Issues
<https://github.com/OCA/web/issues>`_. In case of trouble, please <https://github.com/OCA/web/issues>`_. In case of trouble, please
check there if your issue has already been reported. If you spotted it first, 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 Credits
@ -63,6 +42,7 @@ Contributors
* Pedro M. Baeza <pedro.baeza@serviciosbaeza.com> * Pedro M. Baeza <pedro.baeza@serviciosbaeza.com>
* Antonio Espinosa <antonio.espinosa@tecnativa.com> * Antonio Espinosa <antonio.espinosa@tecnativa.com>
* Sodexis <dev@sodexis.com> * Sodexis <dev@sodexis.com>
* Artem Kostyuk <a.kostyuk@mobilunity.com>
Maintainer Maintainer
---------- ----------

View File

@ -1,2 +1 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

View File

@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# Copyright 2013 Therp BV (<http://therp.nl>). # Copyright 2013 Therp BV (<http://therp.nl>).
# Copyright 2015 Pedro M. Baeza <pedro.baeza@serviciosbaeza.com> # Copyright 2015 Pedro M. Baeza <pedro.baeza@serviciosbaeza.com>
# Copyright 2015 Antonio Espinosa <antonio.espinosa@tecnativa.com> # Copyright 2015 Antonio Espinosa <antonio.espinosa@tecnativa.com>
@ -8,21 +7,19 @@
{ {
"name": "Clickable many2one fields for tree views", "name": "Clickable many2one fields for tree views",
"summary": "Open the linked resource when clicking on their name", "summary": "Open the linked resource when clicking on their name",
"version": "10.0.1.0.0", "version": "11.0.1.0.0",
"category": "Hidden", "category": "Hidden",
"website": "https://odoo-community.org/", "website": "https://github.com/OCA/web",
"author": "Therp BV, " "author": "Therp BV, "
"Tecnativa, " "Tecnativa, "
"Camptocamp, "
"Odoo Community Association (OCA)", "Odoo Community Association (OCA)",
"license": "AGPL-3", "license": "AGPL-3",
"application": False,
"installable": True, "installable": True,
"depends": [ "depends": [
'web', 'web',
], ],
"data": [ "data": [
'data/ir_config_parameter.xml', 'static/src/xml/assets.xml',
'views/asset.xml',
], ],
"installable": True,
} }

View File

@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2016 Antonio Espinosa <antonio.espinosa@tecnativa.com>
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
<odoo noupdate="1">
<record id="default" model="ir.config_parameter">
<field name="key">web_tree_many2one_clickable.default</field>
<field name="value">true</field>
</record>
</odoo>

View File

@ -1,99 +1,21 @@
/* Copyright 2013 Therp BV (<http://therp.nl>). /* Copyright 2013 Therp BV (<http://therp.nl>).
* Copyright 2015 Pedro M. Baeza <pedro.baeza@serviciosbaeza.com> * Copyright 2015 Pedro M. Baeza <pedro.baeza@serviciosbaeza.com>
* Copyright 2016 Antonio Espinosa <antonio.espinosa@tecnativa.com> * Copyright 2016 Antonio Espinosa <antonio.espinosa@tecnativa.com>
# Copyright 2017 Sodexis <dev@sodexis.com> * Copyright 2017 Sodexis <dev@sodexis.com>
* Copyright 2018 Camptocamp SA
* License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). */ * License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). */
odoo.define('web_tree_many2one_clickable.many2one_clickable', function(require) { odoo.define('web_tree_many2one_clickable.many2one_clickable', function (require) {
"use strict"; var ListRenderer = require('web.ListRenderer');
var core = require('web.core'); ListRenderer.include({
var ListView = require('web.ListView'); _renderBodyCell: function (record, node, colIndex, options) {
var Model = require('web.DataModel'); if (!node.attrs.widget && this.state.fields[node.attrs.name].type === 'many2one') {
// no explicit widget provided on a many2one field,
var _t = core._t; // force `many2one` widget
var QWeb = core.qweb; node.attrs.widget = 'many2one';
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(
'<a class="oe_form_uri" data-many2one-clickable-model="%(model)s" data-many2one-clickable-id="%(id)s">%(name)s</a>',
values
);
} }
} else { return this._super(record, node, colIndex, options);
return this._super(row_data, 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

View File

@ -3,10 +3,9 @@
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). --> License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
<odoo> <odoo>
<template id="assets_backend" name="Many2one clickable assets" inherit_id="web.assets_backend"> <template id="assets_backend" name="web_tree_many2one_clickable assets" inherit_id="web.assets_backend">
<xpath expr="." position="inside"> <xpath expr="." position="inside">
<script type="text/javascript" <script type="text/javascript" src="/web_tree_many2one_clickable/static/src/js/web_tree_many2one_clickable.js"/>
src="/web_tree_many2one_clickable/static/src/js/web_tree_many2one_clickable.js"/>
</xpath> </xpath>
</template> </template>