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.
180 lines
6.4 KiB
180 lines
6.4 KiB
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\User;
|
|
use Illuminate\Http\Request;
|
|
use App\Exports\UsuariosExport;
|
|
use Maatwebsite\Excel\Facades\Excel;
|
|
use PDF; // Asegúrate de incluir la clase PDF
|
|
use App\Models\Puesto;
|
|
use App\Models\Despartamento;
|
|
|
|
class usuariosController extends Controller
|
|
{
|
|
/**
|
|
* Display a listing of the resource.
|
|
*/
|
|
public function index(Request $request)
|
|
{
|
|
$busqueda = $request->busqueda;
|
|
|
|
if ($busqueda) {
|
|
// Busca en la columna 'name' de la tabla 'users'
|
|
$usuarios = User::where('name', 'LIKE', "%{$busqueda}%")->where('eliminado', 0)->get();
|
|
|
|
if ($usuarios->isEmpty()) {
|
|
return redirect()->route('usuarios')
|
|
->with('error', 'No existe ningún usuario con el nombre "' . $busqueda . '". Por favor, inténtalo de nuevo.');
|
|
}
|
|
} else {
|
|
// Si no hay búsqueda, mostrar todos los usuarios
|
|
$usuarios = User::where('eliminado', 0)->get();
|
|
}
|
|
|
|
return view('usuarios', ['usuarios' => $usuarios]);
|
|
}
|
|
|
|
/**
|
|
* Show the form for creating a new resource.
|
|
*/
|
|
public function create()
|
|
{
|
|
$despartamentos = Despartamento::all();
|
|
$puestos = Puesto::all();
|
|
return view('usuariosCrearEditar', ['usuario' => null, 'puestos' => $puestos, 'despartamentos'=> $despartamentos]);
|
|
}
|
|
|
|
/**
|
|
* Store a newly created resource in storage.
|
|
*/
|
|
public function store(Request $request)
|
|
{
|
|
// Validación de datos
|
|
$request->validate([
|
|
'name' => 'required|string|max:255',
|
|
'email' => 'required|string|email|max:255|unique:users',
|
|
'apellido' => 'required|string|max:255',
|
|
'puesto_id' => 'required|exists:puestos,id',
|
|
'departamento_id' => 'required|exists:despartamentos,id',
|
|
'telefono' => 'required|string|max:255',
|
|
'password' => 'required|string|min:8|confirmed',
|
|
], [
|
|
'name.required' => 'El campo nombre es obligatorio.',
|
|
'email.required' => 'El campo email es obligatorio.',
|
|
'email.unique' => 'El email ya está registrado.',
|
|
'apellido.required' => 'El campo apellido es obligatorio.',
|
|
'puesto_id.required' => 'El campo puesto es obligatorio.',
|
|
'departamento_id.required' => 'El campo departamento es obligatorio.',
|
|
'telefono.required' => 'El campo teléfono es obligatorio.',
|
|
'password.required' => 'El campo contraseña es obligatorio.',
|
|
'password.confirmed' => 'Las contraseñas no coinciden.',
|
|
]);
|
|
|
|
// Si la validación pasa, crea el usuario
|
|
$usuario = new User();
|
|
$usuario->name = $request->name;
|
|
$usuario->email = $request->email;
|
|
$usuario->apellido = $request->apellido;
|
|
$usuario->puesto_id = $request->puesto_id;
|
|
$usuario->departamento_id = $request->departamento_id;
|
|
$usuario->telefono = $request->telefono;
|
|
$usuario->password = bcrypt($request->password);
|
|
$usuario->save();
|
|
|
|
return redirect()->route('usuarios')->with('success', 'Usuario creado exitosamente.');
|
|
}
|
|
|
|
/**
|
|
* Display the specified resource.
|
|
*/
|
|
public function show(string $id)
|
|
{
|
|
// Implementar si es necesario
|
|
}
|
|
|
|
/**
|
|
* Show the form for editing the specified resource.
|
|
*/
|
|
public function edit($id)
|
|
{
|
|
$user = User::findOrFail($id);
|
|
$puestos = Puesto::all();
|
|
$despartamentos = Despartamento::all();
|
|
return view('usuariosCrearEditar',['usuario' => $user, 'puestos' => $puestos,'despartamentos'=> $despartamentos]); // Asegúrate de que la clave sea 'usuario'
|
|
}
|
|
|
|
/**
|
|
* Update the specified resource in storage.
|
|
*/
|
|
public function update(Request $request, $id)
|
|
{
|
|
// Validación de datos
|
|
$request->validate([
|
|
'name' => 'required|string|max:255',
|
|
'email' => 'required|string|email|max:255|unique:users',
|
|
'apellido' => 'required|string|max:255',
|
|
'puesto_id' => 'required|exists:puestos,id',
|
|
'departamento_id' => 'required|exists:despartamentos,id',
|
|
'telefono' => 'required|string|max:255',
|
|
'password' => 'required|string|min:8|confirmed',
|
|
], [
|
|
'name.required' => 'El campo nombre es obligatorio.',
|
|
'email.required' => 'El campo email es obligatorio.',
|
|
'email.unique' => 'El email ya está registrado.',
|
|
'apellido.required' => 'El campo apellido es obligatorio.',
|
|
'puesto_id.required' => 'El campo puesto es obligatorio.',
|
|
'departamento_id.required' => 'El campo departamento es obligatorio.',
|
|
'telefono.required' => 'El campo teléfono es obligatorio.',
|
|
'password.required' => 'El campo contraseña es obligatorio.',
|
|
'password.confirmed' => 'Las contraseñas no coinciden.',
|
|
]);
|
|
|
|
// Actualizar usuario
|
|
$usuario = User::findOrFail($id);
|
|
$usuario->name = $request->name;
|
|
$usuario->email = $request->email;
|
|
$usuario->apellido = $request->apellido;
|
|
$usuario->puesto_id = $request->puesto_id;
|
|
$usuario->departamento_id = $request->departamento_id;
|
|
$usuario->telefono = $request->telefono;
|
|
|
|
if ($request->filled('password')) {
|
|
$usuario->password = bcrypt($request->password);
|
|
}
|
|
|
|
$usuario->save();
|
|
|
|
return redirect()->route('usuarios')->with('success', 'Usuario actualizado exitosamente.');
|
|
}
|
|
|
|
/**
|
|
* Remove the specified resource from storage.
|
|
*/
|
|
public function destroy($id)
|
|
{
|
|
// Buscar el usuario por ID
|
|
$usuario = User::findOrFail($id);
|
|
|
|
// Cambiar el estado de eliminado a 1
|
|
$usuario->eliminado = 1; // Asumiendo que 'eliminado' es el campo que indica el estado
|
|
$usuario->save(); // Guardar los cambios
|
|
|
|
// Redirigir a la lista de usuarios con un mensaje de éxito
|
|
return redirect()->route('usuarios')->with('success', 'Usuario eliminado exitosamente.');
|
|
}
|
|
|
|
public function exportExcel()
|
|
{
|
|
return Excel::download(new UsuariosExport, 'usuarios.xlsx');
|
|
}
|
|
|
|
public function exportPDF()
|
|
{
|
|
$usuarios = User::where('eliminado', 0)->get();
|
|
|
|
$pdf = PDF::loadView('exports.usuarios-pdf', ['usuarios' => $usuarios]);
|
|
|
|
return $pdf->download('usuarios.pdf');
|
|
}
|
|
}
|
|
|