diff --git a/addons/payment/models/payment_acquirer.py b/addons/payment/models/payment_acquirer.py index 2d466219140..c05270a7553 100644 --- a/addons/payment/models/payment_acquirer.py +++ b/addons/payment/models/payment_acquirer.py @@ -140,6 +140,7 @@ class PaymentAcquirer(osv.Model): 'country': tx.partner_country_id, 'phone': tx.partner_phone, 'reference': tx.partner_reference, + 'state': None, } else: if partner_id: @@ -154,6 +155,7 @@ class PaymentAcquirer(osv.Model): 'country_id': partner.country_id.id, 'country': partner.country_id, 'phone': partner.phone, + 'state': partner.state_id, } else: partner, partner_data = False, {} diff --git a/addons/payment_paypal/models/paypal.py b/addons/payment_paypal/models/paypal.py index 5dcbd975a4a..3f8872396f8 100644 --- a/addons/payment_paypal/models/paypal.py +++ b/addons/payment_paypal/models/paypal.py @@ -118,6 +118,7 @@ class AcquirerPaypal(osv.Model): 'address1': partner_values['address'], 'city': partner_values['city'], 'country': partner_values['country'] and partner_values['country'].name or '', + 'state': partner_values['state'] and partner_values['state'].name or '', 'email': partner_values['email'], 'zip': partner_values['zip'], 'first_name': partner_values['first_name'], @@ -226,7 +227,7 @@ class TxPaypal(osv.Model): # check seller if data.get('receiver_email') != tx.acquirer_id.paypal_email_account: invalid_parameters.append(('receiver_email', data.get('receiver_email'), tx.acquirer_id.paypal_email_account)) - if tx.acquirer_id.paypal_seller_account and data.get('receiver_id') != tx.acquirer_id.paypal_seller_account: + if data.get('receiver_id') and tx.acquirer_id.paypal_seller_account and data['receiver_id'] != tx.acquirer_id.paypal_seller_account: invalid_parameters.append(('receiver_id', data.get('receiver_id'), tx.acquirer_id.paypal_seller_account)) return invalid_parameters diff --git a/openerp/addons/base/res/res_partner.py b/openerp/addons/base/res/res_partner.py index 7d6b92ad315..a0e8433baa5 100644 --- a/openerp/addons/base/res/res_partner.py +++ b/openerp/addons/base/res/res_partner.py @@ -450,17 +450,31 @@ class res_partner(osv.osv, format_address): def _commercial_sync_from_company(self, cr, uid, partner, context=None): """ Handle sync of commercial fields when a new parent commercial entity is set, as if they were related fields """ - if partner.commercial_partner_id != partner: + commercial_partner = partner.commercial_partner_id + if not commercial_partner: + # On child partner creation of a parent partner, + # the commercial_partner_id is not yet computed + commercial_partner_id = self._commercial_partner_compute( + cr, uid, [partner.id], 'commercial_partner_id', [], context=context)[partner.id] + commercial_partner = self.browse(cr, uid, commercial_partner_id, context=context) + if commercial_partner != partner: commercial_fields = self._commercial_fields(cr, uid, context=context) - sync_vals = self._update_fields_values(cr, uid, partner.commercial_partner_id, - commercial_fields, context=context) + sync_vals = self._update_fields_values(cr, uid, commercial_partner, + commercial_fields, context=context) partner.write(sync_vals) def _commercial_sync_to_children(self, cr, uid, partner, context=None): """ Handle sync of commercial fields to descendants """ commercial_fields = self._commercial_fields(cr, uid, context=context) - sync_vals = self._update_fields_values(cr, uid, partner.commercial_partner_id, - commercial_fields, context=context) + commercial_partner = partner.commercial_partner_id + if not commercial_partner: + # On child partner creation of a parent partner, + # the commercial_partner_id is not yet computed + commercial_partner_id = self._commercial_partner_compute( + cr, uid, [partner.id], 'commercial_partner_id', [], context=context)[partner.id] + commercial_partner = self.browse(cr, uid, commercial_partner_id, context=context) + sync_vals = self._update_fields_values(cr, uid, commercial_partner, + commercial_fields, context=context) sync_children = [c for c in partner.child_ids if not c.is_company] for child in sync_children: self._commercial_sync_to_children(cr, uid, child, context=context) diff --git a/openerp/addons/base/tests/test_base.py b/openerp/addons/base/tests/test_base.py index bbc5b21d1fb..b34451d0396 100644 --- a/openerp/addons/base/tests/test_base.py +++ b/openerp/addons/base/tests/test_base.py @@ -250,20 +250,24 @@ class test_base(common.TransactionCase): 'parent_id': p1.id})) p2 = self.res_partner.browse(cr, uid, self.res_partner.search(cr, uid, [('email', '=', 'agr@sunhelm.com')])[0]) + self.res_partner.write(cr, uid, sunhelm.id, {'child_ids': [(0, 0, {'name': 'Ulrik Greenthorn', + 'email': 'ugr@sunhelm.com'})]}) + p3 = self.res_partner.browse(cr, uid, self.res_partner.search(cr, uid, + [('email', '=', 'ugr@sunhelm.com')])[0]) - for p in (p0, p1, p11, p2): + for p in (p0, p1, p11, p2, p3): p.refresh() self.assertEquals(p.commercial_partner_id, sunhelm, 'Incorrect commercial entity resolution') self.assertEquals(p.vat, sunhelm.vat, 'Commercial fields must be automatically synced') sunhelmvat = 'BE0123456789' sunhelm.write({'vat': sunhelmvat}) - for p in (p0, p1, p11, p2): + for p in (p0, p1, p11, p2, p3): p.refresh() self.assertEquals(p.vat, sunhelmvat, 'Commercial fields must be automatically and recursively synced') p1vat = 'BE0987654321' p1.write({'vat': p1vat}) - for p in (sunhelm, p0, p11, p2): + for p in (sunhelm, p0, p11, p2, p3): p.refresh() self.assertEquals(p.vat, sunhelmvat, 'Sync to children should only work downstream and on commercial entities')