From bed975e944369ca4c77d7b9c16f5f0086034fcc0 Mon Sep 17 00:00:00 2001 From: ale Date: Wed, 14 May 2025 23:24:36 -0300 Subject: [PATCH 001/111] Agregada tabla y modelo para roles de usuario --- app/UserRole.php | 10 +++++ ...5_05_15_021941_create_user_roles_table.php | 41 +++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 app/UserRole.php create mode 100644 database/migrations/2025_05_15_021941_create_user_roles_table.php diff --git a/app/UserRole.php b/app/UserRole.php new file mode 100644 index 0000000..67f69f6 --- /dev/null +++ b/app/UserRole.php @@ -0,0 +1,10 @@ +id(); + $table->string('nombre'); + $table->timestamps(); + }); + + $tipos = ["barrio", "admin_barrio", "comision"]; + foreach ($tipos as $tipo) { + UserRole::create([ + "nombre" => $tipo, + ]); + } + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('user_roles'); + } +} -- 2.48.1 From fc367c05a3ad56d9fa2277d8f06a9241168cd165 Mon Sep 17 00:00:00 2001 From: ale Date: Thu, 15 May 2025 00:32:08 -0300 Subject: [PATCH 002/111] Agregado role_id a User --- app/User.php | 2 +- .../2025_05_15_023829_agregar_rol_a_user.php | 43 +++++++++++++++++++ database/seeds/GrupoDeCompraSeeder.php | 39 ++++++++--------- database/seeds/UserSeeder.php | 9 ++-- 4 files changed, 66 insertions(+), 27 deletions(-) create mode 100644 database/migrations/2025_05_15_023829_agregar_rol_a_user.php diff --git a/app/User.php b/app/User.php index 5f45a74..64ea860 100644 --- a/app/User.php +++ b/app/User.php @@ -16,7 +16,7 @@ class User extends Authenticatable * @var array */ protected $fillable = [ - 'name', 'email', 'password', + 'name', 'email', 'password', 'role_id', ]; /** diff --git a/database/migrations/2025_05_15_023829_agregar_rol_a_user.php b/database/migrations/2025_05_15_023829_agregar_rol_a_user.php new file mode 100644 index 0000000..d6e0673 --- /dev/null +++ b/database/migrations/2025_05_15_023829_agregar_rol_a_user.php @@ -0,0 +1,43 @@ +foreignId('role_id'); + }); + + $barrio = UserRole::where('nombre', 'barrio')->first(); + $admin_barrio = UserRole::where('nombre', 'admin_barrio')->first(); + $comision = UserRole::where('nombre', 'comision')->first(); + User::all()->each(function($user) use ($barrio, $comision, $admin_barrio) { + $user->role_id = $user->is_admin ? $admin_barrio->id : + ($user->is_compras ? $comision->id : $barrio->id); + $user->save(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('user', function (Blueprint $table) { + $table->dropForeign('role_id'); + }); + } +} diff --git a/database/seeds/GrupoDeCompraSeeder.php b/database/seeds/GrupoDeCompraSeeder.php index 9e163ef..b714316 100644 --- a/database/seeds/GrupoDeCompraSeeder.php +++ b/database/seeds/GrupoDeCompraSeeder.php @@ -1,8 +1,10 @@ orWhere('nombre', 'barrio_admin')->get(); foreach($registros as $key => $registro){ $gdcToInsert[] = [ @@ -27,29 +30,21 @@ class GrupoDeCompraSeeder extends Seeder 'referente_finanzas' => $registro['referente'] ]; - $usersToInsert[] = [ - 'name' => $registro['barrio'], - 'password' => Hash::make("123"), - "is_admin" => 0, - 'grupo_de_compra_id' => $key - ]; - - $usersToInsert[] = [ - 'name' => $registro['barrio'] . "_admin", - 'password' => Hash::make("123"), - "is_admin" => 1, - 'grupo_de_compra_id' => $key - ]; + foreach($roles as $role) { + $usersToInsert[] = [ + 'name' => $registro['barrio'], + 'password' => Hash::make("123"), + 'role_id' => $role->id, + 'grupo_de_compra_id' => $key, + 'is_admin' => $role->nombre != 'barrio' ? 0 : 1, + ]; + } } foreach (array_chunk($gdcToInsert,DatabaseSeeder::CHUNK_SIZE) as $chunk) - { - DB::table('grupos_de_compra')->insert($chunk); - } + GrupoDeCompra::insert($chunk); foreach (array_chunk($usersToInsert,DatabaseSeeder::CHUNK_SIZE) as $chunk) - { - DB::table('users')->insert($chunk); - } + User::insert($chunk); } } diff --git a/database/seeds/UserSeeder.php b/database/seeds/UserSeeder.php index f2164c1..4ed365d 100644 --- a/database/seeds/UserSeeder.php +++ b/database/seeds/UserSeeder.php @@ -1,5 +1,7 @@ 'compras', + 'name' => 'comi', 'password' => Hash::make("123"), + 'role_id' => UserRole::where('nombre', 'comision')->first()->id, 'is_admin' => 0, 'is_compras' => 1 ]; foreach (array_chunk($usersToInsert,DatabaseSeeder::CHUNK_SIZE) as $chunk) - { - DB::table('users')->insert($chunk); - } + User::insert($chunk); } } -- 2.48.1 From f8b487cebd07707cda00034920fdb5b8f87c803b Mon Sep 17 00:00:00 2001 From: ale Date: Thu, 15 May 2025 00:52:12 -0300 Subject: [PATCH 003/111] Tablas simplificadas --- .../2025_05_15_033316_simplificar_users.php | 45 +++++++++++++++++++ .../2025_05_15_033711_simplificar_barrios.php | 40 +++++++++++++++++ ...025_05_15_034325_simplificar_productos.php | 44 ++++++++++++++++++ ..._034910_simplificar_producto_subpedido.php | 32 +++++++++++++ 4 files changed, 161 insertions(+) create mode 100644 database/migrations/2025_05_15_033316_simplificar_users.php create mode 100644 database/migrations/2025_05_15_033711_simplificar_barrios.php create mode 100644 database/migrations/2025_05_15_034325_simplificar_productos.php create mode 100644 database/migrations/2025_05_15_034910_simplificar_producto_subpedido.php diff --git a/database/migrations/2025_05_15_033316_simplificar_users.php b/database/migrations/2025_05_15_033316_simplificar_users.php new file mode 100644 index 0000000..b97e20a --- /dev/null +++ b/database/migrations/2025_05_15_033316_simplificar_users.php @@ -0,0 +1,45 @@ +dropColumn(['is_admin', 'is_compras']); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('users', function (Blueprint $table) { + $table->boolean('is_admin')->default(false); + $table->boolean('is_compras')->default(false); + }); + + $admin_barrio = UserRole::where('nombre', 'admin_barrio')->first(); + $comision = UserRole::where('nombre', 'comision')->first(); + foreach (User::all() as $user) { + if ($user->role_id == $admin_barrio->id) + $user->is_admin = true; + if ($user->role_id == $comision->id) + $user->is_compras = true; + $user->save(); + } + } +} diff --git a/database/migrations/2025_05_15_033711_simplificar_barrios.php b/database/migrations/2025_05_15_033711_simplificar_barrios.php new file mode 100644 index 0000000..f7d4e6e --- /dev/null +++ b/database/migrations/2025_05_15_033711_simplificar_barrios.php @@ -0,0 +1,40 @@ +dropColumn([ + 'cantidad_de_nucleos', + 'telefono', + 'correo', + 'referente_finanzas', + ]); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('grupos_de_compra', function (Blueprint $table) { + $table->double('cantidad_de_nucleos'); + $table->string('telefono'); + $table->string('correo'); + $table->string('referente_finanzas'); + }); + } +} diff --git a/database/migrations/2025_05_15_034325_simplificar_productos.php b/database/migrations/2025_05_15_034325_simplificar_productos.php new file mode 100644 index 0000000..079b389 --- /dev/null +++ b/database/migrations/2025_05_15_034325_simplificar_productos.php @@ -0,0 +1,44 @@ +dropColumn([ + 'presentacion', + 'stock', + 'imagen_id', + 'descripcion', + 'apto_veganxs', + 'apto_celiacxs', + ]); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('productos', function (Blueprint $table) { + $table->integer('presentacion')->nullable(); + $table->integer('stock')->nullable(); + $table->foreignId('imagen_id')->nullable(); + $table->string('descripcion')->nullable(); + $table->boolean('apto_veganxs')->nullable(); + $table->boolean('apto_celiacxs')->nullable(); + }); + } +} diff --git a/database/migrations/2025_05_15_034910_simplificar_producto_subpedido.php b/database/migrations/2025_05_15_034910_simplificar_producto_subpedido.php new file mode 100644 index 0000000..ce6245f --- /dev/null +++ b/database/migrations/2025_05_15_034910_simplificar_producto_subpedido.php @@ -0,0 +1,32 @@ +dropColumn('total'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('producto_subpedido', function (Blueprint $table) { + $table->double('total'); + }); + } +} -- 2.48.1 From 50d77b010867da32456f71766434bf4b20f30185 Mon Sep 17 00:00:00 2001 From: ale Date: Thu, 15 May 2025 01:12:49 -0300 Subject: [PATCH 004/111] Asignacion simplificada --- database/migrations/2025_05_15_033316_simplificar_users.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/database/migrations/2025_05_15_033316_simplificar_users.php b/database/migrations/2025_05_15_033316_simplificar_users.php index b97e20a..649a912 100644 --- a/database/migrations/2025_05_15_033316_simplificar_users.php +++ b/database/migrations/2025_05_15_033316_simplificar_users.php @@ -35,10 +35,8 @@ class SimplificarUsers extends Migration $admin_barrio = UserRole::where('nombre', 'admin_barrio')->first(); $comision = UserRole::where('nombre', 'comision')->first(); foreach (User::all() as $user) { - if ($user->role_id == $admin_barrio->id) - $user->is_admin = true; - if ($user->role_id == $comision->id) - $user->is_compras = true; + $user->is_admin = $user->role_id == $admin_barrio->id; + $user->is_compras = $user->role_id == $comision->id; $user->save(); } } -- 2.48.1 From 2faea3b0079a0b892ca8986e358332fd2fc74972 Mon Sep 17 00:00:00 2001 From: ale Date: Thu, 15 May 2025 01:13:09 -0300 Subject: [PATCH 005/111] Modelos simplificados --- app/GrupoDeCompra.php | 4 +--- app/Subpedido.php | 1 - 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/app/GrupoDeCompra.php b/app/GrupoDeCompra.php index 3a0fe18..c744346 100644 --- a/app/GrupoDeCompra.php +++ b/app/GrupoDeCompra.php @@ -14,10 +14,8 @@ use Illuminate\Support\Facades\Log; class GrupoDeCompra extends Model { - public $timestamps = false; - protected $fillable = ["nombre", "region", "telefono", "correo", "referente_finanzas", "cantidad_de_nucleos", "fila", "devoluciones_habilitadas"]; + protected $fillable = ["nombre", "region", "devoluciones_habilitadas"]; protected $table = 'grupos_de_compra'; - protected $hidden = ['password']; public function subpedidos(): HasMany { diff --git a/app/Subpedido.php b/app/Subpedido.php index 0370020..a0c6b5c 100644 --- a/app/Subpedido.php +++ b/app/Subpedido.php @@ -12,7 +12,6 @@ use App\Filtros\FiltroDeSubpedido; class Subpedido extends Model { - public $timestamps = false; protected $fillable = ['grupo_de_compra_id', 'aprobado', 'nombre', 'devoluciones_total', 'devoluciones_notas']; public function productos(): BelongsToMany -- 2.48.1 From eb3e4730bf6f0ce6e67fa746ac037067c462d40f Mon Sep 17 00:00:00 2001 From: ale Date: Thu, 15 May 2025 01:13:38 -0300 Subject: [PATCH 006/111] Agregado es solidaio y eliminado proveedor --- app/Producto.php | 12 +--- app/Proveedor.php | 18 ------ ...2025_05_15_035305_agregar_es_solidario.php | 38 ++++++++++++ .../2025_05_15_035807_eliminar_proveedor.php | 59 +++++++++++++++++++ 4 files changed, 100 insertions(+), 27 deletions(-) delete mode 100644 app/Proveedor.php create mode 100644 database/migrations/2025_05_15_035305_agregar_es_solidario.php create mode 100644 database/migrations/2025_05_15_035807_eliminar_proveedor.php diff --git a/app/Producto.php b/app/Producto.php index 9b412c3..2a8406b 100644 --- a/app/Producto.php +++ b/app/Producto.php @@ -15,21 +15,15 @@ use Illuminate\Support\Facades\DB; class Producto extends Model { - public $timestamps = false; - protected $fillable = ["nombre", "precio", "presentacion", "stock", "categoria"]; + protected $fillable = ["nombre", "precio", "categoria"]; static int $paginarPorDefecto = 10; public function subpedidos(): BelongsToMany { - return $this->belongsToMany('App\Subpedido', 'productos_subpedidos')->withPivot(["cantidad", "notas"]); + return $this->belongsToMany(Subpedido::class, 'productos_subpedidos')->withPivot(["cantidad", "notas"]); } - public function proveedor(): BelongsTo - { - return $this->belongsTo('App\Proveedor'); - } - - //Este método permite que se apliquen los filtros al hacer una request (por ejemplo, de búsqueda) + // Este método permite que se apliquen los filtros al hacer una request (por ejemplo, de búsqueda) public function scopeFiltrar($query, FiltroDeProducto $filtros): Builder { return $filtros->aplicar($query); diff --git a/app/Proveedor.php b/app/Proveedor.php deleted file mode 100644 index 07dbc40..0000000 --- a/app/Proveedor.php +++ /dev/null @@ -1,18 +0,0 @@ -hasMany('App\Producto'); - } -} diff --git a/database/migrations/2025_05_15_035305_agregar_es_solidario.php b/database/migrations/2025_05_15_035305_agregar_es_solidario.php new file mode 100644 index 0000000..e4797c4 --- /dev/null +++ b/database/migrations/2025_05_15_035305_agregar_es_solidario.php @@ -0,0 +1,38 @@ +boolean('es_solidario')->default(false); + }); + + foreach (Producto::all() as $producto) { + $producto->es_solidario = $producto->proveedor_id != null; + $producto->save(); + } + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('productos', function (Blueprint $table) { + $table->dropColumn('es_solidario'); + }); + } +} diff --git a/database/migrations/2025_05_15_035807_eliminar_proveedor.php b/database/migrations/2025_05_15_035807_eliminar_proveedor.php new file mode 100644 index 0000000..52c4210 --- /dev/null +++ b/database/migrations/2025_05_15_035807_eliminar_proveedor.php @@ -0,0 +1,59 @@ +dropColumn('proveedor_id'); + }); + Schema::dropIfExists('proveedores'); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::create('proveedores', function (Blueprint $table) { + $table->id(); + $table->string('nombre'); + $table->string('direccion')->nullable(); + $table->string('telefono')->nullable(); + $table->string('correo')->nullable(); + $table->boolean('economia_solidaria')->nullable(); + $table->boolean('nacional')->nullable(); + $table->text('detalles_de_pago')->nullable(); + $table->text('comentario')->nullable(); + $table->timestamps(); + }); + + Schema::table('productos', function (Blueprint $table) { + $table->foreignId('proveedor_id')->nullable(); + }); + + $proveedor_id = DB::table('proveedores')->insertGetId([ + ['nombre' => 'Proveedor de economía solidaria', + 'economia_solidaria' => 1, + 'nacional' => 1] + ]); + + foreach (Producto::all() as $producto) { + $producto->proveedor_id = $producto->es_solidario ? $proveedor_id : null; + $producto->save(); + } + } +} -- 2.48.1 From 2245eb49390bbd6a6d3e8477666a5b6bb4746451 Mon Sep 17 00:00:00 2001 From: ale Date: Thu, 15 May 2025 01:16:54 -0300 Subject: [PATCH 007/111] Eliminado admin --- app/Admin.php | 10 ------ .../2025_05_15_041404_eliminar_admin.php | 35 +++++++++++++++++++ 2 files changed, 35 insertions(+), 10 deletions(-) delete mode 100644 app/Admin.php create mode 100644 database/migrations/2025_05_15_041404_eliminar_admin.php diff --git a/app/Admin.php b/app/Admin.php deleted file mode 100644 index 9745b32..0000000 --- a/app/Admin.php +++ /dev/null @@ -1,10 +0,0 @@ -id(); + $table->string('nombre'); + $table->foreignId('grupo_de_compra_id'); + $table->string('email'); + $table->string('contrasena'); + $table->timestamps(); + }); + } +} -- 2.48.1 From b330d991c664baa99b2fca44d843a914770fcfa9 Mon Sep 17 00:00:00 2001 From: ale Date: Thu, 15 May 2025 19:38:47 -0300 Subject: [PATCH 008/111] Agregado y registrado middleware para usar UserRole --- app/Http/Kernel.php | 2 ++ app/Http/Middleware/CheckRole.php | 25 +++++++++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 app/Http/Middleware/CheckRole.php diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 243f1f2..ddef983 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -2,6 +2,7 @@ namespace App\Http; +use App\Http\Middleware\CheckRole; use Illuminate\Foundation\Http\Kernel as HttpKernel; use Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful; @@ -58,6 +59,7 @@ class Kernel extends HttpKernel 'auth' => \App\Http\Middleware\Authenticate::class, 'admin' => \App\Http\Middleware\Admin::class, 'compras' => \App\Http\Middleware\Compras::class, + 'role' => \App\Http\Middleware\CheckRole::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, diff --git a/app/Http/Middleware/CheckRole.php b/app/Http/Middleware/CheckRole.php new file mode 100644 index 0000000..daaf84c --- /dev/null +++ b/app/Http/Middleware/CheckRole.php @@ -0,0 +1,25 @@ +first()->id; + return $request->user()->role_id == $role_id ? $next($request) + : response('No tenés permiso para esto.', 403); + } +} -- 2.48.1 From de1bae86203bda73e7e25eb0842eeac645dd97a5 Mon Sep 17 00:00:00 2001 From: ale Date: Thu, 15 May 2025 19:39:17 -0300 Subject: [PATCH 009/111] Simplificado ProductoResource --- app/Http/Resources/ProductoResource.php | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/app/Http/Resources/ProductoResource.php b/app/Http/Resources/ProductoResource.php index 677af54..bf6eb8f 100644 --- a/app/Http/Resources/ProductoResource.php +++ b/app/Http/Resources/ProductoResource.php @@ -20,13 +20,8 @@ class ProductoResource extends JsonResource 'nombre' => $this->nombre, 'precio' => $this->precio, 'categoria' => $this->categoria, - 'proveedor' => optional($this->proveedor)->nombre, - 'economia_solidaria' => optional($this->proveedor)->economia_solidaria, - 'nacional' => optional($this->proveedor)->nacional, - 'imagen' => optional($this->poster)->url(), - 'descripcion' => $this->descripcion, - 'apto_veganxs' => $this->apto_veganxs, - 'apto_celiacxs' => $this->apto_celiacxs, + 'economia_solidaria' => $this->es_solidario, + 'nacional' => $this->es_solidario, 'requiere_notas' => $this->requiere_notas, ]; } -- 2.48.1 From 2e78d39f12cbdf7287a2e031a183e9cb41a74f2e Mon Sep 17 00:00:00 2001 From: ale Date: Thu, 15 May 2025 19:45:30 -0300 Subject: [PATCH 010/111] Reemplazo de logica de proovedor por es_solidario --- app/Helpers/CanastaHelper.php | 38 ++++++++--------------------------- 1 file changed, 8 insertions(+), 30 deletions(-) diff --git a/app/Helpers/CanastaHelper.php b/app/Helpers/CanastaHelper.php index 7a80fee..84a6ab0 100644 --- a/app/Helpers/CanastaHelper.php +++ b/app/Helpers/CanastaHelper.php @@ -3,14 +3,12 @@ namespace App\Helpers; use App\Producto; -use App\Proveedor; use App\CanastaLog; use DatabaseSeeder; use Illuminate\Support\Arr; use Illuminate\Support\Facades\DB; use Illuminate\Support\Str; - class CanastaHelper { const TIPO = "Tipo"; @@ -39,23 +37,16 @@ class CanastaHelper $categoria = ''; foreach($registros as $i => $registro) { - // saltear filas que no tienen tipo - if (self::noTieneTipo($registro)) { - var_dump("no hay tipo en la fila " . $i); + // saltear bono de transporte y filas que no tienen tipo + if (self::noTieneTipo($registro) || $registro[self::TIPO] == "T") continue; - } - - // saltear bono de transporte - if ($registro[self::TIPO] == "T"){ - continue; - } // obtener categoria si no hay producto if ($registro[self::PRODUCTO] == '') { // no es la pregunta de la copa? if (!Str::contains($registro[self::TIPO],"¿")) $categoria = $registro[self::TIPO]; - continue; + continue; // saltear si es la pregunta de la copa } // completar producto @@ -64,33 +55,20 @@ class CanastaHelper 'categoria' => $categoria, 'nombre' => trim(str_replace('*', '',$registro[self::PRODUCTO])), 'precio' => $registro[self::PRECIO], - 'proveedor_id' => self::obtenerProveedor($registro[self::PRODUCTO]), + 'es_solidario' => Str::contains($registro[self::PRODUCTO],"*"), 'bono' => preg_match(self::REGEX_BONO, $registro[self::TIPO]), 'requiere_notas'=> $registro[self::TIPO] == self::PRODUCTO_TALLE_COLOR, ]; } - foreach (array_chunk($toInsert,DatabaseSeeder::CHUNK_SIZE) as $chunk) { - DB::table('productos')->insert($chunk); - } + foreach (array_chunk($toInsert,DatabaseSeeder::CHUNK_SIZE) as $chunk) + Producto::insert($chunk); self::agregarBonoBarrial(); self::log($archivo, self::CANASTA_CARGADA); } - private static function obtenerProveedor($nombre) { - $result = null; - if (Str::contains($nombre,"*")){ - $result = Proveedor::firstOrCreate([ - 'nombre' => 'Proveedor de economía solidaria', - 'economia_solidaria' => 1, - 'nacional' => 1 - ])->id; - } - return $result; - } - /** * @param $path * @param $descripcion @@ -122,13 +100,13 @@ class CanastaHelper return Str::contains($c, 'BONO'); }); - DB::table('productos')->insert([ + Producto::create([ 'fila' => 420, 'nombre' => "Bono barrial", 'precio' => 20, 'categoria' => $categoria, 'bono' => 1, - 'proveedor_id' => null, + 'es_solidario' => 0, 'requiere_notas'=> false, ]); } -- 2.48.1 From a9e9966c937b9fa1f43c1ce99f97b8a8b4d0804d Mon Sep 17 00:00:00 2001 From: ale Date: Thu, 15 May 2025 20:19:07 -0300 Subject: [PATCH 011/111] Refactor de login y home para que dependan del UserRole --- app/Http/Controllers/Auth/LoginController.php | 9 +----- app/Http/Controllers/RouteController.php | 30 +++++++++++++++++++ app/Http/Middleware/Authenticate.php | 8 ++++- resources/views/auth/admin_login.blade.php | 2 +- resources/views/auth/compras_login.blade.php | 2 +- resources/views/auth/login.blade.php | 2 +- routes/web.php | 19 ++++++------ 7 files changed, 50 insertions(+), 22 deletions(-) create mode 100644 app/Http/Controllers/RouteController.php diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index c4092fa..f8386c0 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -31,14 +31,7 @@ class LoginController extends Controller protected function authenticated(Request $request, $user) { - if ($user->is_compras) { - return redirect('compras/pedidos'); - } else if ($user->is_admin) { - session(['admin_gdc' => $user->grupo_de_compra_id]); - return redirect('admin/pedidos'); - } else { - return redirect('/'); - } + return redirect('/'); } /** diff --git a/app/Http/Controllers/RouteController.php b/app/Http/Controllers/RouteController.php new file mode 100644 index 0000000..8802251 --- /dev/null +++ b/app/Http/Controllers/RouteController.php @@ -0,0 +1,30 @@ +first(); + $admin = UserRole::where('nombre', 'admin_barrio')->first(); + $comision = UserRole::where('nombre', 'comision')->first(); + + switch ($request->user()->role_id) { + case $barrio->id: + return redirect('/productos'); + case $admin->id: + return redirect('/admin'); + case $comision->id: + return redirect('/compras'); + default: + abort(400, 'Rol de usuario invalido'); + } + } +} diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php index 704089a..e499bdc 100644 --- a/app/Http/Middleware/Authenticate.php +++ b/app/Http/Middleware/Authenticate.php @@ -3,6 +3,7 @@ namespace App\Http\Middleware; use Illuminate\Auth\Middleware\Authenticate as Middleware; +use Illuminate\Support\Facades\Auth; class Authenticate extends Middleware { @@ -14,7 +15,12 @@ class Authenticate extends Middleware */ protected function redirectTo($request) { - if (! $request->expectsJson()) { + if (!$request->expectsJson()) { + $path = $request->path(); + if (preg_match('~^admin.*~i', $path)) + return route('admin.login'); + if (preg_match('~^compras.*~i', $path)) + return route('compras.login'); return route('login'); } } diff --git a/resources/views/auth/admin_login.blade.php b/resources/views/auth/admin_login.blade.php index f1d4a07..c288df8 100644 --- a/resources/views/auth/admin_login.blade.php +++ b/resources/views/auth/admin_login.blade.php @@ -22,7 +22,7 @@ @enderror -
+ @csrf diff --git a/resources/views/auth/compras_login.blade.php b/resources/views/auth/compras_login.blade.php index 6217038..ba28780 100644 --- a/resources/views/auth/compras_login.blade.php +++ b/resources/views/auth/compras_login.blade.php @@ -22,7 +22,7 @@ Contraseña incorrecta, intentalo nuevamente. @enderror - + @csrf
diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php index 822042a..8425226 100644 --- a/resources/views/auth/login.blade.php +++ b/resources/views/auth/login.blade.php @@ -24,7 +24,7 @@ @enderror -
+ @csrf diff --git a/routes/web.php b/routes/web.php index 87ab4af..38ad6b1 100644 --- a/routes/web.php +++ b/routes/web.php @@ -20,13 +20,11 @@ if (App::environment('production')) { URL::forceScheme('https'); } -Route::get('/', 'ProductoController@index')->name('productos'); +Route::get('/', 'RouteController@home')->name('home'); Auth::routes(['register' => false]); -Route::get('/productos', 'ProductoController@index')->name('productos.index'); - -Route::get('/admin', 'AdminController@show')->name('admin_login.show'); +Route::get('/admin/login', 'AdminController@show')->name('admin.login'); Route::get('/admin/obtener_sesion', function() { return [ @@ -34,8 +32,8 @@ Route::get('/admin/obtener_sesion', function() { ]; })->name('admin_obtener_sesion'); -Route::middleware(['auth', 'admin'])->group( function () { - Route::get('/admin/pedidos', 'AdminController@index')->name('admin_login.index'); +Route::middleware(['auth', 'role:admin_barrio'])->group( function () { + Route::get('/admin', 'AdminController@index')->name('admin.pedidos'); Route::get('/admin/exportar-planillas-a-pdf/{gdc}', 'AdminController@exportarPedidosAPdf'); @@ -44,7 +42,8 @@ Route::middleware(['auth', 'admin'])->group( function () { Route::get('/admin/exportar-pedido-con-nucleos-a-csv/{gdc}', 'AdminController@exportarPedidoConNucleosACSV'); }); -Route::middleware('auth')->group( function() { +Route::middleware(['auth', 'role:barrio'])->group( function() { + Route::get('/productos', 'ProductoController@index')->name('productos.index'); Route::name('subpedidos.')->prefix("subpedidos")->group( function() { Route::get('/', function() { @@ -77,10 +76,10 @@ Route::middleware('auth')->group( function() { }); }); -Route::get('/compras', 'ComprasController@show')->name('compras_login.show'); +Route::get('/compras/login', 'ComprasController@show')->name('compras.login'); -Route::middleware(['compras'])->group( function() { - Route::get('/compras/pedidos', 'ComprasController@indexPedidos')->name('compras.pedidos'); +Route::middleware(['auth', 'role:comision'])->group( function() { + Route::get('/compras', 'ComprasController@indexPedidos')->name('compras.pedidos'); Route::get('/compras/pedidos/descargar', 'ComprasController@descargarPedidos')->name('compras.pedidos.descargar'); Route::get('/compras/pedidos/notas', 'ComprasController@descargarNotas')->name('compras.pedidos.descargar'); Route::get('/compras/pedidos/pdf', 'ComprasController@pdf')->name('compras.pedidos.pdf'); -- 2.48.1 From f0f046d3cb3779aa5fd3b83e8c5af08c2b668694 Mon Sep 17 00:00:00 2001 From: ale Date: Fri, 16 May 2025 14:46:14 -0300 Subject: [PATCH 012/111] Quitadas referencias a proveedor --- resources/js/components/pedidos/ProductoCard.vue | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/js/components/pedidos/ProductoCard.vue b/resources/js/components/pedidos/ProductoCard.vue index 45eff38..b1f6740 100644 --- a/resources/js/components/pedidos/ProductoCard.vue +++ b/resources/js/components/pedidos/ProductoCard.vue @@ -56,8 +56,7 @@ export default {

{{ producto.nombre }}

-

- {{ enChismosa }} en chismosa + {{ enChismosa }} en chismosa

-- 2.48.1 From 8ad179c61c8426f478b449dcfc828b32b22afd5b Mon Sep 17 00:00:00 2001 From: ale Date: Fri, 16 May 2025 14:53:02 -0300 Subject: [PATCH 013/111] Quitadas import no usado --- app/Producto.php | 1 - 1 file changed, 1 deletion(-) diff --git a/app/Producto.php b/app/Producto.php index 2a8406b..da18d78 100644 --- a/app/Producto.php +++ b/app/Producto.php @@ -7,7 +7,6 @@ use App\Helpers\CsvHelper; use App\Helpers\TransporteHelper; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; -use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Http\Request; use Illuminate\Support\Collection; -- 2.48.1 From 0b445ee1c554e21ed4397cf705b96c84a7f0a787 Mon Sep 17 00:00:00 2001 From: ale Date: Fri, 16 May 2025 14:53:23 -0300 Subject: [PATCH 014/111] Cambio en referencia --- resources/js/components/pedidos/ProductoCard.vue | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/resources/js/components/pedidos/ProductoCard.vue b/resources/js/components/pedidos/ProductoCard.vue index b1f6740..b2012b9 100644 --- a/resources/js/components/pedidos/ProductoCard.vue +++ b/resources/js/components/pedidos/ProductoCard.vue @@ -1,6 +1,9 @@ diff --git a/resources/js/components/admin/CaracteristicasOpcionales.vue b/resources/js/components/admin/CaracteristicasOpcionales.vue index 242dfb2..26bd5f4 100644 --- a/resources/js/components/admin/CaracteristicasOpcionales.vue +++ b/resources/js/components/admin/CaracteristicasOpcionales.vue @@ -8,8 +8,7 @@ export default { caracteristicas: [ { id: "devoluciones", - nombre: "Devoluciones", - habilitada: false + nombre: "Devoluciones" }, ] } @@ -27,16 +26,15 @@ export default { - - +

diff --git a/resources/js/components/admin/DropdownDescargar.vue b/resources/js/components/admin/DropdownDescargar.vue index 0b95488..08ccd4a 100644 --- a/resources/js/components/admin/DropdownDescargar.vue +++ b/resources/js/components/admin/DropdownDescargar.vue @@ -14,13 +14,13 @@ @@ -51,19 +52,25 @@ - + -- 2.48.1 From da5f0051c8c6acdab3983233f55c2c62c61e98fe Mon Sep 17 00:00:00 2001 From: ale Date: Mon, 19 May 2025 03:02:51 -0300 Subject: [PATCH 036/111] Agregado modulo de login para regiones y barrios --- resources/js/store/modules/login.js | 51 +++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 resources/js/store/modules/login.js diff --git a/resources/js/store/modules/login.js b/resources/js/store/modules/login.js new file mode 100644 index 0000000..704a882 --- /dev/null +++ b/resources/js/store/modules/login.js @@ -0,0 +1,51 @@ +import axios from "axios"; + +const state = { + regiones: null, + grupos_de_compra: null, + region_elegida: null, + grupo_de_compra_elegido: null, +}; + +const mutations = { + setRegiones(state, { regiones }) { + state.regiones = regiones; + }, + setRegionYBarrios(state, { region, grupos_de_compra }) { + state.region_elegida = region; + state.grupos_de_compra = grupos_de_compra; + }, + selectGrupoDeCompra(state, { grupo_de_compra }) { + state.grupo_de_compra_elegido = grupo_de_compra; + }, +}; + +const actions = { + async getRegiones({ commit }) { + const response = await axios.get("/api/regiones"); + commit('setRegiones', { regiones: response.data }); + }, + async selectRegion({ commit }, { region }) { + const response = await axios.get("/api/grupos-de-compra"); + commit('setRegionYBarrios', { region: region, grupos_de_compra: response.data[region] }); + } +}; + +const getters = { + admin() { + return window.location.pathname.startsWith('/admin'); + }, + mensajes() { + return { + mensaje: `Contraseña de ${getters.admin() ? 'administración ' : ''}del barrio`, + ayuda: `Si no la sabés, consultá a ${getters.admin() ? 'la comisión informática ' : 'tus compañerxs'}.` }; + }, +}; + +export default { + namespaced: true, + state, + mutations, + actions, + getters, +}; -- 2.48.1 From fe292802cd0c35afd81f2db519649ab67a10ca5b Mon Sep 17 00:00:00 2001 From: ale Date: Mon, 19 May 2025 03:04:29 -0300 Subject: [PATCH 037/111] =?UTF-8?q?Clase=20login=20gen=C3=A9rica=20para=20?= =?UTF-8?q?barrio=20y=20admin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/js/components/comunes/Login.vue | 57 +++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 resources/js/components/comunes/Login.vue diff --git a/resources/js/components/comunes/Login.vue b/resources/js/components/comunes/Login.vue new file mode 100644 index 0000000..9da6903 --- /dev/null +++ b/resources/js/components/comunes/Login.vue @@ -0,0 +1,57 @@ + + + + + + -- 2.48.1 From fe57e8c6b31394248c3e2c19a7b90263713f2dbb Mon Sep 17 00:00:00 2001 From: ale Date: Mon, 19 May 2025 03:05:06 -0300 Subject: [PATCH 038/111] BarrioSelect y RegionSelect usan la store --- .../js/components/comunes/BarrioSelect.vue | 69 +++++++++---------- .../js/components/comunes/RegionSelect.vue | 54 ++++++++------- 2 files changed, 62 insertions(+), 61 deletions(-) diff --git a/resources/js/components/comunes/BarrioSelect.vue b/resources/js/components/comunes/BarrioSelect.vue index 6743f4b..215e449 100644 --- a/resources/js/components/comunes/BarrioSelect.vue +++ b/resources/js/components/comunes/BarrioSelect.vue @@ -1,13 +1,19 @@ diff --git a/resources/js/components/comunes/RegionSelect.vue b/resources/js/components/comunes/RegionSelect.vue index 55d6c8f..ca543bd 100644 --- a/resources/js/components/comunes/RegionSelect.vue +++ b/resources/js/components/comunes/RegionSelect.vue @@ -1,12 +1,20 @@ -- 2.48.1 From eee3f53672eb92f91e328fd797e4816b6f557a14 Mon Sep 17 00:00:00 2001 From: ale Date: Mon, 19 May 2025 03:05:23 -0300 Subject: [PATCH 039/111] Agregado modulo a la store --- resources/js/store/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/resources/js/store/index.js b/resources/js/store/index.js index 91e59ed..73dd998 100644 --- a/resources/js/store/index.js +++ b/resources/js/store/index.js @@ -1,11 +1,13 @@ import Vue from 'vue'; import Vuex from 'vuex'; import admin from "./modules/admin"; +import login from "./modules/login"; Vue.use(Vuex); export default new Vuex.Store({ modules: { admin, + login, }, }); -- 2.48.1 From 4b3ab565655cb62b108897c469599096a07e0b48 Mon Sep 17 00:00:00 2001 From: ale Date: Mon, 19 May 2025 03:05:34 -0300 Subject: [PATCH 040/111] Cambio a LoginForm --- resources/js/components/admin/Login.vue | 56 ------------------- resources/js/components/comunes/LoginForm.vue | 35 ++++++++++++ resources/js/components/pedidos/Login.vue | 55 ------------------ resources/views/auth/admin_login.blade.php | 5 +- resources/views/auth/login.blade.php | 9 ++- 5 files changed, 41 insertions(+), 119 deletions(-) delete mode 100644 resources/js/components/admin/Login.vue create mode 100644 resources/js/components/comunes/LoginForm.vue delete mode 100644 resources/js/components/pedidos/Login.vue diff --git a/resources/js/components/admin/Login.vue b/resources/js/components/admin/Login.vue deleted file mode 100644 index cc9b07b..0000000 --- a/resources/js/components/admin/Login.vue +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - diff --git a/resources/js/components/comunes/LoginForm.vue b/resources/js/components/comunes/LoginForm.vue new file mode 100644 index 0000000..68bb05b --- /dev/null +++ b/resources/js/components/comunes/LoginForm.vue @@ -0,0 +1,35 @@ + + + + + diff --git a/resources/js/components/pedidos/Login.vue b/resources/js/components/pedidos/Login.vue deleted file mode 100644 index 9b8161e..0000000 --- a/resources/js/components/pedidos/Login.vue +++ /dev/null @@ -1,55 +0,0 @@ - - - - - diff --git a/resources/views/auth/admin_login.blade.php b/resources/views/auth/admin_login.blade.php index c288df8..4810c55 100644 --- a/resources/views/auth/admin_login.blade.php +++ b/resources/views/auth/admin_login.blade.php @@ -21,11 +21,10 @@ Contraseña incorrecta, intentalo nuevamente. @enderror - + @csrf - - + diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php index 8425226..0962900 100644 --- a/resources/views/auth/login.blade.php +++ b/resources/views/auth/login.blade.php @@ -24,11 +24,10 @@ @enderror -
- @csrf - - -
+
+ @csrf + +
-- 2.48.1 From 5b65bc5d9fc4dd718791fdcfcb0b90bebef347bc Mon Sep 17 00:00:00 2001 From: ale Date: Mon, 19 May 2025 15:01:30 -0300 Subject: [PATCH 041/111] Cambio en referencias --- resources/js/components/pedidos/Body.vue | 12 +++++++++--- .../js/components/pedidos/CategoriasContainer.vue | 1 + .../js/components/pedidos/ProductosContainer.vue | 8 ++++++-- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/resources/js/components/pedidos/Body.vue b/resources/js/components/pedidos/Body.vue index c1fbd44..d0e2972 100644 --- a/resources/js/components/pedidos/Body.vue +++ b/resources/js/components/pedidos/Body.vue @@ -1,13 +1,19 @@ -- 2.48.1 From 0dc8f39f071e4d00be70ba753bcdeba16cc3df7d Mon Sep 17 00:00:00 2001 From: ale Date: Wed, 21 May 2025 18:19:39 -0300 Subject: [PATCH 053/111] Cambio logica para usar modulo pedidos + cambios en migas --- resources/js/components/comunes/NavBar.vue | 1 - .../pedidos/CategoriasContainer.vue | 68 +++++++++--------- resources/js/components/pedidos/NavMigas.vue | 13 ++-- .../components/pedidos/ProductosContainer.vue | 70 ++++++------------- 4 files changed, 59 insertions(+), 93 deletions(-) diff --git a/resources/js/components/comunes/NavBar.vue b/resources/js/components/comunes/NavBar.vue index bb5a6d4..de090fb 100644 --- a/resources/js/components/comunes/NavBar.vue +++ b/resources/js/components/comunes/NavBar.vue @@ -56,7 +56,6 @@ export default { }, buscar() { if (this.burgerActiva) this.toggleBurger() - Event.$emit("migas-setear-como-inicio", this.$rootMiga) Event.$emit("filtrar-productos",'nombre',this.searchString) } }, diff --git a/resources/js/components/pedidos/CategoriasContainer.vue b/resources/js/components/pedidos/CategoriasContainer.vue index e512cf2..4ad30c1 100644 --- a/resources/js/components/pedidos/CategoriasContainer.vue +++ b/resources/js/components/pedidos/CategoriasContainer.vue @@ -1,42 +1,38 @@ diff --git a/resources/js/components/pedidos/NavMigas.vue b/resources/js/components/pedidos/NavMigas.vue index ea70dc9..33ff5bb 100644 --- a/resources/js/components/pedidos/NavMigas.vue +++ b/resources/js/components/pedidos/NavMigas.vue @@ -2,7 +2,7 @@