mirror of
				https://github.com/invoiceninja/invoiceninja.git
				synced 2025-11-04 02:07:33 -05:00 
			
		
		
		
	Centralize "Pay now" button
This commit is contained in:
		
							parent
							
								
									40bf73cd9a
								
							
						
					
					
						commit
						7990ca22ec
					
				
							
								
								
									
										34
									
								
								app/Http/Livewire/PayNowDropdown.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								app/Http/Livewire/PayNowDropdown.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 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
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace App\Http\Livewire;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use Livewire\Component;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class PayNowDropdown extends Component
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public $total;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public $methods;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function mount(int $total)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $this->total = $total;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $this->methods = auth()->user()->client->service()->getPaymentMethods($total);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function render()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return render('components.livewire.pay-now-dropdown');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										2
									
								
								public/css/app.css
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								public/css/app.css
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@ -1,6 +1,6 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    "/js/app.js": "/js/app.js?id=696e8203d5e8e7cf5ff5",
 | 
					    "/js/app.js": "/js/app.js?id=696e8203d5e8e7cf5ff5",
 | 
				
			||||||
    "/css/app.css": "/css/app.css?id=1ea5400f7ae7b45f050c",
 | 
					    "/css/app.css": "/css/app.css?id=58736e43b16ddde82ba9",
 | 
				
			||||||
    "/js/clients/invoices/action-selectors.js": "/js/clients/invoices/action-selectors.js?id=a09bb529b8e1826f13b4",
 | 
					    "/js/clients/invoices/action-selectors.js": "/js/clients/invoices/action-selectors.js?id=a09bb529b8e1826f13b4",
 | 
				
			||||||
    "/js/clients/invoices/payment.js": "/js/clients/invoices/payment.js?id=8ce8955ba775ea5f47d1",
 | 
					    "/js/clients/invoices/payment.js": "/js/clients/invoices/payment.js?id=8ce8955ba775ea5f47d1",
 | 
				
			||||||
    "/js/clients/payment_methods/authorize-authorize-card.js": "/js/clients/payment_methods/authorize-authorize-card.js?id=206d7de4ac97612980ff",
 | 
					    "/js/clients/payment_methods/authorize-authorize-card.js": "/js/clients/payment_methods/authorize-authorize-card.js?id=206d7de4ac97612980ff",
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,45 @@
 | 
				
			|||||||
 | 
					<div>
 | 
				
			||||||
 | 
					    @unless(count($methods) == 0)
 | 
				
			||||||
 | 
					        <div x-data="{ open: false }" @keydown.window.escape="open = false" @click.away="open = false"
 | 
				
			||||||
 | 
					             class="relative inline-block text-left" data-cy="payment-methods-dropdown">
 | 
				
			||||||
 | 
					            <div>
 | 
				
			||||||
 | 
					                <div class="rounded-md shadow-sm">
 | 
				
			||||||
 | 
					                    <button data-cy="pay-now-dropdown" @click="open = !open" type="button"
 | 
				
			||||||
 | 
					                            class="inline-flex justify-center w-full px-4 py-2 text-sm font-medium leading-5 text-gray-700 transition duration-150 ease-in-out bg-white border border-gray-300 rounded-md hover:text-gray-500 focus:outline-none focus:border-blue-300 focus:shadow-outline-blue active:bg-gray-50 active:text-gray-800">
 | 
				
			||||||
 | 
					                        {{ ctrans('texts.pay_now') }}
 | 
				
			||||||
 | 
					                        <svg class="w-5 h-5 ml-2 -mr-1" fill="currentColor" viewBox="0 0 20 20">
 | 
				
			||||||
 | 
					                            <path fill-rule="evenodd"
 | 
				
			||||||
 | 
					                                  d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z"
 | 
				
			||||||
 | 
					                                  clip-rule="evenodd"/>
 | 
				
			||||||
 | 
					                        </svg>
 | 
				
			||||||
 | 
					                    </button>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <div x-show="open" class="absolute right-0 w-56 mt-2 origin-top-right rounded-md shadow-lg">
 | 
				
			||||||
 | 
					                <div class="bg-white rounded-md shadow-xs">
 | 
				
			||||||
 | 
					                    <div class="py-1">
 | 
				
			||||||
 | 
					                        @foreach($methods as $index => $method)
 | 
				
			||||||
 | 
					                            @if($method['label'] == 'Custom')
 | 
				
			||||||
 | 
					                                <a href="#" @click="{ open = false }" data-cy="pay-with-custom"
 | 
				
			||||||
 | 
					                                   data-company-gateway-id="{{ $method['company_gateway_id'] }}"
 | 
				
			||||||
 | 
					                                   data-gateway-type-id="{{ $method['gateway_type_id'] }}"
 | 
				
			||||||
 | 
					                                   class="block px-4 py-2 text-sm leading-5 text-gray-700 dropdown-gateway-button hover:bg-gray-100 hover:text-gray-900 focus:outline-none focus:bg-gray-100 focus:text-gray-900"
 | 
				
			||||||
 | 
					                                   data-cy="payment-method">
 | 
				
			||||||
 | 
					                                    {{ \App\Models\CompanyGateway::find($method['company_gateway_id'])->firstOrFail()->getConfigField('name') }}
 | 
				
			||||||
 | 
					                                </a>
 | 
				
			||||||
 | 
					                            @elseif($total > 0)
 | 
				
			||||||
 | 
					                                <a href="#" @click="{ open = false }" data-cy="pay-with-{{ $index }}"
 | 
				
			||||||
 | 
					                                   data-company-gateway-id="{{ $method['company_gateway_id'] }}"
 | 
				
			||||||
 | 
					                                   data-gateway-type-id="{{ $method['gateway_type_id'] }}"
 | 
				
			||||||
 | 
					                                   class="block px-4 py-2 text-sm leading-5 text-gray-700 dropdown-gateway-button hover:bg-gray-100 hover:text-gray-900 focus:outline-none focus:bg-gray-100 focus:text-gray-900"
 | 
				
			||||||
 | 
					                                   data-cy="payment-method">
 | 
				
			||||||
 | 
					                                    {{ $method['label'] }}
 | 
				
			||||||
 | 
					                                </a>
 | 
				
			||||||
 | 
					                            @endif
 | 
				
			||||||
 | 
					                        @endforeach
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					    @endunless
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
@ -19,38 +19,7 @@
 | 
				
			|||||||
            <div class="col-span-6 md:col-start-2 md:col-span-4">
 | 
					            <div class="col-span-6 md:col-start-2 md:col-span-4">
 | 
				
			||||||
                <div class="flex justify-end">
 | 
					                <div class="flex justify-end">
 | 
				
			||||||
                    <div class="flex justify-end mb-2">
 | 
					                    <div class="flex justify-end mb-2">
 | 
				
			||||||
                        <!-- Pay now button -->
 | 
					                        @livewire('pay-now-dropdown', ['total' => $total])
 | 
				
			||||||
                        @if(count($payment_methods) > 0)
 | 
					 | 
				
			||||||
                        <div x-data="{ open: false }" @keydown.window.escape="open = false" @click.away="open = false" class="relative inline-block text-left" data-cy="payment-methods-dropdown">
 | 
					 | 
				
			||||||
                            <div>
 | 
					 | 
				
			||||||
                                <div class="rounded-md shadow-sm">
 | 
					 | 
				
			||||||
                                    <button data-cy="pay-now-dropdown" @click="open = !open" type="button" class="inline-flex justify-center w-full px-4 py-2 text-sm font-medium leading-5 text-gray-700 transition duration-150 ease-in-out bg-white border border-gray-300 rounded-md hover:text-gray-500 focus:outline-none focus:border-blue-300 focus:shadow-outline-blue active:bg-gray-50 active:text-gray-800">
 | 
					 | 
				
			||||||
                                        {{ ctrans('texts.pay_now') }}
 | 
					 | 
				
			||||||
                                        <svg class="w-5 h-5 ml-2 -mr-1" fill="currentColor" viewBox="0 0 20 20">
 | 
					 | 
				
			||||||
                                            <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd" />
 | 
					 | 
				
			||||||
                                        </svg>
 | 
					 | 
				
			||||||
                                    </button>
 | 
					 | 
				
			||||||
                                </div>
 | 
					 | 
				
			||||||
                            </div>
 | 
					 | 
				
			||||||
                            <div x-show="open" class="absolute right-0 w-56 mt-2 origin-top-right rounded-md shadow-lg">
 | 
					 | 
				
			||||||
                                <div class="bg-white rounded-md shadow-xs">
 | 
					 | 
				
			||||||
                                    <div class="py-1">
 | 
					 | 
				
			||||||
                                        @foreach($payment_methods as $index => $payment_method)
 | 
					 | 
				
			||||||
                                            @if($payment_method['label'] == 'Custom')
 | 
					 | 
				
			||||||
                                                <a href="#" @click="{ open = false }" data-cy="pay-with-custom" data-company-gateway-id="{{ $payment_method['company_gateway_id'] }}" data-gateway-type-id="{{ $payment_method['gateway_type_id'] }}" class="block px-4 py-2 text-sm leading-5 text-gray-700 dropdown-gateway-button hover:bg-gray-100 hover:text-gray-900 focus:outline-none focus:bg-gray-100 focus:text-gray-900" data-cy="payment-method">
 | 
					 | 
				
			||||||
                                                    {{ \App\Models\CompanyGateway::find($payment_method['company_gateway_id'])->firstOrFail()->getConfigField('name') }}
 | 
					 | 
				
			||||||
                                                </a>
 | 
					 | 
				
			||||||
                                            @elseif($total > 0)
 | 
					 | 
				
			||||||
                                                <a href="#" @click="{ open = false }" data-cy="pay-with-{{ $index }}" data-company-gateway-id="{{ $payment_method['company_gateway_id'] }}" data-gateway-type-id="{{ $payment_method['gateway_type_id'] }}" class="block px-4 py-2 text-sm leading-5 text-gray-700 dropdown-gateway-button hover:bg-gray-100 hover:text-gray-900 focus:outline-none focus:bg-gray-100 focus:text-gray-900" data-cy="payment-method">
 | 
					 | 
				
			||||||
                                                    {{ $payment_method['label'] }}
 | 
					 | 
				
			||||||
                                                </a>
 | 
					 | 
				
			||||||
                                            @endif
 | 
					 | 
				
			||||||
                                        @endforeach
 | 
					 | 
				
			||||||
                                    </div>
 | 
					 | 
				
			||||||
                                </div>
 | 
					 | 
				
			||||||
                            </div>
 | 
					 | 
				
			||||||
                        </div>
 | 
					 | 
				
			||||||
                        @endif
 | 
					 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -3,7 +3,10 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
@push('head')
 | 
					@push('head')
 | 
				
			||||||
    <meta name="pdf-url" content="{{ $invoice->pdf_file_path() }}">
 | 
					    <meta name="pdf-url" content="{{ $invoice->pdf_file_path() }}">
 | 
				
			||||||
 | 
					    <meta name="show-invoice-terms" content="{{ $settings->show_accept_invoice_terms ? true : false }}">
 | 
				
			||||||
 | 
					    <meta name="require-invoice-signature" content="{{ $settings->require_invoice_signature ? true : false }}">
 | 
				
			||||||
    <script src="{{ asset('js/vendor/pdf.js/pdf.min.js') }}"></script>
 | 
					    <script src="{{ asset('js/vendor/pdf.js/pdf.min.js') }}"></script>
 | 
				
			||||||
 | 
					    <script src="https://cdn.jsdelivr.net/npm/signature_pad@2.3.2/dist/signature_pad.min.js"></script>
 | 
				
			||||||
@endpush
 | 
					@endpush
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@section('body')
 | 
					@section('body')
 | 
				
			||||||
@ -15,19 +18,30 @@
 | 
				
			|||||||
    @endif
 | 
					    @endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @if($invoice->isPayable())
 | 
					    @if($invoice->isPayable())
 | 
				
			||||||
        <form action="{{ route('client.invoices.bulk') }}" method="post">
 | 
					        <form action="{{ ($settings->client_portal_allow_under_payment || $settings->client_portal_allow_over_payment) ? route('client.invoices.bulk') : route('client.payments.process') }}" method="post" id="payment-form">
 | 
				
			||||||
            @csrf
 | 
					            @csrf
 | 
				
			||||||
 | 
					            <input type="hidden" name="invoices[]" value="{{ $invoice->hashed_id }}">
 | 
				
			||||||
 | 
					            <input type="hidden" name="action" value="payment">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <input type="hidden" name="company_gateway_id" id="company_gateway_id">
 | 
				
			||||||
 | 
					            <input type="hidden" name="payment_method_id" id="payment_method_id">
 | 
				
			||||||
 | 
					            <input type="hidden" name="signature">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <input type="hidden" name="payable_invoices[0][amount]" value="{{ $invoice->partial > 0 ?  \App\Utils\Number::formatValue($invoice->partial, $invoice->client->currency()) : \App\Utils\Number::formatValue($invoice->balance, $invoice->client->currency()) }}">
 | 
				
			||||||
 | 
					            <input type="hidden" name="payable_invoices[0][invoice_id]" value="{{ $invoice->hashed_id }}">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            <div class="bg-white shadow sm:rounded-lg mb-4" translate>
 | 
					            <div class="bg-white shadow sm:rounded-lg mb-4" translate>
 | 
				
			||||||
                <div class="px-4 py-5 sm:p-6">
 | 
					                <div class="px-4 py-5 sm:p-6">
 | 
				
			||||||
                    <div class="sm:flex sm:items-start sm:justify-between">
 | 
					                    <div class="sm:flex sm:items-start sm:justify-between">
 | 
				
			||||||
                        <div>
 | 
					                        <div>
 | 
				
			||||||
                            <h3 class="text-lg leading-6 font-medium text-gray-900">
 | 
					                            <h3 class="text-lg leading-6 font-medium text-gray-900">
 | 
				
			||||||
                                {{ ctrans('texts.invoice_number_placeholder', ['invoice' => $invoice->number])}} - {{ ctrans('texts.unpaid') }}
 | 
					                                {{ ctrans('texts.invoice_number_placeholder', ['invoice' => $invoice->number])}}
 | 
				
			||||||
 | 
					                                - {{ ctrans('texts.unpaid') }}
 | 
				
			||||||
                            </h3>
 | 
					                            </h3>
 | 
				
			||||||
                            <div class="mt-2 max-w-xl text-sm leading-5 text-gray-500">
 | 
					                            <div class="mt-2 max-w-xl text-sm leading-5 text-gray-500">
 | 
				
			||||||
                                <p translate>
 | 
					                                <p translate>
 | 
				
			||||||
                                    {{ ctrans('texts.invoice_still_unpaid') }}
 | 
					                                {{ ctrans('texts.invoice_still_unpaid') }}
 | 
				
			||||||
                                    <!-- This invoice is still not paid. Click the button to complete the payment. -->
 | 
					                                <!-- This invoice is still not paid. Click the button to complete the payment. -->
 | 
				
			||||||
                                </p>
 | 
					                                </p>
 | 
				
			||||||
                            </div>
 | 
					                            </div>
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
@ -35,7 +49,12 @@
 | 
				
			|||||||
                            <div class="inline-flex rounded-md shadow-sm">
 | 
					                            <div class="inline-flex rounded-md shadow-sm">
 | 
				
			||||||
                                <input type="hidden" name="invoices[]" value="{{ $invoice->hashed_id }}">
 | 
					                                <input type="hidden" name="invoices[]" value="{{ $invoice->hashed_id }}">
 | 
				
			||||||
                                <input type="hidden" name="action" value="payment">
 | 
					                                <input type="hidden" name="action" value="payment">
 | 
				
			||||||
                                <button class="button button-primary bg-primary">{{ ctrans('texts.pay_now') }}</button>
 | 
					
 | 
				
			||||||
 | 
					                                @if($settings->client_portal_allow_under_payment || $settings->client_portal_allow_over_payment)
 | 
				
			||||||
 | 
					                                    <button class="button button-primary bg-primary">{{ ctrans('texts.pay_now') }}</button>
 | 
				
			||||||
 | 
					                                @else
 | 
				
			||||||
 | 
					                                    @livewire('pay-now-dropdown', ['total' => $invoice->partial > 0 ? $invoice->partial : $invoice->balance])
 | 
				
			||||||
 | 
					                                @endif
 | 
				
			||||||
                            </div>
 | 
					                            </div>
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
@ -43,18 +62,18 @@
 | 
				
			|||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
        </form>
 | 
					        </form>
 | 
				
			||||||
    @else
 | 
					    @else
 | 
				
			||||||
    <div class="bg-white shadow sm:rounded-lg mb-4">
 | 
					        <div class="bg-white shadow sm:rounded-lg mb-4">
 | 
				
			||||||
    <div class="px-4 py-5 sm:p-6">
 | 
					            <div class="px-4 py-5 sm:p-6">
 | 
				
			||||||
        <div class="sm:flex sm:items-start sm:justify-between">
 | 
					                <div class="sm:flex sm:items-start sm:justify-between">
 | 
				
			||||||
            <div>
 | 
					                    <div>
 | 
				
			||||||
                <h3 class="text-lg leading-6 font-medium text-gray-900">
 | 
					                        <h3 class="text-lg leading-6 font-medium text-gray-900">
 | 
				
			||||||
                    {{ ctrans('texts.invoice_number_placeholder', ['invoice' => $invoice->number])}}
 | 
					                            {{ ctrans('texts.invoice_number_placeholder', ['invoice' => $invoice->number])}}
 | 
				
			||||||
                    - {{ ctrans('texts.paid') }}
 | 
					                            - {{ ctrans('texts.paid') }}
 | 
				
			||||||
                </h3>
 | 
					                        </h3>
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
    @endif
 | 
					    @endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @if($invoice->documents->count() > 0)
 | 
					    @if($invoice->documents->count() > 0)
 | 
				
			||||||
@ -90,12 +109,14 @@
 | 
				
			|||||||
    <div class="flex items-center justify-between mt-4">
 | 
					    <div class="flex items-center justify-between mt-4">
 | 
				
			||||||
        <section class="flex items-center">
 | 
					        <section class="flex items-center">
 | 
				
			||||||
            <div class="items-center" style="display: none" id="pagination-button-container">
 | 
					            <div class="items-center" style="display: none" id="pagination-button-container">
 | 
				
			||||||
                <button class="input-label focus:outline-none hover:text-blue-600 transition ease-in-out duration-300" id="previous-page-button" title="Previous page">
 | 
					                <button class="input-label focus:outline-none hover:text-blue-600 transition ease-in-out duration-300"
 | 
				
			||||||
 | 
					                        id="previous-page-button" title="Previous page">
 | 
				
			||||||
                    <svg class="w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
 | 
					                    <svg class="w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
 | 
				
			||||||
                        <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 19l-7-7 7-7"/>
 | 
					                        <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 19l-7-7 7-7"/>
 | 
				
			||||||
                    </svg>
 | 
					                    </svg>
 | 
				
			||||||
                </button>
 | 
					                </button>
 | 
				
			||||||
                <button class="input-label focus:outline-none hover:text-blue-600 transition ease-in-out duration-300" id="next-page-button" title="Next page">
 | 
					                <button class="input-label focus:outline-none hover:text-blue-600 transition ease-in-out duration-300"
 | 
				
			||||||
 | 
					                        id="next-page-button" title="Next page">
 | 
				
			||||||
                    <svg class="w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
 | 
					                    <svg class="w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
 | 
				
			||||||
                        <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"/>
 | 
					                        <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"/>
 | 
				
			||||||
                    </svg>
 | 
					                    </svg>
 | 
				
			||||||
@ -111,25 +132,48 @@
 | 
				
			|||||||
            <div class="flex items-center mr-4 space-x-1 lg:hidden">
 | 
					            <div class="flex items-center mr-4 space-x-1 lg:hidden">
 | 
				
			||||||
                <span class="text-gray-600 mr-2" id="zoom-level">100%</span>
 | 
					                <span class="text-gray-600 mr-2" id="zoom-level">100%</span>
 | 
				
			||||||
                <a href="#" id="zoom-in">
 | 
					                <a href="#" id="zoom-in">
 | 
				
			||||||
                    <svg class="text-gray-400 hover:text-gray-600 focus:outline-none focus:text-gray-600 cursor-pointer" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line><line x1="11" y1="8" x2="11" y2="14"></line><line x1="8" y1="11" x2="14" y2="11"></line></svg>
 | 
					                    <svg class="text-gray-400 hover:text-gray-600 focus:outline-none focus:text-gray-600 cursor-pointer"
 | 
				
			||||||
 | 
					                         xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"
 | 
				
			||||||
 | 
					                         stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
 | 
				
			||||||
 | 
					                        <circle cx="11" cy="11" r="8"></circle>
 | 
				
			||||||
 | 
					                        <line x1="21" y1="21" x2="16.65" y2="16.65"></line>
 | 
				
			||||||
 | 
					                        <line x1="11" y1="8" x2="11" y2="14"></line>
 | 
				
			||||||
 | 
					                        <line x1="8" y1="11" x2="14" y2="11"></line>
 | 
				
			||||||
 | 
					                    </svg>
 | 
				
			||||||
                </a>
 | 
					                </a>
 | 
				
			||||||
                <a href="#" id="zoom-out">
 | 
					                <a href="#" id="zoom-out">
 | 
				
			||||||
                    <svg class="text-gray-400 hover:text-gray-600 focus:outline-none focus:text-gray-600 cursor-pointer" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line><line x1="8" y1="11" x2="14" y2="11"></line></svg>
 | 
					                    <svg class="text-gray-400 hover:text-gray-600 focus:outline-none focus:text-gray-600 cursor-pointer"
 | 
				
			||||||
 | 
					                         xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"
 | 
				
			||||||
 | 
					                         stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
 | 
				
			||||||
 | 
					                        <circle cx="11" cy="11" r="8"></circle>
 | 
				
			||||||
 | 
					                        <line x1="21" y1="21" x2="16.65" y2="16.65"></line>
 | 
				
			||||||
 | 
					                        <line x1="8" y1="11" x2="14" y2="11"></line>
 | 
				
			||||||
 | 
					                    </svg>
 | 
				
			||||||
                </a>
 | 
					                </a>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
            <div x-data="{ open: false }" @keydown.escape="open = false" @click.away="open = false" class="relative inline-block text-left">
 | 
					            <div x-data="{ open: false }" @keydown.escape="open = false" @click.away="open = false"
 | 
				
			||||||
 | 
					                 class="relative inline-block text-left">
 | 
				
			||||||
                <div>
 | 
					                <div>
 | 
				
			||||||
                    <button @click="open = !open" class="flex items-center text-gray-400 hover:text-gray-600 focus:outline-none focus:text-gray-600">
 | 
					                    <button @click="open = !open"
 | 
				
			||||||
                    <svg class="h-5 w-5" fill="currentColor" viewBox="0 0 20 20">
 | 
					                            class="flex items-center text-gray-400 hover:text-gray-600 focus:outline-none focus:text-gray-600">
 | 
				
			||||||
                        <path d="M10 6a2 2 0 110-4 2 2 0 010 4zM10 12a2 2 0 110-4 2 2 0 010 4zM10 18a2 2 0 110-4 2 2 0 010 4z" />
 | 
					                        <svg class="h-5 w-5" fill="currentColor" viewBox="0 0 20 20">
 | 
				
			||||||
                    </svg>
 | 
					                            <path
 | 
				
			||||||
 | 
					                                d="M10 6a2 2 0 110-4 2 2 0 010 4zM10 12a2 2 0 110-4 2 2 0 010 4zM10 18a2 2 0 110-4 2 2 0 010 4z"/>
 | 
				
			||||||
 | 
					                        </svg>
 | 
				
			||||||
                    </button>
 | 
					                    </button>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
                <div x-show="open" x-transition:enter="transition ease-out duration-100" x-transition:enter-start="transform opacity-0 scale-95" x-transition:enter-end="transform opacity-100 scale-100" x-transition:leave="transition ease-in duration-75" x-transition:leave-start="transform opacity-100 scale-100" x-transition:leave-end="transform opacity-0 scale-95" class="origin-top-right absolute right-0 mt-2 w-56 rounded-md shadow-lg">
 | 
					                <div x-show="open" x-transition:enter="transition ease-out duration-100"
 | 
				
			||||||
 | 
					                     x-transition:enter-start="transform opacity-0 scale-95"
 | 
				
			||||||
 | 
					                     x-transition:enter-end="transform opacity-100 scale-100"
 | 
				
			||||||
 | 
					                     x-transition:leave="transition ease-in duration-75"
 | 
				
			||||||
 | 
					                     x-transition:leave-start="transform opacity-100 scale-100"
 | 
				
			||||||
 | 
					                     x-transition:leave-end="transform opacity-0 scale-95"
 | 
				
			||||||
 | 
					                     class="origin-top-right absolute right-0 mt-2 w-56 rounded-md shadow-lg">
 | 
				
			||||||
                    <div class="rounded-md bg-white shadow-xs">
 | 
					                    <div class="rounded-md bg-white shadow-xs">
 | 
				
			||||||
                    <div class="py-1">
 | 
					                        <div class="py-1">
 | 
				
			||||||
                        <a target="_blank" href="?mode=fullscreen" class="block px-4 py-2 text-sm leading-5 text-gray-700 hover:bg-gray-100 hover:text-gray-900 focus:outline-none focus:bg-gray-100 focus:text-gray-900">{{ ctrans('texts.open_in_new_tab') }}</a>
 | 
					                            <a target="_blank" href="?mode=fullscreen"
 | 
				
			||||||
                    </div>
 | 
					                               class="block px-4 py-2 text-sm leading-5 text-gray-700 hover:bg-gray-100 hover:text-gray-900 focus:outline-none focus:bg-gray-100 focus:text-gray-900">{{ ctrans('texts.open_in_new_tab') }}</a>
 | 
				
			||||||
 | 
					                        </div>
 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
@ -141,8 +185,12 @@
 | 
				
			|||||||
    <div class="flex justify-center">
 | 
					    <div class="flex justify-center">
 | 
				
			||||||
        <canvas id="pdf-placeholder" class="shadow rounded-lg bg-white lg:hidden mt-4 p-4"></canvas>
 | 
					        <canvas id="pdf-placeholder" class="shadow rounded-lg bg-white lg:hidden mt-4 p-4"></canvas>
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @include('portal.ninja2020.invoices.includes.terms', ['entities' => [$invoice], 'entity_type' => ctrans('texts.invoice')])
 | 
				
			||||||
 | 
					    @include('portal.ninja2020.invoices.includes.signature')
 | 
				
			||||||
@endsection
 | 
					@endsection
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@section('footer')
 | 
					@section('footer')
 | 
				
			||||||
    <script src="{{ asset('js/clients/shared/pdf.js') }}"></script>
 | 
					    <script src="{{ asset('js/clients/shared/pdf.js') }}"></script>
 | 
				
			||||||
 | 
					    <script src="{{ asset('js/clients/invoices/payment.js') }}"></script>
 | 
				
			||||||
@endsection
 | 
					@endsection
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user