예제 #1
0
 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;
 }
예제 #2
0
 public static function disponible($horario_id, $ciclo_id)
 {
     $ciclo = Ciclo::find($ciclo_id);
     $aula = self::whereDoesntHave('clases', function ($q) use($ciclo, $horario_id) {
         $q->whereHas('grupo', function ($q) use($ciclo, $horario_id) {
             $q->where('ciclo_id', '=', $ciclo->id);
         })->where('horario_id', '=', $horario_id);
     })->get()->random();
     return $aula;
 }
예제 #3
0
 public static function crearGrupo($nombre, $carrera_id, $ciclo_id, $cuatrimestre = 1)
 {
     $ciclo = Ciclo::find($ciclo_id);
     $year = intval((new DateTime($ciclo->fecha_inicio))->format('Y'));
     $grupo = Grupo::create(array('nombre' => $nombre, 'carrera_id' => $carrera_id, 'ciclo_id' => $ciclo_id, 'cuatrimestre' => $cuatrimestre));
     $num_alumnos = rand(25, 30);
     for ($i = 0; $i < $num_alumnos; $i++) {
         $alumno = Alumno::crearAlumno($carrera_id, $year);
         $alumno->grupos()->attach($grupo->id);
     }
     return $grupo;
 }
예제 #4
0
 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;
 }
예제 #5
0
 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));
             }
         }
     }
 }