예제 #1
0
        public async Task <QueryResponse <Lesson> > GetLessonsByTeacher(int id)
        {
            using (BiometricPresenceDB db = new BiometricPresenceDB())
            {
                List <Lesson> lessons = await db.Lessons.Include(c => c.Class).Include(c => c.Subject).Where(c => c.TeacherID == id).ToListAsync();

                return(ResponseMessage.CreateQuerySuccessResponse <Lesson>(lessons));
            }
        }
예제 #2
0
        public async Task <QueryResponse <Presence> > GetPresenceListOfLesson(int id)
        {
            using (BiometricPresenceDB db = new BiometricPresenceDB())
            {
                List <Presence> presences = await db.Presences.Include(c => c.Student).Where(c => c.LessonID == id).ToListAsync();

                return(ResponseMessage.CreateQuerySuccessResponse <Presence>(presences));
            }
        }
예제 #3
0
        public async Task <QueryResponse <Teacher> > GetAll()
        {
            try
            {
                using (BiometricPresenceDB dataBase = new BiometricPresenceDB())
                {
                    List <Teacher> teachers = await dataBase.Teachers.ToListAsync();

                    return(ResponseMessage.CreateQuerySuccessResponse <Teacher>(teachers));
                }
            }
            catch (Exception ex)
            {
                QueryResponse <Teacher> teacher = (QueryResponse <Teacher>)ResponseMessage.CreateErrorResponse(ex);
                return(teacher);
            }
        }
예제 #4
0
        public async Task <QueryResponse <Subject> > GetAll()
        {
            try
            {
                using (BiometricPresenceDB dataBase = new BiometricPresenceDB())
                {
                    List <Subject> subjects = await dataBase.Subjects.Include(c => c.Teachers).ToListAsync();

                    return(ResponseMessage.CreateQuerySuccessResponse <Subject>(subjects));
                }
            }
            catch (Exception ex)
            {
                QueryResponse <Subject> subject = (QueryResponse <Subject>)ResponseMessage.CreateErrorResponse(ex);
                return(subject);
            }
        }
예제 #5
0
        public async Task <QueryResponse <Class> > GetAll()
        {
            try
            {
                using (BiometricPresenceDB dataBase = new BiometricPresenceDB())
                {
                    List <Class> classes = await dataBase.Classes.ToListAsync();

                    return(ResponseMessage.CreateQuerySuccessResponse <Class>(classes));
                }
            }
            catch (Exception ex)
            {
                QueryResponse <Class> clasS = (QueryResponse <Class>)ResponseMessage.CreateErrorResponse(ex);
                return(clasS);
            }
        }
예제 #6
0
        public async Task <QueryResponse <Student> > GetAll()
        {
            try
            {
                using (BiometricPresenceDB dataBase = new BiometricPresenceDB())
                {
                    List <Student> students = await dataBase.Students.ToListAsync();

                    return(ResponseMessage.CreateQuerySuccessResponse <Student>(students));
                }
            }
            catch (Exception ex)
            {
                QueryResponse <Student> student = (QueryResponse <Student>)ResponseMessage.CreateErrorResponse(ex);
                return(student);
            }
        }
예제 #7
0
        public async Task <QueryResponse <Lesson> > GetAll()
        {
            try
            {
                using (BiometricPresenceDB dataBase = new BiometricPresenceDB())
                {
                    List <Lesson> lessons = await dataBase.Lessons.ToListAsync();

                    return(ResponseMessage.CreateQuerySuccessResponse <Lesson>(lessons));
                }
            }
            catch (Exception ex)
            {
                QueryResponse <Lesson> lesson = (QueryResponse <Lesson>)ResponseMessage.CreateErrorResponse(ex);
                return(lesson);
            }
        }
예제 #8
0
        public async Task <QueryResponse <Lesson> > GenerateSchedule(DateTime schoolYearBegin)
        {
            var allTeachers = await _teacherService.GetAll();

            var allSubjects = await _subjectService.GetAll();

            var allClasses = await _classService.GetAll();

            List <Teacher> teachers       = allTeachers.Data;
            List <Subject> subjects       = allSubjects.Data;
            List <Class>   classes        = allClasses.Data;
            Random         rdm            = new Random();
            List <Lesson>  lessons        = new List <Lesson>();
            int            lessonDuration = 45;

            List <Subject> subjecstWithFrequency = new List <Subject>();

            foreach (Subject subject in subjects)
            {
                for (int i = 0; i < subject.Frequency; i++)
                {
                    subjecstWithFrequency.Add(subject);
                }
            }

            List <Subject> classSubjects = subjecstWithFrequency.ToList();
            Dictionary <int, List <Subject> > dictionary = new Dictionary <int, List <Subject> >();

            foreach (Class item in classes)
            {
                dictionary.Add(item.ID, classSubjects.ToList());
            }

            //PRA CADA DIA DA SEMANA
            for (int day = 1; day < 6; day++)
            {
                //PRA CADA AULA
                for (int order = 0; order < 5; order++)
                {
                    List <Teacher> teachersAvailable = teachers.ToList();

                    //PRA CADA TURMA
                    foreach (Class @class in classes)
                    {
                        //dia = 1
                        //ordem = 0
                        //turma a
Begin:
                        //SEGUNDA 1ªaula
                        int indexSubjectDrawn = rdm.Next(0, dictionary[@class.ID].Count);
                        Subject subjectDrawn = null;

                        try
                        {
                            subjectDrawn = dictionary[@class.ID][indexSubjectDrawn];
                        }
                        catch (Exception ex)
                        {
                        }

                        DateTime date  = new DateTime(schoolYearBegin.Year, schoolYearBegin.Month, schoolYearBegin.Day + (day - 1));
                        Shift    shift = @class.ClassShift;
                        if (shift == Shift.Matutino)
                        {
                            date = date.AddMinutes(450);
                        }
                        else if (shift == Shift.Vespertino)
                        {
                            date = date.AddMinutes(810);
                        }
                        else
                        {
                            date = date.AddMinutes(1110);
                        }

                        date = date.AddMinutes(lessonDuration * order);

                        if (order >= 3)
                        {
                            date = date.AddMinutes(15);
                        }

                        int indexTeacherOfSubject =
                            rdm.Next(0, subjectDrawn.Teachers.Count);

                        if (subjectDrawn.Teachers.Count == 0)
                        {
                            return(new QueryResponse <Lesson>()
                            {
                                Message = "A matéria " + subjectDrawn.SubjectName + " não possui professores disponíveis.",
                                Success = false
                            });
                        }

                        Teacher teacherDrawn =
                            subjectDrawn.Teachers.ToList()[indexTeacherOfSubject];

                        bool find = false;
                        //Remove o professor que estava disponível da lista
                        for (int i = 0; i < teachersAvailable.Count; i++)
                        {
                            if (teachersAvailable[i].ID == teacherDrawn.ID)
                            {
                                teachersAvailable.RemoveAt(i);
                                find = true;
                                break;
                            }
                        }
                        if (!find)
                        {
                            goto Begin;
                        }
                        //Remove a matéria sorteada
                        dictionary[@class.ID].RemoveAt(indexSubjectDrawn);


                        lessons.Add(new Lesson()
                        {
                            //Presences = new List<Presence>
                            ClassID    = @class.ID,
                            date       = date,
                            Order      = (LessonOrder)order,
                            Shift      = shift,
                            LessonDate = (DayOfWeek)day,
                            SubjectID  = subjectDrawn.ID,
                            TeacherID  = teacherDrawn.ID
                        });
                    }
                }
            }

            return(ResponseMessage.CreateQuerySuccessResponse <Lesson>(lessons));
        }