Ejemplo n.º 1
0
def passaLlista( request, pk ):
    credentials = getImpersonateUser(request) 
    (user, l4) = credentials
    
    #prefixes:
    #https://docs.djangoproject.com/en/dev/ref/forms/api/#prefixes-for-forms    
    formset = []
    impartir = Impartir.objects.get(pk=pk)
    
    #seg-------------------------------
    pertany_al_professor = user.pk in [ impartir.horari.professor.pk,       \
                                        impartir.professor_guardia.pk if impartir.professor_guardia else -1]
    if not ( l4 or pertany_al_professor):
        raise Http404() 
    
    head=''
    info={}
    info['old'] = unicode(impartir)
    info['professor'] = unicode(impartir.horari.professor)
    info['dia_setmana'] = unicode(impartir.horari.dia_de_la_setmana)
    info['dia_complet'] = impartir.dia_impartir.strftime( "%d/%m/%Y")
    info['hora'] = unicode(impartir.horari.hora)
    info['assignatura'] = unicode(impartir.horari.assignatura)
    info['nom_aula'] = unicode(impartir.horari.nom_aula)
    info['grup'] = unicode(impartir.horari.grup)

    url_next = '/presencia/mostraImpartir/%d/%d/%d/'% ( 
                                    impartir.dia_impartir.year,
                                    impartir.dia_impartir.month,
                                    impartir.dia_impartir.day )    


    
    
    #---------------------------------Passar llista -------------------------------
    if request.method == "POST":
        #un formulari per cada alumne de la llista
        totBe = True
        quelcomBe = False
        hiHaRetard = False
        form0 = forms.Form()
        formset.append( form0 )
        for control_a in impartir.controlassistencia_set.order_by( 'alumne__grup', 'alumne' ):
            control_a.currentUser = user
            form=ControlAssistenciaForm(
                                    request.POST,
                                    prefix=str( control_a.pk ),
                                    instance=control_a )
            control_a.professor = User2Professor(user)
            control_a.credentials = credentials
            if form.is_valid():
                control_aux = form.save()
                hiHaRetard |= control_aux.estat.codi_estat == "R" 
                quelcomBe |= True
            else:
                totBe = False
                #torno a posar el valor que hi havia ( per si el tutor l'ha justificat )
                errors_formulari = form._errors
                form=ControlAssistenciaForm(
                                    prefix=str( control_a.pk ),
                                    instance=ControlAssistencia.objects.get( id= control_a.pk)  )
                form._errors =  errors_formulari
                
            form.fields['estat'].label = control_a.alumne   
            formset.append( form )                
        if quelcomBe:
            impartir.dia_passa_llista = datetime.now()
            impartir.professor_passa_llista = User2Professor( request.user )
            impartir.currentUser = user
    
            try:
                impartir.save()
                
                #si hi ha retards, recordar que un retard provoca una incidència.
                if hiHaRetard:
                    url_incidencies = reverse( "aula__horari__posa_incidencia" , kwargs={'pk': pk})
                    msg =  u"""Has posat 'Retard', recorda que els retars provoquen incidències, 
                    s'hauran generat automàticament, valora si cal 
                    <a href="{url_incidencies}">gestionar les faltes</a>.""".format( url_incidencies = url_incidencies) 
                    messages.warning(request,  SafeText(msg ) )
                #LOGGING
                Accio.objects.create( 
                        tipus = 'PL',
                        usuari = user,
                        l4 = l4,
                        impersonated_from = request.user if request.user != user else None,
                        text = u"""Passar llista: {0}.""".format( impartir )
                    )                
                 
                impartir_despres_de_passar_llista( impartir )
                if totBe:
                    return HttpResponseRedirect( url_next )
            except ValidationError, e:
                #Com que no és un formulari de model cal tractar a mà les incidències del save:
                for _, v in e.message_dict.items():
                    form0._errors.setdefault(NON_FIELD_ERRORS, []).extend(  v  )
Ejemplo n.º 2
0
def passaLlista(request, pk):
    credentials = getImpersonateUser(request)
    (user, l4) = credentials

    #prefixes:
    #https://docs.djangoproject.com/en/dev/ref/forms/api/#prefixes-for-forms
    formset = []
    impartir = Impartir.objects.get(pk=pk)

    #seg-------------------------------
    pertany_al_professor = user.pk in [ impartir.horari.professor.pk,       \
                                        impartir.professor_guardia.pk if impartir.professor_guardia else -1]
    if not (l4 or pertany_al_professor):
        raise Http404()

    head = ''
    info = {}
    info['old'] = unicode(impartir)
    info['professor'] = unicode(impartir.horari.professor)
    info['dia_setmana'] = unicode(impartir.horari.dia_de_la_setmana)
    info['dia_complet'] = impartir.dia_impartir.strftime("%d/%m/%Y")
    info['hora'] = unicode(impartir.horari.hora)
    info['assignatura'] = unicode(impartir.horari.assignatura)
    info['nom_aula'] = unicode(impartir.horari.nom_aula)
    info['grup'] = unicode(impartir.horari.grup)

    url_next = '/presencia/mostraImpartir/%d/%d/%d/' % (
        impartir.dia_impartir.year, impartir.dia_impartir.month,
        impartir.dia_impartir.day)

    #---------------------------------Passar llista -------------------------------
    if request.method == "POST":
        #un formulari per cada alumne de la llista
        totBe = True
        quelcomBe = False
        hiHaRetard = False
        form0 = forms.Form()
        formset.append(form0)
        for control_a in impartir.controlassistencia_set.order_by(
                'alumne__grup', 'alumne'):
            control_a.currentUser = user
            form = ControlAssistenciaForm(request.POST,
                                          prefix=str(control_a.pk),
                                          instance=control_a)
            control_a.professor = User2Professor(user)
            control_a.credentials = credentials
            if form.is_valid():
                try:
                    control_aux = form.save()
                    hiHaRetard |= control_aux.estat.codi_estat == "R"
                    quelcomBe |= True
                except ValidationError, e:
                    totBe = False
                    #Com que no és un formulari de model cal tractar a mà les incidències del save:
                    for _, v in e.message_dict.items():
                        form._errors.setdefault(NON_FIELD_ERRORS, []).extend(v)
            else:
                totBe = False
                #torno a posar el valor que hi havia ( per si el tutor l'ha justificat )
                errors_formulari = form._errors
                form = ControlAssistenciaForm(
                    prefix=str(control_a.pk),
                    instance=ControlAssistencia.objects.get(id=control_a.pk))
                form._errors = errors_formulari

            form.fields['estat'].label = control_a.alumne
            formset.append(form)
        if quelcomBe:
            impartir.dia_passa_llista = datetime.now()
            impartir.professor_passa_llista = User2Professor(request.user)
            impartir.currentUser = user

            try:
                impartir.save()

                #si hi ha retards, recordar que un retard provoca una incidència.
                if hiHaRetard:
                    url_incidencies = reverse("aula__horari__posa_incidencia",
                                              kwargs={'pk': pk})
                    msg = u"""Has posat 'Retard', recorda que els retars provoquen incidències, 
                    s'hauran generat automàticament, valora si cal 
                    <a href="{url_incidencies}">gestionar les faltes</a>.""".format(
                        url_incidencies=url_incidencies)
                    messages.warning(request, SafeText(msg))
                #LOGGING
                Accio.objects.create(
                    tipus='PL',
                    usuari=user,
                    l4=l4,
                    impersonated_from=request.user
                    if request.user != user else None,
                    text=u"""Passar llista: {0}.""".format(impartir))

                impartir_despres_de_passar_llista(impartir)
                if totBe:
                    return HttpResponseRedirect(url_next)
            except ValidationError, e:
                #Com que no és un formulari de model cal tractar a mà les incidències del save:
                for _, v in e.message_dict.items():
                    form0._errors.setdefault(NON_FIELD_ERRORS, []).extend(v)
Ejemplo n.º 3
0
                        impersonated_from = request.user if request.user != user else None,
                        text = u"""Passar llista: {0}.""".format( impartir )
                    )                
                 
                impartir_despres_de_passar_llista( impartir )
                if totBe:
                    return HttpResponseRedirect( url_next )
            except ValidationError, e:
                #Com que no és un formulari de model cal tractar a mà les incidències del save:
                for _, v in e.message_dict.items():
                    form0._errors.setdefault(NON_FIELD_ERRORS, []).extend(  v  )
                
    else:
        for control_a in impartir.controlassistencia_set.order_by( 'alumne' ):
            form=ControlAssistenciaForm(
                                    prefix=str( control_a.pk ),
                                    instance=control_a )
            avui_es_anivesari = ( control_a.alumne.data_neixement.month == impartir.dia_impartir.month and
                                  control_a.alumne.data_neixement.day == impartir.dia_impartir.day )  
            form.fields['estat'].label = unicode( control_a.alumne ) + ( '(fa anys en aquesta data)' if avui_es_anivesari else '')
            formset.append( form )
    

    for form in formset:
        if hasattr(form, 'instance'):
            #0 = present #1 = Falta
            d = dades_dissociades(  form.instance )
            form.hora_anterior = ( 0 if d['assistenciaaHoraAnterior'] == 'Present' else 
                                   1 if d['assistenciaaHoraAnterior'] == 'Absent' else None )
            prediccio, pct  = predictTreeModel( d)
            form.prediccio = ( 0 if prediccio == 'Present' else 
Ejemplo n.º 4
0
                    l4=l4,
                    impersonated_from=request.user
                    if request.user != user else None,
                    text=u"""Passar llista: {0}.""".format(impartir))

                impartir_despres_de_passar_llista(impartir)
                if totBe:
                    return HttpResponseRedirect(url_next)
            except ValidationError, e:
                #Com que no és un formulari de model cal tractar a mà les incidències del save:
                for _, v in e.message_dict.items():
                    form0._errors.setdefault(NON_FIELD_ERRORS, []).extend(v)

    else:
        for control_a in impartir.controlassistencia_set.order_by('alumne'):
            form = ControlAssistenciaForm(prefix=str(control_a.pk),
                                          instance=control_a)
            avui_es_anivesari = (control_a.alumne.data_neixement.month
                                 == impartir.dia_impartir.month
                                 and control_a.alumne.data_neixement.day
                                 == impartir.dia_impartir.day)
            form.fields['estat'].label = unicode(control_a.alumne) + (
                '(fa anys en aquesta data)' if avui_es_anivesari else '')
            formset.append(form)

    for form in formset:
        if hasattr(form, 'instance'):
            #0 = present #1 = Falta
            d = dades_dissociades(form.instance)
            form.hora_anterior = (
                0 if d['assistenciaaHoraAnterior'] == 'Present' else
                1 if d['assistenciaaHoraAnterior'] == 'Absent' else None)