123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- 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 = '''<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)
|