Browse Source

[MIG] web_tree_many2one_clickable

pull/456/head
Antonio Espinosa 8 years ago
committed by Pedro M. Baeza
parent
commit
b7484338f5
  1. 38
      web_tree_many2one_clickable/README.rst
  2. 20
      web_tree_many2one_clickable/__init__.py
  3. 40
      web_tree_many2one_clickable/__openerp__.py
  4. 12
      web_tree_many2one_clickable/data/ir_config_parameter.xml
  5. 180
      web_tree_many2one_clickable/static/src/js/web_tree_many2one_clickable.js
  6. 19
      web_tree_many2one_clickable/views/asset.xml

38
web_tree_many2one_clickable/README.rst

@ -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
have to define in *Configuration > Technical > Parameters > System parameters*,
a new parameter with name `web_tree_many2one_clickable.default` and with value
`true`.
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`.
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
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.
.. 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/9.0
Bug Tracker Bug Tracker
=========== ===========
Bugs are tracked on `GitHub Issues <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, help us smashing it by providing a detailed and welcomed feedback
`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**>`_.
Bugs are tracked on `GitHub Issues
<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,
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.

20
web_tree_many2one_clickable/__init__.py

@ -1,20 +1,2 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
##############################################################################
#
# 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/>.
#
##############################################################################
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

40
web_tree_many2one_clickable/__openerp__.py

@ -1,38 +1,26 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# 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/>.
#
##############################################################################
# Copyright 2013 Therp BV (<http://therp.nl>).
# Copyright 2015 Pedro M. Baeza <pedro.baeza@serviciosbaeza.com>
# Copyright 2015 Antonio Espinosa <antonio.espinosa@tecnativa.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{ {
"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': False,
} }

12
web_tree_many2one_clickable/data/ir_config_parameter.xml

@ -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>

180
web_tree_many2one_clickable/static/src/js/web_tree_many2one_clickable.js

@ -1,115 +1,101 @@
//-*- coding: utf-8 -*-
//############################################################################
//
// OpenERP, Open Source Management Solution
// 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/>.
//
//############################################################################
/* Copyright 2013 Therp BV (<http://therp.nl>).
* Copyright 2015 Pedro M. Baeza <pedro.baeza@serviciosbaeza.com>
* Copyright 2016 Antonio Espinosa <antonio.espinosa@tecnativa.com>
* License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). */
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();
}
},
odoo.define('web_tree_many2one_clickable.many2one_clickable', function(require) {
"use strict";
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) {
if (param) {
self.use_many2one_clickable = (param.value.toLowerCase() == 'true');
}
self.ir_option_clickable_loaded.resolve();
});
return this.ir_option_clickable_loaded;
}
return $.when();
},
var _ = require('_');
var $ = require('$');
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;
_format: function (row_data, options)
{
if (this.use_many2one_clickable && !!row_data[this.id]) {
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),
}
if(this.type == 'reference' && !!row_data[this.id + '__display'])
{
name: name,
};
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 {
return this._super(row_data, options);
}
},
});
/* many2one_clickable widget */
} else {
return this._super(row_data, options);
}
},
});
instance.web.list.columns.add(
'field.many2one_clickable',
'instance.web_tree_many2one_clickable.Many2OneClickable');
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;
},
instance.web_tree_many2one_clickable.Many2OneClickable = openerp.web.list.Column.extend({
});
});
/* click action */
list_widget_registry.add('field.many2one_clickable', ListView.Column);
list_widget_registry.add('field.many2one_unclickable', ListView.Column);
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;
},
});
}
}); // odoo.define

19
web_tree_many2one_clickable/views/asset.xml

@ -1,12 +1,13 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<!-- Copyright 2015 Pedro M. Baeza <pedro.baeza@serviciosbaeza.com>
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">
<xpath expr="." position="inside">
<script type="text/javascript" src="/web_tree_many2one_clickable/static/src/js/web_tree_many2one_clickable.js"></script>
</xpath>
</template>
<template id="assets_backend" name="Many2one clickable assets" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<script type="text/javascript"
src="/web_tree_many2one_clickable/static/src/js/web_tree_many2one_clickable.js"/>
</xpath>
</template>
</data>
</openerp>
</odoo>
Loading…
Cancel
Save