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
namespace App\Http\Controllers;
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Http\Option;
use App\Models\Invoice;
use Symfony\Component\HttpFoundation\StreamedResponse;

View File

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

View File

@@ -1,6 +1,6 @@
<x-app-layout>
<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">
{{ __('invoice.Invoice') }} {{ $invoice->number }} ({{ $invoice->localized_state }})
</h2>
@@ -8,7 +8,7 @@
<x-pdf-icon class="text-gray-800 cursor-pointer"
onclick="window.open('/invoice/{{ $invoice->id }}/pdf-download', '_blank', 'popup=true')"/>
<x-e-icon class="cursor-pointer"
onclick="window.open('/invoice/{{ $invoice->id }}/xml-download', '_blank', 'popup=true')"/>
x-on:click="prepareXML"/>
</p>
</div>
</x-slot>
@@ -215,8 +215,33 @@
</div>
@endif
<div id="download"></div>
</div>
</div>
</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\AuthController;
use App\Http\Controllers\Api\CustomerController;
use App\Http\Controllers\Api\EController;
use App\Http\Controllers\Api\ExcelController;
use App\Http\Controllers\Api\IncomingController;
use App\Http\Controllers\Api\InvoiceController;
@@ -32,6 +33,7 @@ Route::group(['as' => 'api.'], function () {
Route::apiResource('/taxrate', TaxRateController::class)->except(['show']);
Route::get('/invoice-filter/{start}/{end}', [InvoiceController::class, 'index'])->name('invoice.index');
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::put('/invoice/{invoice}', [InvoiceController::class, 'update'])->name('invoice.update');
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\CustomerController;
use App\Http\Controllers\EController;
use App\Http\Controllers\IncomingController;
use App\Http\Controllers\InvoiceController;
use App\Http\Controllers\OptionController;
@@ -32,7 +31,6 @@ Route::middleware('auth')->group(function () {
Route::get('/option', [OptionController::class, 'index'])->name('option.index');
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}/xml-download', [EController::class, 'downloadInvoice'])->name('invoice.eDownload');
Route::get('/invoice/{id}/mail', [InvoiceController::class, 'mail'])->name('invoice.mail');
Route::resource('/payment', PaymentController::class)->only(['index', 'create', 'edit']);
Route::get('/excel', function() { return view('excel'); })->name('excel');