[MIG] web_tree_many2one_clickable: Migration to 9.0

pull/876/head
Antonio Espinosa 2016-10-28 20:33:48 +02:00 committed by Pedro M. Baeza
parent 834b5adb54
commit 4e96ea5c53
6 changed files with 143 additions and 169 deletions

View File

@ -1,3 +1,8 @@
.. 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
========================================
Clickable many2one fields for tree views Clickable many2one fields for tree views
======================================== ========================================
@ -15,10 +20,9 @@ Install it the regular way.
Configuration Configuration
============= =============
If you want to have all many2one and reference fields clickable by default, you After installation, all many2one and reference fields will be clickable
have to define in *Configuration > Technical > Parameters > System parameters*, by default. You can change this in *Configuration > Technical > Parameters > System parameters*,
a new parameter with name `web_tree_many2one_clickable.default` and with value parameter with name `web_tree_many2one_clickable.default` setting it to `false`.
`true`.
Usage Usage
===== =====
@ -32,22 +36,21 @@ For example:
will open the linked partner in a form view. will open the linked partner in a form view.
Known issues / Roadmap If system parameter `web_tree_many2one_clickable.default` is `true` and you
====================== need to disable one field, then use `widget="many2one_unclickable"`
* You cannot deactivate clickable behaviour for an specific many2one field if .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
you configure the system parameter. :alt: Try me on Runbot
* The value of the system parameter is retrieved for each many2one field :target: https://runbot.odoo-community.org/runbot/162/9.0
present in the view instead of only once.
Bug Tracker Bug Tracker
=========== ===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/web/issues>`_. Bugs are tracked on `GitHub Issues
In case of trouble, please check there if your issue has already been reported. <https://github.com/OCA/web/issues>`_. In case of trouble, please
If you spotted it first, help us smashing it by providing a detailed and welcomed feedback check there if your issue has already been reported. If you spotted it first,
`here <https://github.com/OCA/web/issues/new?body=module:%20web_tree_many2one_clickable%0Aversion:%208.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_. help us smashing it by providing a detailed and welcomed feedback.
Credits Credits
@ -58,13 +61,14 @@ Contributors
* Therp BV * Therp BV
* Pedro M. Baeza <pedro.baeza@serviciosbaeza.com> * Pedro M. Baeza <pedro.baeza@serviciosbaeza.com>
* Antonio Espinosa <antonio.espinosa@tecnativa.com>
Maintainer Maintainer
---------- ----------
.. image:: http://odoo-community.org/logo.png .. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association :alt: Odoo Community Association
:target: http://odoo-community.org :target: https://odoo-community.org
This module is maintained by the OCA. This module is maintained by the OCA.
@ -72,4 +76,4 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and mission is to support the collaborative development of Odoo features and
promote its widespread use. promote its widespread use.
To contribute to this module, please visit http://odoo-community.org. To contribute to this module, please visit https://odoo-community.org.

View File

@ -1,20 +1,2 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
############################################################################## # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
#
# OpenERP, Open Source Management Solution
# This module copyright (C) 2013 Therp BV (<http://therp.nl>).
#
# 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 <http://www.gnu.org/licenses/>.
#
##############################################################################

View File

@ -1,37 +1,26 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
############################################################################## # Copyright 2013 Therp BV (<http://therp.nl>).
# # Copyright 2015 Pedro M. Baeza <pedro.baeza@serviciosbaeza.com>
# OpenERP, Open Source Management Solution # Copyright 2015 Antonio Espinosa <antonio.espinosa@tecnativa.com>
# This module copyright # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
# (C) 2013 Therp BV (<http://therp.nl>).
# (c) 2015 Serv. Tecnol. Avanzados (http://www.serviciosbaeza.com)
# Pedro M. Baeza <pedro.baeza@serviciosbaeza.com>
#
# 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 <http://www.gnu.org/licenses/>.
#
##############################################################################
{ {
"name": "Clickable many2one fields for tree views", "name": "Clickable many2one fields for tree views",
"version": "8.0.1.0.0", "summary": "Open the linked resource when clicking on their name",
"version": "9.0.1.0.0",
"category": "Hidden",
"website": "https://odoo-community.org/",
"author": "Therp BV, " "author": "Therp BV, "
"Serv. Tecnol. Avanzados - Pedro M. Baeza, " "Tecnativa, "
"Odoo Community Association (OCA)", "Odoo Community Association (OCA)",
"category": "Dependency", "license": "AGPL-3",
"application": False,
"installable": True,
"depends": [ "depends": [
'web', 'web',
], ],
"data": [ "data": [
'data/ir_config_parameter.xml',
'views/asset.xml', 'views/asset.xml',
], ],
"installable": True, "installable": True,

View File

@ -0,0 +1,12 @@
<?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,115 +1,101 @@
//-*- coding: utf-8 -*- /* Copyright 2013 Therp BV (<http://therp.nl>).
//############################################################################ * Copyright 2015 Pedro M. Baeza <pedro.baeza@serviciosbaeza.com>
// * Copyright 2016 Antonio Espinosa <antonio.espinosa@tecnativa.com>
// OpenERP, Open Source Management Solution * License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). */
// This module copyright
// (C) 2013 Therp BV (<http://therp.nl>).
// (c) 2015 Serv. Tecnol. Avanzados (http://www.serviciosbaeza.com)
// Pedro M. Baeza <pedro.baeza@serviciosbaeza.com>
//
// 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 <http://www.gnu.org/licenses/>.
//
//############################################################################
openerp.web_tree_many2one_clickable = function(instance, local) odoo.define('web_tree_many2one_clickable.many2one_clickable', function(require) {
{ "use strict";
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() { var _ = require('_');
if (_.isUndefined(this.ir_option_clickable_loaded)) { var $ = require('$');
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) {
if (param) {
self.use_many2one_clickable = (param.value.toLowerCase() == 'true');
}
self.ir_option_clickable_loaded.resolve();
});
return this.ir_option_clickable_loaded;
}
return $.when();
},
_format: function (row_data, options) var core = require('web.core');
{ var ListView = require('web.ListView');
if (this.use_many2one_clickable && !!row_data[this.id]) { 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 = { var values = {
model: this.relation, model: this.relation,
id: row_data[this.id].value[0], id: row_data[this.id].value[0],
name: _.escape(row_data[this.id].value[1] || options.value_if_empty), name: name,
} };
if(this.type == 'reference' && !!row_data[this.id + '__display']) if(this.type == 'reference' && !!row_data[this.id + '__display']) {
{
values.model = row_data[this.id].value.split(',', 1)[0]; values.model = row_data[this.id].value.split(',', 1)[0];
values.id = row_data[this.id].value.split(',', 2)[1]; values.id = row_data[this.id].value.split(',', 2)[1];
values.name = _.escape(row_data[this.id + '__display'].value || options.value_if_empty); values.name = _.escape(row_data[this.id + '__display'].value ||
options.value_if_empty);
} }
return _.str.sprintf( return _.str.sprintf(
'<a class="oe_form_uri" data-many2one-clickable-model="%(model)s" data-many2one-clickable-id="%(id)s">%(name)s</a>', '<a class="oe_form_uri" data-many2one-clickable-model="%(model)s" data-many2one-clickable-id="%(id)s">%(name)s</a>',
values values
); );
} }
else { } else {
return this._super(row_data, options); return this._super(row_data, options);
} }
}, },
});
}); ListView.List.include({
render: function() {
/* many2one_clickable widget */ var result = this._super(this, arguments),
self = this;
instance.web.list.columns.add( this.$current.delegate('a[data-many2one-clickable-model]',
'field.many2one_clickable', 'click', function() {
'instance.web_tree_many2one_clickable.Many2OneClickable'); self.view.do_action({
type: 'ir.actions.act_window',
instance.web_tree_many2one_clickable.Many2OneClickable = openerp.web.list.Column.extend({ res_model: $(this).data('many2one-clickable-model'),
}); res_id: $(this).data('many2one-clickable-id'),
views: [[false, 'form']],
/* 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; });
}, return result;
}); },
}
});
list_widget_registry.add('field.many2one_clickable', ListView.Column);
list_widget_registry.add('field.many2one_unclickable', ListView.Column);
}); // odoo.define

View File

@ -1,12 +1,13 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<openerp> <!-- Copyright 2015 Pedro M. Baeza <pedro.baeza@serviciosbaeza.com>
<data> License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
<odoo>
<template id="assets_backend" name="Many2one clickable assets" inherit_id="web.assets_backend"> <template id="assets_backend" name="Many2one clickable assets" inherit_id="web.assets_backend">
<xpath expr="." position="inside"> <xpath expr="." position="inside">
<script type="text/javascript" src="/web_tree_many2one_clickable/static/src/js/web_tree_many2one_clickable.js"></script> <script type="text/javascript"
</xpath> src="/web_tree_many2one_clickable/static/src/js/web_tree_many2one_clickable.js"/>
</template> </xpath>
</template>
</data> </odoo>
</openerp>