Keine Beschreibung

prueba.py 19KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502
  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. class notas(db.Model):
  85. id = db.Column(db.Integer)
  86. evaluacion_id = db.Column(db.Integer, db.ForeignKey(evaluaciones.id), primary_key=True)
  87. estudiante_id = db.Column(db.Integer, db.ForeignKey(estudiantes.user_id), primary_key=True)
  88. valor = db.Column(db.Integer)
  89. def __repr__(self):
  90. return 'nota ' +str(self.id)
  91. @app.route('/')
  92. def helloWorld():
  93. return render_template('index.html')
  94. @app.route('/addClass', methods=['GET', 'POST'])
  95. def addClass():
  96. if request.method == 'POST':
  97. post_codigo = request.form['codigo']
  98. post_titulo = request.form['titulo']
  99. post_grado = request.form['grado']
  100. post_descripcion = request.form['descripcion']
  101. curso_nuevo = cursos(codigo =post_codigo, titulo=post_titulo, grado = post_grado, descripcion=post_descripcion)
  102. db.session.add(curso_nuevo)
  103. db.session.commit()
  104. return redirect('/addClass')
  105. else:
  106. return render_template('addClases.html')
  107. #beta, felt cute in this pic might delete later
  108. #add notas
  109. @app.route ('/add', methods=['GET','POST'])
  110. def addSomething():
  111. if request.method =='POST':
  112. post_nombre = request.form['nombre']
  113. post_nota = request.form['Nota']
  114. nota_nueva = Notas(nombre=post_nota, valor = post_nota)
  115. db.session.add(nota_nueva)
  116. db.session.commit()
  117. return redirect('/addNota')
  118. else:
  119. return render_template('addSomething.html')
  120. @app.route('/addOferta', methods =['GET', 'POST'])
  121. def addOferta():
  122. if request.method =='POST':
  123. post_oferta_id = int(request.form['curso'])
  124. post_academico = request.form['academico']
  125. post_horario = request.form['horario']
  126. ofertaNueva = oferta(oferta_id =post_oferta_id, semestre = post_academico, horario =post_horario)
  127. db.session.add(ofertaNueva)
  128. db.session.commit()
  129. oferta_idQue = oferta.query.order_by(oferta.id.desc()).first().id
  130. count = int(request.form['countRow'])
  131. for x in range(count):
  132. post_maestro = int(request.form['Maestro[{}]'.format(x)])
  133. maestro_oferta= facultad_ofrece(oferta_id =oferta_idQue, facultad_id =post_maestro)
  134. db.session.add(maestro_oferta)
  135. db.session.commit()
  136. return redirect('/addOferta')
  137. else:
  138. cursosAll = cursos.query.all()
  139. maestrosAll = db.engine.execute('SELECT * FROM `facultad` f, `usuarios` u where f.user_id = u.id')
  140. 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')
  141. return render_template('addOferta.html', cursos= cursosAll, maestros= maestrosAll, ofertas = ofertaAll)
  142. @app.route ('/addMatricula/<int:oferId>', methods =['GET', 'POST'])
  143. def addMatricula(oferId):
  144. if request.method =='POST':
  145. count = int(request.form['countRow'])
  146. for x in range(count):
  147. post_estudiante = int(request.form['estudiantes[{}]'.format(x)])
  148. matriculaNueva = matricula(estudiante_id = post_estudiante, oferta_id=oferId)
  149. db.session.add(matriculaNueva)
  150. db.session.commit()
  151. return redirect('/addMatricula/{}'.format(oferId))
  152. else:
  153. 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))
  154. 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' )
  155. return render_template('addMatricula.html', estudiantes = estudiantesAll, oferId=oferId, matriculados = matriculadosAll)
  156. @app.route('/Maestro/<int:MaestroId>')
  157. def Maestro(MaestroId):
  158. 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))
  159. return render_template('dashboard.html', MaestroId = MaestroId, los_cursos = cursosTodos)
  160. #@app.route('/Maestro/<int:MaestroId>/<int:ofertaId>')
  161. #def cursosPagina(MaestroId, ofertaId):
  162. # newCourses = cursos.query.filter_by(id=ofertaId).first()
  163. # return render_template('cursos.html',MaestroId = MaestroId, id=ofertaId, el_curso=newCourses)
  164. #Add estudiantes
  165. @app.route('/Maestro/<int:MaestroId>/<int:ofertaId>/addNota', methods =['GET','POST'])
  166. def addNota(MaestroId, ofertaId):
  167. if request.method =='POST':
  168. post_ofertaId = ofertaId
  169. post_tipo = request.form['tipo']
  170. post_valor = request.form['valor']
  171. post_fecha = request.form['Fecha']
  172. post_fecha = post_fecha.split('-')
  173. 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])))
  174. db.session.add(newEval)
  175. db.session.commit()
  176. last_entry = evaluaciones.query.filter_by(oferta_id=ofertaId).order_by(evaluaciones.id.desc()).first()
  177. return redirect('/Maestro/'+ str(MaestroId) + '/'+str(ofertaId)+'/addNota')
  178. else:
  179. newCourses = cursos.query.filter_by(id=ofertaId).first()
  180. allEval = evaluaciones.query.filter_by(oferta_id=ofertaId).all()
  181. bigList =[]
  182. for evaluacion in allEval:
  183. dictionary ={}
  184. dictionary['Valor'] = int(evaluacion.valor)
  185. dictionary['evalId'] = int(evaluacion.id)
  186. dictionary['tipo'] = evaluacion.tipo
  187. dictionary['fecha'] = str(evaluacion.fecha)
  188. bigList.append(dictionary)
  189. return render_template('addEvaluacion.html',MaestroId = MaestroId, el_curso=ofertaId, evaluaciones = allEval)
  190. @app.route('/Maestro/<int:MaestroId>/<int:ofertaId>/addNotas', methods = ['GET','POST'])
  191. def notas1(MaestroId, ofertaId):
  192. 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))
  193. 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))
  194. notasCompletaJson ={}
  195. query2 = db.engine.execute('SELECT id FROM `evaluaciones` where oferta_id = {}'.format(ofertaId))
  196. evalIds =[]
  197. for Id in query2:
  198. evalIds.append(int(Id.id))
  199. for estudiante in query:
  200. Evaluaciones =[]
  201. notasSaco = []
  202. 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))
  203. for nota in notasQuery:
  204. if nota.estudiante_id == estudiante.id:
  205. Evaluaciones.append(nota.evaluacion_id)
  206. notasSaco.append(nota.Saco)
  207. notasCompletaJson.setdefault(estudiante.id, {})['nombre'] = estudiante.nombres
  208. notasCompletaJson[estudiante.id]['apellidos'] = estudiante.apellidos
  209. notasCompletaJson[estudiante.id]['valorSaco'] = notasSaco
  210. notasCompletaJson[estudiante.id]['evaluacion'] = Evaluaciones
  211. if request.method =="POST":
  212. #post = request.get_json()
  213. post_stuId = int(request.get_json()['StudentId'])
  214. post_nota = int(request.get_json()['Nota'])
  215. post_id = int(request.get_json()['evalId'])
  216. Exists = notas.query.filter_by(estudiante_id=post_stuId, evaluacion_id=post_id).first()
  217. if(Exists):
  218. query =db.engine.execute('UPDATE `notas` SET valor ={} WHERE estudiante_id ={} and evaluacion_id={}'.format(post_nota, post_stuId, post_id))
  219. else:
  220. notaNueva = notas(evaluacion_id = post_id, estudiante_id=post_StuId, valor =post_nota)
  221. db.session.add(notaNueva)
  222. db.session.commit()
  223. #for x in range(int(post_filas)):
  224. # post_student = request.form['id_usuario[{}]'.format(x)]
  225. # for y in range(int(post_columnas)):
  226. # post_valor = request.form['evaluacion[{}][{}]'.format(x, y)]
  227. # post_evaluacionId =request.form['cantidadEval[{}]'.format(y)]
  228. # notaNueva = notas( evaluacion_id=post_evaluacionId, estudiante_id=post_student, valor = post_valor)
  229. # db.session.add(notaNueva)
  230. # db.session.commit()
  231. return redirect('/Maestro/'+str(MaestroId) +'/' + str(ofertaId)+'/addNota')
  232. else:
  233. evaluacionesTodos = db.engine.execute('select * from `evaluaciones` where oferta_id ={}'.format(ofertaId))
  234. 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))
  235. return render_template('addNotas.html',MaestroId = MaestroId, evaluaciones = evaluacionesTodos, estudiantes=estudiantes_Todos, ofertaId = ofertaId, notasCompletas = notasCompletaJson, evalIds=evalIds)
  236. @app.route ('/estudiante', methods=['GET','POST'])
  237. def addStudent():
  238. if request.method == 'POST':
  239. #acentos = {'á':'&aacute;', 'é': '&eacute;', 'í':'&iacute;', 'ó': '&oacute;', 'ú':'&uacute;',
  240. #'ü':'&uuml;', 'Á': '&Aacute;', 'É': '&Eacute;', 'Í':'&Iacute;', 'Ó':'&Oacute;', 'Ú':'&Uacute',
  241. #'Ü':'&Uuml;', 'Ñ':'&Ntilde'}
  242. post_apellidos = request.form['apellidos']
  243. post_nombre = request.form['nombre']
  244. post_email = request.form['email']
  245. estudiante_nuevo = usuarios(email=post_email, nombres=post_nombre, apellidos=post_apellidos)
  246. db.session.add(estudiante_nuevo)
  247. db.session.commit()
  248. last_id= usuarios.query.order_by(usuarios.id.desc()).first().id
  249. if(request.form['Usuario'] == 'Estudiante'):
  250. post_grado = request.form['grado']
  251. post_educ = request.form['educ']
  252. #for key in acentos.keys():
  253. # post_apellidos= post_apellidos.replace(key,acentos[key])
  254. # post_nombre = post_nombre.replace(key,acentos[key])
  255. estudiante_nuevo = estudiantes(user_id=last_id, grado = post_grado, educacion_especial=post_educ)
  256. db.session.add(estudiante_nuevo)
  257. db.session.commit()
  258. else:
  259. post_especialidad = request.form['especialidad']
  260. maestro_nuevo = facultad(user_id = last_id, especialidad= post_especialidad, educacion_especial =0)
  261. db.session.add(maestro_nuevo)
  262. db.session.commit()
  263. #last_id= 8.query.order_by(usuarios.id.desc()).first()
  264. #db.session.add(estudiantes(user_id =last_id, grado=post_grado, educacion_especial =post_educ))
  265. #db.session.commit()
  266. return redirect('/estudiante')
  267. else:
  268. return render_template('estudiante.html')
  269. #beta, might delete later, add notas
  270. #@app.route('/addNota', methods = ['GET', 'POST'])
  271. #def addNota():
  272. # if request.method== 'POST':
  273. # for x in range(int(request.form['countPost'])):
  274. # post_email = request.form['email[{}]'.format(x)]
  275. # post_evaluacion = request.form['evaluacion[{}]'.format(x)]
  276. # print(post_email, post_evaluacion, '\n')
  277. #
  278. #
  279. # else:
  280. # estudiantes2 = estudiante.query.order_by(estudiante.apellidos).all()
  281. # return render_template('addNotas.html', estudiantes=estudiantes2)
  282. @app.route('/Maestro/<int:MaestroId>/<int:ofertaId>/verNotas')
  283. def cursosVerNotas(MaestroId, ofertaId):
  284. evaluacionesTodas = evaluaciones.query.filter_by(oferta_id=ofertaId).all()
  285. cursosTodos = cursos.query.filter_by(id=ofertaId).all()
  286. return render_template('verNotas.html', MaestroId = MaestroId, cursos=cursosTodos, evaluaciones=evaluacionesTodas)
  287. @app.route("/Maestro/<int:MaestroId>/<int:evalId>/verNotasEstudiantes")
  288. def verNotasEstudiantes(MaestroId, evalId):
  289. result = db.engine.execute('SELECT * FROM `notas` n, `usuarios` where n.evaluacion_id ={} and usuarios.id = n.estudiante_id'.format(evalId))
  290. #db.session.query(evaluacion, usuarios).join(Usuarios).filter(usuarios.id == evaluacion.estudiante_id).order_by(usuarios.apellidos)
  291. return render_template('verNotasEstudiantes.html',table=result, MaestroId = MaestroId, evalId=evalId)
  292. @app.route("/Maestro/<int:MaestroId>/<int:ofertaId>/addAsistencia", methods = ['POST', 'GET'])
  293. def pasarAsistencia(MaestroId, ofertaId):
  294. 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))
  295. return render_template('Asistencia.html', MaestroId = MaestroId, estudiantes = estudiantes_Todos, cursos=ofertaId)
  296. #############################
  297. #
  298. #ESTUDIANTES
  299. #
  300. #############################
  301. @app.route('/dashEstudiantes/<int:estId>')
  302. def dashEstudiantes(estId):
  303. nombre = usuarios.query.filter_by(id=estId).first()
  304. return render_template('dashEstudiantes.html',nombre=nombre.nombres, estId=estId)
  305. @app.route('/dashEstudiantes/<int:estId>/notas')
  306. def dashEstNotas(estId):
  307. cursosMatri = cursos.query.all()
  308. 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))
  309. nombre = usuarios.query.filter_by(id=estId).first().nombres
  310. return render_template('estuNotas.html',nombre=nombre, todaNota = resultEstudiante, estId= estId)
  311. @app.route('/dashEstudiantes/<int:estId>/notas/<int:ofertaId>')
  312. def dashEstEval(estId, ofertaId):
  313. 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))
  314. nombre = usuarios.query.filter_by(id=estId).first().nombres
  315. return render_template('verEstuNotas.html',nombre=nombre, todo =result, estId=estId)
  316. if __name__ == "__main__":
  317. app.run(debug=True)