def cargar(self): if not self.id == -1: logging.debug( "Ya tenemos el ID cargamos la falta" ) self.f = Falta.get(self.id) elif self.buscar()==1: logging.debug( "Ya hemos editado esta falta antes, la cargamos" ) for variable in self.__observables__: setattr(self,variable,getattr(self.f,variable)) return 0 else: logging.debug( "No podemos cargar!" ) return -1
def imprimir_cartas_mes(self,mes): num = 0 for f in Falta.select(AND(Falta.q.mes==mes,Falta.q.faltas>3)): self.id = f.id self.cargar() if (not f.asistenciaID): logging.debug("No ha asistencia asociada a la falta, nos la saltamos") continue if date.today().year - self.f.asistencia.alumno.fecha_nacimiento.year < 19 : logging.debug("Es menor de edad porque ha nacido el %s, imprimimos carta"%self.f.asistencia.alumno.fecha_nacimiento.year) self.imprimir_carta_faltas() num += 1 return num
def imprimir_lista_mes(self,mes): ##Imprime el listado de faltas del mes cargado en self.mes hoy=date.today() fichero = os.path.join(get_print_path('Faltas'),"faltas_%s-%s.pdf"%(hoy.year,mes)) logging.debug( "Imprimiendo listado de faltas en el fichero %s"%(fichero) ) 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) ##Aquí un estilo adecuado, alineado derecha, para ventanilla, etc estilo = estiloHoja['BodyText'] ##Intro cadena = "<para alignment=center><b>LISTADO DE FALTAS %s</b></para>"%nombre_mes(mes) story.append(Paragraph(cadena, estilo)) story.append(Spacer(0,10)) ##Tabla con las faltas tabla_faltas =[['Numero','Apellidos, Nombre','Grupo','Faltas','Justificadas']] for f in Falta.select(Falta.q.mes==mes): ##FIXME esto deberia ir en la consula SQL if (f.justificadas>3 or f.faltas>3): ##print f.id logging.debug( "Tenemos la falta %s"%(f.id)) if (not f.asistenciaID): logging.debug("No ha asistencia asociada a la falta, nos la saltamos") continue logging.debug( "relacionada con la asistencia %s"%(f.asistencia.id) ) tabla_faltas.append([f.asistencia.alumno.id,"%s %s, %s"%(f.asistencia.alumno.apellido1, f.asistencia.alumno.apellido2,f.asistencia.alumno.nombre,),f.asistencia.grupo.nombre,f.faltas,f.justificadas]) t_faltas = Table(tabla_faltas) t_faltas.setStyle([('TEXTCOLOR',(0,1),(0,-1),colors.blue), ('TEXTCOLOR',(1,1), (2,-1),colors.green)]) story.append(t_faltas) ##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) doc.build(story) send_to_printer(fichero)
def buscar(self): ##Buscamos la asistencia logging.debug( "Buscado la falta del alumno %i al grupo %i mes %i"%(self.alumnoID,self.grupoID,self.mes)) if self.mes == -1 or self.alumnoID == -1 or self.grupoID == -1: ##Falta algún dato logging.debug( "Faltan datos!" ) return -1 res = Asistencia.select(AND(Asistencia.q.alumnoID==self.alumnoID,Asistencia.q.grupoID==self.grupoID)) if len(list(res)): ##en base a la asistencia buscamos si hay una nota asis = res[0] res = Falta.select(AND(Falta.q.asistenciaID==asis.id,Falta.q.mes==self.mes)) if len(list(res)): self.f = res[0] logging.debug( "Encontrada falta %i"%self.f.id) else: logging.debug( "Creando falta nueva" ) self.f = Falta(asistencia=asis,mes=self.mes) self.id = self.f.id return 1 else: logging.debug( "No hemos encontrado la asistecia, algo va mal!") self.clear() return -1
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
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