예제 #1
0
 def borrar(self):
     print "Borramos el grupo ya cargado %s"%self.id
     for asis in self.g.alumnos:
         print "Borrando asistencia %s del alumnuno %s"%(asis.id,asis.alumno.id)
         for nota in asis.notas:
             Nota.delete(nota.id)
         Asistencia.delete(asis.id)
     for clase in self.g.clases:
         print "Borrando la clase %s"%clase.id
         Clase.delete(clase.id)
     Grupo.delete(self.id)
     self.rellenar_lista()
예제 #2
0
 def buscar(self):
     ##Buscamos la asistencia
     print "Buscado la nota del alumno %i al grupo %i trimestre %i"%(self.alumnoID,self.grupoID,self.trimestre)
     if self.trimestre == -1 or self.alumnoID == -1 or self.grupoID == -1:
         ##Falta algún dato
         return -1
     res = Asistencia.select(AND(Asistencia.q.alumnoID==self.alumnoID,Asistencia.q.grupoID==self.grupoID))
     if len(list(res)):
         print "Hemos encontrado la asistencia",res
         ##en base a la asistencia buscamos si hay una nota
         asis = res[0]
         res = Nota.select(AND(Nota.q.asistenciaID==asis.id,Nota.q.trimestre==self.trimestre))
         print "Hemos encontrado",res
         try:
             self.n = res[0]
             print "Encontrada nota %i"%self.n.id
         except:
             print sys.exc_info()
             print "No existe, creando nota nueva",asis,self.trimestre
             try:
                 self.n = Nota(asistencia=asis,trimestre=self.trimestre)
                 print "Creada",self.n
             except:
                 print sys.exc_info()
                 print "No hemos podido crear la nota!"
         self.id = self.n.id
         return 1
     else:
         print "No hemos encontrado la asistecia, algo va mal!"
         self.clear()
         return -1
예제 #3
0
 def imprimir(self,id):
     print "Imprimiendo las notas del trimestre %s"%id
     num_notas=0
     for n in Nota.select(Nota.q.trimestre==id):
         num_notas+=1
         mostrar_aviso("Funcion deshabilitada","Funcion deshabilitada")
         #self.imprimir_nota(n)
     return num_notas
예제 #4
0
    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
예제 #5
0
    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
예제 #6
0
    def imprimir_nota(self,asistencia,trimestre_imprimir):
        hoy=date.today()
        ##FIXME esto debería ir a preferencias
        fichero = os.path.join(_imprimir.get_print_path('Notas'),"nota_%s_%s.pdf"%(hoy.year,asistencia.alumno.id))
        debug("Imprimiendo las notas de la asistencia  %i en el fichero %s"%(asistencia.id,fichero))
        ##Vamos a intentar cargar todas las notas del alumno en los tres trimestres
        notas_trimestres = {}
        for trimestre in 1, 2, 3:
            notas = {}
            res = Nota.select(AND(Nota.q.asistenciaID==asistencia.id,Nota.q.trimestre==trimestre))
            if len(list(res)):
                n = res[0]
                #print "Encontrada nota %i"%n.id
                np = False
                na = False
                for variable in self.__observables__:
                    #print "Cargando %s con el valor %s"%(variable,getattr(n,variable))
                    #Si es una variable _np o _na no hacemos nada
                    if re.search("_np",variable) or re.search("_na",variable):
                        np = False
                        na = False
                    else:
                        np = getattr(n,"%s_np"%variable)
                        na = getattr(n,"%s_na"%variable)
                    if na:
                        notas.update({variable: "NA"})
                    elif np:
                        notas.update({variable: "NP"})
                    else:
                        notas.update({variable: limpiar_nota(getattr(n,variable))})
                lista_materias=[]
                if asistencia.grupo.curso.modelo_notas == "elementary_intermediate":
                    lista_materias = ['reading', 'grammar', 'writing', 'speaking', 'listening']
                elif asistencia.grupo.curso.modelo_notas == "upper_proficiency":
                    lista_materias = ['reading', 'useofenglish', 'writing', 'speaking', 'listening']
                else: 
                    lista_materias=[]
                if len(lista_materias) > 0:
                    #Calculamos la nota final:
                    lista_notas = []
                    for materia in lista_materias:
                        #~ print "miramos si %s tiene na"%materia,getattr(n,"%s_na"%materia)
                        if getattr(n,"%s_na"%materia):
                            #~ print "miramos si %s tiene na"%materia,getattr(n,"%s_na"%materia)
                            pass
                        else:
                            lista_notas.append(limpiar_nota(getattr(n,materia)))
                    #~ print "Lista", lista_notas
                    nota_final = nota_media(lista_notas)
                    #~ print "Nota final", nota_final
                    notas.update({"nota_final": nota_final})
                        
            else:
                #~ print "No hay nota aun"
                for variable in self.__observables__:
                    notas.update({variable: 0})
                    notas.update({"nota_final": 0})
            #~ print "Añadimos las notas de trimestre", notas
            notas_trimestres.update({trimestre: notas})

        #~ print "En total: ",notas_trimestres
        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)
        story.append(Spacer(0,40))
        ##Aquí un estilo adecuado, alineado derecha, para ventanilla, etc
        estilo = estiloHoja['BodyText']
        cadena = "<para alignment=right>%s %s %s</para>"%(asistencia.alumno.nombre,asistencia.alumno.apellido1,asistencia.alumno.apellido2)
        story.append(Paragraph(cadena, estilo))
        cadena = "<para alignment=right>%s</para>"%(asistencia.alumno.direccion)
        story.append(Paragraph(cadena, estilo))
        cadena = "<para alignment=right>%s %s</para>"%(asistencia.alumno.cp,asistencia.alumno.ciudad)
        story.append(Paragraph(cadena, estilo))
        story.append(Spacer(0,40))
        ##Intro
        cadena = "<para alignment=center><b>BOLETIN DE EVALUACION TRIMESTRAL</b></para>"
        story.append(Paragraph(cadena, estilo))
        story.append(Spacer(0,10))
        ##Datos del docu: alumno, grupo, profes
        cadena = "Nombre del alumno: <b>%s %s %s</b>"%(asistencia.alumno.nombre,asistencia.alumno.apellido1,asistencia.alumno.apellido2)
        story.append(Paragraph(cadena, estilo))
        cadena = "Grupo: <b>%s</b>"%asistencia.grupo.nombre
        story.append(Paragraph(cadena, estilo))
        profes = ""
        for c in asistencia.grupo.clases:
            profes = profes + "%s %s - "%(c.profesor.nombre,c.profesor.apellido1)
        cadena = "Profesores %s"%profes
        story.append(Paragraph(cadena, estilo))
        story.append(Spacer(0,20))
        ##Faltas de asistencia
        ##calculamos todas las del trimestre haciendo un select en función del trimestre que sea
        if trimestre_imprimir == 1:
            debug("Mirando faltas del primer trimestre de %s"%asistencia.id)
            faltas_query = Falta.select(AND(Falta.q.asistenciaID==asistencia.id,OR(Falta.q.mes==9,Falta.q.mes==10,Falta.q.mes==11,Falta.q.mes==12)))
        elif trimestre_imprimir == 2:
            print "Mirando faltas del segundo trimestre"
            faltas_query = Falta.select(AND(Falta.q.asistenciaID==asistencia.id,OR(Falta.q.mes==1,Falta.q.mes==2,Falta.q.mes==3)))
        elif trimestre_imprimir == 3:
            print "Mirando faltas del tercer trimestre"
            faltas_query = Falta.select(AND(Falta.q.asistenciaID==asistencia.id,OR(Falta.q.mes==4,Falta.q.mes==5,Falta.q.mes==6)))
        else:
            print "a por todas las faltas"
            faltas_query = Falta.select(Falta.q.asistenciaID==asistencia.id)
        #...y pidiendo que nos sume las faltas
        faltas = faltas_query.sum('faltas')
        justificadas = faltas_query.sum('justificadas')
        cadena="Faltas de asistencia totales: %s   --  Faltas Justificadas:%s"%(faltas,justificadas)
        story.append(Paragraph(cadena, estilo))
        story.append(Spacer(0,20))
        ##Tabla con las notas
        
        if asistencia.grupo.curso.modelo_notas == "upper_proficiency":
            tabla =[['Concepto','Primer Trimestre','Segundo Trimestre','Tercer Trimestre']]
            tabla.append(["Reading",\
                "%s"%(notas_trimestres[1]['reading']),\
                "%s"%(notas_trimestres[2]['reading']),\
                "%s"%(notas_trimestres[3]['reading'])])
            tabla.append(["Use of english",\
                "%s"%(notas_trimestres[1]['useofenglish']),\
                "%s"%(notas_trimestres[2]['useofenglish']),\
                "%s"%(notas_trimestres[3]['useofenglish'])])
            tabla.append(["Writing",\
                "%s"%(notas_trimestres[1]['writing']),\
                "%s"%(notas_trimestres[2]['writing']),\
                "%s"%(notas_trimestres[3]['writing'])])
            tabla.append(["Speaking",\
                "%s"%(notas_trimestres[1]['speaking']),\
                "%s"%(notas_trimestres[2]['speaking']),\
                "%s"%(notas_trimestres[3]['speaking'])])
            tabla.append(["Listening",\
                "%s"%(notas_trimestres[1]['listening']),\
                "%s"%(notas_trimestres[2]['listening']),\
                "%s"%(notas_trimestres[3]['listening'])])    
            tabla.append(["Final",\
                "%.2f"%(notas_trimestres[1]['nota_final']),\
                "%.2f"%(notas_trimestres[2]['nota_final']),\
                "%.2f"%(notas_trimestres[3]['nota_final'])])
            t_notas = Table(tabla)
            t_notas.setStyle([('TEXTCOLOR',(0,1),(0,-1),colors.blue), ('TEXTCOLOR',(1,1), (2,-1),colors.green)])
            story.append(t_notas)
            
        elif asistencia.grupo.curso.modelo_notas == "elementary_intermediate":
            tabla =[['Concepto','Primer Trimestre','Segundo Trimestre','Tercer Trimestre']]
            tabla.append(["Grammar",\
                "%s"%(notas_trimestres[1]['grammar']),\
                "%s"%(notas_trimestres[2]['grammar']),\
                "%s"%(notas_trimestres[3]['grammar'])])
            tabla.append(["Reading",\
                "%s"%(notas_trimestres[1]['reading']),\
                "%s"%(notas_trimestres[2]['reading']),\
                "%s"%(notas_trimestres[3]['reading'])])
            tabla.append(["Writing",\
                "%s"%(notas_trimestres[1]['writing']),\
                "%s"%(notas_trimestres[2]['writing']),\
                "%s"%(notas_trimestres[3]['writing'])])
            tabla.append(["Speaking",\
                "%s"%(notas_trimestres[1]['speaking']),\
                "%s"%(notas_trimestres[2]['speaking']),\
                "%s"%(notas_trimestres[3]['speaking'])])
            tabla.append(["Listening",\
                "%s"%(notas_trimestres[1]['listening']),\
                "%s"%(notas_trimestres[2]['listening']),\
                "%s"%(notas_trimestres[3]['listening'])])    
            tabla.append(["Final",\
                "%.2f"%(notas_trimestres[1]['nota_final']),\
                "%.2f"%(notas_trimestres[2]['nota_final']),\
                "%.2f"%(notas_trimestres[3]['nota_final'])])
            t_notas = Table(tabla)
            t_notas.setStyle([('TEXTCOLOR',(0,1),(0,-1),colors.blue), ('TEXTCOLOR',(1,1), (2,-1),colors.green)])
            story.append(t_notas)
        
        else:
            tabla_controles =[['Concepto','Primer Trimestre','Segundo Trimestre','Tercer Trimestre']]        
            tabla_controles.append(["Control",\
                "%s"%(notas_trimestres[1]['control']),\
                "%s"%(notas_trimestres[2]['control']),\
                "%s"%(notas_trimestres[3]['control'])])                
            if asistencia.grupo.menores:
                tabla_controles.append(["Comportamiento",\
                    "%s"%(convertir_comportamiento(notas_trimestres[1]['comportamiento'])),\
                    "%s"%(convertir_comportamiento(notas_trimestres[2]['comportamiento'])),\
                    "%s"%(convertir_comportamiento(notas_trimestres[3]['comportamiento']))])
            t_controles = Table(tabla_controles)
            t_controles.setStyle([('TEXTCOLOR',(0,1),(0,-1),colors.blue), ('TEXTCOLOR',(1,1), (2,-1),colors.green)])
            story.append(t_controles)

        story.append(Spacer(0,20))

        ###Explicaciones y baremos
        #cadena="Comportamiento: M = Malo, R = Regular, B = Bueno, E = Muy Bueno"
        #story.append(Paragraph(cadena, estilo))
        
        if asistencia.grupo.curso.modelo_notas == "upper_proficiency":
            nota_aprobado = "60"
        elif asistencia.grupo.curso.modelo_notas == "elementary_intermediate":
            nota_aprobado = "70"
        else:
            nota_aprobado = asistencia.grupo.curso.nota_aprobado
        cadena="Para que un examen se considere aprobado se deberá superar el %s"%nota_aprobado
        story.append(Paragraph(cadena, estilo))
        cadena="NP: No Presentado"
        story.append(Paragraph(cadena, estilo))
        cadena="NA: Ese trimestre no se evalúa"
        story.append(Paragraph(cadena, estilo))
        story.append(Spacer(0,10))
        ##Observaciones
        cadena="<b>Observaciones del profesorado:                                          </b>"
        story.append(Paragraph(cadena, estilo))
        story.append(Spacer(0,80))
        ##Fecha y firmas
        cadena="Visto bueno del centro"
        story.append(Paragraph(cadena, estilo))
        cadena="<para alignment=right>Firma de los padres</para>"
        story.append(Paragraph(cadena, estilo))
        story.append(Spacer(0,30))

        ##Pie de página

        #cadena="<para alignment=center><b>Genaro Oraá,6 - 48980 SANTURTZI (Spain)- Tlf. + 34 944 937 005 - FAX +34 944 615 723</b></para>"
        #story.append(Paragraph(cadena, estilo))
        #cadena="<para alignment=center><b><a href=\"http:\\www.eide.es\">www.eide.es</a> - e-mail: [email protected]</b></para>"
        #story.append(Paragraph(cadena, estilo))
        #story.append(Spacer(0,20))
        doc=SimpleDocTemplate(fichero,pagesize=A4,showBoundary=0)
        doc.build(story)
        send_to_printer(fichero)
        return