From 8c119d4cd06fe1dac12a6b92caf183177e630c58 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=A3o=20Denis=20Rodrigues?= <joao.denisr@gmail.com>
Date: Mon, 31 Jul 2017 15:24:53 -0300
Subject: [PATCH] Finalizando cache aluno

---
 src/degree/analysis.py  |  1 -
 src/script.py           | 73 ++++++++++++++++++++++++++++++++++++++++-
 src/student/analysis.py | 19 +++++++----
 3 files changed, 85 insertions(+), 8 deletions(-)

diff --git a/src/degree/analysis.py b/src/degree/analysis.py
index 2523de5..410bc5d 100644
--- a/src/degree/analysis.py
+++ b/src/degree/analysis.py
@@ -25,7 +25,6 @@ def average_time_graduation_degree(degree): # tempo_medio_formatura_curso
     average_time = 0
 
     for g in graduated:
-        print(g.get_time_in_degree())
         average_time += g.get_time_in_degree()
 
     average_time /= graduated_amount
diff --git a/src/script.py b/src/script.py
index 8c562ac..384b885 100644
--- a/src/script.py
+++ b/src/script.py
@@ -93,7 +93,78 @@ def generate_degree_data(degree, path):
 
 def generate_student_data(degree, path):
     print("\t- Fazendo analises dos alunos")
-    return
+    students = Student.objects.filter(admission__degree = degree)
+    students_amount = students.count()
+    counter = 0
+    student_path = path + '/student'
+    if not os.path.exists(student_path):
+        os.mkdir(student_path)
+
+    for student in students:
+        student_klasses = StudentKlass.objects.filter(student=student)
+        amount_courses_semester = get_student_courses_completed(student_klasses)
+        failures_semester = semester_pass_rate(student)
+#        failures_amount_courses_semester = merge_dicts(failures_semester, amount_courses_semester)
+
+        ira_courses = sorted(ira_amount_courses(student).items())
+        pass_rate = pass_rate(student_klasses)
+        pass_rate_semester = sorted(failures_semester.items())
+        position = sorted(get_student_position(student).items())
+        real_period = get_real_period(student)
+        intended_period = get_intended_period(student)
+
+        dict_ira_semester = {}
+        dict_ira_amount_courses = {}
+        dict_position = {}
+        dict_pass = {}
+
+        for item, course_pass, pos in zip(ira_courses, pass_rate_semester, position):
+            ca = list(course_pass)
+            i = list(item)
+            p = list(pos)
+            d_pass, d_done = ap[1]
+            date = ap[0].split('/')
+
+            semester_data = {}
+            data = '{}/{}'.format(date[0], date[1])
+            
+            dict_ira_semester[data] = i[1][0]
+            dict_ira_amount_courses[data] = [i[1][0], d_done]
+            dict_position[data] = pos[1]
+            dict_pass[data] = [d_pass, d_done]
+        student_klasses = StudentKlass.objects.filter(student=student)
+        student_klass = []
+        for sk in student_klasses:
+            sk_dict = {
+                'grade': sk.grade,
+                'name': sk.klass.course.name,
+                'code': sk.klass.course.code,
+                'situation': sk.situation,
+                'year': sk.klass.year,
+                'semester': sk.klass.semester
+            }
+            student_klass.append(sk_dict)
+         
+        student_data = {
+            'ira_semester': dict_ira_semester,
+            'semester_pass_rate': dict_pass,
+            'position': dict_position,
+            'ira_amount_courses': dict_ira_amount_courses,
+            'pass_rate': pass_rate,
+            'intended_period': intended_period,
+            'real_period': real_period,
+            'student_klass': student_klass
+        }
+
+        counter += 1
+        with io.open(student_path + '/' + student.grr + '.json', 'w', encondig = 'utf8') as output:
+            str_ = json.dumps(student_data, indent = 3, sort_keys = True,
+                separators=(',', ': '), ensure_ascii = False)
+            output.write(to_unicode(str_))
+
+        if counter % 100 == 0:
+            print("\t\t- %d alunos processados de %d" % (counter, students_amount))
+    return 
 
 def generate_student_list_data(degree, path):
     print("\t- Criando lista de alunos")
diff --git a/src/student/analysis.py b/src/student/analysis.py
index 4a743c3..ce1e909 100644
--- a/src/student/analysis.py
+++ b/src/student/analysis.py
@@ -11,7 +11,7 @@ def pass_amount(student_klasses): # calcular_indice_aprovacao
     amount_pass = 0
     amount_courses = 0
     for student_klass in student_klasses:
-        if student_klass.situation in SITUATION_COURSE_COMPLETED:
+        if student_klass.situation in SITUATIONS_COURSE_COMPLETED:
             amount_courses += 1
             if student_klass.situation in SITUATION_PASS:
                 amount_pass += 1
@@ -21,7 +21,13 @@ def pass_amount(student_klasses): # calcular_indice_aprovacao
 
 def pass_rate(student_klasses): # indice_aprovacao
     amount_pass = 0
-    pass
+    amout_courses = 0
+    for sk in student_klasses:
+        if sk.situation in SITUATIONS_COURSE_COMPLETED:
+            amount_courses += 1
+            if sk.situation in SITUATION_PASS:
+                amount_pass += 1
+    return -1 if amount_courses == 0 else amount_pass / amount_courses
 
 def semester_pass_rate(student): # calcular_indice_aprovacao_semestral
     index = {}
@@ -29,7 +35,7 @@ def semester_pass_rate(student): # calcular_indice_aprovacao_semestral
     year = student.admission.year
     semester = student.admission.semester 
 
-    for i in range(0, amoun_semesters):
+    for i in range(0, amount_semesters):
         #semester_student_klass = student.studentklass_set.filter(klass__year = year, klass__semester = semester
         #semester_index = pass_amount
         semester_index = student.studentklass_set.filter(klass__year = year, klass__semester = semester, situation__in = SITUATION_PASS).count()
@@ -47,7 +53,8 @@ def get_student_courses_completed(student_klasses):
     student_courses_completed = []
 
     for student_klass in student_klasses:
-        if student_klass.situation in SITUATION_COURSE_COMPLETED:
+        
+        if student_klass.situation in SITUATIONS_COURSE_COMPLETED:
             student_courses_completed.append(student_klass)
 
     return student_courses_completed
@@ -126,13 +133,13 @@ def get_student_position(student):
 
 def ira_amount_courses(student):
     ira_semesters = get_ira_semester(student)
-    amount_courses = get_student_courses_completed(student)
+    amount_courses = get_amount_courses_completed(student)
 
     ira_amount_course = {}
     ira_amount_course = ira_amount_course.fromkeys(ira_semesters.keys())
 
     for ira_semester in ira_semesters:
-        ira_amount_course[ira_semester] = [ira_semesters[ira_semester], amount_course[ira_semester]]
+        ira_amount_course[ira_semester] = [ira_semesters[ira_semester], amount_courses[ira_semester]]
 
     return ira_amount_course
 
-- 
GitLab