group(function (): void { Route::get('/dashboard', [DashboardController::class, 'dashboard'])->name('dashboard'); Route::get('/time', function () { return Inertia::render('Time'); })->name('time'); Route::get('/reporting', function () { return Inertia::render('Reporting'); })->name('reporting'); Route::get('/reporting/detailed', function () { return Inertia::render('ReportingDetailed'); })->name('reporting.detailed'); Route::get('/projects', function () { return Inertia::render('Projects'); })->name('projects'); Route::get('/projects/{project}', function () { return Inertia::render('ProjectShow'); })->name('projects.show'); Route::get('/clients', function () { return Inertia::render('Clients'); })->name('clients'); Route::get('/members', function () { return Inertia::render('Members', [ 'availableRoles' => array_values(Jetstream::$roles), ]); })->name('members'); Route::get('/tags', function () { return Inertia::render('Tags'); })->name('tags'); Route::get('/import', function () { return Inertia::render('Import'); })->name('import'); Route::get('/pdf-test', function () { if (config('services.gotenberg.url') === null) { throw new PdfRendererIsNotConfiguredException; } $viewFile = file_get_contents(resource_path('views/reports/time-entry-aggregate-index.blade.php')); $html = Blade::render($viewFile, ['aggregatedData' => []]); $footerViewFile = file_get_contents(resource_path('views/reports/time-entry-index-footer.blade.php')); $footerHtml = Blade::render($footerViewFile); $request = Gotenberg::chromium(config('services.gotenberg.url')) ->pdf() ->pdfa('PDF/A-3b') ->paperSize('8.27', '11.7') // A4 ->footer(Stream::string('footer', $footerHtml)) ->html(Stream::string('body', $html)); return Gotenberg::send($request); }); });