From f17ee26d144924dbeb9998bb0786b5c3699aaf0c Mon Sep 17 00:00:00 2001 From: sergiomarquez778 Date: Thu, 27 Mar 2025 09:49:07 -0600 Subject: [PATCH 1/5] usuarios complementos lala tabla de usuarios modifiacion ene l web etc etc --- app/Exports/MarcasExport.php | 3 +- app/Exports/UsuariosExport.php | 24 +++ app/Http/Controllers/usuariosController.php | 99 ++++++++++-- app/Models/User.php | 4 + composer.json | 2 +- config/app.php | 2 + .../2014_10_12_000000_create_users_table.php | 4 + ..._27_135638_add_columneliminar_to_users.php | 28 ++++ .../views/exports/usuarios-pdf.blade.php | 48 ++++++ resources/views/usuarios.blade.php | 145 ++++++++++++++---- resources/views/usuariosCrearEditar.blade.php | 87 +++++++++++ routes/web.php | 12 +- 12 files changed, 407 insertions(+), 51 deletions(-) create mode 100644 app/Exports/UsuariosExport.php create mode 100644 database/migrations/2025_03_27_135638_add_columneliminar_to_users.php create mode 100644 resources/views/exports/usuarios-pdf.blade.php create mode 100644 resources/views/usuariosCrearEditar.blade.php 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 @@ + + + + + Lista de Usuarios + + + +

Lista de Usuarios

+ + + + + + + + + + + + + + @foreach($usuarios as $usuario) + + + + + + + + + + @endforeach + +
IDNombreEmailApellidoPuestoCarreraTeléfono
{{ $usuario->id }}{{ $usuario->name }}{{ $usuario->email }}{{ $usuario->apellido }}{{ $usuario->puesto }}{{ $usuario->carrera }}{{ $usuario->telefono }}
+ + \ No newline at end of file diff --git a/resources/views/usuarios.blade.php b/resources/views/usuarios.blade.php index 2929466..efb4306 100644 --- a/resources/views/usuarios.blade.php +++ b/resources/views/usuarios.blade.php @@ -2,9 +2,9 @@ @section('content')
- + @if(session('success')) -