summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlivier Dony <odo@openerp.com>2013-04-10 14:32:29 +0200
committerOlivier Dony <odo@openerp.com>2013-04-10 14:32:29 +0200
commit9bec1595bd85b3c78f9ac00bed959ff7ea87c19e (patch)
treef4116723206cbf65a85557831469ef04cebd6e94
parent9dbe29b2b5c40e3efbac5a35b290429b24473e87 (diff)
[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
-rw-r--r--openerp/addons/base/res/res_partner.py8
-rw-r--r--openerp/addons/base/tests/test_base.py8
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 <denis.bladesmith@ghoststep.com>')[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')