busqueda; if ($busqueda) { // Busca en la columna 'nombre_solicitante' de la tabla 'prestamos' $prestamos = Prestamo::where('nombre_solicitante', 'LIKE', "%{$busqueda}%") ->where('eliminado', 0) ->where('estado', 'pendiente') ->get(); if ($prestamos->isEmpty()) { return redirect()->route('prestamos.index') ->with('error', 'No existe ningún préstamo con el solicitante "' . $busqueda . '". Por favor, inténtalo de nuevo.'); } } else { // Si no hay búsqueda, mostrar todos los préstamos pendientes $prestamos = Prestamo::where('eliminado', 0) ->where('estado', 'pendiente') ->get(); } return view('prestamos', ['prestamos' => $prestamos]); } /** * Show the form for creating a new resource. */ public function create() { $vehiculos = \App\Models\tiposVeiculos::where('status', true)->get(); $choferes = \App\Models\Chofer::all(); return view('prestamosCrearEditar', [ 'prestamo' => null, 'vehiculos' => $vehiculos, 'choferes' => $choferes ]); } /** * Store a newly created resource in storage. */ public function store(Request $request) { // Si el solicitante es el chofer, eliminamos chofer_id del request para evitar validación innecesaria if ($request->has('solicitante_es_chofer') && $request->input('solicitante_es_chofer')) { $request->request->remove('chofer_id'); } // Validación de datos $rules = [ 'nombre_solicitante' => 'required|string|max:255', 'destino' => 'required|string|max:255', 'fecha_hora_salida' => 'required|date', 'fecha_hora_llegada' => 'required|date', 'motivo' => 'required|string|max:255', 'domicilio' => 'required|string|max:255', 'numero_personas' => 'required|integer', 'vehiculo_id' => 'required|exists:tipos_veiculos,id' ]; // Validación condicional para el tipo de licencia del solicitante if ($request->has('solicitante_es_chofer') && $request->input('solicitante_es_chofer')) { $rules['solicitante_tipo_licencia'] = 'required|string|max:255'; } else { // Si el solicitante NO es el chofer, el chofer_id es requerido $rules['chofer_id'] = 'required|exists:choferes,id'; } $request->validate($rules); // Preparar los datos $datos = $request->all(); // Guardar si el solicitante es el chofer (true/false) $datos['chofer'] = $request->has('solicitante_es_chofer') ? 1 : 0; // Si el solicitante es el chofer, asegúrate de que chofer_id sea null if ($datos['chofer']) { $datos['chofer_id'] = null; } else { // Si el solicitante NO es el chofer, asegúrate de que solicitante_tipo_licencia sea null $datos['solicitante_tipo_licencia'] = null; } // Sobrescribir el nombre del solicitante con el nombre del usuario autenticado (si aplica) // Puedes decidir si quieres que el nombre del solicitante en la tabla sea siempre el del usuario logueado o el que ingresa en el formulario. // Si quieres usar el del usuario logueado, descomenta la siguiente línea: // $datos['nombre_solicitante'] = auth()->user()->name; $prestamo = new Prestamo($datos); $prestamo->estado = 'pendiente'; $prestamo->save(); // 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'); } /** * Show the form for editing the specified resource. */ public function edit($id) { $prestamo = Prestamo::findOrFail($id); // Busca el préstamo por ID $vehiculos = \App\Models\tiposVeiculos::where('status', true)->get(); $choferes = \App\Models\Chofer::all(); return view('prestamosCrearEditar', [ 'prestamo' => $prestamo, 'vehiculos' => $vehiculos, 'choferes' => $choferes ]); // Pasa el préstamo a la vista } /** * Update the specified resource in storage. */ public function update(Request $request, $id) { // Si el solicitante es el chofer, eliminamos chofer_id del request para evitar validación innecesaria if ($request->has('solicitante_es_chofer') && $request->input('solicitante_es_chofer')) { $request->request->remove('chofer_id'); } // Validación de datos $rules = [ 'nombre_solicitante' => 'required|string|max:255', 'destino' => 'required|string|max:255', 'fecha_hora_salida' => 'required|date', 'fecha_hora_llegada' => 'required|date', 'motivo' => 'required|string|max:255', 'domicilio' => 'required|string|max:255', 'numero_personas' => 'required|integer', 'vehiculo_id' => 'required|exists:tipos_veiculos,id' ]; // Validación condicional para el tipo de licencia del solicitante if ($request->has('solicitante_es_chofer') && $request->input('solicitante_es_chofer')) { $rules['solicitante_tipo_licencia'] = 'required|string|max:255'; } else { // Si el solicitante NO es el chofer, el chofer_id es requerido $rules['chofer_id'] = 'required|exists:choferes,id'; } $request->validate($rules); $prestamo = Prestamo::findOrFail($id); $prestamo->nombre_solicitante = $request->nombre_solicitante; $prestamo->destino = $request->destino; $prestamo->fecha_hora_salida = $request->fecha_hora_salida; $prestamo->fecha_hora_llegada = $request->fecha_hora_llegada; $prestamo->motivo = $request->motivo; $prestamo->domicilio = $request->domicilio; $prestamo->numero_personas = $request->numero_personas; // Guardar si el solicitante es el chofer (true/false) $prestamo->chofer = $request->has('solicitante_es_chofer') ? 1 : 0; // Si el solicitante es el chofer, asegúrate de que chofer_id sea null y guarda el tipo de licencia if ($prestamo->chofer) { $prestamo->chofer_id = null; $prestamo->solicitante_tipo_licencia = $request->solicitante_tipo_licencia; } else { // Si el solicitante NO es el chofer, asegúrate de que solicitante_tipo_licencia sea null y guarda el chofer_id $prestamo->solicitante_tipo_licencia = null; $prestamo->chofer_id = $request->chofer_id; } $prestamo->eliminado = 0; // Cambia el estado a activo si se está editando $prestamo->save(); // Guarda los cambios return redirect()->route('prestamos.index')->with('success', 'Préstamo actualizado correctamente.'); } /** * Remove the specified resource from storage. */ public function destroy($id) { $prestamo = Prestamo::findOrFail($id); // Encuentra el préstamo por ID $prestamo->eliminado = 1; // Cambia el estado a inactivo $prestamo->save(); // Guarda los cambios return redirect()->route('prestamos.index')->with('success', 'Préstamo inactivado correctamente.'); } /** * Export to Excel. */ public function exportExcel() { return Excel::download(new PrestamosExport, 'prestamos.xlsx'); } /** * Export to PDF. */ public function exportPDF() { $prestamos = \App\Models\Prestamo::with(['vehiculo', 'choferAsignado'])->get(); $pdf = \PDF::loadView('exports.prestamos-reporte-pdf', ['prestamos' => $prestamos]); return $pdf->download('reporte_general_prestamos.pdf'); } public function aceptados(Request $request) { $busqueda = $request->busqueda; if ($busqueda) { $prestamos = Prestamo::where('nombre_solicitante', 'LIKE', "%{$busqueda}%") ->where('eliminado', 0) ->where('estado', 'aceptado') ->get(); if ($prestamos->isEmpty()) { return redirect()->route('prestamos.aceptados') ->with('error', 'No existe ningún préstamo aceptado con el solicitante "' . $busqueda . '". Por favor, inténtalo de nuevo.'); } } else { $prestamos = Prestamo::where('eliminado', 0) ->where('estado', 'aceptado') ->get(); } return view('prestamos.aceptados', ['prestamos' => $prestamos]); } public function aceptar($id) { $prestamo = Prestamo::findOrFail($id); $prestamo->estado = 'aceptado'; $prestamo->save(); return redirect()->route('prestamos.index') ->with('success', 'Préstamo aceptado exitosamente.'); } public function rechazar($id) { $prestamo = Prestamo::findOrFail($id); $prestamo->estado = 'rechazado'; $prestamo->save(); return redirect()->route('prestamos.index') ->with('success', 'Préstamo rechazado exitosamente.'); } public function show($id) { $prestamo = \App\Models\Prestamo::findOrFail($id); return view('prestamos.show', compact('prestamo')); } public function pendientes() { $prestamos = \App\Models\Prestamo::where('estado', 'pendiente')->where('eliminado', 0)->get(); return view('prestamos.pendientes', compact('prestamos')); } public function rechazados(Request $request) { $busqueda = $request->busqueda; $prestamos = \App\Models\Prestamo::where('estado', 'rechazado') ->where('eliminado', 0) ->when($busqueda, function($query) use ($busqueda) { $query->where(function($q) use ($busqueda) { $q->where('nombre_solicitante', 'LIKE', "%{$busqueda}%") ->orWhere('destino', 'LIKE', "%{$busqueda}%") ->orWhere('motivo', 'LIKE', "%{$busqueda}%"); }); }) ->orderBy('created_at', 'desc') ->get(); 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'); } }