You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							282 lines
						
					
					
						
							9.7 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							282 lines
						
					
					
						
							9.7 KiB
						
					
					
				
								<?php
							 | 
						|
								
							 | 
						|
								namespace App\Http\Controllers;
							 | 
						|
								
							 | 
						|
								use App\Models\Prestamo; // Asegúrate de que el modelo esté correctamente nombrado
							 | 
						|
								use Illuminate\Http\Request;
							 | 
						|
								use App\Exports\PrestamosExport; // Asegúrate de tener esta clase de exportación
							 | 
						|
								use Maatwebsite\Excel\Facades\Excel;
							 | 
						|
								use PDF;
							 | 
						|
								
							 | 
						|
								class PrestamoController extends Controller
							 | 
						|
								{
							 | 
						|
								    /**
							 | 
						|
								     * Display a listing of the resource.
							 | 
						|
								     */
							 | 
						|
								    public function index(Request $request)
							 | 
						|
								    {
							 | 
						|
								        $busqueda = $request->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()
							 | 
						|
								    {
							 | 
						|
								        $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)
							 | 
						|
								    {
							 | 
						|
								        // Validación de datos
							 | 
						|
								        $request->validate([
							 | 
						|
								            'nombre_solicitante' => 'required|string|max:255',
							 | 
						|
								            'chofer_id' => 'required|exists:choferes,id',
							 | 
						|
								            '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'
							 | 
						|
								        ]);
							 | 
						|
								
							 | 
						|
								        // Preparar los datos
							 | 
						|
								        $datos = $request->all();
							 | 
						|
								        $datos['chofer'] = $request->has('chofer') ? 1 : 0;
							 | 
						|
								
							 | 
						|
								        $prestamo = new Prestamo($datos);
							 | 
						|
								        $prestamo->estado = 'pendiente';
							 | 
						|
								        $prestamo->save();
							 | 
						|
								
							 | 
						|
								        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
							 | 
						|
								        $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)
							 | 
						|
								    {
							 | 
						|
								        // 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');
							 | 
						|
								        }
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    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'));
							 | 
						|
								    }
							 | 
						|
								}
							 | 
						|
								
							 |