diff --git a/app/Http/ViewComposers/PortalComposer.php b/app/Http/ViewComposers/PortalComposer.php index a9d8a64e40c7..f2b903f95928 100644 --- a/app/Http/ViewComposers/PortalComposer.php +++ b/app/Http/ViewComposers/PortalComposer.php @@ -49,6 +49,7 @@ class PortalComposer $data['company'] = auth()->user()->company; $data['client'] = auth()->user()->client; $data['settings'] = auth()->user()->client->getMergedSettings(); + $data['currencies'] = TranslationHelper::getCurrencies(); $data['multiple_contacts'] = ClientContact::where('email', auth('contact')->user()->email)->whereNotNull('email')->distinct('company_id')->get(); diff --git a/app/PaymentDrivers/Stripe/CreditCard.php b/app/PaymentDrivers/Stripe/CreditCard.php index 249287cd0cb8..5f1fa81c90e7 100644 --- a/app/PaymentDrivers/Stripe/CreditCard.php +++ b/app/PaymentDrivers/Stripe/CreditCard.php @@ -201,7 +201,7 @@ class CreditCard $message = [ 'server_response' => $server_response, - 'data' => $data // - undefined @todo + 'data' => [], ]; SystemLogger::dispatch($message, SystemLog::CATEGORY_GATEWAY_RESPONSE, SystemLog::EVENT_GATEWAY_FAILURE, SystemLog::TYPE_STRIPE, $this->stripe->client); diff --git a/app/PaymentDrivers/StripePaymentDriver.php b/app/PaymentDrivers/StripePaymentDriver.php index 50f483b8e4ae..e71080fd7c21 100644 --- a/app/PaymentDrivers/StripePaymentDriver.php +++ b/app/PaymentDrivers/StripePaymentDriver.php @@ -330,5 +330,15 @@ class StripePaymentDriver extends BasePaymentDriver return false; } + public function verificationView(ClientGatewayToken $payment_method) + { + return $this->payment_method->verificationView($payment_method); + } + + public function processVerification(ClientGatewayToken $payment_method) + { + return $this->payment_method->processVerification($payment_method); + } + /************************************** Omnipay API methods **********************************************************/ } diff --git a/resources/js/clients/payment_methods/authorize-ach.js b/resources/js/clients/payment_methods/authorize-ach.js new file mode 100644 index 000000000000..036e77209764 --- /dev/null +++ b/resources/js/clients/payment_methods/authorize-ach.js @@ -0,0 +1,76 @@ +/** + * Invoice Ninja (https://invoiceninja.com) + * + * @link https://github.com/invoiceninja/invoiceninja source repository + * + * @copyright Copyright (c) 2020. Invoice Ninja LLC (https://invoiceninja.com) + * + * @license https://opensource.org/licenses/AAL + */ + +class AuthorizeACH { + constructor() { + this.errors = document.getElementById('errors'); + this.key = document.querySelector( + 'meta[name="stripe-publishable-key"]' + ).content; + } + + setupStripe = () => { + this.stripe = Stripe(this.key); + + 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) => { + 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) => { + e.preventDefault(); + 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 + .getElementById('token-form') + .addEventListener('submit', (e) => this.handleSubmit(e)); + } +} + +new AuthorizeACH().setupStripe().handle(); diff --git a/resources/lang/en/texts.php b/resources/lang/en/texts.php index 760d4022d916..1fa7d16c7486 100644 --- a/resources/lang/en/texts.php +++ b/resources/lang/en/texts.php @@ -3208,4 +3208,7 @@ return [ 'payment_failed_subject' => 'Payment failed for Client :client', 'payment_failed_body' => 'A payment made by client :client failed with message :message', + + 'verification' => 'Verification', + 'complete_your_bank_account_verification' => 'Before using bank account they must be verified.', ]; diff --git a/resources/views/portal/ninja2020/gateways/stripe/ach/authorize.blade.php b/resources/views/portal/ninja2020/gateways/stripe/ach/authorize.blade.php new file mode 100644 index 000000000000..f67d0a514a2c --- /dev/null +++ b/resources/views/portal/ninja2020/gateways/stripe/ach/authorize.blade.php @@ -0,0 +1,123 @@ +@extends('portal.ninja2020.layout.app') +@section('meta_title', ctrans('texts.ach')) + +@push('head') + +@endpush + +@section('body') +
+{{ session('ach_error') }}
++ {{ ctrans('texts.authorize_for_future_use') }}. {{ ctrans('texts.ach_verification_delay_help') }} +
++ {{ ctrans('texts.complete_your_payment') }} +
++ {{ ctrans('texts.complete_your_bank_account_verification') }} ({{ ctrans('texts.ach') }}/{{ $token->meta->last4 }}) +
+ {{ __('texts.learn_more') }} +