|
1 | 1 | /* Copyright 2013 Therp BV (<http://therp.nl>).
|
2 | 2 | * Copyright 2015 Pedro M. Baeza <pedro.baeza@serviciosbaeza.com>
|
3 | 3 | * Copyright 2016 Antonio Espinosa <antonio.espinosa@tecnativa.com>
|
4 |
| - # Copyright 2017 Sodexis <dev@sodexis.com> |
| 4 | + * Copyright 2017 Sodexis <dev@sodexis.com> |
| 5 | + * Copyright 2018 Camptocamp SA |
5 | 6 | * License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). */
|
6 | 7 |
|
7 |
| -odoo.define('web_tree_many2one_clickable.many2one_clickable', function(require) { |
8 |
| -"use strict"; |
| 8 | +odoo.define('web_tree_many2one_clickable.many2one_clickable', function (require) { |
| 9 | + var ListRenderer = require('web.ListRenderer'); |
9 | 10 |
|
10 |
| -var core = require('web.core'); |
11 |
| -var ListView = require('web.ListView'); |
12 |
| -var Model = require('web.DataModel'); |
13 |
| - |
14 |
| -var _t = core._t; |
15 |
| -var QWeb = core.qweb; |
16 |
| -var list_widget_registry = core.list_widget_registry; |
17 |
| - |
18 |
| -var promise; |
19 |
| -function clickable_get(callback){ |
20 |
| - if (_.isUndefined(promise)) { |
21 |
| - promise = $.Deferred(); |
22 |
| - new Model("ir.config_parameter") |
23 |
| - .call("get_param", ["web_tree_many2one_clickable.default", false]) |
24 |
| - .done(function(value){ |
25 |
| - promise.resolve(String(value).toLowerCase() === "true"); |
26 |
| - }) |
27 |
| - .fail(function(){ |
28 |
| - promise.reject(); |
29 |
| - }); |
30 |
| - } |
31 |
| - return promise; |
32 |
| -} |
33 |
| - |
34 |
| -ListView.Column.include({ |
35 |
| - init: function(id, tag, attrs) { |
36 |
| - this._super(id, tag, attrs); |
37 |
| - if (this.widget == 'many2one_clickable') { |
38 |
| - this.use_many2one_clickable = true; |
39 |
| - } else if (this.type == 'many2one') { |
40 |
| - this.use_many2one_clickable = false; |
41 |
| - clickable_get().done($.proxy(function(value){ |
42 |
| - this.use_many2one_clickable = value; |
43 |
| - }, this)); |
44 |
| - } |
45 |
| - }, |
46 |
| - _format: function (row_data, options) { |
47 |
| - if (this.type == 'many2one' && |
48 |
| - (this.widget == 'many2one_unclickable' || this.use_many2one_clickable) && |
49 |
| - !!row_data[this.id]) { |
50 |
| - var value = row_data[this.id].value; |
51 |
| - var name = value[1] ? value[1].split("\n")[0] : value[1]; |
52 |
| - name = _.escape(name || options.value_if_empty); |
53 |
| - if (this.widget == 'many2one_unclickable') { |
54 |
| - return name; |
55 |
| - } else if (this.use_many2one_clickable) { |
56 |
| - var values = { |
57 |
| - model: this.relation, |
58 |
| - id: row_data[this.id].value[0], |
59 |
| - name: name, |
60 |
| - }; |
61 |
| - if(this.type == 'reference' && !!row_data[this.id + '__display']) { |
62 |
| - values.model = row_data[this.id].value.split(',', 1)[0]; |
63 |
| - values.id = row_data[this.id].value.split(',', 2)[1]; |
64 |
| - values.name = _.escape(row_data[this.id + '__display'].value || |
65 |
| - options.value_if_empty); |
66 |
| - } |
67 |
| - return _.str.sprintf( |
68 |
| - '<a class="oe_form_uri" data-many2one-clickable-model="%(model)s" data-many2one-clickable-id="%(id)s">%(name)s</a>', |
69 |
| - values |
70 |
| - ); |
| 11 | + ListRenderer.include({ |
| 12 | + _renderBodyCell: function (record, node, colIndex, options) { |
| 13 | + if (!node.attrs.widget && this.state.fields[node.attrs.name].type === 'many2one') { |
| 14 | + // no explicit widget provided on a many2one field, |
| 15 | + // force `many2one` widget |
| 16 | + node.attrs.widget = 'many2one'; |
71 | 17 | }
|
72 |
| - } else { |
73 |
| - return this._super(row_data, options); |
| 18 | + return this._super(record, node, colIndex, options); |
74 | 19 | }
|
75 |
| - }, |
| 20 | + }); |
76 | 21 | });
|
77 |
| - |
78 |
| -ListView.List.include({ |
79 |
| - render: function() { |
80 |
| - var result = this._super(this, arguments), |
81 |
| - self = this; |
82 |
| - this.$current.delegate('a[data-many2one-clickable-model]', |
83 |
| - 'click', function() { |
84 |
| - self.view.do_action({ |
85 |
| - type: 'ir.actions.act_window', |
86 |
| - res_model: $(this).data('many2one-clickable-model'), |
87 |
| - res_id: $(this).data('many2one-clickable-id'), |
88 |
| - views: [[false, 'form']], |
89 |
| - }); |
90 |
| - }); |
91 |
| - return result; |
92 |
| - }, |
93 |
| - |
94 |
| -}); |
95 |
| - |
96 |
| -list_widget_registry.add('field.many2one_clickable', ListView.Column); |
97 |
| -list_widget_registry.add('field.many2one_unclickable', ListView.Column); |
98 |
| - |
99 |
| -}); // odoo.define |
0 commit comments