From e7331c9e2187c4b5e55eeb6c75b9e1af8d0c80a1 Mon Sep 17 00:00:00 2001 From: Kishan Patel Date: Mon, 20 Jun 2022 09:41:03 +0530 Subject: [PATCH] some modification implemented for removing double submission. --- .../js/clients/payments/forte-ach-payment.js | 81 ++++++++++++++++++ .../payments/forte-credit-card-payment.js | 83 +++++++++++++++++++ .../gateways/forte/ach/pay.blade.php | 53 +++--------- .../gateways/forte/credit_card/pay.blade.php | 57 ++----------- webpack.mix.js | 8 ++ 5 files changed, 191 insertions(+), 91 deletions(-) create mode 100644 resources/js/clients/payments/forte-ach-payment.js create mode 100644 resources/js/clients/payments/forte-credit-card-payment.js diff --git a/resources/js/clients/payments/forte-ach-payment.js b/resources/js/clients/payments/forte-ach-payment.js new file mode 100644 index 000000000000..90bf9f675377 --- /dev/null +++ b/resources/js/clients/payments/forte-ach-payment.js @@ -0,0 +1,81 @@ +/** + * Invoice Ninja (https://invoiceninja.com) + * + * @link https://github.com/invoiceninja/invoiceninja source repository + * + * @copyright Copyright (c) 2021. Invoice Ninja LLC (https://invoiceninja.com) + * + * @license https://opensource.org/licenses/AAL + */ + +class ForteAuthorizeACH { + constructor(apiLoginId) { + this.apiLoginId = apiLoginId; + } + + handleAuthorization = () => { + var account_number = document.getElementById('account-number').value; + var routing_number = document.getElementById('routing-number').value; + + var data = { + api_login_id: this.apiLoginId, + account_number: account_number, + routing_number: routing_number, + account_type: 'checking', + }; + + let payNowButton = document.getElementById('pay-now'); + + if (payNowButton) { + document.getElementById('pay-now').disabled = true; + document.querySelector('#pay-now > svg').classList.remove('hidden'); + document.querySelector('#pay-now > span').classList.add('hidden'); + } + // console.log(data); + forte + .createToken(data) + .success(this.successResponseHandler) + .error(this.failedResponseHandler); + return false; + }; + + successResponseHandler = (response) => { + document.getElementById('payment_token').value = response.onetime_token; + + document.getElementById('server_response').submit(); + + return false; + }; + + failedResponseHandler = (response) => { + var errors = + '
'; + document.getElementById('forte_errors').innerHTML = errors; + document.getElementById('pay-now').disabled = false; + document.querySelector('#pay-now > svg').classList.add('hidden'); + document.querySelector('#pay-now > span').classList.remove('hidden'); + + return false; + }; + + handle = () => { + let payNowButton = document.getElementById('pay-now'); + + if (payNowButton) { + payNowButton.addEventListener('click', (e) => { + this.handleAuthorization(); + }); + } + + return this; + }; +} + +const apiLoginId = document.querySelector( + 'meta[name="forte-api-login-id"]' +).content; + +/** @handle */ +new ForteAuthorizeACH(apiLoginId).handle(); diff --git a/resources/js/clients/payments/forte-credit-card-payment.js b/resources/js/clients/payments/forte-credit-card-payment.js new file mode 100644 index 000000000000..0139356a4daa --- /dev/null +++ b/resources/js/clients/payments/forte-credit-card-payment.js @@ -0,0 +1,83 @@ +/** + * Invoice Ninja (https://invoiceninja.com) + * + * @link https://github.com/invoiceninja/invoiceninja source repository + * + * @copyright Copyright (c) 2021. Invoice Ninja LLC (https://invoiceninja.com) + * + * @license https://opensource.org/licenses/AAL + */ + +class ForteAuthorizeCard { + constructor(apiLoginId) { + this.apiLoginId = apiLoginId; + this.cardHolderName = document.getElementById('cardholder_name'); + } + + handleAuthorization = () => { + var myCard = $('#my-card'); + + var data = { + api_login_id: this.apiLoginId, + card_number: myCard.CardJs('cardNumber').replace(/[^\d]/g, ''), + expire_year: myCard.CardJs('expiryYear').replace(/[^\d]/g, ''), + expire_month: myCard.CardJs('expiryMonth').replace(/[^\d]/g, ''), + cvv: document.getElementById('cvv').value.replace(/[^\d]/g, ''), + }; + + let payNowButton = document.getElementById('pay-now'); + + if (payNowButton) { + document.getElementById('pay-now').disabled = true; + document.querySelector('#pay-now > svg').classList.remove('hidden'); + document.querySelector('#pay-now > span').classList.add('hidden'); + } + + forte + .createToken(data) + .success(this.successResponseHandler) + .error(this.failedResponseHandler); + return false; + }; + + successResponseHandler = (response) => { + document.getElementById('payment_token').value = response.onetime_token; + document.getElementById('card_brand').value = response.card_type; + + document.getElementById('server_response').submit(); + + return false; + }; + + failedResponseHandler = (response) => { + var errors = + '
'; + document.getElementById('forte_errors').innerHTML = errors; + document.getElementById('pay-now').disabled = false; + document.querySelector('#pay-now > svg').classList.add('hidden'); + document.querySelector('#pay-now > span').classList.remove('hidden'); + + return false; + }; + + handle = () => { + let payNowButton = document.getElementById('pay-now'); + + if (payNowButton) { + payNowButton.addEventListener('click', (e) => { + this.handleAuthorization(); + }); + } + + return this; + }; +} + +const apiLoginId = document.querySelector( + 'meta[name="forte-api-login-id"]' +).content; + +/** @handle */ +new ForteAuthorizeCard(apiLoginId).handle(); diff --git a/resources/views/portal/ninja2020/gateways/forte/ach/pay.blade.php b/resources/views/portal/ninja2020/gateways/forte/ach/pay.blade.php index 524bdb7e41ff..5dbb93fbd246 100644 --- a/resources/views/portal/ninja2020/gateways/forte/ach/pay.blade.php +++ b/resources/views/portal/ninja2020/gateways/forte/ach/pay.blade.php @@ -1,11 +1,7 @@ @extends('portal.ninja2020.layout.payments', ['gateway_title' => 'Bank Transfer', 'card_title' => 'Bank Transfer']) @section('gateway_head') - @if($gateway->forte->company_gateway->getConfigField('testMode')) - - @else - - @endif + @endsection @section('gateway_content') @@ -41,46 +37,17 @@ @endcomponent -
- -
+ + @include('portal.ninja2020.gateways.includes.pay_now') @endsection @section('gateway_footer') - + @if($gateway->forte->company_gateway->getConfigField('testMode')) + + @else + + @endif + + @endsection diff --git a/resources/views/portal/ninja2020/gateways/forte/credit_card/pay.blade.php b/resources/views/portal/ninja2020/gateways/forte/credit_card/pay.blade.php index ac47cda057cf..1cceb137f39c 100644 --- a/resources/views/portal/ninja2020/gateways/forte/credit_card/pay.blade.php +++ b/resources/views/portal/ninja2020/gateways/forte/credit_card/pay.blade.php @@ -1,16 +1,11 @@ @extends('portal.ninja2020.layout.payments', ['gateway_title' => ctrans('texts.payment_type_credit_card'), 'card_title' => ctrans('texts.payment_type_credit_card')]) @section('gateway_head') + - - @if($gateway->forte->company_gateway->getConfigField('testMode')) - - @else - - @endif @endsection @section('gateway_content') @@ -41,50 +36,16 @@ @include('portal.ninja2020.gateways.forte.includes.credit_card') @endcomponent -
- -
+ @include('portal.ninja2020.gateways.includes.pay_now') @endsection @section('gateway_footer') - + @if($gateway->forte->company_gateway->getConfigField('testMode')) + + @else + + @endif + + @endsection diff --git a/webpack.mix.js b/webpack.mix.js index 9f0c809188b5..0ad6a2425d05 100644 --- a/webpack.mix.js +++ b/webpack.mix.js @@ -10,6 +10,14 @@ mix.js("resources/js/app.js", "public/js") "resources/js/clients/payments/authorize-credit-card-payment.js", "public/js/clients/payments/authorize-credit-card-payment.js" ) + .js( + "resources/js/clients/payments/forte-credit-card-payment.js", + "public/js/clients/payments/forte-credit-card-payment.js" + ) + .js( + "resources/js/clients/payments/forte-ach-payment.js", + "public/js/clients/payments/forte-ach-payment.js" + ) .js( "resources/js/clients/payments/stripe-ach.js", "public/js/clients/payments/stripe-ach.js"