123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- from connect import connection
- import sqlalchemy as db
-
- def crear_transcripcion(id):
-
- from flask import jsonify
-
-
- ###### headers
- headers={}
- headers.update({"1":"Codigo"})
- headers.update({"2":"Curso"})
- headers.update({"3":"Nota"})
- headers.update({"4":"Porciento"})
-
- ###### estudiante
-
- 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
-
-
- #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]
- for clase in clases:
- #add clases al semestre
- 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,
-
- 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
-
- 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})
-
- # print(result)
-
- #####################################################################
- #####################################################################
- #####################################################################
-
-
- # 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 = '''<h1 align="center">PyFPDF HTML Demo</h1>
- <p>This is regular text</p>
- <p>You can also <b>bold</b>, <i>italicize</i> or <u>underline</u>
- '''
- 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)
|