From d9c9d0c96b2aaf66da476adae8f8e935bd7dfebf Mon Sep 17 00:00:00 2001 From: Damien Bouvy Date: Thu, 1 Sep 2016 10:51:10 +0200 Subject: [PATCH] [IMP] website_sale: allow saving card data from checkout Instead of having to register a card then do a payment, a little checkbox during the checkout process is usually simpler. --- addons/website_sale/controllers/main.py | 7 +++---- .../static/src/js/website_sale_payment.js | 6 +++--- addons/website_sale/views/templates.xml | 11 +++++++---- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py index 6db1998fcde..85f870469e6 100644 --- a/addons/website_sale/controllers/main.py +++ b/addons/website_sale/controllers/main.py @@ -769,7 +769,7 @@ class WebsiteSale(http.Controller): return request.redirect("/shop/payment?error=no_token_or_missmatch_tx") @http.route(['/shop/payment/transaction/'], type='json', auth="public", website=True) - def payment_transaction(self, acquirer_id, token=None): + def payment_transaction(self, acquirer_id, tx_type='form', token=None): """ Json method that creates a payment.transaction, used to create a transaction when the user clicks on 'pay now' button. After having created the transaction, the event continues and the user is redirected @@ -780,7 +780,6 @@ class WebsiteSale(http.Controller): """ Transaction = request.env['payment.transaction'].sudo() order = request.website.sale_get_order() - if not order or not order.order_line or acquirer_id is None: return request.redirect("/shop/checkout") @@ -795,11 +794,11 @@ class WebsiteSale(http.Controller): # new or distinct token tx = False elif tx.state == 'draft': # button cliked but no more info -> rewrite on tx or create a new one ? - tx.write(dict(Transaction.on_change_partner_id(order.partner_id.id).get('value', {}), amount=order.amount_total)) + tx.write(dict(Transaction.on_change_partner_id(order.partner_id.id).get('value', {}), amount=order.amount_total, type=tx_type)) if not tx: tx_values = { 'acquirer_id': acquirer_id, - 'type': 'form', + 'type': tx_type, 'amount': order.amount_total, 'currency_id': order.pricelist_id.currency_id.id, 'partner_id': order.partner_id.id, diff --git a/addons/website_sale/static/src/js/website_sale_payment.js b/addons/website_sale/static/src/js/website_sale_payment.js index d04dfc77774..32d9a8dbca9 100644 --- a/addons/website_sale/static/src/js/website_sale_payment.js +++ b/addons/website_sale/static/src/js/website_sale_payment.js @@ -24,13 +24,13 @@ $(document).ready(function () { $("div.js_payment a.list-group-item").removeClass("list-group-item-info"); $('span.js_radio').switchClass(ico_on, ico_off, 0); if (token) { - $("div.oe_sale_acquirer_button div.pre_msg").hide(); + $("div.oe_sale_acquirer_button div.token_hide").hide(); $(ev.currentTarget).find('span.js_radio').switchClass(ico_off, ico_on, 0); $(ev.currentTarget).parents('li').find('input').prop("checked", true); $(ev.currentTarget).addClass("list-group-item-info"); } else{ - $("div.oe_sale_acquirer_button div.pre_msg").show(); + $("div.oe_sale_acquirer_button div.token_hide").show(); } $("div.oe_sale_acquirer_button[data-id]", $payment).addClass("hidden"); $("div.oe_sale_acquirer_button[data-id='"+payment_id+"']", $payment).removeClass("hidden"); @@ -46,7 +46,7 @@ $(document).ready(function () { var acquirer = $(ev.currentTarget).parents('div.oe_sale_acquirer_button').first(); var acquirer_id = acquirer.data('id'); var acquirer_token = acquirer.attr('data-token'); // !=data - var params = {}; + var params = {'tx_type': acquirer.find('input[name="odoo_save_token"]').is(':checked')?'form_save':'form'}; if (! acquirer_id) { return false; } diff --git a/addons/website_sale/views/templates.xml b/addons/website_sale/views/templates.xml index f3782fdb109..6ae09998f82 100644 --- a/addons/website_sale/views/templates.xml +++ b/addons/website_sale/views/templates.xml @@ -1350,9 +1350,6 @@ (processing fees apply) - - New card - @@ -1361,7 +1358,13 @@