diff --git a/partner_firstname/__openerp__.py b/partner_firstname/__openerp__.py index 17d7d93e5..95a769457 100644 --- a/partner_firstname/__openerp__.py +++ b/partner_firstname/__openerp__.py @@ -19,14 +19,24 @@ ############################################################################## {'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 and firstname +Note: in version 7.0, installing this module invalidates a yaml test in the 'edi' module + +Contributors +============ +Jonathan Nemry +Olivier Laurent -The field 'name' becomes a stored function field concatenating lastname, firstname """, - 'version': '1.0.1', + 'version': '1.1', '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/i18n/de.po b/partner_firstname/i18n/de.po index 5565405d5..7b5eb2551 100644 --- a/partner_firstname/i18n/de.po +++ b/partner_firstname/i18n/de.po @@ -16,15 +16,36 @@ msgstr "" "Plural-Forms: \n" #. module: partner_firstname -#: field:res.partner,lastname:0 -msgid "Lastname" -msgstr "Name" +#: code:addons/partner_firstname/partner.py:81 +#: code:addons/partner_firstname/res_user.py:35 +#: code:addons/partner_firstname/tests/test_partner_firstname.py:56 +#: code:addons/partner_firstname/tests/test_partner_firstname.py:57 +#: code:addons/partner_firstname/tests/test_partner_firstname.py:71 +#: code:addons/partner_firstname/tests/test_partner_firstname.py:72 +#, python-format +msgid "%s (copy)" +msgstr "%s (kopie)" + +#. module: partner_firstname +#: model:ir.model,name:partner_firstname.model_res_users +msgid "Users" +msgstr "Benutzer" #. module: partner_firstname #: field:res.partner,firstname:0 msgid "Firstname" msgstr "Vorname" +#. module: partner_firstname +#: field:res.partner,lastname:0 +msgid "Lastname" +msgstr "Name" + +#. module: partner_firstname +#: view:res.partner:0 +msgid "Is a Company?" +msgstr "Ist ein Unternehmen?" + #. module: partner_firstname #: model:ir.model,name:partner_firstname.model_res_partner msgid "Partner" diff --git a/partner_firstname/i18n/en.po b/partner_firstname/i18n/en.po index 26e710fec..7cccf0a33 100644 --- a/partner_firstname/i18n/en.po +++ b/partner_firstname/i18n/en.po @@ -16,17 +16,37 @@ msgstr "" "Plural-Forms: \n" #. module: partner_firstname -#: field:res.partner,lastname:0 -msgid "Lastname" -msgstr "Lastname" +#: code:addons/partner_firstname/partner.py:81 +#: code:addons/partner_firstname/res_user.py:35 +#: code:addons/partner_firstname/tests/test_partner_firstname.py:56 +#: code:addons/partner_firstname/tests/test_partner_firstname.py:57 +#: code:addons/partner_firstname/tests/test_partner_firstname.py:71 +#: code:addons/partner_firstname/tests/test_partner_firstname.py:72 +#, python-format +msgid "%s (copy)" +msgstr "%s (copy)" + +#. module: partner_firstname +#: model:ir.model,name:partner_firstname.model_res_users +msgid "Users" +msgstr "Users" #. module: partner_firstname #: field:res.partner,firstname:0 msgid "Firstname" msgstr "Firstname" +#. module: partner_firstname +#: field:res.partner,lastname:0 +msgid "Lastname" +msgstr "Lastname" + +#. module: partner_firstname +#: view:res.partner:0 +msgid "Is a Company?" +msgstr "Is a Company?" + #. module: partner_firstname #: model:ir.model,name:partner_firstname.model_res_partner msgid "Partner" msgstr "Partner" - diff --git a/partner_firstname/i18n/fr.po b/partner_firstname/i18n/fr.po index 5155afb0c..bcd457166 100644 --- a/partner_firstname/i18n/fr.po +++ b/partner_firstname/i18n/fr.po @@ -16,15 +16,36 @@ msgstr "" "Plural-Forms: \n" #. module: partner_firstname -#: field:res.partner,lastname:0 -msgid "Lastname" -msgstr "Nom" +#: code:addons/partner_firstname/partner.py:81 +#: code:addons/partner_firstname/res_user.py:35 +#: code:addons/partner_firstname/tests/test_partner_firstname.py:56 +#: code:addons/partner_firstname/tests/test_partner_firstname.py:57 +#: code:addons/partner_firstname/tests/test_partner_firstname.py:71 +#: code:addons/partner_firstname/tests/test_partner_firstname.py:72 +#, python-format +msgid "%s (copy)" +msgstr "%s (copie)" + +#. module: partner_firstname +#: model:ir.model,name:partner_firstname.model_res_users +msgid "Users" +msgstr "Utilisateur" #. module: partner_firstname #: field:res.partner,firstname:0 msgid "Firstname" msgstr "Prénom" +#. module: partner_firstname +#: field:res.partner,lastname:0 +msgid "Lastname" +msgstr "Nom de famille" + +#. module: partner_firstname +#: view:res.partner:0 +msgid "Is a Company?" +msgstr "Est une société?" + #. module: partner_firstname #: model:ir.model,name:partner_firstname.model_res_partner msgid "Partner" diff --git a/partner_firstname/i18n/nl.po b/partner_firstname/i18n/nl.po index 898d22c22..cd798ec82 100644 --- a/partner_firstname/i18n/nl.po +++ b/partner_firstname/i18n/nl.po @@ -16,15 +16,36 @@ msgstr "" "Plural-Forms: \n" #. module: partner_firstname -#: field:res.partner,lastname:0 -msgid "Lastname" -msgstr "Achternaam" +#: code:addons/partner_firstname/partner.py:81 +#: code:addons/partner_firstname/res_user.py:35 +#: code:addons/partner_firstname/tests/test_partner_firstname.py:56 +#: code:addons/partner_firstname/tests/test_partner_firstname.py:57 +#: code:addons/partner_firstname/tests/test_partner_firstname.py:71 +#: code:addons/partner_firstname/tests/test_partner_firstname.py:72 +#, python-format +msgid "%s (copy)" +msgstr "%s (kopie)" + +#. module: partner_firstname +#: model:ir.model,name:partner_firstname.model_res_users +msgid "Users" +msgstr "Gebruikers" #. module: partner_firstname #: field:res.partner,firstname:0 msgid "Firstname" msgstr "Voornaam" +#. module: partner_firstname +#: field:res.partner,lastname:0 +msgid "Lastname" +msgstr "Achternaam" + +#. module: partner_firstname +#: view:res.partner:0 +msgid "Is a Company?" +msgstr "Is een bedrijf?" + #. module: partner_firstname #: model:ir.model,name:partner_firstname.model_res_partner msgid "Partner" diff --git a/partner_firstname/i18n/partner_firstname.pot b/partner_firstname/i18n/partner_firstname.pot index 96518f758..ab75c787a 100644 --- a/partner_firstname/i18n/partner_firstname.pot +++ b/partner_firstname/i18n/partner_firstname.pot @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: OpenERP Server 7.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-10-03 16:09+0000\n" -"PO-Revision-Date: 2013-10-03 16:09+0000\n" +"POT-Creation-Date: 2014-01-22 14:09+0000\n" +"PO-Revision-Date: 2014-01-22 14:09+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -15,6 +15,22 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" +#. module: partner_firstname +#: code:addons/partner_firstname/partner.py:81 +#: code:addons/partner_firstname/res_user.py:35 +#: code:addons/partner_firstname/tests/test_partner_firstname.py:56 +#: code:addons/partner_firstname/tests/test_partner_firstname.py:57 +#: code:addons/partner_firstname/tests/test_partner_firstname.py:71 +#: code:addons/partner_firstname/tests/test_partner_firstname.py:72 +#, python-format +msgid "%s (copy)" +msgstr "" + +#. module: partner_firstname +#: model:ir.model,name:partner_firstname.model_res_users +msgid "Users" +msgstr "" + #. module: partner_firstname #: field:res.partner,firstname:0 msgid "Firstname" @@ -25,6 +41,11 @@ msgstr "" msgid "Lastname" msgstr "" +#. module: partner_firstname +#: view:res.partner:0 +msgid "Is a Company?" +msgstr "" + #. module: partner_firstname #: model:ir.model,name:partner_firstname.model_res_partner msgid "Partner" diff --git a/partner_firstname/partner.py b/partner_firstname/partner.py index 42fed16eb..d6d357a70 100644 --- a/partner_firstname/partner.py +++ b/partner_firstname/partner.py @@ -18,6 +18,7 @@ # ############################################################################## from openerp.osv.orm import Model, fields +from openerp.tools.translate import _ class ResPartner(Model): @@ -29,6 +30,10 @@ class ResPartner(Model): cursor.execute('SELECT id FROM res_partner WHERE lastname IS NOT NULL Limit 1') if not cursor.fetchone(): cursor.execute('UPDATE res_partner set lastname = name WHERE name IS NOT NULL') + # Create Sql constraint if table is not empty + cursor.execute('SELECT id FROM res_partner Limit 1') + if cursor.fetchone(): + cursor.execute('ALTER TABLE res_partner ALTER COLUMN lastname SET NOT NULL') def _compute_name_custom(self, cursor, uid, ids, fname, arg, context=None): res = {} @@ -41,15 +46,51 @@ class ResPartner(Model): return res def _write_name(self, cursor, uid, partner_id, field_name, field_value, arg, context=None): - return self.write(cursor, uid, partner_id, - {'lastname': field_value}, context=context) + """ + 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 = field_value and not field_value.isspace() and field_value or False + vals = {'lastname': field_value, 'firstname': False} + 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): + """ + 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'] + if default.get('name'): + del(default['name']) + 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 + """ + 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""" + will not install if there is demo data + """ to_use = vals - if vals.get('name'): + if 'name' in vals: corr_vals = vals.copy() corr_vals['lastname'] = corr_vals['name'] del(corr_vals['name']) diff --git a/partner_firstname/partner_view.xml b/partner_firstname/partner_view.xml index 8f0368373..9a88c6e80 100644 --- a/partner_firstname/partner_view.xml +++ b/partner_firstname/partner_view.xml @@ -32,15 +32,26 @@ - + - - -