diff --git a/partner_firstname/__openerp__.py b/partner_firstname/__openerp__.py index 17d7d93e5..65d7ebe48 100644 --- a/partner_firstname/__openerp__.py +++ b/partner_firstname/__openerp__.py @@ -19,14 +19,18 @@ ############################################################################## {'name': 'Partner first name, last name', - 'description': """Split first name and last name on res.partner. + 'description': """ +This module splits first name and last name for non company partners +==================================================================== -The field 'name' becomes a stored function field concatenating lastname, firstname +The field 'name' becomes a stored function field concatenating lastname and firstname +Note: in version 7.0, installing this module invalidates a yaml test in the 'edi' module """, - 'version': '1.0.1', + 'version': '1.0.2', 'author': 'Camptocamp', - 'category': 'MISC', - 'website': 'http://www.camptocamp.com', + 'maintainer': 'Camptocamp, Acsone', + 'category': 'Extra Tools', + 'website': 'http://www.camptocamp.com, http://www.acsone.eu', 'depends': ['base'], 'data': [ 'partner_view.xml', diff --git a/partner_firstname/partner.py b/partner_firstname/partner.py index aebf78065..62d2a34c4 100644 --- a/partner_firstname/partner.py +++ b/partner_firstname/partner.py @@ -47,37 +47,47 @@ class ResPartner(Model): def _write_name(self, cursor, uid, partner_id, field_name, field_value, arg, context=None): """ - # Try to reverse the effect of _compute_name_custom: - # * if is_company is True then lastname = name and firstname False - # * if firstname change in the new name: lastname is set to new name, firstname is reset - # * if only lastname change in the new name: lastname is updated accordingly, firstname remains untouched + Try to reverse the effect of _compute_name_custom: + * if the partner is not a company and the firstname does not change in the new name + then firstname remains untouched and lastname is updated accordingly + * otherwise lastname=new name and firstname=False + In addition an heuristic avoids to keep a firstname without a non-blank lastname """ + field_value = not field_value.isspace() and field_value or False vals = {'lastname': field_value, 'firstname': False} - fields = self.read(cursor, uid, [partner_id], ['firstname', 'is_company'], context=context)[0] - if not fields['is_company']: - to_check = ' %s' % fields['firstname'] - if field_value.endswith(to_check): - vals['lastname'] = field_value[:-len(to_check)] - del(vals['firstname']) + if field_value: + flds = self.read(cursor, uid, [partner_id], ['firstname', 'is_company'], context=context)[0] + if not flds['is_company']: + to_check = ' %s' % flds['firstname'] + if field_value.endswith(to_check): + ln = field_value[:-len(to_check)].strip() + if ln: + vals['lastname'] = ln + del(vals['firstname']) + else: + # If the lastname is deleted from the new name + # then the firstname becomes the lastname + vals['lastname'] = flds['firstname'] + return self.write(cursor, uid, partner_id, vals, context=context) - def copy_data(self, cr, uid, id, default=None, context=None): + def copy_data(self, cr, uid, _id, default=None, context=None): """ - # Avoid to replicate the firstname into the name when duplicating a partner + Avoid to replicate the firstname into the name when duplicating a partner """ default = default or {} if not default.get('lastname'): default = default.copy() - default['lastname'] = _('%s (copy)') % self.read(cr, uid, [id], ['lastname'], context=context)[0]['lastname'] + default['lastname'] = _('%s (copy)') % self.read(cr, uid, [_id], ['lastname'], context=context)[0]['lastname'] if default.get('name'): del(default['name']) - return super(ResPartner, self).copy_data(cr, uid, id, default, context=context) + return super(ResPartner, self).copy_data(cr, uid, _id, default, context=context) def create(self, cursor, uid, vals, context=None): """ - # To support data backward compatibility we have to keep this overwrite even if we - # use fnct_inv: otherwise we can't create entry because lastname is mandatory and module - # will not install if there is demo data + To support data backward compatibility we have to keep this overwrite even if we + use fnct_inv: otherwise we can't create entry because lastname is mandatory and module + will not install if there is demo data """ to_use = vals if vals.get('name'): diff --git a/partner_firstname/res_user.py b/partner_firstname/res_user.py index 2c3d672b8..85e308417 100644 --- a/partner_firstname/res_user.py +++ b/partner_firstname/res_user.py @@ -25,14 +25,14 @@ class ResUsers(orm.Model): _inherit = 'res.users' - def copy_data(self, cr, uid, id, default=None, context=None): + def copy_data(self, cr, uid, _id, default=None, context=None): """ - # Avoid to replicate the firstname into the name when duplicating a user + Avoid to replicate the firstname into the name when duplicating a user """ default = default or {} if not default.get('lastname'): default = default.copy() - default['lastname'] = _('%s (copy)') % self.read(cr, uid, [id], ['lastname'], context=context)[0]['lastname'] + default['lastname'] = _('%s (copy)') % self.read(cr, uid, [_id], ['lastname'], context=context)[0]['lastname'] if default.get('name'): del(default['name']) - return super(ResUsers, self).copy_data(cr, uid, id, default, context=context) + return super(ResUsers, self).copy_data(cr, uid, _id, default, context=context) diff --git a/partner_firstname/tests/test_partner_firstname.py b/partner_firstname/tests/test_partner_firstname.py index cbfac6f65..38e94ffc2 100644 --- a/partner_firstname/tests/test_partner_firstname.py +++ b/partner_firstname/tests/test_partner_firstname.py @@ -56,8 +56,8 @@ class test_partner_firstname(common.TransactionCase): # create a user res_id = self.user_model.create(cr, uid, self.fields_user, context={}) # get the related partner id and add it a firstname - fields = self.user_model.read(cr, uid, [res_id], ['partner_id'], context={})[0] - self.partner_model.write(cr, uid, fields['partner_id'][0], {'firstname':'firstname'}, context={}) + flds = self.user_model.read(cr, uid, [res_id], ['partner_id'], context={})[0] + self.partner_model.write(cr, uid, flds['partner_id'][0], {'firstname':'firstname'}, context={}) # copy the user and compare result res_id = self.user_model.copy(cr, uid, res_id, default={}, context={}) vals = self.user_model.read(cr, uid, [res_id], ['name', 'lastname', 'firstname'], context={})[0] @@ -70,8 +70,8 @@ class test_partner_firstname(common.TransactionCase): # create a user res_id = self.user_model.create(cr, uid, self.fields_user, context={}) # get the related partner id and add it a firstname - fields = self.user_model.read(cr, uid, [res_id], ['partner_id'], context={})[0] - self.partner_model.write(cr, uid, fields['partner_id'][0], {'firstname':'firstname'}, context={}) + flds = self.user_model.read(cr, uid, [res_id], ['partner_id'], context={})[0] + self.partner_model.write(cr, uid, flds['partner_id'][0], {'firstname':'firstname'}, context={}) self.user_model.write(cr, uid, res_id, {'name': 'change firstname'}, context={}) vals = self.user_model.read(cr, uid, [res_id], ['name', 'lastname', 'firstname'], context={})[0] self.assertEqual(vals['name'] == "change firstname" and @@ -83,8 +83,8 @@ class test_partner_firstname(common.TransactionCase): # create a user res_id = self.user_model.create(cr, uid, self.fields_user, context={}) # get the related partner id and add it a firstname - fields = self.user_model.read(cr, uid, [res_id], ['partner_id'], context={})[0] - self.partner_model.write(cr, uid, fields['partner_id'][0], {'firstname':'firstname'}, context={}) + flds = self.user_model.read(cr, uid, [res_id], ['partner_id'], context={})[0] + self.partner_model.write(cr, uid, flds['partner_id'][0], {'firstname':'firstname'}, context={}) self.user_model.write(cr, uid, res_id, {'name': 'lastname other'}, context={}) vals = self.user_model.read(cr, uid, [res_id], ['name', 'lastname', 'firstname'], context={})[0] self.assertEqual(vals['name'] == "lastname other" and