def boletin(request): """ Muestra un boletín en formato imprimible. """ if request.REQUEST.has_key('alumno') and request.REQUEST.has_key('evaluacion'): try: alumno = Alumno.objects.get(pk = request.REQUEST['alumno']) except Alumno.DoesNotExist: raise FatalError("El alumno no existe en la base de datos") writer = DjangoWriter() writer.loadFile(os.path.join(settings.OOTEMPLATES, 'boletin.odt')) alumno.generaBoletin(writer) return writer.HttpResponsePDF(filename = 'boletin') else: raise FatalError("No se han encontrado los argumentos correctos")
def genera_boletines(directory, odt = False, dry_run = False, pdc = False, niveles = [], curso = []): """ Genera todos los boletines para los niveles pasados como argumento """ filter = {'curso__ciclo__nivel__cursoEscolar': settings.CURSO_ESCOLAR_ACTUAL} #no_promocionan_de_primaria = [1291, 1749, 1277, 1283, 1284, 1339, 1289, 1455, 1346, 1337, 1125] #no_promocionan_de_secundaria = [6, 17, 18, 22, 29, 31, 40, 46, 47, 55, 78, 87, 111, 116, 119, 124, 125, 130, 133, 135, 137, 141, # 142, 143, 152, 153, 171, 174, 178, 179, 185, 186, 187, 188, 191, 201, 202, 203, 204, 220, 244, 252, 254, 270, 301, 308, 340, 668, # 678, 684, 687, 689, 690, 693, 697, 699, 700, 708, 712, 714, 715, 717, 719, 720, 725, 782, 808, 841, 849, 851, 854, 864, 867, 871, # 874, 875, 876, 878, 881, 883, 886, 887, 893, 894, 898, 902, 914, 1020, 1036, 1037, 1038, 1041, 1045, 1047, 1053, 1061, 1062, 1069, 1073, # 1074, 1078, 1088, 1090, 1095, 1110, 1114, 1381, 1382, 1560, 1567, 1647, 1654, 1747, 1753, 1760, 1852, 1857, 1871, 1952, 1958, 1961, # 1962, 1966, 1969, 1970, 1973, 1974, 1975] #no_promocionan = no_promocionan_de_primaria + no_promocionan_de_secundaria #alumnos_no_promocionan = TraductorAlumno.objects.filter(registro__in=no_promocionan).values_list('akademic', flat=True) exclude_sections = ['Pendientes'] if not pdc: exclude_sections.append('PDC') exclude = {'seccion__in': exclude_sections} if niveles: filter['curso__ciclo__nivel__nombre__in'] = niveles.split(',') if curso: filter['curso__nombre__in'] = curso.split(',') for g in GrupoAula.objects.filter(**filter).exclude(**exclude): if not dry_run: boletin = DjangoWriter() boletin.loadFile(os.path.join (settings.OOTEMPLATES, 'boletin.odt')) boletin.copyAll() alumnos = 0 for a in g.getAlumnos(): if not dry_run: boletin.pasteEnd() a.generaBoletin(boletin) boletin.appendPageBreak() alumnos += 1 logger.info("Boletin del grupo %s generado para %d alumnos.", g.__unicode__(), alumnos) name = "%s." % g.display_boletin() name += 'odt' if odt else 'pdf' full_name = os.path.join(directory, name) if not dry_run: logger.info("Guardando el fichero en %s" % full_name) boletin.saveODT(full_name) if odt else boletin.savePDF(full_name) boletin.close()
def _informePersonalizadoGrupo(context): """ Genera un pdf con el informe personalizado de un Grupo de alumnos. """ def limpia_tablas(writer, tablas): for t in tablas: writer.tableDeleteRow(t, 1) informe = DjangoWriter() informe.blank() informe.appendFile((os.path.join(settings.OOTEMPLATES, 'incidencias.odt'))) informe.copyAll() info = {'tarea': {'lista': [], 'ind': 'totalTarea'}, 'comportamiento': {'lista': [], 'ind': 'totalComportamiento'}, 'material': {'lista': [], 'ind': 'totalMaterial'}, } page = 1 delete_tables = [] for alu in context['informe']: fila = 3 info['tarea']['lista'] = [] info['comportamiento']['lista'] = [] info['material']['lista'] = [] informe.pasteEnd() i = alu['informePersonal'] for a in alu['informePersonal']['asignaturas']: asigna = u'%s' % a['asignatura'] for k in info: for f in a[k]: info[k]['lista'].append((asigna, '%s'%f.fecha.strftime('%d-%m-%Y'), '1')) logger.debug("Se intenta coger la tabla Table%d", (10*page-10+fila)) tabla = u"Table3" if tabla in informe.getTables(): tabla_name = u"Table%d" else: tabla_name = u"Tabla%d" informe.tableWriteInRow(tabla_name % (10*page-10+fila), 1, 'Total acumulado asistencia', str(i['totalFaltas'])) fila += 1 informe.tableWriteInRow(tabla_name % (10*page-10+fila), 1, 'Total acumulado retrasos', str(i['totalRetrasos'])) fila += 1 for k in info: initial = True table = tabla_name % (10*page-10+fila) fila += 1 for asig, fecha, total in info[k]['lista']: if initial: informe.tableWriteInRow(table, 1, asig, fecha, total) initial = False else: informe.tableAddRow(table, asig, fecha, total) if initial: delete_tables.append(table) informe.tableWriteInRow(tabla_name % (10*page-10+fila), 1, 'Total acumulado %s' % k, str(i[info[k]['ind']])) fila += 1 grupo = context['curso'] informe.searchAndReplacePage(None, '$$Tutor$$', u'%s' % context['profesor'].persona) informe.searchAndReplacePage(None, '$$Nombre$$', u'%s' %alu['alumno'].persona) informe.searchAndReplacePage(None, '$$Fecha1$$', context['fechaInicio'].strftime('%d de %B de %Y')) informe.searchAndReplacePage(None, '$$Fecha2$$', context['fechaFin'].strftime('%d de %B de %Y')) informe.searchAndReplacePage(None, '$$Curso$$', u'%s %s %s' % (grupo.curso.nombre, grupo.curso.ciclo.nivel.nombre, grupo.seccion)) if page > 1: informe.appendPageBreak() page += 1 limpia_tablas(informe, delete_tables) return informe