Sin descripción

transcripcionmaker.py 8.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. from connect import connection
  2. import sqlalchemy as db
  3. def crear_transcripcion(id):
  4. from flask import jsonify
  5. ###### headers
  6. # headers contiene los titulos de las columnas
  7. headers={}
  8. headers.update({"1":"Codigo"})
  9. headers.update({"2":"Curso"})
  10. headers.update({"3":"Nota"})
  11. headers.update({"4":"Porciento"})
  12. ###### estudiante
  13. # estudiante contiene la informacion del estudiante:
  14. # nombres, apellidos, email, fecha_nacimiento, direccion1, direccion2, ciudad
  15. # estudiante.update({"pais, zipcode, telefono1, telefono2
  16. query = 'SELECT nombres, apellidos, email, fecha_nacimiento, direccion1, direccion2, ciudad, pais, zipcode,\
  17. telefono1, telefono2\
  18. FROM usuarios u, estudiantes m \
  19. WHERE u.id = '+id+ ' AND u.id = m.user_id'
  20. result_db = connection.execute(query).fetchall()
  21. q = result_db[0]
  22. estudiante={}
  23. estudiante.update({"nombres":str(q[0])})
  24. estudiante.update({"apellidos":str(q[1])})
  25. estudiante.update({"email":str(q[2])})
  26. estudiante.update({"fecha_nacimiento":str(q[3])})
  27. estudiante.update({"direccion1":str(q[4])})
  28. estudiante.update({"direccion2":str(q[5])})
  29. estudiante.update({"ciudad":str(q[6])})
  30. estudiante.update({"pais":str(q[7])})
  31. estudiante.update({"zipcode":str(q[8])})
  32. estudiante.update({"telefono1":str(q[9])})
  33. estudiante.update({"telefono2":str(q[10])})
  34. query = 'SELECT sum(e.valor) as total, sum(n.valor) as puntos, \
  35. sum(n.valor)/sum(e.valor) as promedio\
  36. FROM matricula m, oferta o, cursos c, evaluaciones e, notas n\
  37. WHERE m.oferta_id = o.curso_id AND o.curso_id = c.id \
  38. AND c.id = e.oferta_id AND e.id = n.evaluacion_id AND n.estudiante_id = ' + id
  39. result_db = connection.execute(query).fetchall()
  40. q = result_db[0]
  41. ###### semestres
  42. # semestres se encarga de agrupar las clases por semestre
  43. #funcion para obtener el promedio en un semestre dado
  44. def get_promedio_del_semestre(id, semestre):
  45. query = 'SELECT sum(n.valor)/sum(e.valor) as promedio\
  46. FROM matricula m, oferta o, cursos c, evaluaciones e, notas n\
  47. WHERE m.oferta_id = o.curso_id AND o.curso_id = c.id \
  48. AND c.id = e.oferta_id AND e.id = n.evaluacion_id AND n.estudiante_id ='+ id + '\
  49. AND o.semestre = "' + str(semestre) + '"'
  50. result = connection.execute(query).fetchall()
  51. return str((result[0][0]))
  52. query = 'SELECT o.id, o.semestre, c.codigo, c.titulo, \
  53. sum(e.valor) as total, sum(n.valor) as puntos, \
  54. sum(n.valor)/sum(e.valor) as promedio\
  55. FROM matricula m, oferta o, cursos c, evaluaciones e, notas n\
  56. WHERE m.oferta_id = o.curso_id AND o.curso_id = c.id \
  57. AND c.id = e.oferta_id AND e.id = n.evaluacion_id AND n.estudiante_id = ' + id +'\
  58. GROUP BY o.id ORDER BY o.semestre'
  59. result_db = connection.execute(query).fetchall()
  60. clases = result_db
  61. promedio_acumulado = 0
  62. semestres={}
  63. semestre={}
  64. ctr=0
  65. ctr2=0
  66. ctr3=1
  67. if len(clases)>0:
  68. codigo_semestre = clases[0][1]
  69. # por cada clase en el resultado
  70. for clase in clases:
  71. #se agrupan las clases si el codigo del semestre es el mismo
  72. if codigo_semestre == clase[1]:
  73. curso = {}
  74. curso.update({"id":str(clase[0])})
  75. curso.update({"Semestre":str(clase[1])})
  76. curso.update({"codigo":str(clase[2])})
  77. curso.update({"nombre":str(clase[3])})
  78. curso.update({"total":str(clase[4])})
  79. curso.update({"obtenido":str(clase[5])})
  80. curso.update({"porciento":str(int(clase[6]*100))})
  81. semestre.update({codigo_semestre+'//'+str(ctr):curso})
  82. #si el semestre es distinto,
  83. #si el codigo del semestre cambia, se inserte el semestre con el codigo viejo en semestres,
  84. # y se comienza un semestre nuevo con el nuevo codigo
  85. elif codigo_semestre != clase[1]:
  86. # add semestre a semestres
  87. promedio = {}
  88. promedio_semestre = get_promedio_del_semestre(id, curso.get('Semestre'))
  89. promedio_acumulado += float(promedio_semestre)
  90. promedio.update({"acumulado":promedio_semestre[:-2]})
  91. promedio.update({"total":str(promedio_acumulado/ctr3)[:-2]})
  92. semestre.update({"promedio":promedio})
  93. semestres.update({"semestre "+codigo_semestre:semestre})
  94. # y vaciar semestre
  95. semestre={}
  96. codigo_semestre = clase[1]
  97. ctr = 0
  98. curso = {}
  99. curso.update({"id":str(clase[0])})
  100. curso.update({"Semestre":str(clase[1])})
  101. curso.update({"codigo":str(clase[2])})
  102. curso.update({"nombre":str(clase[3])})
  103. curso.update({"total":str(clase[4])})
  104. curso.update({"obtenido":str(clase[5])})
  105. curso.update({"porciento":str(int(clase[6]*100))})
  106. semestre.update({codigo_semestre+'//'+str(ctr):curso})
  107. ctr3 += 1
  108. ctr += 1
  109. ctr2 += 1
  110. # si estamo con la ultima clase, se inserte en el semestre actual, y el semestre en semestres
  111. if ctr2==len(clases):
  112. promedio = {}
  113. promedio_semestre = get_promedio_del_semestre(id, curso.get('Semestre'))
  114. promedio_acumulado += float(promedio_semestre)
  115. promedio.update({"acumulado":promedio_semestre[:-2]})
  116. promedio.update({"total":str(promedio_acumulado/ctr3)[:-2]})
  117. semestre.update({"promedio":promedio})
  118. semestres.update({"semestre "+clase[1]:semestre})
  119. estudiante.update({"promedio":str(promedio_acumulado/ctr3)[:-2]+'%'})
  120. result = {}
  121. result.update({"headers":headers})
  122. result.update({"estudiante":estudiante})
  123. result.update({"semestres":semestres})
  124. # #####################################################################
  125. # #####################################################################
  126. # #####################################################################
  127. #
  128. #
  129. # # https://www.blog.pythonlibrary.org/2018/06/05/creating-pdfs-with-pyfpdf-and-python/
  130. # from fpdf import FPDF, HTMLMixin
  131. #
  132. # class HTML2PDF(FPDF, HTMLMixin):
  133. # pass
  134. #
  135. # html = '''<h1 align="center">PyFPDF HTML Demo</h1>
  136. # <p>This is regular text</p>
  137. # <p>You can also <b>bold</b>, <i>italicize</i> or <u>underline</u>
  138. # '''
  139. # pdf = HTML2PDF()
  140. # pdf.add_page()
  141. # pdf.write_html(html)
  142. # # pdf.output('html2pdf.pdf')
  143. #
  144. # ##########
  145. #
  146. # # pdf = FPDF()
  147. # # pdf.add_page()
  148. # pdf.set_font("Arial", size=12)
  149. # pdf.cell(200, 10, txt="Welcome to Python!", ln=1, align="C")
  150. # pdf.cell(200, 10, txt="Welcome to Python!", ln=1, align="C")
  151. # pdf.cell(200, 10, txt="Welcome to Python!", ln=1, align="C")
  152. # pdf.rect(20, 20, 100, 50)
  153. #
  154. # ###########
  155. # spacing=1
  156. # data = [['First Name', 'Last Name', 'email', 'zip'],
  157. # ['Mike', 'Driscoll', 'mike@somewhere.com', '55555'],
  158. # ['John', 'Doe', 'jdoe@doe.com', '12345'],
  159. # ['Nina', 'Ma', 'inane@where.com', '54321']
  160. # ]
  161. #
  162. # # pdf = FPDF()
  163. # pdf.set_font("Arial", size=12)
  164. # # pdf.add_page()
  165. #
  166. # col_width = pdf.w / 4.5
  167. # row_height = pdf.font_size
  168. # for row in data:
  169. # for item in row:
  170. # pdf.cell(col_width, row_height*spacing,
  171. # txt=item, border=1)
  172. # pdf.ln(row_height*spacing)
  173. #
  174. #
  175. # ###########
  176. #
  177. # pdf.output("simple_demo.pdf")
  178. #
  179. #
  180. #
  181. # #####################################################################
  182. # #####################################################################
  183. # #####################################################################
  184. return jsonify(result)