Sin descripción

transcripcionmaker.py 7.2KB

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