Brak opisu

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628
  1. #Comentar no es mi fuerte Gabriel Santiago
  2. #Este file es 'viejo' estoy editando más cosas. Pero ye
  3. #also los html's lo tengo en mi compu no los subo al git
  4. from flask import Flask, render_template, request, redirect, jsonify
  5. #flask_sqlalchemy es una excelente libreria para usar bases de datos
  6. from flask_sqlalchemy import SQLAlchemy
  7. import datetime, json
  8. app = Flask(__name__)
  9. #para sql segun lo que vi
  10. #hay que instalar un pymysql despues tener un file con lo de User, password, host, db
  11. #entonces then do something like
  12. #connect = 'mysql+pymysql://dbuser:password@dbHost/dbName
  13. #vi en sqlAlchemy documentation que no es necesario pymysql pero pymysql tiene cosas interesantes
  14. #entonces aqui fuera app.config[lo que esta abajo] = connect
  15. connect = 'mysql+pymysql://root@localhost/registro_escolar'
  16. app.config['SQLALCHEMY_DATABASE_URI'] = connect
  17. #aqui se crea el objeto db, utilizando el config de app
  18. db = SQLAlchemy(app)
  19. #aqui estan las clases que serian las tablas,
  20. #por alguna razon tienes que crear las tablas que vayas a usar en python
  21. #so like si creo una de maestros pues
  22. #class Maestro(db.model):
  23. #db.Column crea columna, el tipo de dato y tiene algunos features como primary_key, nullable, db.ForeignKey etc
  24. class usuarios(db.Model):
  25. id = db.Column(db.Integer, primary_key=True, autoincrement =True)
  26. nombres = db.Column(db.String(100))
  27. apellidos = db.Column(db.String(100))
  28. email = db.Column(db.String(100))
  29. username = db.Column(db.String(100), nullable = True)
  30. password = db.Column(db.String(100), nullable = True)
  31. fecha_nacimiento = db.Column(db.DateTime, default = datetime.datetime.now())
  32. direccion1 = db.Column(db.String(200), default = 'En la casa de tu mai')
  33. direccion2 = db.Column(db.String(200), default = 'En la casa de tu pai tambien')
  34. ciudad = db.Column(db.String(100), default ='En la ciudad de los dioses')
  35. pais = db.Column(db.String(100), default = 'Tu Pai')
  36. zipcode = db.Column(db.String(100), default= 'cabron' )
  37. telefono1 = db.Column(db.String(16),default= 'cabron' )
  38. telefono2 = db.Column(db.String(20),default= 'cabron' )
  39. genero = db.Column(db.String(30),default= 'cabron' )
  40. def __repr__(self):
  41. return 'Usuario ' + str(self.id)
  42. class cursos(db.Model):
  43. id = db.Column(db.Integer, primary_key=True, autoincrement = True)
  44. codigo = db.Column(db.String(12))
  45. titulo = db.Column(db.String(100))
  46. grado = db.Column(db.Integer)
  47. descripcion = db.Column(db.String(200))
  48. def __repr__(self):
  49. return 'Curso ' + str(self.id)
  50. class facultad(db.Model):
  51. user_id = db.Column(db.Integer, db.ForeignKey(usuarios.id), primary_key=True)
  52. especialidad = db.Column(db.String(200))
  53. educacion_especial = db.Column(db.Integer)
  54. class oferta(db.Model):
  55. id = db.Column(db.Integer, primary_key=True, autoincrement = True)
  56. oferta_id = db.Column(db.Integer, db.ForeignKey(cursos.id))
  57. semestre = db.Column(db.String(20))
  58. horario = db.Column(db.String(100))
  59. class facultad_ofrece(db.Model):
  60. id = db.Column(db.Integer, primary_key=True, autoincrement = True)
  61. oferta_id = db.Column(db.Integer, db.ForeignKey(oferta.id))
  62. facultad_id = db.Column(db.Integer, db.ForeignKey(facultad.user_id))
  63. porciento = db.Column(db.Integer, default = 100)
  64. class estudiantes(db.Model):
  65. user_id = db.Column(db.Integer, db.ForeignKey(usuarios.id), primary_key=True)
  66. grado = db.Column(db.Integer)
  67. educacion_especial = db.Column(db.String(30))
  68. def __repr__(self):
  69. return 'estudiante ' + str(self.user_id)
  70. class matricula(db.Model):
  71. id = db.Column(db.Integer, primary_key=True)
  72. estudiante_id = db.Column(db.Integer, db.ForeignKey(estudiantes.user_id))
  73. oferta_id = db.Column(db.Integer, db.ForeignKey(oferta.id))
  74. class evaluaciones(db.Model):
  75. id = db.Column(db.Integer, primary_key =True, autoincrement = True)
  76. tipo = db.Column(db.String(100))
  77. valor = db.Column(db.Integer)
  78. fecha = db.Column(db.DateTime, default = datetime.datetime.now())
  79. oferta_id = db.Column(db.Integer, db.ForeignKey(oferta.id))
  80. class asistencia(db.Model):
  81. id = db.Column(db.Integer, primary_key = True, autoincrement = True)
  82. matricula_id = db.Column(db.Integer, db.ForeignKey(matricula.id))
  83. fecha = db.Column(db.DateTime, default = datetime.datetime.now())
  84. valor = db.Column(db.Integer)
  85. class notas(db.Model):
  86. id = db.Column(db.Integer)
  87. evaluacion_id = db.Column(db.Integer, db.ForeignKey(evaluaciones.id), primary_key=True)
  88. estudiante_id = db.Column(db.Integer, db.ForeignKey(estudiantes.user_id), primary_key=True)
  89. valor = db.Column(db.Integer)
  90. def __repr__(self):
  91. return 'nota ' +str(self.id)
  92. #Para ver los botones
  93. @app.route('/')
  94. def helloWorld():
  95. return render_template('index.html')
  96. #Este código es para añadir clases
  97. @app.route('/addClass', methods=['GET', 'POST'])
  98. def addClass():
  99. if request.method == 'POST':
  100. post_codigo = request.form['codigo']
  101. post_titulo = request.form['titulo']
  102. post_grado = request.form['grado']
  103. post_descripcion = request.form['descripcion']
  104. curso_nuevo = cursos(codigo =post_codigo, titulo=post_titulo, grado = post_grado, descripcion=post_descripcion)
  105. db.session.add(curso_nuevo)
  106. db.session.commit()
  107. return redirect('/addClass')
  108. else:
  109. return render_template('addClases.html')
  110. #beta, felt cute in this pic might delete later
  111. #add notas
  112. @app.route ('/add', methods=['GET','POST'])
  113. def addSomething():
  114. if request.method =='POST':
  115. post_nombre = request.form['nombre']
  116. post_nota = request.form['Nota']
  117. nota_nueva = Notas(nombre=post_nota, valor = post_nota)
  118. db.session.add(nota_nueva)
  119. db.session.commit()
  120. return redirect('/addNota')
  121. else:
  122. return render_template('addSomething.html')
  123. #Este pedazo acepta ofertas,
  124. @app.route('/addOferta', methods =['GET', 'POST'])
  125. def addOferta():
  126. if request.method =='POST':
  127. post_oferta_id = int(request.form['curso'])
  128. post_academico = request.form['academico']
  129. post_horario = request.form['horario']
  130. ofertaNueva = oferta(oferta_id =post_oferta_id, semestre = post_academico, horario =post_horario)
  131. db.session.add(ofertaNueva)
  132. db.session.commit()
  133. oferta_idQue = oferta.query.order_by(oferta.id.desc()).first().id
  134. count = int(request.form['countRow'])
  135. #Despues de oferta, añadir lo de facultad, permite más de un maestro
  136. for x in range(count):
  137. post_maestro = int(request.form['Maestro[{}]'.format(x)])
  138. maestro_oferta= facultad_ofrece(oferta_id =oferta_idQue, facultad_id =post_maestro)
  139. db.session.add(maestro_oferta)
  140. db.session.commit()
  141. return redirect('/addOferta')
  142. else:
  143. cursosAll = cursos.query.all()
  144. maestrosAll = db.engine.execute('SELECT * FROM `facultad` f, `usuarios` u where f.user_id = u.id')
  145. ofertaAll = db.engine.execute('SELECT o.semestre, o.horario, f.oferta_id, count(f.facultad_id) cantidadMaestros, f.oferta_id, c.codigo, c.titulo, c.grado FROM `oferta` o, `cursos` c, `facultad_ofrece` f where o.curso_id =c.id and f.oferta_id = o.id group by f.oferta_id')
  146. return render_template('addOferta.html', cursos= cursosAll, maestros= maestrosAll, ofertas = ofertaAll)
  147. #Add oferta a los estudiantes, matricularlos
  148. @app.route ('/addMatricula/<int:oferId>', methods =['GET', 'POST'])
  149. def addMatricula(oferId):
  150. if request.method =='POST':
  151. count = int(request.form['countRow'])
  152. for x in range(count):
  153. post_estudiante = int(request.form['estudiantes[{}]'.format(x)])
  154. matriculaNueva = matricula(estudiante_id = post_estudiante, oferta_id=oferId)
  155. db.session.add(matriculaNueva)
  156. db.session.commit()
  157. return redirect('/addMatricula/{}'.format(oferId))
  158. else:
  159. matriculadosAll = db.engine.execute('SELECT u.nombres, u.apellidos FROM `usuarios` u, `matricula` m where m.oferta_id ={} and m.estudiante_id = u.id ORDER BY u.apellidos'.format(oferId))
  160. estudiantesAll = db.engine.execute('SELECT u.apellidos, u.nombres, e.user_id FROM `usuarios` u, `estudiantes` e where u.id = e.user_id ORDER BY u.apellidos' )
  161. return render_template('addMatricula.html', estudiantes = estudiantesAll, oferId=oferId, matriculados = matriculadosAll)
  162. #############################################33333
  163. #
  164. #
  165. # MAESTRO DASHBOARD
  166. #
  167. #
  168. #
  169. ##################################################33
  170. @app.route('/Maestro/<int:MaestroId>')
  171. def Maestro(MaestroId):
  172. 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))
  173. fecha = datetime.date.today()
  174. return render_template('dashboard.html', MaestroId = MaestroId, los_cursos = cursosTodos, fecha = fecha)
  175. #@app.route('/Maestro/<int:MaestroId>/<int:ofertaId>')
  176. #def cursosPagina(MaestroId, ofertaId):
  177. # newCourses = cursos.query.filter_by(id=ofertaId).first()
  178. # return render_template('cursos.html',MaestroId = MaestroId, id=ofertaId, el_curso=newCourses)
  179. #Add estudiantes
  180. ######################################
  181. #
  182. #
  183. #
  184. # AñADIR EVALUACIONES
  185. #
  186. #
  187. #
  188. ######################################
  189. @app.route('/Maestro/<int:MaestroId>/<int:ofertaId>/addNota', methods =['GET','POST'])
  190. def addNota(MaestroId, ofertaId):
  191. if request.method =='POST':
  192. post_ofertaId = ofertaId
  193. #Editar es una variable que contiene, añadir, borrar, o el id de la evaluacion para update
  194. if request.get_json()['editar'] == 'Añadir':
  195. post_tipo = request.get_json()['tipo']
  196. post_valor = int(request.get_json()['valor'])
  197. post_fecha = request.get_json()['Fecha']
  198. 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])))
  199. db.session.add(newEval)
  200. db.session.commit()
  201. elif request.get_json()['editar'] == 'Borrar':
  202. db.session.execute('DELETE from `evaluaciones` where id = {}'.format(int(request.get_json()['tipo'])))
  203. else:
  204. post_tipo = request.get_json()['tipo']
  205. post_valor = int(request.get_json()['valor'])
  206. post_fecha = request.get_json()['Fecha']
  207. post_id = int(request.get_json()['editar'])
  208. db.session.execute('UPDATE `evaluaciones` SET tipo ="{}", valor ={}, fecha = "{}" where id = {}'.format(post_tipo, post_valor, post_fecha, post_id))
  209. db.session.commit()
  210. return redirect('/Maestro/'+ str(MaestroId) + '/'+str(ofertaId)+'/addNota')
  211. else:
  212. #creo un diccionario para poder crear un json y utilizarlo en jquery
  213. #and llenar html y llenar la tabla dinamico
  214. newCourses = cursos.query.filter_by(id=ofertaId).first()
  215. allEval = evaluaciones.query.filter_by(oferta_id=ofertaId).all()
  216. bigList ={}
  217. for evaluacion in allEval:
  218. bigList.setdefault(int(evaluacion.id), {})['Valor'] =int(evaluacion.valor)
  219. bigList[evaluacion.id]['evalId'] = int(evaluacion.id)
  220. bigList[evaluacion.id]['tipo'] = evaluacion.tipo
  221. bigList[evaluacion.id]['fecha'] = str(evaluacion.fecha)
  222. return render_template('addEvaluacion.html',MaestroId = MaestroId, el_curso=ofertaId, evaluaciones = bigList)
  223. #Añadir las notas de forma dinámicas
  224. @app.route('/Maestro/<int:MaestroId>/<int:ofertaId>/addNotas', methods = ['GET','POST'])
  225. def notas1(MaestroId, ofertaId):
  226. 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))
  227. notasCompletaJson ={}
  228. query2 = db.engine.execute('SELECT id FROM `evaluaciones` where oferta_id = {}'.format(ofertaId))
  229. evalIds =[]
  230. for Id in query2:
  231. evalIds.append(int(Id.id))
  232. #loop para cada estudiante, pongo la nota que sacaron en cada evaluacion
  233. #estilo evaluaciones = ['evalId1', 'evalid2']
  234. # notasSaco = ['evalId1-cuantoSaco', 'evalId2-cuantoSaco']
  235. # en el mismo orden
  236. for estudiante in query:
  237. Evaluaciones =[]
  238. notasSaco = []
  239. 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))
  240. for nota in notasQuery:
  241. if nota.estudiante_id == estudiante.id:
  242. Evaluaciones.append(nota.evaluacion_id)
  243. notasSaco.append(nota.Saco)
  244. #aqui termino creando el diccionario twoDimensional estilo
  245. #{estudianteId: {
  246. # nombre:
  247. # apellidos:
  248. # valorSaco:[]
  249. # evaluacion:[]
  250. # }
  251. # estudianteId2 : } ese estilo
  252. #
  253. notasCompletaJson.setdefault(estudiante.id, {})['nombre'] = estudiante.nombres
  254. notasCompletaJson[estudiante.id]['apellidos'] = estudiante.apellidos
  255. notasCompletaJson[estudiante.id]['valorSaco'] = notasSaco
  256. notasCompletaJson[estudiante.id]['evaluacion'] = Evaluaciones
  257. if request.method =="POST":
  258. #recibe dinamicamente desde el javascript la posicion exacta del estudiante, que id y eso
  259. #utilizando jquery, vea addNotas.html para más info
  260. post_stuId = int(request.get_json()['StudentId'])
  261. post_nota = int(request.get_json()['Nota'])
  262. post_id = int(request.get_json()['evalId'])
  263. Exists = notas.query.filter_by(estudiante_id=post_stuId, evaluacion_id=post_id).first()
  264. #si existe la nota, hazle update a la tabla, else añadela
  265. if(Exists):
  266. query =db.engine.execute('UPDATE `notas` SET valor ={} WHERE estudiante_id ={} and evaluacion_id={}'.format(post_nota, post_stuId, post_id))
  267. else:
  268. notaNueva = notas(evaluacion_id = post_id, estudiante_id=post_stuId, valor =post_nota)
  269. db.session.add(notaNueva)
  270. db.session.commit()
  271. #for x in range(int(post_filas)):
  272. # post_student = request.form['id_usuario[{}]'.format(x)]
  273. # for y in range(int(post_columnas)):
  274. # post_valor = request.form['evaluacion[{}][{}]'.format(x, y)]
  275. # post_evaluacionId =request.form['cantidadEval[{}]'.format(y)]
  276. # notaNueva = notas( evaluacion_id=post_evaluacionId, estudiante_id=post_student, valor = post_valor)
  277. # db.session.add(notaNueva)
  278. # db.session.commit()
  279. return redirect('/Maestro/'+str(MaestroId) +'/' + str(ofertaId)+'/addNota')
  280. else:
  281. evaluacionesTodos = db.engine.execute('select * from `evaluaciones` where oferta_id ={}'.format(ofertaId))
  282. 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))
  283. return render_template('addNotas.html',MaestroId = MaestroId, evaluaciones = evaluacionesTodos, estudiantes=estudiantes_Todos, ofertaId = ofertaId, notasCompletas = notasCompletaJson, evalIds=evalIds)
  284. #crea cuenta para estudiante o maestro, no importante
  285. @app.route ('/estudiante', methods=['GET','POST'])
  286. def addStudent():
  287. if request.method == 'POST':
  288. #acentos = {'á':'&aacute;', 'é': '&eacute;', 'í':'&iacute;', 'ó': '&oacute;', 'ú':'&uacute;',
  289. #'ü':'&uuml;', 'Á': '&Aacute;', 'É': '&Eacute;', 'Í':'&Iacute;', 'Ó':'&Oacute;', 'Ú':'&Uacute',
  290. #'Ü':'&Uuml;', 'Ñ':'&Ntilde'}
  291. post_apellidos = request.form['apellidos']
  292. post_nombre = request.form['nombre']
  293. post_email = request.form['email']
  294. estudiante_nuevo = usuarios(email=post_email, nombres=post_nombre, apellidos=post_apellidos)
  295. db.session.add(estudiante_nuevo)
  296. db.session.commit()
  297. last_id= usuarios.query.order_by(usuarios.id.desc()).first().id
  298. if(request.form['Usuario'] == 'Estudiante'):
  299. post_grado = request.form['grado']
  300. post_educ = request.form['educ']
  301. #for key in acentos.keys():
  302. # post_apellidos= post_apellidos.replace(key,acentos[key])
  303. # post_nombre = post_nombre.replace(key,acentos[key])
  304. estudiante_nuevo = estudiantes(user_id=last_id, grado = post_grado, educacion_especial=post_educ)
  305. db.session.add(estudiante_nuevo)
  306. db.session.commit()
  307. else:
  308. post_especialidad = request.form['especialidad']
  309. maestro_nuevo = facultad(user_id = last_id, especialidad= post_especialidad, educacion_especial =0)
  310. db.session.add(maestro_nuevo)
  311. db.session.commit()
  312. #last_id= 8.query.order_by(usuarios.id.desc()).first()
  313. #db.session.add(estudiantes(user_id =last_id, grado=post_grado, educacion_especial =post_educ))
  314. #db.session.commit()
  315. return redirect('/estudiante')
  316. else:
  317. return render_template('estudiante.html')
  318. #NO ES IMPORTANTE, se puede borrar, quiere ver notas, pero se puede hacer en añadir notas
  319. @app.route('/Maestro/<int:MaestroId>/<int:ofertaId>/verNotas')
  320. def cursosVerNotas(MaestroId, ofertaId):
  321. evaluacionesTodas = evaluaciones.query.filter_by(oferta_id=ofertaId).all()
  322. cursosTodos = cursos.query.filter_by(id=ofertaId).all()
  323. return render_template('verNotas.html', MaestroId = MaestroId, cursos=cursosTodos, evaluaciones=evaluacionesTodas)
  324. @app.route("/Maestro/<int:MaestroId>/<int:evalId>/verNotasEstudiantes")
  325. def verNotasEstudiantes(MaestroId, evalId):
  326. result = db.engine.execute('SELECT * FROM `notas` n, `usuarios` where n.evaluacion_id ={} and usuarios.id = n.estudiante_id'.format(evalId))
  327. #db.session.query(evaluacion, usuarios).join(Usuarios).filter(usuarios.id == evaluacion.estudiante_id).order_by(usuarios.apellidos)
  328. return render_template('verNotasEstudiantes.html',table=result, MaestroId = MaestroId, evalId=evalId)
  329. #Añadir la asistencia de los estudiantes.
  330. #recibe la info dinamicamente como addNotas
  331. #El mismo estilo que el de añadir notas, solo que la fecha, cuando cambia, reloads y busca
  332. #la asistencia de ese día
  333. @app.route("/Maestro/<int:MaestroId>/<int:ofertaId>/addAsistencia/<string:fecha>", methods = ['POST', 'GET'])
  334. def pasarAsistencia(MaestroId, ofertaId, fecha):
  335. if request.method =='POST':
  336. post_Asistencia = int(request.get_json()['Asistencia'])
  337. post_Matricula = int(request.get_json()['Matricula'])
  338. post_Fecha = request.get_json()['Fecha']
  339. post_Fecha = post_Fecha.split('-')
  340. post_Fecha = datetime.date(int(post_Fecha[0]),int(post_Fecha[1]),int(post_Fecha[2]))
  341. Exists = asistencia.query.filter_by(fecha = post_Fecha, matricula_id = post_Matricula).first()
  342. #si existe, update, sino, crea
  343. if (Exists!=None):
  344. query = db.engine.execute('UPDATE `asistencia` SET valor = {} WHERE fecha = "{}" and matricula_id = {}'.format(post_Asistencia, post_Fecha, post_Matricula))
  345. print('aqui')
  346. db.session.commit()
  347. else:
  348. asistenciaNueva = asistencia(fecha = post_Fecha, matricula_id = post_Matricula, valor = post_Asistencia)
  349. db.session.add(asistenciaNueva)
  350. db.session.commit()
  351. return redirect("/Maestro/{}/{}/addAsistencia/{}".format(MaestroId, ofertaId, post_Fecha))
  352. #aqui creo un diccionario para json, y poder poner checked a la asistencia,
  353. #si la asistencia existe pues la pone checked
  354. elif request.method =='GET':
  355. 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))
  356. 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))
  357. dictList = {}
  358. for matri in matriculaAsis:
  359. dictList.setdefault(matri.matricula_id,{})['Asistencia']= matri.valor
  360. return render_template('Asistencia.html', MaestroId = MaestroId, estudiantes = estudiantes_Todos, ofertaId=ofertaId, fecha = fecha, dictList =dictList)
  361. #############################
  362. #
  363. #ESTUDIANTES
  364. #
  365. #############################
  366. @app.route('/dashEstudiantes/<int:estId>')
  367. def dashEstudiantes(estId):
  368. nombre = usuarios.query.filter_by(id=estId).first()
  369. return render_template('dashEstudiantes.html',nombre=nombre.nombres, estId=estId)
  370. #enseña las notas y la asistencia que tiene en ese curso
  371. @app.route('/dashEstudiantes/<int:estId>/notas')
  372. def dashEstNotas(estId):
  373. cursosMatri = cursos.query.all()
  374. 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))
  375. nombre = usuarios.query.filter_by(id=estId).first().nombres
  376. matriculaEstu = db.engine.execute ('select id, oferta_id from matricula where estudiante_id ={}'.format(estId))
  377. ofertasConAsistencia ={}
  378. for matri in matriculaEstu:
  379. asistencia =db.engine.execute('select count(valor) asis from `asistencia` where matricula_id ={} and valor =0'.format(matri.id))
  380. asistencia = asistencia.fetchone()
  381. ofertasConAsistencia.setdefault(matri.oferta_id, {})['Presente']= int(asistencia.asis)
  382. asistencia =db.engine.execute('select count(valor) asis from `asistencia` where matricula_id ={} and valor =1'.format(matri.id))
  383. asistencia = asistencia.fetchone()
  384. ofertasConAsistencia[matri.oferta_id]['Tarde']= int(asistencia.asis)
  385. asistencia =db.engine.execute('select count(valor) asis from `asistencia` where matricula_id ={} and valor =2'.format(matri.id))
  386. asistencia = asistencia.fetchone()
  387. ofertasConAsistencia[matri.oferta_id]['Ausente']= int(asistencia.asis)
  388. asistencia = db.engine.execute('select count(valor) asis from `asistencia` where matricula_id ={} and valor =3'.format(matri.id))
  389. asistencia = asistencia.fetchone()
  390. ofertasConAsistencia[matri.oferta_id]['Excusado']= int(asistencia.asis)
  391. return render_template('estuNotas.html',nombre=nombre, todaNota = resultEstudiante, estId= estId, ofertasConAsistencia = ofertasConAsistencia)
  392. @app.route('/dashEstudiantes/<int:estId>/notas/<int:ofertaId>')
  393. def dashEstEval(estId, ofertaId):
  394. result = db.engine.execute('SELECT notas.valor valorSaco, evaluaciones.valor valorReal, evaluaciones.tipo from `evaluaciones`, `matricula`, `notas` where evaluaciones.oferta_id = {} and matricula.oferta_id = evaluaciones.oferta_id and matricula.estudiante_id={} and notas.estudiante_id=matricula.estudiante_id and notas.evaluacion_id = evaluaciones.id'.format(ofertaId, estId))
  395. nombre = usuarios.query.filter_by(id=estId).first().nombres
  396. return render_template('verEstuNotas.html',nombre=nombre, todo =result, estId=estId)
  397. if __name__ == "__main__":
  398. app.run(debug=True)