From 2b072f7d55294309dcc866d983e43cf0c54925ec Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 24 Apr 2026 18:33:37 -0600 Subject: [PATCH] Guardar cambios consolidar grupos docentes y clave de grupo --- app/Http/Controllers/GrupoController.php | 51 ++++++-- app/Livewire/GrupoAlumno.php | 37 ++---- app/Livewire/GrupoDocente.php | 14 +-- app/Models/Tarea.php | 2 +- .../2026_03_13_171243_create_grupos_table.php | 1 + database/seeders/GrupoSeeder.php | 2 + database/seeders/UserSeeder.php | 2 +- resources/views/grupo/edit.blade.php | 104 ++++++---------- resources/views/grupo/index.blade.php | 4 + .../views/livewire/grupo-docente.blade.php | 113 +++++++++++++++--- 10 files changed, 205 insertions(+), 125 deletions(-) diff --git a/app/Http/Controllers/GrupoController.php b/app/Http/Controllers/GrupoController.php index e5ec7ced..336c7025 100644 --- a/app/Http/Controllers/GrupoController.php +++ b/app/Http/Controllers/GrupoController.php @@ -66,15 +66,40 @@ class GrupoController extends Controller public function store(Request $request) { - $nivel = Plan::where('id',$request->plan_id)->first(); + $plan = Plan::with('nivelRel')->where('id', $request->plan_id)->first(); + $plantel = Plantel::find($request->plantel); + $turno = Turno::find($request->turno); + + $nomenclatura = strtoupper(substr($plantel->nomenclatura, 0, 3)); + $nivel = strtoupper(substr($plan->nivelRel->name, 0, 1)); + $turnoLetra = strtoupper(substr($turno->name, 0, 1)); + $planId = $request->plan_id; + $anioMes = now()->format('Ym'); + + $claveBase = "{$nomenclatura}-{$nivel}-{$turnoLetra}-{$planId}-{$anioMes}"; + + $sufijos = range('A', 'Z'); + $clave = $claveBase; + + if (Grupo::where('clave', $claveBase)->exists()) { + foreach ($sufijos as $sufijo) { + $claveConSufijo = "{$claveBase}-{$sufijo}"; + if (!Grupo::where('clave', $claveConSufijo)->exists()) { + $clave = $claveConSufijo; + break; + } + } + } + $grupo = Grupo::create([ - 'plan_id' => $request->plan_id, - 'ciclo' => 1, - 'nivel' => $nivel->nivel, - 'plantel' => $request->plantel, - 'turno' => $request->turno, - 'status'=>1 - ]); + 'plan_id' => $request->plan_id, + 'ciclo' => 1, + 'nivel' => $plan->nivel, + 'plantel' => $request->plantel, + 'turno' => $request->turno, + 'status' => 1, + 'clave' => $clave, + ]); return redirect()->route('grupo.edit',$grupo)->with('info','El grupo se creo correctamente'); @@ -104,6 +129,15 @@ class GrupoController extends Controller }); $ciclos = Plan::where('id',$grupo->plan_id)->first(); + $grupo->load(['alumnos' => function ($query) { + $query->join('alumno_user', 'alumnos.id', '=', 'alumno_user.alumno_id') + ->join('users', 'alumno_user.user_id', '=', 'users.id') + ->orderBy('users.apellidoPaterno') + ->orderBy('users.apellidoMaterno') + ->orderBy('users.name') + ->select('alumnos.*'); + }]); + return view('grupo.edit',compact(['grupo','turnos','plans','planteles','ciclos'])); } @@ -140,6 +174,7 @@ class GrupoController extends Controller return redirect()->route('grupo.edit',$grupo); }else{ $grupo->alumnos()->detach(); + $grupo->docentes()->detach(); $grupo->delete(); session()->flash('swal',[ 'icon'=>'success', diff --git a/app/Livewire/GrupoAlumno.php b/app/Livewire/GrupoAlumno.php index eb98d2d1..971135da 100644 --- a/app/Livewire/GrupoAlumno.php +++ b/app/Livewire/GrupoAlumno.php @@ -57,32 +57,21 @@ class GrupoAlumno extends Component $plantelesUsuario = $user->plantelUsuarios->pluck('id'); $alumnos = Alumno::query() - ->with(['alumnos.plantelUsuarios', 'statusAlumno', 'plan.carreraRel','nivelRel']) + ->with(['usuario', 'statusAlumno', 'plan.carreraRel', 'nivelRel']) - ->where('status', 2) + // ✅ Cambia el 2 por el status correcto + ->whereIn('status', [2, 3]) // inscrito o alumno - ->where('nivel', $grupo->nivel) - - ->whereDoesntHave('grupos') - - ->whereHas('alumnos.plantelUsuarios', function ($q) use ($plantelesUsuario) { - $q->whereIn('plantels.id', $plantelesUsuario); - }) - - ->orderByRaw(" - CASE - WHEN plan_id = {$grupo->plan_id} THEN 0 - ELSE 1 - END - ") - ->orderByRaw(" - CASE - WHEN nivel = {$grupo->nivel} THEN 0 - ELSE 1 - END" - ) - - ->get(); + ->where('nivel', $grupo->nivel) + ->whereDoesntHave('grupos') + ->whereHas('usuario', function ($q) use ($plantelesUsuario) { + $q->whereHas('plantelUsuarios', function ($q2) use ($plantelesUsuario) { + $q2->whereIn('plantel_user.plantel_id', $plantelesUsuario); + }); + }) + ->orderByRaw("CASE WHEN plan_id = {$grupo->plan_id} THEN 0 ELSE 1 END") + ->orderByRaw("CASE WHEN nivel = {$grupo->nivel} THEN 0 ELSE 1 END") + ->get(); return view('livewire.grupo-alumno', [ 'alumnos' => $alumnos, diff --git a/app/Livewire/GrupoDocente.php b/app/Livewire/GrupoDocente.php index 8fc2821c..45f754e2 100644 --- a/app/Livewire/GrupoDocente.php +++ b/app/Livewire/GrupoDocente.php @@ -71,25 +71,23 @@ $this->materiasSelect = Material::whereHas('carreraMaterial', function($query) u icon: 'success', title: '¡Listo!', text: 'Docente asignado correctamente', - timer: 2000, + timer: 3000, confirm: false, closeModal: true, - reload: true ); } - public function eliminar($docenteId) + public function eliminar($docenteId, $materiaId) { - $this->grupo->docentes()->detach($docenteId); + $this->grupo->docentes()->wherePivot('materia_id', $materiaId)->detach($docenteId); $this->dispatch('swal', icon: 'success', - title: '¡Eliminado!', - text: 'Docente removido correctamente', + title: 'Eliminado', + text: 'Docente removido de la materia correctamente', timer: 2000, confirm: false, - closeModal: false, - reload: true + closeModal: true, ); } diff --git a/app/Models/Tarea.php b/app/Models/Tarea.php index b316c890..937cbaf0 100644 --- a/app/Models/Tarea.php +++ b/app/Models/Tarea.php @@ -5,7 +5,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsToMany; -class Material extends Model +class Tarea extends Model { protected $guarded = []; diff --git a/database/migrations/2026_03_13_171243_create_grupos_table.php b/database/migrations/2026_03_13_171243_create_grupos_table.php index e1e8776d..ca5bc601 100644 --- a/database/migrations/2026_03_13_171243_create_grupos_table.php +++ b/database/migrations/2026_03_13_171243_create_grupos_table.php @@ -11,6 +11,7 @@ return new class extends Migration Schema::create('grupos', function (Blueprint $table) { $table->id(); $table->unsignedBigInteger('plan_id'); + $table->string('clave')->unique(); $table->unsignedBigInteger('ciclo'); $table->unsignedBigInteger('nivel'); $table->unsignedBigInteger('plantel'); diff --git a/database/seeders/GrupoSeeder.php b/database/seeders/GrupoSeeder.php index c68f2e80..c51c81f4 100644 --- a/database/seeders/GrupoSeeder.php +++ b/database/seeders/GrupoSeeder.php @@ -16,6 +16,7 @@ class GrupoSeeder extends Seeder $grupo = Grupo::create([ 'plan_id'=> 1, 'ciclo'=> 1, + 'clave'=>"WASDWASD", 'nivel'=> 1, 'plantel'=> 3, 'turno'=> 1, @@ -32,6 +33,7 @@ class GrupoSeeder extends Seeder $grupo2 = Grupo::create([ 'plan_id'=> 2, 'ciclo'=> 1, + 'clave'=>"WASDWASD2", 'nivel'=> 2, 'plantel'=> 3, 'turno'=> 2, diff --git a/database/seeders/UserSeeder.php b/database/seeders/UserSeeder.php index 1e043bfb..5bc237cc 100644 --- a/database/seeders/UserSeeder.php +++ b/database/seeders/UserSeeder.php @@ -37,7 +37,7 @@ class UserSeeder extends Seeder 'password' => bcrypt('6686'), 'code'=>1, 'status'=>1 - ])->assignRole('Promotor'); + ])->assignRole('Control escolar'); $user1->plantelUsuarios()->sync(3); diff --git a/resources/views/grupo/edit.blade.php b/resources/views/grupo/edit.blade.php index 9de4a93f..b66f4ea4 100644 --- a/resources/views/grupo/edit.blade.php +++ b/resources/views/grupo/edit.blade.php @@ -26,8 +26,8 @@ @method('PUT') @csrf
- - @foreach ($plans as $nivel => $grupos) @@ -43,7 +43,12 @@
- + + +
+ +
+ @foreach ($turnos as $turno) @@ -65,8 +70,8 @@
- - @foreach ($planteles as $plantel)
- + - @endcan + + @endhasrole + + @empty - Sin alumnos. + Sin alumnos. @endforelse @@ -185,50 +197,4 @@ document.addEventListener('livewire:init', () => { }); }); - - @endsection diff --git a/resources/views/grupo/index.blade.php b/resources/views/grupo/index.blade.php index 7b514cb2..32ff0a7e 100644 --- a/resources/views/grupo/index.blade.php +++ b/resources/views/grupo/index.blade.php @@ -26,6 +26,7 @@ Id Nombre + Clave Opciones @@ -35,6 +36,9 @@ {{$grupo->id}} {{ $grupo->plan->carreraRel->name }} ({{ $grupo->plan->name }}-{{ $grupo->plan->rvoe }}) + + {{$grupo->clave}} + @can('grupo.edit') diff --git a/resources/views/livewire/grupo-docente.blade.php b/resources/views/livewire/grupo-docente.blade.php index 3e22de2e..fde1e6b4 100644 --- a/resources/views/livewire/grupo-docente.blade.php +++ b/resources/views/livewire/grupo-docente.blade.php @@ -53,14 +53,17 @@
{{-- Tabla docentes asignados --}} - +
+ @hasrole('Coordinación académica') + @endhasrole + @@ -80,26 +83,110 @@ Sin docente @endif - + + + @hasrole('Coordinación académica') + + + @endhasrole + @empty - + Sin materias en este plan. @endforelse
Id Materia Ciclo Docente asignadoOpciones
- @if($docenteAsignado) - @can('grupo.destroy') - - @endcan - @endif - + @if($docenteAsignado) + + @endif +
Sin materias en este plan.
+ + @push('scripts') @endpush