Browse Source

Updated

Asistencia Dinamica,
Notas estilo rulebook,
Estudiantes pueden ver su asistencia
parent
commit
437289ce09

+ 172
- 46
escuela/prueba.py View File

@@ -117,6 +117,7 @@ class asistencia(db.Model):
117 117
     id = db.Column(db.Integer, primary_key = True, autoincrement = True)
118 118
     matricula_id = db.Column(db.Integer, db.ForeignKey(matricula.id))
119 119
     fecha = db.Column(db.DateTime, default = datetime.datetime.now())
120
+    valor = db.Column(db.Integer)
120 121
 class notas(db.Model):
121 122
     id = db.Column(db.Integer)
122 123
     evaluacion_id = db.Column(db.Integer, db.ForeignKey(evaluaciones.id), primary_key=True)
@@ -126,13 +127,15 @@ class notas(db.Model):
126 127
     def __repr__(self):
127 128
         return 'nota '  +str(self.id)
128 129
     
129
-
130
+#Para ver los botones
130 131
 
131 132
 @app.route('/')
132 133
 
133 134
 def helloWorld():
134 135
     return render_template('index.html')
135 136
 
137
+#Este código es para añadir clases
138
+
136 139
 @app.route('/addClass', methods=['GET', 'POST'])
137 140
 def addClass():
138 141
     if request.method == 'POST':
@@ -172,6 +175,7 @@ def addSomething():
172 175
     else:
173 176
         return render_template('addSomething.html')
174 177
 
178
+#Este pedazo acepta ofertas, 
175 179
 
176 180
 @app.route('/addOferta', methods =['GET', 'POST'])
177 181
 def addOferta():
@@ -190,6 +194,7 @@ def addOferta():
190 194
 
191 195
         count = int(request.form['countRow'])
192 196
 
197
+        #Despues de oferta, añadir lo de facultad, permite más de un maestro
193 198
         for x in range(count):
194 199
             post_maestro = int(request.form['Maestro[{}]'.format(x)])
195 200
 
@@ -208,6 +213,7 @@ def addOferta():
208 213
 
209 214
 
210 215
 
216
+#Add oferta a los estudiantes, matricularlos
211 217
 
212 218
 @app.route ('/addMatricula/<int:oferId>', methods =['GET', 'POST'])
213 219
 def addMatricula(oferId):
@@ -232,11 +238,19 @@ def addMatricula(oferId):
232 238
         return render_template('addMatricula.html', estudiantes = estudiantesAll, oferId=oferId, matriculados = matriculadosAll)
233 239
 
234 240
 
235
-
241
+#############################################33333
242
+#
243
+#
244
+#     MAESTRO DASHBOARD
245
+#
246
+#
247
+#
248
+##################################################33
236 249
 @app.route('/Maestro/<int:MaestroId>')
237 250
 def Maestro(MaestroId):
238 251
     cursosTodos = db.engine.execute('select c.codigo, o.horario, c.titulo, f.oferta_id from `oferta` o, `cursos` c, `facultad_ofrece` f where f.oferta_id = o.id and f.facultad_id = {} and o.curso_id =c.id'.format(MaestroId))
239
-    return render_template('dashboard.html', MaestroId = MaestroId, los_cursos = cursosTodos)
252
+    fecha = datetime.date.today()
253
+    return render_template('dashboard.html', MaestroId = MaestroId, los_cursos = cursosTodos, fecha = fecha)
240 254
 
241 255
 
242 256
 
@@ -248,39 +262,78 @@ def Maestro(MaestroId):
248 262
 
249 263
 #Add estudiantes
250 264
 
265
+######################################
266
+#
267
+#
268
+#
269
+#   AñADIR EVALUACIONES 
270
+#
271
+#
272
+#
273
+######################################
251 274
 @app.route('/Maestro/<int:MaestroId>/<int:ofertaId>/addNota', methods =['GET','POST'])
252 275
 def addNota(MaestroId, ofertaId):
276
+
277
+
253 278
     if request.method =='POST':
279
+
254 280
         post_ofertaId = ofertaId
255
-        post_tipo = request.form['tipo']
256
-        post_valor = request.form['valor']
257
-        post_fecha = request.form['Fecha']
258
-        post_fecha = post_fecha.split('-')
259 281
 
282
+        #Editar es una variable que contiene, añadir, borrar, o el id de la evaluacion para update
283
+
284
+        if request.get_json()['editar'] == 'Añadir':
285
+            post_tipo = request.get_json()['tipo']
286
+            post_valor = int(request.get_json()['valor'])
287
+            post_fecha = request.get_json()['Fecha']
288
+            
289
+           
260 290
 
261
-        newEval = evaluaciones(oferta_id=post_ofertaId, tipo=post_tipo, valor = post_valor, fecha =datetime.date(int(post_fecha[0]),int(post_fecha[1]),int(post_fecha[2])))
262 291
 
263
-        db.session.add(newEval)
264
-        db.session.commit()
292
+            newEval = evaluaciones(oferta_id=post_ofertaId, tipo=post_tipo, valor = post_valor, fecha =datetime.date(int(post_fecha[0]),int(post_fecha[1]),int(post_fecha[2])))
293
+
294
+            db.session.add(newEval)
295
+            db.session.commit()
296
+            
297
+
298
+        elif request.get_json()['editar'] == 'Borrar':
299
+            db.session.execute('DELETE from `evaluaciones` where id = {}'.format(int(request.get_json()['tipo'])))
300
+      
301
+        else:
302
+           
303
+            post_tipo = request.get_json()['tipo']
304
+            post_valor = int(request.get_json()['valor'])
305
+            post_fecha = request.get_json()['Fecha'] 
306
+            post_id = int(request.get_json()['editar'])
265 307
         
266
-        last_entry = evaluaciones.query.filter_by(oferta_id=ofertaId).order_by(evaluaciones.id.desc()).first()
308
+            db.session.execute('UPDATE `evaluaciones` SET tipo ="{}", valor ={}, fecha = "{}" where id = {}'.format(post_tipo, post_valor, post_fecha, post_id))
309
+            db.session.commit()
310
+            
267 311
         
312
+           
268 313
         return redirect('/Maestro/'+ str(MaestroId) + '/'+str(ofertaId)+'/addNota')
269 314
 
270 315
     else:
316
+
317
+        #creo un diccionario para poder crear un json y utilizarlo en jquery 
318
+        #and llenar html y llenar la tabla dinamico
319
+        
320
+        
321
+
271 322
         newCourses = cursos.query.filter_by(id=ofertaId).first()
272 323
         allEval = evaluaciones.query.filter_by(oferta_id=ofertaId).all()
273
-        bigList =[]
324
+        bigList ={}
274 325
 
275 326
         for evaluacion in allEval:
276
-            dictionary ={}
277
-            dictionary['Valor'] = int(evaluacion.valor)
278
-            dictionary['evalId'] = int(evaluacion.id)
279
-            dictionary['tipo'] = evaluacion.tipo
280
-            dictionary['fecha'] = str(evaluacion.fecha)
281
-            bigList.append(dictionary)
327
+            bigList.setdefault(int(evaluacion.id), {})['Valor'] =int(evaluacion.valor)
328
+           
329
+            bigList[evaluacion.id]['evalId'] = int(evaluacion.id)
330
+            bigList[evaluacion.id]['tipo'] = evaluacion.tipo
331
+            bigList[evaluacion.id]['fecha'] = str(evaluacion.fecha)
332
+           
282 333
 
283
-        return render_template('addEvaluacion.html',MaestroId = MaestroId, el_curso=ofertaId, evaluaciones = allEval)
334
+        return render_template('addEvaluacion.html',MaestroId = MaestroId, el_curso=ofertaId, evaluaciones = bigList)
335
+
336
+#Añadir las notas de forma dinámicas
284 337
 
285 338
 @app.route('/Maestro/<int:MaestroId>/<int:ofertaId>/addNotas', methods = ['GET','POST'])
286 339
 def notas1(MaestroId, ofertaId):
@@ -288,7 +341,7 @@ def notas1(MaestroId, ofertaId):
288 341
     
289 342
     query = db.engine.execute('SELECT usuarios.id, usuarios.nombres, usuarios.apellidos from `notas`, `usuarios`, `evaluaciones` where evaluaciones.id = notas.evaluacion_id and notas.estudiante_id = usuarios.id and evaluaciones.oferta_id={}  group by usuarios.id order by usuarios.apellidos'.format(ofertaId))
290 343
     
291
-    notasQuery = db.engine.execute('SELECT notas.valor Saco, notas.estudiante_id, notas.evaluacion_id, evaluaciones.valor ValorReal from `notas`, `usuarios`, `evaluaciones` where evaluaciones.id = notas.evaluacion_id and notas.estudiante_id = usuarios.id and evaluaciones.oferta_id={}  order by usuarios.apellidos, evaluaciones.id'.format(ofertaId))
344
+    
292 345
     
293 346
     notasCompletaJson ={}
294 347
 
@@ -299,6 +352,10 @@ def notas1(MaestroId, ofertaId):
299 352
     for Id in query2:
300 353
         evalIds.append(int(Id.id))
301 354
 
355
+    #loop para cada estudiante, pongo la nota que sacaron en cada evaluacion
356
+    #estilo evaluaciones = ['evalId1', 'evalid2']
357
+    #       notasSaco = ['evalId1-cuantoSaco', 'evalId2-cuantoSaco']
358
+    # en el mismo orden
302 359
     
303 360
     for estudiante in query:
304 361
         Evaluaciones =[]
@@ -310,7 +367,16 @@ def notas1(MaestroId, ofertaId):
310 367
 
311 368
                 Evaluaciones.append(nota.evaluacion_id)
312 369
                 notasSaco.append(nota.Saco)
313
-        
370
+
371
+    #aqui termino creando el diccionario twoDimensional estilo
372
+    #{estudianteId: {
373
+    #                   nombre:
374
+    #                   apellidos:
375
+    #                   valorSaco:[] 
376
+    #                   evaluacion:[]
377
+    # }
378
+    # estudianteId2 : } ese estilo
379
+    #   
314 380
         notasCompletaJson.setdefault(estudiante.id, {})['nombre'] = estudiante.nombres
315 381
         notasCompletaJson[estudiante.id]['apellidos'] = estudiante.apellidos
316 382
         notasCompletaJson[estudiante.id]['valorSaco'] = notasSaco
@@ -321,7 +387,9 @@ def notas1(MaestroId, ofertaId):
321 387
 
322 388
             
323 389
     if request.method =="POST":
324
-        #post = request.get_json()
390
+        #recibe dinamicamente desde el javascript la posicion exacta del estudiante, que id y eso
391
+        #utilizando jquery, vea addNotas.html para más info
392
+
325 393
         post_stuId = int(request.get_json()['StudentId'])
326 394
         post_nota = int(request.get_json()['Nota'])
327 395
 
@@ -329,12 +397,14 @@ def notas1(MaestroId, ofertaId):
329 397
 
330 398
         Exists = notas.query.filter_by(estudiante_id=post_stuId, evaluacion_id=post_id).first()
331 399
 
400
+        #si existe la nota, hazle update a la tabla, else añadela
401
+
332 402
         if(Exists):
333 403
         
334 404
             query =db.engine.execute('UPDATE `notas` SET valor ={} WHERE estudiante_id ={} and evaluacion_id={}'.format(post_nota, post_stuId, post_id))
335 405
         
336 406
         else:
337
-            notaNueva = notas(evaluacion_id = post_id, estudiante_id=post_StuId, valor =post_nota)
407
+            notaNueva = notas(evaluacion_id = post_id, estudiante_id=post_stuId, valor =post_nota)
338 408
             db.session.add(notaNueva)
339 409
         
340 410
         db.session.commit()
@@ -364,6 +434,7 @@ def notas1(MaestroId, ofertaId):
364 434
         return render_template('addNotas.html',MaestroId = MaestroId, evaluaciones = evaluacionesTodos, estudiantes=estudiantes_Todos, ofertaId = ofertaId, notasCompletas = notasCompletaJson, evalIds=evalIds)
365 435
     
366 436
 
437
+#crea cuenta para estudiante o maestro, no importante
367 438
 
368 439
 @app.route ('/estudiante', methods=['GET','POST'])
369 440
 def addStudent():
@@ -410,26 +481,10 @@ def addStudent():
410 481
     else:
411 482
         return render_template('estudiante.html')
412 483
 
413
-#beta, might delete later, add notas
414
-
415
-#@app.route('/addNota', methods = ['GET', 'POST'])
416
-#def addNota():
417
-#    if request.method== 'POST':
418
-#        for x in range(int(request.form['countPost'])):
419
-#            post_email = request.form['email[{}]'.format(x)]
420
-#            post_evaluacion = request.form['evaluacion[{}]'.format(x)]
421
-#            print(post_email, post_evaluacion, '\n')
422
-#        
423
-#
424
-#    else:
425
-#        estudiantes2 = estudiante.query.order_by(estudiante.apellidos).all()
426
-#        return render_template('addNotas.html', estudiantes=estudiantes2)
427
-
428
-
429
-
430 484
 
431 485
 
432 486
 
487
+#NO ES IMPORTANTE, se puede borrar, quiere ver notas, pero se puede hacer en añadir notas
433 488
 
434 489
 @app.route('/Maestro/<int:MaestroId>/<int:ofertaId>/verNotas')
435 490
 def cursosVerNotas(MaestroId, ofertaId):
@@ -451,14 +506,56 @@ def verNotasEstudiantes(MaestroId, evalId):
451 506
     return render_template('verNotasEstudiantes.html',table=result, MaestroId = MaestroId, evalId=evalId)
452 507
 
453 508
 
509
+#Añadir la asistencia de los estudiantes.
510
+#recibe la info dinamicamente como addNotas
511
+#El mismo estilo que el de añadir notas, solo que la fecha, cuando cambia, reloads y busca 
512
+#la asistencia de ese día
454 513
 
455
-@app.route("/Maestro/<int:MaestroId>/<int:ofertaId>/addAsistencia", methods = ['POST', 'GET'])
456
-def pasarAsistencia(MaestroId, ofertaId):
457
-    
458
-    estudiantes_Todos =  estudiantes_Todos = db.engine.execute('select u.apellidos, u.nombres, u.id from `usuarios` u, `matricula` m where m.estudiante_id = u.id and m.oferta_id ={}'.format(ofertaId))
514
+@app.route("/Maestro/<int:MaestroId>/<int:ofertaId>/addAsistencia/<string:fecha>", methods = ['POST', 'GET'])
515
+def pasarAsistencia(MaestroId, ofertaId, fecha):
516
+    if request.method =='POST':
517
+
518
+        post_Asistencia = int(request.get_json()['Asistencia'])
519
+        post_Matricula = int(request.get_json()['Matricula'])
520
+        post_Fecha = request.get_json()['Fecha']
521
+        post_Fecha = post_Fecha.split('-')
522
+        
523
+        post_Fecha = datetime.date(int(post_Fecha[0]),int(post_Fecha[1]),int(post_Fecha[2]))
524
+
525
+
526
+        Exists = asistencia.query.filter_by(fecha = post_Fecha, matricula_id = post_Matricula).first()
527
+
528
+        #si existe, update, sino, crea
529
+
530
+        if (Exists!=None):
531
+            query = db.engine.execute('UPDATE `asistencia` SET valor = {} WHERE fecha = "{}" and matricula_id = {}'.format(post_Asistencia, post_Fecha, post_Matricula))
532
+            print('aqui')
533
+            db.session.commit()
534
+
535
+        else:
536
+            asistenciaNueva = asistencia(fecha = post_Fecha, matricula_id = post_Matricula, valor = post_Asistencia)
537
+
538
+            db.session.add(asistenciaNueva)
539
+            db.session.commit()
540
+        return redirect("/Maestro/{}/{}/addAsistencia/{}".format(MaestroId, ofertaId, post_Fecha))
541
+
542
+
543
+#aqui creo un diccionario para json, y poder poner checked a la asistencia, 
544
+#si la asistencia existe pues la pone checked
545
+
546
+    elif request.method =='GET':
547
+        
548
+        
549
+        estudiantes_Todos =  db.engine.execute('select u.apellidos, u.nombres, m.id matricula, u.id from `usuarios` u, `matricula` m where m.estudiante_id = u.id and m.oferta_id ={} order by u.apellidos'.format(ofertaId))
550
+        matriculaAsis = db.engine.execute('select fecha, matricula_id, valor from asistencia, (select m.id from `usuarios` u, `matricula` m where m.estudiante_id = u.id and m.oferta_id ={} order by u.apellidos) t where t.id = matricula_id and fecha = "{}"'.format(ofertaId, fecha))
551
+        dictList = {}
552
+        for matri in matriculaAsis:
553
+            
554
+            dictList.setdefault(matri.matricula_id,{})['Asistencia']= matri.valor
555
+        
459 556
    
460 557
     
461
-    return render_template('Asistencia.html', MaestroId = MaestroId, estudiantes = estudiantes_Todos, cursos=ofertaId)
558
+        return render_template('Asistencia.html', MaestroId = MaestroId, estudiantes = estudiantes_Todos, ofertaId=ofertaId, fecha = fecha, dictList =dictList)
462 559
 
463 560
 
464 561
 #############################
@@ -473,13 +570,42 @@ def dashEstudiantes(estId):
473 570
     
474 571
     return render_template('dashEstudiantes.html',nombre=nombre.nombres, estId=estId)
475 572
 
573
+
574
+#enseña las notas y la asistencia que tiene en ese curso
575
+
476 576
 @app.route('/dashEstudiantes/<int:estId>/notas')
477 577
 def dashEstNotas(estId):
478 578
     cursosMatri = cursos.query.all()
479 579
     
480 580
     resultEstudiante = db.engine.execute('SELECT sum(evaluaciones.valor) valorReal, sum(notas.valor) valorSaco, cursos.codigo, cursos.titulo, evaluaciones.oferta_id, matricula.estudiante_id FROM `cursos`, `matricula`, `oferta`, `notas`, `evaluaciones` where matricula.estudiante_id={} and evaluaciones.id=notas.evaluacion_id and matricula.estudiante_id=notas.estudiante_id and evaluaciones.oferta_id = oferta.id and matricula.oferta_id = evaluaciones.oferta_id and cursos.id = oferta.curso_id group by matricula.oferta_id'.format(estId))
481 581
     nombre = usuarios.query.filter_by(id=estId).first().nombres
482
-    return render_template('estuNotas.html',nombre=nombre, todaNota = resultEstudiante, estId= estId)
582
+    
583
+    matriculaEstu = db.engine.execute ('select id, oferta_id from matricula  where estudiante_id ={}'.format(estId))
584
+    ofertasConAsistencia ={}
585
+
586
+    for matri in matriculaEstu:
587
+        asistencia =db.engine.execute('select count(valor) asis from `asistencia` where matricula_id ={} and valor =0'.format(matri.id))
588
+        asistencia = asistencia.fetchone()
589
+        
590
+        ofertasConAsistencia.setdefault(matri.oferta_id, {})['Presente']= int(asistencia.asis)
591
+        
592
+        asistencia =db.engine.execute('select count(valor) asis from `asistencia` where matricula_id ={} and valor =1'.format(matri.id))
593
+        asistencia = asistencia.fetchone()
594
+
595
+        ofertasConAsistencia[matri.oferta_id]['Tarde']= int(asistencia.asis)
596
+        
597
+        asistencia =db.engine.execute('select count(valor) asis from `asistencia` where matricula_id ={} and valor =2'.format(matri.id))
598
+        asistencia = asistencia.fetchone()
599
+        
600
+        ofertasConAsistencia[matri.oferta_id]['Ausente']= int(asistencia.asis)
601
+        
602
+        asistencia = db.engine.execute('select count(valor) asis from `asistencia` where matricula_id ={} and valor =3'.format(matri.id))
603
+        asistencia = asistencia.fetchone()
604
+        
605
+        ofertasConAsistencia[matri.oferta_id]['Excusado']= int(asistencia.asis)
606
+    
607
+
608
+    return render_template('estuNotas.html',nombre=nombre, todaNota = resultEstudiante, estId= estId, ofertasConAsistencia = ofertasConAsistencia)
483 609
 
484 610
 
485 611
 @app.route('/dashEstudiantes/<int:estId>/notas/<int:ofertaId>')

+ 2
- 6
escuela/static/evaluacion.js View File

@@ -1,7 +1,3 @@
1
-var eval = angular.module('eval', []);
2
-
3
-var evaluaciones = jQuery.parseJSON('{{ evaluaciones | tojson | safe }}')
4
-
5 1
 eval.directive('ngConfirmClick', [
6 2
     function(){
7 3
         return {
@@ -42,10 +38,10 @@ eval.controller('evalController', function evalController($http, $scope){
42 38
 
43 39
     }
44 40
 
45
-    $scope.edit = function(eval){
41
+    $scope.edit = function(key){
46 42
         
47 43
         
48
-        $scope.eval = eval;
44
+        $scope.eval = evaluaciones[key];
49 45
         $scope.operacion ='Actualizar';
50 46
 
51 47
     }

+ 85
- 19
escuela/templates/Asistencia.html View File

@@ -4,20 +4,21 @@
4 4
 {% endblock %}
5 5
 
6 6
 {% block css %}
7
-<link rel='stylesheet' href ='../../../static/css/estilo.css'>
7
+<link rel='stylesheet' href ='../../../../static/css/estilo.css'>
8 8
 {% endblock %}
9 9
 {% block body %}
10 10
 <h1 class = 'text-center text-white bg-dark'>Asistencia</h1>
11 11
 <div class ='row'>
12
-    <div class = 'col-1'>
13
-    </div>
14
-
15
-    <div class="col-7">
12
+   
13
+    <div class="col">
16 14
     <form action="/dashboard/{{MaestroId}}/{{ofertaId}}/addAsistencia" method="POST"></form>
17
-        <table class='table table-bordered'>
15
+    <label for="Fecha">Fecha (Deje en blanco si la asistencia es de hoy):</label>
16
+        <input type="date" id="Fecha" name="Fecha" value = '{{fecha}}' onchange ='changeFecha(event, {{MaestroId}} , {{ofertaId}});'> 
17
+       
18
+    <table class='table table-bordered table-hover'>
18 19
             <thead>
19 20
                 <tr>
20
-                    <th>Estudiantes</th>
21
+                    <th class ='w-50'>Estudiantes</th>
21 22
                     <th>Presente</th>
22 23
                     <th>Tarde</th>
23 24
                     <th>Ausente</th>
@@ -27,13 +28,13 @@
27 28
             <tbody>
28 29
             {% set count = namespace(value=0) %}
29 30
             {% for estud in estudiantes %}
30
-                <tr>
31
+                <tr data-value = {{estud.matricula}}>
31 32
                      <td>{{estud.apellidos}} {{estud.nombres}}</td>
32
-                     <div class = "form-check form-check-inline">
33
-                     <td> <div class = "form-check form-check-inline"><input class="form-check-input" type="radio" name="Asistencia[{{count.value}}]" id="inlineRadio1" value="0"></div> </td>
34
-                     <td> <div class = "form-check form-check-inline"><input class="form-check-input" type="radio" name="Asistencia[{{count.value}}]" id="inlineRadio1" value="1"></div> </td>
35
-                     <td> <div class = "form-check form-check-inline"><input class="form-check-input" type="radio" name="Asistencia[{{count.value}}]" id="inlineRadio1" value="2"></div> </td>
36
-                     <td> <div class = "form-check form-check-inline"><input class="form-check-input" type="radio" name="Asistencia[{{count.value}}]" id="inlineRadio1" value="3"></div> </td>
33
+                     
34
+                     <td> <div class = "form-check form-check-inline"><input class="form-check-input" type="radio" name="Asistencia[{{count.value}}]" onchange = 'changeAsistencia("Asistencia[{{count.value}}]", "{{estud.matricula}}", 0, {{MaestroId}}, {{ofertaId}})' id="0"></div> </td>
35
+                     <td> <div class = "form-check form-check-inline"><input class="form-check-input" type="radio" name="Asistencia[{{count.value}}]" onchange = 'changeAsistencia("Asistencia[{{count.value}}]", "{{estud.matricula}}", 1, {{MaestroId}}, {{ofertaId}})' id="1"></div> </td>
36
+                     <td> <div class = "form-check form-check-inline"><input class="form-check-input" type="radio" name="Asistencia[{{count.value}}]" onchange = 'changeAsistencia("Asistencia[{{count.value}}]", "{{estud.matricula}}", 2, {{MaestroId}}, {{ofertaId}})' id="2"></div> </td>
37
+                     <td> <div class = "form-check form-check-inline"><input class="form-check-input" type="radio" name="Asistencia[{{count.value}}]" onchange = 'changeAsistencia("Asistencia[{{count.value}}]", "{{estud.matricula}}", 3, {{MaestroId}}, {{ofertaId}})' id="3"></div> </td>
37 38
                      
38 39
                 </tr>
39 40
                 {% set count.value = count.value + 1 %}
@@ -42,16 +43,81 @@
42 43
         </table>
43 44
         <button type='submit' class='btn btn-success'>Someter</button>
44 45
     </div>
45
-    <div class ='col-4'>
46
-        <label for="Fecha">Fecha (Deje en blanco si la asistencia es de hoy):</label>
47
-        <input type="date" id="Fecha" name="Fecha"> 
48
-        <input type = 'hidden' name='count' value ={{count.value}}>
49
-        
46
+    
50 47
 
51 48
     </form>
52
-    </div>
49
+    
53 50
             
54 51
         </div>
52
+
53
+        <script>
54
+
55
+            function changeFecha(e, maestro, oferta){
56
+               
57
+
58
+                
59
+                
60
+
61
+                location.replace('/Maestro/'+maestro+'/'+oferta+'/addAsistencia/'+e.target.value);
62
+
63
+                
64
+
65
+            }
66
+        
67
+            var asistenciaCompleta = jQuery.parseJSON('{{dictList | tojson | safe }}');
68
+
69
+            $(document).ready(function(){
70
+                
71
+                $('tr').each(function(){
72
+
73
+                    var student = $(this).data('value');
74
+                    student = parseInt(student);
75
+                    var tr = $(this);
76
+                    
77
+                    tr.children('td').each(function(){
78
+                        var td = $(this);
79
+                        td.children('div').each(function(){
80
+                            var div = $(this)
81
+                            div.children('input').each(function(){
82
+
83
+                                if(typeof(asistenciaCompleta[student])!='undefined' && $(this).attr('id') == asistenciaCompleta[student].Asistencia){
84
+                                $(this).prop('checked', true);
85
+                                }
86
+
87
+                            })
88
+                            
89
+                            
90
+                            }
91
+                        )
92
+                    })
93
+
94
+                })
95
+            })
96
+
97
+            function changeAsistencia(nameInput, matricula, valor, maestro, oferta){
98
+
99
+
100
+                
101
+                var fecha = document.getElementById('Fecha');
102
+                fecha = $(fecha).val()
103
+
104
+                matricula = parseInt(matricula);
105
+
106
+                var xhr = new XMLHttpRequest();
107
+
108
+                xhr.open("POST",'/Maestro/'+maestro+'/'+oferta+'/addAsistencia/'+fecha, true);
109
+
110
+                xhr.setRequestHeader('Content-Type', 'application/json');
111
+                xhr.send(JSON.stringify(
112
+                    {
113
+                        'Matricula': matricula,
114
+                        'Asistencia':valor,
115
+                        'Fecha': fecha
116
+                    }
117
+                    
118
+                ));
119
+            }
120
+        </script>
55 121
           
56 122
 
57 123
           

+ 93
- 34
escuela/templates/addEvaluacion.html View File

@@ -6,30 +6,31 @@
6 6
 {% block css %}
7 7
 <link rel='stylesheet' href ='../../../static/css/estilo.css'>
8 8
 
9
-    <!--<script src ="{{url_for('static', filename='evaluacion.js') }}"></script>-->
9
+    
10 10
 {% endblock %}
11 11
 
12 12
 {% block body %}
13 13
 
14 14
 <h1 class = 'text-center text-white bg-dark'>{{el_curso.codigo}}</h1>
15
-<div ng-app="eval" ng-controller="evalController">
16 15
 
17 16
 <div class ='row'>
18 17
  
19 18
     <div class ='col-3'></div>
20 19
     <div  class = 'col-6'>
21 20
        
22
-           <form action ='/Maestro/{{MaestroId}}/{{el_curso}}/addNota' method = 'POST' id = 'form'>
21
+           <form  method = 'POST' id = 'form'>
22
+           
23 23
            
24
-           <!--<form name="cursoForm" ng-submit="submitForm()">-->
25
-            Tipo: <input type="text"  name = 'tipo' ng-model ='eval.tipo' class="form-control" placeholder="Examen/Asignaci&oacute;n" required>
26
-            Fecha: <input type="date"  name ='Fecha' ng-model ='eval.name' class="form-control" required>
27
-            Valor: <input type="text" name = 'valor' ng-model ='eval.valor' class="form-control" placeholder="100" required>
28
-             <button type='submit' class = 'btn btn-primary'>Someter</button>
24
+            Tipo: <input type="text"  name = 'tipo'  class="form-control" placeholder="Examen/Asignaci&oacute;n" required>
25
+            Fecha: <input type="date"  name ='Fecha'  class="form-control" required>
26
+            Valor: <input type="text" name = 'valor'  class="form-control" placeholder="100" required>
27
+             <button type='button' onclick="prepareJson()" class = 'btn btn-primary'>Someter</button>
29 28
              <br>
30 29
              <br>
31 30
              <input  type = 'hidden' id ='maestroId' value ="{{MaestroId}}">
32 31
              <input type = 'hidden' id = 'ofertaId' value ='{{el_curso}}'>
32
+             <input type = 'hidden' id = 'editar' value = 'Añadir'>
33
+             <button type='button' class = 'btn btn-primary' id ='anadir' style='display:none' onclick='add("anadir")'>Añadir Curso</button>
33 34
              <a type = 'button' class ='btn btn-success' href ='/Maestro/{{MaestroId}}/{{el_curso}}/addNotas'>Añadir notas a Estudiantes</a>
34 35
     </div>
35 36
     
@@ -39,7 +40,7 @@
39 40
 
40 41
 <div class = 'row'>
41 42
     <div class ='col'>
42
-        <table class = 'table table-hover'>
43
+        <table class = 'table table-hover' id ="myTable">
43 44
             <thead>
44 45
                 <tr>
45 46
                     <th>Evaluaciones</th>
@@ -50,15 +51,7 @@
50 51
                 </tr>
51 52
             </thead>
52 53
             <tbody>
53
-                {% for eval in evaluaciones %}
54
-                <tr>
55
-                    <td>{{eval.tipo}}</td>
56
-                    <td>{{eval.valor}}</td>
57
-                    <td>{{eval.fecha}}</td>
58
-                    <td><a type = 'button' class ='btn btn-warning' ng-click = 'edit(eval.id)'>Editar</a></td>
59
-                    <td><a type = 'button' class ='btn btn-danger' ng-confirm-click = 'Estás seguro que quieres borrar esta evaluación?' confirmed-click ='delEval(eval.id)'>Borrar</a></td>
60
-                    
61
-                </tr>{% endfor %}
54
+                
62 55
                     
63 56
                
64 57
             </tbody>
@@ -70,28 +63,94 @@
70 63
 <br>
71 64
             <div class='text-right'>
72 65
           
73
-            <!--<button type = 'button' class = 'btn btn-success' onclick='javascript: addRow("form")'>Añadir Evaluacion</button></form>
74
-            --></div>
66
+           </div>
75 67
           
76 68
     
77
-        <!--<script>
69
+        <script>
70
+
71
+     
72
+
73
+
74
+var evaluaciones = jQuery.parseJSON('{{ evaluaciones | tojson | safe }}')
75
+
76
+function add(string){
77
+
78
+    document.getElementById(string).style.display ='none';
79
+    $(document.getElementsByName('tipo')).removeAttr('value');
80
+    $(document.getElementsByName('Fecha')).removeAttr('value');
81
+    $(document.getElementsByName('valor')).removeAttr('value');
82
+
83
+
84
+}
85
+
86
+function delEval(id){
87
+    $(document.getElementById('editar')).val('Borrar');
88
+    $(document.getElementsByName('tipo')).val(id);
89
+    prepareJson();
90
+}
91
+
92
+$(document).ready(function(){
93
+    $.each(evaluaciones, function(key, value){
94
+        var tdNombre = '<td>'+ value.tipo +'</td>';
95
+        var tdValor = '<td>'+ value.Valor.toString()+'</td>';
96
+        var tdFecha = '<td>'+value.fecha+'</td>';
97
+        var tdEditar = "<td><a type = 'button' class ='btn btn-warning' onclick = 'edit("+key+")'>Editar</a></td"
98
+        var tdDelete = "<td><a type = 'button' class ='btn btn-danger'  onclick ='delEval("+key+")'>Borrar</a></td>"
99
+
100
+        var total = '<tr>'+tdNombre+tdValor + tdFecha + tdEditar + tdDelete +'</tr>';
101
+        
102
+        $('#myTable > tbody:last-child').append(total);
103
+                    
104
+
105
+
106
+
107
+    })
108
+})
109
+
110
+function edit(id){
111
+    var tipo = document.getElementsByName('tipo')
112
+    $(tipo).val(evaluaciones[id].tipo)
113
+    var fecha = document.getElementsByName('Fecha')
114
+    $(fecha).val(evaluaciones[id].fecha)
115
+    
116
+    var valor = document.getElementsByName('valor')
117
+    $(valor).val(evaluaciones[id].Valor)
118
+
119
+    $(document.getElementById('editar')).val(id)
120
+
121
+
122
+}
123
+
124
+
125
+
126
+function prepareJson(){
127
+    var xhr  = new XMLHttpRequest();
128
+
129
+    var tipo = $(document.getElementsByName('tipo')).val();
130
+    var fecha = $(document.getElementsByName('Fecha')).val();
131
+    var valor = $(document.getElementsByName('valor')).val();
132
+    var editar = $(document.getElementById('editar')).val();
133
+    var maestro = $(document.getElementById('maestroId')).val();
134
+    var oferta = $(document.getElementById('ofertaId')).val();
135
+    xhr.open('POST', '/Maestro/'+maestro+'/'+oferta+'/addNota', true);
136
+    xhr.setRequestHeader('Content-Type', 'application/json');
137
+    xhr.send(JSON.stringify(
138
+        {
139
+            'tipo':tipo,
140
+            'Fecha': fecha,
141
+            'valor' : valor,
142
+            'editar': editar
143
+        }
144
+    ))
145
+
146
+    location.reload()
147
+}
148
+
78 149
 
79
-            /*
80
-            function addRow(string){
81
-                var node = document.createElement("div");
82
-                node.className = 'col'
83
-                
84
-                var newForm = document.getElementById(string)
85
-                node.innerHTML ='Tipo: <input type="text" name = "tipo" class="form-control" placeholder="Examen/Asignaci&oacute;n">'+
86
-                'Fecha: <input type="date" name = "Fecha" class="form-control" >'+
87
-                'Valor: <input type="text" name = "valor" class="form-control" placeholder="100">';
88
-                newForm.appendChild(node)
89
-            }
90 150
 
91 151
 
92
-*/
93 152
         </script>
94 153
           
95
-</div>-->
154
+</div>
96 155
    
97 156
 {% endblock %}

+ 1
- 1
escuela/templates/dashboard.html View File

@@ -26,7 +26,7 @@
26 26
         <td>{{cursos.titulo}}</td>
27 27
         <td>{{cursos.horario}}</td>
28 28
         <td><a href="/Maestro/{{MaestroId}}/{{cursos.oferta_id}}/addNota" class="boton task2">Añadir Notas</a></td>
29
-        <td><a href="/Maestro/{{MaestroId}}/{{cursos.oferta_id}}/addAsistencia" class="boton task2">Asistencia</a></td>
29
+        <td><a href="/Maestro/{{MaestroId}}/{{cursos.oferta_id}}/addAsistencia/{{fecha}}" class="boton task2">Asistencia</a></td>
30 30
         <td><a href="/Maestro/{{MaestroId}}/{{cursos.oferta_id}}/verNotas" class="boton task2">Editar Notas</a></td>
31 31
         </tr><br>
32 32
         {% endfor %}

+ 18
- 0
escuela/templates/estuNotas.html View File

@@ -45,6 +45,7 @@
45 45
                     <td>
46 46
                         <a href="/dashEstudiantes/{{estId}}/notas/{{estu.oferta_id}}" class="boton task2">Evaluaciones</a>
47 47
                     </td>
48
+                    <td data-value = {{estu.oferta_id}}></td>
48 49
                 </tr>
49 50
 
50 51
 
@@ -53,5 +54,22 @@
53 54
             </tbody>
54 55
         </table>
55 56
     </div>
57
+    <script>
58
+        var ofertaAsistencia = jQuery.parseJSON('{{ofertasConAsistencia | tojson | safe }}')
59
+
60
+        $(document).ready(function(){
61
+
62
+            $('tr').each(function(){
63
+
64
+                var ofertaId = $(this).children('td').last().data('value');
65
+                if (typeof(ofertaId)!= 'undefined'){
66
+                text = 'P: '+ofertaAsistencia[ofertaId].Presente + ', A: '+ofertaAsistencia[ofertaId].Ausente+
67
+                ' T: ' + ofertaAsistencia[ofertaId].Tarde+ ', Ex: ' +ofertaAsistencia[ofertaId].Excusado;
68
+                $(this).children(':last').text(text)
69
+                }
70
+            })
71
+            
72
+        })
73
+    </script>
56 74
 
57 75
 {% endblock %}