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
-
-
-
+
+
+
+
+
+
@for ($i=1 ; $i <= $ciclos->duracion ; $i++)
@@ -53,7 +58,7 @@
-
+
@foreach ($turnos as $turno)
@@ -65,8 +70,8 @@
-
-
+
+
@foreach ($planteles as $plantel)
-
+
@@ -113,36 +118,41 @@
-
+
- | Id |
+ {{-- Id | --}}
Nombre |
- Opciones |
+ @hasrole('Control escolar')
+ Opciones |
+ @endhasrole
+
@forelse ($grupo->alumnos as $alumno)
- | {{$alumno->id}} |
+ {{-- {{$alumno->id}} | --}}
- {{$alumno->usuario->first()?->name}}
{{$alumno->usuario->first()?->apellidoPaterno}}
{{$alumno->usuario->first()?->apellidoMaterno}}
+ {{$alumno->usuario->first()?->name}}
|
+
+ @hasrole('Control escolar')
- @can('grupo.destroy')
+
- @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 --}}
-
+
| Id |
Materia |
Ciclo |
Docente asignado |
+ @hasrole('Coordinación académica')
Opciones |
+ @endhasrole
+
@@ -80,26 +83,110 @@
Sin docente
@endif
-
- @if($docenteAsignado)
- @can('grupo.destroy')
-
- @endcan
- @endif
- |
+
+
+ @hasrole('Coordinación académica')
+
+ @if($docenteAsignado)
+
+ @endif
+ |
+
+ @endhasrole
+
@empty
- | Sin materias en este plan. |
+ Sin materias en este plan.
@endforelse
+
+
@push('scripts')
@endpush
|