Browse Source

[MIG] web_tree_many2one_clickable: Migration to 11.0

pull/876/head
Artem Kostyuk 7 years ago
committed by Pedro M. Baeza
parent
commit
73c4195fe3
  1. 36
      web_tree_many2one_clickable/README.rst
  2. 1
      web_tree_many2one_clickable/__init__.py
  3. 11
      web_tree_many2one_clickable/__manifest__.py
  4. 12
      web_tree_many2one_clickable/data/ir_config_parameter.xml
  5. 102
      web_tree_many2one_clickable/static/src/js/web_tree_many2one_clickable.js
  6. 5
      web_tree_many2one_clickable/static/src/xml/assets.xml

36
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 :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
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 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 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
---------- ----------

1
web_tree_many2one_clickable/__init__.py

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

11
web_tree_many2one_clickable/__manifest__.py

@ -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',
'views/asset.xml',
'static/src/xml/assets.xml',
], ],
"installable": True,
} }

12
web_tree_many2one_clickable/data/ir_config_parameter.xml

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

102
web_tree_many2one_clickable/static/src/js/web_tree_many2one_clickable.js

@ -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) {
"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(
'<a class="oe_form_uri" data-many2one-clickable-model="%(model)s" data-many2one-clickable-id="%(id)s">%(name)s</a>',
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

5
web_tree_many2one_clickable/views/asset.xml → 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). --> 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"
src="/web_tree_many2one_clickable/static/src/js/web_tree_many2one_clickable.js"/>
<script type="text/javascript" src="/web_tree_many2one_clickable/static/src/js/web_tree_many2one_clickable.js"/>
</xpath> </xpath>
</template> </template>
Loading…
Cancel
Save