[FIX] payment_stripe: Make stripe.js code more generic

- Stripe.js was limited to only a few pages, which means, if you tried to
implement a new payment route it would never work without modifying
stripe.js to support the new case.

  This commit allows stripe.js to be generic and work with any page.
This commit is contained in:
Toufik Benjaa
2018-06-14 18:06:38 +02:00
parent 51d0a52c9b
commit a3c9c286cc
+19 -63
View File
@@ -87,74 +87,30 @@ odoo.define('payment_stripe.stripe', function(require) {
payment_form.append('<i class="fa fa-spinner fa-spin"/>');
payment_form.attr('disabled','disabled');
var acquirer_id = payment_form.find('input[type="radio"][data-provider="stripe"]:checked').data('acquirer-id');
if (! acquirer_id) {
return false;
}
var payment_tx_url = payment_form.find('input[name="prepare_tx_url"]').val();
var access_token = $("input[name='access_token']").val() || $("input[name='token']").val() || '';
var so_id = $("input[name='return_url']").val().match(/quote\/([0-9]+)/) || undefined;
if (so_id) {
so_id = parseInt(so_id[1]);
}
var invoice_id = $("input[name='return_url']").val().match(/invoices\/([0-9]+)/) || undefined;
if (invoice_id) {
invoice_id = parseInt(invoice_id[1]);
var get_input_value = function(name) {
return provider_form.find('input[name="' + name + '"]').val();
}
var currency = $("input[name='currency']").val();
var currency_id = $("input[name='currency_id']").val();
var amount = parseFloat($("input[name='amount']").val() || '0.0');
var acquirer_id = parseInt(provider_form.find('#acquirer_stripe').val());
var amount = parseFloat(get_input_value("amount") || '0.0');
var currency = get_input_value("currency");
var email = get_input_value("email");
var invoice_num = get_input_value("invoice_num");
var merchant = get_input_value("merchant");
if ($('.o_website_payment').length !== 0) {
var invoice_num = $("input[name='invoice_num']").val();
var url = _.str.sprintf("/website_payment/transaction/v2/%f/%s/%s",
amount, currency_id, invoice_num);
var create_tx = ajax.jsonRpc(url, 'call', {
acquirer_id: acquirer_id
}).then(function (data) {
try { provider_form[0].innerHTML = data; } catch (e) {}
});
}
else if ($('.o_website_quote').length !== 0) {
var url = _.str.sprintf("/quote/%s/transaction/", so_id);
var create_tx = ajax.jsonRpc(url, 'call', {
access_token: access_token,
acquirer_id: acquirer_id
}).then(function (data) {
try { provider_form[0].innerHTML = data; } catch (e) {};
});
} else if (window.location.href.includes("/my/orders/")) {
var create_tx = ajax.jsonRpc('/pay/sale/' + so_id + '/form_tx/', 'call', {
access_token: access_token,
acquirer_id: acquirer_id
}).then(function (data) {
try { provider_form.innerHTML = data; } catch (e) {};
});
} else if (window.location.href.includes("/my/invoices/")) {
var create_tx = ajax.jsonRpc('/invoice/pay/' + invoice_id + '/form_tx/', 'call', {
access_token: access_token,
acquirer_id: acquirer_id
}).then(function (data) {
try { provider_form.innerHTML = data; } catch (e) {};
});
}
else {
var create_tx = ajax.jsonRpc('/shop/payment/transaction/' + acquirer_id, 'call', {
so_id: so_id,
access_token: access_token,
acquirer_id: acquirer_id
}).then(function (data) {
try { provider_form.innerHTML = data; } catch (e) {};
});
}
create_tx.done(function () {
ajax.jsonRpc(payment_tx_url, 'call', {
acquirer_id: acquirer_id,
access_token: access_token,
}).then(function(data) {
try { provider_form[0].innerHTML = data; } catch (e) {};
}).done(function () {
getStripeHandler().open({
name: $("input[name='merchant']").val(),
description: $("input[name='invoice_num']").val(),
email: $("input[name='email']").val(),
name: merchant,
description: invoice_num,
email: email,
currency: currency,
amount: _.contains(int_currencies, currency) ? amount : amount * 100,
});