busqueda; if ($busqueda) { $puestos = Puesto::where('nombre', 'LIKE', "%{$busqueda}%") ->where('eliminado', 0) ->get(); if ($puestos->isEmpty()) { return redirect()->route('puestos.index') ->with('error', 'No existe ningĂșn puesto con el nombre "' . $busqueda . '". Por favor, intĂ©ntalo de nuevo.'); } } else { $puestos = Puesto::where('eliminado', 0)->get(); } return view('puestos', ['puestos' => $puestos]); } public function create() { return view('puestosCrearEditar', ['puesto' => null]); } public function store(Request $request) { $validated = $request->validate([ 'nombre' => ['required', 'string', 'max:255'], ], [ 'nombre.required' => 'El campo nombre es obligatorio.', 'nombre.string' => 'El campo nombre debe ser una cadena de texto.', 'nombre.max' => 'El campo nombre no debe exceder 255 caracteres.', ]); $puesto = new Puesto($validated); $puesto->eliminado = 0; $puesto->save(); return redirect()->route('puestos.index') ->with('success', 'Puesto creado exitosamente'); } public function edit($id) { $puesto = Puesto::findOrFail($id); return view('puestosCrearEditar', ['puesto' => $puesto]); } public function update(Request $request, $id) { $validated = $request->validate([ 'nombre' => ['required', 'string', 'max:255'], ], [ 'nombre.required' => 'El campo nombre es obligatorio.', 'nombre.string' => 'El campo nombre debe ser una cadena de texto.', 'nombre.max' => 'El campo nombre no debe exceder 255 caracteres.', ]); $puesto = Puesto::findOrFail($id); $puesto->update($validated); return redirect()->route('puestos.index') ->with('success', 'Puesto actualizado exitosamente'); } public function destroy($id) { $puesto = Puesto::findOrFail($id); \App\Models\User::where('puesto_id', $id)->update(['puesto_id' => null]); $puesto->eliminado = 1; $puesto->save(); return redirect()->route('puestos.index') ->with('success', 'Puesto eliminado exitosamente. Los usuarios afectados necesitan ser reasignados.'); } public function exportExcel() { return Excel::download(new PuestosExport, 'puestos.xlsx'); } public function exportPDF() { $puestos = Puesto::where('eliminado', 0)->get(); $pdf = PDF::loadView('exports.puestos', ['puestos' => $puestos]); return $pdf->download('puestos.pdf'); } public function export($format) { $puestos = Puesto::where('eliminado', 0) ->orderBy('updated_at', 'desc') ->get(); switch($format) { case 'excel': return Excel::download(new PuestosExport($puestos), 'puestos.xlsx'); case 'pdf': $pdf = PDF::loadView('exports.puestos', ['puestos' => $puestos]); return $pdf->download('puestos.pdf'); default: return redirect()->back()->with('error', 'Formato no soportado'); } } public function toggleStatus($id) { $puesto = Puesto::findOrFail($id); $puesto->eliminado = !$puesto->eliminado; $puesto->save(); return redirect()->route('puestos.index') ->with('success', 'Estado del puesto actualizado correctamente'); } }