def reportLlistaTutorsIndividualitzats(): tutors_ids = TutorIndividualitzat.objects.all().values_list('pk') report = [] #--sense alumnes................. taula = tools.classebuida() taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 200 capcelera.contingut = u'{0}'.format('Professor') taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 300 capcelera.contingut = u'{0}'.format('Alumnes amb tutoria individualitzada') taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 200 capcelera.contingut = u'{0}'.format('Accions') taula.capceleres.append(capcelera) taula.fileres = [] for tutor in Professor.objects.all(): filera = [] #-nom-------------------------------------------- camp = tools.classebuida() camp.enllac = '' camp.contingut = unicode(tutor) filera.append(camp) #-alumnes.................... camp = tools.classebuida() camp.multipleContingut = [] for alumne in Alumne.objects.filter( tutorindividualitzat__professor=tutor): camp.enllac = '' camp.multipleContingut.append(( unicode(alumne) + ' (' + unicode(alumne.grup) + ')', None, )) filera.append(camp) #-accions-------------------------------------------- camp = tools.classebuida() camp.enllac = '/alumnes/gestionaAlumnesTutor/{0}'.format(tutor.pk) camp.contingut = unicode(u"Gestiona Alumnes") filera.append(camp) taula.fileres.append(filera) report.append(taula) return report
def reportLlistaTutorsIndividualitzats( ): tutors_ids = TutorIndividualitzat.objects.all().values_list( 'pk' ) report = [] #--sense alumnes................. taula = tools.classebuida() taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 30 capcelera.contingut = u'{0}'.format('Professor') taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 50 capcelera.contingut = u'{0}'.format('Alumnes amb tutoria individualitzada') taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 20 capcelera.contingut = u'{0}'.format('Accions') taula.capceleres.append( capcelera ) taula.fileres = [] for tutor in Professor.objects.all(): filera = [] #-nom-------------------------------------------- camp = tools.classebuida() camp.enllac = '' camp.contingut = unicode(tutor) filera.append(camp) #-alumnes.................... camp = tools.classebuida() camp.multipleContingut = [] for alumne in Alumne.objects.filter( tutorindividualitzat__professor = tutor ): camp.enllac = '' camp.multipleContingut.append( (unicode(alumne) + ' (' + unicode(alumne.grup) + ')', None,) ) filera.append(camp) #-accions-------------------------------------------- camp = tools.classebuida() camp.enllac = '/alumnes/gestionaAlumnesTutor/{0}'.format( tutor.pk ) camp.contingut = unicode(u"Gestiona Alumnes") filera.append(camp) taula.fileres.append( filera ) report.append(taula) return report
def sortidesListRpt(user): report = [] taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 40 capcelera.contingut = 'Sortida' capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 60 capcelera.contingut = u'Dades Generals' taula.capceleres.append(capcelera) taula.fileres = [] q = Q(professor_que_proposa__pk=user.pk) if User.objects.filter(pk=user.pk, groups__name__in=['sortides', 'direcció']).exists(): q |= ~Q(estat='E') for sortida in Sortida.objects.filter(q).order_by('-data_inici'): filera = [] #-Sortida-------------------------------------------- camp = tools.classebuida() camp.enllac = reverse('sortides__sortides__edit_by_pk', kwargs={ 'pk': sortida.pk, }) camp.contingut = u"{0} ({1})".format(sortida.titol_de_la_sortida, sortida.get_estat_display()) filera.append(camp) #-Dades Gernerals-------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = u"{dpt} ( {datainici} )".format( dpt=sortida.departament_que_organitza, datainici=sortida.data_inici.strftime('%d/%m/%Y')) filera.append(camp) #-- taula.fileres.append(filera) report.append(taula) return report
def reportCalendariCursEscolarTutor( professor ): reports = [] for grup in Grup.objects.filter( pk__in = [ t.grup.pk for t in professor.tutor_set.all() ] ): q_alumnes = Q( alumne__grup = grup ) dies = ControlAssistencia.objects.filter( q_alumnes ).values_list('impartir__dia_impartir', flat=True).distinct() assignatures = Assignatura.objects.filter( horari__impartir__controlassistencia__alumne__grup = grup ).distinct().values( 'codi_assignatura', 'curs__nom_curs' ) report = tools.classebuida() report.dies = sorted( dies ) report.assignatures = [ u'{0}({1})'.format(a["codi_assignatura"], a["curs__nom_curs"] ) for a in assignatures ] reports.append(report) return reports
def sortidesListRpt( user ): report = [] taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 40 capcelera.contingut = 'Sortida' capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 60 capcelera.contingut = u'Dades Generals' taula.capceleres.append(capcelera) taula.fileres = [] q = Q( professor_que_proposa__pk = user.pk ) if User.objects.filter( pk=user.pk, groups__name__in = [ 'sortides', 'direcció' ] ).exists(): q |= ~Q( estat = 'E' ) for sortida in Sortida.objects.filter(q).order_by( '-data_inici' ): filera = [] #-Sortida-------------------------------------------- camp = tools.classebuida() camp.enllac = reverse( 'sortides__sortides__edit_by_pk' , kwargs={'pk': sortida.pk ,}) camp.contingut = u"{0} ({1})".format(sortida.titol_de_la_sortida, sortida.get_estat_display() ) filera.append(camp) #-Dades Gernerals-------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = u"{dpt} ( {datainici} )".format( dpt = sortida.departament_que_organitza, datainici = sortida.data_inici.strftime( '%d/%m/%Y' ) ) filera.append(camp) #-- taula.fileres.append( filera ) report.append(taula) return report
def resultats(request): (user, l4) = tools.getImpersonateUser(request) professor = User2Professor(user) report = [] taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = "" taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 35 capcelera.contingut = u'{0}'.format(u'Avaluació qualitativa') taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 65 capcelera.contingut = u'Dades' taula.capceleres.append(capcelera) taula.fileres = [] for qualitativa in AvaluacioQualitativa.objects.all(): filera = [] camp = tools.classebuida() camp.contingut = u'{0}'.format(unicode(qualitativa)) filera.append(camp) camp = tools.classebuida() obertaLaQualitativa = qualitativa.data_obrir_avaluacio <= date.today( ) <= qualitativa.data_tancar_avaluacio estat = '(Oberta)' if obertaLaQualitativa else '(Tancada)' camp.contingut = u'del {0} al {1} {2}'.format( qualitativa.data_obrir_avaluacio, qualitativa.data_tancar_avaluacio, estat) camp.enllac = '/avaluacioQualitativa/report/{0}'.format(qualitativa.pk) filera.append(camp) taula.fileres.append(filera) report.append(taula) return render( request, 'report.html', { 'report': report, 'head': u'Avaluacions Qualitatives', }, )
def reportCalendariCursEscolarTutor(professor): reports = [] for grup in Grup.objects.filter( pk__in=[t.grup.pk for t in professor.tutor_set.all()]): q_alumnes = Q(alumne__grup=grup) dies = ControlAssistencia.objects.filter(q_alumnes).values_list( 'impartir__dia_impartir', flat=True).distinct() assignatures = Assignatura.objects.filter( horari__impartir__controlassistencia__alumne__grup=grup).distinct( ).values('codi_assignatura', 'curs__nom_curs') report = tools.classebuida() report.dies = sorted(dies) report.assignatures = [ u'{0}({1})'.format(a["codi_assignatura"], a["curs__nom_curs"]) for a in assignatures ] reports.append(report) return reports
def resultats( request ): (user, l4) = tools.getImpersonateUser(request) professor = User2Professor( user ) report = [] taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = "" taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 35 capcelera.contingut = u'{0}'.format( u'Avaluació qualitativa' ) taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 65 capcelera.contingut = u'Dades' taula.capceleres.append(capcelera) taula.fileres = [] for qualitativa in AvaluacioQualitativa.objects.all(): filera = [] camp = tools.classebuida() camp.contingut = u'{0}'.format(unicode( qualitativa ) ) filera.append(camp) camp = tools.classebuida() obertaLaQualitativa = qualitativa.data_obrir_avaluacio <= date.today() <= qualitativa.data_tancar_avaluacio estat = '(Oberta)' if obertaLaQualitativa else '(Tancada)' camp.contingut = u'del {0} al {1} {2}'.format( qualitativa.data_obrir_avaluacio, qualitativa.data_tancar_avaluacio, estat) camp.enllac = '/avaluacioQualitativa/report/{0}'.format( qualitativa.pk ) filera.append(camp) taula.fileres.append( filera ) report.append(taula) return render( request, 'report.html', {'report': report, 'head': u'Avaluacions Qualitatives' , }, )
def calcula_menu( user , path ): if not user.is_authenticated(): return #mire a quins grups està aquest usuari: al = Group.objects.get_or_create(name= 'alumne' )[0] in user.groups.all() di = not al and Group.objects.get_or_create(name= 'direcció' )[0] in user.groups.all() pr = not al and Group.objects.get_or_create(name= 'professors' )[0] in user.groups.all() pl = not al and Group.objects.get_or_create(name= 'professional' )[0] in user.groups.all() co = not al and Group.objects.get_or_create(name= 'consergeria' )[0] in user.groups.all() pg = not al and Group.objects.get_or_create(name= 'psicopedagog' )[0] in user.groups.all() so = not al and Group.objects.get_or_create(name= 'sortides' )[0] in user.groups.all() tu = not al and pr and ( User2Professor( user).tutor_set.exists() or User2Professor( user).tutorindividualitzat_set.exists() ) tots = di or pr or pl or co or al or pg #Comprovar si té missatges sense llegir nMissatges = user.destinatari_set.filter( moment_lectura__isnull = True ).count() fa2segons = datetime.now() - timedelta( seconds = 2 ) nMissatgesDelta = user.destinatari_set.filter( moment_lectura__gte = fa2segons ).count() #Comprovar si té expulsions sense tramitar o cal fer expulsions per acumulació teExpulsionsSenseTramitar= False if pr: professor = User2Professor( user ) teExpulsionsSenseTramitar = professor.expulsio_set.exclude( tramitacio_finalitzada = True ).exists() #Acumulació Incidències if settings.CUSTOM_INCIDENCIES_PROVOQUEN_EXPULSIO and not teExpulsionsSenseTramitar: professional = User2Professional( user ) teExpulsionsSenseTramitar = ( Alumne .objects .order_by() .filter( incidencia__professional = professional, incidencia__tipus__es_informativa = False, incidencia__gestionada_pel_tutor = False, incidencia__es_vigent = True ) .annotate( n = Count( 'incidencia' ) ) .filter( n__gte = 3 ) .exists() ) #Comprovar si hi ha una qualitativa oberta hiHaUnaQualitativaOberta = False if pr: from aula.apps.avaluacioQualitativa.models import AvaluacioQualitativa hiHaUnaQualitativaOberta = AvaluacioQualitativa.objects.filter( data_obrir_avaluacio__lte = date.today(), data_tancar_avaluacio__gte = date.today() ).exists() menu = { 'items':[], 'subitems':[], 'subsubitems':[], } try: nom_path = resolve( path ).url_name except: return menu menu["esalumne"]=al if al: alumneuser = AlumneUser.objects.get( id = user.id ) alumne = alumneuser.getAlumne() menu["nomusuari"]= u"Família de {alumne}".format( alumne=alumne.nom ) else: menu["nomusuari"]= user.first_name or user.username try: menu_id, submenu_id, subsubmenu_id = nom_path.split( '__' )[:3] except: return menu arbre_tutoria = ( ("Actuacions", 'tutoria__actuacions__list', tu, None, None ), ("Incidències de Tutor", 'tutoria__incidencies__list', tu, None, None ), ("Justificar", 'tutoria__justificar__pre_justificar', tu, None, None ), ("Cartes", 'tutoria__cartes_assistencia__gestio_cartes', tu, None, None ), ("Alumnes", 'tutoria__alumnes__list', tu, None, None ), ("Assistència", 'tutoria__assistencia__list_entre_dates', tu, None, None ), ("Informe", 'tutoria__alumne__informe_setmanal', tu, None, None ), ("Portal", 'tutoria__relacio_families__dades_relacio_families', tu, None, None ), ("Seguiment", 'tutoria__seguiment_tutorial__formulari', tu, None, None ), ) if settings.CUSTOM_TUTORS_INFORME: arbre_tutoria += ( ("Impressió Faltes i Incid.", 'tutoria__informe__informe_faltes_incidencies', tu, None, None ), ) if hasattr(settings, 'CUSTOM_MODUL_SORTIDES_ACTIU' ) and settings.CUSTOM_MODUL_SORTIDES_ACTIU and ( di or pr ): professor = User2Professor( user ) filtre = [ 'P', 'R', ] te_sortides_actives = ( Sortida .objects .exclude( estat = 'E' ) .filter( estat__in = filtre ) .filter( data_inici__gte = datetime.now() ) .filter( tutors_alumnes_convocats = professor ) .exists() ) arbre_tutoria += ( ("Sortides", 'tutoria__justificarSortida__list', tu, ( u'!', 'info' ) if te_sortides_actives else None, None ), ) arbre1 = ( #--Consergeria-------------------------------------------------------------------------- ('consergeria', 'Consergeria', 'consergeria__missatges__envia_tutors', co, None, ( ("Missatge a tutors", 'consergeria__missatges__envia_tutors', co, None, None ), ("Incidència per retard", 'consergeria__incidencia__onbehalf', co, None, None ), ) ), #--Aula-------------------------------------------------------------------------- # id, nom vista seg label ('aula', 'Aula', 'blanc__blanc__blanc', pr, teExpulsionsSenseTramitar or hiHaUnaQualitativaOberta , ( ("Presencia", 'aula__horari__horari', pr, None, None ), #("Alumnes", 'aula__alumnes__alumnes_i_assignatures', pr, None, None ), ("Alumnes", 'aula__alumnes__blanc', pr, None, ( ("Els meus alumnes", 'aula__alumnes__alumnes_i_assignatures', pr, None), ), ), ("Incidències", 'aula__incidencies__blanc', pr, ( u'!', 'info' ) if teExpulsionsSenseTramitar else None, ( ("Incidències", 'aula__incidencies__les_meves_incidencies', pr, ( u'!', 'info' ) if teExpulsionsSenseTramitar else None), ("Nova Incidència (fora d'aula)", 'aula__incidencies__posa_incidencia', pr, None ), ("Recull Expulsió", 'aula__incidencies__posa_expulsio', pr, None), ), ), ("Matèries", 'aula__materies__blanc', pr, None, ( ("Llistat entre dates", 'aula__materies__assistencia_llistat_entre_dates', pr, None), ("Calculadora UF", 'aula__materies__calculadora_uf', pr, None ) ) ), ("Qualitativa", 'aula__qualitativa__les_meves_avaulacions_qualitatives', pr, ( u'!', 'info' ) if hiHaUnaQualitativaOberta else None, None ), ) ), #--Tutoria-------------------------------------------------------------------------- ('tutoria', 'Tutoria', 'tutoria__actuacions__list', tu, None, arbre_tutoria ), #--Gestió-------------------------------------------------------------------------- ('gestio', 'Gestió', 'gestio__reserva_aula__list', co or pl, None, ( ("Reserva Aula", 'gestio__reserva_aula__list', co or pl, None, None), ("Cerca Alumne", 'gestio__usuari__cerca', co or pl, None, None), ("Cerca Professor", 'gestio__professor__cerca', co or pl, None, None), ) ), #--psicopedagog-------------------------------------------------------------------------- ('psico', 'Psicopedagog', 'psico__informes_alumne__list', pg or di, None, ( ("Alumne", 'psico__informes_alumne__list', pg or di, None, None ), ("Actuacions", 'psico__actuacions__list', pg or di, None, None ), ) ), #--Coord.Pedag-------------------------------------------------------------------------- ('coordinacio_pedagogica', 'Coord.Pedag', 'coordinacio_pedagogica__qualitativa__blanc', di, None, ( ("Qualitativa", 'coordinacio_pedagogica__qualitativa__blanc', di, None, ( ("Avaluacions", 'coordinacio_pedagogica__qualitativa__avaluacions', di , None ), ("Items", 'coordinacio_pedagogica__qualitativa__items', di , None ), ("Resultats", 'coordinacio_pedagogica__qualitativa__resultats_qualitatives', di , None ), ), ), ("Seguiment Tutorial", "coordinacio_pedagogica__seguiment_tutorial__preguntes", di, None, None ), ), ), #--Coord.Alumnes-------------------------------------------------------------------------- ('coordinacio_alumnes', 'Coord.Alumnes', 'coordinacio_alumnes__ranking__list', di, None, ( ("Alertes Incid.", 'coordinacio_alumnes__ranking__list', di, None, None ), ("Alertes Assist.", 'coordinacio_alumnes__assistencia_alertes__llistat', di, None, None ), ("Cartes", 'coordinacio_alumnes__assistencia__cartes', di, None, None ), ("Sancions", 'coordinacio_alumnes__sancions__sancions', di, None, None ), ("Passa llista grup", 'coordinacio_alumnes__presencia__passa_llista_a_un_grup_tria', di, None, None ), ("Impressió Faltes i Incid.", 'coordinacio_alumnes__alumne__informe_faltes_incidencies', di, None, None ), #[email protected] ("Indicadors", 'coordinacio_alumnes__indicadors__llistat', di, None, None ), ) ), #--Coord.Profess.-------------------------------------------------------------------------- ('professorat', 'Coord.Prof', 'professorat__baixes__blanc', di, None, ( ("Feina Absència", 'professorat__baixes__blanc', di, None, ( ('Posar feina', 'professorat__baixes__complement_formulari_tria', di, None), ('Imprimir feina', 'professorat__baixes__complement_formulari_impressio_tria' ,di, None), ), ), ("Tutors", 'professorat__tutors__blanc', di, None, ( ('Tutors Grups', 'professorat__tutors__tutors_grups', di, None), ('Tutors individualitzat', 'professorat__tutors__tutors_individualitzats', di, None), ), ), ("Professors", 'professorat__professors__list', di, None, None ), ("Estat Tramitació Exp.", 'professorat__expulsions__control_tramitacio', di, None, None ), ), ), #--Administració-------------------------------------------------------------------------- ('administracio', 'Admin', 'administracio__sincronitza__blanc', di, None, ( ("Sincronitza", 'administracio__sincronitza__blanc', di, None, ( ("Alumnes ESO/BAT", 'administracio__sincronitza__esfera', di , None ), ("Alumnes Cicles", 'administracio__sincronitza__saga', di, None), ("Horaris", 'administracio__sincronitza__kronowin', di , None ), ("Aules", 'gestio__aula__assignacomentari', di, None), ("Reprograma", 'administracio__sincronitza__regenerar_horaris', di , None ), ), ), ("Reset Passwd", 'administracio__professorat__reset_passwd', di, None, None ), ("Càrrega Inicial", 'administracio__configuracio__carrega_inicial', di, None, None ), ("Promocions", 'administracio__promocions__llista', di, None, None), # ("Nou Alumne", 'administracio__alumnes__noualumne', di, None, None), # Aquesta pantalla encara no té implementada la seva funcionalitat. # Queda pendent acabar-la, o eliminar-la de l'aplicació. ) ), #--relacio_families-------------------------------------------------------------------------- ('relacio_families', u'Famílies', 'relacio_families__informe__el_meu_informe', al, None, ( ("Informe", 'relacio_families__informe__el_meu_informe', al, None, None ), ("Paràmetres", 'relacio_families__configuracio__canvi_parametres', al, None, None ), ) ), ) arbre2 = ( #--Varis-------------------------------------------------------------------------- ('varis', 'Ajuda i Avisos', 'varis__about__about' if al else 'varis__elmur__veure', tots, nMissatges > 0, ( ("Notificacions", 'varis__elmur__veure', di or pr or pl or co or pg , ( nMissatgesDelta, 'info' if nMissatgesDelta < 10 else 'danger' ) if nMissatgesDelta >0 else None, None ), ("Missatge a professorat o PAS", 'varis__prof_i_pas__envia_professors_i_pas', pr or pl or co, None, None ), ("Avisos de Seguretat", 'varis__avisos__envia_avis_administradors', tots, None, None ), ("About", 'varis__about__about', tots, None, None ), ) ), ) arbreSortides = () if hasattr(settings, 'CUSTOM_MODUL_SORTIDES_ACTIU' ) and settings.CUSTOM_MODUL_SORTIDES_ACTIU and ( di or pr ): filtre = [] socEquipDirectiu = User.objects.filter( pk=user.pk, groups__name = 'direcció').exists() socCoordinador = User.objects.filter( pk=user.pk, groups__name__in = [ 'sortides'] ).exists() #si sóc equip directiu només les que tinguin estat 'R' (Revisada pel coordinador) if socEquipDirectiu: filtre.append('R') #si sóc coordinador de sortides només les que tinguin estat 'P' (Proposada) if socCoordinador: filtre.append('P') n_avis_sortides = ( Sortida .objects .exclude( estat = 'E' ) .filter( estat__in = filtre ) .distinct() .count() ) n_avis_sortides_meves = ( Sortida .objects .filter( estat = 'E' ) .filter( professor_que_proposa__pk = user.pk ) .distinct( ) .count() ) arbreSortides = ( #--Varis-------------------------------------------------------------------------- ('sortides', 'Activitats', 'sortides__meves__list', di or pr, n_avis_sortides + n_avis_sortides_meves> 0, ( (u"Històric", 'sortides__all__list', di or so, None, None ), (u"Gestió d'activitats", 'sortides__gestio__list', di or so, ( n_avis_sortides ,'info', ) if n_avis_sortides > 0 else None, None ), (u"Les meves propostes d'activitats", 'sortides__meves__list', pr, ( n_avis_sortides_meves ,'info', ) if n_avis_sortides_meves > 0 else None, None ), ) ), ) arbre = arbre1 + arbreSortides + arbre2 for item_id, item_label, item_url, item_condicio, alerta , subitems in arbre: if not item_condicio: continue actiu = ( menu_id == item_id ) item = classebuida() item.label = item_label item.url = reverse( item_url ) item.active = 'active' if actiu else '' item.alerta = alerta menu['items'].append( item ) if actiu: for subitem_label, subitem_url, subitem__condicio, medalla, subsubitems in subitems: if not subitem__condicio: continue actiu = ( submenu_id == subitem_url.split('__')[1] ) subitem = classebuida() subitem.label = safe( subitem_label ) subitem.url = reverse( subitem_url ) subitem.active = 'active' if actiu else '' if medalla: omedalla = classebuida() omedalla.valor = medalla[0] omedalla.tipus = medalla[1] subitem.medalla = omedalla menu['subitems'].append(subitem) subitem.subsubitems = [] if subsubitems: for subitem_label, subitem_url, subitem_condicio, subitem_medalla in subsubitems: subsubitem = classebuida() subsubitem.label = safe( subitem_label ) subsubitem.url = reverse( subitem_url ) if subitem_medalla: omedalla = classebuida() omedalla.valor = subitem_medalla[0] omedalla.tipus = subitem_medalla[1] subsubitem.medalla = omedalla subitem.subsubitems.append(subsubitem) if actiu and subsubmenu_id == 'blanc': menu['subsubitems'] = subitem.subsubitems return menu
def lesMevesAvaluacionsQualitatives(request): (user, l4) = tools.getImpersonateUser(request) professor = User2Professor(user) report = [] for qualitativa in AvaluacioQualitativa.objects.all(): taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = "" taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 40 capcelera.contingut = u'{0}'.format(unicode(qualitativa)) taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 60 obertaLaQualitativa = qualitativa.data_obrir_avaluacio <= date.today( ) <= qualitativa.data_tancar_avaluacio estat = '(Oberta)' if obertaLaQualitativa else '(Tancada)' capcelera.contingut = u'del {0} al {1} {2}'.format( qualitativa.data_obrir_avaluacio, qualitativa.data_tancar_avaluacio, estat) taula.capceleres.append(capcelera) taula.fileres = [] #Només pels que tenen items o respostes #teFrases = Q( horari__grup__curs__nivell__itemqualitativa__isnull = False ) #teRespostes = Q( respostaavaluacioqualitativa__isnull = False ) assignatura_grup = set() for ca in Impartir.objects.filter( horari__professor=professor, dia_impartir__gte=qualitativa.data_obrir_avaluacio, dia_impartir__lte=qualitativa.data_tancar_avaluacio): if ca.horari.grup is not None: assignatura_grup.add((ca.horari.assignatura, ca.horari.grup)) for ( assignatura, grup, ) in assignatura_grup: if qualitativa in grup.avaluacioqualitativa_set.all(): teFrases = grup.curs.nivell.itemqualitativa_set.exists() aquestaQualitativa = Q( qualitativa = qualitativa ) and \ Q( professor = professor ) and \ Q( alumne__grup = grup ) and \ Q( assignatura = assignatura) teResostes = RespostaAvaluacioQualitativa.objects.filter( aquestaQualitativa).exists() if teFrases or teResostes: filera = [] camp = tools.classebuida() camp.contingut = u'{0} - {1}'.format( unicode(assignatura), unicode(grup)) filera.append(camp) q_mateix_grup = Q( controlassistencia__impartir__horari__grup=grup) q_mateixa_assignatura = Q( controlassistencia__impartir__horari__assignatura= assignatura) q_mateix_professor = Q( controlassistencia__impartir__horari__professor= professor) q_liPassemLlistaDesDe = Q( controlassistencia__impartir__dia_impartir__gte=( qualitativa.data_obrir_avaluacio - timedelta(days=7))) q_liPassemLlistaFinsA = Q( controlassistencia__impartir__dia_impartir__lte= qualitativa.data_tancar_avaluacio) q_alumnes_a_avaluar = q_mateix_grup & q_mateixa_assignatura & q_mateix_professor & q_liPassemLlistaDesDe & q_liPassemLlistaFinsA q_te_respostes = Q( respostaavaluacioqualitativa__isnull=False) q_mateixa_qualitativa = Q( respostaavaluacioqualitativa__qualitativa=qualitativa) q_mateix_professor_qualitativa = Q( respostaavaluacioqualitativa__professor=professor) q_mateixa_assiganatura_qualitativa = Q( respostaavaluacioqualitativa__assignatura=assignatura) q_alumnes_avaluats = q_alumnes_a_avaluar & q_te_respostes & q_mateixa_qualitativa & q_mateix_professor_qualitativa & q_mateixa_assiganatura_qualitativa camp = tools.classebuida() nTotalAlumnes = Alumne.objects.filter( q_alumnes_a_avaluar).distinct().count() nAlumnesAvaluats = Alumne.objects.filter( q_alumnes_avaluats).distinct().count( ) if nTotalAlumnes > 0 else 0 camp.contingut = u'{0}'.format(u'{0} / {1}'.format( nAlumnesAvaluats, nTotalAlumnes)) if nTotalAlumnes > 0: camp.enllac = '/avaluacioQualitativa/entraQualitativa/{0}/{1}/{2}'.format( qualitativa.pk, assignatura.pk, grup.pk) filera.append(camp) taula.fileres.append(filera) report.append(taula) return render( request, 'report.html', { 'report': report, 'head': u'Avaluacions Qualitatives', }, )
def reportQualitativa2(qualitativa, alumnes=[], grups=[], request=None): import locale locale.setlocale(locale.LC_TIME, 'ca_ES.utf8') reports = [] for nivell in Nivell.objects.all(): for curs in nivell.curs_set.all(): for grup in curs.grup_set.all(): q_teRespostes = Q(respostaavaluacioqualitativa__isnull=False) q_alumneTriat = Q(pk__in=[a.pk for a in alumnes]) q_grupTriat = Q(grup__in=grups) q_filtre_alumn = q_teRespostes & (q_alumneTriat | q_grupTriat) for alumne in grup.alumne_set.filter( q_filtre_alumn).distinct(): report = [] taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = "" taula.classe = 'titol' taula.capceleres = [] taula.printIfEmpty = True capcelera = tools.classebuida() capcelera.amplade = 100 capcelera.contingut = u'''Butlletí de qualificacions de l'avaluació qualitativa.'''.upper( ) taula.capceleres.append(capcelera) taula.fileres = [] filera = [] camp = tools.classebuida() camp.contingut = u'Benvolguts tutors/res' filera.append(camp) taula.fileres.append(filera) filera = [] camp = tools.classebuida() camp.contingut = u'''L’equip de professors de l’alumne/a {0} que cursa {1} us fem arribar un full de seguiment de començament de curs. En aquest butlletí us notifiquem algunes observacions que ens semblen significatives en aquest inici del curs. Esperem que us sigui d’utilitat per prendre les decisions correctes pel normal desenvolupament del curs.'''.format(alumne, alumne.grup) filera.append(camp) taula.fileres.append(filera) report.append(taula) taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = "" taula.capceleres = [] taula.classe = 'pijama' capcelera = tools.classebuida() capcelera.amplade = 25 capcelera.contingut = u'''Matèria''' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 75 capcelera.contingut = u'''Comentaris''' taula.capceleres.append(capcelera) taula.fileres = [] for assignatura in Assignatura.objects.filter( respostaavaluacioqualitativa__qualitativa= qualitativa, respostaavaluacioqualitativa__alumne=alumne ).distinct(): esPrimeraResposta = True for resposta in RespostaAvaluacioQualitativa.objects.filter( alumne=alumne, assignatura=assignatura): filera = [] camp = tools.classebuida() camp.contingut = u'{0}'.format( assignatura. nom_assignatura if esPrimeraResposta else '') filera.append(camp) camp = tools.classebuida() camp.contingut = u'{0}'.format(resposta.item) filera.append(camp) taula.fileres.append(filera) esPrimeraResposta = False #endfor resposta #endfor assignatura report.append( taula ) #------------------------------------------------------------------------------ taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = "" taula.classe = 'pijama' taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 80 capcelera.contingut = u'''Comentari del tutor/a''' taula.capceleres.append(capcelera) taula.fileres = [] filera = [] camp = tools.classebuida() camp.contingut = u'' filera.append(camp) taula.fileres.append(filera) filera = [] camp = tools.classebuida() camp.contingut = u'_____________________________________________________________________________________' filera.append(camp) taula.fileres.append(filera) taula.fileres.append(filera) taula.fileres.append(filera) report.append( taula ) #------------------------------------------------------------------------------ taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = "" taula.classe = 'pijama' taula.capceleres = [] taula.fileres = [] filera = [] camp = tools.classebuida() camp.contingut = u'Atentament,' filera.append(camp) taula.fileres.append(filera) filera = [] camp = tools.classebuida() camp.contingut = u'{0}'.format(u','.join([ u'Sr(a) ' + unicode(t.professor) for t in alumne.tutorsDeLAlumne() ])) filera.append(camp) taula.fileres.append(filera) filera = [] camp = tools.classebuida() camp.contingut = u'Figueres, a {0}'.format( qualitativa.data_tancar_avaluacio.strftime( '%d de %B de %Y')) filera.append(camp) taula.fileres.append(filera) filera = [] camp = tools.classebuida() camp.contingut = u'''................................................................................ .......................................................................................''' filera.append(camp) taula.fileres.append(filera) report.append( taula ) #------------------------------------------------------------------------------ taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = "" taula.classe = 'pijama' taula.capceleres = [] taula.fileres = [] filera = [] camp = tools.classebuida() camp.contingut = u'''El/la Sr/a ______________________________________ com a pare / mare / tutor/a de l'alumne {0} de {1}, he rebut el butlletí de qualificacions de l'avaluació qualitativa.'''.format( alumne, alumne.grup) filera.append(camp) taula.fileres.append(filera) filera = [] camp = tools.classebuida() camp.contingut = u'Signat:' filera.append(camp) taula.fileres.append(filera) filera = [] camp = tools.classebuida() camp.contingut = u'DNI núm:' filera.append(camp) taula.fileres.append(filera) filera = [] camp = tools.classebuida() camp.contingut = u'' filera.append(camp) taula.fileres.append(filera) taula.fileres.append(filera) filera = [] camp = tools.classebuida() camp.contingut = u'_________________, ____ de _______________ de {0}'.format( qualitativa.data_tancar_avaluacio.year) filera.append(camp) taula.fileres.append(filera) report.append( taula ) #------------------------------------------------------------------------------ if report: reports.append(report) #endfor alumne formatPDF = True if formatPDF: return write_pdf('pdfReport.html', { 'pagesize': 'A4', 'reports': reports, }) else: return render( request, 'report.html', { 'report': report, 'head': u'Avaluacions Qualitatives', }, )
def elMeuInforme( request, pk = None ): """Dades que veurà l'alumne""" detall = 'all' credentials = tools.getImpersonateUser(request) (user, l4 ) = credentials nTaula = 0 tePermis = True semiImpersonat = False if pk: professor = User2Professor( user ) alumne = Alumne.objects.get( pk = pk ) tePermis = professor in alumne.tutorsDeLAlumne() semiImpersonat = True else: alumne = Alumne.objects.get( user_associat = user ) if not alumne or not tePermis: raise Http404 head = u'{0} ({1})'.format(alumne , unicode( alumne.grup ) ) ara = datetime.now() report = [] #----Assistencia -------------------------------------------------------------------- if detall in ['all', 'assistencia']: controls = alumne.controlassistencia_set.exclude( estat__codi_estat = 'P' ).filter( estat__isnull=False ) controlsNous = controls.filter( relacio_familia_revisada__isnull = True ) taula = tools.classebuida() taula.codi = nTaula; nTaula+=1 taula.tabTitle = 'Faltes i retards {0}'.format( pintaNoves( controlsNous.count() ) ) taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] taula.fileres = [] capcelera = tools.classebuida() capcelera.amplade = 200 capcelera.contingut = u'Dia' capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 400 capcelera.contingut = u'Falta, assignatura i franja horària.' taula.capceleres.append(capcelera) for control in controls.order_by( '-impartir__dia_impartir' , '-impartir__horari__hora'): filera = [] #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = unicode(control.impartir.dia_impartir.strftime( '%d/%m/%Y' )) camp.negreta = False if control.relacio_familia_revisada else True filera.append(camp) #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = u'{0} a {1} ({2})'.format( control.estat, control.impartir.horari.assignatura, control.impartir.horari.hora ) camp.negreta = False if control.relacio_familia_revisada else True filera.append(camp) #-- taula.fileres.append( filera ) report.append(taula) if not semiImpersonat: controlsNous = controls.update( relacio_familia_notificada = ara, relacio_familia_revisada = ara ) #----observacions -------------------------------------------------------------------- #tipusIncidencia observacions = alumne.incidencia_set.filter( tipus__es_informativa = True) observacionsNoves = observacions.filter( relacio_familia_revisada__isnull = True) taula = tools.classebuida() taula.codi = nTaula; nTaula+=1 taula.tabTitle = 'Observacions {0}'.format( pintaNoves( observacionsNoves.count() ) ) taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 200 capcelera.contingut = u'Dia' capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 400 capcelera.contingut = u'Professor i observació.' taula.capceleres.append(capcelera) taula.fileres = [] for incidencia in observacions.order_by( '-dia_incidencia', '-franja_incidencia' ): filera = [] #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = u'{0}'.format( incidencia.dia_incidencia.strftime( '%d/%m/%Y' )) camp.negreta = False if incidencia.relacio_familia_notificada else True filera.append(camp) #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.negreta = False if incidencia.relacio_familia_revisada else True camp.contingut = u'Sr(a): {0} - {1}'.format(incidencia.professional , incidencia.descripcio_incidencia ) camp.negreta = False if incidencia.relacio_familia_revisada else True filera.append(camp) #-- taula.fileres.append( filera ) report.append(taula) if not semiImpersonat: observacionsNoves = observacions.update( relacio_familia_notificada = ara, relacio_familia_revisada = ara) #----incidències -------------------------------------------------------------------- #tipusIncidencia incidencies = alumne.incidencia_set.filter( tipus__es_informativa = False ) incidenciesNoves = incidencies.filter( relacio_familia_revisada__isnull = True ) taula = tools.classebuida() taula.codi = nTaula; nTaula+=1 taula.tabTitle = 'Incidències {0}'.format( pintaNoves( incidenciesNoves.count() ) ) taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 200 capcelera.contingut = u'Dia i estat' capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 400 capcelera.contingut = u'Professor i Incidència' taula.capceleres.append(capcelera) taula.fileres = [] for incidencia in incidencies.order_by( '-dia_incidencia', '-franja_incidencia' ): filera = [] #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = u'{0} {1}'.format( incidencia.dia_incidencia.strftime( '%d/%m/%Y' ), 'Vigent' if incidencia.es_vigent else '') camp.negreta = False if incidencia.relacio_familia_revisada else True filera.append(camp) #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = u'Sr(a): {0} - {1}'.format(incidencia.professional , incidencia.descripcio_incidencia ) camp.negreta = False if incidencia.relacio_familia_revisada else True filera.append(camp) #-- taula.fileres.append( filera ) report.append(taula) if not semiImpersonat: incidenciesNoves.update( relacio_familia_notificada = ara, relacio_familia_revisada = ara ) #----Expulsions -------------------------------------------------------------------- expulsions = alumne.expulsio_set.exclude( estat = 'ES' ) expulsionsNoves = expulsions.filter( relacio_familia_revisada__isnull = True ) taula = tools.classebuida() taula.codi = nTaula; nTaula+=1 taula.tabTitle = 'Expulsions {0}'.format( pintaNoves( expulsionsNoves.count() ) ) taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 200 capcelera.contingut = u'Dia' capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 40 capcelera.contingut = u'Data comunicació' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 400 capcelera.contingut = u'Professor i motiu' taula.capceleres.append(capcelera) taula.fileres = [] for expulsio in expulsions.order_by( '-dia_expulsio', '-franja_expulsio' ): filera = [] #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = u'{0} {1}'.format( expulsio.dia_expulsio.strftime( '%d/%m/%Y' ), u'''(per acumulació d'incidències)''' if expulsio.es_expulsio_per_acumulacio_incidencies else '') camp.negreta = False if expulsio.relacio_familia_revisada else True filera.append(camp) #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = u'{0}'.format( expulsio.moment_comunicacio_a_tutors.strftime( '%d/%m/%Y' ) if expulsio.moment_comunicacio_a_tutors else u'Pendent de comunicar.') camp.negreta = False if expulsio.relacio_familia_revisada else True filera.append(camp) #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = u'Sr(a): {0} - {1}'.format( expulsio.professor , expulsio.motiu if expulsio.motiu else u'Pendent redactar motiu.') camp.negreta = False if expulsio.relacio_familia_revisada else True filera.append(camp) #-- taula.fileres.append( filera ) report.append(taula) if not semiImpersonat: expulsionsNoves.update( relacio_familia_notificada = ara , relacio_familia_revisada = ara) #----Sancions ----------------------------------------------------------------------------- if detall in ['all', 'incidencies']: sancions = alumne.sancio_set.filter( impres = True ) sancionsNoves = sancions.filter( relacio_familia_revisada__isnull = True ) taula = tools.classebuida() taula.codi = nTaula; nTaula+=1 taula.tabTitle = 'Sancions {0}'.format( pintaNoves( sancionsNoves.count() ) ) taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 200 capcelera.contingut = u'Dates' capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 400 capcelera.contingut = u'Detall' taula.capceleres.append(capcelera) taula.fileres = [] for sancio in sancions.order_by( '-data_inici' ): filera = [] #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = u'{0} a {1}'.format( sancio.data_inici.strftime( '%d/%m/%Y' ) , sancio.data_fi.strftime( '%d/%m/%Y' )) camp.negreta = False if sancio.relacio_familia_revisada else True filera.append(camp) #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = u'{0} {1} {2}'.format( sancio.tipus , ' - ' if sancio.motiu else '', sancio.motiu ) camp.negreta = False if sancio.relacio_familia_revisada else True filera.append(camp) #-- taula.fileres.append( filera ) report.append(taula) if not semiImpersonat: sancionsNoves.update( relacio_familia_notificada = ara, relacio_familia_revisada = ara) #---dades alumne--------------------------------------------------------------------- if detall in ['all','dades']: taula = tools.classebuida() taula.tabTitle = 'Dades personals' taula.codi = nTaula; nTaula+=1 taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 200 capcelera.contingut = u'Dades Alumne' capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 400 capcelera.contingut = u'' taula.capceleres.append(capcelera) taula.fileres = [] #----grup------------------------------------------ filera = [] camp = tools.classebuida() camp.enllac = None camp.contingut = u'Grup' filera.append(camp) camp = tools.classebuida() camp.enllac = None camp.contingut = u'{0}'.format( alumne.grup ) filera.append(camp) taula.fileres.append( filera ) #----data neix------------------------------------------ filera = [] camp = tools.classebuida() camp.enllac = None camp.contingut = u'Data Neixement' filera.append(camp) camp = tools.classebuida() camp.enllac = None camp.contingut = u'{0}'.format( alumne.data_neixement ) filera.append(camp) taula.fileres.append( filera ) #----telefons------------------------------------------ filera = [] camp = tools.classebuida() camp.enllac = None camp.contingut = u'Telèfon' filera.append(camp) camp = tools.classebuida() camp.enllac = None camp.contingut = u'{0}'.format( alumne.telefons ) filera.append(camp) taula.fileres.append( filera ) #----Pares------------------------------------------ filera = [] camp = tools.classebuida() camp.enllac = None camp.contingut = u'Pares' filera.append(camp) camp = tools.classebuida() camp.enllac = None camp.contingut = u'{0}'.format( alumne.tutors ) filera.append(camp) taula.fileres.append( filera ) #----adreça------------------------------------------ filera = [] camp = tools.classebuida() camp.enllac = None camp.contingut = u'Adreça' filera.append(camp) camp = tools.classebuida() camp.enllac = None camp.contingut = u'{0} ({1})'.format( alumne.adreca, alumne.localitat ) filera.append(camp) taula.fileres.append( filera ) report.append(taula) return render_to_response( 'report_detall_families.html', {'report': report, 'head': u'Informació alumne {0}'.format( head ) , }, context_instance=RequestContext(request))
def totesLesCartesRpt( ): report = [] #--- Grups ---------------------------------------------------------------------------- taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 100 capcelera.contingut = u'Data' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 200 capcelera.contingut = u'Alumne' capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 100 capcelera.contingut = u'Cartes nº.' taula.capceleres.append(capcelera) taula.fileres = [] for carta in CartaAbsentisme.objects.all().order_by( '-data_carta'): filera = [] #-data-------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = date( carta.data_carta , 'j N Y') filera.append(camp) #-alumne-------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = carta.alumne filera.append(camp) #-carta num-------------------------------------------- camp = tools.classebuida() camp.enllac = r'/tutoria/imprimirCartaNoFlag/{0}'.format( carta.pk ) camp.contingut = '{0}'.format( carta.carta_numero) filera.append(camp) #-- taula.fileres.append( filera ) report.append(taula) return report
def elsMeusAlumnesTutoratsRpt(professor=None, grup=None, dataDesDe=None, dataFinsA=date.today()): report = [] if professor: grups = [t.grup for t in Tutor.objects.filter(professor=professor)] grups.append('Altres') else: grup = get_object_or_404(Grup, pk=grup) grups = [grup] for grup in grups: taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 30 capcelera.contingut = grup if grup == u'Altres' else u'{0} ({1})'.format( grup, grup.curs) capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 15 capcelera.contingut = u'Faltes.' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 10 capcelera.contingut = u'Disciplina' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 5 capcelera.contingut = u'Actuacions' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 15 capcelera.contingut = u'Familia' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 10 capcelera.contingut = u'Seguiment' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 10 capcelera.contingut = u'Històric' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 15 capcelera.contingut = u'Qualitativa' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 5 capcelera.contingut = u'Tot' taula.capceleres.append(capcelera) taula.fileres = [] if grup == 'Altres': consulta_alumnes = Q(pk__in=[ ti.alumne.pk for ti in professor.tutorindividualitzat_set.all() ]) else: consulta_alumnes = Q(grup=grup) for alumne in Alumne.objects.filter(consulta_alumnes): filera = [] #-moment-------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = unicode(alumne) camp.enllac = "/tutoria/detallTutoriaAlumne/{0}/dades".format( alumne.pk) filera.append(camp) q_hores = Q(impartir__dia_impartir__lte=dataFinsA) if dataDesDe: q_hores &= Q(impartir__dia_impartir__gte=dataDesDe) controls = alumne.controlassistencia_set.filter(q_hores) #-faltes-------------------------------------------- f = controls.filter(alumne=alumne, estat__codi_estat='F').distinct().count() r = controls.filter(alumne=alumne, estat__codi_estat='R').distinct().count() p = controls.filter(alumne=alumne, estat__codi_estat='P').distinct().count() j = controls.filter(alumne=alumne, estat__codi_estat='J').distinct().count() #ca = controls.filter(q_hores).filter(estat__codi_estat__isnull = False).filter( alumne = alumne ).distinct().count() #-%-------------------------------------------- tpc_injust = (1.0 * f) * 100.0 / (0.0 + f + r + p + j) if f > 0 else 0 tpc_assist = (0.0 + p + r) * 100.0 / (0.0 + f + r + p + j) if f > 0 else 0 camp = tools.classebuida() camp.enllac = None accio_list = [ (u'f: {0}'.format(f), "/tutoria/detallTutoriaAlumne/{0}/assistencia".format( alumne.pk) if f else None), (u'j: {0}'.format(j), "/tutoria/detallTutoriaAlumne/{0}/assistencia".format( alumne.pk) if j else None), (u'r: {0}'.format(r), "/tutoria/detallTutoriaAlumne/{0}/assistencia".format( alumne.pk) if r else None), (u'p: {0}'.format(p), None), (u'{0:.2f}%Injust'.format(tpc_injust), "/tutoria/detallTutoriaAlumne/{0}/assistencia".format( alumne.pk) if f or j or r else None), (u'{0:.2f}%Assist'.format(tpc_assist), "/tutoria/detallTutoriaAlumne/{0}/assistencia".format( alumne.pk) if tpc_assist else None), ] camp.multipleContingut = accio_list filera.append(camp) #-disciplina-------------------------------------------- nIncidencies = alumne.incidencia_set.filter( tipus__es_informativa=False).count() nIncidenciesInform = alumne.incidencia_set.filter( tipus__es_informativa=True).count() nExpulsions = alumne.expulsio_set.exclude(estat='ES').exclude( es_expulsio_per_acumulacio_incidencies=True).count() nExpulsionsAcu = alumne.expulsio_set.exclude(estat='ES').filter( es_expulsio_per_acumulacio_incidencies=True).count() camp = tools.classebuida() camp.enllac = "/tutoria/detallTutoriaAlumne/{0}/incidencies".format( alumne.pk) if (nExpulsions + nExpulsionsAcu + nIncidencies + nIncidenciesInform) > 0 else '' camp.multipleContingut = [ (u'''Exp:{0}(+{1}acu)'''.format(nExpulsions, nExpulsionsAcu), None), (u'Inc:{0}'.format(nIncidencies), None), (u'Obs:{0}'.format(nIncidenciesInform), None), ] filera.append(camp) #-Actuacions-------------------------------------------- nActuacions = alumne.actuacio_set.all().count() camp = tools.classebuida() camp.enllac = "/tutoria/detallTutoriaAlumne/{0}/actuacions".format( alumne.pk) if nActuacions > 0 else '' camp.contingut = u'Act:{0}'.format(nActuacions) filera.append(camp) #-Familia-------------------------------------------- nConnexions = 0 try: nConnexions = alumne.user_associat.LoginUsuari.filter( exitos=True).count() except: pass camp = tools.classebuida() camp.enllac = "/tutoria/detallTutoriaAlumne/{0}/families".format( alumne.pk) if nConnexions > 0 else '' camp.contingut = u'Actiu:{0} Connexions:{1}'.format( u'Sí' if alumne.esta_relacio_familia_actiu() else u'No', nConnexions) filera.append(camp) #-Seguiment-------------------------------------------- camp = tools.classebuida() anys_seguiment_tutorial = [] try: anys_seguiment_tutorial = SeguimentTutorialRespostes.objects.filter( seguiment_tutorial__alumne=alumne).values_list( 'any_curs_academic', flat=True).distinct() except: pass if anys_seguiment_tutorial: camp.enllac = "/tutoria/detallTutoriaAlumne/{0}/seguiment".format( alumne.pk) camp.contingut = u'{0}'.format(u', '.join( [unicode(x) for x in anys_seguiment_tutorial])) filera.append(camp) #-Històric-------------------------------------------- camp = tools.classebuida() anys_seguiment_tutorial = [] try: anys_historic = ResumAnualAlumne.objects.filter( seguiment_tutorial__alumne=alumne).values_list( 'curs_any_inici', flat=True).distinct() except: pass if anys_historic: camp.enllac = "/tutoria/detallTutoriaAlumne/{0}/historic".format( alumne.pk) camp.contingut = u'{0}'.format(u', '.join( [unicode(x) for x in anys_historic])) filera.append(camp) #-Qualitativa--------------- camp = tools.classebuida() teDadesDeQualitativa = alumne.respostaavaluacioqualitativa_set.count( ) > 0 if teDadesDeQualitativa: camp.enllac = "/tutoria/detallTutoriaAlumne/{0}/qualitativa".format( alumne.pk) camp.contingut = u'2010' llistaDates = [ r.qualitativa.data_tancar_avaluacio.strftime('%d/%m/%Y') for r in alumne.respostaavaluacioqualitativa_set.all() ] camp.contingut = u','.join(list(set(llistaDates))) filera.append(camp) #-All--------------- camp = tools.classebuida() camp.enllac = "/tutoria/detallTutoriaAlumne/{0}/all".format( alumne.pk) camp.contingut = u'Informe' filera.append(camp) #-- taula.fileres.append(filera) report.append(taula) return report
def faltesAssistenciaEntreDatesProfessorRpt( professor, grup , assignatures , dataDesDe , horaDesDe , dataFinsA , horaFinsA ): q_grup = Q(impartir__horari__grup = grup) q_assignatures = Q(impartir__horari__assignatura__in = assignatures) q_professor = Q(impartir__horari__professor = professor) q_primer_dia = Q(impartir__dia_impartir = dataDesDe ) & Q(impartir__horari__hora__hora_inici__gte = horaDesDe.hora_inici) q_mig = Q(impartir__dia_impartir__gt = dataDesDe ) & Q(impartir__dia_impartir__lt = dataFinsA) q_darrer_dia = Q(impartir__dia_impartir = dataFinsA ) & Q(impartir__horari__hora__hora_fi__lte = horaFinsA.hora_fi) q_hores = q_primer_dia | q_mig | q_darrer_dia controls = ControlAssistencia.objects.filter( q_grup & q_assignatures & q_hores & q_professor ) alumnes = Alumne.objects.filter( controlassistencia__pk__in = controls.values_list('pk', flat=True) ).distinct() report = [] nTaula = 0 #RESUM------------------------------------------------------------------------------------------------- taula = tools.classebuida() taula.codi = nTaula; nTaula+=1 taula.tabTitle = 'Resum' taula.titol = tools.classebuida() taula.titol.contingut = u'Resum assistència de {0} de {1} entre {2} {3}h i {4} {5}h'.format( grup, ', '.join([ unicode(a) for a in assignatures ]), dataDesDe.strftime( '%d/%m/%Y' ) , horaDesDe.hora_inici.strftime( '%H:%M' ), dataFinsA.strftime( '%d/%m/%Y' ) , horaFinsA.hora_fi.strftime( '%H:%M' ) ) taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 25 capcelera.contingut = u'Alumne' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 18 capcelera.contingut = u'hores absent no justificat' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 12 capcelera.contingut = u'hores docència' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 5 capcelera.contingut = u'%assist.' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 10 capcelera.contingut = u'hores present' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade =15 capcelera.contingut = u'hores absènc. justif.' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 10 capcelera.contingut = u'hores retard' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 5 capcelera.contingut = u'%injustif.' taula.capceleres.append( capcelera ) taula.fileres = [] for alumne in alumnes: filera = [] #-nom-------------------------------------------- camp = tools.classebuida() camp.enllac = '' camp.contingut = unicode(alumne) + ' (' + unicode(alumne.grup) + ')' filera.append(camp) #-faltes-------------------------------------------- f = controls.filter( alumne = alumne, estat__codi_estat = 'F' ).distinct().count() j = controls.filter( alumne = alumne, estat__codi_estat = 'J' ).distinct().count() camp = tools.classebuida() camp.contingut = unicode(f) filera.append(camp) #-controls-------------------------------------------- # calcula el 'total' de dies per alumne if settings.CUSTOM_NO_CONTROL_ES_PRESENCIA: # té en compte tots els dies encara que no s'hagi passat llista ca = controls.filter( alumne = alumne).distinct().count() else: ca = controls.filter( alumne = alumne, estat__codi_estat__isnull = False ).distinct().count() camp = tools.classebuida() camp.contingut = unicode(ca) filera.append(camp) #-% assistència -------------------------------------------- tpc = 1.0 - (1.0*( f + j ) ) / (1.0*ca) if ca != 0 else 'N/A' camp = tools.classebuida() camp.contingut =u'{0:.2f}%'.format(tpc * 100) if isinstance( tpc, float ) else 'N/A' filera.append(camp) #-present-------------------------------------------- if settings.CUSTOM_NO_CONTROL_ES_PRESENCIA: # té en compte tots els dies encara que no s'hagi passat llista p = controls.filter( alumne = alumne).filter(Q(estat__codi_estat = 'P') | Q(estat__codi_estat__isnull=True) ).distinct().count() else: p = controls.filter( alumne = alumne, estat__codi_estat = 'P' ).distinct().count() camp = tools.classebuida() camp.contingut = unicode(p) filera.append(camp) #-justif-------------------------------------------- camp = tools.classebuida() camp.contingut = unicode(j) filera.append(camp) #-retard-------------------------------------------- j = controls.filter( alumne = alumne, estat__codi_estat = 'R' ).distinct().count() camp = tools.classebuida() camp.contingut = unicode(j) filera.append(camp) #-% insjustif -------------------------------------------- tpc = (1.0 * f ) / (1.0*ca) if ca != 0 else 'N/A' camp = tools.classebuida() camp.contingut =u'{0:.2f}%'.format(tpc * 100) if isinstance( tpc, float ) else 'N/A' filera.append(camp) taula.fileres.append( filera ) report.append(taula) #DETALL------------------------------------------------------------------------------------------------- taula = tools.classebuida() taula.codi = nTaula; nTaula+=1 taula.tabTitle = 'Detall' taula.titol = tools.classebuida() taula.titol.contingut = u'Detall assistència de {0} de {1} entre {2} {3}h i {4} {5}h'.format( grup, ', '.join([ unicode(a) for a in assignatures ]), dataDesDe.strftime( '%d/%m/%Y' ) , horaDesDe.hora_inici.strftime( '%H:%M' ), dataFinsA.strftime( '%d/%m/%Y' ) , horaFinsA.hora_fi.strftime( '%H:%M' ) ) taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 40 capcelera.contingut = u'Alumne' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 30 capcelera.contingut = u'hores absent no justificat' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 30 capcelera.contingut = u'hores absènc. justif.' taula.capceleres.append( capcelera ) taula.fileres = [] for alumne in alumnes: filera = [] #-nom-------------------------------------------- camp = tools.classebuida() camp.enllac = '' camp.contingut = unicode(alumne) + ' (' + unicode(alumne.grup) + ')' filera.append(camp) #-faltes-------------------------------------------- f = controls.filter( alumne = alumne, estat__codi_estat = 'F' ).distinct().select_related('impartir','impartir__horari__hora', 'impartir__horari__assignatura') camp = tools.classebuida() camp.contingut = unicode( u' | '.join( [ u'{0} {1} {2}'.format(x.impartir.dia_impartir.strftime( '%d/%m/%Y' ) , x.impartir.horari.hora, x.impartir.horari.assignatura) for x in f ] ) ) filera.append(camp) #-justif-------------------------------------------- j = controls.filter( alumne = alumne, estat__codi_estat = 'J' ).distinct() camp = tools.classebuida() contingut = [ u'{0} {1} {2}'.format(x.impartir.dia_impartir.strftime( '%d/%m/%Y' ) , x.impartir.horari.hora, x.impartir.horari.assignatura) for x in j ] camp.multipleContingut = [ ( c, None,) for c in contingut ] filera.append(camp) taula.fileres.append( filera ) report.append(taula) return report
def reportQualitativa2( qualitativa , alumnes = [], grups = [], request = None): import locale locale.setlocale(locale.LC_TIME, 'ca_ES.utf8') reports = [] for nivell in Nivell.objects.all(): for curs in nivell.curs_set.all(): for grup in curs.grup_set.all(): q_teRespostes = Q(respostaavaluacioqualitativa__isnull = False) q_alumneTriat = Q(pk__in = [a.pk for a in alumnes ]) q_grupTriat = Q( grup__in = grups ) q_filtre_alumn = q_teRespostes & ( q_alumneTriat | q_grupTriat ) for alumne in grup.alumne_set.filter( q_filtre_alumn ).distinct(): report = [] taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = "" taula.classe = 'titol' taula.capceleres = [] taula.printIfEmpty = True capcelera = tools.classebuida() capcelera.amplade = 900 capcelera.contingut = u'''Butlletí de qualificacions de l'avaluació qualitativa.'''.upper() taula.capceleres.append(capcelera) taula.fileres = [] filera = [] camp = tools.classebuida() camp.contingut = u'Benvolguts tutors/res' filera.append(camp) taula.fileres.append(filera) filera = [] camp = tools.classebuida() camp.contingut = u'''L’equip de professors de l’alumne/a {0} que cursa {1} us fem arribar un full de seguiment de començament de curs. En aquest butlletí us notifiquem algunes observacions que ens semblen significatives en aquest inici del curs. Esperem que us sigui d’utilitat per prendre les decisions correctes pel normal desenvolupament del curs.'''.format( alumne, alumne.grup ) filera.append(camp) taula.fileres.append(filera) report.append(taula) taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = "" taula.capceleres = [] taula.classe = 'pijama' capcelera = tools.classebuida() capcelera.amplade = 300 capcelera.contingut = u'''Matèria''' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 700 capcelera.contingut = u'''Comentaris''' taula.capceleres.append(capcelera) taula.fileres = [] for assignatura in Assignatura.objects.filter( respostaavaluacioqualitativa__qualitativa = qualitativa, respostaavaluacioqualitativa__alumne = alumne ).distinct(): esPrimeraResposta = True for resposta in RespostaAvaluacioQualitativa.objects.filter( alumne = alumne, assignatura = assignatura ): filera = [] camp = tools.classebuida() camp.contingut = u'{0}'.format( assignatura.nom_assignatura if esPrimeraResposta else '' ) filera.append(camp) camp = tools.classebuida() camp.contingut = u'{0}'.format( resposta.item ) filera.append(camp) taula.fileres.append( filera ) esPrimeraResposta = False #endfor resposta #endfor assignatura report.append(taula) #------------------------------------------------------------------------------ taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = "" taula.classe = 'pijama' taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 700 capcelera.contingut = u'''Comentari del tutor/a''' taula.capceleres.append(capcelera) taula.fileres = [] filera = [] camp = tools.classebuida() camp.contingut = u'' filera.append(camp) taula.fileres.append(filera) filera = [] camp = tools.classebuida() camp.contingut = u'_____________________________________________________________________________________' filera.append(camp) taula.fileres.append(filera) taula.fileres.append(filera) taula.fileres.append(filera) report.append(taula) #------------------------------------------------------------------------------ taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = "" taula.classe = 'pijama' taula.capceleres = [] taula.fileres = [] filera = [] camp = tools.classebuida() camp.contingut = u'Atentament,' filera.append(camp) taula.fileres.append(filera) filera = [] camp = tools.classebuida() camp.contingut = u'{0}'.format( u','.join( [u'Sr(a) ' + unicode(t.professor) for t in alumne.tutorsDeLAlumne() ] ) ) filera.append(camp) taula.fileres.append(filera) filera = [] camp = tools.classebuida() camp.contingut = u'Figueres, a {0}'.format( qualitativa.data_tancar_avaluacio.strftime( '%d de %B de %Y' ) ) filera.append(camp) taula.fileres.append(filera) filera = [] camp = tools.classebuida() camp.contingut = u'''................................................................................ .......................................................................................''' filera.append(camp) taula.fileres.append(filera) report.append(taula) #------------------------------------------------------------------------------ taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = "" taula.classe = 'pijama' taula.capceleres = [] taula.fileres = [] filera = [] camp = tools.classebuida() camp.contingut = u'''El/la Sr/a ______________________________________ com a pare / mare / tutor/a de l'alumne {0} de {1}, he rebut el butlletí de qualificacions de l'avaluació qualitativa.'''.format( alumne, alumne.grup ) filera.append(camp) taula.fileres.append(filera) filera = [] camp = tools.classebuida() camp.contingut = u'Signat:' filera.append(camp) taula.fileres.append(filera) filera = [] camp = tools.classebuida() camp.contingut = u'DNI núm:' filera.append(camp) taula.fileres.append(filera) filera = [] camp = tools.classebuida() camp.contingut = u'' filera.append(camp) taula.fileres.append(filera) taula.fileres.append(filera) filera = [] camp = tools.classebuida() camp.contingut = u'_________________, ____ de _______________ de {0}'.format( qualitativa.data_tancar_avaluacio.year ) filera.append(camp) taula.fileres.append(filera) report.append(taula) #------------------------------------------------------------------------------ if report: reports.append( report ) #endfor alumne formatPDF = True if formatPDF: return write_pdf('pdfReport.html',{ 'pagesize' : 'A4', 'reports' : reports, }) else: return render_to_response( 'report.html', {'report': report, 'head': u'Avaluacions Qualitatives' , }, context_instance=RequestContext(request))
def totesLesCartesRpt( ): report = [] #--- Grups ---------------------------------------------------------------------------- taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 20 capcelera.contingut = u'Data' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 60 capcelera.contingut = u'Alumne' capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 20 capcelera.contingut = u'Cartes nº.' taula.capceleres.append(capcelera) taula.fileres = [] for carta in CartaAbsentisme.objects.all().order_by( '-data_carta'): filera = [] #-data-------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = date( carta.data_carta , 'j N Y') filera.append(camp) #-alumne-------------------------------------------- camp = tools.classebuida() camp.enllac = None from aula.apps.alumnes.named_instances import curs_any_fi te_mes_de_16 = ( u", Més de 16 anys (durant el curs)" if (carta.alumne.cursa_obligatoria() and (curs_any_fi() - carta.alumne.data_neixement.year) > 16) else "" ) camp.contingut = u"{0} - {1} {2}".format( carta.alumne, carta.alumne.grup, te_mes_de_16 ) filera.append(camp) #-carta num-------------------------------------------- camp = tools.classebuida() camp.enllac = r'/tutoria/imprimirCartaNoFlag/{0}'.format( carta.pk ) camp.contingut = '{0}'.format( carta.carta_numero) filera.append(camp) #-- taula.fileres.append( filera ) report.append(taula) return report
def about(request): credentials = tools.getImpersonateUser(request) (user, _ ) = credentials professor = User2Professor( user ) report = [] taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 150 capcelera.contingut = u'Informació' capcelera.enllac = None taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 400 capcelera.contingut = u'' taula.capceleres.append(capcelera) taula.fileres = [] filera = [] #-by-------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = u'Llicència' camp.enllac = '' filera.append(camp) #-tip-------------------------------------------- licenseFile = open (settings.LICENSE_FILE, "r") tip=licenseFile.read() camp = tools.classebuida() camp.enllac = '' camp.contingut = tip filera.append(camp) taula.fileres.append( filera ) #-1-------------------------------------------- filera = [] camp = tools.classebuida() camp.enllac = None camp.contingut = u'Codi' camp.enllac = '' filera.append(camp) #-tip-------------------------------------------- tip = u'''Pots revisar aquí el codi i les actualitzacions del programa. ''' camp = tools.classebuida() camp.enllac = r'https://github.com/ctrl-alt-d/django-aula' camp.contingut = tip filera.append(camp) taula.fileres.append( filera ) report.append(taula) #--Estadistiques Professor..................... if professor: taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 150 capcelera.contingut = u'Estadístiques' capcelera.enllac = None taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 400 capcelera.contingut = u'' taula.capceleres.append(capcelera) taula.fileres = [] filera = [] camp = tools.classebuida() camp.contingut = u'Percentatge de passar llista:' filera.append(camp) camp = tools.classebuida() camp.enllac = None qProfessor = Q( horari__professor = professor ) qAvui = Q( dia_impartir = datetime.today() ) & Q( horari__hora__hora_fi__lt = datetime.now() ) qFinsAhir = Q( dia_impartir__lt = datetime.today() ) qFinsAra = qFinsAhir | qAvui qTeGrup = Q( horari__grup__isnull = False) imparticions = Impartir.objects.filter(qProfessor & qFinsAra & qTeGrup ) nImparticios = imparticions.count() nImparticionsLlistaPassada = imparticions.filter( professor_passa_llista__isnull = False ).count() pct = nImparticionsLlistaPassada * 100 / nImparticios if nImparticios > 0 else 'N/A' estadistica1 = u'{0}% ({1} classes impartides, {2} controls)'.format( pct, nImparticios, nImparticionsLlistaPassada) #---hores de classe nProfessor = Impartir.objects.filter( horari__professor = professor, horari__grup__isnull = False ).count() nTotal = Impartir.objects.filter( horari__grup__isnull = False).count() import re nProfessor = re.sub(r'(\d{3})(?=\d)', r'\1,', str(nProfessor)[::-1])[::-1] nTotal = re.sub(r'(\d{3})(?=\d)', r'\1,', str(nTotal)[::-1])[::-1] estadistica2 = u'''Aquest curs impartirem {0} hores de classe, d'aquestes, {1} les imparteixes tu.'''.format( nTotal, nProfessor ) camp.contingut = u'{0}. {1}'.format(estadistica1, estadistica2) filera.append(camp) taula.fileres.append( filera ) report.append(taula) return render_to_response( 'report.html', {'report': report, 'head': 'About' , }, context_instance=RequestContext(request))
def justificadorMKTable(request, year, month, day ): credentials = tools.getImpersonateUser(request) (user, l4) = credentials professor = User2Professor(user) data = date( year = int(year), month= int(month), day = int(day) ) grups = Grup.objects.filter( tutor__professor = professor ) q_grups_tutorats = Q( grup__in = [ t.grup for t in professor.tutor_set.all() ] ) q_alumnes_tutorats = Q( pk__in = [ti.alumne.pk for ti in professor.tutorindividualitzat_set.all() ] ) alumnes = Alumne.objects.filter( q_grups_tutorats | q_alumnes_tutorats ) #busco el dilluns i el divendres dia_de_la_setmana = data.weekday() delta = timedelta( days = (-1 * dia_de_la_setmana ) ) dilluns = data + delta #marc horari per cada dia dades = tools.classebuida() dades.alumnes = alumnes.order_by('grup', 'cognoms', 'nom' ) dades.c = [] #controls dades.dia_hores = tools.diccionari() dades.marc_horari = {} for delta in [0,1,2,3,4]: dia = dilluns + timedelta( days = delta ) q_grups = Q(grup__in = grups ) q_alumnes = Q(grup__alumne__in = alumnes ) q_impartir = Q( impartir__controlassistencia__alumne__in = alumnes ) q_dies = Q(impartir__dia_impartir = dia) #forquilla = Horari.objects.filter( ( q_grups | q_alumnes ) & q_dies forquilla = Horari.objects.filter( q_impartir & q_dies ).aggregate( desde=Min( 'hora__hora_inici' ), finsa=Max( 'hora__hora_inici' ) ) if forquilla['desde'] and forquilla['finsa']: dades.marc_horari[dia] = { 'desde':forquilla['desde'],'finsa':forquilla['finsa']} dades.dia_hores[dia] = llista() for hora in FranjaHoraria.objects.filter( hora_inici__gte = forquilla['desde'], hora_inici__lte = forquilla['finsa'] ).order_by('hora_inici'): dades.dia_hores[dia].append(hora) dades.quadre = tools.diccionari() for alumne in dades.alumnes: dades.quadre[unicode(alumne)] = [] for dia, hores in dades.dia_hores.itemsEnOrdre(): hora_inici = FranjaHoraria.objects.get( hora_inici = dades.marc_horari[dia]['desde'] ) hora_fi = FranjaHoraria.objects.get( hora_inici = dades.marc_horari[dia]['finsa'] ) q_controls = Q( impartir__dia_impartir = dia ) & \ Q( impartir__horari__hora__gte = hora_inici) & \ Q( impartir__horari__hora__lte = hora_fi) & \ Q( alumne = alumne ) controls = [ c for c in ControlAssistencia.objects.select_related( 'estat', 'impartir__horari__assignatura','professor','estat_backup','professor_backup' ).filter( q_controls ) ] for hora in hores: cella = tools.classebuida() cella.txt = '' hiHaControls = len( [ c for c in controls if c.impartir.horari.hora == hora] )>0 haPassatLlista = hiHaControls and len( [ c for c in controls if c.estat is not None and c.impartir.horari.hora == hora] )>0 cella.c = [ c for c in controls if c.impartir.horari.hora == hora] for item in cella.c: item.professor2show = item.professor or ( item.impartir.horari.professor if item.impartir.horari else ' ' ) item.estat2show= item.estat or " " dades.c.extend(cella.c) if not hiHaControls: cella.color = '#505050' else: if not haPassatLlista: cella.color = '#E0E0E0' else: cella.color = 'white' if hora == hora_inici: cella.primera_hora = True else: cella.primera_hora = False dades.quadre[unicode(alumne)].append( cella ) return dades
def gestioCartesRpt(professor, l4): report = [] dataDesDe = None dataFinsA = date.today() #--- taula de pendents d'imprimir -- taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 70 capcelera.contingut = u"Cartes pendents d'imprimir" capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 30 capcelera.contingut = u"" capcelera.enllac = "" taula.capceleres.append(capcelera) taula.fileres = [] for carta in CartaAbsentisme.objects.filter( professor = professor, impresa = False ): filera = [] #-carta-------------------------------------------- camp = tools.classebuida() camp.codi = carta.pk camp.enllac = None camp.contingut = unicode(carta) filera.append(camp) camp = tools.classebuida() camp.codi = carta.pk camp.enllac = None camp.multipleContingut = ( ( u'Imprimir', r'/tutoria/imprimirCarta/{0}'.format( carta.pk ) ), ) camp.esMenu = True filera.append(camp) taula.fileres.append( filera ) if bool(taula.fileres ): report.append(taula) #--- Grups ---------------------------------------------------------------------------- grups = [ t.grup for t in Tutor.objects.filter( professor = professor )] grups.append( 'Altres' ) for grup in grups: taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 30 capcelera.contingut = grup if grup == u'Altres' else u'{0} ({1})'.format( grup , grup.curs ) capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 10 capcelera.contingut = u'Faltes.' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 10 capcelera.contingut = u'Cartes.' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 30 capcelera.contingut = u"Faltes acumulades per a nova carta\n(Recordar 3 darrers dies no entra al còmput)." taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 20 capcelera.contingut = u'Accions' taula.capceleres.append(capcelera) taula.fileres = [] if grup == 'Altres': consulta_alumnes = Q( pk__in = [ti.alumne.pk for ti in professor.tutorindividualitzat_set.all() ] ) else: consulta_alumnes = Q( grup = grup ) for alumne in Alumne.objects.filter(consulta_alumnes ): filera = [] #-moment-------------------------------------------- camp = tools.classebuida() camp.codi = alumne.pk camp.enllac = None camp.contingut = unicode(alumne) camp.enllac = "/tutoria/detallTutoriaAlumne/{0}/dades".format( alumne.pk ) filera.append(camp) q_hores = Q(impartir__dia_impartir__lte = dataFinsA) if dataDesDe: q_hores &= Q(impartir__dia_impartir__gte = dataDesDe) controls = alumne.controlassistencia_set.filter( q_hores ) #-faltes-------------------------------------------- f = controls.filter( alumne = alumne, estat__codi_estat = 'F' ).distinct().count() r = controls.filter( alumne = alumne, estat__codi_estat = 'R' ).distinct().count() p = controls.filter( alumne = alumne, estat__codi_estat = 'P' ).distinct().count() j = controls.filter( alumne = alumne, estat__codi_estat = 'J' ).distinct().count() #ca = controls.filter(q_hores).filter(estat__codi_estat__isnull = False).filter( alumne = alumne ).distinct().count() #-%-------------------------------------------- tpc = (1.0*f) * 100.0 / (0.0+f+r+p+j) if f > 0 else 0 camp = tools.classebuida() camp.enllac = None accio_list = [ (u'f: {0}'.format( f ), "/tutoria/detallTutoriaAlumne/{0}/assistencia".format( alumne.pk ) if f else None ), (u'j: {0}'.format( j ) , "/tutoria/detallTutoriaAlumne/{0}/assistencia".format( alumne.pk ) if j else None ), (u'r: {0}'.format( r ) , "/tutoria/detallTutoriaAlumne/{0}/assistencia".format( alumne.pk ) if r else None ), (u'p: {0}'.format( p ) , None ), (u'{0:.2f}%noJust'.format( tpc ) , "/tutoria/detallTutoriaAlumne/{0}/assistencia".format( alumne.pk ) if f or j or r else None ), ] camp.multipleContingut = accio_list filera.append(camp) #-Cartes--------------- camp = tools.classebuida() camp.multipleContingut = [ (u'{0}'.format( carta.data_carta ), u'/tutoria/imprimirCarta/{0}'.format( carta.pk ) ) for carta in alumne.cartaabsentisme_set.exclude( carta_esborrada_moment__isnull = False ).all() ] if not bool( camp.multipleContingut ): camp.contingut = "--" filera.append(camp) #-Faltes x a carta--------------- camp = tools.classebuida() camp.enllac = None carta = CartaAbsentisme( alumne = alumne ) msg = None cal_imprimir_carta = False try: carta.clean() llindar = settings.CUSTOM_FALTES_ABSENCIA_PER_TIPUS_CARTA.get( carta.tipus_carta, settings.CUSTOM_FALTES_ABSENCIA_PER_CARTA ) cal_imprimir_carta = carta.nfaltes >= llindar except ValidationError, e: print e msg = e.message camp.contingut = msg if bool( msg ) else carta.nfaltes filera.append(camp) #-Accions--------------- camp = tools.classebuida() camp.enllac = None camp.multipleContingut = [ (u'Generar Nova Carta', u'/tutoria/novaCarta/{0}'.format( alumne.pk ) ) , ] if cal_imprimir_carta else [] darrera_carta = None try: darrera_carta = alumne.cartaabsentisme_set.exclude( carta_esborrada_moment__isnull = False ).order_by('-data_carta' )[0] except IndexError: pass if l4 and darrera_carta: camp.multipleContingut.append( (u'Esborrar carta {0}'.format(darrera_carta.data_carta ), u'/tutoria/esborraCarta/{0}'.format( darrera_carta.pk ) ) ) camp.esMenu = True filera.append(camp) #-- taula.fileres.append( filera ) report.append(taula)
def elsProfessors( request ): (user, l4) = tools.getImpersonateUser(request) report = [] taula = tools.classebuida() taula.capceleres = [] taula.titol = tools.classebuida() taula.titol.contingut = "" capcelera = tools.classebuida() capcelera.amplade = 230 capcelera.contingut = u'Professor' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 200 capcelera.contingut = u'%Passa llista' taula.capceleres.append( capcelera ) taula.fileres = [] for professor in Professor.objects.all(): filera = [] #-nom-------------------------------------------- camp_nom = tools.classebuida() camp_nom.enllac = None camp_nom.contingut = unicode(professor) filera.append(camp_nom) #-incidències-------------------------------------------- camp = tools.classebuida() camp.enllac = None qProfessor = Q( horari__professor = professor ) qAvui = Q( dia_impartir = datetime.today() ) & Q( horari__hora__hora_fi__lt = datetime.now() ) qFinsAhir = Q( dia_impartir__lt = datetime.today() ) qFinsAra = qFinsAhir | qAvui qTeGrup = Q( horari__grup__isnull = False) imparticions = Impartir.objects.filter(qProfessor & qFinsAra & qTeGrup ) nImparticios = imparticions.exclude( pot_no_tenir_alumnes = True).count() nImparticionsLlistaPassada = imparticions.exclude( pot_no_tenir_alumnes = True).filter( professor_passa_llista__isnull = False ).count() pct = nImparticionsLlistaPassada * 100 / nImparticios if nImparticios > 0 else 'N/A' camp.contingut = u'{0}% ({1} classes impartides, {2} controls)'.format( pct, nImparticios, nImparticionsLlistaPassada) filera.append(camp) #-- taula.fileres.append( filera ) report.append(taula) return render_to_response( 'report.html', {'report': report, 'head': 'Informació professors' , }, context_instance=RequestContext(request))
def lesMevesAvaluacionsQualitatives( request ): (user, l4) = tools.getImpersonateUser(request) professor = User2Professor( user ) report = [] for qualitativa in AvaluacioQualitativa.objects.all(): taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = "" taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 300 capcelera.contingut = u'{0}'.format(unicode( qualitativa ) ) taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 300 obertaLaQualitativa = qualitativa.data_obrir_avaluacio <= date.today() <= qualitativa.data_tancar_avaluacio estat = '(Oberta)' if obertaLaQualitativa else '(Tancada)' capcelera.contingut = u'del {0} al {1} {2}'.format( qualitativa.data_obrir_avaluacio, qualitativa.data_tancar_avaluacio, estat) taula.capceleres.append(capcelera) taula.fileres = [] #Només pels que tenen items o respostes #teFrases = Q( horari__grup__curs__nivell__itemqualitativa__isnull = False ) #teRespostes = Q( respostaavaluacioqualitativa__isnull = False ) assignatura_grup = set() for ca in Impartir.objects.filter( horari__professor = professor, dia_impartir__gte = qualitativa.data_obrir_avaluacio , dia_impartir__lte = qualitativa.data_tancar_avaluacio ): if ca.horari.grup is not None: assignatura_grup.add( (ca.horari.assignatura, ca.horari.grup ) ) for (assignatura, grup,) in assignatura_grup: if qualitativa in grup.avaluacioqualitativa_set.all(): teFrases = grup.curs.nivell.itemqualitativa_set.exists() aquestaQualitativa = Q( qualitativa = qualitativa ) and \ Q( professor = professor ) and \ Q( alumne__grup = grup ) and \ Q( assignatura = assignatura) teResostes = RespostaAvaluacioQualitativa.objects.filter( aquestaQualitativa).exists() if teFrases or teResostes: filera = [] camp = tools.classebuida() camp.contingut = u'{0} - {1}'.format(unicode( assignatura ) , unicode( grup ) ) filera.append(camp) q_mateix_grup = Q(controlassistencia__impartir__horari__grup = grup) q_mateixa_assignatura = Q(controlassistencia__impartir__horari__assignatura = assignatura) q_mateix_professor = Q(controlassistencia__impartir__horari__professor = professor) q_liPassemLlistaDesDe = Q( controlassistencia__impartir__dia_impartir__gte = ( qualitativa.data_obrir_avaluacio - timedelta( days = 7 ) ) ) q_liPassemLlistaFinsA = Q( controlassistencia__impartir__dia_impartir__lte = qualitativa.data_tancar_avaluacio ) q_alumnes_a_avaluar = q_mateix_grup & q_mateixa_assignatura & q_mateix_professor & q_liPassemLlistaDesDe & q_liPassemLlistaFinsA q_te_respostes = Q(respostaavaluacioqualitativa__isnull = False) q_mateixa_qualitativa = Q(respostaavaluacioqualitativa__qualitativa = qualitativa) q_mateix_professor_qualitativa = Q(respostaavaluacioqualitativa__professor = professor) q_mateixa_assiganatura_qualitativa = Q(respostaavaluacioqualitativa__assignatura = assignatura) q_alumnes_avaluats = q_alumnes_a_avaluar & q_te_respostes & q_mateixa_qualitativa & q_mateix_professor_qualitativa & q_mateixa_assiganatura_qualitativa camp = tools.classebuida() nTotalAlumnes = Alumne.objects.filter( q_alumnes_a_avaluar ).distinct().count() nAlumnesAvaluats = Alumne.objects.filter(q_alumnes_avaluats ).distinct().count() if nTotalAlumnes > 0 else 0 camp.contingut = u'{0}'.format(u'{0} / {1}'.format(nAlumnesAvaluats,nTotalAlumnes) ) if nTotalAlumnes > 0: camp.enllac = '/avaluacioQualitativa/entraQualitativa/{0}/{1}/{2}'.format( qualitativa.pk, assignatura.pk, grup.pk ) filera.append( camp ) taula.fileres.append( filera ) report.append(taula) return render_to_response( 'report.html', {'report': report, 'head': u'Avaluacions Qualitatives' , }, context_instance=RequestContext(request))
def indicadorsReport(): report = [] taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = u'Indicadors Absentisme' taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 10 capcelera.contingut = u'Curs' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 10 capcelera.contingut = u'Nivell' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 8 capcelera.contingut = u'% ind.' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 8 capcelera.contingut = u'1rTrim' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 8 capcelera.contingut = u'2nTrim' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 8 capcelera.contingut = u'3rTrim' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 8 capcelera.contingut = u'Curs' taula.capceleres.append( capcelera ) if len(settings.CUSTOM_INDICADORS)==0: # Report per defecte si no n'hi ha cap indicador taula.fileres = [] filera = [] camp = tools.classebuida() camp.contingut="No n'hi ha indicadors definits" filera.append(camp) taula.fileres.append( filera ) filera = [] camp = tools.classebuida() camp.contingut="S'han de definir a CUSTOM_INDICADORS" filera.append(camp) taula.fileres.append( filera ) report.append(taula) return (report, None) taula.fileres = [] response = HttpResponse(content_type='text/csv') response['Content-Disposition'] = 'attachment; filename="indicadors.csv"' writer = csv.writer(response) writer.writerow(['Curs', 'Nivell', '%', 'ini1rT', 'fi1rT', 'sup1rT', 'tot1rT', 'ind1rT', 'ini2nT', 'fi2nT', 'sup2nT', 'tot2nT', 'ind2nT', 'ini3rT', 'fi3rT', 'sup3rT', 'tot3rT', 'ind3rT', 'inicurs', 'ficurs', 'supc', 'totc', 'indc' ]) for ind in settings.CUSTOM_INDICADORS: data = date.today() data = datetime(year=data.year, month=data.month, day=data.day) dtrim0=datetime.strptime(ind[0], '%d/%m/%Y') dtrim1=datetime.strptime(ind[1], '%d/%m/%Y') dtrim2=datetime.strptime(ind[2], '%d/%m/%Y') dtrim3=datetime.strptime(ind[3], '%d/%m/%Y') nivell = ind[4] tpc = ind[5] trim1=0 trim2=0 trim3=0 curs=0 sup1=sup2=sup3=quan1=quan2=quan3=0 if data>dtrim1: (trim1, sup1, quan1)=indicadorAbsentisme( dtrim0, dtrim1, nivell, tpc) if data>dtrim2: (trim2, sup2, quan2)=indicadorAbsentisme( dtrim1, dtrim2, nivell, tpc) if data>dtrim3: (trim3, sup3, quan3)=indicadorAbsentisme( dtrim2, dtrim3, nivell, tpc) (curs, supc, quanc)=indicadorAbsentisme( dtrim0, dtrim3, nivell, tpc) filera = [] #-Curs-------------------------------------------- camp = tools.classebuida() camp.contingut = dtrim0.strftime("%Y") + "/" + dtrim3.strftime("%Y") filera.append(camp) #-nivell-------------------------------------------- camp = tools.classebuida() camp.contingut = unicode(nivell) filera.append(camp) #-% ind-------------------------------------------- camp = tools.classebuida() camp.contingut = u'{0:.2f}%'.format(tpc) filera.append(camp) #-%1rTrim-------------------------------------------- camp = tools.classebuida() camp.contingut = u'{0:.2f}%'.format(trim1) filera.append(camp) #-%2nTrim-------------------------------------------- camp = tools.classebuida() camp.contingut = u'{0:.2f}%'.format(trim2) filera.append(camp) #-%3rTrim-------------------------------------------- camp = tools.classebuida() camp.contingut = u'{0:.2f}%'.format(trim3) filera.append(camp) #-%Curs-------------------------------------------- camp = tools.classebuida() camp.contingut = u'{0:.2f}%'.format(curs) filera.append(camp) writer.writerow([filera[0].contingut, filera[1].contingut, filera[2].contingut, ind[0], ind[1], sup1, quan1, trim1, ind[1], ind[2], sup2, quan2, trim2, ind[2], ind[3], sup3, quan3, trim3, ind[0], ind[3], supc, quanc, curs ]) taula.fileres.append( filera ) report.append(taula) return (report, response)
def elsMeusAlumnesAndAssignatures( request ): (user, l4) = tools.getImpersonateUser(request) professor = User2Professor( user ) report = [] nTaula=0 assignatura_grup = set() for ca in Impartir.objects.filter( horari__professor = professor ): if ca.horari.grup is not None: assignatura_grup.add( (ca.horari.assignatura, ca.horari.grup ) ) for (assignatura, grup,) in assignatura_grup: taula = tools.classebuida() taula.codi = nTaula; nTaula+=1 taula.tabTitle = u'{0} - {1}'.format(unicode( assignatura ) , unicode( grup ) ) taula.titol = tools.classebuida() taula.titol.contingut = "" capcelera_nom = tools.classebuida() capcelera_nom.amplade = 25 capcelera_nom.contingut = u'{0} - {1}'.format(unicode( assignatura ) , unicode( grup ) ) capcelera_nIncidencies = tools.classebuida() capcelera_nIncidencies.amplade = 10 capcelera_nIncidencies.contingut = u'Incidències' capcelera_assistencia = tools.classebuida() capcelera_assistencia.amplade = 5 capcelera_assistencia.contingut = u'Assist.' capcelera_nFaltes = tools.classebuida() capcelera_nFaltes.amplade = 15 nClasses = Impartir.objects.filter( horari__professor = professor , horari__assignatura = assignatura, horari__grup = grup ).count() nClassesImpartides = Impartir.objects.filter( horari__professor = professor , horari__assignatura = assignatura, horari__grup = grup, dia_impartir__lte = date.today() ).count() capcelera_nFaltes.contingut = u' ({0}h impartides / {1}h)'.format( nClassesImpartides, nClasses) capcelera_contacte = tools.classebuida() capcelera_contacte.amplade = 45 capcelera_contacte.contingut = u'Dades de contacte Tutors.' taula.capceleres = [capcelera_nom, capcelera_nIncidencies, capcelera_assistencia, capcelera_nFaltes, capcelera_contacte] taula.fileres = [] for alumne in Alumne.objects.filter( controlassistencia__impartir__horari__grup = grup, controlassistencia__impartir__horari__assignatura = assignatura, controlassistencia__impartir__horari__professor = professor ).distinct().order_by('cognoms'): filera = [] #-nom-------------------------------------------- camp_nom = tools.classebuida() camp_nom.enllac = None camp_nom.contingut = u'{0}'.format( alumne ) filera.append(camp_nom) #-incidències-------------------------------------------- camp_nIncidencies = tools.classebuida() camp_nIncidencies.enllac = None nIncidencies = alumne.incidencia_set.filter( control_assistencia__impartir__horari__grup = grup, control_assistencia__impartir__horari__professor = professor, control_assistencia__impartir__horari__assignatura = assignatura, tipus__es_informativa = False ).count() nExpulsions = alumne.expulsio_set.filter( control_assistencia__impartir__horari__grup = grup, control_assistencia__impartir__horari__professor = professor, control_assistencia__impartir__horari__assignatura = assignatura ).exclude( estat = 'ES' ).count() camp_nIncidencies.multipleContingut = [ ( u'Incid: {0}'.format( nIncidencies ), None, ), ( u'Expul: {0}'.format( nExpulsions), None, ) ] filera.append(camp_nIncidencies) #-Assistencia-------------------------------------------- from django.db.models import Sum, Count # nFaltes = alumne.controlassistencia_set.filter( # estat__isnull = False , # impartir__horari__assignatura = assignatura # ).aggregate( # ausencia = Sum( 'estat__pct_ausencia' ), # classes = Count( 'estat' ) # ) controls = alumne.controlassistencia_set.filter( impartir__dia_impartir__lte = datetime.today(), impartir__horari__grup = grup, impartir__horari__professor = professor, impartir__horari__assignatura = assignatura ) nFaltesNoJustificades = controls.filter( Q(estat__codi_estat = 'F' ) ).count() nFaltesJustificades = controls.filter( estat__codi_estat = 'J' ).count() nRetards = controls.filter( estat__codi_estat = 'R' ).count() nControls = controls.filter(estat__codi_estat__isnull = False ).count( ) camp = tools.classebuida() camp.enllac = None tpc = 100.0 - ( ( 100.0 * float(nFaltesNoJustificades + nFaltesJustificades) ) / float(nControls) ) if nControls > 0 else 'N/A' camp.contingut = u"""{0:.2f}%""".format( tpc ) if nControls > 0 else 'N/A' filera.append(camp) camp = tools.classebuida() camp.enllac = None contingut = "Controls: {0},F.no J.: {1},F.Just: {2},Retards: {3}".format( nControls, nFaltesNoJustificades , nFaltesJustificades, nRetards) camp.multipleContingut = [ (c, None,) for c in contingut.split(',') ] filera.append(camp) #-- #-nom-------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.multipleContingut = [(u'{0} ({1}, {2}, {3})'.format( alumne.rp1_nom, alumne.rp1_telefon, alumne.rp1_mobil, alumne.rp1_correu ), None,), (u'{0} ({1}, {2}, {3})'.format( alumne.rp2_nom, alumne.rp2_telefon, alumne.rp2_mobil, alumne.rp2_correu ), None,)] filera.append(camp) taula.fileres.append( filera ) report.append(taula) return render( request, 'reportTabs.html', {'report': report, 'head': u'Informació alumnes' , }, )
def reportQualitativa( qualitativa , alumnes = [], grups = [], request = None): import locale locale.setlocale(locale.LC_TIME, 'ca_ES.utf8') reports = [] for nivell in Nivell.objects.all(): for curs in nivell.curs_set.all(): for grup in curs.grup_set.all(): q_teRespostes = Q(respostaavaluacioqualitativa__isnull = False) q_alumneTriat = Q(pk__in = [a.pk for a in alumnes ]) q_grupTriat = Q( grup__in = grups ) q_filtre_alumn = q_teRespostes & ( q_alumneTriat | q_grupTriat ) for alumne in grup.alumne_set.filter( q_filtre_alumn ).distinct(): report = tools.classebuida() report.alumne = alumne report.respostes = [] report.data = qualitativa.data_tancar_avaluacio.strftime( '%d de %B de %Y' ) report.tutors = u', '.join( [u'Sr(a) ' + unicode(t) for t in alumne.tutorsDeLAlumne() ] ) for assignatura in Assignatura.objects.filter( respostaavaluacioqualitativa__qualitativa = qualitativa, respostaavaluacioqualitativa__alumne = alumne ).distinct(): resposta = tools.classebuida() resposta.assignatura = assignatura.getLongName() resposta.frases = [] for respostaQualitativa in RespostaAvaluacioQualitativa.objects.filter( alumne = alumne, assignatura = assignatura ): resposta.frases.append(respostaQualitativa.item ) report.respostes.append( resposta ) #endfor resposta if report: reports.append( report ) #endfor alumne #from django.template import Context from appy.pod.renderer import Renderer import cgi import os from django import http import time excepcio = None contingut = None try: #resultat = StringIO.StringIO( ) resultat = "/tmp/DjangoAula-temp-{0}-{1}.odt".format( time.time(), request.session.session_key ) #context = Context( {'reports' : reports, } ) path = None try: path = os.path.join( settings.PROJECT_DIR, '../customising/docs/qualitativa.odt' ) except: path = os.path.join(os.path.dirname(__file__), 'templates/qualitativa.odt') renderer = Renderer(path, {'reports' : reports, }, resultat) renderer.run() docFile = open(resultat, 'rb') contingut = docFile.read() docFile.close() os.remove(resultat) except Exception, e: excepcio = unicode( e )
def pagamentOnLine(request): if not CUSTOM_SORTIDES_PAGAMENT_ONLINE: raise Http404() credentials = tools.getImpersonateUser(request) (user, _) = credentials report = [] taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 20 capcelera.contingut = u'Informació' capcelera.enllac = None taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 80 capcelera.contingut = u'' taula.capceleres.append(capcelera) taula.fileres = [] filera = [] # -by-------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = u'Dades Fiscals' camp.enllac = '' filera.append(camp) # -tip-------------------------------------------- dadesFiscalsFile = open(settings.DADES_FISCALS_FILE, "r") tip = dadesFiscalsFile.read() camp = tools.classebuida() camp.enllac = '' camp.contingut = tip filera.append(camp) taula.fileres.append(filera) # -1-------------------------------------------- filera = [] camp = tools.classebuida() camp.enllac = None camp.contingut = u'Política de vendes/devolucions' camp.enllac = '' filera.append(camp) # -tip-------------------------------------------- politicaVendesFile = open(settings.POLITICA_VENDA_FILE, "r") tip = politicaVendesFile.read() camp = tools.classebuida() camp.enllac = '' camp.contingut = tip filera.append(camp) taula.fileres.append(filera) report.append(taula) return render( request, 'report.html', { 'report': report, 'head': 'Pagament Online', }, )
def justificadorMKTable(request, year, month, day): credentials = tools.getImpersonateUser(request) (user, l4) = credentials professor = User2Professor(user) data = date(year=int(year), month=int(month), day=int(day)) grups = Grup.objects.filter(tutor__professor=professor) q_grups_tutorats = Q(grup__in=[t.grup for t in professor.tutor_set.all()]) q_alumnes_tutorats = Q(pk__in=[ ti.alumne.pk for ti in professor.tutorindividualitzat_set.all() ]) alumnes = Alumne.objects.filter(q_grups_tutorats | q_alumnes_tutorats) #busco el dilluns i el divendres dia_de_la_setmana = data.weekday() delta = timedelta(days=(-1 * dia_de_la_setmana)) dilluns = data + delta #marc horari per cada dia dades = tools.classebuida() dades.alumnes = alumnes.order_by('grup', 'cognoms', 'nom') dades.c = [] #controls dades.dia_hores = tools.diccionari() dades.marc_horari = {} for delta in [0, 1, 2, 3, 4]: dia = dilluns + timedelta(days=delta) q_grups = Q(grup__in=grups) q_alumnes = Q(grup__alumne__in=alumnes) q_impartir = Q(impartir__controlassistencia__alumne__in=alumnes) q_dies = Q(impartir__dia_impartir=dia) #forquilla = Horari.objects.filter( ( q_grups | q_alumnes ) & q_dies forquilla = Horari.objects.filter(q_impartir & q_dies).aggregate( desde=Min('hora__hora_inici'), finsa=Max('hora__hora_inici')) if forquilla['desde'] and forquilla['finsa']: dades.marc_horari[dia] = { 'desde': forquilla['desde'], 'finsa': forquilla['finsa'] } dades.dia_hores[dia] = llista() for hora in FranjaHoraria.objects.filter( hora_inici__gte=forquilla['desde'], hora_inici__lte=forquilla['finsa']).order_by('hora_inici'): dades.dia_hores[dia].append(hora) dades.quadre = tools.diccionari() for alumne in dades.alumnes: dades.quadre[unicode(alumne)] = [] for dia, hores in dades.dia_hores.itemsEnOrdre(): hora_inici = FranjaHoraria.objects.get( hora_inici=dades.marc_horari[dia]['desde']) hora_fi = FranjaHoraria.objects.get( hora_inici=dades.marc_horari[dia]['finsa']) q_controls = Q( impartir__dia_impartir = dia ) & \ Q( impartir__horari__hora__gte = hora_inici) & \ Q( impartir__horari__hora__lte = hora_fi) & \ Q( alumne = alumne ) controls = [ c for c in ControlAssistencia.objects.select_related( 'estat', 'impartir__horari__assignatura', 'professor', 'estat_backup', 'professor_backup').filter(q_controls) ] for hora in hores: cella = tools.classebuida() cella.txt = '' hiHaControls = len( [c for c in controls if c.impartir.horari.hora == hora]) > 0 haPassatLlista = hiHaControls and len([ c for c in controls if c.estat is not None and c.impartir.horari.hora == hora ]) > 0 cella.c = [ c for c in controls if c.impartir.horari.hora == hora ] for item in cella.c: item.professor2show = item.professor or ( item.impartir.horari.professor if item.impartir.horari else ' ') item.estat2show = item.estat or " " dades.c.extend(cella.c) if not hiHaControls: cella.color = '#505050' else: if not haPassatLlista: cella.color = '#E0E0E0' else: cella.color = 'white' if hora == hora_inici: cella.primera_hora = True else: cella.primera_hora = False dades.quadre[unicode(alumne)].append(cella) return dades
def reportFaltesIncidencies( dataInici, dataFi , alumnes_informe = [], alumnes_recordatori = [], grups = [], request = None): import locale locale.setlocale(locale.LC_TIME, 'ca_ES.utf8') reports = [] for nivell in Nivell.objects.all(): for curs in nivell.curs_set.all(): for grup in curs.grup_set.all(): q_alumneTriat = Q(pk__in = [a.pk for a in alumnes_informe ] + [a.pk for a in alumnes_recordatori ]) q_grupTriat = Q( grup__in = grups ) q_filtre_alumn = ( q_alumneTriat & q_grupTriat ) for alumne in grup.alumne_set.filter( q_filtre_alumn ).distinct(): report = tools.classebuida() report.informe = alumne in alumnes_informe report.recordatori = alumne in alumnes_recordatori report.resum = [] report.assistencia = [] report.observacions = [] report.incidencies = [] report.expulsions = [] report.correus = u', '.join( alumne.get_correus_relacio_familia() ) report.data_inici = dataInici.strftime( '%d/%m/%Y' ) report.data_fi = dataFi.strftime( '%d/%m/%Y' ) report.data = dataFi.strftime( '%d de %B de %Y' ) report.alumne = alumne q_desde = Q( impartir__dia_impartir__gte = dataInici ) q_finsa = Q( impartir__dia_impartir__lte = dataFi ) q_presencia = Q( estat__codi_estat = 'P' ) q_null = Q( estat__isnull = True ) n_faltes = 0 n_retards = 0 n_justificades = 0 for ca in alumne.controlassistencia_set.filter( q_desde & q_finsa & ~q_presencia & ~q_null ).order_by( 'impartir__dia_impartir', 'impartir__horari') : itemAssitencia = tools.classebuida() itemAssitencia.tipus = ca.estat itemAssitencia.dia = ca.impartir.dia_impartir.strftime( '%d/%m/%Y' ) itemAssitencia.hora = ca.impartir.horari.hora itemAssitencia.assignatura = ca.impartir.horari.assignatura.getLongName() if ca.estat.codi_estat == 'R': n_retards += 1 elif ca.estat.codi_estat == 'F': n_faltes += 1 elif ca.estat.codi_estat == 'J': n_justificades += 1 report.assistencia.append( itemAssitencia ) item = tools.classebuida() item.item = u'Faltes No Justificades' item.valor = n_faltes report.resum.append( item ) item = tools.classebuida() item.item = u'Faltes Justificades' item.valor = n_justificades report.resum.append( item ) item = tools.classebuida() item.item = u'Retards' item.valor = n_retards report.resum.append( item ) q_informativa = Q( tipus__es_informativa = True ) q_desde = Q( dia_incidencia__gte = dataInici ) q_finsa = Q( dia_incidencia__lte = dataFi ) n_informatives = 0 for incidencia in alumne.incidencia_set.filter(q_informativa & q_desde & q_finsa): NomAssignatura = '' try: NomAssignatura = incidencia.control_assistencia.impartir.horari.assignatura.getLongName() \ if incidencia.es_incidencia_d_aula() else '' except: pass item = tools.classebuida() item.dia = incidencia.dia_incidencia.strftime( '%d/%m/%Y' ) item.hora = incidencia.franja_incidencia.hora_inici.strftime('%H:%M') item.assignatura = NomAssignatura item.professor = incidencia.professional item.observacio = incidencia.descripcio_incidencia n_informatives += 1 report.observacions.append(item) item = tools.classebuida() item.item = u'Observacions' item.valor = n_informatives report.resum.append( item ) n_incidencies = 0 for incidencia in alumne.incidencia_set.filter( ~q_informativa & q_desde & q_finsa ): NomAssignatura = '' try: NomAssignatura = incidencia.control_assistencia.impartir.horari.assignatura.getLongName() \ if incidencia.es_incidencia_d_aula() else '' except: pass item = tools.classebuida() item.dia = incidencia.dia_incidencia.strftime( '%d/%m/%Y' ) item.hora = incidencia.franja_incidencia.hora_inici.strftime('%H:%M') item.assignatura = NomAssignatura item.professor = incidencia.professional item.incidencia = incidencia.descripcio_incidencia n_incidencies += 1 report.incidencies.append(item) item = tools.classebuida() item.item = u'Incidències' item.valor = n_incidencies report.resum.append( item ) q_desde = Q( dia_expulsio__gte = dataInici ) q_finsa = Q( dia_expulsio__lte = dataFi ) q_esborrany = Q(estat = 'ES' ) n_expulsions = 0 for expulsio in alumne.expulsio_set.filter( q_desde & q_finsa & ~q_esborrany ): NomAssignatura = '' try: NomAssignatura = expulsio.control_assistencia.impartir.horari.assignatura.getLongName() \ if expulsio.es_incidencia_d_aula() else '' except: pass item = tools.classebuida() item.dia = expulsio.dia_expulsio.strftime( '%d/%m/%Y' ) item.hora = expulsio.franja_expulsio.hora_inici.strftime('%H:%M') item.assignatura = NomAssignatura item.professor = expulsio.professor item.motiu = expulsio.motiu n_expulsions += 1 report.expulsions.append(item) item = tools.classebuida() item.item = u'Expulsions' item.valor = n_expulsions report.resum.append( item ) report.detall = report.informe and ( n_expulsions + n_incidencies + n_informatives + n_faltes + n_justificades + n_retards > 0 ) if report: reports.append( report ) #endfor alumne #from django.template import Context from appy.pod.renderer import Renderer import cgi import os from django import http import time excepcio = None contingut = None try: #resultat = StringIO.StringIO( ) resultat = "/tmp/DjangoAula-temp-{0}-{1}.odt".format( time.time(), request.session.session_key ) #context = Context( {'reports' : reports, } ) try: path = os.path.join( settings.PROJECT_DIR, '../customising/docs/faltesIncidencies.odt' ) except: path = os.path.join(os.path.dirname(__file__), 'templates/faltesIncidencies.odt') renderer = Renderer(path, {'reports' : reports, }, resultat) renderer.run() docFile = open(resultat, 'rb') contingut = docFile.read() docFile.close() os.remove(resultat) except Exception, e: excepcio = unicode( e )
def elsProfessors( request ): (user, l4) = tools.getImpersonateUser(request) report = [] taula = tools.classebuida() taula.capceleres = [] taula.titol = tools.classebuida() taula.titol.contingut = "" capcelera = tools.classebuida() capcelera.amplade = 40 capcelera.contingut = u'Professor' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 60 capcelera.contingut = u'%Passa llista' taula.capceleres.append( capcelera ) taula.fileres = [] for professor in Professor.objects.all(): filera = [] #-nom-------------------------------------------- camp_nom = tools.classebuida() camp_nom.enllac = None camp_nom.contingut = unicode(professor) filera.append(camp_nom) #-incidències-------------------------------------------- camp = tools.classebuida() camp.enllac = None qProfessor = Q( horari__professor = professor ) qAvui = Q( dia_impartir = datetime.today() ) & Q( horari__hora__hora_fi__lt = datetime.now() ) qFinsAhir = Q( dia_impartir__lt = datetime.today() ) qFinsAra = qFinsAhir | qAvui qTeGrup = Q( horari__grup__isnull = False) imparticions = ( Impartir .objects .filter(qProfessor & qFinsAra & qTeGrup ) .exclude( pot_no_tenir_alumnes = True) ) nImparticios = ( imparticions .values_list( 'dia_impartir', 'horari__dia_de_la_setmana_id','horari__hora_id' ) .distinct() .count() ) nImparticionsLlistaPassada = ( imparticions .filter( professor_passa_llista__isnull = False ) .values_list( 'dia_impartir', 'horari__dia_de_la_setmana_id','horari__hora_id' ) .distinct() .count() ) pct = nImparticionsLlistaPassada * 100 / nImparticios if nImparticios > 0 else 'N/A' camp.contingut = u'{0}% ({1} classes impartides, {2} controls)'.format( pct, nImparticios, nImparticionsLlistaPassada) camp.codi_ordenacio = pct filera.append(camp) #-- taula.fileres.append( filera ) #fileres_ordenades = sorted( taula.fileres, key = lambda x: x.codi_ordenacio ) #taula.fileres = fileres_ordenades report.append(taula) return render( request, 'report.html', {'report': report, 'head': 'Informació professors' , } )
def dadesRelacioFamilies( request ): credentials = tools.getImpersonateUser(request) (user, _ ) = credentials professor = User2Professor( user ) report = [] grups = [ t.grup for t in Tutor.objects.filter( professor = professor )] grups.append( 'Altres' ) for grup in grups: taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 100 capcelera.contingut = grup if grup == 'Altres' else u'{0} ({1})'.format(unicode( grup ) , unicode( grup.curs ) ) capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 70 capcelera.contingut = u'Correus Contacte' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 70 capcelera.contingut = u'Actiu' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 70 capcelera.contingut = u'Acció' taula.capceleres.append(capcelera) taula.fileres = [] if grup == 'Altres': consulta_alumnes = Q( pk__in = [ti.alumne.pk for ti in professor.tutorindividualitzat_set.all() ] ) else: consulta_alumnes = Q( grup = grup ) for alumne in Alumne.objects.filter(consulta_alumnes ): filera = [] #-Alumne-------------------------------------------- camp = tools.classebuida() camp.codi = alumne.pk camp.enllac = None camp.contingut = unicode(alumne) filera.append(camp) #-Correus Contacte-------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = unicode( ', '.join( alumne.get_correus_relacio_familia() ) ) filera.append(camp) #-Bloquejat-------------------------------------------- camp = tools.classebuida() camp.codi = alumne.pk camp.enllac = None nConnexions = 0 contingut = u'{0} {1}'.format(u'Sí' if alumne.esta_relacio_familia_actiu() else u'No', u'({0})'.format(alumne.motiu_bloqueig) if alumne.motiu_bloqueig else '') #TODO try: nConnexions = alumne.user_associat.LoginUsuari.filter(exitos=True).count() dataDarreraConnexio = alumne.user_associat.LoginUsuari.filter(exitos=True).order_by( '-moment' )[0].moment except: pass camp.multipleContingut = [ ( contingut, None,), ( u'( {0} connexs. )'.format(nConnexions) , None, ), ] if nConnexions > 0: camp.multipleContingut.append( ( u'Darrera Connx: {0}'.format( dataDarreraConnexio.strftime( '%d/%m/%Y' ) ), None, ) ) filera.append(camp) #-Acció-------------------------------------------- camp = tools.classebuida() camp.enllac = None accio_list = [ (u'Configura', '/open/configuraConnexio/{0}'.format(alumne.pk) ), #(u'Bloquejar' if alumne.esta_relacio_familia_actiu() else u'Desbloquejar', '/open/bloquejaDesbloqueja/{0}'.format(alumne.pk)), (u'Envia benvinguda' , '/open/enviaBenvinguda/{0}'.format(alumne.pk)), (u'Veure Portal' , '/open/elMeuInforme/{0}'.format(alumne.pk)),] camp.multipleContingut = accio_list filera.append(camp) #-- taula.fileres.append( filera ) report.append(taula) return render_to_response( 'report.html', {'report': report, 'head': 'Els meus alumnes tutorats' , }, context_instance=RequestContext(request))
def totesLesCartesRpt(): report = [] #--- Grups ---------------------------------------------------------------------------- taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 20 capcelera.contingut = u'Data' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 60 capcelera.contingut = u'Alumne' capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 20 capcelera.contingut = u'Cartes nº.' taula.capceleres.append(capcelera) taula.fileres = [] for carta in CartaAbsentisme.objects.all().order_by('-data_carta'): filera = [] #-data-------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = date(carta.data_carta, 'j N Y') filera.append(camp) #-alumne-------------------------------------------- camp = tools.classebuida() camp.enllac = None from aula.apps.alumnes.named_instances import curs_any_fi te_mes_de_16 = (u", Més de 16 anys (durant el curs)" if ( carta.alumne.cursa_obligatoria() and (curs_any_fi() - carta.alumne.data_neixement.year) > 16) else "") camp.contingut = u"{0} - {1} {2}".format(carta.alumne, carta.alumne.grup, te_mes_de_16) filera.append(camp) #-carta num-------------------------------------------- camp = tools.classebuida() camp.enllac = r'/tutoria/imprimirCartaNoFlag/{0}'.format(carta.pk) camp.contingut = '{0}'.format(carta.carta_numero) filera.append(camp) #-- taula.fileres.append(filera) report.append(taula) return report
def faltesAssistenciaEntreDatesGrupRpt( grup , dataDesDe , dataFinsA ): q_grup = Q(impartir__horari__grup = grup) q_dies = Q(impartir__dia_impartir__gte = dataDesDe ) & Q(impartir__dia_impartir__lte = dataFinsA ) controls = ControlAssistencia.objects.filter( q_grup & q_dies ) alumnes = Alumne.objects.filter( controlassistencia__pk__in = controls.values_list('pk', flat=True) ).distinct() report = [] nTaula = 0 #RESUM------------------------------------------------------------------------------------------------- taula = tools.classebuida() taula.codi = nTaula; nTaula+=1 taula.tabTitle = 'Resum' taula.titol = tools.classebuida() taula.titol.contingut = u'Resum assistència de {0} entre {1} i {2} '.format( grup, dataDesDe.strftime( '%d/%m/%Y' ) , dataFinsA.strftime( '%d/%m/%Y' ) , ) taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 40 capcelera.contingut = u'Alumne' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 10 capcelera.contingut = u'hores absent no justificat' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 10 capcelera.contingut = u'hores docència' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 15 capcelera.contingut = u'%absència no justificada (absènc.no.justif./docència)' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 10 capcelera.contingut = u'hores present' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 10 capcelera.contingut = u'hores absènc. justif.' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 5 capcelera.contingut = u'hores retard' taula.capceleres.append( capcelera ) taula.fileres = [] for alumne in alumnes: filera = [] #-nom-------------------------------------------- camp = tools.classebuida() camp.enllac = '' camp.contingut = unicode(alumne) + ' (' + unicode(alumne.grup) + ')' filera.append(camp) #-faltes-------------------------------------------- f = controls.filter( alumne = alumne, estat__codi_estat = 'F' ).distinct().count() camp = tools.classebuida() camp.contingut = unicode(f) filera.append(camp) #-controls-------------------------------------------- ca = controls.filter( alumne = alumne, estat__codi_estat__isnull = False ).distinct().count() camp = tools.classebuida() camp.contingut = unicode(ca) filera.append(camp) #-%-------------------------------------------- tpc = (1.0*f) / (1.0*ca) camp = tools.classebuida() camp.contingut =u'{0:.2f}%'.format(tpc * 100) filera.append(camp) #-present-------------------------------------------- p = controls.filter( alumne = alumne, estat__codi_estat = 'P' ).distinct().count() camp = tools.classebuida() camp.contingut = unicode(p) filera.append(camp) #-justif-------------------------------------------- j = controls.filter( alumne = alumne, estat__codi_estat = 'J' ).distinct().count() camp = tools.classebuida() camp.contingut = unicode(j) filera.append(camp) #-retard-------------------------------------------- j = controls.filter( alumne = alumne, estat__codi_estat = 'R' ).distinct().count() camp = tools.classebuida() camp.contingut = unicode(j) filera.append(camp) taula.fileres.append( filera ) report.append(taula) #DETALL------------------------------------------------------------------------------------------------- taula = tools.classebuida() taula.codi = nTaula; nTaula+=1 taula.tabTitle = 'Detall' taula.titol = tools.classebuida() taula.titol.contingut = u'Detall assistència de {0} de {1} entre {2} {3}h i {4} {5}h'.format( grup, dataDesDe.strftime( '%d/%m/%Y' ) , dataFinsA.strftime( '%d/%m/%Y' ) ) taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 40 capcelera.contingut = u'Alumne' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 30 capcelera.contingut = u'hores absent no justificat' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 30 capcelera.contingut = u'hores absènc. justif.' taula.capceleres.append( capcelera ) taula.fileres = [] for alumne in alumnes: filera = [] #-nom-------------------------------------------- camp = tools.classebuida() camp.enllac = '' camp.contingut = unicode(alumne) + ' (' + unicode(alumne.grup) + ')' filera.append(camp) #-faltes-------------------------------------------- f = controls.filter( alumne = alumne, estat__codi_estat = 'F' ).distinct().select_related('impartir','impartir__horari__hora', 'impartir__horari__assignatura') camp = tools.classebuida() camp.contingut = unicode( u' | '.join( [ u'{0} {1} {2}'.format(x.impartir.dia_impartir.strftime( '%d/%m/%Y' ) , x.impartir.horari.hora, x.impartir.horari.assignatura) for x in f ] ) ) filera.append(camp) #-justif-------------------------------------------- j = controls.filter( alumne = alumne, estat__codi_estat = 'J' ).distinct() camp = tools.classebuida() contingut = [ u'{0} {1} {2}'.format(x.impartir.dia_impartir.strftime( '%d/%m/%Y' ) , x.impartir.horari.hora, x.impartir.horari.assignatura) for x in j ] camp.multipleContingut = [ ( c, None,) for c in contingut ] filera.append(camp) taula.fileres.append( filera ) report.append(taula) return report
def reportQualitativa(qualitativa, alumnes=[], grups=[], request=None): import locale locale.setlocale(locale.LC_TIME, 'ca_ES.utf8') reports = [] for nivell in Nivell.objects.all(): for curs in nivell.curs_set.all(): for grup in curs.grup_set.all(): q_teRespostes = Q(respostaavaluacioqualitativa__isnull=False) q_alumneTriat = Q(pk__in=[a.pk for a in alumnes]) q_grupTriat = Q(grup__in=grups) q_filtre_alumn = q_teRespostes & (q_alumneTriat | q_grupTriat) for alumne in grup.alumne_set.filter( q_filtre_alumn).distinct(): report = tools.classebuida() report.alumne = alumne capceleres_materies = set() report.respostes = [] report.data = qualitativa.data_tancar_avaluacio.strftime( '%d de %B de %Y') report.tutors = u', '.join([ u'Sr(a) ' + unicode(t) for t in alumne.tutorsDeLAlumne() ]) for assignatura in Assignatura.objects.filter( respostaavaluacioqualitativa__qualitativa= qualitativa, respostaavaluacioqualitativa__alumne=alumne ).distinct(): resposta = tools.classebuida() resposta.assignatura = assignatura.getLongName() te_tipus_assignatura = hasattr(resposta.assignatura, 'tipus_assignatura') cacelera_txt = resposta.assignatura.tipus_assignatura.capcelera if te_tipus_assignatura else u"Matèria" capceleres_materies.add(cacelera_txt) resposta.frases = [] for respostaQualitativa in RespostaAvaluacioQualitativa.objects.filter( alumne=alumne, assignatura=assignatura): if respostaQualitativa.frase_oberta: resposta.frases.append( respostaQualitativa.frase_oberta) else: resposta.frases.append( respostaQualitativa.item) report.respostes.append(resposta) #endfor resposta report.materia = u" / ".join(capceleres_materies) if report: reports.append(report) #endfor alumne #from django.template import Context from appy.pod.renderer import Renderer import cgi import os from django import http import time excepcio = None contingut = None try: #resultat = StringIO.StringIO( ) resultat = "/tmp/DjangoAula-temp-{0}-{1}.odt".format( time.time(), request.session.session_key) #context = Context( {'reports' : reports, } ) path = None path = os.path.join(settings.PROJECT_DIR, '../customising/docs/qualitativa.odt') if not os.path.isfile(path): path = os.path.join(os.path.dirname(__file__), 'templates/qualitativa.odt') renderer = Renderer(path, { 'reports': reports, }, resultat) renderer.run() docFile = open(resultat, 'rb') contingut = docFile.read() docFile.close() os.remove(resultat) except Exception, e: excepcio = unicode(e)
def gestioCartesRpt(professor, l4): report = [] dataDesDe = None dataFinsA = date.today() #--- taula de pendents d'imprimir -- taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 500 capcelera.contingut = u"Cartes pendents d'imprimir" capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 200 capcelera.contingut = u"" capcelera.enllac = "" taula.capceleres.append(capcelera) taula.fileres = [] for carta in CartaAbsentisme.objects.filter(professor=professor, impresa=False): filera = [] #-carta-------------------------------------------- camp = tools.classebuida() camp.codi = carta.pk camp.enllac = None camp.contingut = unicode(carta) filera.append(camp) camp = tools.classebuida() camp.codi = carta.pk camp.enllac = None camp.multipleContingut = ((u'Imprimir', r'/tutoria/imprimirCarta/{0}'.format( carta.pk)), ) camp.esMenu = True filera.append(camp) taula.fileres.append(filera) if bool(taula.fileres): report.append(taula) #--- Grups ---------------------------------------------------------------------------- grups = [t.grup for t in Tutor.objects.filter(professor=professor)] grups.append('Altres') for grup in grups: taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 100 capcelera.contingut = grup if grup == u'Altres' else u'{0} ({1})'.format( grup, grup.curs) capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 200 capcelera.contingut = u'Faltes.' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 100 capcelera.contingut = u'Cartes.' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 100 capcelera.contingut = u"Faltes acumulades per a nova carta\n(Recordar 3 darrers dies no entra al còmput)." taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 60 capcelera.contingut = u'Accions' taula.capceleres.append(capcelera) taula.fileres = [] if grup == 'Altres': consulta_alumnes = Q(pk__in=[ ti.alumne.pk for ti in professor.tutorindividualitzat_set.all() ]) else: consulta_alumnes = Q(grup=grup) for alumne in Alumne.objects.filter(consulta_alumnes): filera = [] #-moment-------------------------------------------- camp = tools.classebuida() camp.codi = alumne.pk camp.enllac = None camp.contingut = unicode(alumne) camp.enllac = "/tutoria/detallTutoriaAlumne/{0}/dades".format( alumne.pk) filera.append(camp) q_hores = Q(impartir__dia_impartir__lte=dataFinsA) if dataDesDe: q_hores &= Q(impartir__dia_impartir__gte=dataDesDe) controls = alumne.controlassistencia_set.filter(q_hores) #-faltes-------------------------------------------- f = controls.filter(alumne=alumne, estat__codi_estat='F').distinct().count() r = controls.filter(alumne=alumne, estat__codi_estat='R').distinct().count() p = controls.filter(alumne=alumne, estat__codi_estat='P').distinct().count() j = controls.filter(alumne=alumne, estat__codi_estat='J').distinct().count() #ca = controls.filter(q_hores).filter(estat__codi_estat__isnull = False).filter( alumne = alumne ).distinct().count() #-%-------------------------------------------- tpc = (1.0 * f) * 100.0 / (0.0 + f + r + p + j) if f > 0 else 0 camp = tools.classebuida() camp.enllac = None accio_list = [ (u'f: {0}'.format(f), "/tutoria/detallTutoriaAlumne/{0}/assistencia".format( alumne.pk) if f else None), (u'j: {0}'.format(j), "/tutoria/detallTutoriaAlumne/{0}/assistencia".format( alumne.pk) if j else None), (u'r: {0}'.format(r), "/tutoria/detallTutoriaAlumne/{0}/assistencia".format( alumne.pk) if r else None), (u'p: {0}'.format(p), None), (u'{0:.2f}%noJust'.format(tpc), "/tutoria/detallTutoriaAlumne/{0}/assistencia".format( alumne.pk) if f or j or r else None), ] camp.multipleContingut = accio_list filera.append(camp) #-Cartes--------------- camp = tools.classebuida() camp.multipleContingut = [ (u'{0}'.format(carta.data_carta), u'/tutoria/imprimirCarta/{0}'.format(carta.pk)) for carta in alumne.cartaabsentisme_set.exclude( carta_esborrada_moment__isnull=False).all() ] if not bool(camp.multipleContingut): camp.contingut = "--" filera.append(camp) #-Faltes x a carta--------------- camp = tools.classebuida() camp.enllac = None carta = CartaAbsentisme(alumne=alumne) msg = None cal_imprimir_carta = False try: carta.clean() cal_imprimir_carta = carta.nfaltes >= 15 except ValidationError, e: msg = e.message camp.contingut = msg if bool(msg) else carta.nfaltes filera.append(camp) #-Accions--------------- camp = tools.classebuida() camp.enllac = None camp.multipleContingut = [ (u'Generar Nova Carta', u'/tutoria/novaCarta/{0}'.format(alumne.pk)), ] if cal_imprimir_carta else [] darrera_carta = None try: darrera_carta = alumne.cartaabsentisme_set.exclude( carta_esborrada_moment__isnull=False).order_by( '-data_carta')[0] except IndexError: pass if l4 and darrera_carta: camp.multipleContingut.append( (u'Esborrar carta {0}'.format(darrera_carta.data_carta), u'/tutoria/esborraCarta/{0}'.format(darrera_carta.pk))) camp.esMenu = True filera.append(camp) #-- taula.fileres.append(filera) report.append(taula)
def imprimir( request, pk, din = '4'): credentials = tools.getImpersonateUser(request) (user, _ ) = credentials professor = User2Professor( user ) instance = get_object_or_404( Sortida, pk = pk ) instance.flag_clean_nomes_toco_alumnes = True fEsDireccioOrGrupSortides = request.user.groups.filter(name__in=[u"direcció", u"sortides"] ).exists() potEntrar = ( professor in instance.professors_responsables.all() or professor in instance.altres_professors_acompanyants.all() or fEsDireccioOrGrupSortides ) if not potEntrar: raise Http404 #Preparo el codi de barres import time import barcode from PIL import Image from barcode.writer import ImageWriter CodiBarres = barcode.get_barcode_class(u'code128') codi_barres = CodiBarres(instance.codi_de_barres or "x", writer=ImageWriter()) barres = codi_barres.save("/tmp/barcode-{0}-{1}".format( time.time(), request.session.session_key )) im = Image.open(barres) im=im.crop( (20,20,385,50,) ) s = im.size #im = im.resize((int(s[0] * 0.8), int(s[1] * 0.8))) im.save(barres) alumnes_que_hi_van = set( instance.alumnes_convocats.all() ) alumnes_que_no_hi_van = set( instance.alumnes_que_no_vindran.all() ) alumnes = list( alumnes_que_hi_van - alumnes_que_no_hi_van ) report = [] for alumne in Alumne.objects.filter( pk__in = [ a.id for a in alumnes ] ): o = classebuida() o.alumne = unicode( alumne ) o.grup = unicode( alumne.grup ) o.ciutat = instance.ciutat o.preu = instance.preu_per_alumne o.departament = unicode( instance.departament_que_organitza ) if instance.departament_que_organitza else instance.comentari_organitza o.titol = instance.titol_de_la_sortida o.desde = instance.calendari_desde.strftime( "%H:%Mh del %d/%m/%Y" ) o.desde_dia = instance.calendari_desde.strftime( "%d/%m/%Y" ) o.finsa = instance.calendari_finsa.strftime( "%H:%Mh del %d/%m/%Y" ) o.mitja = instance.get_mitja_de_transport_display() o.programa_de_la_sortida = instance.programa_de_la_sortida.split("\n") or ['',] o.condicions_generals = instance.condicions_generals.split("\n") or ['-',] o.terminipagament = u"" if not bool( instance.termini_pagament ) else u"- darrer dia pagament {0} -".format( instance.termini_pagament.strftime( '%d/%m/%Y' ) ) report.append(o) o.barres = barres o.informacio_pagament = instance.informacio_pagament.split("\n") or ['-',] o.te_codi_barres = bool(instance.codi_de_barres) #from django.template import Context from appy.pod.renderer import Renderer import cgi import os from django import http excepcio = None #try: #resultat = StringIO.StringIO( ) resultat = "/tmp/DjangoAula-temp-{0}-{1}.odt".format( time.time(), request.session.session_key ) #context = Context( {'reports' : reports, } ) path = os.path.join( settings.PROJECT_DIR, '../customising/docs/autoritzacio2.odt') if din==4 else os.path.join( settings.PROJECT_DIR, '../customising/docs/autoritzacio2-A5.odt') if not os.path.isfile(path): path = os.path.join(os.path.dirname(__file__), 'templates/autoritzacio2.odt') if din=='4' else os.path.join(os.path.dirname(__file__), 'templates/autoritzacio2-A5.odt') renderer = Renderer(path, {'report' :report, }, resultat) renderer.run() docFile = open(resultat, 'rb') contingut = docFile.read() docFile.close() os.remove(resultat) #barcode os.remove(barres) # except Exception, e: # excepcio = unicode( e ) if True: #not excepcio: response = http.HttpResponse( contingut, content_type='application/vnd.oasis.opendocument.text') response['Content-Disposition'] = u'attachment; filename="{0}-{1}.odt"'.format( "autoritzacio_sortida", pk ) else: response = http.HttpResponse('''Als Gremlin no els ha agradat aquest fitxer! %s''' % cgi.escape(excepcio)) return response
def imprimir(request, pk): credentials = tools.getImpersonateUser(request) (user, _) = credentials professor = User2Professor(user) instance = get_object_or_404(Sortida, pk=pk) instance.flag_clean_nomes_toco_alumnes = True fEsDireccioOrGrupSortides = request.user.groups.filter( name__in=[u"direcció", u"sortides"]).exists() potEntrar = (professor in instance.professors_responsables.all() or professor in instance.altres_professors_acompanyants.all() or fEsDireccioOrGrupSortides) if not potEntrar: raise Http404 #Preparo el codi de barres import time import barcode from PIL import Image from barcode.writer import ImageWriter CodiBarres = barcode.get_barcode_class(u'code128') codi_barres = CodiBarres(instance.codi_de_barres or "x", writer=ImageWriter()) barres = codi_barres.save("/tmp/barcode-{0}-{1}".format( time.time(), request.session.session_key)) im = Image.open(barres) im = im.crop(( 20, 20, 385, 50, )) s = im.size #im = im.resize((int(s[0] * 0.8), int(s[1] * 0.8))) im.save(barres) alumnes_que_hi_van = set(instance.alumnes_convocats.all()) alumnes_que_no_hi_van = set(instance.alumnes_que_no_vindran.all()) alumnes = list(alumnes_que_hi_van - alumnes_que_no_hi_van) report = [] for alumne in Alumne.objects.filter(pk__in=[a.id for a in alumnes]): o = classebuida() o.alumne = unicode(alumne) o.grup = unicode(alumne.grup) o.ciutat = instance.ciutat o.preu = instance.preu_per_alumne o.departament = unicode( instance.departament_que_organitza ) if instance.departament_que_organitza else instance.comentari_organitza o.titol = instance.titol_de_la_sortida o.desde = instance.calendari_desde.strftime("%H:%Mh del %d/%m/%Y") o.desde_dia = instance.calendari_desde.strftime("%d/%m/%Y") o.finsa = instance.calendari_finsa.strftime("%H:%Mh del %d/%m/%Y") o.mitja = instance.get_mitja_de_transport_display() o.programa_de_la_sortida = instance.programa_de_la_sortida.split( "\n") or [ '', ] o.condicions_generals = instance.condicions_generals.split("\n") or [ '-', ] o.terminipagament = u"" if not bool( instance.termini_pagament ) else u"- darrer dia pagament {0} -".format( instance.termini_pagament.strftime('%d/%m/%Y')) report.append(o) o.barres = barres o.informacio_pagament = instance.informacio_pagament.split("\n") or [ '-', ] o.te_codi_barres = bool(instance.codi_de_barres) #from django.template import Context from appy.pod.renderer import Renderer import cgi import os from django import http excepcio = None #try: #resultat = StringIO.StringIO( ) resultat = "/tmp/DjangoAula-temp-{0}-{1}.odt".format( time.time(), request.session.session_key) #context = Context( {'reports' : reports, } ) path = os.path.join(settings.PROJECT_DIR, '../customising/docs/autoritzacio2.odt') if not os.path.isfile(path): path = os.path.join(os.path.dirname(__file__), 'templates/autoritzacio2.odt') renderer = Renderer(path, { 'report': report, }, resultat) renderer.run() docFile = open(resultat, 'rb') contingut = docFile.read() docFile.close() os.remove(resultat) #barcode os.remove(barres) # except Exception, e: # excepcio = unicode( e ) if True: #not excepcio: response = http.HttpResponse( contingut, content_type='application/vnd.oasis.opendocument.text') response[ 'Content-Disposition'] = u'attachment; filename="{0}-{1}.odt"'.format( "autoritzacio_sortida", pk) else: response = http.HttpResponse( '''Als Gremlin no els ha agradat aquest fitxer! %s''' % cgi.escape(excepcio)) return response
def alertaAssitenciaReport( data_inici, data_fi, nivell, tpc , ordenacio ): report = [] taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = u'Ranking absència alumnes nivell {0}'.format( nivell ) taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 30 capcelera.contingut = u'Alumne' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 15 capcelera.contingut = u'hores absent no justificat' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 10 capcelera.contingut = u'hores docència' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 20 capcelera.contingut = u'%absència no justificada (absènc.no.justif./docència)' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 5 capcelera.contingut = u'hores present' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 10 capcelera.contingut = u'hores absènc. justif.' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 10 capcelera.contingut = u'% assistència' taula.capceleres.append( capcelera ) taula.fileres = [] # q_nivell = Q( grup__curs__nivell = nivell ) # q_data_inici = Q( controlassistencia__impartir__dia_impartir__gte = data_inici ) # q_data_fi = Q( controlassistencia__impartir__dia_impartir__lte = data_fi ) # q_filte = q_nivell & q_data_inici & q_data_fi # q_alumnes = Alumne.objects.filter( q_filte ) # # q_p = q_alumnes.filter( controlassistencia__estat__codi_estat__in = ('P','R' ) ).order_by().distinct().annotate( x=Count('controlassistencia__estat') ).values_list( 'id', 'x' ) # q_j = q_alumnes.filter( controlassistencia__estat__codi_estat = 'J' ).order_by().distinct().annotate( x=Count('controlassistencia__estat') ).order_by().distinct().values_list( 'id', 'x' ) # q_f = q_alumnes.filter( controlassistencia__estat__codi_estat = 'F' ).order_by().distinct().annotate( x=Count('controlassistencia__estat') ).values_list( 'id', 'x' ) # dict_p, dict_j, dict_f = dict( q_p ), dict( q_j ), dict( q_f ) q_alumnes = Alumne.objects.filter( grup__curs__nivell = nivell ) q_data_inici = Q( impartir__dia_impartir__gte = data_inici ) q_data_fi = Q( impartir__dia_impartir__lte = data_fi ) q_filtre = q_data_inici & q_data_fi q_controls = ControlAssistencia.objects.filter( alumne__in = q_alumnes ).filter( q_filtre ) #[email protected] if settings.CUSTOM_NO_CONTROL_ES_PRESENCIA: # té en compte tots els dies encara que no s'hagi passat llista q_p = q_controls.order_by().values_list( 'id','alumne__id' ).distinct() else: q_p = q_controls.filter( estat__codi_estat__in = ('P','R' ) ).order_by().values_list( 'id','alumne__id' ).distinct() q_j = q_controls.filter( estat__codi_estat = 'J' ).order_by().values_list( 'id','alumne__id' ).distinct() q_f = q_controls.filter( estat__codi_estat = 'F' ).order_by().values_list( 'id','alumne__id' ).distinct() from itertools import groupby dict_p = {} data = sorted(q_p, key=lambda x: x[1]) for k, g in groupby( data, lambda x: x[1] ): dict_p[k] = len( list(g) ) dict_j = {} data = sorted(q_j, key=lambda x: x[1]) for k, g in groupby( data, lambda x: x[1] ): dict_j[k] = len( list(g) ) dict_f = {} data = sorted(q_f, key=lambda x: x[1]) for k, g in groupby( data, lambda x: x[1] ): dict_f[k] = len( list(g) ) #ajuntar dades diferents fonts alumnes = [] for alumne in q_alumnes.select_related( 'grup', 'grup__curs' ).order_by().distinct(): alumne.p = dict_p.get( alumne.id, 0) alumne.j = dict_j.get( alumne.id, 0) alumne.f = dict_f.get( alumne.id, 0) alumne.ca = alumne.p + alumne.j + alumne.f or 0.0 alumne.tpc = ( float( alumne.f ) / float( alumne.ca ) ) * 100.0 if alumne.ca > 0 else 0 alumne.tpc_assist = ( float( alumne.p ) / float( alumne.ca ) ) * 100.0 if alumne.ca > 0 else 0 alumnes.append(alumne) #---------------------- #choices = ( ('a', u'Nom alumne',), ('ca', u'Curs i alumne',),('n',u'Per % Assistència',), ('cn',u'Per Curs i % Assistència',), order_a = lambda a: ( a.cognoms, a.nom) order_ca = lambda a: ( a.grup.curs.nom_curs, a.grup.nom_grup, a.cognoms, a.nom ) order_n = lambda a: ( -1 * a.tpc, -1 * a.f ) order_cn = lambda a: ( a.grup.curs.nom_curs, a.grup.nom_grup , -1 * a.tpc) order = order_ca if ordenacio == 'ca' else order_n if ordenacio == 'n' else order_cn if ordenacio == 'cn' else order_a for alumne in sorted( [ a for a in alumnes if a.tpc > tpc ] , key=order ): filera = [] #-nom-------------------------------------------- camp = tools.classebuida() camp.enllac = '/tutoria/detallTutoriaAlumne/{0}/all'.format(alumne.pk ) camp.contingut = unicode(alumne) + ' (' + unicode(alumne.grup) + ')' filera.append(camp) #-docència-------------------------------------------- camp = tools.classebuida() camp.contingut = unicode(alumne.f) filera.append(camp) #-present-------------------------------------------- camp = tools.classebuida() camp.contingut = unicode(alumne.ca) filera.append(camp) #-%-------------------------------------------- camp = tools.classebuida() camp.contingut =u'{0:.2f}%'.format(alumne.tpc ) filera.append(camp) #-absent-------------------------------------------- camp = tools.classebuida() camp.contingut = unicode(alumne.p) filera.append(camp) #-justif-------------------------------------------- camp = tools.classebuida() camp.contingut = unicode(alumne.j) filera.append(camp) #-assist-------------------------------------------- camp = tools.classebuida() camp.contingut = u'{0:.2f}%'.format(alumne.tpc_assist) filera.append(camp) taula.fileres.append( filera ) report.append(taula) return report
def reportBaixaCarpeta( request, dia, professors ): import locale locale.setlocale(locale.LC_TIME, 'ca_ES.utf8') credentials = tools.getImpersonateUser(request) (user, _ ) = credentials professor = User2Professor( user ) reports = [] for professor in professors: report = tools.classebuida() report.professor = professor report.data = date( dia, "l, d M Y" ) imparticions = ( Impartir .objects.filter( dia_impartir = dia, horari__professor = professor ) .order_by( 'horari__hora__hora_inici' ) ) report.imparticions = [] for i in imparticions: Feina.objects.get_or_create( impartir = i , defaults = {'professor_darrera_modificacio':professor, } ) impartir = tools.classebuida() impartir.hora = i.horari.hora impartir.grup = i.horari.grup impartir.assignatura = i.horari.assignatura impartir.aula= i.horari.nom_aula impartir.profguard = i.feina.professor_fa_guardia impartir.comments = i.feina.comentaris_per_al_professor_guardia impartir.feina = i.feina.feina_a_fer impartir.comments2 = i.feina.comentaris_professor_guardia report.imparticions.append( impartir ) reports.append( report ) #from django.template import Context import cgi import os from django import http import time excepcio = None contingut = None try: #resultat = StringIO.StringIO( ) resultat = "/tmp/DjangoAula-temp-{0}-{1}.odt".format( time.time(), request.session.session_key ) #context = Context( {'reports' : reports, } ) path = None try: path = os.path.join( settings.PROJECT_DIR, '../customising/docs/carpetaBaixes.odt' ) except: path = os.path.join(os.path.dirname(__file__), 'templates/carpetaBaixes.odt') renderer = Renderer(path, {'reports' : reports, }, resultat) renderer.run() docFile = open(resultat, 'rb') contingut = docFile.read() docFile.close() os.remove(resultat) except Exception, e: excepcio = unicode( e )
def elsProfessors(request): (user, l4) = tools.getImpersonateUser(request) report = [] taula = tools.classebuida() taula.capceleres = [] taula.titol = tools.classebuida() taula.titol.contingut = "" capcelera = tools.classebuida() capcelera.amplade = 40 capcelera.contingut = u'Professor' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 60 capcelera.contingut = u'%Passa llista' taula.capceleres.append(capcelera) taula.fileres = [] for professor in Professor.objects.all(): filera = [] #-nom-------------------------------------------- camp_nom = tools.classebuida() camp_nom.enllac = None camp_nom.contingut = unicode(professor) filera.append(camp_nom) #-incidències-------------------------------------------- camp = tools.classebuida() camp.enllac = None qProfessor = Q(horari__professor=professor) qAvui = Q(dia_impartir=datetime.today()) & Q( horari__hora__hora_fi__lt=datetime.now()) qFinsAhir = Q(dia_impartir__lt=datetime.today()) qFinsAra = qFinsAhir | qAvui qTeGrup = Q(horari__grup__isnull=False) imparticions = (Impartir.objects.filter(qProfessor & qFinsAra & qTeGrup).exclude( pot_no_tenir_alumnes=True)) nImparticios = (imparticions.values_list( 'dia_impartir', 'horari__dia_de_la_setmana_id', 'horari__hora_id').distinct().count()) nImparticionsLlistaPassada = (imparticions.filter( professor_passa_llista__isnull=False).values_list( 'dia_impartir', 'horari__dia_de_la_setmana_id', 'horari__hora_id').distinct().count()) pct = nImparticionsLlistaPassada * 100 / nImparticios if nImparticios > 0 else 0 camp.contingut = u'{0:.0f}% ({1} classes impartides, {2} controls)'.format( pct, nImparticios, nImparticionsLlistaPassada) camp.codi_ordenacio = pct filera.append(camp) #-- taula.fileres.append(filera) #fileres_ordenades = sorted( taula.fileres, key = lambda x: x.codi_ordenacio ) #taula.fileres = fileres_ordenades report.append(taula) return render(request, 'report.html', { 'report': report, 'head': 'Informació professors', })
def dadesRelacioFamilies(request): credentials = tools.getImpersonateUser(request) (user, _) = credentials professor = User2Professor(user) report = [] grups = [t.grup for t in Tutor.objects.filter(professor=professor)] grups.append('Altres') for grup in grups: taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 25 capcelera.contingut = grup if grup == 'Altres' else u'{0} ({1})'.format( unicode(grup), unicode(grup.curs)) capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 35 capcelera.contingut = u'Correus Contacte' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 25 capcelera.contingut = u'Estat' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 15 capcelera.contingut = u'Acció' taula.capceleres.append(capcelera) taula.fileres = [] if grup == 'Altres': consulta_alumnes = Q(pk__in=[ ti.alumne.pk for ti in professor.tutorindividualitzat_set.all() ]) else: consulta_alumnes = Q(grup=grup) alumnes = Alumne.objects.filter(consulta_alumnes) familia_pendent_de_mirar_models = [ ( u'qualitativa', RespostaAvaluacioQualitativa, ), ( u'sortida(es)', NotificaSortida, ), ( u'incidencies o observacions', Incidencia, ), ( u'sanció(ns)', Sancio, ), ( u'expulsió(ns)', Expulsio, ), ( u'faltes assistència', ControlAssistencia, ), ] familia_pendent_de_mirar = {} for codi, model in familia_pendent_de_mirar_models: familia_pendent_de_mirar[codi] = (model.objects.filter( alumne__in=alumnes).filter( relacio_familia_revisada__isnull=True).filter( relacio_familia_notificada__isnull=False).values_list( 'alumne__pk', flat=True)) for alumne in alumnes: filera = [] #-Alumne-------------------------------------------- camp = tools.classebuida() camp.codi = alumne.pk camp.enllac = None camp.contingut = unicode(alumne) filera.append(camp) #-Correus Contacte-------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = unicode(', '.join( alumne.get_correus_relacio_familia())) filera.append(camp) #-Bloquejat-------------------------------------------- camp = tools.classebuida() camp.codi = alumne.pk camp.enllac = None bloquejat_text = [ (alumne.motiu_bloqueig, None), ] if alumne.motiu_bloqueig else [] nConnexions = alumne.user_associat.LoginUsuari.filter( exitos=True).count() camp.multipleContingut = bloquejat_text + [ ( u'( {0} connexs. )'.format(nConnexions), None, ), ] if nConnexions > 0: dataDarreraConnexio = alumne.user_associat.LoginUsuari.filter( exitos=True).order_by('-moment')[0].moment camp.multipleContingut.append(( u'Darrera Connx: {0}'.format( dataDarreraConnexio.strftime('%d/%m/%Y')), None, )) for ambit in familia_pendent_de_mirar: if alumne.pk in familia_pendent_de_mirar[ambit]: camp.multipleContingut.append(( u"{} x revisar".format(ambit), None, )) filera.append(camp) #-Acció-------------------------------------------- camp = tools.classebuida() camp.enllac = None accio_list = [ (u'Configura', '/open/configuraConnexio/{0}'.format(alumne.pk)), #(u'Bloquejar' if alumne.esta_relacio_familia_actiu() else u'Desbloquejar', '/open/bloquejaDesbloqueja/{0}'.format(alumne.pk)), (u'Envia benvinguda', '/open/enviaBenvinguda/{0}'.format(alumne.pk)), (u'Veure Portal', '/open/elMeuInforme/{0}'.format(alumne.pk)), ] camp.multipleContingut = accio_list filera.append(camp) #-- taula.fileres.append(filera) report.append(taula) return render( request, 'report.html', { 'report': report, 'head': 'Els meus alumnes tutorats', }, )
def alertaAssitenciaReport( data_inici, data_fi, nivell, tpc ): report = [] taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = u'Ranking absència alumnes nivell {0}'.format( nivell ) taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 40 capcelera.contingut = u'Alumne' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 15 capcelera.contingut = u'hores absent no justificat' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 10 capcelera.contingut = u'hores docència' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 10 capcelera.contingut = u'%absència no justificada (absènc.no.justif./docència)' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 10 capcelera.contingut = u'hores present' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 15 capcelera.contingut = u'hores absènc. justif.' taula.capceleres.append( capcelera ) taula.fileres = [] sql = u'''select TODO!!! PASSAR A QUERY API!!!!!! a.id_alumne, coalesce ( count( ca.id_control_assistencia ), 0 ) as ca, coalesce ( count( p.id_control_assistencia ), 0 ) as p, coalesce ( count( j.id_control_assistencia ), 0 ) as j, coalesce ( count( f.id_control_assistencia ), 0 ) as f, 1.0 * coalesce ( count( f.id_control_assistencia ), 0 ) / ( coalesce ( count( ca.id_control_assistencia ), 0 ) ) as tpc from alumne a inner join grup g on (g.id_grup = a.id_grup ) inner join curs c on (c.id_curs = g.id_curs) inner join nivell n on (n.id_nivell = c.id_nivell) inner join control_assistencia ca on (ca.id_estat is not null and ca.id_alumne = a.id_alumne ) inner join impartir i on ( i.id_impartir = ca.id_impartir ) left outer join control_assistencia p on ( p.id_estat in ( select id_estat from estat_control_assistencia where codi_estat in ('P','R' ) ) and p.id_control_assistencia = ca.id_control_assistencia ) left outer join control_assistencia j on ( j.id_estat = ( select id_estat from estat_control_assistencia where codi_estat = 'J' ) and j.id_control_assistencia = ca.id_control_assistencia ) left outer join control_assistencia f on ( f.id_estat = ( select id_estat from estat_control_assistencia where codi_estat = 'F' ) and f.id_control_assistencia = ca.id_control_assistencia ) where n.id_nivell = {0} and i.dia_impartir >= '{1}' and i.dia_impartir <= '{2}' group by a.id_alumne having 1.0 * coalesce ( count( f.id_control_assistencia ), 0 ) / coalesce ( count( ca.id_control_assistencia ), 0 ) > ( 1.0 * {3} / 100) order by 1.0 * coalesce ( count( f.id_control_assistencia ), 0 ) / coalesce ( count( ca.id_control_assistencia ), 0 ) desc '''.format( nivell.pk, data_inici, data_fi, tpc ) for alumne in Alumne.objects.raw( sql ): filera = [] #-nom-------------------------------------------- camp = tools.classebuida() camp.enllac = '/tutoria/detallTutoriaAlumne/{0}/all'.format(alumne.pk ) camp.contingut = unicode(alumne) + ' (' + unicode(alumne.grup) + ')' filera.append(camp) #-docència-------------------------------------------- camp = tools.classebuida() camp.contingut = unicode(alumne.f) filera.append(camp) #-present-------------------------------------------- camp = tools.classebuida() camp.contingut = unicode(alumne.ca) filera.append(camp) #-%-------------------------------------------- camp = tools.classebuida() camp.contingut =u'{0:.2f}%'.format(alumne.tpc * 100) filera.append(camp) #-absent-------------------------------------------- camp = tools.classebuida() camp.contingut = unicode(alumne.p) filera.append(camp) #-justif-------------------------------------------- camp = tools.classebuida() camp.contingut = unicode(alumne.j) filera.append(camp) taula.fileres.append( filera ) report.append(taula) return report
def duplicats_rpt(): report = [] taula = tools.classebuida() taula.tabTitle = 'Duplicacions detectades' taula.titol = tools.classebuida() taula.titol.contingut = u'Duplicacions detectades ' taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 120 capcelera.contingut = u'Grup duplicat' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 120 capcelera.contingut = u'Opcions' taula.capceleres.append( capcelera ) taula.fileres = [] for a in Alumne.objects.filter( data_baixa__isnull = True ): q_mateix_cognom = Q( cognoms = a.cognoms ) q_mateix_nom = Q( nom = a.nom, ) q_mateix_neixement = Q( data_neixement = a.data_neixement ) q_mateixa_altres = Q( adreca = a.adreca, telefons = a.telefons, localitat = a.localitat, centre_de_procedencia = a.centre_de_procedencia, adreca__gte= u"" ) condicio1 = q_mateix_nom & q_mateix_cognom & q_mateix_neixement condicio2 = q_mateix_nom & q_mateix_cognom & q_mateixa_altres condicio3 = q_mateix_nom & q_mateixa_altres & q_mateix_neixement alumne_grup = Alumne.objects.filter( condicio1 | condicio2 | condicio3 ) if alumne_grup.count() > 1: filera = [] #-grup-------------------------------------------- camp = tools.classebuida() camp.multipleContingut = [ (u'{0} {1}'.format(ag, ag.grup.nom_grup ), None ) for ag in alumne_grup ] filera.append(camp) #-opcions-------------------------------------------- camp = tools.classebuida() camp.esMenu = True primer_alumne = a #list( chain( alumne_grup.filter( data_baixa__isnull = False).order_by( u'data_baixa' ) , alumne_grup.filter( data_baixa__isnull = True) ) )[0] camp.multipleContingut = [ (u'Fusionar', u'/alumnes/fusiona/{0}'.format( primer_alumne.pk )) , ] filera.append(camp) taula.fileres.append( filera ) report.append(taula) return report
def calcula_menu(user, path): if not user.is_authenticated(): return #mire a quins grups està aquest usuari: al = Group.objects.get_or_create(name='alumne')[0] in user.groups.all() di = not al and Group.objects.get_or_create( name='direcció')[0] in user.groups.all() pr = not al and Group.objects.get_or_create( name='professors')[0] in user.groups.all() pl = not al and Group.objects.get_or_create( name='professional')[0] in user.groups.all() co = not al and Group.objects.get_or_create( name='consergeria')[0] in user.groups.all() pg = not al and Group.objects.get_or_create( name='psicopedagog')[0] in user.groups.all() so = not al and Group.objects.get_or_create( name='sortides')[0] in user.groups.all() tu = not al and pr and ( User2Professor(user).tutor_set.exists() or User2Professor(user).tutorindividualitzat_set.exists()) tots = di or pr or pl or co or al or pg #Comprovar si té missatges sense llegir nMissatges = user.destinatari_set.filter( moment_lectura__isnull=True).count() fa2segons = datetime.now() - timedelta(seconds=2) nMissatgesDelta = user.destinatari_set.filter( moment_lectura__gte=fa2segons).count() #Comprovar si té expulsions sense tramitar o cal fer expulsions per acumulació teExpulsionsSenseTramitar = False if pr: professor = User2Professor(user) teExpulsionsSenseTramitar = professor.expulsio_set.exclude( tramitacio_finalitzada=True).exists() #Acumulació Incidències if settings.CUSTOM_INCIDENCIES_PROVOQUEN_EXPULSIO and not teExpulsionsSenseTramitar: professional = User2Professional(user) teExpulsionsSenseTramitar = (Alumne.objects.order_by().filter( incidencia__professional=professional, incidencia__tipus__es_informativa=False, incidencia__gestionada_pel_tutor=False, incidencia__es_vigent=True).annotate( n=Count('incidencia')).filter(n__gte=3).exists()) #Comprovar si hi ha una qualitativa oberta hiHaUnaQualitativaOberta = False if pr: from aula.apps.avaluacioQualitativa.models import AvaluacioQualitativa hiHaUnaQualitativaOberta = AvaluacioQualitativa.objects.filter( data_obrir_avaluacio__lte=date.today(), data_tancar_avaluacio__gte=date.today()).exists() menu = { 'items': [], 'subitems': [], 'subsubitems': [], } try: nom_path = resolve(path).url_name except: return menu menu["esalumne"] = al if al: alumneuser = AlumneUser.objects.get(id=user.id) alumne = alumneuser.getAlumne() menu["nomusuari"] = u"Família de {alumne}".format(alumne=alumne.nom) else: menu["nomusuari"] = user.first_name or user.username try: menu_id, submenu_id, subsubmenu_id = nom_path.split('__')[:3] except: return menu arbre_tutoria = ( ("Actuacions", 'tutoria__actuacions__list', tu, None, None), ("Incidències de Tutor", 'tutoria__incidencies__list', tu, None, None), ("Justificar", 'tutoria__justificar__pre_justificar', tu, None, None), ("Cartes", 'tutoria__cartes_assistencia__gestio_cartes', tu, None, None), ("Alumnes", 'tutoria__alumnes__list', tu, None, None), ("Assistència", 'tutoria__assistencia__list_entre_dates', tu, None, None), ("Informe", 'tutoria__alumne__informe_setmanal', tu, None, None), ("Portal", 'tutoria__relacio_families__dades_relacio_families', tu, None, None), ("Seguiment", 'tutoria__seguiment_tutorial__formulari', tu, None, None), ) if settings.CUSTOM_TUTORS_INFORME: arbre_tutoria += (("Impressió Faltes i Incid.", 'tutoria__informe__informe_faltes_incidencies', tu, None, None), ) if hasattr(settings, 'CUSTOM_MODUL_SORTIDES_ACTIU' ) and settings.CUSTOM_MODUL_SORTIDES_ACTIU and (di or pr): professor = User2Professor(user) filtre = [ 'P', 'R', ] te_sortides_actives = (Sortida.objects.exclude(estat='E').filter( estat__in=filtre).filter(data_inici__gte=datetime.now()).filter( tutors_alumnes_convocats=professor).exists()) arbre_tutoria += (("Sortides", 'tutoria__justificarSortida__list', tu, (u'!', 'info') if te_sortides_actives else None, None), ) arbre1 = ( #--Consergeria-------------------------------------------------------------------------- ('consergeria', 'Consergeria', 'consergeria__missatges__envia_tutors', co, None, ( ("Missatge a tutors", 'consergeria__missatges__envia_tutors', co, None, None), ("Incidència per retard", 'consergeria__incidencia__onbehalf', co, None, None), )), #--Aula-------------------------------------------------------------------------- # id, nom vista seg label ( 'aula', 'Aula', 'blanc__blanc__blanc', pr, teExpulsionsSenseTramitar or hiHaUnaQualitativaOberta, ( ("Presencia", 'aula__horari__horari', pr, None, None), #("Alumnes", 'aula__alumnes__alumnes_i_assignatures', pr, None, None ), ( "Alumnes", 'aula__alumnes__blanc', pr, None, (("Els meus alumnes", 'aula__alumnes__alumnes_i_assignatures', pr, None), ), ), ( "Incidències", 'aula__incidencies__blanc', pr, (u'!', 'info') if teExpulsionsSenseTramitar else None, ( ("Incidències", 'aula__incidencies__les_meves_incidencies', pr, (u'!', 'info') if teExpulsionsSenseTramitar else None), ("Nova Incidència (fora d'aula)", 'aula__incidencies__posa_incidencia', pr, None), ("Recull Expulsió", 'aula__incidencies__posa_expulsio', pr, None), ), ), ("Matèries", 'aula__materies__blanc', pr, None, (("Llistat entre dates", 'aula__materies__assistencia_llistat_entre_dates', pr, None), ("Calculadora UF", 'aula__materies__calculadora_uf', pr, None))), ("Qualitativa", 'aula__qualitativa__les_meves_avaulacions_qualitatives', pr, (u'!', 'info') if hiHaUnaQualitativaOberta else None, None), )), #--Tutoria-------------------------------------------------------------------------- ('tutoria', 'Tutoria', 'tutoria__actuacions__list', tu, None, arbre_tutoria), #--Gestió-------------------------------------------------------------------------- ('gestio', 'Gestió', 'gestio__reserva_aula__list', co or pl, None, ( ("Reserva Aula", 'gestio__reserva_aula__list', co or pl, None, None), ("Cerca Alumne", 'gestio__usuari__cerca', co or pl, None, None), ("Cerca Professor", 'gestio__professor__cerca', co or pl, None, None), )), #--psicopedagog-------------------------------------------------------------------------- ('psico', 'Psicopedagog', 'psico__informes_alumne__list', pg or di, None, ( ("Alumne", 'psico__informes_alumne__list', pg or di, None, None), ("Actuacions", 'psico__actuacions__list', pg or di, None, None), )), #--Coord.Pedag-------------------------------------------------------------------------- ( 'coordinacio_pedagogica', 'Coord.Pedag', 'coordinacio_pedagogica__qualitativa__blanc', di, None, ( ( "Qualitativa", 'coordinacio_pedagogica__qualitativa__blanc', di, None, ( ("Avaluacions", 'coordinacio_pedagogica__qualitativa__avaluacions', di, None), ("Items", 'coordinacio_pedagogica__qualitativa__items', di, None), ("Resultats", 'coordinacio_pedagogica__qualitativa__resultats_qualitatives', di, None), ), ), ("Seguiment Tutorial", "coordinacio_pedagogica__seguiment_tutorial__preguntes", di, None, None), ), ), #--Coord.Alumnes-------------------------------------------------------------------------- ('coordinacio_alumnes', 'Coord.Alumnes', 'coordinacio_alumnes__ranking__list', di, None, ( ("Alertes Incid.", 'coordinacio_alumnes__ranking__list', di, None, None), ("Alertes Assist.", 'coordinacio_alumnes__assistencia_alertes__llistat', di, None, None), ("Cartes", 'coordinacio_alumnes__assistencia__cartes', di, None, None), ("Sancions", 'coordinacio_alumnes__sancions__sancions', di, None, None), ("Passa llista grup", 'coordinacio_alumnes__presencia__passa_llista_a_un_grup_tria', di, None, None), ("Impressió Faltes i Incid.", 'coordinacio_alumnes__alumne__informe_faltes_incidencies', di, None, None), )), #--Coord.Profess.-------------------------------------------------------------------------- ( 'professorat', 'Coord.Prof', 'professorat__baixes__blanc', di, None, ( ( "Feina Absència", 'professorat__baixes__blanc', di, None, ( ('Posar feina', 'professorat__baixes__complement_formulari_tria', di, None), ('Imprimir feina', 'professorat__baixes__complement_formulari_impressio_tria', di, None), ), ), ( "Tutors", 'professorat__tutors__blanc', di, None, ( ('Tutors Grups', 'professorat__tutors__tutors_grups', di, None), ('Tutors individualitzat', 'professorat__tutors__tutors_individualitzats', di, None), ), ), ("Professors", 'professorat__professors__list', di, None, None), ("Estat Tramitació Exp.", 'professorat__expulsions__control_tramitacio', di, None, None), ), ), #--Administració-------------------------------------------------------------------------- ( 'administracio', 'Admin', 'administracio__sincronitza__blanc', di, None, ( ( "Sincronitza", 'administracio__sincronitza__blanc', di, None, ( ("Alumnes ESO/BAT", 'administracio__sincronitza__esfera', di, None), ("Alumnes Cicles", 'administracio__sincronitza__saga', di, None), ("Horaris", 'administracio__sincronitza__kronowin', di, None), ("Aules", 'gestio__aula__assignacomentari', di, None), ("Reprograma", 'administracio__sincronitza__regenerar_horaris', di, None), ), ), ("Reset Passwd", 'administracio__professorat__reset_passwd', di, None, None), ("Càrrega Inicial", 'administracio__configuracio__carrega_inicial', di, None, None), ("Promocions", 'administracio__promocions__llista', di, None, None), # ("Nou Alumne", 'administracio__alumnes__noualumne', di, None, None), # Aquesta pantalla encara no té implementada la seva funcionalitat. # Queda pendent acabar-la, o eliminar-la de l'aplicació. )), #--relacio_families-------------------------------------------------------------------------- ('relacio_families', u'Famílies', 'relacio_families__informe__el_meu_informe', al, None, ( ("Informe", 'relacio_families__informe__el_meu_informe', al, None, None), ("Paràmetres", 'relacio_families__configuracio__canvi_parametres', al, None, None), )), ) arbre2 = ( #--Varis-------------------------------------------------------------------------- ('varis', 'Ajuda i Avisos', 'varis__about__about' if al else 'varis__elmur__veure', tots, nMissatges > 0, ( ("Notificacions", 'varis__elmur__veure', di or pr or pl or co or pg, (nMissatgesDelta, 'info' if nMissatgesDelta < 10 else 'danger') if nMissatgesDelta > 0 else None, None), ("Missatge a professorat o PAS", 'varis__prof_i_pas__envia_professors_i_pas', pr or pl or co, None, None), ("Avisos de Seguretat", 'varis__avisos__envia_avis_administradors', tots, None, None), ("About", 'varis__about__about', tots, None, None), )), ) arbreSortides = () if hasattr(settings, 'CUSTOM_MODUL_SORTIDES_ACTIU' ) and settings.CUSTOM_MODUL_SORTIDES_ACTIU and (di or pr): filtre = [] socEquipDirectiu = User.objects.filter( pk=user.pk, groups__name='direcció').exists() socCoordinador = User.objects.filter(pk=user.pk, groups__name__in=['sortides' ]).exists() #si sóc equip directiu només les que tinguin estat 'R' (Revisada pel coordinador) if socEquipDirectiu: filtre.append('R') #si sóc coordinador de sortides només les que tinguin estat 'P' (Proposada) if socCoordinador: filtre.append('P') n_avis_sortides = (Sortida.objects.exclude(estat='E').filter( estat__in=filtre).distinct().count()) n_avis_sortides_meves = (Sortida.objects.filter(estat='E').filter( professor_que_proposa__pk=user.pk).distinct().count()) arbreSortides = ( #--Varis-------------------------------------------------------------------------- ('sortides', 'Activitats', 'sortides__meves__list', di or pr, n_avis_sortides + n_avis_sortides_meves > 0, ( (u"Històric", 'sortides__all__list', di or so, None, None), (u"Gestió d'activitats", 'sortides__gestio__list', di or so, ( n_avis_sortides, 'info', ) if n_avis_sortides > 0 else None, None), (u"Les meves propostes d'activitats", 'sortides__meves__list', pr, ( n_avis_sortides_meves, 'info', ) if n_avis_sortides_meves > 0 else None, None), )), ) arbre = arbre1 + arbreSortides + arbre2 for item_id, item_label, item_url, item_condicio, alerta, subitems in arbre: if not item_condicio: continue actiu = (menu_id == item_id) item = classebuida() item.label = item_label item.url = reverse(item_url) item.active = 'active' if actiu else '' item.alerta = alerta menu['items'].append(item) if actiu: for subitem_label, subitem_url, subitem__condicio, medalla, subsubitems in subitems: if not subitem__condicio: continue actiu = (submenu_id == subitem_url.split('__')[1]) subitem = classebuida() subitem.label = safe(subitem_label) subitem.url = reverse(subitem_url) subitem.active = 'active' if actiu else '' if medalla: omedalla = classebuida() omedalla.valor = medalla[0] omedalla.tipus = medalla[1] subitem.medalla = omedalla menu['subitems'].append(subitem) subitem.subsubitems = [] if subsubitems: for subitem_label, subitem_url, subitem_condicio, subitem_medalla in subsubitems: subsubitem = classebuida() subsubitem.label = safe(subitem_label) subsubitem.url = reverse(subitem_url) if subitem_medalla: omedalla = classebuida() omedalla.valor = subitem_medalla[0] omedalla.tipus = subitem_medalla[1] subsubitem.medalla = omedalla subitem.subsubitems.append(subsubitem) if actiu and subsubmenu_id == 'blanc': menu['subsubitems'] = subitem.subsubitems return menu
def alertaAssitenciaReport( data_inici, data_fi, nivell, tpc , ordenacio ): report = [] taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = u'Ranking absència alumnes nivell {0}'.format( nivell ) taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 300 capcelera.contingut = u'Alumne' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 70 capcelera.contingut = u'hores absent no justificat' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 70 capcelera.contingut = u'hores docència' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 100 capcelera.contingut = u'%absència no justificada (absènc.no.justif./docència)' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 70 capcelera.contingut = u'hores present' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 70 capcelera.contingut = u'hores absènc. justif.' taula.capceleres.append( capcelera ) capcelera = tools.classebuida() capcelera.amplade = 70 capcelera.contingut = u'% assistència' taula.capceleres.append( capcelera ) taula.fileres = [] q_nivell = Q( grup__curs__nivell = nivell ) q_data_inici = Q( controlassistencia__impartir__dia_impartir__gte = data_inici ) q_data_fi = Q( controlassistencia__impartir__dia_impartir__lte = data_fi ) q_filte = q_nivell & q_data_inici & q_data_fi q_alumnes = Alumne.objects.filter( q_filte ) q_p = q_alumnes.filter( controlassistencia__estat__codi_estat__in = ('P','R' ) ).order_by().distinct().annotate( x=Count('controlassistencia__estat') ).values_list( 'id', 'x' ) q_j = q_alumnes.filter( controlassistencia__estat__codi_estat = 'J' ).order_by().distinct().annotate( x=Count('controlassistencia__estat') ).order_by().distinct().values_list( 'id', 'x' ) q_f = q_alumnes.filter( controlassistencia__estat__codi_estat = 'F' ).order_by().distinct().annotate( x=Count('controlassistencia__estat') ).values_list( 'id', 'x' ) dict_p, dict_j, dict_f = dict( q_p ), dict( q_j ), dict( q_f ) #ajuntar dades diferents fonts alumnes = [] for alumne in q_alumnes.select_related( 'grup', 'grup__curs' ).order_by().distinct(): alumne.p = dict_p.get( alumne.id, 0) alumne.j = dict_j.get( alumne.id, 0) alumne.f = dict_f.get( alumne.id, 0) alumne.ca = alumne.p + alumne.j + alumne.f or 0.0 alumne.tpc = ( float( alumne.f ) / float( alumne.ca ) ) * 100.0 if alumne.ca > 0 else 0 alumne.tpc_assist = ( float( alumne.p ) / float( alumne.ca ) ) * 100.0 if alumne.ca > 0 else 0 alumnes.append(alumne) #---------------------- #choices = ( ('a', u'Nom alumne',), ('ca', u'Curs i alumne',),('n',u'Per % Assistència',), ('cn',u'Per Curs i % Assistència',), order_a = lambda a: ( a.cognoms, a.nom) order_ca = lambda a: ( a.grup.curs.nom_curs, a.grup.nom_grup, a.cognoms, a.nom ) order_n = lambda a: ( -1 * a.tpc, -1 * a.f ) order_cn = lambda a: ( a.grup.curs.nom_curs, a.grup.nom_grup , -1 * a.tpc) order = order_ca if ordenacio == 'ca' else order_n if ordenacio == 'n' else order_cn if ordenacio == 'cn' else order_a for alumne in sorted( [ a for a in alumnes if a.tpc > tpc ] , key=order ): filera = [] #-nom-------------------------------------------- camp = tools.classebuida() camp.enllac = '/tutoria/detallTutoriaAlumne/{0}/all'.format(alumne.pk ) camp.contingut = unicode(alumne) + ' (' + unicode(alumne.grup) + ')' filera.append(camp) #-docència-------------------------------------------- camp = tools.classebuida() camp.contingut = unicode(alumne.f) filera.append(camp) #-present-------------------------------------------- camp = tools.classebuida() camp.contingut = unicode(alumne.ca) filera.append(camp) #-%-------------------------------------------- camp = tools.classebuida() camp.contingut =u'{0:.2f}%'.format(alumne.tpc ) filera.append(camp) #-absent-------------------------------------------- camp = tools.classebuida() camp.contingut = unicode(alumne.p) filera.append(camp) #-justif-------------------------------------------- camp = tools.classebuida() camp.contingut = unicode(alumne.j) filera.append(camp) #-assist-------------------------------------------- camp = tools.classebuida() camp.contingut = u'{0:.2f}%'.format(alumne.tpc_assist) filera.append(camp) taula.fileres.append( filera ) report.append(taula) return report
def justificadorMKTable(request, year, month, day): credentials = tools.getImpersonateUser(request) (user, l4) = credentials professor = User2Professor(user) data = date(year=int(year), month=int(month), day=int(day)) q_grups_tutorats = Q(grup__in=[t.grup for t in professor.tutor_set.all()]) q_alumnes_tutorats = Q(pk__in=[ ti.alumne.pk for ti in professor.tutorindividualitzat_set.all() ]) alumnes = list( Alumne.objects.filter(q_grups_tutorats | q_alumnes_tutorats).order_by( 'grup', 'cognoms', 'nom')) #busco el dilluns i el divendres dia_de_la_setmana = data.weekday() delta = timedelta(days=(-1 * dia_de_la_setmana)) dilluns = data + delta dies = [dilluns + timedelta(days=delta) for delta in [0, 1, 2, 3, 4]] q_controls = (Q(impartir__dia_impartir__in=dies) & Q(alumne__in=alumnes)) controls = list( ControlAssistencia.objects.select_related( 'alumne', 'estat', 'estat_backup', 'impartir__horari', 'impartir__horari__assignatura', 'impartir__horari__hora', 'professor', 'professor_backup', ).filter(q_controls)) #marc horari per cada dia dades = tools.classebuida() dades.alumnes = alumnes dades.c = [] #controls dades.dia_hores = tools.diccionari() dades.marc_horari = {} for delta in [0, 1, 2, 3, 4]: dia = dilluns + timedelta(days=delta) diferents_hores = { control.impartir.horari.hora for control in controls if control.impartir.dia_impartir == dia } if (diferents_hores): diferents_hores_ordenat = sorted(list(diferents_hores), key=lambda x: x.hora_inici) dades.dia_hores[dia] = tools.llista(diferents_hores_ordenat) dades.marc_horari[dia] = { 'desde': diferents_hores_ordenat[0], 'finsa': diferents_hores_ordenat[-1] } dades.quadre = tools.diccionari() for alumne in dades.alumnes: dades.quadre[unicode(alumne)] = [] for dia, hores in dades.dia_hores.itemsEnOrdre(): hora_inici = dades.marc_horari[dia]['desde'] controls_alumne = [ control for control in controls if control.impartir.dia_impartir == dia and control.alumne == alumne ] for hora in hores: cella = tools.classebuida() cella.txt = '' controls_alumne_hora = [ c for c in controls_alumne if c.impartir.horari.hora == hora ] hiHaControls = bool(controls_alumne_hora) haPassatLlista = hiHaControls and bool( [c for c in controls_alumne_hora if c.estat is not None]) cella.c = [c for c in controls_alumne_hora] for item in cella.c: item.professor2show = item.professor or ( item.impartir.horari.professor if item.impartir.horari else ' ') item.estat2show = item.estat or " " dades.c.extend(cella.c) if not hiHaControls: cella.color = '#505050' else: if not haPassatLlista: cella.color = '#E0E0E0' else: cella.color = 'white' if hora == hora_inici: cella.primera_hora = True else: cella.primera_hora = False dades.quadre[unicode(alumne)].append(cella) return dades
def reportFaltesIncidencies(dataInici, dataFi, alumnes_informe=[], alumnes_recordatori=[], grups=[], request=None): import locale locale.setlocale(locale.LC_TIME, 'ca_ES.utf8') reports = [] for nivell in Nivell.objects.all(): for curs in nivell.curs_set.all(): for grup in curs.grup_set.all(): q_alumneTriat = Q(pk__in=[a.pk for a in alumnes_informe] + [a.pk for a in alumnes_recordatori]) q_grupTriat = Q(grup__in=grups) q_filtre_alumn = (q_alumneTriat & q_grupTriat) for alumne in grup.alumne_set.filter( q_filtre_alumn).distinct(): report = tools.classebuida() report.informe = alumne in alumnes_informe report.recordatori = alumne in alumnes_recordatori report.resum = [] report.assistencia = [] report.observacions = [] report.incidencies = [] report.expulsions = [] report.correus = u', '.join( alumne.get_correus_relacio_familia()) report.data_inici = dataInici.strftime('%d/%m/%Y') report.data_fi = dataFi.strftime('%d/%m/%Y') report.data = dataFi.strftime('%d de %B de %Y') report.alumne = alumne q_desde = Q(impartir__dia_impartir__gte=dataInici) q_finsa = Q(impartir__dia_impartir__lte=dataFi) q_presencia = Q(estat__codi_estat='P') q_null = Q(estat__isnull=True) n_faltes = 0 n_retards = 0 n_justificades = 0 for ca in alumne.controlassistencia_set.filter( q_desde & q_finsa & ~q_presencia & ~q_null).order_by('impartir__dia_impartir', 'impartir__horari'): itemAssitencia = tools.classebuida() itemAssitencia.tipus = ca.estat itemAssitencia.dia = ca.impartir.dia_impartir.strftime( '%d/%m/%Y') itemAssitencia.hora = ca.impartir.horari.hora itemAssitencia.assignatura = ca.impartir.horari.assignatura.getLongName( ) if ca.estat.codi_estat == 'R': n_retards += 1 elif ca.estat.codi_estat == 'F': n_faltes += 1 elif ca.estat.codi_estat == 'J': n_justificades += 1 report.assistencia.append(itemAssitencia) item = tools.classebuida() item.item = u'Faltes No Justificades' item.valor = n_faltes report.resum.append(item) item = tools.classebuida() item.item = u'Faltes Justificades' item.valor = n_justificades report.resum.append(item) item = tools.classebuida() item.item = u'Retards' item.valor = n_retards report.resum.append(item) q_informativa = Q(tipus__es_informativa=True) q_desde = Q(dia_incidencia__gte=dataInici) q_finsa = Q(dia_incidencia__lte=dataFi) n_informatives = 0 for incidencia in alumne.incidencia_set.filter( q_informativa & q_desde & q_finsa): NomAssignatura = '' try: NomAssignatura = incidencia.control_assistencia.impartir.horari.assignatura.getLongName() \ if incidencia.es_incidencia_d_aula() else '' except: pass item = tools.classebuida() item.dia = incidencia.dia_incidencia.strftime( '%d/%m/%Y') item.hora = incidencia.franja_incidencia.hora_inici.strftime( '%H:%M') item.assignatura = NomAssignatura item.professor = incidencia.professional item.observacio = incidencia.descripcio_incidencia n_informatives += 1 report.observacions.append(item) item = tools.classebuida() item.item = u'Observacions' item.valor = n_informatives report.resum.append(item) n_incidencies = 0 for incidencia in alumne.incidencia_set.filter( ~q_informativa & q_desde & q_finsa): NomAssignatura = '' try: NomAssignatura = incidencia.control_assistencia.impartir.horari.assignatura.getLongName() \ if incidencia.es_incidencia_d_aula() else '' except: pass item = tools.classebuida() item.dia = incidencia.dia_incidencia.strftime( '%d/%m/%Y') item.hora = incidencia.franja_incidencia.hora_inici.strftime( '%H:%M') item.assignatura = NomAssignatura item.professor = incidencia.professional item.incidencia = incidencia.descripcio_incidencia n_incidencies += 1 report.incidencies.append(item) item = tools.classebuida() item.item = u'Incidències' item.valor = n_incidencies report.resum.append(item) q_desde = Q(dia_expulsio__gte=dataInici) q_finsa = Q(dia_expulsio__lte=dataFi) q_esborrany = Q(estat='ES') n_expulsions = 0 for expulsio in alumne.expulsio_set.filter(q_desde & q_finsa & ~q_esborrany): NomAssignatura = '' try: NomAssignatura = expulsio.control_assistencia.impartir.horari.assignatura.getLongName() \ if expulsio.es_incidencia_d_aula() else '' except: pass item = tools.classebuida() item.dia = expulsio.dia_expulsio.strftime('%d/%m/%Y') item.hora = expulsio.franja_expulsio.hora_inici.strftime( '%H:%M') item.assignatura = NomAssignatura item.professor = expulsio.professor item.motiu = expulsio.motiu n_expulsions += 1 report.expulsions.append(item) item = tools.classebuida() item.item = u'Expulsions' item.valor = n_expulsions report.resum.append(item) report.detall = report.informe and ( n_expulsions + n_incidencies + n_informatives + n_faltes + n_justificades + n_retards > 0) if report: reports.append(report) #endfor alumne #from django.template import Context from appy.pod.renderer import Renderer import cgi import os from django import http import time excepcio = None contingut = None try: #resultat = StringIO.StringIO( ) resultat = "/tmp/DjangoAula-temp-{0}-{1}.odt".format( time.time(), request.session.session_key) #context = Context( {'reports' : reports, } ) try: path = os.path.join(settings.PROJECT_DIR, '../customising/docs/faltesIncidencies.odt') except: path = os.path.join(os.path.dirname(__file__), 'templates/faltesIncidencies.odt') renderer = Renderer(path, { 'reports': reports, }, resultat) renderer.run() docFile = open(resultat, 'rb') contingut = docFile.read() docFile.close() os.remove(resultat) except Exception, e: excepcio = unicode(e)
def list(request): (user, l4) = tools.getImpersonateUser(request) report = [] taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = "" taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 200 capcelera.contingut = u'{0}'.format(u'Tasques importants pendents') taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 300 capcelera.contingut = u'Tasca' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 400 capcelera.contingut = u'Contingut' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 400 capcelera.contingut = u'Esborrar' taula.capceleres.append(capcelera) taula.fileres = [] for todo in ToDo.objects.filter(propietari=request.user, estat='P', prioritat='V'): filera = [] camp = tools.classebuida() camp.contingut = u'{0}'.format(todo.data) filera.append(camp) camp = tools.classebuida() camp.contingut = u'{0}'.format(todo.tasca) camp.enllac = todo.enllac filera.append(camp) camp = tools.classebuida() camp.contingut = u'{0}'.format(todo.informacio_adicional) filera.append(camp) camp = tools.classebuida() camp.contingut = u'[ X ]' camp.enllac = '/todo/esborra/{0}'.format(todo.pk) filera.append(camp) taula.fileres.append(filera) if taula.fileres: report.append( taula) #----------------------------------------------------- taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = "" taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 200 capcelera.contingut = u'{0}'.format(u'Tasques Pendents') taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 300 capcelera.contingut = u'Tasca' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 400 capcelera.contingut = u'Contingut' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 400 capcelera.contingut = u'Esborrar' taula.capceleres.append(capcelera) taula.fileres = [] for todo in ToDo.objects.filter(propietari=request.user, estat='P').exclude(prioritat='V'): filera = [] camp = tools.classebuida() camp.contingut = u'{0}'.format(todo.data) filera.append(camp) camp = tools.classebuida() camp.contingut = u'{0}'.format(todo.tasca) camp.enllac = todo.enllac filera.append(camp) camp = tools.classebuida() camp.contingut = u'{0}'.format(todo.informacio_adicional) filera.append(camp) camp = tools.classebuida() camp.contingut = u'[ X ]' camp.enllac = '/todo/esborra/{0}'.format(todo.pk) filera.append(camp) taula.fileres.append(filera) report.append( taula) #----------------------------------------------------- taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = "" taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 200 capcelera.contingut = u'{0}'.format(u'Tasques Realitzades') taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 300 capcelera.contingut = u'Tasca' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 400 capcelera.contingut = u'Contingut' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 400 capcelera.contingut = u'Esborrar' taula.capceleres.append(capcelera) taula.fileres = [] for todo in ToDo.objects.filter(propietari=request.user, estat='R'): filera = [] camp = tools.classebuida() camp.contingut = u'{0}'.format(todo.data) filera.append(camp) camp = tools.classebuida() camp.contingut = u'{0}'.format(todo.tasca) camp.enllac = todo.enllac filera.append(camp) camp = tools.classebuida() camp.contingut = u'{0}'.format(todo.informacio_adicional) filera.append(camp) camp = tools.classebuida() camp.contingut = u'[ X ]' camp.enllac = '/todo/esborra/{0}'.format(todo.pk) filera.append(camp) taula.fileres.append(filera) if taula.fileres: report.append( taula) #----------------------------------------------------- return render_to_response('reportToDo.html', { 'report': report, 'head': u'Tasques', }, context_instance=RequestContext(request))
def indicadorsReport(): report = [] taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = u'Indicadors Absentisme' taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 10 capcelera.contingut = u'Curs' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 10 capcelera.contingut = u'Nivell' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 8 capcelera.contingut = u'% ind.' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 8 capcelera.contingut = u'1rTrim' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 8 capcelera.contingut = u'2nTrim' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 8 capcelera.contingut = u'3rTrim' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 8 capcelera.contingut = u'Curs' taula.capceleres.append(capcelera) if len(settings.CUSTOM_INDICADORS) == 0: # Report per defecte si no n'hi ha cap indicador taula.fileres = [] filera = [] camp = tools.classebuida() camp.contingut = "No n'hi ha indicadors definits" filera.append(camp) taula.fileres.append(filera) filera = [] camp = tools.classebuida() camp.contingut = "S'han de definir a CUSTOM_INDICADORS" filera.append(camp) taula.fileres.append(filera) report.append(taula) return (report, None) taula.fileres = [] response = HttpResponse(content_type='text/csv') response['Content-Disposition'] = 'attachment; filename="indicadors.csv"' writer = csv.writer(response) writer.writerow([ 'Curs', 'Nivell', '%', 'ini1rT', 'fi1rT', 'sup1rT', 'tot1rT', 'ind1rT', 'ini2nT', 'fi2nT', 'sup2nT', 'tot2nT', 'ind2nT', 'ini3rT', 'fi3rT', 'sup3rT', 'tot3rT', 'ind3rT', 'inicurs', 'ficurs', 'supc', 'totc', 'indc' ]) for ind in settings.CUSTOM_INDICADORS: data = date.today() data = datetime(year=data.year, month=data.month, day=data.day) dtrim0 = datetime.strptime(ind[0], '%d/%m/%Y') dtrim1 = datetime.strptime(ind[1], '%d/%m/%Y') dtrim2 = datetime.strptime(ind[2], '%d/%m/%Y') dtrim3 = datetime.strptime(ind[3], '%d/%m/%Y') nivell = ind[4] tpc = ind[5] trim1 = 0 trim2 = 0 trim3 = 0 curs = 0 sup1 = sup2 = sup3 = quan1 = quan2 = quan3 = 0 if data > dtrim1: (trim1, sup1, quan1) = indicadorAbsentisme(dtrim0, dtrim1, nivell, tpc) if data > dtrim2: (trim2, sup2, quan2) = indicadorAbsentisme(dtrim1, dtrim2, nivell, tpc) if data > dtrim3: (trim3, sup3, quan3) = indicadorAbsentisme(dtrim2, dtrim3, nivell, tpc) (curs, supc, quanc) = indicadorAbsentisme(dtrim0, dtrim3, nivell, tpc) filera = [] #-Curs-------------------------------------------- camp = tools.classebuida() camp.contingut = dtrim0.strftime("%Y") + "/" + dtrim3.strftime("%Y") filera.append(camp) #-nivell-------------------------------------------- camp = tools.classebuida() camp.contingut = unicode(nivell) filera.append(camp) #-% ind-------------------------------------------- camp = tools.classebuida() camp.contingut = u'{0:.2f}%'.format(tpc) filera.append(camp) #-%1rTrim-------------------------------------------- camp = tools.classebuida() camp.contingut = u'{0:.2f}%'.format(trim1) filera.append(camp) #-%2nTrim-------------------------------------------- camp = tools.classebuida() camp.contingut = u'{0:.2f}%'.format(trim2) filera.append(camp) #-%3rTrim-------------------------------------------- camp = tools.classebuida() camp.contingut = u'{0:.2f}%'.format(trim3) filera.append(camp) #-%Curs-------------------------------------------- camp = tools.classebuida() camp.contingut = u'{0:.2f}%'.format(curs) filera.append(camp) writer.writerow([ filera[0].contingut, filera[1].contingut, filera[2].contingut, ind[0], ind[1], sup1, quan1, trim1, ind[1], ind[2], sup2, quan2, trim2, ind[2], ind[3], sup3, quan3, trim3, ind[0], ind[3], supc, quanc, curs ]) taula.fileres.append(filera) report.append(taula) return (report, response)
def about(request): credentials = tools.getImpersonateUser(request) (user, _) = credentials professor = User2Professor(user) report = [] taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 20 capcelera.contingut = u'Informació' capcelera.enllac = None taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 80 capcelera.contingut = u'' taula.capceleres.append(capcelera) taula.fileres = [] filera = [] #-by-------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = u'Llicència' camp.enllac = '' filera.append(camp) #-tip-------------------------------------------- licenseFile = open(settings.LICENSE_FILE, "r") tip = licenseFile.read() camp = tools.classebuida() camp.enllac = '' camp.contingut = tip filera.append(camp) taula.fileres.append(filera) #-1-------------------------------------------- filera = [] camp = tools.classebuida() camp.enllac = None camp.contingut = u'Codi' camp.enllac = '' filera.append(camp) #-tip-------------------------------------------- tip = u'''Pots revisar aquí el codi i les actualitzacions del programa. ''' camp = tools.classebuida() camp.enllac = r'https://github.com/ctrl-alt-d/django-aula' camp.contingut = tip filera.append(camp) taula.fileres.append(filera) report.append(taula) #--Estadistiques Professor..................... if professor: taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 20 capcelera.contingut = u'Estadístiques' capcelera.enllac = None taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 80 capcelera.contingut = u'' taula.capceleres.append(capcelera) taula.fileres = [] filera = [] camp = tools.classebuida() camp.contingut = u'Percentatge de passar llista:' filera.append(camp) camp = tools.classebuida() camp.enllac = None qProfessor = Q(horari__professor=professor) qAvui = Q(dia_impartir=datetime.today()) & Q( horari__hora__hora_fi__lt=datetime.now()) qFinsAhir = Q(dia_impartir__lt=datetime.today()) qFinsAra = qFinsAhir | qAvui qTeGrup = Q(horari__grup__isnull=False) imparticions = Impartir.objects.filter(qProfessor & qFinsAra & qTeGrup) nImparticios = imparticions.count() nImparticionsLlistaPassada = imparticions.filter( professor_passa_llista__isnull=False).count() pct = ('{0:.0f}'.format(nImparticionsLlistaPassada * 100 / nImparticios) if nImparticios > 0 else 'N/A') estadistica1 = u'{0}% ({1} classes impartides, {2} controls)'.format( pct, nImparticios, nImparticionsLlistaPassada) #---hores de classe nProfessor = Impartir.objects.filter( horari__professor=professor, horari__grup__isnull=False).count() nTotal = Impartir.objects.filter(horari__grup__isnull=False).count() import re nProfessor = re.sub(r'(\d{3})(?=\d)', r'\1,', str(nProfessor)[::-1])[::-1] nTotal = re.sub(r'(\d{3})(?=\d)', r'\1,', str(nTotal)[::-1])[::-1] estadistica2 = u'''Aquest curs impartirem {0} hores de classe, d'aquestes, {1} les imparteixes tu.'''.format( nTotal, nProfessor) camp.contingut = u'{0}. {1}'.format(estadistica1, estadistica2) filera.append(camp) taula.fileres.append(filera) report.append(taula) return render( request, 'report.html', { 'report': report, 'head': 'About', }, )
def alertaAssitenciaReport(data_inici, data_fi, nivell, tpc): report = [] taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = u"Ranking absència alumnes nivell {0}".format(nivell) taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 300 capcelera.contingut = u"Alumne" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 70 capcelera.contingut = u"hores absent no justificat" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 70 capcelera.contingut = u"hores docència" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 100 capcelera.contingut = u"%absència no justificada (absènc.no.justif./docència)" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 70 capcelera.contingut = u"hores present" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 70 capcelera.contingut = u"hores absènc. justif." taula.capceleres.append(capcelera) taula.fileres = [] sql = u"""select TODO!!! PASSAR A QUERY API!!!!!! a.id_alumne, coalesce ( count( ca.id_control_assistencia ), 0 ) as ca, coalesce ( count( p.id_control_assistencia ), 0 ) as p, coalesce ( count( j.id_control_assistencia ), 0 ) as j, coalesce ( count( f.id_control_assistencia ), 0 ) as f, 1.0 * coalesce ( count( f.id_control_assistencia ), 0 ) / ( coalesce ( count( ca.id_control_assistencia ), 0 ) ) as tpc from alumne a inner join grup g on (g.id_grup = a.id_grup ) inner join curs c on (c.id_curs = g.id_curs) inner join nivell n on (n.id_nivell = c.id_nivell) inner join control_assistencia ca on (ca.id_estat is not null and ca.id_alumne = a.id_alumne ) inner join impartir i on ( i.id_impartir = ca.id_impartir ) left outer join control_assistencia p on ( p.id_estat in ( select id_estat from estat_control_assistencia where codi_estat in ('P','R' ) ) and p.id_control_assistencia = ca.id_control_assistencia ) left outer join control_assistencia j on ( j.id_estat = ( select id_estat from estat_control_assistencia where codi_estat = 'J' ) and j.id_control_assistencia = ca.id_control_assistencia ) left outer join control_assistencia f on ( f.id_estat = ( select id_estat from estat_control_assistencia where codi_estat = 'F' ) and f.id_control_assistencia = ca.id_control_assistencia ) where n.id_nivell = {0} and i.dia_impartir >= '{1}' and i.dia_impartir <= '{2}' group by a.id_alumne having 1.0 * coalesce ( count( f.id_control_assistencia ), 0 ) / coalesce ( count( ca.id_control_assistencia ), 0 ) > ( 1.0 * {3} / 100) order by 1.0 * coalesce ( count( f.id_control_assistencia ), 0 ) / coalesce ( count( ca.id_control_assistencia ), 0 ) desc """.format( nivell.pk, data_inici, data_fi, tpc ) for alumne in Alumne.objects.raw(sql): filera = [] # -nom-------------------------------------------- camp = tools.classebuida() camp.enllac = "/tutoria/detallTutoriaAlumne/{0}/all".format(alumne.pk) camp.contingut = unicode(alumne) + " (" + unicode(alumne.grup) + ")" filera.append(camp) # -docència-------------------------------------------- camp = tools.classebuida() camp.contingut = unicode(alumne.f) filera.append(camp) # -present-------------------------------------------- camp = tools.classebuida() camp.contingut = unicode(alumne.ca) filera.append(camp) # -%-------------------------------------------- camp = tools.classebuida() camp.contingut = u"{0:.2f}%".format(alumne.tpc * 100) filera.append(camp) # -absent-------------------------------------------- camp = tools.classebuida() camp.contingut = unicode(alumne.p) filera.append(camp) # -justif-------------------------------------------- camp = tools.classebuida() camp.contingut = unicode(alumne.j) filera.append(camp) taula.fileres.append(filera) report.append(taula) return report
def elMeuInforme(request, pk=None): """Dades que veurà l'alumne""" detall = 'all' credentials = tools.getImpersonateUser(request) (user, l4) = credentials nTaula = 0 tePermis = True semiImpersonat = False if pk: professor = User2Professor(user) alumne = Alumne.objects.get(pk=pk) tePermis = professor in alumne.tutorsDeLAlumne() semiImpersonat = True else: alumne = Alumne.objects.get(user_associat=user) if not alumne or not tePermis: raise Http404 head = u'{0} ({1})'.format(alumne, unicode(alumne.grup)) ara = datetime.now() report = [] #----Assistencia -------------------------------------------------------------------- if detall in ['all', 'assistencia']: controls = alumne.controlassistencia_set.exclude( estat__codi_estat='P').filter(estat__isnull=False) controlsNous = controls.filter(relacio_familia_revisada__isnull=True) taula = tools.classebuida() taula.codi = nTaula nTaula += 1 taula.tabTitle = 'Faltes i retards {0}'.format( pintaNoves(controlsNous.count())) taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] taula.fileres = [] capcelera = tools.classebuida() capcelera.amplade = 25 capcelera.contingut = u'Dia' capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 75 capcelera.contingut = u'Falta, assignatura i franja horària.' taula.capceleres.append(capcelera) tots_els_controls = list( controls.select_related('impartir', 'estat').order_by( '-impartir__dia_impartir', '-impartir__horari__hora')) assistencia_calendari = [ ] #{"date":"2016-04-02","badge":true,"title":"Example 2"} from itertools import groupby for k, g in groupby(tots_els_controls, lambda x: x.impartir.dia_impartir): gs = list(g) gs.reverse() assistencia_calendari.append({ 'date': k.strftime('%Y-%m-%d'), 'badge': any([c.estat.codi_estat == 'F' for c in gs]), 'title': u'\n'.join([ escapejs(u'{0} a {1} ({2})'.format( c.estat, c.impartir.horari.assignatura, c.impartir.horari.hora)) for c in gs ]) # Store group iterator as a list }) for control in tots_els_controls: filera = [] #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = unicode( control.impartir.dia_impartir.strftime('%d/%m/%Y')) camp.negreta = False if control.relacio_familia_revisada else True filera.append(camp) #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = u'{0} a {1} ({2})'.format( control.estat, control.impartir.horari.assignatura, control.impartir.horari.hora) camp.negreta = False if control.relacio_familia_revisada else True filera.append(camp) # assistencia_calendari.append( { 'date': control.impartir.dia_impartir.strftime( '%Y-%m-%d' ) , # 'badge': control.estat.codi_estat == 'F', # 'title': escapejs( camp.contingut ) # } ) #-- taula.fileres.append(filera) report.append(taula) if not semiImpersonat: controlsNous = controls.update(relacio_familia_notificada=ara, relacio_familia_revisada=ara) #----observacions -------------------------------------------------------------------- observacions = alumne.incidencia_set.filter(tipus__es_informativa=True) observacionsNoves = observacions.filter( relacio_familia_revisada__isnull=True) taula = tools.classebuida() taula.codi = nTaula nTaula += 1 taula.tabTitle = 'Observacions {0}'.format( pintaNoves(observacionsNoves.count())) taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 25 capcelera.contingut = u'Dia' capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 75 capcelera.contingut = u'Professor i observació.' taula.capceleres.append(capcelera) taula.fileres = [] for incidencia in observacions.order_by('-dia_incidencia', '-franja_incidencia'): filera = [] #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = u'{0}'.format( incidencia.dia_incidencia.strftime('%d/%m/%Y')) camp.negreta = False if incidencia.relacio_familia_notificada else True filera.append(camp) #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.negreta = False if incidencia.relacio_familia_revisada else True camp.contingut = u'Sr(a): {0} - {1}'.format( incidencia.professional, incidencia.descripcio_incidencia) camp.negreta = False if incidencia.relacio_familia_revisada else True filera.append(camp) #-- taula.fileres.append(filera) report.append(taula) if not semiImpersonat: observacionsNoves = observacions.update( relacio_familia_notificada=ara, relacio_familia_revisada=ara) #----incidències -------------------------------------------------------------------- incidencies = alumne.incidencia_set.filter(tipus__es_informativa=False) incidenciesNoves = incidencies.filter( relacio_familia_revisada__isnull=True) taula = tools.classebuida() taula.codi = nTaula nTaula += 1 taula.tabTitle = 'Incidències {0}'.format( pintaNoves(incidenciesNoves.count())) taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 30 capcelera.contingut = u'Dia i estat' capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 70 capcelera.contingut = u'Professor i Incidència' taula.capceleres.append(capcelera) taula.fileres = [] for incidencia in incidencies.order_by('-dia_incidencia', '-franja_incidencia'): filera = [] #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = u'{0} {1}'.format( incidencia.dia_incidencia.strftime('%d/%m/%Y'), 'Vigent' if incidencia.es_vigent else '') camp.negreta = False if incidencia.relacio_familia_revisada else True filera.append(camp) #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = u'Sr(a): {0} - {1}'.format( incidencia.professional, incidencia.descripcio_incidencia) camp.negreta = False if incidencia.relacio_familia_revisada else True filera.append(camp) #-- taula.fileres.append(filera) report.append(taula) if not semiImpersonat: incidenciesNoves.update(relacio_familia_notificada=ara, relacio_familia_revisada=ara) #----Expulsions -------------------------------------------------------------------- expulsions = alumne.expulsio_set.exclude(estat='ES') expulsionsNoves = expulsions.filter( relacio_familia_revisada__isnull=True) taula = tools.classebuida() taula.codi = nTaula nTaula += 1 taula.tabTitle = 'Expulsions {0}'.format( pintaNoves(expulsionsNoves.count())) taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 20 capcelera.contingut = u'Dia' capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 20 capcelera.contingut = u'Data comunicació' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 60 capcelera.contingut = u'Professor i motiu' taula.capceleres.append(capcelera) taula.fileres = [] for expulsio in expulsions.order_by('-dia_expulsio', '-franja_expulsio'): filera = [] #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = u'{0} {1}'.format( expulsio.dia_expulsio.strftime('%d/%m/%Y'), u'''(per acumulació d'incidències)''' if expulsio.es_expulsio_per_acumulacio_incidencies else '') camp.negreta = False if expulsio.relacio_familia_revisada else True filera.append(camp) #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = u'{0}'.format( expulsio.moment_comunicacio_a_tutors.strftime('%d/%m/%Y' ) if expulsio. moment_comunicacio_a_tutors else u'Pendent de comunicar.') camp.negreta = False if expulsio.relacio_familia_revisada else True filera.append(camp) #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = u'Sr(a): {0} - {1}'.format( expulsio.professor, expulsio.motiu if expulsio.motiu else u'Pendent redactar motiu.') camp.negreta = False if expulsio.relacio_familia_revisada else True filera.append(camp) #-- taula.fileres.append(filera) report.append(taula) if not semiImpersonat: expulsionsNoves.update(relacio_familia_notificada=ara, relacio_familia_revisada=ara) #----Sancions ----------------------------------------------------------------------------- if detall in ['all', 'incidencies']: sancions = alumne.sancio_set.filter(impres=True) sancionsNoves = sancions.filter(relacio_familia_revisada__isnull=True) taula = tools.classebuida() taula.codi = nTaula nTaula += 1 taula.tabTitle = 'Sancions {0}'.format( pintaNoves(sancionsNoves.count())) taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 25 capcelera.contingut = u'Dates' capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 75 capcelera.contingut = u'Detall' taula.capceleres.append(capcelera) taula.fileres = [] for sancio in sancions.order_by('-data_inici'): filera = [] #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = u'{0} a {1}'.format( sancio.data_inici.strftime('%d/%m/%Y'), sancio.data_fi.strftime('%d/%m/%Y')) camp.negreta = False if sancio.relacio_familia_revisada else True filera.append(camp) #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = u'{0} {1} {2}'.format( sancio.tipus, ' - ' if sancio.motiu else '', sancio.motiu) camp.negreta = False if sancio.relacio_familia_revisada else True filera.append(camp) #-- taula.fileres.append(filera) report.append(taula) if not semiImpersonat: sancionsNoves.update(relacio_familia_notificada=ara, relacio_familia_revisada=ara) #---dades alumne--------------------------------------------------------------------- if detall in ['all', 'dades']: taula = tools.classebuida() taula.tabTitle = 'Dades personals' taula.codi = nTaula nTaula += 1 taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 25 capcelera.contingut = u'Dades Alumne' capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 75 capcelera.contingut = u'' taula.capceleres.append(capcelera) taula.fileres = [] #----grup------------------------------------------ filera = [] camp = tools.classebuida() camp.enllac = None camp.contingut = u'Grup' filera.append(camp) camp = tools.classebuida() camp.enllac = None camp.contingut = u'{0}'.format(alumne.grup) filera.append(camp) taula.fileres.append(filera) #----data neix------------------------------------------ filera = [] camp = tools.classebuida() camp.enllac = None camp.contingut = u'Data Neixement' filera.append(camp) camp = tools.classebuida() camp.enllac = None camp.contingut = u'{0}'.format(alumne.data_neixement) filera.append(camp) taula.fileres.append(filera) #----telefons------------------------------------------ filera = [] camp = tools.classebuida() camp.enllac = None camp.contingut = u'Telèfon' filera.append(camp) camp = tools.classebuida() camp.enllac = None camp.contingut = u'{0}'.format(alumne.altres_telefons) filera.append(camp) taula.fileres.append(filera) #----Pares------------------------------------------ filera = [] camp = tools.classebuida() camp.enllac = None camp.contingut = u'Pares' filera.append(camp) camp = tools.classebuida() camp.enllac = None camp.multipleContingut = [ (u'{0} ({1} , {2})'.format(alumne.rp1_nom, alumne.rp1_telefon, alumne.rp1_mobil), None), (u'{0} ({1} , {2})'.format(alumne.rp2_nom, alumne.rp2_telefon, alumne.rp2_mobil), None), ] filera.append(camp) taula.fileres.append(filera) #----adreça------------------------------------------ filera = [] camp = tools.classebuida() camp.enllac = None camp.contingut = u'Adreça' filera.append(camp) camp = tools.classebuida() camp.enllac = None localitat_i_o_municipi = alumne.localitat if not alumne.municipi \ else (alumne.municipi if not alumne.localitat else (alumne.localitat + '-' + alumne.municipi if alumne.localitat != alumne.municipi else alumne.localitat)) camp.contingut = u'{0} - {1}'.format(alumne.adreca, localitat_i_o_municipi) filera.append(camp) taula.fileres.append(filera) report.append(taula) #----Sortides ----------------------------------------------------------------------------- if detall in ['all', 'sortides'] and settings.CUSTOM_MODUL_SORTIDES_ACTIU: sortides = alumne.notificasortida_set.all() sortidesNoves = sortides.filter(relacio_familia_revisada__isnull=True) sortides_on_no_assistira = alumne.sortides_on_ha_faltat.values_list( 'id', flat=True).distinct() sortides_justificades = alumne.sortides_falta_justificat.values_list( 'id', flat=True).distinct() taula = tools.classebuida() taula.codi = nTaula nTaula += 1 taula.tabTitle = 'Activitats/Sortides {0}'.format( pintaNoves(sortidesNoves.count())) taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 20 capcelera.contingut = u'Dates' capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 35 capcelera.contingut = u' ' capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 35 capcelera.contingut = u'Detall' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 10 capcelera.contingut = u' ' taula.capceleres.append(capcelera) taula.fileres = [] for sortida in sortides.order_by('-sortida__calendari_desde'): filera = [] #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = naturalday(sortida.sortida.calendari_desde) camp.negreta = False if bool( sortida.relacio_familia_revisada) else True filera.append(camp) #---------------------------------------------- # NO INSCRIT A L’ACTIVITAT. L'alumne ha d'assistir al centre excepte si són de viatge de final de curs. comentari_no_ve = u"" if sortida.sortida.pk in sortides_on_no_assistira: comentari_no_ve = u"NO INSCRIT A L’ACTIVITAT." if sortida.sortida.pk in sortides_justificades: comentari_no_ve += u"NO INSCRIT A L’ACTIVITAT. Té justificada l'absència." camp = tools.classebuida() camp.enllac = None camp.contingut = comentari_no_ve camp.negreta = False if bool( sortida.relacio_familia_revisada) else True filera.append(camp) #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = u'{0}'.format(sortida.sortida.titol_de_la_sortida) camp.negreta = False if sortida.relacio_familia_revisada else True filera.append(camp) #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.modal = {} camp.modal['id'] = sortida.id camp.modal['txtboto'] = u'Detalls' camp.modal['tittle'] = u"{0} ({1})".format( sortida.sortida.titol_de_la_sortida, naturalday(sortida.sortida.calendari_desde), ) camp.modal['body'] = u'{0} a {1} \n\n{2}\n'.format( sortida.sortida.calendari_desde.strftime('%d/%m/%Y %H:%M'), sortida.sortida.calendari_finsa.strftime('%d/%m/%Y %H:%M'), sortida.sortida.programa_de_la_sortida, ) filera.append(camp) #-- taula.fileres.append(filera) report.append(taula) if not semiImpersonat: sortidesNoves.update(relacio_familia_notificada=ara, relacio_familia_revisada=ara) #----Qualitativa ----------------------------------------------------------------------------- qualitatives_alumne = { r.qualitativa for r in alumne.respostaavaluacioqualitativa_set.all() } avui = datetime.now().date() qualitatives_en_curs = [ q for q in qualitatives_alumne if (bool(q.data_obrir_portal_families) and bool(q.data_tancar_tancar_portal_families) and q.data_obrir_portal_families <= avui <= q.data_tancar_tancar_portal_families) ] if detall in ['all', 'qualitativa'] and qualitatives_en_curs: respostes = alumne.respostaavaluacioqualitativa_set.filter( qualitativa__in=qualitatives_en_curs) respostesNoves = respostes.filter( relacio_familia_revisada__isnull=True) assignatures = list(set([r.assignatura for r in respostes])) hi_ha_tipus_assignatura = ( bool(assignatures) and assignatures[0] and assignatures[0].tipus_assignatura is not None and assignatures[0].tipus_assignatura.capcelera) asignatura_label = assignatures[ 0].tipus_assignatura.capcelera if hi_ha_tipus_assignatura else u"Matèria" taula = tools.classebuida() taula.codi = nTaula nTaula += 1 taula.tabTitle = u"Avaluació qualitativa {0}".format( u"!" if respostesNoves.exists() else "") taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 15 capcelera.contingut = u'Qualitativa' capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 20 capcelera.contingut = asignatura_label capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 65 capcelera.contingut = u'' taula.capceleres.append(capcelera) taula.fileres = [] respostes_pre = (respostes.order_by( 'qualitativa__data_obrir_avaluacio', 'assignatura')) keyf = lambda x: (x.qualitativa.nom_avaluacio + x.assignatura. nom_assignatura) respostes_sort = sorted(respostes_pre, key=keyf) from itertools import groupby for _, respostes in groupby(respostes_sort, keyf): respostes = list(respostes) filera = [] #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = respostes[0].qualitativa.nom_avaluacio camp.negreta = False if bool( respostes[0].relacio_familia_revisada) else True filera.append(camp) camp = tools.classebuida() camp.enllac = None camp.contingut = respostes[ 0].assignatura.nom_assignatura or respostes[0].assignatura camp.negreta = False if bool( respostes[0].relacio_familia_revisada) else True filera.append(camp) #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.multipleContingut = [] for resposta in respostes: camp.multipleContingut.append(( u'{0}'.format(resposta.get_resposta_display()), None, )) camp.negreta = False if respostes[ 0].relacio_familia_revisada else True filera.append(camp) #-- taula.fileres.append(filera) report.append(taula) if not semiImpersonat: respostesNoves.update(relacio_familia_notificada=ara, relacio_familia_revisada=ara) return render( request, 'report_detall_families.html', { 'report': report, 'head': u'Informació alumne {0}'.format(head), 'assistencia_calendari': json.dumps(assistencia_calendari), }, )
def faltesAssistenciaEntreDatesProfessorRpt(professor, grup, assignatures, dataDesDe, horaDesDe, dataFinsA, horaFinsA): q_grup = Q(impartir__horari__grup=grup) q_assignatures = Q(impartir__horari__assignatura__in=assignatures) q_professor = Q(impartir__horari__professor=professor) q_primer_dia = Q(impartir__dia_impartir=dataDesDe) & Q(impartir__horari__hora__hora_inici__gte=horaDesDe.hora_inici) q_mig = Q(impartir__dia_impartir__gt=dataDesDe) & Q(impartir__dia_impartir__lt=dataFinsA) q_darrer_dia = Q(impartir__dia_impartir=dataFinsA) & Q(impartir__horari__hora__hora_fi__lte=horaFinsA.hora_fi) q_hores = q_primer_dia | q_mig | q_darrer_dia controls = ControlAssistencia.objects.filter(q_grup & q_assignatures & q_hores & q_professor) alumnes = Alumne.objects.filter(controlassistencia__pk__in=controls.values_list("pk", flat=True)).distinct() report = [] nTaula = 0 # RESUM------------------------------------------------------------------------------------------------- taula = tools.classebuida() taula.codi = nTaula nTaula += 1 taula.tabTitle = "Resum" taula.titol = tools.classebuida() taula.titol.contingut = u"Resum assistència de {0} de {1} entre {2} {3}h i {4} {5}h".format( grup, ", ".join([unicode(a) for a in assignatures]), dataDesDe.strftime("%d/%m/%Y"), horaDesDe.hora_inici.strftime("%H:%M"), dataFinsA.strftime("%d/%m/%Y"), horaFinsA.hora_fi.strftime("%H:%M"), ) taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 120 capcelera.contingut = u"Alumne" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 70 capcelera.contingut = u"hores absent no justificat" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 70 capcelera.contingut = u"hores docència" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 100 capcelera.contingut = u"%assist." taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 70 capcelera.contingut = u"hores present" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 70 capcelera.contingut = u"hores absènc. justif." taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 70 capcelera.contingut = u"hores retard" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 100 capcelera.contingut = u"%injustif." taula.capceleres.append(capcelera) taula.fileres = [] for alumne in alumnes: filera = [] # -nom-------------------------------------------- camp = tools.classebuida() camp.enllac = "" camp.contingut = unicode(alumne) + " (" + unicode(alumne.grup) + ")" filera.append(camp) # -faltes-------------------------------------------- f = controls.filter(alumne=alumne, estat__codi_estat="F").distinct().count() j = controls.filter(alumne=alumne, estat__codi_estat="J").distinct().count() camp = tools.classebuida() camp.contingut = unicode(f) filera.append(camp) # -controls-------------------------------------------- ca = controls.filter(alumne=alumne, estat__codi_estat__isnull=False).distinct().count() camp = tools.classebuida() camp.contingut = unicode(ca) filera.append(camp) # -% assistència -------------------------------------------- tpc = 1.0 - (1.0 * (f + j)) / (1.0 * ca) if ca <> 0 else "N/A" camp = tools.classebuida() camp.contingut = u"{0:.2f}%".format(tpc * 100) if isinstance(tpc, float) else "N/A" filera.append(camp) # -present-------------------------------------------- p = controls.filter(alumne=alumne, estat__codi_estat="P").distinct().count() camp = tools.classebuida() camp.contingut = unicode(p) filera.append(camp) # -justif-------------------------------------------- camp = tools.classebuida() camp.contingut = unicode(j) filera.append(camp) # -retard-------------------------------------------- j = controls.filter(alumne=alumne, estat__codi_estat="R").distinct().count() camp = tools.classebuida() camp.contingut = unicode(j) filera.append(camp) # -% insjustif -------------------------------------------- tpc = (1.0 * f) / (1.0 * ca) if ca <> 0 else "N/A" camp = tools.classebuida() camp.contingut = u"{0:.2f}%".format(tpc * 100) if isinstance(tpc, float) else "N/A" filera.append(camp) taula.fileres.append(filera) report.append(taula) # DETALL------------------------------------------------------------------------------------------------- taula = tools.classebuida() taula.codi = nTaula nTaula += 1 taula.tabTitle = "Detall" taula.titol = tools.classebuida() taula.titol.contingut = u"Detall assistència de {0} de {1} entre {2} {3}h i {4} {5}h".format( grup, ", ".join([unicode(a) for a in assignatures]), dataDesDe.strftime("%d/%m/%Y"), horaDesDe.hora_inici.strftime("%H:%M"), dataFinsA.strftime("%d/%m/%Y"), horaFinsA.hora_fi.strftime("%H:%M"), ) taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 120 capcelera.contingut = u"Alumne" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 400 capcelera.contingut = u"hores absent no justificat" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 400 capcelera.contingut = u"hores absènc. justif." taula.capceleres.append(capcelera) taula.fileres = [] for alumne in alumnes: filera = [] # -nom-------------------------------------------- camp = tools.classebuida() camp.enllac = "" camp.contingut = unicode(alumne) + " (" + unicode(alumne.grup) + ")" filera.append(camp) # -faltes-------------------------------------------- f = ( controls.filter(alumne=alumne, estat__codi_estat="F") .distinct() .select_related("impartir", "impartir__horari__hora", "impartir__horari__assignatura") ) camp = tools.classebuida() camp.contingut = unicode( u" | ".join( [ u"{0} {1} {2}".format( x.impartir.dia_impartir.strftime("%d/%m/%Y"), x.impartir.horari.hora, x.impartir.horari.assignatura, ) for x in f ] ) ) filera.append(camp) # -justif-------------------------------------------- j = controls.filter(alumne=alumne, estat__codi_estat="J").distinct() camp = tools.classebuida() contingut = [ u"{0} {1} {2}".format( x.impartir.dia_impartir.strftime("%d/%m/%Y"), x.impartir.horari.hora, x.impartir.horari.assignatura ) for x in j ] camp.multipleContingut = [(c, None) for c in contingut] filera.append(camp) taula.fileres.append(filera) report.append(taula) return report
def reportBaixaCarpeta(request, dia, professors): import locale locale.setlocale(locale.LC_TIME, 'ca_ES.utf8') credentials = tools.getImpersonateUser(request) (user, _) = credentials professor = User2Professor(user) reports = [] for professor in professors: report = tools.classebuida() report.professor = professor report.data = date(dia, "l, d M Y") imparticions = (Impartir.objects.filter( dia_impartir=dia, horari__professor=professor).order_by('horari__hora__hora_inici')) report.imparticions = [] for i in imparticions: Feina.objects.get_or_create(impartir=i, defaults={ 'professor_darrera_modificacio': professor, }) impartir = tools.classebuida() impartir.hora = i.horari.hora impartir.grup = i.horari.grup impartir.assignatura = i.horari.assignatura impartir.aula = i.horari.nom_aula impartir.profguard = i.feina.professor_fa_guardia impartir.comments = i.feina.comentaris_per_al_professor_guardia impartir.feina = i.feina.feina_a_fer impartir.comments2 = i.feina.comentaris_professor_guardia report.imparticions.append(impartir) reports.append(report) #from django.template import Context import cgi import os from django import http import time excepcio = None contingut = None try: #resultat = StringIO.StringIO( ) resultat = "/tmp/DjangoAula-temp-{0}-{1}.odt".format( time.time(), request.session.session_key) #context = Context( {'reports' : reports, } ) path = None try: path = os.path.join(settings.PROJECT_DIR, '../customising/docs/carpetaBaixes.odt') except: path = os.path.join(os.path.dirname(__file__), 'templates/carpetaBaixes.odt') renderer = Renderer(path, { 'reports': reports, }, resultat) renderer.run() docFile = open(resultat, 'rb') contingut = docFile.read() docFile.close() os.remove(resultat) except Exception, e: excepcio = unicode(e)
def alertaAssitenciaReport(data_inici, data_fi, nivell, tpc, ordenacio): report = [] taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = u'Ranking absència alumnes nivell {0}'.format( nivell) taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 30 capcelera.contingut = u'Alumne' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 15 capcelera.contingut = u'hores absent no justificat' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 10 capcelera.contingut = u'hores docència' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 20 capcelera.contingut = u'%absència no justificada (absènc.no.justif./docència)' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 5 capcelera.contingut = u'hores present' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 10 capcelera.contingut = u'hores absènc. justif.' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 10 capcelera.contingut = u'% assistència' taula.capceleres.append(capcelera) taula.fileres = [] # q_nivell = Q( grup__curs__nivell = nivell ) # q_data_inici = Q( controlassistencia__impartir__dia_impartir__gte = data_inici ) # q_data_fi = Q( controlassistencia__impartir__dia_impartir__lte = data_fi ) # q_filte = q_nivell & q_data_inici & q_data_fi # q_alumnes = Alumne.objects.filter( q_filte ) # # q_p = q_alumnes.filter( controlassistencia__estat__codi_estat__in = ('P','R' ) ).order_by().distinct().annotate( x=Count('controlassistencia__estat') ).values_list( 'id', 'x' ) # q_j = q_alumnes.filter( controlassistencia__estat__codi_estat = 'J' ).order_by().distinct().annotate( x=Count('controlassistencia__estat') ).order_by().distinct().values_list( 'id', 'x' ) # q_f = q_alumnes.filter( controlassistencia__estat__codi_estat = 'F' ).order_by().distinct().annotate( x=Count('controlassistencia__estat') ).values_list( 'id', 'x' ) # dict_p, dict_j, dict_f = dict( q_p ), dict( q_j ), dict( q_f ) q_alumnes = Alumne.objects.filter(grup__curs__nivell=nivell) q_data_inici = Q(impartir__dia_impartir__gte=data_inici) q_data_fi = Q(impartir__dia_impartir__lte=data_fi) q_filtre = q_data_inici & q_data_fi q_controls = ControlAssistencia.objects.filter( alumne__in=q_alumnes).filter(q_filtre) q_p = q_controls.filter( estat__codi_estat__in=('P', 'R')).order_by().values_list( 'id', 'alumne__id').distinct() q_j = q_controls.filter(estat__codi_estat='J').order_by().values_list( 'id', 'alumne__id').distinct() q_f = q_controls.filter(estat__codi_estat='F').order_by().values_list( 'id', 'alumne__id').distinct() from itertools import groupby dict_p = {} data = sorted(q_p, key=lambda x: x[1]) for k, g in groupby(data, lambda x: x[1]): dict_p[k] = len(list(g)) dict_j = {} data = sorted(q_j, key=lambda x: x[1]) for k, g in groupby(data, lambda x: x[1]): dict_j[k] = len(list(g)) dict_f = {} data = sorted(q_f, key=lambda x: x[1]) for k, g in groupby(data, lambda x: x[1]): dict_f[k] = len(list(g)) #ajuntar dades diferents fonts alumnes = [] for alumne in q_alumnes.select_related('grup', 'grup__curs').order_by().distinct(): alumne.p = dict_p.get(alumne.id, 0) alumne.j = dict_j.get(alumne.id, 0) alumne.f = dict_f.get(alumne.id, 0) alumne.ca = alumne.p + alumne.j + alumne.f or 0.0 alumne.tpc = (float(alumne.f) / float(alumne.ca)) * 100.0 if alumne.ca > 0 else 0 alumne.tpc_assist = (float(alumne.p) / float(alumne.ca)) * 100.0 if alumne.ca > 0 else 0 alumnes.append(alumne) #---------------------- #choices = ( ('a', u'Nom alumne',), ('ca', u'Curs i alumne',),('n',u'Per % Assistència',), ('cn',u'Per Curs i % Assistència',), order_a = lambda a: (a.cognoms, a.nom) order_ca = lambda a: (a.grup.curs.nom_curs, a.grup.nom_grup, a.cognoms, a. nom) order_n = lambda a: (-1 * a.tpc, -1 * a.f) order_cn = lambda a: (a.grup.curs.nom_curs, a.grup.nom_grup, -1 * a.tpc) order = order_ca if ordenacio == 'ca' else order_n if ordenacio == 'n' else order_cn if ordenacio == 'cn' else order_a for alumne in sorted([a for a in alumnes if a.tpc > tpc], key=order): filera = [] #-nom-------------------------------------------- camp = tools.classebuida() camp.enllac = '/tutoria/detallTutoriaAlumne/{0}/all'.format(alumne.pk) camp.contingut = unicode(alumne) + ' (' + unicode(alumne.grup) + ')' filera.append(camp) #-docència-------------------------------------------- camp = tools.classebuida() camp.contingut = unicode(alumne.f) filera.append(camp) #-present-------------------------------------------- camp = tools.classebuida() camp.contingut = unicode(alumne.ca) filera.append(camp) #-%-------------------------------------------- camp = tools.classebuida() camp.contingut = u'{0:.2f}%'.format(alumne.tpc) filera.append(camp) #-absent-------------------------------------------- camp = tools.classebuida() camp.contingut = unicode(alumne.p) filera.append(camp) #-justif-------------------------------------------- camp = tools.classebuida() camp.contingut = unicode(alumne.j) filera.append(camp) #-assist-------------------------------------------- camp = tools.classebuida() camp.contingut = u'{0:.2f}%'.format(alumne.tpc_assist) filera.append(camp) taula.fileres.append(filera) report.append(taula) return report
def elsMeusAlumnesTutoratsRpt(professor=None, grup=None, dataDesDe=None, dataFinsA=date.today()): report = [] if professor: grups = [t.grup for t in Tutor.objects.filter(professor=professor)] grups.append("Altres") else: grup = get_object_or_404(Grup, pk=grup) grups = [grup] for grup in grups: taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = "" taula.titol.enllac = None taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 100 capcelera.contingut = grup if grup == u"Altres" else u"{0} ({1})".format(grup, grup.curs) capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 70 capcelera.contingut = u"Faltes." taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 70 capcelera.contingut = u"Disciplina" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 70 capcelera.contingut = u"Actuacions" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 70 capcelera.contingut = u"Familia" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 70 capcelera.contingut = u"Seguiment" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 70 capcelera.contingut = u"Històric" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 70 capcelera.contingut = u"Qualitativa" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 70 capcelera.contingut = u"Tot" taula.capceleres.append(capcelera) taula.fileres = [] if grup == "Altres": consulta_alumnes = Q(pk__in=[ti.alumne.pk for ti in professor.tutorindividualitzat_set.all()]) else: consulta_alumnes = Q(grup=grup) for alumne in Alumne.objects.filter(consulta_alumnes): filera = [] # -moment-------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = unicode(alumne) camp.enllac = "/tutoria/detallTutoriaAlumne/{0}/dades".format(alumne.pk) filera.append(camp) q_hores = Q(impartir__dia_impartir__lte=dataFinsA) if dataDesDe: q_hores &= Q(impartir__dia_impartir__gte=dataDesDe) controls = alumne.controlassistencia_set.filter(q_hores) # -faltes-------------------------------------------- f = controls.filter(alumne=alumne, estat__codi_estat="F").distinct().count() r = controls.filter(alumne=alumne, estat__codi_estat="R").distinct().count() p = controls.filter(alumne=alumne, estat__codi_estat="P").distinct().count() j = controls.filter(alumne=alumne, estat__codi_estat="J").distinct().count() # ca = controls.filter(q_hores).filter(estat__codi_estat__isnull = False).filter( alumne = alumne ).distinct().count() # -%-------------------------------------------- tpc_injust = (1.0 * f) * 100.0 / (0.0 + f + r + p + j) if f > 0 else 0 tpc_assist = (0.0 + p + r) * 100.0 / (0.0 + f + r + p + j) if f > 0 else 0 camp = tools.classebuida() camp.enllac = None accio_list = [ (u"f: {0}".format(f), "/tutoria/detallTutoriaAlumne/{0}/assistencia".format(alumne.pk) if f else None), (u"j: {0}".format(j), "/tutoria/detallTutoriaAlumne/{0}/assistencia".format(alumne.pk) if j else None), (u"r: {0}".format(r), "/tutoria/detallTutoriaAlumne/{0}/assistencia".format(alumne.pk) if r else None), (u"p: {0}".format(p), None), ( u"{0:.2f}%Injust".format(tpc_injust), "/tutoria/detallTutoriaAlumne/{0}/assistencia".format(alumne.pk) if f or j or r else None, ), ( u"{0:.2f}%Assist".format(tpc_assist), "/tutoria/detallTutoriaAlumne/{0}/assistencia".format(alumne.pk) if tpc_assist else None, ), ] camp.multipleContingut = accio_list filera.append(camp) # -disciplina-------------------------------------------- # tipusIncidencia nIncidencies = alumne.incidencia_set.filter(tipus__es_informativa=False).count() nIncidenciesInform = alumne.incidencia_set.filter(tipus__es_informativa=True).count() nExpulsions = alumne.expulsio_set.exclude(estat="ES", es_expulsio_per_acumulacio_incidencies=True).count() nExpulsionsAcu = ( alumne.expulsio_set.exclude(estat="ES").filter(es_expulsio_per_acumulacio_incidencies=True).count() ) camp = tools.classebuida() camp.enllac = ( "/tutoria/detallTutoriaAlumne/{0}/incidencies".format(alumne.pk) if (nExpulsions + nExpulsionsAcu + nIncidencies + nIncidenciesInform) > 0 else "" ) camp.multipleContingut = [ (u"""Exp:{0}(+{1}acu)""".format(nExpulsions, nExpulsionsAcu), None), (u"Inc:{0}".format(nIncidencies), None), (u"Obs:{0}".format(nIncidenciesInform), None), ] filera.append(camp) # -Actuacions-------------------------------------------- nActuacions = alumne.actuacio_set.all().count() camp = tools.classebuida() camp.enllac = "/tutoria/detallTutoriaAlumne/{0}/actuacions".format(alumne.pk) if nActuacions > 0 else "" camp.contingut = u"Act:{0}".format(nActuacions) filera.append(camp) # -Familia-------------------------------------------- nConnexions = 0 try: nConnexions = alumne.user_associat.LoginUsuari.filter(exitos=True).count() except: pass camp = tools.classebuida() camp.enllac = "/tutoria/detallTutoriaAlumne/{0}/families".format(alumne.pk) if nConnexions > 0 else "" camp.contingut = u"Actiu:{0} Connexions:{1}".format( u"Sí" if alumne.esta_relacio_familia_actiu() else u"No", nConnexions ) filera.append(camp) # -Seguiment-------------------------------------------- camp = tools.classebuida() anys_seguiment_tutorial = [] try: anys_seguiment_tutorial = ( SeguimentTutorialRespostes.objects.filter(seguiment_tutorial__alumne=alumne) .values_list("any_curs_academic", flat=True) .distinct() ) except: pass if anys_seguiment_tutorial: camp.enllac = "/tutoria/detallTutoriaAlumne/{0}/seguiment".format(alumne.pk) camp.contingut = u"{0}".format(u", ".join([unicode(x) for x in anys_seguiment_tutorial])) filera.append(camp) # -Històric-------------------------------------------- camp = tools.classebuida() anys_seguiment_tutorial = [] try: anys_historic = ( ResumAnualAlumne.objects.filter(seguiment_tutorial__alumne=alumne) .values_list("curs_any_inici", flat=True) .distinct() ) except: pass if anys_historic: camp.enllac = "/tutoria/detallTutoriaAlumne/{0}/historic".format(alumne.pk) camp.contingut = u"{0}".format(u", ".join([unicode(x) for x in anys_historic])) filera.append(camp) # -Qualitativa--------------- camp = tools.classebuida() teDadesDeQualitativa = alumne.respostaavaluacioqualitativa_set.count() > 0 if teDadesDeQualitativa: camp.enllac = "/tutoria/detallTutoriaAlumne/{0}/qualitativa".format(alumne.pk) camp.contingut = u"2010" llistaDates = [ r.qualitativa.data_tancar_avaluacio.strftime("%d/%m/%Y") for r in alumne.respostaavaluacioqualitativa_set.all() ] camp.contingut = u",".join(list(set(llistaDates))) filera.append(camp) # -All--------------- camp = tools.classebuida() camp.enllac = "/tutoria/detallTutoriaAlumne/{0}/all".format(alumne.pk) camp.contingut = u"Informe" filera.append(camp) # -- taula.fileres.append(filera) report.append(taula) return report
def duplicats_rpt(): report = [] taula = tools.classebuida() taula.tabTitle = 'Duplicacions detectades' taula.titol = tools.classebuida() taula.titol.contingut = u'Duplicacions detectades ' taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 120 capcelera.contingut = u'Grup duplicat' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 120 capcelera.contingut = u'Opcions' taula.capceleres.append(capcelera) taula.fileres = [] for a in Alumne.objects.filter(data_baixa__isnull=True): q_mateix_cognom = Q(cognoms=a.cognoms) q_mateix_nom = Q(nom=a.nom, ) q_mateix_neixement = Q(data_neixement=a.data_neixement) q_mateixa_altres = Q(adreca=a.adreca, telefons=a.telefons, localitat=a.localitat, centre_de_procedencia=a.centre_de_procedencia, adreca__gte=u"") condicio1 = q_mateix_nom & q_mateix_cognom & q_mateix_neixement condicio2 = q_mateix_nom & q_mateix_cognom & q_mateixa_altres condicio3 = q_mateix_nom & q_mateixa_altres & q_mateix_neixement alumne_grup = Alumne.objects.filter(condicio1 | condicio2 | condicio3) if alumne_grup.count() > 1: filera = [] #-grup-------------------------------------------- camp = tools.classebuida() camp.multipleContingut = [(u'{0} {1}'.format(ag, ag.grup.nom_grup), None) for ag in alumne_grup] filera.append(camp) #-opcions-------------------------------------------- camp = tools.classebuida() camp.esMenu = True primer_alumne = a #list( chain( alumne_grup.filter( data_baixa__isnull = False).order_by( u'data_baixa' ) , alumne_grup.filter( data_baixa__isnull = True) ) )[0] camp.multipleContingut = [ (u'Fusionar', u'/alumnes/fusiona/{0}'.format(primer_alumne.pk)), ] filera.append(camp) taula.fileres.append(filera) report.append(taula) return report
def elsMeusAlumnesAndAssignatures(request): (user, l4) = tools.getImpersonateUser(request) professor = User2Professor(user) report = [] nTaula = 0 assignatura_grup = set() for ca in Impartir.objects.filter(horari__professor=professor): if ca.horari.grup is not None: assignatura_grup.add((ca.horari.assignatura, ca.horari.grup)) for ( assignatura, grup, ) in assignatura_grup: taula = tools.classebuida() taula.codi = nTaula nTaula += 1 taula.tabTitle = u'{0} - {1}'.format(unicode(assignatura), unicode(grup)) taula.titol = tools.classebuida() taula.titol.contingut = "" capcelera_nom = tools.classebuida() capcelera_nom.amplade = 230 capcelera_nom.contingut = u'{0} - {1}'.format(unicode(assignatura), unicode(grup)) capcelera_nIncidencies = tools.classebuida() capcelera_nIncidencies.amplade = 90 capcelera_nIncidencies.contingut = u'Incidències' capcelera_assistencia = tools.classebuida() capcelera_assistencia.amplade = 80 capcelera_assistencia.contingut = u'Assist.' capcelera_nFaltes = tools.classebuida() capcelera_nFaltes.amplade = 340 nClasses = Impartir.objects.filter(horari__professor=professor, horari__assignatura=assignatura, horari__grup=grup).count() nClassesImpartides = Impartir.objects.filter( horari__professor=professor, horari__assignatura=assignatura, horari__grup=grup, dia_impartir__lte=date.today()).count() capcelera_nFaltes.contingut = u' ({0}h impartides / {1}h)'.format( nClassesImpartides, nClasses) capcelera_contacte = tools.classebuida() capcelera_contacte.amplade = 80 capcelera_contacte.contingut = u'Dades de contacte Tutors.' taula.capceleres = [ capcelera_nom, capcelera_nIncidencies, capcelera_assistencia, capcelera_nFaltes, capcelera_contacte ] taula.fileres = [] for alumne in Alumne.objects.filter( controlassistencia__impartir__horari__grup=grup, controlassistencia__impartir__horari__assignatura=assignatura, controlassistencia__impartir__horari__professor=professor ).distinct().order_by('cognoms'): filera = [] #-nom-------------------------------------------- camp_nom = tools.classebuida() camp_nom.enllac = None camp_nom.contingut = u'{0}'.format(alumne) filera.append(camp_nom) #-incidències-------------------------------------------- camp_nIncidencies = tools.classebuida() camp_nIncidencies.enllac = None nIncidencies = alumne.incidencia_set.filter( control_assistencia__impartir__horari__grup=grup, control_assistencia__impartir__horari__professor=professor, control_assistencia__impartir__horari__assignatura=assignatura, tipus__es_informativa=False).count() nExpulsions = alumne.expulsio_set.filter( control_assistencia__impartir__horari__grup=grup, control_assistencia__impartir__horari__professor=professor, control_assistencia__impartir__horari__assignatura=assignatura ).exclude(estat='ES').count() camp_nIncidencies.multipleContingut = [( u'Incid: {0}'.format(nIncidencies), None, ), ( u'Expul: {0}'.format(nExpulsions), None, )] filera.append(camp_nIncidencies) #-Assistencia-------------------------------------------- from django.db.models import Sum, Count # nFaltes = alumne.controlassistencia_set.filter( # estat__isnull = False , # impartir__horari__assignatura = assignatura # ).aggregate( # ausencia = Sum( 'estat__pct_ausencia' ), # classes = Count( 'estat' ) # ) controls = alumne.controlassistencia_set.filter( impartir__dia_impartir__lte=datetime.today(), impartir__horari__grup=grup, impartir__horari__professor=professor, impartir__horari__assignatura=assignatura) nFaltesNoJustificades = controls.filter( Q(estat__codi_estat='F')).count() nFaltesJustificades = controls.filter( estat__codi_estat='J').count() nRetards = controls.filter(estat__codi_estat='R').count() nControls = controls.filter( estat__codi_estat__isnull=False).count() camp = tools.classebuida() camp.enllac = None tpc = 100.0 - ( (100.0 * float(nFaltesNoJustificades + nFaltesJustificades)) / float(nControls)) if nControls > 0 else 'N/A' camp.contingut = u"""{0:.2f}%""".format( tpc) if nControls > 0 else 'N/A' filera.append(camp) camp = tools.classebuida() camp.enllac = None contingut = "Controls: {0},F.no J.: {1},F.Just: {2},Retards: {3}".format( nControls, nFaltesNoJustificades, nFaltesJustificades, nRetards) camp.multipleContingut = [( c, None, ) for c in contingut.split(',')] filera.append(camp) #-- #-nom-------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = u'{0},{1}'.format(alumne.tutors, alumne.telefons) filera.append(camp) taula.fileres.append(filera) report.append(taula) return render_to_response('reportTabs.html', { 'report': report, 'head': u'Informació alumnes', }, context_instance=RequestContext(request))
def list( request ): (user, l4) = tools.getImpersonateUser(request) report = [] taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = "" taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 20 capcelera.contingut = u'{0}'.format( u'Tasques importants pendents' ) taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 25 capcelera.contingut = u'Tasca' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 50 capcelera.contingut = u'Contingut' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 5 capcelera.contingut = u'Esborrar' taula.capceleres.append(capcelera) taula.fileres = [] for todo in ToDo.objects.filter( propietari = request.user, estat = 'P', prioritat = 'V' ): filera = [] camp = tools.classebuida() camp.contingut = u'{0}'.format( todo.data ) filera.append(camp) camp = tools.classebuida() camp.contingut = u'{0}'.format( todo.tasca ) camp.enllac = todo.enllac filera.append(camp) camp = tools.classebuida() camp.contingut = u'{0}'.format( todo.informacio_adicional ) filera.append(camp) camp = tools.classebuida() camp.contingut = u'[ X ]' camp.enllac = '/todo/esborra/{0}'.format( todo.pk ) filera.append(camp) taula.fileres.append( filera ) if taula.fileres: report.append(taula) #----------------------------------------------------- taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = "" taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 20 capcelera.contingut = u'{0}'.format( u'Tasques Pendents' ) taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 25 capcelera.contingut = u'Tasca' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 50 capcelera.contingut = u'Contingut' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 5 capcelera.contingut = u'Esborrar' taula.capceleres.append(capcelera) taula.fileres = [] for todo in ToDo.objects.filter( propietari = request.user, estat = 'P' ).exclude( prioritat = 'V' ): filera = [] camp = tools.classebuida() camp.contingut = u'{0}'.format( todo.data ) filera.append(camp) camp = tools.classebuida() camp.contingut = u'{0}'.format( todo.tasca ) camp.enllac = todo.enllac filera.append(camp) camp = tools.classebuida() camp.contingut = u'{0}'.format( todo.informacio_adicional ) filera.append(camp) camp = tools.classebuida() camp.contingut = u'[ X ]' camp.enllac = '/todo/esborra/{0}'.format( todo.pk ) filera.append(camp) taula.fileres.append( filera ) report.append(taula) #----------------------------------------------------- taula = tools.classebuida() taula.titol = tools.classebuida() taula.titol.contingut = "" taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 20 capcelera.contingut = u'{0}'.format( u'Tasques Realitzades' ) taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 25 capcelera.contingut = u'Tasca' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 50 capcelera.contingut = u'Contingut' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 5 capcelera.contingut = u'Esborrar' taula.capceleres.append(capcelera) taula.fileres = [] for todo in ToDo.objects.filter( propietari = request.user, estat = 'R' ): filera = [] camp = tools.classebuida() camp.contingut = u'{0}'.format( todo.data ) filera.append(camp) camp = tools.classebuida() camp.contingut = u'{0}'.format( todo.tasca ) camp.enllac = todo.enllac filera.append(camp) camp = tools.classebuida() camp.contingut = u'{0}'.format( todo.informacio_adicional ) filera.append(camp) camp = tools.classebuida() camp.contingut = u'[ X ]' camp.enllac = '/todo/esborra/{0}'.format( todo.pk ) filera.append(camp) taula.fileres.append( filera ) if taula.fileres: report.append(taula) #----------------------------------------------------- return render( request, 'reportToDo.html', {'report': report, 'head': u'Tasques' , }, )