Eliminate popup when downloading xml invoices.

This commit is contained in:
2025-02-03 12:44:59 +01:00
parent 588b56d71e
commit 33c0a421c9
5 changed files with 32 additions and 6 deletions

View File

@@ -1,7 +1,8 @@
<?php <?php
namespace App\Http\Controllers; namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Http\Option; use App\Http\Option;
use App\Models\Invoice; use App\Models\Invoice;
use Symfony\Component\HttpFoundation\StreamedResponse; use Symfony\Component\HttpFoundation\StreamedResponse;

View File

@@ -2,7 +2,7 @@
namespace App\Mail; namespace App\Mail;
use App\Http\Controllers\EController; use App\Http\Controllers\Api\EController;
use App\Http\Controllers\PdfController; use App\Http\Controllers\PdfController;
use App\Models\Invoice; use App\Models\Invoice;
use Illuminate\Bus\Queueable; use Illuminate\Bus\Queueable;

View File

@@ -1,6 +1,6 @@
<x-app-layout> <x-app-layout>
<x-slot name="header"> <x-slot name="header">
<div class="flex flex-row w-full"> <div class="flex flex-row w-full" x-data="invoiceForm">
<h2 class="grow font-semibold text-xl text-gray-800 dark:text-gray-200 leading-tight"> <h2 class="grow font-semibold text-xl text-gray-800 dark:text-gray-200 leading-tight">
{{ __('invoice.Invoice') }} {{ $invoice->number }} ({{ $invoice->localized_state }}) {{ __('invoice.Invoice') }} {{ $invoice->number }} ({{ $invoice->localized_state }})
</h2> </h2>
@@ -8,7 +8,7 @@
<x-pdf-icon class="text-gray-800 cursor-pointer" <x-pdf-icon class="text-gray-800 cursor-pointer"
onclick="window.open('/invoice/{{ $invoice->id }}/pdf-download', '_blank', 'popup=true')"/> onclick="window.open('/invoice/{{ $invoice->id }}/pdf-download', '_blank', 'popup=true')"/>
<x-e-icon class="cursor-pointer" <x-e-icon class="cursor-pointer"
onclick="window.open('/invoice/{{ $invoice->id }}/xml-download', '_blank', 'popup=true')"/> x-on:click="prepareXML"/>
</p> </p>
</div> </div>
</x-slot> </x-slot>
@@ -215,8 +215,33 @@
</div> </div>
@endif @endif
<div id="download"></div>
</div> </div>
</div> </div>
</x-app-layout> </x-app-layout>
<script>
function invoiceForm() {
return {
prepareXML() {
axios.get('/invoice/' + {{ $invoice->id }} + '/xml-download', {responseType: "blob"})
.then(function(response) {
let url = window.URL.createObjectURL(response.data);
let a = document.createElement('a');
a.href = url;
a.download = '{!! __('invoice.Invoice') !!} ' + '{{ $invoice->number }}' + '.xml';
let download = document.querySelector('#download');
download.appendChild(a);
a.click();
window.URL.revokeObjectURL(url);
console.log(response);
})
.catch(function(error) {
console.log(error);
})
}
}
}
</script>

View File

@@ -3,6 +3,7 @@
use App\Http\Controllers\Api\AddressController; use App\Http\Controllers\Api\AddressController;
use App\Http\Controllers\Api\AuthController; use App\Http\Controllers\Api\AuthController;
use App\Http\Controllers\Api\CustomerController; use App\Http\Controllers\Api\CustomerController;
use App\Http\Controllers\Api\EController;
use App\Http\Controllers\Api\ExcelController; use App\Http\Controllers\Api\ExcelController;
use App\Http\Controllers\Api\IncomingController; use App\Http\Controllers\Api\IncomingController;
use App\Http\Controllers\Api\InvoiceController; use App\Http\Controllers\Api\InvoiceController;
@@ -32,6 +33,7 @@ Route::group(['as' => 'api.'], function () {
Route::apiResource('/taxrate', TaxRateController::class)->except(['show']); Route::apiResource('/taxrate', TaxRateController::class)->except(['show']);
Route::get('/invoice-filter/{start}/{end}', [InvoiceController::class, 'index'])->name('invoice.index'); Route::get('/invoice-filter/{start}/{end}', [InvoiceController::class, 'index'])->name('invoice.index');
Route::post('/invoice', [InvoiceController::class, 'store'])->name('invoice.store'); Route::post('/invoice', [InvoiceController::class, 'store'])->name('invoice.store');
Route::get('/invoice/{id}/xml-download', [EController::class, 'downloadInvoice'])->name('invoice.eDownload');
Route::get('/invoice_open', [InvoiceController::class, 'open'])->name('invoice.open'); Route::get('/invoice_open', [InvoiceController::class, 'open'])->name('invoice.open');
Route::put('/invoice/{invoice}', [InvoiceController::class, 'update'])->name('invoice.update'); Route::put('/invoice/{invoice}', [InvoiceController::class, 'update'])->name('invoice.update');
Route::put('/invoice/{invoice}/state', [InvoiceController::class, 'state'])->name('invoice.state'); Route::put('/invoice/{invoice}/state', [InvoiceController::class, 'state'])->name('invoice.state');

View File

@@ -2,7 +2,6 @@
use App\Http\Controllers\AddressController; use App\Http\Controllers\AddressController;
use App\Http\Controllers\CustomerController; use App\Http\Controllers\CustomerController;
use App\Http\Controllers\EController;
use App\Http\Controllers\IncomingController; use App\Http\Controllers\IncomingController;
use App\Http\Controllers\InvoiceController; use App\Http\Controllers\InvoiceController;
use App\Http\Controllers\OptionController; use App\Http\Controllers\OptionController;
@@ -32,7 +31,6 @@ Route::middleware('auth')->group(function () {
Route::get('/option', [OptionController::class, 'index'])->name('option.index'); Route::get('/option', [OptionController::class, 'index'])->name('option.index');
Route::resource('/invoice', InvoiceController::class)->only(['index', 'create', 'show', 'edit']); Route::resource('/invoice', InvoiceController::class)->only(['index', 'create', 'show', 'edit']);
Route::get('/invoice/{id}/pdf-download', [PdfController::class, 'downloadInvoice'])->name('invoice.pdfDownload'); Route::get('/invoice/{id}/pdf-download', [PdfController::class, 'downloadInvoice'])->name('invoice.pdfDownload');
Route::get('/invoice/{id}/xml-download', [EController::class, 'downloadInvoice'])->name('invoice.eDownload');
Route::get('/invoice/{id}/mail', [InvoiceController::class, 'mail'])->name('invoice.mail'); Route::get('/invoice/{id}/mail', [InvoiceController::class, 'mail'])->name('invoice.mail');
Route::resource('/payment', PaymentController::class)->only(['index', 'create', 'edit']); Route::resource('/payment', PaymentController::class)->only(['index', 'create', 'edit']);
Route::get('/excel', function() { return view('excel'); })->name('excel'); Route::get('/excel', function() { return view('excel'); })->name('excel');