From 83d1bb8df29451dcb41ac2b22ec022e41d35262d Mon Sep 17 00:00:00 2001 From: Nicolas Martinelli Date: Thu, 3 Nov 2016 12:03:22 +0100 Subject: [PATCH] [FIX] payment_stripe, website_quote, website_sale: update SO ! This is a backport from 10.0 (9010ed0a) ! opw-693017 Original commit message: A side effect of commit b9d1239effb if that the method `sale_get_order`, which is used to retrieve the SO, will also update information on this SO (change partner, change pricelist...). We therefore need another way to retrieve the SO. opw-692919 --- addons/payment_stripe/static/src/js/stripe.js | 8 +++++++- addons/website_sale/controllers/main.py | 12 +++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/addons/payment_stripe/static/src/js/stripe.js b/addons/payment_stripe/static/src/js/stripe.js index 314fc764add..a6cc6ad5637 100644 --- a/addons/payment_stripe/static/src/js/stripe.js +++ b/addons/payment_stripe/static/src/js/stripe.js @@ -46,8 +46,14 @@ odoo.define('payment_stripe.stripe', function(require) { return false; } + var so_token = $("input[name='token']").val(); + var so_id = $("input[name='return_url']").val().match(/quote\/([0-9]+)/); + if (so_id) { + so_id = parseInt(so_id[1]); + } + e.preventDefault(); - ajax.jsonRpc('/shop/payment/transaction/' + acquirer_id, 'call', {}).then(function (data) { + ajax.jsonRpc('/shop/payment/transaction/' + acquirer_id, 'call', {'so_id': so_id, 'so_token': so_token}).then(function (data) { $form.html(data); handler.open({ name: $("input[name='merchant']").val(), diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py index d44b603e6ed..93e5e15dd67 100644 --- a/addons/website_sale/controllers/main.py +++ b/addons/website_sale/controllers/main.py @@ -737,7 +737,7 @@ class WebsiteSale(http.Controller): return request.website.render("website_sale.payment", values) @http.route(['/shop/payment/transaction/'], type='json', auth="public", website=True) - def payment_transaction(self, acquirer_id): + def payment_transaction(self, acquirer_id, **kwargs): """ 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 @@ -749,6 +749,16 @@ class WebsiteSale(http.Controller): Transaction = request.env['payment.transaction'].sudo() order = request.website.sale_get_order() + # In case the route is called directly from the JS (as done in Stripe payment method) + so_id = kwargs.get('so_id') + so_token = kwargs.get('so_token') + if so_id and so_token: + order = request.env['sale.order'].sudo().search([('id', '=', so_id), ('access_token', '=', so_token)]) + elif so_id: + order = request.env['sale.order'].search([('id', '=', so_id)]) + else: + order = request.website.sale_get_order() + if not order or not order.order_line or acquirer_id is None: return request.redirect("/shop/checkout")