public static function disponible($horarios, $asignatura_id, $ciclo_id, $horas) { $ciclo = Ciclo::find($ciclo_id); $asignatura = Asignatura::find($asignatura_id); $profesores_disponibles = self::whereHas('clases', function ($q) use($ciclo_id, $horarios) { $q->whereHas('grupo', function ($q) use($ciclo_id) { $q->where('ciclo_id', '=', $ciclo_id); })->whereIn('horario_id', array_fetch($horarios->toArray(), 'id')); }, '<=', $horarios->count() - $horas)->whereHas('asignaturas', function ($q) use($asignatura) { $q->where('asignatura_id', '=', $asignatura->id); })->get(); if ($profesores_disponibles->count() > 0) { return $profesores_disponibles->random(); } $profesores_capacitables = Profesor::whereHas('clases', function ($q) use($ciclo_id, $horarios) { $q->whereHas('grupo', function ($q) use($ciclo_id) { $q->where('ciclo_id', '=', $ciclo_id); })->whereIn('horario_id', array_fetch($horarios->toArray(), 'id')); }, '<=', $horarios->count() - $horas)->whereDoesntHave('asignaturas', function ($q) use($asignatura) { $q->where('asignatura_id', '=', $asignatura->id); })->has('asignaturas', '<', 10)->get(); if ($profesores_capacitables->count() > 0) { $profesor = $profesores_capacitables->random(); $profesor->asignaturas()->attach($asignatura->id); return $profesor; } $profesor = self::crearProfesor(); $profesor->asignaturas()->attach($asignatura->id); return $profesor; }
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 function publicarCalificaciones($ciclo_id) { echo "\nGenerando calificaciones..."; $ciclo = Ciclo::find($ciclo_id); $grupos = Grupo::where('ciclo_id', '=', $ciclo->id)->get(); foreach ($grupos as $grupo) { $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(); $alumnos = Alumno::whereHas('grupos', function ($q) use($grupo) { $q->where('grupo_id', '=', $grupo->id); })->get(); foreach ($alumnos as $alumno) { foreach ($asignaturas as $asignatura) { $corte_1 = min(10, rand(7, 10) + rand(0, 9) / 10); $corte_2 = min(10, rand(7, 10) + rand(0, 9) / 10); $corte_3 = min(10, rand(7, 10) + rand(0, 9) / 10); $alumno->calificaciones()->attach($asignatura->id, array('corte_1' => $corte_1, 'corte_2' => $corte_2, 'corte_3' => $corte_3)); } } } }