Exemplo n.º 1
0
def entraQualitativa(request, qualitativa_pk, assignatura_pk, grup_pk):
    #FormSet: Una opció seria fer servir formSet, però em sembla que
    #com ho estic fent ara és més fàcil per l'usuari
    #https://docs.djangoproject.com/en/dev/topics/forms/formsets

    (user, l4) = tools.getImpersonateUser(request)
    professor = User2Professor(user)

    missatge = ''
    tipusForm = "formset.html"
    errors = set()

    qualitativa_pk = int(qualitativa_pk)
    qualitativa = get_object_or_404(AvaluacioQualitativa, pk=qualitativa_pk)

    assignatura_pk = int(assignatura_pk)
    assignatura = get_object_or_404(Assignatura, pk=assignatura_pk)

    hi_ha_tipus_assignatura = (assignatura.tipus_assignatura is not None
                               and assignatura.tipus_assignatura.capcelera)
    assignatura_label = assignatura.tipus_assignatura.capcelera if hi_ha_tipus_assignatura else u"Matèria"

    grup_pk = int(grup_pk)
    grup = get_object_or_404(Grup, pk=grup_pk)

    itemsQualitativa = ItemQualitativa.objects.filter(
        nivells__in=[grup.curs.nivell])

    aquestaQualitativa = Q(qualitativa__pk=qualitativa_pk) and Q(
        professor=professor) and Q(assignatura=assignatura)

    #    alumneAlta = Q( data_alta__lte = qualitativa.data_tancar_avaluacio ) & (
    #                            Q(data_baixa__isnull = True) |
    #                            Q(data_baixa__gte = qualitativa.data_tancar_avaluacio )
    #                                                        )
    #    alumnes = Alumne.objects.filter(
    #                controlassistencia__impartir__horari__grup__pk = grup_pk,
    #                controlassistencia__impartir__horari__assignatura__pk = assignatura_pk,
    #                controlassistencia__impartir__horari__professor = professor,
    #                controlassistencia__impartir__dia_impartir__gte = ( qualitativa.data_obrir_avaluacio - timedelta( days = 7 ) ),
    #                controlassistencia__impartir__dia_impartir__lte = qualitativa.data_tancar_avaluacio
    #                                ).filter(alumneAlta).distinct().order_by('cognoms')

    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

    alumnes = Alumne.objects.filter(q_alumnes_a_avaluar).distinct().order_by(
        'cognoms')

    obertaLaQualitativa = qualitativa.data_obrir_avaluacio <= date.today(
    ) <= qualitativa.data_tancar_avaluacio

    formset = []
    if request.method == "POST":
        #un formulari per cada grup
        totBe = True
        formF = modelform_factory(Assignatura, fields=['nom_assignatura'])

        form = formF(request.POST,
                     instance=assignatura,
                     prefix=str(assignatura.pk))

        form.fields['nom_assignatura'].label = assignatura_label

        if form.is_valid():
            assignatura = form.save(commit=False)
            if not bool(assignatura.nom_assignatura):
                errors.add(u"Cal posar un nom a l'assignatura.")
                totBe = False
            else:
                assignatura = form.save()
        else:
            errors.add(u"Error canviant el nom de l'assignatura.")
            totBe = False

        for alumne in alumnes:
            form = qualitativaItemsForm(request.POST,
                                        prefix=str(alumne.pk),
                                        itemsQualitativa=itemsQualitativa)
            if form.is_valid():
                try:
                    #--- TODO: Begin TX ----------------------------------------------------------------
                    for resposta in RespostaAvaluacioQualitativa.objects.filter(
                            alumne=alumne).filter(aquestaQualitativa):
                        resposta.credentials = (user, l4)
                        resposta.delete()
                    respostes = set()
                    if form.cleaned_data['q1']:
                        respostes.add(form.cleaned_data['q1'])
                    if form.cleaned_data['q2']:
                        respostes.add(form.cleaned_data['q2'])
                    if form.cleaned_data['q3']:
                        respostes.add(form.cleaned_data['q3'])
                    #if form.cleaned_data['q4']: respostes.add(form.cleaned_data['q4'])
                    for resposta in respostes:
                        try:
                            novaResposta = RespostaAvaluacioQualitativa()
                            novaResposta.alumne = alumne
                            novaResposta.item = resposta
                            novaResposta.professor = professor
                            novaResposta.qualitativa = qualitativa
                            novaResposta.assignatura = assignatura
                            novaResposta.credentials = (user, l4)
                            novaResposta.save()
                        except IntegrityError as e:
                            errors.add(
                                u"Hi ha hagut un error assignant qualitativa a {alumne}. Comprova-ho."
                                .format(alumne))

                    if form.cleaned_data['qo']:
                        novaResposta = RespostaAvaluacioQualitativa()
                        novaResposta.alumne = alumne
                        novaResposta.frase_oberta = form.cleaned_data['qo']
                        novaResposta.professor = professor
                        novaResposta.qualitativa = qualitativa
                        novaResposta.assignatura = assignatura
                        novaResposta.credentials = (user, l4)
                        novaResposta.save()
                #---Fi TX---------------------------------------------------------------
                except ValidationError, e:
                    for _, v in e.message_dict.items():
                        for x in v:
                            errors.add(x)
                    totBe = False

            else:
                totBe = False
                for _, error in form.__errors.items():
                    errors.add(error)

            if totBe:
                missatge = u'Dades actualitzades correctament'
            else:
                missatge = u'Hi ha hagut errors actualitzant les dades'

        for missatge in errors:
            messages.error(request, missatge)
        if not bool(errors):
            messages.success(request, u"Dades actualitzades correctament")
        if totBe:
            #redirect
            url_next = r"/avaluacioQualitativa/entraQualitativa/{}/{}/{}/".format(
                qualitativa_pk, assignatura_pk, grup_pk)
            return HttpResponseRedirect(url_next)
Exemplo n.º 2
0
        nRespostes = len(respostes)
        if nRespostes > 0: q1 = respostes[0].item
        if nRespostes > 1: q2 = respostes[1].item
        if nRespostes > 2: q3 = respostes[2].item
        #if nRespostes > 3: q4 = respostes[3].item

        respostes = (alumne.respostaavaluacioqualitativa_set.filter(
            aquestaQualitativa).exclude(frase_oberta=""))
        if respostes.exists():
            qo = respostes[0].frase_oberta

        form = qualitativaItemsForm(prefix=str(alumne.pk),
                                    initial={
                                        'alumne': alumne,
                                        'q1': q1,
                                        'q2': q2,
                                        'q3': q3,
                                        'qo': qo
                                    },
                                    itemsQualitativa=itemsQualitativa)

        if not obertaLaQualitativa:
            form.fields['q1'].widget.attrs['disabled'] = "True"
            form.fields['q2'].widget.attrs['disabled'] = "True"
            form.fields['q3'].widget.attrs['disabled'] = "True"
            form.fields['qo'].widget.attrs['disabled'] = "True"
            tipusForm = "formset.html"
        #else:
        form.fields['alumne'].widget.attrs['style'] = "width: 400px"
        form.fields['q1'].widget.attrs['style'] = "width: 450px"
        form.fields['q2'].widget.attrs['style'] = "width: 450px"
Exemplo n.º 3
0
def entraQualitativa( request, qualitativa_pk, assignatura_pk, grup_pk  ):
    #FormSet: Una opció seria fer servir formSet, però em sembla que
    #com ho estic fent ara és més fàcil per l'usuari
    #https://docs.djangoproject.com/en/dev/topics/forms/formsets
    
    (user, l4) = tools.getImpersonateUser(request)
    professor = User2Professor( user )

    missatge = ''
    tipusForm = "formset.html"
    errors = set()
        
    qualitativa_pk = int(qualitativa_pk)
    qualitativa = AvaluacioQualitativa.objects.get( pk = qualitativa_pk )
    
    assignatura_pk = int( assignatura_pk)
    assignatura = Assignatura.objects.get( pk = assignatura_pk ) 
    
    grup_pk = int( grup_pk )
    grup = Grup.objects.get( pk = grup_pk )
    
    itemsQualitativa = ItemQualitativa.objects.filter( nivells__in = [ grup.curs.nivell ] )
    
    aquestaQualitativa = Q( qualitativa__pk = qualitativa_pk ) and  Q( professor = professor ) and Q( assignatura = assignatura)
    
    
#    alumneAlta = Q( data_alta__lte = qualitativa.data_tancar_avaluacio ) & (
#                            Q(data_baixa__isnull = True) |
#                            Q(data_baixa__gte = qualitativa.data_tancar_avaluacio )  
#                                                        )
#    alumnes = Alumne.objects.filter( 
#                controlassistencia__impartir__horari__grup__pk = grup_pk,
#                controlassistencia__impartir__horari__assignatura__pk = assignatura_pk, 
#                controlassistencia__impartir__horari__professor = professor,
#                controlassistencia__impartir__dia_impartir__gte = ( qualitativa.data_obrir_avaluacio - timedelta( days = 7 ) ),
#                controlassistencia__impartir__dia_impartir__lte = qualitativa.data_tancar_avaluacio
#                                ).filter(alumneAlta).distinct().order_by('cognoms')
    
    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
    
    alumnes = Alumne.objects.filter( q_alumnes_a_avaluar ).distinct().order_by('cognoms')


    obertaLaQualitativa =  qualitativa.data_obrir_avaluacio <=  date.today() <= qualitativa.data_tancar_avaluacio
            
    formset = []
    if request.method == "POST":
        #un formulari per cada grup
        totBe = True
        formF=modelform_factory( Assignatura, fields=[ 'nom_assignatura' ]  )
    
        form = formF( request.POST, instance = assignatura , prefix = str( assignatura.pk ) )
        if form.is_valid():
            form.save()
        
        for alumne in alumnes:
            form=qualitativaItemsForm(
                                    request.POST,
                                    prefix=str( alumne.pk ),
                                    itemsQualitativa = itemsQualitativa
                            )
            if form.is_valid():
                try:
                    #--- TODO: Begin TX ----------------------------------------------------------------
                    for resposta in RespostaAvaluacioQualitativa.objects.filter( alumne = alumne).filter( aquestaQualitativa ):
                        resposta.credentials = (user, l4)
                        resposta.delete()
                    respostes = set()
                    if form.cleaned_data['q1']: respostes.add(form.cleaned_data['q1'])
                    if form.cleaned_data['q2']: respostes.add(form.cleaned_data['q2'])
                    if form.cleaned_data['q3']: respostes.add(form.cleaned_data['q3'])
                    #if form.cleaned_data['q4']: respostes.add(form.cleaned_data['q4'])
                    for resposta in respostes:
                        novaResposta = RespostaAvaluacioQualitativa()
                        novaResposta.alumne = alumne
                        novaResposta.item = resposta
                        novaResposta.professor = professor
                        novaResposta.qualitativa = qualitativa
                        novaResposta.assignatura = assignatura 
                        novaResposta.credentials = (user, l4)
                        novaResposta.save()
                    if form.cleaned_data['qo']: 
                        novaResposta = RespostaAvaluacioQualitativa()
                        novaResposta.alumne = alumne
                        novaResposta.frase_oberta = form.cleaned_data['qo']
                        novaResposta.professor = professor
                        novaResposta.qualitativa = qualitativa
                        novaResposta.assignatura = assignatura 
                        novaResposta.credentials = (user, l4)
                        novaResposta.save()
                #---Fi TX---------------------------------------------------------------
                except ValidationError, e:
                    for _, v in e.message_dict.items():
                        for x in v: errors.add( x )
                    totBe = False
                    
            else:
                totBe = False
                for _ , error in form.__errors.items():
                    errors.add(error)
                
            if totBe:
                missatge = u'Dades actualitzades correctament'
            else:
                missatge = u'Hi ha hagut errors actualitzant les dades'
Exemplo n.º 4
0
def entraQualitativa(request, qualitativa_pk, assignatura_pk, grup_pk):
    #FormSet: Una opció seria fer servir formSet, però em sembla que
    #com ho estic fent ara és més fàcil per l'usuari
    #https://docs.djangoproject.com/en/dev/topics/forms/formsets

    (user, l4) = tools.getImpersonateUser(request)
    professor = User2Professor(user)

    missatge = ''
    tipusForm = "formset.html"
    errors = set()

    qualitativa_pk = int(qualitativa_pk)
    qualitativa = get_object_or_404(AvaluacioQualitativa, pk=qualitativa_pk)

    assignatura_pk = int(assignatura_pk)
    assignatura = get_object_or_404(Assignatura, pk=assignatura_pk)

    hi_ha_tipus_assignatura = (assignatura.tipus_assignatura is not None
                               and assignatura.tipus_assignatura.capcelera)
    assignatura_label = assignatura.tipus_assignatura.capcelera if hi_ha_tipus_assignatura else u"Matèria"

    grup_pk = int(grup_pk)
    grup = get_object_or_404(Grup, pk=grup_pk)

    itemsQualitativa = ItemQualitativa.objects.filter(
        nivells__in=[grup.curs.nivell])

    aquestaQualitativa = Q(qualitativa__pk=qualitativa_pk) and Q(
        professor=professor) and Q(assignatura=assignatura)

    #    alumneAlta = Q( data_alta__lte = qualitativa.data_tancar_avaluacio ) & (
    #                            Q(data_baixa__isnull = True) |
    #                            Q(data_baixa__gte = qualitativa.data_tancar_avaluacio )
    #                                                        )
    #    alumnes = Alumne.objects.filter(
    #                controlassistencia__impartir__horari__grup__pk = grup_pk,
    #                controlassistencia__impartir__horari__assignatura__pk = assignatura_pk,
    #                controlassistencia__impartir__horari__professor = professor,
    #                controlassistencia__impartir__dia_impartir__gte = ( qualitativa.data_obrir_avaluacio - timedelta( days = 7 ) ),
    #                controlassistencia__impartir__dia_impartir__lte = qualitativa.data_tancar_avaluacio
    #                                ).filter(alumneAlta).distinct().order_by('cognoms')

    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

    alumnes = Alumne.objects.filter(q_alumnes_a_avaluar).distinct().order_by(
        'cognoms')

    obertaLaQualitativa = qualitativa.data_obrir_avaluacio <= date.today(
    ) <= qualitativa.data_tancar_avaluacio

    formset = []
    if request.method == "POST":
        #un formulari per cada grup
        totBe = True
        formF = modelform_factory(Assignatura, fields=['nom_assignatura'])

        form = formF(request.POST,
                     instance=assignatura,
                     prefix=str(assignatura.pk))

        form.fields['nom_assignatura'].label = assignatura_label

        if form.is_valid():
            assignatura = form.save(commit=False)
            if not bool(assignatura.nom_assignatura):
                errors.add(u"Cal posar un nom a l'assignatura.")
                totBe = False
            else:
                assignatura = form.save()
        else:
            errors.add(u"Error canviant el nom de l'assignatura.")
            totBe = False

        for alumne in alumnes:
            form = qualitativaItemsForm(request.POST,
                                        prefix=str(alumne.pk),
                                        itemsQualitativa=itemsQualitativa)
            if form.is_valid():
                try:
                    #--- TODO: Begin TX ----------------------------------------------------------------
                    for resposta in RespostaAvaluacioQualitativa.objects.filter(
                            alumne=alumne).filter(aquestaQualitativa):
                        resposta.credentials = (user, l4)
                        resposta.delete()
                    respostes = set()
                    if form.cleaned_data['q1']:
                        respostes.add(form.cleaned_data['q1'])
                    if form.cleaned_data['q2']:
                        respostes.add(form.cleaned_data['q2'])
                    if form.cleaned_data['q3']:
                        respostes.add(form.cleaned_data['q3'])
                    #if form.cleaned_data['q4']: respostes.add(form.cleaned_data['q4'])
                    for resposta in respostes:
                        try:
                            novaResposta = RespostaAvaluacioQualitativa()
                            novaResposta.alumne = alumne
                            novaResposta.item = resposta
                            novaResposta.professor = professor
                            novaResposta.qualitativa = qualitativa
                            novaResposta.assignatura = assignatura
                            novaResposta.credentials = (user, l4)
                            novaResposta.save()
                        except IntegrityError as e:
                            errors.add(
                                u"Hi ha hagut un error assignant qualitativa a {alumne}. Comprova-ho."
                                .format(alumne))

                    if form.cleaned_data['qo']:
                        novaResposta = RespostaAvaluacioQualitativa()
                        novaResposta.alumne = alumne
                        novaResposta.frase_oberta = form.cleaned_data['qo']
                        novaResposta.professor = professor
                        novaResposta.qualitativa = qualitativa
                        novaResposta.assignatura = assignatura
                        novaResposta.credentials = (user, l4)
                        novaResposta.save()
                #---Fi TX---------------------------------------------------------------
                except ValidationError as e:
                    for _, v in e.message_dict.items():
                        for x in v:
                            errors.add(x)
                    totBe = False

            else:
                totBe = False
                for _, error in form.__errors.items():
                    errors.add(error)

            if totBe:
                missatge = u'Dades actualitzades correctament'
            else:
                missatge = u'Hi ha hagut errors actualitzant les dades'

        for missatge in errors:
            messages.error(request, missatge)
        if not bool(errors):
            messages.success(request, u"Dades actualitzades correctament")
        if totBe:
            #redirect
            url_next = r"/avaluacioQualitativa/entraQualitativa/{}/{}/{}/".format(
                qualitativa_pk, assignatura_pk, grup_pk)
            return HttpResponseRedirect(url_next)

    #--- Això sempre --------------------------------------------------
    formF = modelform_factory(Assignatura, fields=['nom_assignatura'])

    form = formF(instance=assignatura, prefix=str(assignatura.pk))
    formset.append(form)

    form.fields['nom_assignatura'].label = assignatura_label

    for alumne in alumnes:
        q1 = q2 = q3 = None
        qo = ""
        respostes = list(
            alumne.respostaavaluacioqualitativa_set.filter(
                aquestaQualitativa).filter(frase_oberta=""))
        nRespostes = len(respostes)
        if nRespostes > 0: q1 = respostes[0].item
        if nRespostes > 1: q2 = respostes[1].item
        if nRespostes > 2: q3 = respostes[2].item
        #if nRespostes > 3: q4 = respostes[3].item

        respostes = (alumne.respostaavaluacioqualitativa_set.filter(
            aquestaQualitativa).exclude(frase_oberta=""))
        if respostes.exists():
            qo = respostes[0].frase_oberta

        form = qualitativaItemsForm(prefix=str(alumne.pk),
                                    initial={
                                        'alumne': alumne,
                                        'q1': q1,
                                        'q2': q2,
                                        'q3': q3,
                                        'qo': qo
                                    },
                                    itemsQualitativa=itemsQualitativa)

        if not obertaLaQualitativa:
            form.fields['q1'].widget.attrs['disabled'] = "True"
            form.fields['q2'].widget.attrs['disabled'] = "True"
            form.fields['q3'].widget.attrs['disabled'] = "True"
            form.fields['qo'].widget.attrs['disabled'] = "True"
            tipusForm = "formset.html"
        #else:
        form.fields['alumne'].widget.attrs['style'] = "width: 400px"
        form.fields['q1'].widget.attrs['style'] = "width: 450px"
        form.fields['q2'].widget.attrs['style'] = "width: 450px"
        form.fields['q3'].widget.attrs['style'] = "width: 450px"
        form.fields['qo'].widget.attrs['style'] = "width: 450px"
        #tipusForm = "formsetgrid.html"

        formset.append(form)
        #TODO: cal posar en mode readonly en cas d'estat tancat el periode de qualitativa.

    if assignatura.codi_assignatura == assignatura.nom_assignatura:
        msg = u"""En l'avaluació qualitativa, al canviar el codi de la matèria o optatives (ESO i Batxillerat) 
        o Mòdul Formatiu (Cicles) us demanaríem que escrigueu el nom en forma de Títol (no en majúscules) 
        per  unificar la visualització de matèries a l'horari quan el mirin els pares des del Djau.<br><br>

        Exemples:<br>
        <ul>
        <li>Matèria comuna: Nom de la matèria. P.ex.   Tecnologia</li>
        <li>Optatives ESO:  OPT Nom de la matèria. Pex,  OPT Dibuix Geomètric</li>
        <li>Modalitat BTX: Nom de la matèria P.ex Biologia</li>
        <li>Mòduls CFGM: codi Nom del mòdul.  P. ex. MP10 Empresa i administració</li>
        </ul>
        """
        messages.warning(request, SafeText(msg))

    return render(
        request,
        tipusForm,
        {
            "formset": formset,
            "head": u"Respostes avaluació qualitativa grup {0}".format(grup),
            "missatge": missatge,
            "errors": errors
        },
    )
Exemplo n.º 5
0
        if nRespostes > 2: q3 = respostes[2].item
        #if nRespostes > 3: q4 = respostes[3].item

        respostes = ( alumne
                     .respostaavaluacioqualitativa_set
                     .filter( aquestaQualitativa  )
                     .exclude( frase_oberta = "" ) 
                    )
        if respostes.exists():
            qo = respostes[0].frase_oberta
        
        form=qualitativaItemsForm(
                                prefix=str( alumne.pk ),
                                initial={ 'alumne':  alumne ,
                                         'q1': q1,
                                         'q2': q2,
                                         'q3': q3,
                                         'qo': qo
                                         } ,
                                itemsQualitativa = itemsQualitativa)   
        
        if not obertaLaQualitativa:
            form.fields['q1'].widget.attrs['disabled']="True"
            form.fields['q2'].widget.attrs['disabled']="True"
            form.fields['q3'].widget.attrs['disabled']="True"
            form.fields['qo'].widget.attrs['disabled']="True"
            tipusForm = "formset.html"
        #else:
        form.fields['alumne'].widget.attrs['style']="width: 400px"
        form.fields['q1'].widget.attrs['style']="width: 450px"
        form.fields['q2'].widget.attrs['style']="width: 450px"