public static function crearClases($grupo_id, $ciclo_id) { $grupo = Grupo::find($grupo_id); $asignaturas = Asignatura::with(array('carreras' => function ($q) use($grupo) { $q->where('carrera_id', '=', $grupo->carrera_id); }))->whereHas('carreras', function ($q) use($grupo) { $q->where('carrera_id', '=', $grupo->carrera_id)->where('cuatrimestre', '=', $grupo->cuatrimestre); })->get(); foreach ($asignaturas as $asignatura) { $horas_semana = $asignatura->carreras->first()->pivot->horas_semana; $horarios_disponibles = Horario::whereDoesntHave('clases', function ($q) use($grupo) { $q->where('grupo_id', '=', $grupo->id); })->get(); $profesor = Profesor::disponible($horarios_disponibles, $asignatura->id, $ciclo_id, $horas_semana); $horarios_seleccionados = Horario::organizarSemana($horarios_disponibles, $profesor->id, $horas_semana, $ciclo_id); foreach ($horarios_seleccionados as $horario) { $aula = Aula::disponible($horario->id, $ciclo_id); $clase = Clase::create(array('profesor_id' => $profesor->id, 'grupo_id' => $grupo->id, 'asignatura_id' => $asignatura->id, 'aula_id' => $aula->id, 'horario_id' => $horario->id)); } } }
public static function organizarSemana($horarios_disponibles, $profesor_id, $cant, $ciclo_id) { $ciclo = Ciclo::find($ciclo_id); $horarios_gral = Horario::all(); $horarios_ocupados = Horario::select('horarios.*')->distinct()->join('clases', 'clases.horario_id', '=', 'horarios.id')->join('grupos', 'grupos.id', '=', 'clases.grupo_id')->where('profesor_id', '=', $profesor_id)->where('ciclo_id', '=', $ciclo->id)->get(); $horarios_profesor = $horarios_gral->diff($horarios_ocupados); $horarios = $horarios_disponibles->intersect($horarios_profesor); $semana = new Collection(); while ($cant > 0) { for ($i = 0; $i < 5 && $cant > 0; $i++) { foreach ($horarios as $key => $horario) { if ($horario->dia == Horario::$dias[$i]) { $semana->push($horarios->pull($key)); $cant--; break; } } } } return $semana; }
public function publicarHorarios() { echo "\nGenerando horarios..."; Horario::crearHorarios(); }