1
0
mirror of https://github.com/invoiceninja/invoiceninja.git synced 2024-11-14 07:02:34 +01:00
invoiceninja/resources/js/clients/payments/stripe-ach.js

108 lines
3.2 KiB
JavaScript
Raw Normal View History

/**
* Invoice Ninja (https://invoiceninja.com)
*
* @link https://github.com/invoiceninja/invoiceninja source repository
*
* @copyright Copyright (c) 2021. Invoice Ninja LLC (https://invoiceninja.com)
*
2022-06-08 06:25:44 +02:00
* @license https://www.elastic.co/licensing/elastic-license
*/
class AuthorizeACH {
constructor() {
this.errors = document.getElementById('errors');
this.key = document.querySelector(
'meta[name="stripe-publishable-key"]'
).content;
2021-04-20 14:17:44 +02:00
this.stripe_connect = document.querySelector(
'meta[name="stripe-account-id"]'
2021-05-21 13:11:01 +02:00
)?.content;
}
setupStripe = () => {
2022-01-22 05:22:59 +01:00
if (this.stripeConnect){
// this.stripe.stripeAccount = this.stripeConnect;
this.stripe = Stripe(this.key, {
stripeAccount: this.stripeConnect,
});
}
else {
this.stripe = Stripe(this.key);
}
2021-04-20 14:17:44 +02:00
return this;
};
getFormData = () => {
return {
country: document.getElementById('country').value,
currency: document.getElementById('currency').value,
routing_number: document.getElementById('routing-number').value,
account_number: document.getElementById('account-number').value,
account_holder_name: document.getElementById('account-holder-name')
.value,
account_holder_type: document.querySelector(
'input[name="account-holder-type"]:checked'
).value,
};
};
handleError = (message) => {
2020-08-24 10:28:55 +02:00
document.getElementById('save-button').disabled = false;
2020-09-29 12:36:21 +02:00
document.querySelector('#save-button > svg').classList.add('hidden');
document.querySelector('#save-button > span').classList.remove('hidden');
2020-08-24 10:28:55 +02:00
this.errors.textContent = '';
this.errors.textContent = message;
this.errors.hidden = false;
};
handleSuccess = (response) => {
document.getElementById('gateway_response').value = JSON.stringify(
response
);
document.getElementById('server_response').submit();
};
handleSubmit = (e) => {
2022-05-19 07:48:31 +02:00
if (!document.getElementById('accept-terms').checked) {
errors.textContent = "You must accept the mandate terms prior to making payment.";
errors.hidden = false;
return;
}
2020-08-24 10:28:55 +02:00
document.getElementById('save-button').disabled = true;
2020-09-29 12:36:21 +02:00
document.querySelector('#save-button > svg').classList.remove('hidden');
document.querySelector('#save-button > span').classList.add('hidden');
e.preventDefault();
2020-09-29 12:36:21 +02:00
this.errors.textContent = '';
this.errors.hidden = true;
this.stripe
.createToken('bank_account', this.getFormData())
.then((result) => {
if (result.hasOwnProperty('error')) {
return this.handleError(result.error.message);
}
return this.handleSuccess(result);
});
};
handle() {
document
2020-10-20 17:54:08 +02:00
.getElementById('save-button')
.addEventListener('click', (e) => this.handleSubmit(e));
}
}
new AuthorizeACH().setupStripe().handle();