summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorNicolas Martinelli <nim@odoo.com>2016-01-20 12:04:19 +0100
committerNicolas Martinelli <nim@odoo.com>2016-01-20 15:48:31 +0100
commit2d4257da1a747681223cdaa32f7837e820409736 (patch)
tree4df54c490ffbba9772953af49341b3ffa409de56 /addons
parent917f4e73c1a35bb4ba5ab4a38e4cdca8a87c3cce (diff)
[FIX] payment_authorize: send billing and shipping data
Authorize.net requires both billing and shipping data. opw-660771
Diffstat (limited to 'addons')
-rw-r--r--addons/payment/models/payment_acquirer.py26
-rw-r--r--addons/payment/tests/common.py10
-rw-r--r--addons/payment_authorize/models/authorize.py9
-rw-r--r--addons/payment_authorize/tests/test_authorize.py21
-rw-r--r--addons/payment_authorize/views/authorize.xml28
-rw-r--r--addons/website_sale/controllers/main.py3
6 files changed, 81 insertions, 16 deletions
diff --git a/addons/payment/models/payment_acquirer.py b/addons/payment/models/payment_acquirer.py
index 17139195f2d..a020ccc55df 100644
--- a/addons/payment/models/payment_acquirer.py
+++ b/addons/payment/models/payment_acquirer.py
@@ -198,8 +198,13 @@ class PaymentAcquirer(osv.Model):
# Fill partner_* using values['partner_id'] or partner_id arguement
partner_id = values.get('partner_id', partner_id)
+ billing_partner_id = values.get('billing_partner_id', partner_id)
if partner_id:
partner = self.pool['res.partner'].browse(cr, uid, partner_id, context=context)
+ if partner_id != billing_partner_id:
+ billing_partner = self.pool['res.partner'].browse(cr, uid, billing_partner_id, context=context)
+ else:
+ billing_partner = partner
values.update({
'partner': partner,
'partner_id': partner_id,
@@ -213,18 +218,39 @@ class PaymentAcquirer(osv.Model):
'partner_country': partner.country_id,
'partner_phone': partner.phone,
'partner_state': partner.state_id,
+ 'billing_partner': billing_partner,
+ 'billing_partner_id': billing_partner_id,
+ 'billing_partner_name': billing_partner.name,
+ 'billing_partner_lang': billing_partner.lang,
+ 'billing_partner_email': billing_partner.email,
+ 'billing_partner_zip': billing_partner.zip,
+ 'billing_partner_city': billing_partner.city,
+ 'billing_partner_address': _partner_format_address(billing_partner.street, billing_partner.street2),
+ 'billing_partner_country_id': billing_partner.country_id.id,
+ 'billing_partner_country': billing_partner.country_id,
+ 'billing_partner_phone': billing_partner.phone,
+ 'billing_partner_state': billing_partner.state_id,
})
if values.get('partner_name'):
values.update({
'partner_first_name': _partner_split_name(values.get('partner_name'))[0],
'partner_last_name': _partner_split_name(values.get('partner_name'))[1],
})
+ if values.get('billing_partner_name'):
+ values.update({
+ 'billing_partner_first_name': _partner_split_name(values.get('billing_partner_name'))[0],
+ 'billing_partner_last_name': _partner_split_name(values.get('billing_partner_name'))[1],
+ })
# Fix address, country fields
if not values.get('partner_address'):
values['address'] = _partner_format_address(values.get('partner_street', ''), values.get('partner_street2', ''))
if not values.get('partner_country') and values.get('partner_country_id'):
values['country'] = self.pool['res.country'].browse(cr, uid, values.get('partner_country_id'), context=context)
+ if not values.get('billing_partner_address'):
+ values['billing_address'] = _partner_format_address(values.get('billing_partner_street', ''), values.get('billing_partner_street2', ''))
+ if not values.get('billing_partner_country') and values.get('billing_partner_country_id'):
+ values['billing_country'] = self.pool['res.country'].browse(cr, uid, values.get('billing_partner_country_id'), context=context)
# compute fees
diff --git a/addons/payment/tests/common.py b/addons/payment/tests/common.py
index ff1800496e9..e90bc8d47d2 100644
--- a/addons/payment/tests/common.py
+++ b/addons/payment/tests/common.py
@@ -31,6 +31,16 @@ class PaymentAcquirerCommon(common.TransactionCase):
'partner_country': self.env['res.country'].browse(self.country_belgium_id),
'partner_country_id': self.country_belgium_id,
'partner_country_name': 'Belgium',
+ 'billing_partner_name': 'Norbert Buyer',
+ 'billing_partner_lang': 'en_US',
+ 'billing_partner_email': 'norbert.buyer@example.com',
+ 'billing_partner_address': 'Huge Street 2/543',
+ 'billing_partner_phone': '0032 12 34 56 78',
+ 'billing_partner_city': 'Sin City',
+ 'billing_partner_zip': '1000',
+ 'billing_partner_country': self.env['res.country'].browse(self.country_belgium_id),
+ 'billing_partner_country_id': self.country_belgium_id,
+ 'billing_partner_country_name': 'Belgium',
}
# test partner
diff --git a/addons/payment_authorize/models/authorize.py b/addons/payment_authorize/models/authorize.py
index 37cd6c06b9e..d4fc0ee9a9d 100644
--- a/addons/payment_authorize/models/authorize.py
+++ b/addons/payment_authorize/models/authorize.py
@@ -70,6 +70,15 @@ class PaymentAcquirerAuthorize(models.Model):
'last_name': values.get('partner_last_name'),
'phone': values.get('partner_phone'),
'state': values.get('partner_state') and values['partner_state'].name or '',
+ 'billing_address': values.get('billing_partner_address'),
+ 'billing_city': values.get('billing_partner_city'),
+ 'billing_country': values.get('billing_partner_country') and values.get('billing_partner_country').name or '',
+ 'billing_email': values.get('billing_partner_email'),
+ 'billing_zip_code': values.get('billing_partner_zip'),
+ 'billing_first_name': values.get('billing_partner_first_name'),
+ 'billing_last_name': values.get('billing_partner_last_name'),
+ 'billing_phone': values.get('billing_partner_phone'),
+ 'billing_state': values.get('billing_partner_state') and values['billing_partner_state'].name or '',
}
temp_authorize_tx_values['returndata'] = authorize_tx_values.pop('return_url', '')
temp_authorize_tx_values['x_fp_hash'] = self._authorize_generate_hashing(temp_authorize_tx_values)
diff --git a/addons/payment_authorize/tests/test_authorize.py b/addons/payment_authorize/tests/test_authorize.py
index ed71213fc0c..a9e735f6c25 100644
--- a/addons/payment_authorize/tests/test_authorize.py
+++ b/addons/payment_authorize/tests/test_authorize.py
@@ -71,6 +71,15 @@ class AuthorizeForm(AuthorizeCommon):
'x_phone': '0032 12 34 56 78',
'x_email': 'norbert.buyer@example.com',
'x_state': None,
+ 'x_ship_to_first_name': 'Norbert',
+ 'x_ship_to_last_name': 'Buyer',
+ 'x_ship_to_address': 'Huge Street 2/543',
+ 'x_ship_to_city': 'Sin City',
+ 'x_ship_to_zip': '1000',
+ 'x_ship_to_country': 'Belgium',
+ 'x_ship_to_phone': '0032 12 34 56 78',
+ 'x_ship_to_email': 'norbert.buyer@example.com',
+ 'x_ship_to_state': None,
}
form_values['x_fp_hash'] = self._authorize_generate_hashing(form_values)
@@ -82,14 +91,14 @@ class AuthorizeForm(AuthorizeCommon):
# check form result
tree = objectify.fromstring(res)
self.assertEqual(tree.get('action'), 'https://test.authorize.net/gateway/transact.dll', 'Authorize: wrong form POST url')
- for form_input in tree.input:
- # Generated and received 'x_fp_hash' are always different so skeep it.
- if form_input.get('name') in ['submit', 'x_fp_hash']:
+ for el in tree.iterfind('input'):
+ values = el.values()
+ if values[1] in ['submit', 'x_fp_hash', 'return_url', 'x_state', 'x_ship_to_state']:
continue
self.assertEqual(
- form_input.get('value'),
- form_values[form_input.get('name')],
- 'Authorize: wrong value for input %s: received %s instead of %s' % (form_input.get('name'), form_input.get('value'), form_values[form_input.get('name')])
+ unicode(values[2], "utf-8"),
+ form_values[values[1]],
+ 'Authorize: wrong value for input %s: received %s instead of %s' % (values[1], values[2], form_values[values[1]])
)
@mute_logger('openerp.addons.payment_authorize.models.authorize', 'ValidationError')
diff --git a/addons/payment_authorize/views/authorize.xml b/addons/payment_authorize/views/authorize.xml
index e21baa58b8d..04767c36ec1 100644
--- a/addons/payment_authorize/views/authorize.xml
+++ b/addons/payment_authorize/views/authorize.xml
@@ -21,15 +21,25 @@
<input type='hidden' name='x_invoice_num' t-att-value='reference'/>
<input type='hidden' name='x_currency_code' t-att-value='x_currency_code'/>
<!-- Billing Information-->
- <input type='hidden' name='x_first_name' t-att-value="first_name"/>
- <input type='hidden' name='x_last_name' t-att-value="last_name"/>
- <input type='hidden' name='x_address' t-att-value="address"/>
- <input type='hidden' name='x_city' t-att-value="city"/>
- <input type='hidden' name='x_zip' t-att-value="zip_code"/>
- <input type='hidden' name='x_country' t-att-value="country"/>
- <input type='hidden' name='x_phone' t-att-value='phone'/>
- <input type='hidden' name='x_email' t-att-value="email"/>
- <input type='hidden' name='x_state' t-att-value="state"/>
+ <input type='hidden' name='x_first_name' t-att-value="billing_first_name"/>
+ <input type='hidden' name='x_last_name' t-att-value="billing_last_name"/>
+ <input type='hidden' name='x_address' t-att-value="billing_address"/>
+ <input type='hidden' name='x_city' t-att-value="billing_city"/>
+ <input type='hidden' name='x_zip' t-att-value="billing_zip_code"/>
+ <input type='hidden' name='x_country' t-att-value="billing_country"/>
+ <input type='hidden' name='x_phone' t-att-value='billing_phone'/>
+ <input type='hidden' name='x_email' t-att-value="billing_email"/>
+ <input type='hidden' name='x_state' t-att-value="billing_state"/>
+ <!-- Shipping Information-->
+ <input type='hidden' name='x_ship_to_first_name' t-att-value="first_name"/>
+ <input type='hidden' name='x_ship_to_last_name' t-att-value="last_name"/>
+ <input type='hidden' name='x_ship_to_address' t-att-value="address"/>
+ <input type='hidden' name='x_ship_to_city' t-att-value="city"/>
+ <input type='hidden' name='x_ship_to_zip' t-att-value="zip_code"/>
+ <input type='hidden' name='x_ship_to_country' t-att-value="country"/>
+ <input type='hidden' name='x_ship_to_phone' t-att-value='phone'/>
+ <input type='hidden' name='x_ship_to_email' t-att-value="email"/>
+ <input type='hidden' name='x_ship_to_state' t-att-value="state"/>
<!-- Submit-->
<button type="submit" width="100px" t-att-class="submit_class">
<img t-if="not submit_txt" src="/payment_authorize/static/src/img/authorize_icon.png"/>
diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py
index 3f2431a013a..acdffa7dba5 100644
--- a/addons/website_sale/controllers/main.py
+++ b/addons/website_sale/controllers/main.py
@@ -779,7 +779,8 @@ class website_sale(http.Controller):
order.pricelist_id.currency_id.id,
values={
'return_url': '/shop/payment/validate',
- 'partner_id': shipping_partner_id
+ 'partner_id': shipping_partner_id,
+ 'billing_partner_id': order.partner_invoice_id.id,
},
context=render_ctx)