from flask import jsonify from connect import connection def crear_transcripcion(id): ###### 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' q = connection.execute(query).fetchall()[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])}) ###### 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 c.id = o.curso_id AND \ o.id = m.oferta_id AND \ n.evaluacion_id = e.id AND \ e.oferta_id = o.id AND \ m.estudiante_id = ' + id + ' \ AND o.semestre = "' + semestre +'"' result = connection.execute(query).fetchall() return str((result[0][0])) def get_semestre(semestre): semestre = semestre.split('a')[1] semestre = semestre.split('s') year = semestre[0] semestre = semestre[1] if semestre == '1': semestre = 'OtoƱo' elif semestre == '2': semestre = 'Primavera' else: semestre = 'Verano' nombre = semestre + ' ' + year return nombre 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 c.id = o.curso_id AND \ o.id = m.oferta_id AND \ n.evaluacion_id = e.id AND \ e.oferta_id = o.id AND \ m.estudiante_id =' + id +'\ GROUP BY o.id ORDER BY o.semestre' clases = connection.execute(query).fetchall() 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 info = {} promedio_semestre = get_promedio_del_semestre(id, curso.get('Semestre')) promedio_acumulado += float(promedio_semestre) info.update({"promedio_acumulado":promedio_semestre[:4]}) info.update({"promedio_total":str(promedio_acumulado/ctr3)[:4]}) info.update({"nombre":get_semestre(codigo_semestre)}) semestre.update({"info":info}) 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): info = {} promedio_semestre = get_promedio_del_semestre(id, curso.get('Semestre')) promedio_acumulado += float(promedio_semestre) info.update({"promedio_acumulado":promedio_semestre[:4]}) info.update({"promedio_total":str(promedio_acumulado/ctr3)[:4]}) info.update({"nombre":get_semestre(str(clase[1]))}) semestre.update({"info":info}) semestres.update({"semestre "+clase[1]:semestre}) estudiante.update({"promedio":str(promedio_acumulado/ctr3)[:4]+'%'}) 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 = '''
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)