Antonio Espinosa
9 years ago
committed by
Pedro M. Baeza
12 changed files with 239 additions and 22 deletions
-
52partner_firstname/README.rst
-
10partner_firstname/__openerp__.py
-
5partner_firstname/models/__init__.py
-
66partner_firstname/models/base_config_settings.py
-
0partner_firstname/models/exceptions.py
-
46partner_firstname/models/res_partner.py
-
3partner_firstname/tests/__init__.py
-
2partner_firstname/tests/base.py
-
1partner_firstname/tests/test_create.py
-
2partner_firstname/tests/test_empty.py
-
40partner_firstname/tests/test_order.py
-
34partner_firstname/views/base_config_view.xml
@ -1,5 +1,6 @@ |
|||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||
# © 2013 Nicolas Bessi (Camptocamp SA) |
|
||||
|
# © 2015 Antiun Ingenieria S.L. - Antonio Espinosa |
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
||||
|
|
||||
|
from . import base_config_settings |
||||
from . import res_partner |
from . import res_partner |
||||
from . import res_user |
|
@ -0,0 +1,66 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# © 2015 Antiun Ingenieria S.L. - Antonio Espinosa |
||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
||||
|
|
||||
|
import logging |
||||
|
from openerp import models, fields, api |
||||
|
_logger = logging.getLogger(__name__) |
||||
|
|
||||
|
|
||||
|
class BaseConfigSettings(models.TransientModel): |
||||
|
_inherit = 'base.config.settings' |
||||
|
|
||||
|
partner_names_order = fields.Selection( |
||||
|
string="Partner names order", |
||||
|
selection="_partner_names_order_selection", |
||||
|
help="Order to compose partner fullname", |
||||
|
required=True) |
||||
|
partner_names_order_changed = fields.Boolean( |
||||
|
readonly=True, compute="_compute_names_order_changed") |
||||
|
|
||||
|
def _partner_names_order_selection(self): |
||||
|
return [ |
||||
|
('last_first', 'Lastname Firstname'), |
||||
|
('last_first_comma', 'Lastname, Firstname'), |
||||
|
('first_last', 'Firstname Lastname'), |
||||
|
] |
||||
|
|
||||
|
def _partner_names_order_default(self): |
||||
|
return self.env['res.partner']._names_order_default() |
||||
|
|
||||
|
@api.multi |
||||
|
def get_default_partner_names_order(self): |
||||
|
return { |
||||
|
'partner_names_order': self.env['ir.config_parameter'].get_param( |
||||
|
'partner_names_order', self._partner_names_order_default()), |
||||
|
} |
||||
|
|
||||
|
@api.multi |
||||
|
def _compute_names_order_changed(self): |
||||
|
current = self.env['ir.config_parameter'].get_param( |
||||
|
'partner_names_order', self._partner_names_order_default()) |
||||
|
return self.partner_names_order != current |
||||
|
|
||||
|
@api.onchange('partner_names_order') |
||||
|
def _onchange_partner_names_order(self): |
||||
|
self.partner_names_order_changed = self._compute_names_order_changed() |
||||
|
|
||||
|
@api.multi |
||||
|
def set_partner_names_order(self): |
||||
|
self.env['ir.config_parameter'].set_param( |
||||
|
'partner_names_order', self.partner_names_order) |
||||
|
|
||||
|
@api.multi |
||||
|
def _partners_for_recalculating(self): |
||||
|
return self.env['res.partner'].search([ |
||||
|
('is_company', '=', False), |
||||
|
('firstname', '!=', False), ('lastname', '!=', False), |
||||
|
]) |
||||
|
|
||||
|
@api.multi |
||||
|
def action_recalculate_partners_name(self): |
||||
|
partners = self._partners_for_recalculating() |
||||
|
_logger.info("Recalculating names for %d partners.", len(partners)) |
||||
|
partners._compute_name() |
||||
|
_logger.info("%d partners updated.", len(partners)) |
||||
|
return True |
@ -0,0 +1,40 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# © 2015 Antiun Ingenieria S.L. - Antonio Espinosa |
||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
||||
|
|
||||
|
from openerp.tests.common import TransactionCase |
||||
|
|
||||
|
|
||||
|
class PartnerNamesOrder(TransactionCase): |
||||
|
def order_set(self, order): |
||||
|
return self.env['ir.config_parameter'].set_param( |
||||
|
'partner_names_order', order) |
||||
|
|
||||
|
def test_get_computed_name(self): |
||||
|
lastname = u"García Lorca" |
||||
|
firstname = u"Federico" |
||||
|
cases = ( |
||||
|
('last_first', u"García Lorca Federico"), |
||||
|
('last_first_comma', u"García Lorca, Federico"), |
||||
|
('first_last', u"Federico García Lorca"), |
||||
|
) |
||||
|
|
||||
|
for order, name in cases: |
||||
|
self.order_set(order) |
||||
|
result = self.env['res.partner']._get_computed_name( |
||||
|
lastname, firstname) |
||||
|
self.assertEqual(result, name) |
||||
|
|
||||
|
def test_get_inverse_name(self): |
||||
|
lastname = u"Flanker" |
||||
|
firstname = u"Petër" |
||||
|
cases = ( |
||||
|
('last_first', u"Flanker Petër"), |
||||
|
('last_first_comma', u"Flanker, Petër"), |
||||
|
('first_last', u"Petër Flanker"), |
||||
|
) |
||||
|
for order, name in cases: |
||||
|
self.order_set(order) |
||||
|
result = self.env['res.partner']._get_inverse_name(name) |
||||
|
self.assertEqual(result['lastname'], lastname) |
||||
|
self.assertEqual(result['firstname'], firstname) |
@ -0,0 +1,34 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<!-- © 2015 Antiun Ingenieria S.L. - Antonio Espinosa |
||||
|
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). --> |
||||
|
<openerp> |
||||
|
<data> |
||||
|
|
||||
|
<record id="view_general_configuration" model="ir.ui.view"> |
||||
|
<field name="name">Add partner_names_order config parameter</field> |
||||
|
<field name="model">base.config.settings</field> |
||||
|
<field name="inherit_id" ref="base_setup.view_general_configuration"/> |
||||
|
<field name="arch" type="xml"> |
||||
|
<xpath expr="//label[@string='Email']/.." position='after'> |
||||
|
<group> |
||||
|
<label for="partner_names_order" /> |
||||
|
<div> |
||||
|
<div> |
||||
|
<field name="partner_names_order" class="oe_inline" /> |
||||
|
<field name="partner_names_order_changed" invisible="1"/> |
||||
|
<button name="action_recalculate_partners_name" |
||||
|
string="Recalculate names" |
||||
|
icon="gtk-execute" |
||||
|
type="object" |
||||
|
help="Recalculate names for all partners. This process could take so much time if there are more than 10,000 active partners" |
||||
|
attrs="{'invisible': [('partner_names_order_changed', '=', True)]}"/> |
||||
|
</div> |
||||
|
</div> |
||||
|
</group> |
||||
|
</xpath> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
|
||||
|
</data> |
||||
|
</openerp> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue