busqueda; if ($busqueda) { // Busca en la columna 'nombre_solicitante' de la tabla 'prestamos' $prestamos = Prestamo::where('nombre_solicitante', 'LIKE', "%{$busqueda}%") ->where('eliminado', 0) ->get(); if ($prestamos->isEmpty()) { return redirect()->route('prestamo.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 $prestamos = Prestamo::where('eliminado', 0)->get(); } return view('prestamos', ['prestamos' => $prestamos]); } /** * Show the form for creating a new resource. */ public function create() { return view('prestamosCrearEditar', ['prestamo' => null]); // No se necesita pasar préstamos } /** * Store a newly created resource in storage. */ public function store(Request $request) { // Preparar los datos $datos = $request->all(); $datos['chofer'] = $request->has('chofer') ? 1 : 0; // Convertir 'on' a 1, o ausencia a 0 $prestamo = new Prestamo($datos); $prestamo->estado = 'pendiente'; // Estado inicial $prestamo->save(); // Aquí puedes agregar notificaciones para los administradores return redirect()->route('prestamos.index') ->with('success', 'Préstamo solicitado correctamente. Esperando aprobación.'); } /** * Show the form for editing the specified resource. */ public function edit($id) { $prestamo = Prestamo::findOrFail($id); // Busca el préstamo por ID return view('prestamosCrearEditar', ['prestamo' => $prestamo]); // Pasa el préstamo a la vista } /** * Update the specified resource in storage. */ public function update(Request $request, $id) { // Validación de datos $request->validate([ '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', ]); $prestamo = Prestamo::findOrFail($id); // Encuentra el préstamo por ID $prestamo->nombre_solicitante = $request->nombre_solicitante; // Actualiza el nombre del solicitante $prestamo->destino = $request->destino; // Actualiza el destino $prestamo->fecha_hora_salida = $request->fecha_hora_salida; // Actualiza la fecha y hora de salida $prestamo->fecha_hora_llegada = $request->fecha_hora_llegada; // Actualiza la fecha y hora de llegada $prestamo->motivo = $request->motivo; // Actualiza el motivo $prestamo->domicilio = $request->domicilio; // Actualiza el domicilio $prestamo->numero_personas = $request->numero_personas; // Actualiza el número de personas $prestamo->chofer = $request->has('chofer') ? 1 : 0; // Manejo del checkbox $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 = Prestamo::where('eliminado', 0)->get(); $pdf = PDF::loadView('exports.prestamos-pdf', ['prestamos' => $prestamos]); return $pdf->download('prestamos.pdf'); } public function aceptados(Request $request) { $busqueda = $request->busqueda; $prestamos = Prestamo::when($busqueda, function($query) use ($busqueda) { return $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.aceptar', ['prestamos' => $prestamos]); } public function aceptar($id) { $prestamo = Prestamo::findOrFail($id); $prestamo->estado = 'aceptado'; $prestamo->save(); // Aquí puedes agregar notificaciones si lo deseas return redirect()->route('prestamos.aceptados') ->with('success', 'Préstamo aceptado correctamente'); } public function rechazar($id) { $prestamo = Prestamo::findOrFail($id); $prestamo->estado = 'rechazado'; $prestamo->save(); // Aquí puedes agregar notificaciones si lo deseas return redirect()->route('prestamos.aceptados') ->with('success', 'Préstamo rechazado correctamente'); } public function historial(Request $request) { $query = Prestamo::query() ->whereIn('estado', ['aceptado', 'rechazado']); // Aplicar filtros de búsqueda if ($request->busqueda) { $query->where(function($q) use ($request) { $q->where('nombre_solicitante', 'LIKE', "%{$request->busqueda}%") ->orWhere('destino', 'LIKE', "%{$request->busqueda}%") ->orWhere('motivo', 'LIKE', "%{$request->busqueda}%"); }); } // Filtro por estado if ($request->estado) { $query->where('estado', $request->estado); } // Filtro por fechas if ($request->fecha_desde) { $query->whereDate('created_at', '>=', $request->fecha_desde); } if ($request->fecha_hasta) { $query->whereDate('created_at', '<=', $request->fecha_hasta); } // Ordenar por fecha de actualización $query->orderBy('updated_at', 'desc'); // Paginar resultados $prestamos = $query->paginate(10); return view('prestamos.historial', ['prestamos' => $prestamos]); } public function export($format) { $prestamos = Prestamo::whereIn('estado', ['aceptado', 'rechazado']) ->orderBy('updated_at', 'desc') ->get(); switch($format) { case 'excel': return Excel::download(new PrestamosExport($prestamos), 'historial_prestamos.xlsx'); case 'pdf': $pdf = PDF::loadView('exports.prestamos-pdf', ['prestamos' => $prestamos]); return $pdf->download('historial_prestamos.pdf'); default: return redirect()->back()->with('error', 'Formato no soportado'); } } }