|
@@ -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>')
|