Browse Source
Merge pull request #473 from hbrunn/9.0-web_tree_dynamic_colored_field
Merge pull request #473 from hbrunn/9.0-web_tree_dynamic_colored_field
9.0 web tree dynamic colored fieldpull/300/head
committed by
GitHub
10 changed files with 220 additions and 147 deletions
-
44web_tree_dynamic_colored_field/README.rst
-
21web_tree_dynamic_colored_field/__init__.py
-
39web_tree_dynamic_colored_field/__openerp__.py
-
22web_tree_dynamic_colored_field/demo/res_users.xml
-
26web_tree_dynamic_colored_field/i18n/fi.po
-
26web_tree_dynamic_colored_field/i18n/sl.po
-
86web_tree_dynamic_colored_field/static/js/web_tree_dynamic_colored_field.js
-
95web_tree_dynamic_colored_field/static/src/js/web_tree_dynamic_colored_field.js
-
2web_tree_dynamic_colored_field/static/src/xml/web_tree_dynamic_colored_field.xml
-
2web_tree_dynamic_colored_field/views/web_tree_dynamic_colored_field.xml
@ -1,20 +1,3 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Author: Damien Crier |
|||
# Copyright 2015 Camptocamp SA |
|||
# |
|||
# 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/>. |
|||
# |
|||
############################################################################## |
|||
# © 2015 Camptocamp SA, Damien Crier |
|||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
@ -1,37 +1,22 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Author: Damien Crier |
|||
# Copyright 2015 Camptocamp SA |
|||
# |
|||
# 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/>. |
|||
# |
|||
############################################################################## |
|||
# © 2015 Camptocamp SA, Damien Crier |
|||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
|||
{ |
|||
'name': 'web tree dynamic colored field', |
|||
'category': 'Hidden', |
|||
'version': '8.0.1.0.0', |
|||
'name': 'Colorize field in tree views', |
|||
'summary': 'Allows you to dynamically color fields on tree views', |
|||
'category': 'Hidden/Dependency', |
|||
'version': '9.0.2.0.0', |
|||
'depends': ['web'], |
|||
'author': "Camptocamp,Odoo Community Association (OCA)", |
|||
'author': "Camptocamp,Therp BV,Odoo Community Association (OCA)", |
|||
'license': 'AGPL-3', |
|||
'website': 'http://www.camptocamp.com', |
|||
'website': 'https://github.com/OCA/web', |
|||
'demo': [ |
|||
"demo/res_users.xml", |
|||
], |
|||
'data': [ |
|||
'views/web_tree_dynamic_colored_field.xml', |
|||
], |
|||
'qweb': [ |
|||
'static/xml/*.xml', |
|||
'static/src/xml/*.xml', |
|||
], |
|||
'auto_install': False, |
|||
'installable': False, |
|||
} |
@ -0,0 +1,22 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<openerp> |
|||
<data> |
|||
<record id="view_users_tree" model="ir.ui.view"> |
|||
<field name="model">res.users</field> |
|||
<field name="inherit_id" ref="base.view_users_tree" /> |
|||
<field name="arch" type="xml"> |
|||
<xpath expr="." position="attributes"> |
|||
<attribute name="color_field">lang</attribute> |
|||
</xpath> |
|||
<field name="login_date" position="attributes"> |
|||
<attribute name="bg_color">red: login_date == False</attribute> |
|||
<attribute name="fg_color">white: login_date == False</attribute> |
|||
</field> |
|||
<field name="name" position="attributes"> |
|||
<attribute name="bg_color">red: login == 'admin'</attribute> |
|||
<attribute name="fg_color">white: login == 'admin'</attribute> |
|||
</field> |
|||
</field> |
|||
</record> |
|||
</data> |
|||
</openerp> |
@ -0,0 +1,26 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * web_tree_dynamic_colored_field |
|||
# |
|||
# Translators: |
|||
# Jarmo Kortetjärvi <jarmo.kortetjarvi@gmail.com>, 2016 |
|||
msgid "" |
|||
msgstr "" |
|||
"Project-Id-Version: Odoo Server 8.0\n" |
|||
"Report-Msgid-Bugs-To: \n" |
|||
"POT-Creation-Date: 2016-07-08 16:36+0000\n" |
|||
"PO-Revision-Date: 2016-07-08 16:36+0000\n" |
|||
"Last-Translator: Jarmo Kortetjärvi <jarmo.kortetjarvi@gmail.com>, 2016\n" |
|||
"Language-Team: Finnish (https://www.transifex.com/oca/teams/23907/fi/)\n" |
|||
"MIME-Version: 1.0\n" |
|||
"Content-Type: text/plain; charset=UTF-8\n" |
|||
"Content-Transfer-Encoding: \n" |
|||
"Language: fi\n" |
|||
"Plural-Forms: nplurals=2; plural=(n != 1);\n" |
|||
|
|||
#. module: web_tree_dynamic_colored_field |
|||
#. openerp-web |
|||
#: code:addons/web_tree_dynamic_colored_field/static/src/xml/web_tree_dynamic_colored_field.xml:7 |
|||
#, python-format |
|||
msgid "columns.fct_colorize(record, column)" |
|||
msgstr "columns.fct_colorize(record, column)" |
@ -0,0 +1,26 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * web_tree_dynamic_colored_field |
|||
# |
|||
# Translators: |
|||
# Matjaž Mozetič <m.mozetic@matmoz.si>, 2016 |
|||
msgid "" |
|||
msgstr "" |
|||
"Project-Id-Version: Odoo Server 8.0\n" |
|||
"Report-Msgid-Bugs-To: \n" |
|||
"POT-Creation-Date: 2016-06-24 00:46+0000\n" |
|||
"PO-Revision-Date: 2016-06-24 00:46+0000\n" |
|||
"Last-Translator: Matjaž Mozetič <m.mozetic@matmoz.si>, 2016\n" |
|||
"Language-Team: Slovenian (https://www.transifex.com/oca/teams/23907/sl/)\n" |
|||
"MIME-Version: 1.0\n" |
|||
"Content-Type: text/plain; charset=UTF-8\n" |
|||
"Content-Transfer-Encoding: \n" |
|||
"Language: sl\n" |
|||
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" |
|||
|
|||
#. module: web_tree_dynamic_colored_field |
|||
#. openerp-web |
|||
#: code:addons/web_tree_dynamic_colored_field/static/src/xml/web_tree_dynamic_colored_field.xml:7 |
|||
#, python-format |
|||
msgid "columns.fct_colorize(record, column)" |
|||
msgstr "columns.fct_colorize(record, column)" |
@ -1,86 +0,0 @@ |
|||
openerp.web_tree_dynamic_colored_field = function(instance){ |
|||
var _t = instance.web._t, |
|||
_lt = instance.web._lt; |
|||
var QWeb = instance.web.qweb; |
|||
|
|||
var pair_colors = function(pair_color){ |
|||
if (pair_color != ""){ |
|||
var pair_list = pair_color.split(':'), |
|||
color = pair_list[0], |
|||
expression = pair_list[1]; |
|||
return [color, py.parse(py.tokenize(expression)), expression] |
|||
} |
|||
}; |
|||
|
|||
var colorize_helper = function(obj, record, column, field_attribute, css_attribute){ |
|||
var result = ''; |
|||
if (column[field_attribute]){ |
|||
var colors = _(column[field_attribute].split(';')) |
|||
.chain() |
|||
.map(pair_colors) |
|||
.value(); |
|||
var colors = colors.filter(function CheckUndefined(value, index, ar) { |
|||
return value != undefined; |
|||
}) |
|||
var ctx = _.extend( |
|||
{}, |
|||
record.attributes, |
|||
{ |
|||
uid: obj.session.uid, |
|||
current_date: new Date().toString('yyyy-MM-dd') |
|||
} |
|||
); |
|||
for(i=0, len=colors.length; i<len; ++i) { |
|||
pair = colors[i]; |
|||
var color = pair[0]; |
|||
var expression = pair[1]; |
|||
if (py.evaluate(expression, ctx).toJSON()) { |
|||
result = css_attribute + ': ' + color + ';'; |
|||
} |
|||
} |
|||
} |
|||
return result |
|||
}; |
|||
|
|||
var colorize = function(record, column){ |
|||
var res = ''; |
|||
res += colorize_helper(this, record, column, 'bg_color', 'background-color'); |
|||
res += colorize_helper(this, record, column, 'fg_color', 'color'); |
|||
return res; |
|||
}; |
|||
|
|||
instance.web.ListView.List.include({ |
|||
init: function(group, opts){ |
|||
this._super(group, opts); |
|||
this.columns.fct_colorize = colorize; |
|||
}, |
|||
fct_colorize: colorize, |
|||
render: function() { |
|||
this.$current.empty().append( |
|||
QWeb.render('ListView.rows', _.extend({ |
|||
render_cell: function () { |
|||
return self.render_cell.apply(self, arguments); }, |
|||
fct_colorize: function(){ |
|||
return self.fct_colorize.apply(self, arguments); |
|||
} |
|||
}, this))); |
|||
this.pad_table_to(4); |
|||
}, |
|||
render_record: function(record) { |
|||
var self = this; |
|||
var index = this.records.indexOf(record); |
|||
return QWeb.render('ListView.row', { |
|||
columns: this.columns, |
|||
options: this.options, |
|||
record: record, |
|||
row_parity: (index % 2 === 0) ? 'even' : 'odd', |
|||
view: this.view, |
|||
render_cell: function () { |
|||
return self.render_cell.apply(self, arguments); }, |
|||
fct_colorize: function(){ |
|||
return self.fct_colorize.apply(self, arguments); |
|||
} |
|||
}); |
|||
} |
|||
}); |
|||
} |
@ -0,0 +1,95 @@ |
|||
odoo.define('web_tree_dynamic_colored_field', function(require) |
|||
{ |
|||
'use strict'; |
|||
var ListView = require('web.ListView'), |
|||
pyeval = require('web.pyeval'), |
|||
py = window.py; |
|||
|
|||
var pair_colors = function(pair_color){ |
|||
if (pair_color !== ""){ |
|||
var pair_list = pair_color.split(':'), |
|||
color = pair_list[0], |
|||
expression = pair_list[1]; |
|||
return [color, py.parse(py.tokenize(expression)), expression]; |
|||
} |
|||
}; |
|||
|
|||
var get_eval_context = function(record){ |
|||
return _.extend( |
|||
{}, |
|||
record.attributes, |
|||
pyeval.context() |
|||
); |
|||
}; |
|||
|
|||
var colorize_helper = function(obj, record, column, field_attribute, css_attribute){ |
|||
var result = ''; |
|||
if (column[field_attribute]){ |
|||
var colors = _(column[field_attribute].split(';')) |
|||
.chain() |
|||
.map(pair_colors) |
|||
.value() |
|||
.filter(function CheckUndefined(value, index, ar) { |
|||
return value !== undefined; |
|||
}); |
|||
var ctx = get_eval_context(record); |
|||
for(var i=0, len=colors.length; i<len; ++i) { |
|||
var pair = colors[i], |
|||
color = pair[0], |
|||
expression = pair[1]; |
|||
if (py.evaluate(expression, ctx).toJSON()) { |
|||
result = css_attribute + ': ' + color + ';'; |
|||
} |
|||
} |
|||
} |
|||
return result; |
|||
}; |
|||
|
|||
var colorize = function(record, column){ |
|||
var res = ''; |
|||
res += colorize_helper(this, record, column, 'bg_color', 'background-color'); |
|||
res += colorize_helper(this, record, column, 'fg_color', 'color'); |
|||
return res; |
|||
}; |
|||
|
|||
ListView.List.include({ |
|||
init: function(group, opts){ |
|||
this._super(group, opts); |
|||
this.columns.fct_colorize = colorize; |
|||
}, |
|||
}); |
|||
|
|||
ListView.include({ |
|||
load_view: function() |
|||
{ |
|||
var self = this; |
|||
return this._super.apply(this, arguments) |
|||
.then(function() |
|||
{ |
|||
// the style_for helper is only called if one of colors or
|
|||
// fonts is not null
|
|||
if(self.fields_view.arch.attrs.color_field) |
|||
{ |
|||
self.colors = []; |
|||
} |
|||
}); |
|||
}, |
|||
style_for: function (record) |
|||
{ |
|||
var result = this._super.apply(this, arguments); |
|||
if(this.fields_view.arch.attrs.color_field) |
|||
{ |
|||
var color = py.evaluate( |
|||
py.parse(py.tokenize( |
|||
this.fields_view.arch.attrs.color_field |
|||
)), |
|||
get_eval_context(record)).toJSON(); |
|||
if(color) |
|||
{ |
|||
result += 'color: ' + color; |
|||
} |
|||
} |
|||
return result; |
|||
}, |
|||
}); |
|||
}); |
Write
Preview
Loading…
Cancel
Save
Reference in new issue