コード例 #1
0
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
コード例 #2
0
ファイル: reports.py プロジェクト: ctrl-alt-d/django-aula
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
コード例 #3
0
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
コード例 #4
0
ファイル: reports.py プロジェクト: ctrl-alt-d/django-aula
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
コード例 #5
0
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
    
    
        
        
コード例 #6
0
ファイル: views.py プロジェクト: jsubias6/django-aula
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',
        },
    )
コード例 #7
0
ファイル: reports.py プロジェクト: ruchmann/django-aula
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
コード例 #8
0
ファイル: views.py プロジェクト: ctrl-alt-d/django-aula
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' ,
                    },
                )
コード例 #9
0
ファイル: menu.py プロジェクト: ctrl-alt-d/django-aula
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
コード例 #10
0
ファイル: views.py プロジェクト: jsubias6/django-aula
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',
        },
    )
コード例 #11
0
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',
            },
        )
コード例 #12
0
ファイル: views.py プロジェクト: JaumeI/django-aula
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))            
コード例 #13
0
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
    
    
コード例 #14
0
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
コード例 #16
0
ファイル: reports.py プロジェクト: JaumeI/django-aula
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))      
コード例 #17
0
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
    
    
コード例 #18
0
ファイル: views.py プロジェクト: JaumeI/django-aula
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))            
コード例 #19
0
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    
    
コード例 #20
0
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)
コード例 #21
0
ファイル: views.py プロジェクト: JaumeI/django-aula
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))            
コード例 #22
0
ファイル: views.py プロジェクト: ruchmann/django-aula
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))            
コード例 #23
0
ファイル: reports.py プロジェクト: ctrl-alt-d/django-aula
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)
コード例 #24
0
ファイル: views.py プロジェクト: ctrl-alt-d/django-aula
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' ,
                    },
                )
コード例 #25
0
ファイル: reports.py プロジェクト: JaumeI/django-aula
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 )
コード例 #26
0
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',
        },
    )
コード例 #27
0
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
コード例 #28
0
ファイル: reports.py プロジェクト: ctrl-alt-d/django-aula
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 )
コード例 #29
0
ファイル: views.py プロジェクト: ctrl-alt-d/django-aula
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' ,
                    }
                )
コード例 #30
0
ファイル: views.py プロジェクト: JaumeI/django-aula
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))            
コード例 #31
0
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
コード例 #32
0
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))            
コード例 #33
0
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
コード例 #34
0
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)
コード例 #35
0
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)
コード例 #36
0
ファイル: views.py プロジェクト: ctrl-alt-d/django-aula
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
コード例 #37
0
ファイル: views.py プロジェクト: jsubias6/django-aula
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
コード例 #38
0
ファイル: reports.py プロジェクト: ctrl-alt-d/django-aula
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
コード例 #39
0
ファイル: rpt_carpeta.py プロジェクト: JaumeI/django-aula
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 )
コード例 #40
0
ファイル: views.py プロジェクト: quimsau/django-aula
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',
    })
コード例 #41
0
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
コード例 #43
0
ファイル: rpt_duplicats.py プロジェクト: JaumeI/django-aula
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                
            
コード例 #44
0
ファイル: menu.py プロジェクト: jesuspicornell/django-aula
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
コード例 #45
0
ファイル: reports.py プロジェクト: JaumeI/django-aula
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
コード例 #46
0
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
コード例 #47
0
ファイル: reports.py プロジェクト: ruchmann/django-aula
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)
コード例 #48
0
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))
コード例 #49
0
ファイル: reports.py プロジェクト: devnowcommit/django-aula
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)
コード例 #50
0
ファイル: views.py プロジェクト: quimsau/django-aula
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',
        },
    )
コード例 #51
0
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
コード例 #52
0
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),
        },
    )
コード例 #53
0
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
コード例 #54
0
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)
コード例 #55
0
ファイル: reports.py プロジェクト: jsubias6/django-aula
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
コード例 #56
0
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
コード例 #57
0
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
コード例 #58
0
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))
コード例 #59
0
ファイル: views.py プロジェクト: ctrl-alt-d/django-aula
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' ,
                    },
                )