Browse Source

se hizo trabajo adicional a la pagina de transcripciones

Oniel Méndez Nieves 4 years ago
parent
commit
f11c88f288

BIN
__pycache__/transcripcionmaker.cpython-36.pyc View File


BIN
__pycache__/transcripcionmaker2.cpython-36.pyc View File


+ 4
- 2
dash-run.py View File

@@ -1,6 +1,7 @@
1 1
 # coding=utf-8
2 2
 from flask import Flask, render_template, render_template_string, redirect, request, session, escape, url_for, jsonify, abort
3 3
 import os
4
+from flask import make_response, request
4 5
 
5 6
 import adminver
6 7
 import enfermeriaver
@@ -110,7 +111,7 @@ def formaEst(perfil, accion, tipo, id=None):
110 111
     if perfil not in ["enfermera", "enfermeria", "admin", "administracion", "estudiante", "madre", "facultad"]:
111 112
         return {"error":True,"tipo":"tipo_incorrecto","opcion":tipo,"user_type":"<perfil>"}
112 113
     # print 'tipo'
113
-    if tipo not in ["enfermera", "enfermeria", "administracion", "estudiante", "madre", "facultad", 'visitas_oficina', 'visitas_enfermeria', 'transcripcion']:
114
+    if tipo not in ["enfermera", "enfermeria", "administracion", "estudiante", "madre", "facultad", 'visitas_oficina', 'visitas_enfermeria', 'transcripcion', 'pdf']:
114 115
         return {"error":True,"tipo":"tipo_incorrecto","opcion":tipo,"user_type":"<perfil>"}
115 116
     # print 'accion'
116 117
     if accion not in ["edit", "add", "view", "crear"]:
@@ -133,7 +134,8 @@ def formaEst(perfil, accion, tipo, id=None):
133 134
         else:
134 135
             return resultado
135 136
     if (accion=="crear"):
136
-        return transcripcionmaker.crear_transcripcion(id)
137
+        if (tipo=="transcripcion"):
138
+            return transcripcionmaker.crear_transcripcion(id)
137 139
 
138 140
 
139 141
 @app.route('/admin/dashAdmin', methods=['GET', 'POST'])

+ 3
- 0
static/transcripcion.js View File

@@ -27,4 +27,7 @@ table.controller('tableController', function tableController($http, $scope, id){
27 27
       console.log(response.data);
28 28
     }
29 29
   });
30
+  $scope.myFilter = function (item) {
31
+      return item === 'promedio_acumulado' || item === 'promedio_total';
32
+  }
30 33
 });

+ 66
- 47
templates/transcripcion.html View File

@@ -37,56 +37,54 @@
37 37
       {% endraw %}
38 38
     </nav> -->
39 39
 
40
-    <div class="container-fluid">
40
+    <div class="container-fluid" >
41 41
       <div class="row" >
42
-        <h1 class='text-center'>
42
+        <!-- <h1 class='text-center'>
43 43
           Transcripción del estudiante {% raw %}{{estudiante.nombres}} {{estudiante.apellidos}}{% endraw %}
44
-        </h1>
44
+        </h1> -->
45 45
       </div>
46
-      <div class="row" >
46
+      <br>
47
+      <br>
48
+      <br>
49
+      <div class="row" align='center'>
47 50
         {% raw %}
48
-        <div class="col-6" >
49
-          <div class="row" >
50
-            <b>Nombre</b>: {{estudiante.nombres}}
51
-          </div>
52
-          <div class="row" >
53
-            <b>Apellidos</b>: {{estudiante.apellidos}}
54
-          </div>
55
-          <div class="row" >
56
-            <b>email</b>: {{estudiante.email}}
57
-          </div>
58
-          <div class="row" >
59
-            <b>Fecha nacimiento</b>: {{estudiante.fecha_nacimiento}}
60
-          </div>
61
-          <div class="row" >
62
-            <b>Dirección</b>: {{estudiante.direccion1}}
63
-          </div>
64
-          <div class="row" >
65
-            <b>Ciudad</b>: {{estudiante.ciudad}}
66
-          </div>
67
-        </div>
68
-        <div class="col" >
69
-          <div class="row" >
70
-            <b>Pais</b>: {{estudiante.pais}}
71
-          </div>
72
-          <div class="row" >
73
-            <b>Dirección</b>: {{estudiante.direccion2}}
74
-          </div>
75
-          <div class="row" >
76
-            <b>Telefono (1)</b>: {{estudiante.telefono1}}
77
-          </div>
78
-          <div class="row" >
79
-            <b>Telefono (2)</b>: {{estudiante.zipcode}}
80
-          </div>
51
+        <pre ng-if="estudiante.telefono2" class="col-6 text-left" >
52
+          <b>Nombre</b>: <u>{{estudiante.nombres}}</u>
53
+          <b>Apellidos</b>: <u>{{estudiante.apellidos}}</u>
54
+          <b>Email</b>: <u>{{estudiante.email}}</u>
55
+          <b>Fecha nacimiento</b>: <u>{{estudiante.fecha_nacimiento}}</u>
56
+          <b>Telefono (1)</b>: <u>{{estudiante.telefono1}}</u>
57
+          <b>Telefono (2)</b>: <u>{{estudiante.telefono2}}</u>
58
+        </pre>
59
+        <pre ng-if="!estudiante.telefono2" class="col-6 text-left" >
60
+          <b>Nombre</b>: <u>{{estudiante.nombres}}</u>
61
+          <b>Apellidos</b>: <u>{{estudiante.apellidos}}</u>
62
+          <b>Email</b>: <u>{{estudiante.email}}</u>
63
+          <b>Fecha nacimiento</b>: <u>{{estudiante.fecha_nacimiento}}</u>
64
+          <b>Telefono</b>: <u>{{estudiante.telefono1}}</u>
65
+          <b>Promedio</b>: <u>{{estudiante.promedio}}</u>
66
+        </pre>
67
+        <pre ng-if="estudiante.direccion2" class="col-6 text-left" >
68
+          <b>Dirección</b>: <u>{{estudiante.direccion1}}</u>
69
+          <u>{{estudiante.direccion2}}</u>
70
+          <b>Ciudad</b>: <u>{{estudiante.ciudad}}</u>
71
+          <b>Pais</b>: <u>{{estudiante.pais}}</u>
72
+          <b>Zip code</b>: <u>{{estudiante.zipcode}}</u>
73
+        </pre>
74
+        <pre ng-if="!estudiante.direccion2" class="col-6 text-left" >
75
+          <b>Dirección</b>: <u>{{estudiante.direccion1}}</u>
76
+          <b>Ciudad</b>: <u>{{estudiante.ciudad}}</u>
77
+          <b>Pais</b>: <u>{{estudiante.pais}}</u>
78
+          <b>Zip code</b>: <u>{{estudiante.zipcode}}</u>
79
+        </pre>
81 80
           {% endraw %}
82 81
         </div>
83 82
       </div>
83
+      <div class="row" align='center'>
84
+        <div class="col text-left" >
84 85
 
85
-      <div class="row " >
86
-        <div class="col" >
87
-
88
-          <div ng-repeat="(key, value) in semestres">
89
-            <table id='tabla'>
86
+          <div ng-repeat="(key, semestre) in semestres">
87
+            <table id='tabla' align='center'>
90 88
               <tr>
91 89
                 {% raw %}
92 90
                 <th colspan="4" class="header2 text-center">{{key}}</th>
@@ -97,27 +95,40 @@
97 95
                 <th ng-repeat="header in headers" class="header2">{{header}}</th>
98 96
                 {% endraw %}
99 97
               </tr>
100
-              <tr ng-repeat="cla in value">{{stat}}
98
+              <tr ng-repeat="(key, clase) in semestre" ng-if='key != "promedio"'>
101 99
                 {% raw %}
102 100
                 <!-- la proxima linea asume que las entradas en la tabla tienen un id unico con -->
103 101
                 <!-- el mismo nombre de identificador a traves de los javascript, json, etc. -->
104 102
                 <td>
105
-                  <div ng-bind-html="cla.codigo"></div>
103
+                  <div ng-bind-html="clase.codigo"></div>
106 104
                 </td>
107 105
                 <td>
108
-                  <div ng-bind-html="cla.nombre"></div>
106
+                  <div ng-bind-html="clase.nombre"></div>
109 107
                 </td>
110 108
                 <td>
111
-                  <div ng-bind-html="cla.Nota"></div>
109
+                  <div ng-if="clase.porciento >= 90                       " >A</div>
110
+                  <div ng-if="clase.porciento >= 80 && clase.porciento <= 89" >B</div>
111
+                  <div ng-if="clase.porciento >= 70 && clase.porciento <= 79" >C</div>
112
+                  <div ng-if="clase.porciento >= 60 && clase.porciento <= 69" >D</div>
113
+                  <div ng-if="                       clase.porciento <= 59" >F</div>
112 114
                 </td>
113 115
                 <td>
114
-                  <div ng-bind-html="cla.Creditos"></div>
116
+                  <div ng-bind-html="clase.porciento"></div>
115 117
                 </td>
116 118
 
117 119
                 {% endraw %}
118 120
               </tr>
119 121
             </table>
120 122
             <br>
123
+            <div align'center' align='center'>
124
+              {% raw %}
125
+              Promedio este semestre: {{semestre.promedio.acumulado}}
126
+              <br>
127
+              Promedio Acumulado: {{semestre.promedio.total}}
128
+              {% endraw %}
129
+              <br>
130
+              <hr>
131
+            </div>
121 132
           </div>
122 133
 
123 134
         </div>
@@ -125,5 +136,13 @@
125 136
     </div>
126 137
   </body>
127 138
 
139
+<!-- testing -->
140
+<!-- <script type="text/javascript" src="{{ url_for('static', filename='transcripcion2.js') }}"></script> -->
141
+<script>
142
+// la variable 'pagina' la usa el javascript para que el run.py sepa cual python file abrir.
143
+//        este python file se encarga de comunicarse con la base de datos.
144
+  // table.value("id", "{{id}}")
145
+</script>
146
+
128 147
 
129 148
 </html>

+ 92
- 18
transcripcionmaker.py View File

@@ -1,7 +1,8 @@
1
+from connect import connection
2
+import sqlalchemy as db
3
+
1 4
 def crear_transcripcion(id):
2 5
 
3
-    from connect import connection
4
-    import sqlalchemy as db
5 6
     from flask import jsonify
6 7
 
7 8
 
@@ -10,7 +11,7 @@ def crear_transcripcion(id):
10 11
     headers.update({"1":"Codigo"})
11 12
     headers.update({"2":"Curso"})
12 13
     headers.update({"3":"Nota"})
13
-    headers.update({"4":"Creditos"})
14
+    headers.update({"4":"Porciento"})
14 15
 
15 16
     ###### estudiante
16 17
 
@@ -20,8 +21,7 @@ def crear_transcripcion(id):
20 21
             WHERE u.id = '+id+ ' AND u.id = m.user_id'
21 22
     result_db = connection.execute(query).fetchall()
22 23
 
23
-    q = result_db
24
-    q = q[0]
24
+    q = result_db[0]
25 25
 
26 26
     estudiante={}
27 27
     estudiante.update({"nombres":str(q[0])})
@@ -36,23 +36,97 @@ def crear_transcripcion(id):
36 36
     estudiante.update({"telefono1":str(q[9])})
37 37
     estudiante.update({"telefono2":str(q[10])})
38 38
 
39
+    query = 'SELECT sum(e.valor) as total, sum(n.valor) as puntos, \
40
+            		sum(n.valor)/sum(e.valor) as promedio\
41
+            FROM matricula m, oferta o, cursos c, evaluaciones e, notas n\
42
+            WHERE  m.oferta_id = o.curso_id AND o.curso_id = c.id \
43
+            	AND c.id = e.oferta_id AND e.id = n.evaluacion_id AND n.estudiante_id = ' + id
44
+    result_db = connection.execute(query).fetchall()
45
+
46
+    q = result_db[0]
47
+
48
+
49
+
39 50
     ###### semestres
40 51
 
41
-    q = result_db
42
-    semestres={}
43 52
 
44
-    semestre = ('1', '2', '3', '4', )
45
-    clases = ('ingles', 'espa~Nol', 'arte', 'mate', )
46
-    for num in semestre:
47
-        cursos = {}
53
+    #funcion para obtener el promedio en un semestre dado
54
+    def get_promedio_del_semestre(id, semestre):
55
+        query = 'SELECT sum(n.valor)/sum(e.valor) as promedio\
56
+            FROM matricula m, oferta o, cursos c, evaluaciones e, notas n\
57
+            WHERE  m.oferta_id = o.curso_id AND o.curso_id = c.id \
58
+            		AND c.id = e.oferta_id AND e.id = n.evaluacion_id AND n.estudiante_id ='+ id + '\
59
+                    AND o.semestre = "' + str(semestre) + '"'
60
+        result = connection.execute(query).fetchall()
61
+        return str((result[0][0]))
62
+
63
+    query = 'SELECT o.id, o.semestre, c.codigo, c.titulo, \
64
+            		sum(e.valor) as total, sum(n.valor) as puntos, \
65
+                    sum(n.valor)/sum(e.valor) as promedio\
66
+            FROM matricula m, oferta o, cursos c, evaluaciones e, notas n\
67
+            WHERE  m.oferta_id = o.curso_id AND o.curso_id = c.id \
68
+            		AND c.id = e.oferta_id AND e.id = n.evaluacion_id AND n.estudiante_id = ' + id +'\
69
+            GROUP BY o.id ORDER BY o.semestre'
70
+    result_db = connection.execute(query).fetchall()
71
+
72
+    clases = result_db
73
+    promedio_acumulado = 0
74
+    semestres={}
75
+    semestre={}
76
+    ctr=0
77
+    ctr2=0
78
+    ctr3=1
79
+    if len(clases)>0:
80
+        codigo_semestre = clases[0][1]
48 81
         for clase in clases:
49
-            curso = {}
50
-            curso.update({"codigo":'33'})
51
-            curso.update({"Nota":'A'})
52
-            curso.update({"Creditos":'3'})
53
-            curso.update({"nombre":clase})
54
-            cursos.update({clase:curso})
55
-        semestres.update({"semestre "+num:cursos})
82
+            #add clases al semestre
83
+            if codigo_semestre == clase[1]:
84
+                curso = {}
85
+                curso.update({"id":str(clase[0])})
86
+                curso.update({"Semestre":str(clase[1])})
87
+                curso.update({"codigo":str(clase[2])})
88
+                curso.update({"nombre":str(clase[3])})
89
+                curso.update({"total":str(clase[4])})
90
+                curso.update({"obtenido":str(clase[5])})
91
+                curso.update({"porciento":str(int(clase[6]*100))})
92
+                semestre.update({codigo_semestre+'//'+str(ctr):curso})
93
+            #si el semestre es distinto,
94
+
95
+            elif codigo_semestre != clase[1]:
96
+                # add semestre a semestres
97
+                promedio = {}
98
+                promedio_semestre = get_promedio_del_semestre(id, curso.get('Semestre'))
99
+                promedio_acumulado += float(promedio_semestre)
100
+                promedio.update({"acumulado":promedio_semestre[:-2]})
101
+                promedio.update({"total":str(promedio_acumulado/ctr3)[:-2]})
102
+                semestre.update({"promedio":promedio})
103
+                semestres.update({"semestre "+codigo_semestre:semestre})
104
+                # y vaciar semestre
105
+                semestre={}
106
+                codigo_semestre = clase[1]
107
+                ctr = 0
108
+                curso = {}
109
+                curso.update({"id":str(clase[0])})
110
+                curso.update({"Semestre":str(clase[1])})
111
+                curso.update({"codigo":str(clase[2])})
112
+                curso.update({"nombre":str(clase[3])})
113
+                curso.update({"total":str(clase[4])})
114
+                curso.update({"obtenido":str(clase[5])})
115
+                curso.update({"porciento":str(int(clase[6]*100))})
116
+                semestre.update({codigo_semestre+'//'+str(ctr):curso})
117
+                ctr3 += 1
118
+            ctr += 1
119
+            ctr2 += 1
120
+
121
+            if ctr2==len(clases):
122
+                promedio = {}
123
+                promedio_semestre = get_promedio_del_semestre(id, curso.get('Semestre'))
124
+                promedio_acumulado += float(promedio_semestre)
125
+                promedio.update({"acumulado":promedio_semestre[:-2]})
126
+                promedio.update({"total":str(promedio_acumulado/ctr3)[:-2]})
127
+                semestre.update({"promedio":promedio})
128
+                semestres.update({"semestre "+clase[1]:semestre})
129
+    estudiante.update({"promedio":str(promedio_acumulado/ctr3)[:-2]+'%'})
56 130
 
57 131
 
58 132
     result = {}