From 9bec1595bd85b3c78f9ac00bed959ff7ea87c19e Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Wed, 10 Apr 2013 14:32:29 +0200 Subject: [PATCH] [FIX] res.partner address sync: `type` field should not be synced wih other address fields It is valid to use the parent address but still set a different type of address - the name, email, phone, etc. could be different. bzr revid: odo@openerp.com-20130410123229-9l60sbcks3tpmy7x --- openerp/addons/base/res/res_partner.py | 8 ++++---- openerp/addons/base/tests/test_base.py | 8 ++++++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/openerp/addons/base/res/res_partner.py b/openerp/addons/base/res/res_partner.py index 9d36682f17d..cf69c38d0d0 100644 --- a/openerp/addons/base/res/res_partner.py +++ b/openerp/addons/base/res/res_partner.py @@ -161,7 +161,7 @@ def _lang_get(self, cr, uid, context=None): return [(r['code'], r['name']) for r in res] # fields copy if 'use_parent_address' is checked -ADDRESS_FIELDS = ('street', 'street2', 'zip', 'city', 'state_id', 'country_id', 'type') +ADDRESS_FIELDS = ('street', 'street2', 'zip', 'city', 'state_id', 'country_id') POSTAL_ADDRESS_FIELDS = ADDRESS_FIELDS # deprecated, to remove after 7.0 class res_partner(osv.osv, format_address): @@ -460,10 +460,10 @@ class res_partner(osv.osv, format_address): """ On creation of first contact for a company (or root) that has no address, assume contact address was meant to be company address """ parent = partner.parent_id - address_data_fields = list(set(self._address_fields(cr, uid, context=context)).difference(['type'])) + address_fields = self._address_fields(cr, uid, context=context) if parent and (parent.is_company or not parent.parent_id) and len(parent.child_ids) == 1 and \ - any(partner[f] for f in address_data_fields) and not any(parent[f] for f in address_data_fields): - addr_vals = self._update_fields_values(cr, uid, partner, address_data_fields, context=context) + any(partner[f] for f in address_fields) and not any(parent[f] for f in address_fields): + addr_vals = self._update_fields_values(cr, uid, partner, address_fields, context=context) parent.update_address(addr_vals) if not parent.is_company: parent.write({'is_company': True}) diff --git a/openerp/addons/base/tests/test_base.py b/openerp/addons/base/tests/test_base.py index 42f1386771e..de6e88c2cac 100644 --- a/openerp/addons/base/tests/test_base.py +++ b/openerp/addons/base/tests/test_base.py @@ -47,8 +47,10 @@ class test_base(common.TransactionCase): 'street': 'Main Street, 10', 'phone': '123456789', 'email': 'info@ghoststep.com', - 'vat': 'BE0477472701'})) + 'vat': 'BE0477472701', + 'type': 'default'})) p1 = self.res_partner.browse(cr, uid, self.res_partner.name_create(cr, uid, 'Denis Bladesmith ')[0]) + self.assertEqual(p1.type, 'contact', 'Default type must be "contact"') p1phone = '123456789#34' p1.write({'phone': p1phone, 'parent_id': ghoststep.id, @@ -56,6 +58,7 @@ class test_base(common.TransactionCase): p1.refresh() self.assertEqual(p1.street, ghoststep.street, 'Address fields must be synced') self.assertEqual(p1.phone, p1phone, 'Phone should be preserved after address sync') + self.assertEqual(p1.type, 'contact', 'Type should be preserved after address sync') self.assertEqual(p1.email, 'denis.bladesmith@ghoststep.com', 'Email should be preserved after sync') ghoststreet = 'South Street, 25' ghoststep.write({'street': ghoststreet}) @@ -78,11 +81,12 @@ class test_base(common.TransactionCase): self.assertFalse(ironshield.is_company, 'Partners are not companies by default') self.assertFalse(ironshield.use_parent_address, 'use_parent_address defaults to False') self.assertEqual(ironshield.type, 'contact', 'Default type must be "contact"') + ironshield.write({'type': 'default'}) # force default type to double-check sync p1 = self.res_partner.browse(cr, uid, self.res_partner.create(cr, uid, {'name': 'Isen Hardearth', 'street': 'Strongarm Avenue, 12', 'parent_id': ironshield.id})) - self.assertEquals(p1.type, 'contact', 'Default type must be "contact"') + self.assertEquals(p1.type, 'contact', 'Default type must be "contact", not the copied parent type') ironshield.refresh() self.assertEqual(ironshield.street, p1.street, 'Address fields should be copied to company') self.assertTrue(ironshield.is_company, 'Company flag should be turned on after first contact creation')