diff --git a/app/Exports/MarcasExport.php b/app/Exports/MarcasExport.php index 4b0a5dc..e6c9ac6 100644 --- a/app/Exports/MarcasExport.php +++ b/app/Exports/MarcasExport.php @@ -7,6 +7,7 @@ use Maatwebsite\Excel\Concerns\FromCollection; use Maatwebsite\Excel\Concerns\WithHeadings; class MarcasExport implements FromCollection, WithHeadings + { /** * Método que devuelve la colección de datos a exportar. @@ -32,4 +33,4 @@ class MarcasExport implements FromCollection, WithHeadings 'Marca', // Encabezado para la columna Marca ]; } -} \ No newline at end of file +} diff --git a/app/Exports/UsuariosExport.php b/app/Exports/UsuariosExport.php new file mode 100644 index 0000000..0a3dcc9 --- /dev/null +++ b/app/Exports/UsuariosExport.php @@ -0,0 +1,24 @@ +get(); + } + + public function headings(): array + { + return [ + 'ID', + 'Nombre', + 'Email' + ]; + } +} diff --git a/app/Http/Controllers/usuariosController.php b/app/Http/Controllers/usuariosController.php index d6a7a48..5fe3abf 100644 --- a/app/Http/Controllers/usuariosController.php +++ b/app/Http/Controllers/usuariosController.php @@ -4,6 +4,9 @@ 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 class usuariosController extends Controller { @@ -12,9 +15,22 @@ class usuariosController extends Controller */ public function index(Request $request) { - $usuarios = User::all(); + $busqueda = $request->busqueda; - return view('usuarios', compact('usuarios')); + 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]); } /** @@ -22,25 +38,36 @@ class usuariosController extends Controller */ public function create() { - return view('usuarios.create'); + return view('usuariosCrearEditar'); // Vista para crear usuario } + /** * 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' => 'required|string|max:255', + 'carrera' => 'required|string|max:255', + 'telefono' => 'required|string|max:255', 'password' => 'required|string|min:8|confirmed', ]); - User::create([ - 'name' => $request->name, - 'email' => $request->email, - 'password' => bcrypt($request->password), - ]); + // Crear nuevo usuario + $usuario = new User(); + $usuario->name = $request->name; + $usuario->email = $request->email; + $usuario->apellido = $request->apellido; + $usuario->puesto = $request->puesto; + $usuario->carrera = $request->carrera; + $usuario->telefono = $request->telefono; + $usuario->password = bcrypt($request->password); + $usuario->save(); return redirect()->route('usuarios')->with('success', 'Usuario creado exitosamente.'); } @@ -50,7 +77,7 @@ class usuariosController extends Controller */ public function show(string $id) { - // + // Implementar si es necesario } /** @@ -58,25 +85,73 @@ class usuariosController extends Controller */ public function edit($id) { - + $usuario = User::findOrFail($id); + return view('usuariosCrearEditar', compact('usuario')); // Vista para editar 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', + 'apellido' => 'required|string|max:255', + 'puesto' => 'required|string|max:255', + 'carrera' => 'required|string|max:255', + 'telefono' => 'required|string|max:255', + 'password' => 'nullable|string|min:8|confirmed', + ]); + + // Actualizar usuario + $usuario = User::findOrFail($id); + $usuario->name = $request->name; + $usuario->email = $request->email; + $usuario->apellido = $request->apellido; + $usuario->puesto = $request->puesto; + $usuario->carrera = $request->carrera; + $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) + + public function destroy($id) { + // Buscar el usuario por ID $usuario = User::findOrFail($id); - $usuario->delete(); + // 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'); + } } diff --git a/app/Models/User.php b/app/Models/User.php index 23b4063..4e5bc5f 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -20,6 +20,10 @@ class User extends Authenticatable protected $fillable = [ 'name', 'email', + 'apellido', + 'puesto', + 'carrera', + 'telefono', 'password', ]; diff --git a/composer.json b/composer.json index 7cf3259..2c5f50d 100644 --- a/composer.json +++ b/composer.json @@ -12,7 +12,7 @@ "laravel/sanctum": "^3.2", "laravel/tinker": "^2.8", "laravel/ui": "^4.6", - "maatwebsite/excel": "^3.1", + "maatwebsite/excel": "^1.1", "phpoffice/phpspreadsheet": "^4.1" }, "require-dev": { diff --git a/config/app.php b/config/app.php index bca112f..07510ef 100644 --- a/config/app.php +++ b/config/app.php @@ -2,6 +2,7 @@ use Illuminate\Support\Facades\Facade; + return [ /* @@ -195,6 +196,7 @@ return [ App\Providers\EventServiceProvider::class, App\Providers\RouteServiceProvider::class, + ], /* diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php index 8bf368e..db1a412 100644 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -16,6 +16,10 @@ return new class extends Migration $table->string('name'); $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); + $table->string('apellido')->nullable(); + $table->string('puesto')->nullable(); + $table->string('carrera')->nullable(); + $table->string('telefono')->nullable(); $table->string('password'); $table->rememberToken(); $table->timestamps(); diff --git a/database/migrations/2025_03_27_135638_add_columneliminar_to_users.php b/database/migrations/2025_03_27_135638_add_columneliminar_to_users.php new file mode 100644 index 0000000..d5bcd05 --- /dev/null +++ b/database/migrations/2025_03_27_135638_add_columneliminar_to_users.php @@ -0,0 +1,28 @@ +boolean('eliminado')->default(false); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('users', function (Blueprint $table) { + $table->dropColumn('eliminado'); + }); + } +}; diff --git a/resources/views/exports/usuarios-pdf.blade.php b/resources/views/exports/usuarios-pdf.blade.php new file mode 100644 index 0000000..29b1550 --- /dev/null +++ b/resources/views/exports/usuarios-pdf.blade.php @@ -0,0 +1,48 @@ + + + +
+ID | +Nombre | +Apellido | +Puesto | +Carrera | +Teléfono | +|
---|---|---|---|---|---|---|
{{ $usuario->id }} | +{{ $usuario->name }} | +{{ $usuario->email }} | +{{ $usuario->apellido }} | +{{ $usuario->puesto }} | +{{ $usuario->carrera }} | +{{ $usuario->telefono }} | +
ID | Nombre | Apellido | +Puesto | +Carrera | +Teléfono | +Estado | Acciones | @if($usuarios->isEmpty())|||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
No hay usuarios registrados. | +No hay usuarios registrados. | |||||||||||
{{ $usuario->id }} | -{{ $usuario->name }} | -{{ $usuario->email }} | -
-
-
-
-
+ {{ $usuario->id }} |
+
+
+ {{ $usuario->name }}
+ |
+ {{ $usuario->email }} |
+ {{ $usuario->apellido }} |
+ {{ $usuario->puesto }} |
+ {{ $usuario->carrera }} |
+ {{ $usuario->telefono }} |
+
+ @if($usuario->eliminado == 0)
+
+ Activo
+
+ @else
+
+ Inactivo
+
+ @endif
+ |
+
+ @if($usuario->eliminado == 1)
+
+ @else
+
+
+
+
+ @endif
|
|