Browse Source

Updated

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

+ 172
- 46
escuela/prueba.py View File

117
     id = db.Column(db.Integer, primary_key = True, autoincrement = True)
117
     id = db.Column(db.Integer, primary_key = True, autoincrement = True)
118
     matricula_id = db.Column(db.Integer, db.ForeignKey(matricula.id))
118
     matricula_id = db.Column(db.Integer, db.ForeignKey(matricula.id))
119
     fecha = db.Column(db.DateTime, default = datetime.datetime.now())
119
     fecha = db.Column(db.DateTime, default = datetime.datetime.now())
120
+    valor = db.Column(db.Integer)
120
 class notas(db.Model):
121
 class notas(db.Model):
121
     id = db.Column(db.Integer)
122
     id = db.Column(db.Integer)
122
     evaluacion_id = db.Column(db.Integer, db.ForeignKey(evaluaciones.id), primary_key=True)
123
     evaluacion_id = db.Column(db.Integer, db.ForeignKey(evaluaciones.id), primary_key=True)
126
     def __repr__(self):
127
     def __repr__(self):
127
         return 'nota '  +str(self.id)
128
         return 'nota '  +str(self.id)
128
     
129
     
129
-
130
+#Para ver los botones
130
 
131
 
131
 @app.route('/')
132
 @app.route('/')
132
 
133
 
133
 def helloWorld():
134
 def helloWorld():
134
     return render_template('index.html')
135
     return render_template('index.html')
135
 
136
 
137
+#Este código es para añadir clases
138
+
136
 @app.route('/addClass', methods=['GET', 'POST'])
139
 @app.route('/addClass', methods=['GET', 'POST'])
137
 def addClass():
140
 def addClass():
138
     if request.method == 'POST':
141
     if request.method == 'POST':
172
     else:
175
     else:
173
         return render_template('addSomething.html')
176
         return render_template('addSomething.html')
174
 
177
 
178
+#Este pedazo acepta ofertas, 
175
 
179
 
176
 @app.route('/addOferta', methods =['GET', 'POST'])
180
 @app.route('/addOferta', methods =['GET', 'POST'])
177
 def addOferta():
181
 def addOferta():
190
 
194
 
191
         count = int(request.form['countRow'])
195
         count = int(request.form['countRow'])
192
 
196
 
197
+        #Despues de oferta, añadir lo de facultad, permite más de un maestro
193
         for x in range(count):
198
         for x in range(count):
194
             post_maestro = int(request.form['Maestro[{}]'.format(x)])
199
             post_maestro = int(request.form['Maestro[{}]'.format(x)])
195
 
200
 
208
 
213
 
209
 
214
 
210
 
215
 
216
+#Add oferta a los estudiantes, matricularlos
211
 
217
 
212
 @app.route ('/addMatricula/<int:oferId>', methods =['GET', 'POST'])
218
 @app.route ('/addMatricula/<int:oferId>', methods =['GET', 'POST'])
213
 def addMatricula(oferId):
219
 def addMatricula(oferId):
232
         return render_template('addMatricula.html', estudiantes = estudiantesAll, oferId=oferId, matriculados = matriculadosAll)
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
 @app.route('/Maestro/<int:MaestroId>')
249
 @app.route('/Maestro/<int:MaestroId>')
237
 def Maestro(MaestroId):
250
 def Maestro(MaestroId):
238
     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))
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
 
262
 
249
 #Add estudiantes
263
 #Add estudiantes
250
 
264
 
265
+######################################
266
+#
267
+#
268
+#
269
+#   AñADIR EVALUACIONES 
270
+#
271
+#
272
+#
273
+######################################
251
 @app.route('/Maestro/<int:MaestroId>/<int:ofertaId>/addNota', methods =['GET','POST'])
274
 @app.route('/Maestro/<int:MaestroId>/<int:ofertaId>/addNota', methods =['GET','POST'])
252
 def addNota(MaestroId, ofertaId):
275
 def addNota(MaestroId, ofertaId):
276
+
277
+
253
     if request.method =='POST':
278
     if request.method =='POST':
279
+
254
         post_ofertaId = ofertaId
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
         return redirect('/Maestro/'+ str(MaestroId) + '/'+str(ofertaId)+'/addNota')
313
         return redirect('/Maestro/'+ str(MaestroId) + '/'+str(ofertaId)+'/addNota')
269
 
314
 
270
     else:
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
         newCourses = cursos.query.filter_by(id=ofertaId).first()
322
         newCourses = cursos.query.filter_by(id=ofertaId).first()
272
         allEval = evaluaciones.query.filter_by(oferta_id=ofertaId).all()
323
         allEval = evaluaciones.query.filter_by(oferta_id=ofertaId).all()
273
-        bigList =[]
324
+        bigList ={}
274
 
325
 
275
         for evaluacion in allEval:
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
 @app.route('/Maestro/<int:MaestroId>/<int:ofertaId>/addNotas', methods = ['GET','POST'])
338
 @app.route('/Maestro/<int:MaestroId>/<int:ofertaId>/addNotas', methods = ['GET','POST'])
286
 def notas1(MaestroId, ofertaId):
339
 def notas1(MaestroId, ofertaId):
288
     
341
     
289
     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))
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
     notasCompletaJson ={}
346
     notasCompletaJson ={}
294
 
347
 
299
     for Id in query2:
352
     for Id in query2:
300
         evalIds.append(int(Id.id))
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
     for estudiante in query:
360
     for estudiante in query:
304
         Evaluaciones =[]
361
         Evaluaciones =[]
310
 
367
 
311
                 Evaluaciones.append(nota.evaluacion_id)
368
                 Evaluaciones.append(nota.evaluacion_id)
312
                 notasSaco.append(nota.Saco)
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
         notasCompletaJson.setdefault(estudiante.id, {})['nombre'] = estudiante.nombres
380
         notasCompletaJson.setdefault(estudiante.id, {})['nombre'] = estudiante.nombres
315
         notasCompletaJson[estudiante.id]['apellidos'] = estudiante.apellidos
381
         notasCompletaJson[estudiante.id]['apellidos'] = estudiante.apellidos
316
         notasCompletaJson[estudiante.id]['valorSaco'] = notasSaco
382
         notasCompletaJson[estudiante.id]['valorSaco'] = notasSaco
321
 
387
 
322
             
388
             
323
     if request.method =="POST":
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
         post_stuId = int(request.get_json()['StudentId'])
393
         post_stuId = int(request.get_json()['StudentId'])
326
         post_nota = int(request.get_json()['Nota'])
394
         post_nota = int(request.get_json()['Nota'])
327
 
395
 
329
 
397
 
330
         Exists = notas.query.filter_by(estudiante_id=post_stuId, evaluacion_id=post_id).first()
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
         if(Exists):
402
         if(Exists):
333
         
403
         
334
             query =db.engine.execute('UPDATE `notas` SET valor ={} WHERE estudiante_id ={} and evaluacion_id={}'.format(post_nota, post_stuId, post_id))
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
         else:
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
             db.session.add(notaNueva)
408
             db.session.add(notaNueva)
339
         
409
         
340
         db.session.commit()
410
         db.session.commit()
364
         return render_template('addNotas.html',MaestroId = MaestroId, evaluaciones = evaluacionesTodos, estudiantes=estudiantes_Todos, ofertaId = ofertaId, notasCompletas = notasCompletaJson, evalIds=evalIds)
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
 @app.route ('/estudiante', methods=['GET','POST'])
439
 @app.route ('/estudiante', methods=['GET','POST'])
369
 def addStudent():
440
 def addStudent():
410
     else:
481
     else:
411
         return render_template('estudiante.html')
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
 @app.route('/Maestro/<int:MaestroId>/<int:ofertaId>/verNotas')
489
 @app.route('/Maestro/<int:MaestroId>/<int:ofertaId>/verNotas')
435
 def cursosVerNotas(MaestroId, ofertaId):
490
 def cursosVerNotas(MaestroId, ofertaId):
451
     return render_template('verNotasEstudiantes.html',table=result, MaestroId = MaestroId, evalId=evalId)
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
     
570
     
474
     return render_template('dashEstudiantes.html',nombre=nombre.nombres, estId=estId)
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
 @app.route('/dashEstudiantes/<int:estId>/notas')
576
 @app.route('/dashEstudiantes/<int:estId>/notas')
477
 def dashEstNotas(estId):
577
 def dashEstNotas(estId):
478
     cursosMatri = cursos.query.all()
578
     cursosMatri = cursos.query.all()
479
     
579
     
480
     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))
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
     nombre = usuarios.query.filter_by(id=estId).first().nombres
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
 @app.route('/dashEstudiantes/<int:estId>/notas/<int:ofertaId>')
611
 @app.route('/dashEstudiantes/<int:estId>/notas/<int:ofertaId>')

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

1
-var eval = angular.module('eval', []);
2
-
3
-var evaluaciones = jQuery.parseJSON('{{ evaluaciones | tojson | safe }}')
4
-
5
 eval.directive('ngConfirmClick', [
1
 eval.directive('ngConfirmClick', [
6
     function(){
2
     function(){
7
         return {
3
         return {
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
         $scope.operacion ='Actualizar';
45
         $scope.operacion ='Actualizar';
50
 
46
 
51
     }
47
     }

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

4
 {% endblock %}
4
 {% endblock %}
5
 
5
 
6
 {% block css %}
6
 {% block css %}
7
-<link rel='stylesheet' href ='../../../static/css/estilo.css'>
7
+<link rel='stylesheet' href ='../../../../static/css/estilo.css'>
8
 {% endblock %}
8
 {% endblock %}
9
 {% block body %}
9
 {% block body %}
10
 <h1 class = 'text-center text-white bg-dark'>Asistencia</h1>
10
 <h1 class = 'text-center text-white bg-dark'>Asistencia</h1>
11
 <div class ='row'>
11
 <div class ='row'>
12
-    <div class = 'col-1'>
13
-    </div>
14
-
15
-    <div class="col-7">
12
+   
13
+    <div class="col">
16
     <form action="/dashboard/{{MaestroId}}/{{ofertaId}}/addAsistencia" method="POST"></form>
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
             <thead>
19
             <thead>
19
                 <tr>
20
                 <tr>
20
-                    <th>Estudiantes</th>
21
+                    <th class ='w-50'>Estudiantes</th>
21
                     <th>Presente</th>
22
                     <th>Presente</th>
22
                     <th>Tarde</th>
23
                     <th>Tarde</th>
23
                     <th>Ausente</th>
24
                     <th>Ausente</th>
27
             <tbody>
28
             <tbody>
28
             {% set count = namespace(value=0) %}
29
             {% set count = namespace(value=0) %}
29
             {% for estud in estudiantes %}
30
             {% for estud in estudiantes %}
30
-                <tr>
31
+                <tr data-value = {{estud.matricula}}>
31
                      <td>{{estud.apellidos}} {{estud.nombres}}</td>
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
                 </tr>
39
                 </tr>
39
                 {% set count.value = count.value + 1 %}
40
                 {% set count.value = count.value + 1 %}
42
         </table>
43
         </table>
43
         <button type='submit' class='btn btn-success'>Someter</button>
44
         <button type='submit' class='btn btn-success'>Someter</button>
44
     </div>
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
     </form>
48
     </form>
52
-    </div>
49
+    
53
             
50
             
54
         </div>
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
 {% block css %}
6
 {% block css %}
7
 <link rel='stylesheet' href ='../../../static/css/estilo.css'>
7
 <link rel='stylesheet' href ='../../../static/css/estilo.css'>
8
 
8
 
9
-    <!--<script src ="{{url_for('static', filename='evaluacion.js') }}"></script>-->
9
+    
10
 {% endblock %}
10
 {% endblock %}
11
 
11
 
12
 {% block body %}
12
 {% block body %}
13
 
13
 
14
 <h1 class = 'text-center text-white bg-dark'>{{el_curso.codigo}}</h1>
14
 <h1 class = 'text-center text-white bg-dark'>{{el_curso.codigo}}</h1>
15
-<div ng-app="eval" ng-controller="evalController">
16
 
15
 
17
 <div class ='row'>
16
 <div class ='row'>
18
  
17
  
19
     <div class ='col-3'></div>
18
     <div class ='col-3'></div>
20
     <div  class = 'col-6'>
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
              <br>
28
              <br>
30
              <br>
29
              <br>
31
              <input  type = 'hidden' id ='maestroId' value ="{{MaestroId}}">
30
              <input  type = 'hidden' id ='maestroId' value ="{{MaestroId}}">
32
              <input type = 'hidden' id = 'ofertaId' value ='{{el_curso}}'>
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
              <a type = 'button' class ='btn btn-success' href ='/Maestro/{{MaestroId}}/{{el_curso}}/addNotas'>Añadir notas a Estudiantes</a>
34
              <a type = 'button' class ='btn btn-success' href ='/Maestro/{{MaestroId}}/{{el_curso}}/addNotas'>Añadir notas a Estudiantes</a>
34
     </div>
35
     </div>
35
     
36
     
39
 
40
 
40
 <div class = 'row'>
41
 <div class = 'row'>
41
     <div class ='col'>
42
     <div class ='col'>
42
-        <table class = 'table table-hover'>
43
+        <table class = 'table table-hover' id ="myTable">
43
             <thead>
44
             <thead>
44
                 <tr>
45
                 <tr>
45
                     <th>Evaluaciones</th>
46
                     <th>Evaluaciones</th>
50
                 </tr>
51
                 </tr>
51
             </thead>
52
             </thead>
52
             <tbody>
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
             </tbody>
57
             </tbody>
70
 <br>
63
 <br>
71
             <div class='text-right'>
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
         </script>
152
         </script>
94
           
153
           
95
-</div>-->
154
+</div>
96
    
155
    
97
 {% endblock %}
156
 {% endblock %}

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

26
         <td>{{cursos.titulo}}</td>
26
         <td>{{cursos.titulo}}</td>
27
         <td>{{cursos.horario}}</td>
27
         <td>{{cursos.horario}}</td>
28
         <td><a href="/Maestro/{{MaestroId}}/{{cursos.oferta_id}}/addNota" class="boton task2">Añadir Notas</a></td>
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
         <td><a href="/Maestro/{{MaestroId}}/{{cursos.oferta_id}}/verNotas" class="boton task2">Editar Notas</a></td>
30
         <td><a href="/Maestro/{{MaestroId}}/{{cursos.oferta_id}}/verNotas" class="boton task2">Editar Notas</a></td>
31
         </tr><br>
31
         </tr><br>
32
         {% endfor %}
32
         {% endfor %}

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

45
                     <td>
45
                     <td>
46
                         <a href="/dashEstudiantes/{{estId}}/notas/{{estu.oferta_id}}" class="boton task2">Evaluaciones</a>
46
                         <a href="/dashEstudiantes/{{estId}}/notas/{{estu.oferta_id}}" class="boton task2">Evaluaciones</a>
47
                     </td>
47
                     </td>
48
+                    <td data-value = {{estu.oferta_id}}></td>
48
                 </tr>
49
                 </tr>
49
 
50
 
50
 
51
 
53
             </tbody>
54
             </tbody>
54
         </table>
55
         </table>
55
     </div>
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
 {% endblock %}
75
 {% endblock %}