from connect import connection import sqlalchemy as db def crear_transcripcion(id): from flask import jsonify ###### headers # headers contiene los titulos de las columnas headers={} headers.update({"1":"Codigo"}) headers.update({"2":"Curso"}) headers.update({"3":"Nota"}) headers.update({"4":"Porciento"}) ###### estudiante # estudiante contiene la informacion del estudiante: # nombres, apellidos, email, fecha_nacimiento, direccion1, direccion2, ciudad # estudiante.update({"pais, zipcode, telefono1, telefono2 query = 'SELECT nombres, apellidos, email, fecha_nacimiento, direccion1, direccion2, ciudad, pais, zipcode,\ telefono1, telefono2\ FROM usuarios u, estudiantes m \ WHERE u.id = '+id+ ' AND u.id = m.user_id' result_db = connection.execute(query).fetchall() q = result_db[0] estudiante={} estudiante.update({"nombres":str(q[0])}) estudiante.update({"apellidos":str(q[1])}) estudiante.update({"email":str(q[2])}) estudiante.update({"fecha_nacimiento":str(q[3])}) estudiante.update({"direccion1":str(q[4])}) estudiante.update({"direccion2":str(q[5])}) estudiante.update({"ciudad":str(q[6])}) estudiante.update({"pais":str(q[7])}) estudiante.update({"zipcode":str(q[8])}) estudiante.update({"telefono1":str(q[9])}) estudiante.update({"telefono2":str(q[10])}) query = 'SELECT sum(e.valor) as total, sum(n.valor) as puntos, \ sum(n.valor)/sum(e.valor) as promedio\ FROM matricula m, oferta o, cursos c, evaluaciones e, notas n\ WHERE m.oferta_id = o.curso_id AND o.curso_id = c.id \ AND c.id = e.oferta_id AND e.id = n.evaluacion_id AND n.estudiante_id = ' + id result_db = connection.execute(query).fetchall() q = result_db[0] ###### semestres # semestres se encarga de agrupar las clases por semestre #funcion para obtener el promedio en un semestre dado def get_promedio_del_semestre(id, semestre): query = 'SELECT sum(n.valor)/sum(e.valor) as promedio\ FROM matricula m, oferta o, cursos c, evaluaciones e, notas n\ WHERE m.oferta_id = o.curso_id AND o.curso_id = c.id \ AND c.id = e.oferta_id AND e.id = n.evaluacion_id AND n.estudiante_id ='+ id + '\ AND o.semestre = "' + str(semestre) + '"' result = connection.execute(query).fetchall() return str((result[0][0])) query = 'SELECT o.id, o.semestre, c.codigo, c.titulo, \ sum(e.valor) as total, sum(n.valor) as puntos, \ sum(n.valor)/sum(e.valor) as promedio\ FROM matricula m, oferta o, cursos c, evaluaciones e, notas n\ WHERE m.oferta_id = o.curso_id AND o.curso_id = c.id \ AND c.id = e.oferta_id AND e.id = n.evaluacion_id AND n.estudiante_id = ' + id +'\ GROUP BY o.id ORDER BY o.semestre' result_db = connection.execute(query).fetchall() clases = result_db promedio_acumulado = 0 semestres={} semestre={} ctr=0 ctr2=0 ctr3=1 if len(clases)>0: codigo_semestre = clases[0][1] # por cada clase en el resultado for clase in clases: #se agrupan las clases si el codigo del semestre es el mismo if codigo_semestre == clase[1]: curso = {} curso.update({"id":str(clase[0])}) curso.update({"Semestre":str(clase[1])}) curso.update({"codigo":str(clase[2])}) curso.update({"nombre":str(clase[3])}) curso.update({"total":str(clase[4])}) curso.update({"obtenido":str(clase[5])}) curso.update({"porciento":str(int(clase[6]*100))}) semestre.update({codigo_semestre+'//'+str(ctr):curso}) #si el semestre es distinto, #si el codigo del semestre cambia, se inserte el semestre con el codigo viejo en semestres, # y se comienza un semestre nuevo con el nuevo codigo elif codigo_semestre != clase[1]: # add semestre a semestres promedio = {} promedio_semestre = get_promedio_del_semestre(id, curso.get('Semestre')) promedio_acumulado += float(promedio_semestre) promedio.update({"acumulado":promedio_semestre[:-2]}) promedio.update({"total":str(promedio_acumulado/ctr3)[:-2]}) semestre.update({"promedio":promedio}) semestres.update({"semestre "+codigo_semestre:semestre}) # y vaciar semestre semestre={} codigo_semestre = clase[1] ctr = 0 curso = {} curso.update({"id":str(clase[0])}) curso.update({"Semestre":str(clase[1])}) curso.update({"codigo":str(clase[2])}) curso.update({"nombre":str(clase[3])}) curso.update({"total":str(clase[4])}) curso.update({"obtenido":str(clase[5])}) curso.update({"porciento":str(int(clase[6]*100))}) semestre.update({codigo_semestre+'//'+str(ctr):curso}) ctr3 += 1 ctr += 1 ctr2 += 1 # si estamo con la ultima clase, se inserte en el semestre actual, y el semestre en semestres if ctr2==len(clases): promedio = {} promedio_semestre = get_promedio_del_semestre(id, curso.get('Semestre')) promedio_acumulado += float(promedio_semestre) promedio.update({"acumulado":promedio_semestre[:-2]}) promedio.update({"total":str(promedio_acumulado/ctr3)[:-2]}) semestre.update({"promedio":promedio}) semestres.update({"semestre "+clase[1]:semestre}) estudiante.update({"promedio":str(promedio_acumulado/ctr3)[:-2]+'%'}) result = {} result.update({"headers":headers}) result.update({"estudiante":estudiante}) result.update({"semestres":semestres}) # ##################################################################### # ##################################################################### # ##################################################################### # # # # https://www.blog.pythonlibrary.org/2018/06/05/creating-pdfs-with-pyfpdf-and-python/ # from fpdf import FPDF, HTMLMixin # # class HTML2PDF(FPDF, HTMLMixin): # pass # # html = '''

PyFPDF HTML Demo

#

This is regular text

#

You can also bold, italicize or underline # ''' # pdf = HTML2PDF() # pdf.add_page() # pdf.write_html(html) # # pdf.output('html2pdf.pdf') # # ########## # # # pdf = FPDF() # # pdf.add_page() # pdf.set_font("Arial", size=12) # pdf.cell(200, 10, txt="Welcome to Python!", ln=1, align="C") # pdf.cell(200, 10, txt="Welcome to Python!", ln=1, align="C") # pdf.cell(200, 10, txt="Welcome to Python!", ln=1, align="C") # pdf.rect(20, 20, 100, 50) # # ########### # spacing=1 # data = [['First Name', 'Last Name', 'email', 'zip'], # ['Mike', 'Driscoll', 'mike@somewhere.com', '55555'], # ['John', 'Doe', 'jdoe@doe.com', '12345'], # ['Nina', 'Ma', 'inane@where.com', '54321'] # ] # # # pdf = FPDF() # pdf.set_font("Arial", size=12) # # pdf.add_page() # # col_width = pdf.w / 4.5 # row_height = pdf.font_size # for row in data: # for item in row: # pdf.cell(col_width, row_height*spacing, # txt=item, border=1) # pdf.ln(row_height*spacing) # # # ########### # # pdf.output("simple_demo.pdf") # # # # ##################################################################### # ##################################################################### # ##################################################################### return jsonify(result)