Browse Source
Merge pull request #9 from bealdav/7.0-tree-view-id
Merge pull request #9 from bealdav/7.0-tree-view-id
[ADD] tree_view_record_id modulepull/71/head
3 changed files with 133 additions and 0 deletions
-
11tree_view_record_id/__init__.py
-
58tree_view_record_id/__openerp__.py
-
64tree_view_record_id/orm.py
@ -0,0 +1,11 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################## |
||||
|
# |
||||
|
# licence AGPL version 3 or later |
||||
|
# see licence in __openerp__.py or http://www.gnu.org/licenses/agpl-3.0.txt |
||||
|
# Copyright (C) 2014 Akretion (http://www.akretion.com). |
||||
|
# @author David BEAL <david.beal@akretion.com> |
||||
|
# |
||||
|
############################################################################## |
||||
|
|
||||
|
import orm |
@ -0,0 +1,58 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################### |
||||
|
# |
||||
|
# Copyright (C) 2012-TODAY Akretion <http://www.akretion.com>. |
||||
|
# All Rights Reserved |
||||
|
# @author David BEAL <david.beal@akretion.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': 'Tree View Record Id', |
||||
|
'version': '0.1', |
||||
|
'category': 'Other modules', |
||||
|
'sequence': 10, |
||||
|
'author': 'Akretion', |
||||
|
'summary': "Adds id field to tree views", |
||||
|
'description': """ |
||||
|
Adds Id field in all tree views of any modules/models, except: |
||||
|
|
||||
|
* Arborescent tree views like 'Products by Category', 'Chart of accounts', etc. |
||||
|
* Tree views (like in wizard 'Change password') built on transient models |
||||
|
which don't have this column in their table. |
||||
|
|
||||
|
Id field is the primary key of standard sql tables |
||||
|
defined by the orm (Odoo model). |
||||
|
""", |
||||
|
'website': 'http://www.akretion.com', |
||||
|
'depends': [ |
||||
|
'base', |
||||
|
], |
||||
|
'data': [ |
||||
|
], |
||||
|
'demo': [ |
||||
|
], |
||||
|
'installable': True, |
||||
|
'auto_install': False, |
||||
|
'application': False, |
||||
|
'images': [ |
||||
|
], |
||||
|
'css': [ |
||||
|
], |
||||
|
'js': [ |
||||
|
], |
||||
|
'qweb': [ |
||||
|
], |
||||
|
} |
@ -0,0 +1,64 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################## |
||||
|
# |
||||
|
# licence AGPL version 3 or later |
||||
|
# see licence in __openerp__.py or http://www.gnu.org/licenses/agpl-3.0.txt |
||||
|
# Copyright (C) 2014 Akretion (http://www.akretion.com). |
||||
|
# @author David BEAL <david.beal@akretion.com> |
||||
|
# |
||||
|
############################################################################## |
||||
|
|
||||
|
from openerp.osv import orm |
||||
|
from lxml import etree |
||||
|
import os |
||||
|
|
||||
|
""" procedural code is executed even if the module is not installed |
||||
|
|
||||
|
TRY TO SWITCH to _register_hook() in the model to avoid |
||||
|
execution when not installed in V 8.0 version |
||||
|
|
||||
|
""" |
||||
|
|
||||
|
|
||||
|
module_name = os.path.basename(os.path.dirname(os.path.abspath(__file__))) |
||||
|
|
||||
|
DUMMY_MODEL = 'module.%s.installed' % module_name.replace('_', '.') |
||||
|
|
||||
|
|
||||
|
class DummyModel(orm.Model): |
||||
|
""" Allow to check if module is installed or not |
||||
|
in fields_view_get method to avoid code execution if not |
||||
|
Only executed if the module is installed |
||||
|
""" |
||||
|
_name = DUMMY_MODEL |
||||
|
|
||||
|
|
||||
|
fields_view_get_orginal = orm.BaseModel.fields_view_get |
||||
|
|
||||
|
|
||||
|
def fields_view_get(self, cr, uid, view_id=None, view_type='form', |
||||
|
context=None, toolbar=False, submenu=False): |
||||
|
res = fields_view_get_orginal( |
||||
|
self, cr, uid, view_id=view_id, view_type=view_type, context=context, |
||||
|
toolbar=toolbar, submenu=submenu) |
||||
|
if view_type == 'tree': |
||||
|
compatible_tree = res.get('field_parent', True) is False |
||||
|
# Tree views with res['field_parent'] different from False |
||||
|
# looks like 'Products by Category'. |
||||
|
# We don't modify these views |
||||
|
# to avoid to break them (js error) |
||||
|
if '_transient_max_count' in self.pool[res['model']].__dict__.keys(): |
||||
|
# model with '_transient_max_count' key are transient model |
||||
|
# transient models haven't 'id' column in mostly case |
||||
|
compatible_tree = False |
||||
|
if compatible_tree and DUMMY_MODEL in self.pool.models.keys(): |
||||
|
doc = etree.XML(res['arch']) |
||||
|
if (doc.xpath("//tree") and |
||||
|
len(doc.xpath("//field[@name='id']"))) == 0: |
||||
|
node = doc.xpath("//tree")[0] |
||||
|
node.append(etree.Element("field", name="id", string="Id")) |
||||
|
res['arch'] = etree.tostring(node) |
||||
|
return res |
||||
|
|
||||
|
|
||||
|
orm.BaseModel.fields_view_get = fields_view_get |
Write
Preview
Loading…
Cancel
Save
Reference in new issue