Browse Source
[ADD] module firstname_display_name_trigger, Link module if partner_lastname and account_report_company are installed
pull/2/head
[ADD] module firstname_display_name_trigger, Link module if partner_lastname and account_report_company are installed
pull/2/head
Yannick Vaucher
11 years ago
committed by
Guewen Baconnier
5 changed files with 166 additions and 0 deletions
-
24firstname_display_name_trigger/__init__.py
-
41firstname_display_name_trigger/__openerp__.py
-
65firstname_display_name_trigger/res_partner.py
-
5firstname_display_name_trigger/tests/__init__.py
-
31firstname_display_name_trigger/tests/test_display_name.py
@ -0,0 +1,24 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################## |
||||
|
# |
||||
|
# Author: Yannick Vaucher |
||||
|
# Copyright 2013 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/>. |
||||
|
# |
||||
|
############################################################################## |
||||
|
|
||||
|
import res_partner |
||||
|
|
||||
|
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: |
@ -0,0 +1,41 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################## |
||||
|
# |
||||
|
# Author: Yannick Vaucher |
||||
|
# Copyright 2013 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/>. |
||||
|
# |
||||
|
############################################################################## |
||||
|
{'name': 'Link module if partner_lastname and account_report_company are installed', |
||||
|
'version': '1.0', |
||||
|
'author': 'Camptocamp', |
||||
|
'maintainer': 'Camptocamp', |
||||
|
'category': 'Hidden', |
||||
|
'complexity': 'normal', # easy, normal, expert |
||||
|
'depends': [ |
||||
|
'account_report_company', |
||||
|
'partner_firstname', |
||||
|
], |
||||
|
'description': """ |
||||
|
Adapt the computation of display name so that it gets visible in tree and kanban views. |
||||
|
""", |
||||
|
'website': 'http://www.camptocamp.com', |
||||
|
'data': [], |
||||
|
'installable': True, |
||||
|
'images': [], |
||||
|
'auto_install': True, |
||||
|
'license': 'AGPL-3', |
||||
|
'application': False} |
||||
|
|
@ -0,0 +1,65 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################## |
||||
|
# |
||||
|
# Author: Yannick Vaucher |
||||
|
# Copyright 2013 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/>. |
||||
|
# |
||||
|
############################################################################## |
||||
|
from openerp.osv import orm, fields |
||||
|
|
||||
|
|
||||
|
class ResPartner(orm.Model): |
||||
|
_inherit = 'res.partner' |
||||
|
|
||||
|
def _display_name_compute(self, cr, uid, ids, name, args, context=None): |
||||
|
return dict(self.name_get(cr, uid, ids, context=context)) |
||||
|
|
||||
|
def name_get(self, cr, uid, ids, context=None): |
||||
|
""" By pass of name_get to use directly firstname and lastname |
||||
|
as we cannot ensure name as already been computed when calling this |
||||
|
method for display_name""" |
||||
|
if context is None: |
||||
|
context = {} |
||||
|
if isinstance(ids, (int, long)): |
||||
|
ids = [ids] |
||||
|
res = [] |
||||
|
for record in self.browse(cr, uid, ids, context=context): |
||||
|
name = '%s %s'%(record.lastname if record.lastname else u"", |
||||
|
record.firstname if record.firstname else u"") |
||||
|
if record.parent_id and not record.is_company: |
||||
|
name = "%s, %s" % (record.parent_id.name, name) |
||||
|
if context.get('show_address'): |
||||
|
name = name + "\n" + self._display_address(cr, uid, record, without_company=True, context=context) |
||||
|
name = name.replace('\n\n','\n') |
||||
|
name = name.replace('\n\n','\n') |
||||
|
if context.get('show_email') and record.email: |
||||
|
name = "%s <%s>" % (name, record.email) |
||||
|
res.append((record.id, name)) |
||||
|
return res |
||||
|
|
||||
|
|
||||
|
_display_name_store_triggers = { |
||||
|
'res.partner': (lambda self,cr,uid,ids,context=None: self.search(cr, uid, [('id','child_of',ids)]), |
||||
|
['parent_id', 'is_company', 'name', 'firstname', 'lastname'], 10) |
||||
|
} |
||||
|
|
||||
|
# indirection to avoid passing a copy of the overridable method when declaring the function field |
||||
|
_display_name = lambda self, *args, **kwargs: self._display_name_compute(*args, **kwargs) |
||||
|
|
||||
|
_columns = { |
||||
|
# extra field to allow ORDER BY to match visible names |
||||
|
'display_name': fields.function(_display_name, type='char', string='Name', store=_display_name_store_triggers), |
||||
|
} |
@ -0,0 +1,5 @@ |
|||||
|
import test_display_name |
||||
|
|
||||
|
checks = [ |
||||
|
test_display_name |
||||
|
] |
@ -0,0 +1,31 @@ |
|||||
|
import unittest2 |
||||
|
|
||||
|
import openerp.tests.common as common |
||||
|
|
||||
|
class test_display_name(common.TransactionCase): |
||||
|
|
||||
|
def setUp(self): |
||||
|
super(test_display_name,self).setUp() |
||||
|
cr, uid = self.cr, self.uid |
||||
|
self.res_partner = self.registry('res.partner') |
||||
|
|
||||
|
|
||||
|
def test_00_create_res_partner(self): |
||||
|
""" Test if the display name has been correctly set """ |
||||
|
cr, uid = self.cr, self.uid |
||||
|
partner_id = self.res_partner.create(cr, uid, {'lastname': 'Lastname', 'firstname': 'Firstname', 'is_company': True}) |
||||
|
partner_records = self.res_partner.browse(cr, uid, [partner_id]) |
||||
|
p1 = partner_records[0] |
||||
|
self.assertEqual(p1.display_name, 'Lastname Firstname', 'Partner display_name incorect') |
||||
|
|
||||
|
def test_01_res_partner_write_lastname(self): |
||||
|
""" Test if the display name has been correctly set """ |
||||
|
cr, uid = self.cr, self.uid |
||||
|
partner_id = self.res_partner.create(cr, uid, {'lastname': 'Lastname', 'firstname': 'Firstname', 'is_company': True}) |
||||
|
partner_records = self.res_partner.browse(cr, uid, [partner_id]) |
||||
|
p1 = partner_records[0] |
||||
|
self.res_partner.write(cr, uid, partner_id, {'lastname': 'Last'}) |
||||
|
self.assertEqual(p1.display_name, 'Last Firstname', 'Partner display_name incorect') |
||||
|
|
||||
|
if __name__ == '__main__': |
||||
|
unittest2.main() |
Write
Preview
Loading…
Cancel
Save
Reference in new issue