From 0474545b1a66bd1650bf183461137c975b40aef4 Mon Sep 17 00:00:00 2001 From: Damian Date: Fri, 14 Mar 2025 13:35:05 -0600 Subject: [PATCH] Version 3 --- app/Http/Controllers/AutoController.php | 69 ++++++++++++++++ app/Http/Controllers/TrabajadorController.php | 82 +++++++++++++++++++ app/Http/Controllers/UsuariosController.php | 5 +- app/Models/Auto.php | 14 ++++ app/Models/Puesto.php | 19 +++++ app/Models/Trabajador.php | 20 +++++ app/Models/User.php | 7 ++ database/factories/AutoFactory.php | 27 ++++++ database/factories/TrabajadorFactory.php | 29 +++++++ ...2014_09_06_173516_create_puestos_table.php | 38 +++++++++ .../2014_10_12_000000_create_users_table.php | 6 ++ .../2025_02_27_155258_create_autos_table.php | 32 ++++++++ ..._03_06_174749_create_trabajadors_table.php | 36 ++++++++ ...3_14_184342_add_column_puesto_to_users.php | 31 +++++++ ...ify_sueldo_column_in_trabajadors_table.php | 22 +++++ database/seeders/AutoSeeder.php | 17 ++++ database/seeders/DatabaseSeeder.php | 5 +- database/seeders/TrabajadorSeeder.php | 18 ++++ resources/views/autos.blade.php | 77 +++++++++++++++++ resources/views/autosCrearEditar.blade.php | 49 +++++++++++ resources/views/layouts/plantilla.blade.php | 38 +++++++++ resources/views/layouts/sidebar.blade.php | 4 +- resources/views/trabajadores.blade.php | 49 +++++++++++ .../views/trabajadoresCrearEditar.blade.php | 66 +++++++++++++++ resources/views/usuarios.blade.php | 3 + resources/views/usuariosCrearEditar.blade.php | 8 ++ routes/web.php | 8 +- 27 files changed, 774 insertions(+), 5 deletions(-) create mode 100644 app/Http/Controllers/AutoController.php create mode 100644 app/Http/Controllers/TrabajadorController.php create mode 100644 app/Models/Auto.php create mode 100644 app/Models/Puesto.php create mode 100644 app/Models/Trabajador.php create mode 100644 database/factories/AutoFactory.php create mode 100644 database/factories/TrabajadorFactory.php create mode 100644 database/migrations/2014_09_06_173516_create_puestos_table.php create mode 100644 database/migrations/2025_02_27_155258_create_autos_table.php create mode 100644 database/migrations/2025_03_06_174749_create_trabajadors_table.php create mode 100644 database/migrations/2025_03_14_184342_add_column_puesto_to_users.php create mode 100644 database/migrations/2026_03_21_000000_modify_sueldo_column_in_trabajadors_table.php create mode 100644 database/seeders/AutoSeeder.php create mode 100644 database/seeders/TrabajadorSeeder.php create mode 100644 resources/views/autos.blade.php create mode 100644 resources/views/autosCrearEditar.blade.php create mode 100644 resources/views/trabajadores.blade.php create mode 100644 resources/views/trabajadoresCrearEditar.blade.php diff --git a/app/Http/Controllers/AutoController.php b/app/Http/Controllers/AutoController.php new file mode 100644 index 0000000..cab4032 --- /dev/null +++ b/app/Http/Controllers/AutoController.php @@ -0,0 +1,69 @@ + $autos]); + } + + /** + * Show the form for creating a new resource. + */ + public function create() + { + return view('autosCrearEditar', ['auto' => null]); + } + + /** + * Store a newly created resource in storage. + */ + public function store(Request $request) + { + $auto = Auto::create($request->all()); + return redirect()->route('autos.index'); + } + + /** + * Display the specified resource. + */ + public function show(Auto $auto) + { + return view('autosCrearEditar', ['auto' => $auto]); + } + + /** + * Show the form for editing the specified resource. + */ + public function edit(Auto $auto) + { + return view('autosCrearEditar', ['auto' => $auto]); + } + + /** + * Update the specified resource in storage. + */ + public function update(Request $request, Auto $auto) + { + $auto->update($request->all()); + return redirect()->route('autos.index'); + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(Auto $auto) + { + $auto->delete(); + return redirect()->route('autos.index'); + } +} diff --git a/app/Http/Controllers/TrabajadorController.php b/app/Http/Controllers/TrabajadorController.php new file mode 100644 index 0000000..6ba8483 --- /dev/null +++ b/app/Http/Controllers/TrabajadorController.php @@ -0,0 +1,82 @@ + $trabajadores]); + } + + /** + * Show the form for creating a new resource. + */ + public function create() + { + $puestos = Puesto::all(); + return view('trabajadoresCrearEditar', ['trabajador' => null, 'puestos' => $puestos]); + } + + /** + * Store a newly created resource in storage. + */ + public function store(Request $request) + { + + $trabajador2 = new Trabajador($request->all()); + $trabajador2->save(); + return redirect()->route('trabajadores.index')->with('succes',value: 'El auto se agregó'); + } + + /** + * Display the specified resource. + */ + public function show(Trabajador $trabajador) + { + // + } + + /** + * Show the form for editing the specified resource. + */ + public function edit($id) + { + $puestos = Puesto::all(); + $trabajador = Trabajador::find($id); + return view('trabajadoresCrearEditar', ['trabajador' => $trabajador, 'puestos' => $puestos])->with(key: 'warning', value:'Actualizado correctamente'); + } + + /** + * Update the specified resource in storage. + */ + public function update(Request $request, $id) + { + $trabajador = Trabajador::find($id); //Busca el trabajador por el id + $trabajador->update($request->all()); //Actualiza los datos del trabajador + return redirect()->route('trabajadores.index')->with(key: 'warning', value:'Actualizado correctamente'); //Redirecciona a la página de index + } + + /** + * Remove the specified resource from storage. + */ + public function destroy($id) + { + $trabajador = Trabajador::find($id); //Busca el trabajador por el id + if($trabajador->puesto_id()!=1){ + $trabajador->delete(); //Elimina el trabajador: + return redirect()->route('trabajadores.index')->with(key: 'succes', value:'Eliminado correctamente'); //Redirecciona a la página de index + }else{ + return redirect()->route('trabajadores.index')->with(key: 'error', value:'No se puede eliminar el trabajador porque no tiene un puesto asignado'); //Redirecciona a la página de index + } + } + +} diff --git a/app/Http/Controllers/UsuariosController.php b/app/Http/Controllers/UsuariosController.php index e66da0e..d2e0333 100644 --- a/app/Http/Controllers/UsuariosController.php +++ b/app/Http/Controllers/UsuariosController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers; use App\Models\User; +use App\Models\Puesto; use Illuminate\Http\Request; class UsuariosController extends Controller @@ -22,7 +23,8 @@ class UsuariosController extends Controller */ public function create() { - return view('usuariosCrearEditar'); + $puestos = Puesto::all(); + return view('usuariosCrearEditar',['puestos'=> $puestos]); } /** @@ -32,6 +34,7 @@ class UsuariosController extends Controller { $user = new User(request()->all()); + $user->password = bcrypt(request()->password); $user->save(); return redirect(route('usuarios')); } diff --git a/app/Models/Auto.php b/app/Models/Auto.php new file mode 100644 index 0000000..e10f2ee --- /dev/null +++ b/app/Models/Auto.php @@ -0,0 +1,14 @@ +hasMany(Trabajador::class,'puesto_id','id'); + } +} diff --git a/app/Models/Trabajador.php b/app/Models/Trabajador.php new file mode 100644 index 0000000..a7fe4e0 --- /dev/null +++ b/app/Models/Trabajador.php @@ -0,0 +1,20 @@ +hasOne(Puesto::class,'id','puesto_id'); + } +} diff --git a/app/Models/User.php b/app/Models/User.php index 23b4063..8909772 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -4,6 +4,7 @@ namespace App\Models; // use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; +use Illuminate\Database\Eloquent\Relations\HasOne; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Laravel\Sanctum\HasApiTokens; @@ -20,6 +21,7 @@ class User extends Authenticatable protected $fillable = [ 'name', 'email', + 'puesto_id', 'password', ]; @@ -41,4 +43,9 @@ class User extends Authenticatable protected $casts = [ 'email_verified_at' => 'datetime', ]; + + public function puesto(): HasOne + { + return $this->hasOne(Puesto::class,'id','puesto_id'); + } } diff --git a/database/factories/AutoFactory.php b/database/factories/AutoFactory.php new file mode 100644 index 0000000..7d3382a --- /dev/null +++ b/database/factories/AutoFactory.php @@ -0,0 +1,27 @@ + + */ +class AutoFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + 'marca' => $this->faker->randomElement(['Toyota', 'Ford', 'Chevrolet', 'Nissan', 'Honda']), + 'modelo' => $this->faker->randomElement(['Corolla', 'F150', 'Camry', 'Altima', 'Civic']), + 'año' => $this->faker->year(), + 'color' => $this->faker->colorName(), + 'precio' => $this->faker->randomFloat(2, 10000, 50000), + ]; + } +} diff --git a/database/factories/TrabajadorFactory.php b/database/factories/TrabajadorFactory.php new file mode 100644 index 0000000..dcd4aa2 --- /dev/null +++ b/database/factories/TrabajadorFactory.php @@ -0,0 +1,29 @@ + + */ +class TrabajadorFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + 'nombre'=> $this->faker->name, + 'telefono'=> $this->faker->phoneNumber(), + 'genero'=> $this->faker->randomElement(['Masculino','Femenino']), + 'sueldo'=> $this->faker->randomFloat(2, 1000, 100000), + 'puesto'=> $this->faker->jobTitle(), + 'numero_seguro'=> $this->faker->randomNumber(8), + 'correo_electronico'=> $this->faker->email(), + ]; + } +} diff --git a/database/migrations/2014_09_06_173516_create_puestos_table.php b/database/migrations/2014_09_06_173516_create_puestos_table.php new file mode 100644 index 0000000..516a314 --- /dev/null +++ b/database/migrations/2014_09_06_173516_create_puestos_table.php @@ -0,0 +1,38 @@ +id(); + $table->string('nombre'); + $table->timestamps(); + }); + + DB::table('puestos')->insert([ + 'nombre' => 'Administrador', + ]); + DB::table('puestos')->insert([ + 'nombre' => 'Mesero', + ]); + DB::table('puestos')->insert([ + 'nombre' => 'Cocinero', + ]); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('puestos'); + } +}; 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 444fafb..41145e4 100644 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -20,6 +20,12 @@ return new class extends Migration $table->rememberToken(); $table->timestamps(); }); + + DB::table('users')->insert([ + 'name' => 'Administrador', + 'email' => 'admin@gmail.com', + 'password' => bcrypt('admin') + ]); } /** diff --git a/database/migrations/2025_02_27_155258_create_autos_table.php b/database/migrations/2025_02_27_155258_create_autos_table.php new file mode 100644 index 0000000..57badb0 --- /dev/null +++ b/database/migrations/2025_02_27_155258_create_autos_table.php @@ -0,0 +1,32 @@ +id(); + $table->string('marca'); + $table->string('modelo'); + $table->integer('año'); + $table->string('color'); + $table->decimal('precio', 8, 2); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('autos'); + } +}; diff --git a/database/migrations/2025_03_06_174749_create_trabajadors_table.php b/database/migrations/2025_03_06_174749_create_trabajadors_table.php new file mode 100644 index 0000000..dda0733 --- /dev/null +++ b/database/migrations/2025_03_06_174749_create_trabajadors_table.php @@ -0,0 +1,36 @@ +id(); + $table->string('nombre'); + $table->string('telefono')->nullable(); + $table->string('genero'); + $table->decimal('sueldo', 10, 2); + $table->string('numero_seguro'); + $table->string('correo_electronico')->nullable(); + $table->unsignedBigInteger('puesto_id'); + $table->timestamps(); + $table->foreign('puesto_id')->references('id')->on('puestos'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('trabajadors'); + } +}; diff --git a/database/migrations/2025_03_14_184342_add_column_puesto_to_users.php b/database/migrations/2025_03_14_184342_add_column_puesto_to_users.php new file mode 100644 index 0000000..4985773 --- /dev/null +++ b/database/migrations/2025_03_14_184342_add_column_puesto_to_users.php @@ -0,0 +1,31 @@ +unsignedBigInteger('puesto_id')->default(1); + $table->foreign('puesto_id')->references('id')->on('puestos'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('users', function (Blueprint $table) { + // + $table->dropColumn('puesto_id'); + }); + } +}; diff --git a/database/migrations/2026_03_21_000000_modify_sueldo_column_in_trabajadors_table.php b/database/migrations/2026_03_21_000000_modify_sueldo_column_in_trabajadors_table.php new file mode 100644 index 0000000..c77f992 --- /dev/null +++ b/database/migrations/2026_03_21_000000_modify_sueldo_column_in_trabajadors_table.php @@ -0,0 +1,22 @@ +decimal('sueldo', 12, 2)->change(); // Permite números más grandes con 2 decimales + }); + } + + public function down() + { + Schema::table('trabajadors', function (Blueprint $table) { + $table->decimal('sueldo', 8, 2)->change(); // Vuelve al tamaño original si necesitas revertir + }); + } +}; diff --git a/database/seeders/AutoSeeder.php b/database/seeders/AutoSeeder.php new file mode 100644 index 0000000..49e0a26 --- /dev/null +++ b/database/seeders/AutoSeeder.php @@ -0,0 +1,17 @@ +count(10)->create(); + Auto::factory()->count(10)->create(); // \App\Models\User::factory(10)->create(); // \App\Models\User::factory()->create([ diff --git a/database/seeders/TrabajadorSeeder.php b/database/seeders/TrabajadorSeeder.php new file mode 100644 index 0000000..38a09c0 --- /dev/null +++ b/database/seeders/TrabajadorSeeder.php @@ -0,0 +1,18 @@ + +
+
+

Autos

+
+
+
+ Agregar Auto + + + + + + + + + + + + @foreach ($autos as $auto) + + + + + + + + + @endforeach + +
MarcaModeloAñoColorPrecio
{{ $auto->marca }}{{ $auto->modelo }}{{ $auto->año }}{{ $auto->color }}{{ $auto->precio }} + Editar + +
+
+
+
+ + + + + + +@endsection diff --git a/resources/views/autosCrearEditar.blade.php b/resources/views/autosCrearEditar.blade.php new file mode 100644 index 0000000..d959d8e --- /dev/null +++ b/resources/views/autosCrearEditar.blade.php @@ -0,0 +1,49 @@ +@extends('layouts.plantilla') + +@section('contenido') +
+
+
+ @if($auto) +

Editar Auto

+ @else +

Crear Auto

+ @endif +
+ +
+ @if($auto) +
+ @csrf + @method('PUT') + @else + + @csrf + @endif +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + Cancelar +
+
+
+
+@endsection diff --git a/resources/views/layouts/plantilla.blade.php b/resources/views/layouts/plantilla.blade.php index 401b765..ccb1a8d 100644 --- a/resources/views/layouts/plantilla.blade.php +++ b/resources/views/layouts/plantilla.blade.php @@ -38,9 +38,47 @@ + + + @if(session('success')) + +@endif + +@if(session('warning')) + +@endif + +@if(session('error')) + +@endif + + diff --git a/resources/views/layouts/sidebar.blade.php b/resources/views/layouts/sidebar.blade.php index 458cde2..5be98b9 100644 --- a/resources/views/layouts/sidebar.blade.php +++ b/resources/views/layouts/sidebar.blade.php @@ -25,9 +25,9 @@ Widgets - Forms + Trabajadores Usuarios - Charts + Autos