middleware('can:grupo.index')->only('index','show'); $this->middleware('can:grupo.create')->only('create','store'); $this->middleware('can:grupo.edit')->only('edit','update'); $this->middleware('can:grupo.destroy')->only('destroy'); } public function index() { $user = Auth::user(); if ($user->hasRole('Admin')) { $grupos = Grupo::all(); } if ($user->hasRole(['Control escolar','Coordinación académica'])) { $plantelesIds = $user->plantelUsuarios->pluck('id'); $grupos = Grupo::with('plan') ->whereHas('plan.planesPlantel', function ($query) use ($plantelesIds) { $query->whereIn('plantel_id', $plantelesIds); }) ->get(); } elseif ($user->hasRole('Docente')) { $grupos = Grupo::with('plan') ->whereHas('docentes', function ($query) use ($user) { $query->whereHas('docentes', function ($q) use ($user) { $q->where('users.id', $user->id); }); }) ->get(); } return view('grupo.index', compact('grupos')); } public function verMaterias(Grupo $grupo) { $asignaciones = DB::table('docente_grupo') ->where('docente_grupo.grupo_id', $grupo->id) ->join('materials', 'docente_grupo.materia_id', '=', 'materials.id') ->join('docentes', 'docente_grupo.docente_id', '=', 'docentes.id') ->leftJoin('docente_user', 'docentes.id', '=', 'docente_user.docente_id') ->leftJoin('users', 'docente_user.user_id', '=', 'users.id') ->select( 'materials.id as material_id', 'materials.name as material_name', 'materials.clave as material_clave', 'materials.ciclo', 'materials.horas', 'docentes.id as docente_id', 'users.name as docente_nombre', 'users.apellidoPaterno', 'users.apellidoMaterno' ) ->get() ->unique('material_id'); return view('grupo.ver_materias', compact('grupo', 'asignaciones')); } public function administrar(Grupo $grupo) { $user = Auth::user(); $docente = Docente::whereHas('docentes', fn($q) => $q->where('id', $user->id))->firstOrFail(); $materiales = $docente->materias()->wherePivot('grupo_id', $grupo->id)->get(); return view('grupo.administrar', compact('grupo', 'materiales')); } public function create() { $turnos= Turno::all(); $user = Auth::user(); $plantels = $user->plantelUsuarios->pluck('id'); $planteles = $user->plantelUsuarios; $plans = Plan::with(['carreraRel', 'nivelRel']) ->whereHas('planesPlantel', function ($query) use ($plantels) { $query->whereIn('plantel_id', $plantels); }) ->get() ->groupBy(function ($plan) { return $plan->nivelRel->name; }); return view('grupo.create',compact(['turnos','plans','planteles'])); } public function store(Request $request) { $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' => $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'); } public function show(Plane $plane) { return view('grupo.show',compact('plane')); } public function edit(Grupo $grupo) { $turnos= Turno::all(); $user = Auth::user(); $plantels = $user->plantelUsuarios->pluck('id'); $planteles = $user->plantelUsuarios; $plans = Plan::with(['carreraRel', 'nivelRel']) ->whereHas('planesPlantel', function ($query) use ($plantels) { $query->whereIn('plantel_id', $plantels); }) ->get() ->groupBy(function ($plan) { return $plan->nivelRel->name; }); $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'])); } public function update(Request $request,Grupo $grupo) { $nivel = Plan::where('id',$request->plan_id)->first(); $grupo = Grupo::update([ 'plan_id' => $request->plan_id, 'ciclo' => 1, 'nivel' => $nivel->nivel, 'plantel' => $request->plantel, 'turno' => $request->turno, 'status'=>1 ]); return redirect()->route('grupo.edit',$grupo)->with('info','El grupo se actualizo correctamente'); } public function destroy(Grupo $grupo,Request $request) { if($request->alumno){ $alumno= Alumno::find($request->alumno); $alumno->grupos()->detach(); session()->flash('swal',[ 'icon'=>'success', 'title'=>'Eliminado!', 'text'=>'Se ha eliminado el registro correctamente' ]); return redirect()->route('grupo.edit',$grupo); }else{ $grupo->alumnos()->detach(); $grupo->docentes()->detach(); $grupo->delete(); session()->flash('swal',[ 'icon'=>'success', 'title'=>'Eliminado!', 'text'=>'Se ha eliminado el registro correctamente' ]); return redirect()->route('grupo.index'); } } }