From 09b33d53e5b7097b0c5d1df25a6bf76b9981aaff Mon Sep 17 00:00:00 2001 From: TheSilva7 Date: Fri, 30 May 2025 11:24:44 -0600 Subject: [PATCH] PDF de comision --- app/Http/Controllers/PrestamoController.php | 18 +- resources/views/prestamos.blade.php | 6 + .../views/reports/oficio_comision.blade.php | 191 ++++++++++++++++++ routes/web.php | 14 +- 4 files changed, 224 insertions(+), 5 deletions(-) create mode 100644 resources/views/reports/oficio_comision.blade.php diff --git a/app/Http/Controllers/PrestamoController.php b/app/Http/Controllers/PrestamoController.php index f8ee622..1c37158 100644 --- a/app/Http/Controllers/PrestamoController.php +++ b/app/Http/Controllers/PrestamoController.php @@ -106,8 +106,11 @@ class PrestamoController extends Controller $prestamo->estado = 'pendiente'; $prestamo->save(); - return redirect()->route('prestamos.index') - ->with('success', 'Préstamo solicitado correctamente. Esperando aprobación.'); + // Generar el PDF del oficio de comisión + $pdf = PDF::loadView('reports.oficio_comision', compact('prestamo')); + + // Descargar el PDF + return $pdf->download('oficio_comision_' . $prestamo->id . '.pdf'); } /** @@ -288,4 +291,15 @@ class PrestamoController extends Controller return view('prestamos.rechazados', compact('prestamos')); } + + public function descargarOficioComision($id) + { + $prestamo = Prestamo::with('vehiculo')->findOrFail($id); // Cargar el préstamo con la relación del vehículo + + // Generar el PDF del oficio de comisión + $pdf = PDF::loadView('reports.oficio_comision', compact('prestamo')); + + // Descargar el PDF + return $pdf->download('oficio_comision_' . $prestamo->id . '.pdf'); + } } diff --git a/resources/views/prestamos.blade.php b/resources/views/prestamos.blade.php index ca0616c..6ffc9bd 100644 --- a/resources/views/prestamos.blade.php +++ b/resources/views/prestamos.blade.php @@ -86,6 +86,7 @@ Número de Personas Chofer Estado + Reporte Acciones @@ -156,6 +157,11 @@ Activo + + + + +
diff --git a/resources/views/reports/oficio_comision.blade.php b/resources/views/reports/oficio_comision.blade.php new file mode 100644 index 0000000..6a1cd66 --- /dev/null +++ b/resources/views/reports/oficio_comision.blade.php @@ -0,0 +1,191 @@ + + + + + Oficio de Comisión + + + +
+
+ + + + + + +
+

OFICIO DE COMISIÓN

+
+ +
+
+ +
+ + + + + +
+ C: +
ADSCRITO A: +
CON CARGO DE: +
+ {{ $prestamo->nombre_solicitante }} +
DIRECCIÓN UNIDAD ACADEMICA CHAPALA +
CHOFER DE DIRECCIÓN +
+ +

POR MEDIO DE LA PRESENTE ME PERMITO INFORMAR A USTED, QUE HA SIDO COMISIONADO(A) A LA (S)

+ + + + + + +
POBLACIÓN (ES) DE:{{ $prestamo->destino }}
+ + + + + +
EL {{ \Carbon\Carbon::parse($prestamo->fecha_hora_salida)->format('d') }} DE {{ \Carbon\Carbon::parse($prestamo->fecha_hora_salida)->format('F') }} DE {{ \Carbon\Carbon::parse($prestamo->fecha_hora_salida)->format('Y') }} AL {{ \Carbon\Carbon::parse($prestamo->fecha_hora_llegada)->format('d') }} DE {{ \Carbon\Carbon::parse($prestamo->fecha_hora_llegada)->format('F') }} DE {{ \Carbon\Carbon::parse($prestamo->fecha_hora_llegada)->format('Y') }}
+ + + + + + + + +
CON MOTIVO DE:
{{ $prestamo->motivo }}
+ + + + + + + + + + +
HORA DE SALIDA:{{ \Carbon\Carbon::parse($prestamo->fecha_hora_salida)->format('H:i a') }}
REGRESO:{{ \Carbon\Carbon::parse($prestamo->fecha_hora_llegada)->format('H:i a') }}
+ + + + + +
MEDIO DE TRANSPORTE A UTILIZAR
+ + + + + + + + + + + + + + +
AVIONAUTOBUSVEHICULOOFICIAL
@if($prestamo->medio_transporte == 'avion') X @endif@if($prestamo->medio_transporte == 'autobus') X @endif@if($prestamo->medio_transporte == 'vehiculo') X @endif@if($prestamo->tipo_vehiculo == 'oficial') X @endif
+ + + + + + + + + + + + +
MARCA: {{ $prestamo->vehiculo ? $prestamo->vehiculo->marca : '' }}TIPO: {{ $prestamo->vehiculo ? $prestamo->vehiculo->tipo : '' }}MODELO: {{ $prestamo->vehiculo ? $prestamo->vehiculo->modelo : '' }}
No. CILINDROS: {{ $prestamo->vehiculo ? $prestamo->vehiculo->cilindros : '' }}PLACAS: {{ $prestamo->vehiculo ? $prestamo->vehiculo->placas : '' }}
+ +

SUJETOS A COMPROBACIÓN DE ACUERDO AL REGLAMENTO VIGENTE DENTRO DE LOS TRES DÍAS HABILES POSTERIORES AL TERMINO DE LA COMISIÓN.

+ +
+
+
+ + + + + +
+ ATENTAMENTE +
+
+ ___________________________________ +
+ DR. FRANCISCO JAVIER QUEZADA ANDRADE +
+ DIRECTOR DE TECNOLOGICO SUPERIOR DE JALISCO CHAPALA +
+ +
+ + +
+ + \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 800cd18..3afe7a4 100644 --- a/routes/web.php +++ b/routes/web.php @@ -69,15 +69,23 @@ use App\Http\Controllers\PuestoController; Route::get('/prestamos/export/{format}', [PrestamoController::class, 'export'])->name('prestamos.export'); }); - // Rutas de gestión de préstamos (crear, editar, eliminar) para admin y servicios - Route::middleware(['auth', 'can:gestionar-prestamos'])->resource('prestamos', PrestamoController::class); + // Rutas de gestión de préstamos (crear, editar, eliminar, descargar oficio) para admin y servicios generales + Route::middleware(['auth', 'can:gestionar-prestamos'])->group(function () { + Route::resource('prestamos', PrestamoController::class)->except([ + 'index', 'show' // Estas rutas se manejan en el grupo de solo lectura de abajo + ]); + Route::get('/prestamos/{id}/oficio-comision', [PrestamoController::class, 'descargarOficioComision'])->name('prestamos.oficio-comision'); // Añadida a este grupo + }); - // Ruta general de préstamos (solo para ver) + // Ruta general de préstamos (solo para ver) - Asegúrate de que index y show estén definidos aquí si es necesario para otros roles Route::middleware(['auth'])->group(function () { Route::get('/prestamos', [PrestamoController::class, 'index'])->name('prestamos.index'); Route::get('/prestamos/{id}', [PrestamoController::class, 'show'])->name('prestamos.show'); }); + // Rutas para la gestión de departamentos (index, create, store, show, edit, update, destroy) + Route::resource('despartamentos', DespartamentoController::class); + Route::get('/docentes/export/{format}', [DocentesController::class, 'export'])->name('docentes.export'); Route::get('/docentes/{id}/toggle-status', [DocentesController::class, 'toggleStatus'])->name('docentes.toggle-status');