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