def imprimir_lista(self,todos=False): fichero = get_print_path('Alumnos')+"/Listado_Alumnos.pdf" estiloHoja = getSampleStyleSheet() story = [] ##Vamos con la cabecera ##banner = os.path.join(_config.get_data_path(), 'media', 'banner_eide.png') ##img=Image(banner) ##story.append(img) estilo = estiloHoja['BodyText'] cadena = "<para alignment=center><b>LISTADO DE ALUMNOS</b></para>" story.append(Paragraph(cadena, estilo)) story.append(Spacer(0,10)) tabla =[['id','nombre','apellido1','apellido2','telefono1','dni','fecha_nacimiento']] if todos: for persona in Alumno.select(orderBy=Alumno.q.apellido1): tabla.append([persona.id,persona.nombre,persona.apellido1,persona.apellido2,persona.telefono1,persona.dni,persona.fecha_nacimiento]) else: for persona in Alumno.select(Alumno.q.activo==True,orderBy=Alumno.q.apellido1): tabla.append([persona.id,persona.nombre,persona.apellido1,persona.apellido2,persona.telefono1,persona.dni,persona.fecha_nacimiento]) t = Table(tabla) t.setStyle([('FONTSIZE',(0,0),(-1,-1),8),('FONTSIZE',(-1,0),(-1,-1),6),('TEXTCOLOR',(0,1),(0,-1),colors.blue), ('TEXTCOLOR',(1,1), (2,-1),colors.green)]) t.setStyle([('LINEABOVE', (0,0), (-1,0), 2, colors.black),('LINEBEFORE', (0,0), (0,-1), 2, colors.black),('LINEABOVE', (0,1), (-1,-1), 0.25, colors.black),('LINEAFTER', (0,0), (-1,-1), 0.25, colors.black),('LINEBELOW', (0,-1), (-1,-1), 2, colors.black),('LINEAFTER', (-1,0), (-1,-1), 2, colors.black),('ALIGN', (1,1), (-1,-1), 'RIGHT')]) story.append(t) doc=SimpleDocTemplate(fichero,pagesize=A4,showBoundary=0) doc.build(story) send_to_printer(fichero) return
def guardar(self): g = Grupo.get(self.grupoID) ##Cambiamos la , por . para que funcione la conversion a float if self.precio: self.precio = self.precio.replace(',','.') if self.a: self.a.precio = self.precio self.a.factura = self.factura self.a.metalico = self.metalico self.a.grupo = g self.a.alumno = Alumno.get(self.alumnoID) ##Si en la interfaz tenemos confirmado y en BBDD no, confirmamos la asistencia if ( self.confirmado and not self.a.confirmado): self.set_confirmado() return 2 else: self.a.confirmado = self.confirmado return 1 else: ##print "Creando Asistencia nuevo" ##FIXME comprobar si el grupo no está completo! if g.alumnos.__len__() >= g.num_max: logging.debug("Grupo completo!") mostrar_aviso("Grupo lleno","Grupo lleno") return -1 self.a = Asistencia(alumno=Alumno.get(self.alumnoID),grupo=Grupo.get(self.grupoID), precio=self.precio,confirmado=self.confirmado,factura=self.factura,metalico=self.metalico) return 0
def imprimir_etiquetas(self,todos=False,lista_alumnos_elegidos=None,lista_grupos_elegidos=None): """Función que imprime etiquetas con los datos de lso alumnos. Si todos es True imprime los alumnos dados de baja también""" lista = [] p = Provincias() ##Preparamos el docu fichero = get_print_path('Alumnos')+"/Etiquetas_Alumnos.pdf" c = canvas.Canvas(fichero,pagesize=A4) c.translate(mm,mm) if todos: logging.debug("Imprimimos las etiquetas de todos los alumnos") busqueda = Alumno.select() elif lista_alumnos_elegidos!=None: logging.debug("Imprimimos solo ciertos alumnos") busqueda = [] logging.debug(lista_alumnos_elegidos) for numero in lista_alumnos_elegidos: logging.debug( "Vamos a buscar el alumno %s"%numero) try: busqueda.append(Alumno.get(numero)) except: logging.debug( "No hemos encontrado el alumno con la numero %s"%numero) elif lista_grupos_elegidos!=None: logging.debug("Imprimimos solo ciertos grupos") lista_alumnos_elegidos = [] busqueda = [] logging.debug(lista_grupos_elegidos) for numero in lista_grupos_elegidos: logging.debug("Buscando alumnos ne el grupo %s"%numero) for asistencia in Asistencia.select(Asistencia.q.grupoID==numero): logging.debug("Añadiendo el alumno %s"%asistencia.alumno.id) busqueda.append(asistencia.alumno) logging.debug(lista_alumnos_elegidos) else: logging.debug( "Imprimimos las etiquetas de los alumnos activos") busqueda = Alumno.select(Alumno.q.activo==True) for alumno in busqueda: i = p.get_iter_from_string(str(alumno.provincia)) provincia = p.get_value(i,1) lista.append(["%s %s %s"%(alumno.nombre,alumno.apellido1,alumno.apellido2),"%s"%alumno.direccion,"%s - %s - %s"%(alumno.ciudad,alumno.cp,provincia)]) ##Con la lista generada vamos a imprimir cada página con 16 etiquetas for x in range(0,len(lista),16): self.crear_pag_etiquetas(c,lista[x:x+16]) c.showPage() ##Guardamos y listo! c.save() send_to_printer(fichero) return len(lista)
def __init__(self): """Constructor for AboutModel initialises the model with its parent class, then sets credits to the contents of a file. """ Model.__init__(self) self.credits = open(self.credits_file, "r").read() alumnos = Alumno.select(Alumno.q.activo==True) self.num_alumnos_alta = alumnos.count() alumnos = Alumno.select() self.num_alumnos_total = alumnos.count() return
def rellenar_lista(self,todos=False): self.lista_alumnos.clear() self.combo_alumnos.clear() count = 0 #debug("LA variable ver_todos tiene el valor %s"%self.ver_todos) if self.alum_filtro_nomb == "" and self.alum_filtro_ape1 == "" and self.alum_filtro_ape2 == "": if self.ver_todos==True: debug("Listamos todos los alumnos sin filtros") busqueda = Alumno.select() else: debug("Listamos todos los alumnos ACTIVOS sin filtros") busqueda = Alumno.select(Alumno.q.activo==True) else: if self.ver_todos==True: debug("Listamos los alumnos con los filtros: %s %s %s"%(self.alum_filtro_nomb,self.alum_filtro_ape1,self.alum_filtro_ape2)) busqueda = Alumno.select(AND(Alumno.q.nombre.contains(self.alum_filtro_nomb),\ Alumno.q.apellido1.contains(self.alum_filtro_ape1),\ Alumno.q.apellido2.contains(self.alum_filtro_ape2))) else: debug("Listamos los alumnos ACTIVOS con los filtros: %s %s %s"%(self.alum_filtro_nomb,self.alum_filtro_ape1,self.alum_filtro_ape2)) busqueda = Alumno.select(AND(Alumno.q.nombre.contains(self.alum_filtro_nomb),\ Alumno.q.apellido1.contains(self.alum_filtro_ape1),\ Alumno.q.apellido2.contains(self.alum_filtro_ape2),\ Alumno.q.activo==True)) for persona in busqueda: texto_clases = "" nombre_grupo = "" try: nombre_grupo = persona.grupos[0].grupo.nombre clases = persona.grupos[0].grupo.clases for clase in clases: texto_clases = texto_clases + " %s-%s-aula %s-%s |"%(clase.dia_semana,clase.horario,clase.aula.piso,clase.aula.numero) except: ##NO hemos encontrados clase, que le vamos a hacer :) pass self.lista_alumnos.append([persona.id,persona.dni,persona.apellido1,persona.apellido2,persona.nombre,persona.activo,True,nombre_grupo,persona.telefono1,texto_clases]) count += 1 if persona.activo: self.combo_alumnos.append([persona.id,"%s - %s %s, %s"%(persona.id,persona.apellido1,persona.apellido2,persona.nombre)]) debug("Hemos listado %s alumnos"%count) return
def comprobarCuentas(self,lista=[]): pendientes = [] banco_model = BancoModel() #print "Tenemos la lista: %s"%lista if lista: debug("Como tenemos una lista de alumnos solo buscamos las cuentas de esos") lista = str(lista).strip('[').strip(']') debug("""id IN (%s)"""%lista) query = Alumno.select("""id IN (%s)"""%lista) else: debug("Como la lista está vacia comprobamos todos los alumnos") query = Alumno.select(Alumno.q.activo==True) for a in query: try: debug("Vamos a añadir al alumno %s - %s,%s"%(a.id,a.nombre,a.apellido1)) if not a.grupos[0].metalico and not a.grupos[0].factura: #debug("Intentando comprobar la cuenta del alumno %s"%a.id) if a.sucursal == 0: debug("Tiene la sucursal a 0!") ##OJO solo funciona porque facturamos desde la BBK!! if a.banco.codigo != 2095: pendientes.append([a.id,"sucursal a 0"]) else: debug("BBK y nos da igual que no valide la sucursal") elif a.cuenta == 0: pendientes.append([a.id,"cuenta a 0"]) elif banco_model.validaCuenta(a.banco.codigo,a.sucursal,a.dc,a.cuenta)!=0: if a.banco.codigo != 2095: pendientes.append([a.id,"no valida el DC"]) else: debug("Es BBK y nos da igual que no valide el DC") else: pass else: pass except: debug("A petado a si que algo estará mal") pendientes.append([a.id,"Otro error"]) debug(pendientes) return pendientes
def exportar_estadisticas_csv(self): file_name = get_print_path('Alumnos/')+'lista_usuarios.csv' with open(file_name, 'w+') as csvfile: csvwriter = csv.writer(csvfile, delimiter=',', quotechar='E', quoting=csv.QUOTE_MINIMAL) for alumno in Alumno.select(Alumno.q.activo==True): try: fila = ["%d"%alumno.id,"%s"%alumno.fecha_nacimiento,"%s"%alumno.fecha_creacion,\ "%s"%alumno.grupos[0].grupo.nombre.lower(),"%s"%alumno.grupos[0].grupo.curso.nombre.lower()] #print fila except: debug("No se ha podido leer información de alumno %d"%alumno.id) csvwriter.writerow(fila) csvfile.close() return file_name
def cargar(self,id): if id == -1: for variable in self._lista_variables: if variable == 'telefono1' or variable == 'telefono2' or variable == 'cp': setattr(self,variable,0) try: setattr(self,variable,'') except: print "Error reiniciando %s"%variable pass self.provincia=49 self.banco = 2095 ## self.fecha_nacimiento="2010-03-03" ## self.telefono1=555444333 ## self.telefono2=0 ## self.cp=48980 ## self.dni="22233444T" self.activo=1 self.id=-1 ##Limpiaos la lista de grupos self.lista_grupos.clear() self.lista_historico.clear() else: self.a = Alumno.get(id) for variable in self._lista_variables: if (variable == 'fecha_nacimiento'): ##La fecha nacimiento la pasamos a string ##fecha = str(getattr(self.a,variable).isoformat()) fecha = "%s-%s-%s"%(str(self.a.fecha_nacimiento.day),str(self.a.fecha_nacimiento.month),str(self.a.fecha_nacimiento.year)) self.fecha_nacimiento="%s"%fecha elif (variable == 'cuenta'): setattr(self,variable,str(ajustar(getattr(self.a,variable),10))) elif (variable == 'dc'): setattr(self,variable,str(ajustar(getattr(self.a,variable),2))) elif (variable == 'sucursal'): setattr(self,variable,str(ajustar(getattr(self.a,variable),4))) elif (variable == 'banco_codigo'): try: setattr(self,variable,str(ajustar(self.a.banco.codigo,4))) except: setattr(self,variable,"9999") else: setattr(self,variable,getattr(self.a,variable)) self.id=id ##refrescamos la lista de grupos a los que quere asistir el alumno if self.email == None: self.email = "---" self.refrescar_lista_grupos() self.refrescar_lista_historico()
def anadir_alumno(self,id): if self.id == -1: print "Antes debemos guardar el grupo, ya que no existe" self.guardar() ##Primero comprobamos si el alumno ya está en la lista for asistencia in self.g.alumnos: if asistencia.alumnoID == id: print "El alumno ya está en la lista!" return ##Obtenemos el alumno de la id a = Alumno.get(id) print "Añadiendo a %s %s %s"%(a.nombre,a.apellido1,a.apellido2) ##Creamos una asistencia sin confirmar para ese alumno c = Asistencia(grupo=self.g,alumno=a,confirmado=False) ##Refrescamos la lista self.rellenar_lista_alumnos()
def imprimir_lista_notas_asistencia(self,todos=False): """Pensado para una vez terminado el curso sacar un listado alfabetico con las notas finales y el totald e faltas""" fichero = get_print_path('Alumnos')+"/Listado_Alumnos_Notas_Asistencia.pdf" estiloHoja = getSampleStyleSheet() story = [] ##Vamos con la cabecera ##banner = os.path.join(_config.get_data_path(), 'media', 'banner_eide.png') ##img=Image(banner) ##story.append(img) estilo = estiloHoja['BodyText'] cadena = "<para alignment=center><b>LISTADO DE ALUMNOS</b></para>" story.append(Paragraph(cadena, estilo)) story.append(Spacer(0,10)) tabla =[['Apellidos ','Nombre','Curso','Notal Final','Faltas','Justificadas']] if todos: consulta = Alumno.select(orderBy=Alumno.q.apellido1) else: consulta = Alumno.select(Alumno.q.activo==True,orderBy=Alumno.q.apellido1) for persona in consulta: #print "Estamos con la persona %s (%s) "%(persona.nombre,persona.id) nota_final = "----" #print "La asistencia es:",asis.id try: asis = persona.grupos[0] grupo = asis.grupo.nombre except: grupo = "-----" #print "El grupo es %s"%grupo notas = Nota.select(Nota.q.asistenciaID==asis.id) for nota in notas: #print "El trimestre %s"%nota.trimestre if nota.trimestre==3: print "Estamos con la nota", nota.id print nota #~ ## primero comprobamos si es un pequeño coggemos la nota del 3º control, sino la de gramatica #~ nombre_curso = grupo.lower() #~ #FIXME esto debería ser una función externa #~ if re.search('junior',nombre_curso) or re.search('beginner',nombre_curso) or re.search('movers',nombre_curso) or re.search('starters',nombre_curso) or re.search('flyers',nombre_curso): #~ print "Es pequeño" #~ nota_3trimestre = nota.control3 #~ baremo_3trimestre = nota.control3_baremo #~ else: #~ print "Es mayor" #~ nota_3trimestre = nota.grama #~ baremo_3trimestre = nota.grama_baremo nota_3trimestre = nota.grammar ### Buscamos la nota de grama, si es 0 cojemos el control3 si es 999 (no presentado ponemos un NP) if nota_3trimestre == 0: nota_final = "NP" elif nota_3trimestre == 999: nota_final = "NP" else: nota_final = "%s /100"%(nota_3trimestre) total_faltas = 0 total_faltas_j = 0 try: for falta in Falta.select(Falta.q.asistenciaID==persona.grupos[0].id): total_faltas = total_faltas + falta.faltas total_faltas_j = total_faltas_j + falta.justificadas except: pass #except: # print "Uo :( algún error" # nota_final = "--" # faltas = "--" ##Para los que solo tienen un apellido: try: apellidos = persona.apellido1+" "+persona.apellido2 except: apellidos = persona.apellido1 tabla.append([apellidos,persona.nombre,grupo,nota_final,total_faltas,total_faltas_j]) t = Table(tabla) t.setStyle([('FONTSIZE',(0,0),(-1,-1),8),('FONTSIZE',(-1,0),(-1,-1),6),('TEXTCOLOR',(0,1),(0,-1),colors.blue), ('TEXTCOLOR',(1,1), (2,-1),colors.green)]) t.setStyle([('LINEABOVE', (0,0), (-1,0), 2, colors.black),('LINEBEFORE', (0,0), (0,-1), 2, colors.black),('LINEABOVE', (0,1), (-1,-1), 0.25, colors.black),('LINEAFTER', (0,0), (-1,-1), 0.25, colors.black),('LINEBELOW', (0,-1), (-1,-1), 2, colors.black),('LINEAFTER', (-1,0), (-1,-1), 2, colors.black),('ALIGN', (1,1), (-1,-1), 'RIGHT')]) story.append(t) doc=SimpleDocTemplate(fichero,pagesize=A4,showBoundary=0) doc.build(story) send_to_printer(fichero) return
def imprimir_lista_notas_asistencia_1_trim(self,todos=False): """Pensado para una vez terminado el trimestre sacar un listado alfabetico con las notas y las faltas""" fichero = get_print_path('Alumnos')+"/Listado_Alumnos_Notas_Asistencia_1_trim.pdf" estiloHoja = getSampleStyleSheet() story = [] ##Vamos con la cabecera ##banner = os.path.join(_config.get_data_path(), 'media', 'banner_eide.png') ##img=Image(banner) ##story.append(img) estilo = estiloHoja['BodyText'] cadena = "<para alignment=center><b>LISTADO DE ALUMNOS, NOTAS Y FALTAS</b></para>" story.append(Paragraph(cadena, estilo)) story.append(Spacer(0,10)) tabla =[['Apellidos ','Nombre','Curso','Notal 1º Trim','Faltas','Justificadas']] if todos: consulta = Alumno.select(orderBy=Alumno.q.apellido1) else: consulta = Alumno.select(Alumno.q.activo==True,orderBy=Alumno.q.apellido1) for persona in consulta: #print "Estamos con la persona %s (%s) "%(persona.nombre,persona.id) nota_final = "----" #print "La asistencia es:",asis.id try: asis = persona.grupos[0] grupo = asis.grupo.nombre except: grupo = "-----" #print "El grupo es %s"%grupo try: nota = Nota.select(AND(Nota.q.asistenciaID==asis.id,Nota.q.trimestre==1))[0] print "Estamos con la nota", nota.id print nota ##cromprobar cual es la nota buena, si grama u otra nota_trimestre = nota.grama baremo_trimestre = nota.grama_baremo ### Buscamos la nota de grama, si es 0 cojemos el control3 si es 999 (no presentado ponemos un NP) if nota_trimestre == 0: nota_final = "NP" elif nota_trimestre == 999: nota_final = "NP" else: nota_final = "%s / %s"%(nota_trimestre,baremo_trimestre) except: nota_final="pendiente" total_faltas = 0 total_faltas_j = 0 try: for falta in Falta.select(Falta.q.asistenciaID==persona.grupos[0].id): total_faltas = total_faltas + falta.faltas total_faltas_j = total_faltas_j + falta.justificadas except: pass try: apellidos = persona.apellido1+" "+persona.apellido2 except: apellidos = persona.apellido1 tabla.append([apellidos,persona.nombre,grupo,nota_final,total_faltas,total_faltas_j]) t = Table(tabla) t.setStyle([('FONTSIZE',(0,0),(-1,-1),8),('FONTSIZE',(-1,0),(-1,-1),6),('TEXTCOLOR',(0,1),(0,-1),colors.blue), ('TEXTCOLOR',(1,1), (2,-1),colors.green)]) t.setStyle([('LINEABOVE', (0,0), (-1,0), 2, colors.black),('LINEBEFORE', (0,0), (0,-1), 2, colors.black),('LINEABOVE', (0,1), (-1,-1), 0.25, colors.black),('LINEAFTER', (0,0), (-1,-1), 0.25, colors.black),('LINEBELOW', (0,-1), (-1,-1), 2, colors.black),('LINEAFTER', (-1,0), (-1,-1), 2, colors.black),('ALIGN', (1,1), (-1,-1), 'RIGHT')]) story.append(t) doc=SimpleDocTemplate(fichero,pagesize=A4,showBoundary=0) doc.build(story) send_to_printer(fichero) return