diff options
| author | Nicolas Martinelli <nim@odoo.com> | 2016-01-20 12:04:19 +0100 |
|---|---|---|
| committer | Nicolas Martinelli <nim@odoo.com> | 2016-01-20 15:48:31 +0100 |
| commit | 2d4257da1a747681223cdaa32f7837e820409736 (patch) | |
| tree | 4df54c490ffbba9772953af49341b3ffa409de56 /addons | |
| parent | 917f4e73c1a35bb4ba5ab4a38e4cdca8a87c3cce (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.py | 26 | ||||
| -rw-r--r-- | addons/payment/tests/common.py | 10 | ||||
| -rw-r--r-- | addons/payment_authorize/models/authorize.py | 9 | ||||
| -rw-r--r-- | addons/payment_authorize/tests/test_authorize.py | 21 | ||||
| -rw-r--r-- | addons/payment_authorize/views/authorize.xml | 28 | ||||
| -rw-r--r-- | addons/website_sale/controllers/main.py | 3 |
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) |
