Example #1
0
def fesCarrega():
    msg = u""
    #Calen fixtures carregades:
    #      extKronowin incidencies presencia assignatures horaris seguimentTutorial missatgeria usuaris

    fitxerSaga = os.path.join(os.path.dirname(__file__),
                              '../tmp/exportSaga.txt')
    fitxerKronowin = os.path.join(os.path.dirname(__file__),
                                  '../tmp/exportKrono.txt')
    frangesMatins, frangesTardes = range(1, 5), range(6, 10)
    userDemo, new = User.objects.get_or_create(username='******',
                                               defaults={
                                                   'is_staff': True,
                                                   'is_superuser': True,
                                               })
    if new:
        userDemo.set_password('djAu')

    nivellsCursosGrups = (
        (
            'ESO',
            (
                (
                    1,
                    ('A', 'B', 'C'),
                ),
                (
                    2,
                    (
                        'A',
                        'B',
                    ),
                ),
                (
                    3,
                    (
                        'A',
                        'B',
                    ),
                ),
            ),
        ),
        (
            'CFI',
            (
                (
                    1,
                    ('A', ),
                ),
                (
                    2,
                    ('A', ),
                ),
            ),
        ),
        (
            'CFA',
            (
                (
                    1,
                    ('A', 'B'),
                ),
                (
                    2,
                    ('A', ),
                ),
            ),
        ),
    )

    print u"#GENEREM FITXERS DE DADES  "
    generaFitxerSaga(fitxerSaga, nivellsCursosGrups)
    generaFitxerKronowin(fitxerKronowin,
                         nivellsCursosGrups,
                         nivellsMatins=[
                             'ESO',
                         ],
                         frangesMatins=frangesMatins,
                         frangesTardes=frangesTardes)

    print u"#CREEM NIVELL-CURS-GRUP"
    handlerKronowin = open(fitxerKronowin, 'r')
    inici_curs = date.today() + relativedelta(months=-1)
    fi_curs = date.today() + relativedelta(days=10)
    sincronitzaKronowin.creaNivellCursGrupDesDeKronowin(
        handlerKronowin, inici_curs, fi_curs)

    print u"#Creem correspondències amb horaris"
    frangesAula = FranjaHoraria.objects.filter(hora_inici__in=[
        '09:15', '10:30', '11:30', '12:45', '15:45', '16:45', '18:05', '19:00'
    ]).order_by('hora_inici')
    frangesKronowin = frangesMatins + frangesTardes
    for frangaAula, franjaKronowin in zip(frangesAula, frangesKronowin):
        Franja2Aula.objects.get_or_create(franja_kronowin=franjaKronowin,
                                          franja_aula=frangaAula)

    print u"#CREEM CORRESPONDÈNCIES  SAGA-KRONOWIN-AULA"
    for nivell, GrupsCursos in nivellsCursosGrups:
        for curs, Grups in GrupsCursos:
            for grup in Grups:
                lgrup = u"{nivell}{curs}{grup}".format(nivell=nivell,
                                                       grup=grup,
                                                       curs=curs)
                grupAula = Grup.objects.get(descripcio_grup=lgrup)
                SGrup2Aula.objects.create(grup_saga=lgrup, Grup2Aula=grupAula)
                #KGrup2Aula.objects.create( grup_kronowin = lgrup, Grup2Aula = grupAula  )   #ho fa als crear els grups

    print u"#Importem Kronowin 1 ( Per crear professors )"
    handlerKronowin = open(fitxerKronowin, 'r')
    result = sincronitzaKronowin.sincronitza(handlerKronowin, userDemo)
    print u"Resultat importació kroniwin 1: ", result["errors"], result[
        "warnings"],

    print u"#Importem Kronowin 2 ( Per importar horaris )"
    handlerKronowin = open(fitxerKronowin, 'r')
    result = sincronitzaKronowin.sincronitza(handlerKronowin, userDemo)
    print u"Resultat importació kroniwin 2: ", result["errors"], result[
        "warnings"],

    print u"#Importem saga"
    handlerSaga = open(fitxerSaga, 'r')
    result = sincronitzaSaga.sincronitza(handlerSaga, userDemo)
    print u"Resultat importació saga: ", result["errors"], result["warnings"],

    print u"#Assignem tutors"
    for g in Grup.objects.all():
        professors_del_grup = Professor.objects.filter(
            horari__grup=g).distinct()
        if professors_del_grup:
            Tutor.objects.create(professor=random.choice(professors_del_grup),
                                 grup=g)

    msg += "\nProfessors: " + u" ,".join(
        sorted(set([unicode(t.username) for t in Professor.objects.all()])))
    msg += "\nTutors: " + u" ,".join(
        sorted(
            set([unicode(t.professor.username) for t in Tutor.objects.all()])))

    print u"#Assignem equip directiu"
    direccio, _ = Group.objects.get_or_create(name='direcció')
    sisplau_que_no_siguin_mediocres = [
        random.choice(Professor.objects.all())
    ] + [p for p in Professor.objects.filter(username__endswith='1')]
    for sisplau_que_no_sigui_mediocre in sisplau_que_no_siguin_mediocres:
        sisplau_que_no_sigui_mediocre.groups.add(direccio)
        sisplau_que_no_sigui_mediocre.is_staff = True
        sisplau_que_no_sigui_mediocre.is_superuser = True
        sisplau_que_no_sigui_mediocre.save()
    msg += u"\nDirecció: " + u" ,".join(
        sorted(
            set([
                unicode(t.username)
                for t.username in sisplau_que_no_siguin_mediocres
            ])))

    print u"Regenerar impartir"
    r = regeneraThread(
        data_inici=None,  #data inici de curs 
        franja_inici=FranjaHoraria.objects.all()[:1].get(),
        user=userDemo)
    r.start()
    r.join()

    print u"Posar alumnes a llistes"
    seguents7dies = Impartir.objects.values('dia_impartir').order_by(
        'dia_impartir').distinct()[:5]
    for dia in seguents7dies:
        print 'Dia', dia, u' ( ompliré 5 dies )'
        for impartir in Impartir.objects.filter(
                dia_impartir=dia['dia_impartir']):
            if not impartir.controlassistencia_set.exists():
                alumnes = [
                    alumne for grup in impartir.horari.grupsPotencials()
                    for alumne in grup.alumne_set.all()
                ]
                random.shuffle(alumnes)
                n_alumnes = random.randint(1, 4)
                afegeix = afegeixThread(expandir=False,
                                        alumnes=alumnes[:n_alumnes],
                                        impartir=impartir,
                                        usuari=impartir.horari.professor,
                                        matmulla=False)
                afegeix.start()
                afegeix.join()

    print u"canviant dades dels professors"
    for p in Professor.objects.all():
        p.first_name, p.last_name = getRandomNomICognoms()
        p.set_password('djAu')
        p.save()

    msg += u"\nTots els passwords de professors: 'djAu' "

    return msg
    impartir_anteriors = Impartir.objects.filter( horari__hora = imparticio.horari.hora,
                                                horari__assignatura = imparticio.horari.assignatura,
                                                horari__professor = imparticio.horari.professor,
                                                horari__grup = imparticio.horari.grup,
                                                dia_impartir = (imparticio.dia_impartir - una_setmana) )
    if te_alumnes:
        continue
    if impartir_anteriors.count()   != 1:
        continue
    impartir_anterior=impartir_anteriors.get()
    alumnes = [ ca.alumne for ca in impartir_anterior.controlassistencia_set.all()]
    user = imparticio.horari.professor.getUser()
    if debuga:
        print ('Impartir ', impartir_anterior )
    else:
        afegeix=afegeixThread(expandir = False, alumnes=alumnes, impartir=imparticio, usuari = user, matmulla = False)
        afegeix.start()
        afegeix.join()

#
# from datetime import datetime
# from datetime import timedelta
# from aula.apps.presencia.afegeixTreuAlumnesLlista import afegeixThread
#
# dates = [
#    datetime(2015,5,5),
#    datetime(2015,5,6),
#    datetime(2015,5,7),
#    datetime(2015,5,8),
#    datetime(2015,5,11),
# ]
Example #3
0
def afegeixAlumnesLlista(request, pk):
    credentials = getImpersonateUser(request) 
    (user, l4) = credentials   
    
    head=u'Afegir alumnes a la llista' 

    pk = int(pk)
    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() 
        
    alumnes_pk = [ ca.alumne.pk for ca in impartir.controlassistencia_set.all()]
    #http://www.ibm.com/developerworks/opensource/library/os-django-models/index.html?S_TACT=105AGX44&S_CMP=EDU

    #un formulari per cada grup
    grups_a_mostrar = impartir.horari.grupsPotencials()

    formset = []
    if request.method == "POST":
        
        expandir = False
        alumnes = []
        
        totBe = True
        
        #
        #primer form: expandir
        #
        formExpandir=afegeixAlumnesLlistaExpandirForm( request.POST, prefix='tots')    
        formset.append( formExpandir )    
        if formExpandir.is_valid():
            expandir = formExpandir.cleaned_data['expandir_a_totes_les_meves_hores']
            matmulla = formExpandir.cleaned_data['matmulla']
        else:
            totBe = False        
        #
        #altres forms: grups d'alumnes        
        #
        for grup in grups_a_mostrar:
            form=afegeixTreuAlumnesLlistaForm(
                                    request.POST,
                                    prefix=str( grup.pk ),
                                    queryset =  grup.alumne_set.exclude( pk__in = alumnes_pk )  ,       
                                    etiqueta = unicode(grup)                             
                                     )
            formset.append( form )
            if form.is_valid():                
                alumnes += form.cleaned_data['alumnes']
            else:
                totBe = False

        #TODO: afegir error a mà

        
        if totBe:
            from aula.apps.presencia.afegeixTreuAlumnesLlista import afegeixThread
            afegeix=afegeixThread(expandir = expandir, alumnes=alumnes, impartir=impartir, usuari = user, matmulla = matmulla)
            afegeix.start()

            #LOGGING
            Accio.objects.create( 
                    tipus = 'LL',
                    usuari = user,
                    l4 = l4,
                    impersonated_from = request.user if request.user != user else None,
                    text = u"""Posar alumnes de la classe {0} (Forçat:{1}, Expandir:{2}): {3}""".format(
                                impartir,                                                                         
                                u'Sí' if matmulla else 'No', 
                                u'Sí' if expandir else 'No', 
                                u', '.join( [ unicode(a) for a in alumnes  ] )                                                        
                                  )
                )
                        
            #espero a que estigui fet el primer dia: abans de mostrar la pantalla de passar llista
            import time
            while afegeix and not afegeix.primerDiaFet(): time.sleep(  0.5 )
            
            return HttpResponseRedirect('/presencia/passaLlista/%s/'% pk )

    else:
        
        #primer form: expandir
        formExpandir=afegeixAlumnesLlistaExpandirForm( 
                                            prefix='tots', 
                                            initial={'expandir_a_totes_les_meves_hores':False})
        formset.append( formExpandir )

        #altres forms: grups d'alumnes        
        for grup in grups_a_mostrar:
            #http://www.ibm.com/developerworks/opensource/library/os-django-models/index.html?S_TACT=105AGX44&S_CMP=EDU
            form=afegeixTreuAlumnesLlistaForm(
                                    prefix=str( grup.pk ),
                                    queryset =  grup.alumne_set.exclude( pk__in = alumnes_pk )  ,                                    
                                    etiqueta = unicode( grup )                             
                                     )
            formset.append( form )
        
    return render_to_response(
                  "formset.html", 
                  {"formset": formset,
                   "head": head,
                   },
                  context_instance=RequestContext(request))
Example #4
0
def copiarAlumnesLlista(request, pk):
    credentials = getImpersonateUser(request)
    (user, l4) = credentials

    head = u'Copiar alumnes a la llista a partir d\'una altre hora'

    pk = int(pk)
    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()

    formset = []

    formHores = None

    import datetime as t

    dataRef = date.today()
    dillunsSetmana = dataRef + t.timedelta(days=-dataRef.weekday())
    #4 és el divendres 0,1,2,3,4 (5é dia)
    divendresSetmana = dataRef + t.timedelta(days=4 - dataRef.weekday())
    dInici = date(year=dillunsSetmana.year,
                  month=dillunsSetmana.month,
                  day=dillunsSetmana.day)
    dFi = date(year=divendresSetmana.year,
               month=divendresSetmana.month,
               day=divendresSetmana.day)

    horarisProfe = Impartir.objects \
                    .filter(dia_impartir__gte=dInici) \
                    .filter(dia_impartir__lte=dFi) \
                    .filter(horari__professor=user.pk) \
                    .order_by('horari')
    opcions = []
    for eH in horarisProfe:
        assistencies = ControlAssistencia.objects.filter(impartir__id=eH.id)
        opcions.append((eH.id, unicode(eH.horari.assignatura) + " " +
                        unicode(eH.horari.dia_de_la_setmana) + " " +
                        unicode(eH.horari.hora) + u'--> Alumnes: ' +
                        unicode(len(assistencies)) + ''))

    if request.method == "POST":
        formHores = llistaLesMevesHoresForm(request.POST,
                                            llistaHoresProfe=opcions)
        if formHores.is_valid():
            #Inicio el procés de copia.
            #No deixar copiar si és la mateixa hora.
            eliminarAlumnes = formHores.cleaned_data['eliminarAlumnes']
            idHoraOrigen = formHores.cleaned_data['hores']
            idHoraDesti = pk
            horaDesti = Impartir.objects.get(id=idHoraDesti)

            if int(idHoraOrigen) == int(idHoraDesti):
                formHores._errors.setdefault(NON_FIELD_ERRORS, []).extend(
                    [u'''No pots copiar alumnes sobre la mateixa hora.'''])
            else:

                #Obtenir llista d'alumnes de destí per veure solapaments.
                alumnesDesti = {}
                assistenciesDesti = ControlAssistencia.objects.filter(
                    impartir__id=idHoraDesti)
                for ca in assistenciesDesti:
                    alumnesDesti[ca.alumne.id] = ca.alumne

                assistenciesOrigen = ControlAssistencia.objects.filter(
                    impartir__id=idHoraOrigen)
                alumnesAAfegir = []
                for ca in assistenciesOrigen:
                    #Gravar la llista d'alumnes al destí.
                    if eliminarAlumnes:
                        #Copiem tots els alumnes perque els esborrarem tots abans.
                        print "DEBUG: Alumne que cal copiar:" + str(ca.alumne)
                        alumnesAAfegir.append(ca.alumne)
                    else:
                        #Copiem només els alumnes que ens interessen.
                        if ca.alumne.id not in alumnesDesti:
                            print "DEBUG: Alumne que cal copiar:" + str(
                                ca.alumne)
                            alumnesAAfegir.append(ca.alumne)

                from aula.apps.presencia.afegeixTreuAlumnesLlista import afegeixThread, treuThread
                #Eliminem alumnes abans de copiar.
                if eliminarAlumnes:
                    treu = treuThread(expandir=None,
                                      alumnes=alumnesDesti.values(),
                                      impartir=horaDesti,
                                      matmulla=False)
                    treu.usuari = user
                    treu.start()

                    print "inici join"
                    #Espera el final de l'eliminació.
                    treu.join()
                    print "fi join"

                    #LOGGING
                    Accio.objects.create(
                        tipus='LL',
                        usuari=user,
                        l4=l4,
                        impersonated_from=request.user
                        if request.user != user else None,
                        text=u"""Copiar alumnes, eliminar alumnes de {0}: {1}"""
                        .format(horaDesti,
                                u', '.join([unicode(a)
                                            for a in alumnesDesti])))

                #Llança el thread que expandirà a la resta del curs.
                afegeix = afegeixThread(expandir=None,
                                        alumnes=alumnesAAfegir,
                                        impartir=horaDesti,
                                        usuari=user,
                                        matmulla=False)
                afegeix.start()

                #LOGGING
                Accio.objects.create(
                    tipus='LL',
                    usuari=user,
                    l4=l4,
                    impersonated_from=request.user
                    if request.user != user else None,
                    text=u"""Copiar alumnes de {0} a {1}: {2}""".format(
                        impartir, horaDesti,
                        u', '.join([unicode(a) for a in alumnesAAfegir])))

                #espero a que estigui fet el primer dia: abans de mostrar la pantalla de passar llista
                import time
                while afegeix and not afegeix.primerDiaFet():
                    time.sleep(0.5)
                return HttpResponseRedirect('/presencia/passaLlista/%s/' % pk)
    else:
        formHores = llistaLesMevesHoresForm(llistaHoresProfe=opcions)

    formset.append(formHores)

    return render_to_response("formset.html", {
        "formset": formset,
        "head": head,
    },
                              context_instance=RequestContext(request))
Example #5
0
def afegeixAlumnesLlista(request, pk):
    credentials = getImpersonateUser(request)
    (user, l4) = credentials

    head = u'Afegir alumnes a la llista'

    pk = int(pk)
    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()

    alumnes_pk = [ca.alumne.pk for ca in impartir.controlassistencia_set.all()]
    #http://www.ibm.com/developerworks/opensource/library/os-django-models/index.html?S_TACT=105AGX44&S_CMP=EDU

    #un formulari per cada grup
    grups_a_mostrar = impartir.horari.grupsPotencials()

    formset = []
    if request.method == "POST":

        expandir = False
        alumnes = []

        totBe = True

        #
        #primer form: expandir
        #
        formExpandir = afegeixAlumnesLlistaExpandirForm(request.POST,
                                                        prefix='tots')
        formset.append(formExpandir)
        if formExpandir.is_valid():
            expandir = formExpandir.cleaned_data[
                'expandir_a_totes_les_meves_hores']
            matmulla = formExpandir.cleaned_data['matmulla']
        else:
            totBe = False
        #
        #altres forms: grups d'alumnes
        #
        for grup in grups_a_mostrar:
            form = afegeixTreuAlumnesLlistaForm(
                request.POST,
                prefix=str(grup.pk),
                queryset=grup.alumne_set.exclude(pk__in=alumnes_pk),
                etiqueta=unicode(grup))
            formset.append(form)
            if form.is_valid():
                alumnes += form.cleaned_data['alumnes']
            else:
                totBe = False

        #TODO: afegir error a mà

        if totBe:
            from aula.apps.presencia.afegeixTreuAlumnesLlista import afegeixThread
            afegeix = afegeixThread(expandir=expandir,
                                    alumnes=alumnes,
                                    impartir=impartir,
                                    usuari=user,
                                    matmulla=matmulla)
            afegeix.start()

            #LOGGING
            Accio.objects.create(
                tipus='LL',
                usuari=user,
                l4=l4,
                impersonated_from=request.user
                if request.user != user else None,
                text=
                u"""Posar alumnes de la classe {0} (Forçat:{1}, Expandir:{2}): {3}"""
                .format(impartir, u'Sí' if matmulla else 'No',
                        u'Sí' if expandir else 'No',
                        u', '.join([unicode(a) for a in alumnes])))

            #espero a que estigui fet el primer dia: abans de mostrar la pantalla de passar llista
            import time
            while afegeix and not afegeix.primerDiaFet():
                time.sleep(0.5)

            return HttpResponseRedirect('/presencia/passaLlista/%s/' % pk)

    else:

        #primer form: expandir
        formExpandir = afegeixAlumnesLlistaExpandirForm(
            prefix='tots', initial={'expandir_a_totes_les_meves_hores': False})
        formset.append(formExpandir)

        #altres forms: grups d'alumnes
        for grup in grups_a_mostrar:
            #http://www.ibm.com/developerworks/opensource/library/os-django-models/index.html?S_TACT=105AGX44&S_CMP=EDU
            form = afegeixTreuAlumnesLlistaForm(
                prefix=str(grup.pk),
                queryset=grup.alumne_set.exclude(pk__in=alumnes_pk),
                etiqueta=unicode(grup))
            formset.append(form)

    return render_to_response("formset.html", {
        "formset": formset,
        "head": head,
    },
                              context_instance=RequestContext(request))
Example #6
0
def fesCarrega( ):
    msg = u""
    #Calen fixtures carregades:
    #      extKronowin incidencies presencia assignatures horaris seguimentTutorial missatgeria usuaris    
    
    fitxerSaga = os.path.join( os.path.dirname(__file__), '../tmp/exportSaga.txt')
    fitxerKronowin = os.path.join( os.path.dirname(__file__), '../tmp/exportKrono.txt')
    frangesMatins, frangesTardes = range(1,5), range(6,10) 
    userDemo, new = User.objects.get_or_create( username = '******', defaults={'is_staff':True, 'is_superuser':True, } )
    if new:
        userDemo.set_password( '1234' )
    
    nivellsCursosGrups = ( 
                            ( 'ESO', 
                              (
                                 ( 1, ( 'A','B','C'), ),
                                 ( 2, ( 'A','B',), ),
                                 ( 3, ( 'A','B',), ),
                              ),
                            ),
                            ( 'CFI',
                              (
                                  ( 1, ( 'A',), ),
                                  ( 2, ( 'A',), ),
                              ),
                            ),
                            ( 'CFA',
                              (
                                  ( 1, ( 'A','B'), ),
                                  ( 2, ( 'A',), ),
                              ),
                            ),
                         )

    print u"#GENEREM FITXERS DE DADES  "                        
    generaFitxerSaga(fitxerSaga, nivellsCursosGrups  )
    generaFitxerKronowin( fitxerKronowin, nivellsCursosGrups, nivellsMatins=['ESO',], frangesMatins = frangesMatins, frangesTardes  = frangesTardes )
    
    print u"#CREEM NIVELL-CURS-GRUP"
    handlerKronowin=open( fitxerKronowin, 'r' )
    inici_curs = date.today() + relativedelta( months = -1)
    fi_curs = date.today() + relativedelta( months = 1)
    sincronitzaKronowin.creaNivellCursGrupDesDeKronowin( handlerKronowin, inici_curs, fi_curs )
    
    print u"#Creem correspondències amb horaris"
    frangesAula = FranjaHoraria.objects.filter( hora_inici__in = ['09:15', '10:30', '11:30' ,'12:45',
                                                                  '15:45', '16:45', '18:05', '19:00'] ).order_by ( 'hora_inici' )
    frangesKronowin = frangesMatins + frangesTardes
    for frangaAula, franjaKronowin in zip(frangesAula, frangesKronowin  ):
        Franja2Aula.objects.get_or_create( franja_kronowin= franjaKronowin,  franja_aula = frangaAula )
        
    print u"#CREEM CORRESPONDÈNCIES  SAGA-KRONOWIN-AULA"
    for nivell, GrupsCursos in nivellsCursosGrups:
        for curs, Grups in GrupsCursos:
            for grup in Grups:
                lgrup = u"{nivell}{curs}{grup}".format( nivell = nivell, grup = grup, curs = curs) 
                grupAula = Grup.objects.get( descripcio_grup = lgrup )
                SGrup2Aula.objects.create( grup_saga = lgrup, Grup2Aula = grupAula  )
                #KGrup2Aula.objects.create( grup_kronowin = lgrup, Grup2Aula = grupAula  )   #ho fa als crear els grups

    print u"#Importem Kronowin 1 ( Per crear professors )"
    handlerKronowin=open( fitxerKronowin, 'r' )
    result = sincronitzaKronowin.sincronitza( handlerKronowin, userDemo  )
    print u"Resultat importació kroniwin 1: ", result["errors"], result["warnings"],  
    
    print u"#Importem Kronowin 2 ( Per importar horaris )"
    handlerKronowin=open( fitxerKronowin, 'r' )
    result = sincronitzaKronowin.sincronitza( handlerKronowin, userDemo  )
    print u"Resultat importació kroniwin 2: ", result["errors"], result["warnings"],  

    print u"#Importem saga"
    handlerSaga=open( fitxerSaga, 'r' )
    result = sincronitzaSaga.sincronitza( handlerSaga, userDemo  )
    print u"Resultat importació saga: ", result["errors"], result["warnings"],  
    
    print u"#Assignem tutors"
    for g in Grup.objects.all():
        professors_del_grup = Professor.objects.filter( horari__grup = g ).distinct()
        if professors_del_grup:
            Tutor.objects.create( professor = random.choice( professors_del_grup ) ,  grup = g )
    
    msg += "\nProfessors: " + u" ,".join( sorted( set( [ unicode( t.username ) for t in Professor.objects.all() ] ) ) )
    msg += "\nTutors: " + u" ,".join( sorted( set( [ unicode( t.professor.username ) for t in Tutor.objects.all() ] ) ) )
                    
    print u"#Assignem equip directiu"
    direccio, _ = Group.objects.get_or_create(name= 'direcció' )
    sisplau_que_no_siguin_mediocres = [ random.choice(  Professor.objects.all() ) ] + [ p for p in Professor.objects.filter( username__endswith = '1' )]
    for sisplau_que_no_sigui_mediocre in sisplau_que_no_siguin_mediocres:
        sisplau_que_no_sigui_mediocre.groups.add( direccio  )
        sisplau_que_no_sigui_mediocre.is_staff = True
        sisplau_que_no_sigui_mediocre.is_superuser = True
        sisplau_que_no_sigui_mediocre.save()    
    msg += u"\nDirecció: "  + u" ,".join( sorted( set( [ unicode( t.username ) for t.username in sisplau_que_no_siguin_mediocres ]  ) ) )
    
    print u"Regenerar impartir"
    r=regeneraThread(
                    data_inici= None,       #data inici de curs 
                    franja_inici = FranjaHoraria.objects.all()[:1].get(),
                    user = userDemo
                    )
    r.start()    
    r.join()
    
    print u"Posar alumnes a llistes"
    seguents7dies = Impartir.objects.values( 'dia_impartir').order_by('dia_impartir').distinct()[:5]
    for dia in seguents7dies:
        for impartir in Impartir.objects.filter( dia_impartir = dia['dia_impartir'] ):
            if not impartir.controlassistencia_set.exists():
                alumnes =  [ alumne for grup in impartir.horari.grupsPotencials() for alumne in grup.alumne_set.all() ] 
                random.shuffle( alumnes )
                n_alumnes = random.randint( 3,7 )
                afegeix=afegeixThread(expandir = True, alumnes=alumnes[:n_alumnes], impartir=impartir, usuari = impartir.horari.professor, matmulla = False)
                afegeix.start()
                afegeix.join()
    
    print u"canviant dades dels professors"
    for p in Professor.objects.all():
        p.first_name, p.last_name = getRandomNomICognoms() 
        p.set_password( 'djAu' )
        p.save()
        
    msg += u"\nTots els passwords de professors: 'djAu' "
        
    return msg


    
    
    
    
    
Example #7
0
def copiarAlumnesLlista(request, pk):
    credentials = getImpersonateUser(request) 
    (user, l4) = credentials   
    
    head=u'Copiar alumnes a la llista a partir d\'una altre hora' 

    pk = int(pk)
    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() 

    formset = []    

    formHores = None

    import datetime as t

    dataRef = date.today()
    dillunsSetmana = dataRef + t.timedelta(days=-dataRef.weekday())
    #4 és el divendres 0,1,2,3,4 (5é dia)
    divendresSetmana = dataRef + t.timedelta(days=4-dataRef.weekday())
    dInici = date(year=dillunsSetmana.year, month=dillunsSetmana.month, day=dillunsSetmana.day)
    dFi = date(year=divendresSetmana.year, month=divendresSetmana.month, day=divendresSetmana.day)

    horarisProfe = Impartir.objects \
                    .filter(dia_impartir__gte=dInici) \
                    .filter(dia_impartir__lte=dFi) \
                    .filter(horari__professor=user.pk) \
                    .order_by('horari')
    opcions = []
    for eH in horarisProfe:
        assistencies = ControlAssistencia.objects.filter(impartir__id=eH.id)
        opcions.append((eH.id, 
            unicode(eH.horari.assignatura) + " " + unicode(eH.horari.dia_de_la_setmana) + " " + unicode(eH.horari.hora) + 
            u'--> Alumnes: ' + unicode(len(assistencies)) + ''))

    if request.method == "POST":
        formHores = llistaLesMevesHoresForm(request.POST, llistaHoresProfe=opcions)
        if formHores.is_valid():
            #Inicio el procés de copia.
            #No deixar copiar si és la mateixa hora.
            eliminarAlumnes = formHores.cleaned_data['eliminarAlumnes']
            idHoraOrigen = formHores.cleaned_data['hores']
            idHoraDesti = pk
            horaDesti = Impartir.objects.get(id=idHoraDesti)

            if int(idHoraOrigen) == int(idHoraDesti):
                formHores._errors.setdefault(NON_FIELD_ERRORS, []).extend(
                    [ u'''No pots copiar alumnes sobre la mateixa hora.'''])
            else:
                
                #Obtenir llista d'alumnes de destí per veure solapaments.
                alumnesDesti = {}
                assistenciesDesti = ControlAssistencia.objects.filter(impartir__id=idHoraDesti)
                for ca in assistenciesDesti:
                    alumnesDesti[ca.alumne.id] = ca.alumne

                assistenciesOrigen = ControlAssistencia.objects.filter(impartir__id=idHoraOrigen)
                alumnesAAfegir = []
                for ca in assistenciesOrigen:
                    #Gravar la llista d'alumnes al destí.
                    if eliminarAlumnes:
                        #Copiem tots els alumnes perque els esborrarem tots abans.
                        print "DEBUG: Alumne que cal copiar:" + str(ca.alumne)
                        alumnesAAfegir.append(ca.alumne)
                    else:
                        #Copiem només els alumnes que ens interessen.
                        if ca.alumne.id not in alumnesDesti:
                            print "DEBUG: Alumne que cal copiar:" + str(ca.alumne)
                            alumnesAAfegir.append(ca.alumne)

                

   
                from aula.apps.presencia.afegeixTreuAlumnesLlista import afegeixThread, treuThread
                #Eliminem alumnes abans de copiar.
                if eliminarAlumnes:
                    treu = treuThread(expandir=None, alumnes=alumnesDesti.values(), impartir=horaDesti, matmulla = False)
                    treu.usuari = user
                    treu.start()

                    print "inici join"
                    #Espera el final de l'eliminació.
                    treu.join()
                    print "fi join"
                    
                    #LOGGING
                    Accio.objects.create( 
                            tipus = 'LL',
                            usuari = user,
                            l4 = l4,
                            impersonated_from = request.user if request.user != user else None,
                            text = u"""Copiar alumnes, eliminar alumnes de {0}: {1}""".format(
                                        horaDesti, 
                                        u', '.join( [ unicode(a) for a in alumnesDesti ])))


                #Llança el thread que expandirà a la resta del curs.
                afegeix=afegeixThread(expandir=None, alumnes=alumnesAAfegir, impartir=horaDesti, usuari=user, matmulla=False)
                afegeix.start()

                #LOGGING
                Accio.objects.create( 
                        tipus = 'LL',
                        usuari = user,
                        l4 = l4,
                        impersonated_from = request.user if request.user != user else None,
                        text = u"""Copiar alumnes de {0} a {1}: {2}""".format(
                                    impartir,                                                                         
                                    horaDesti, 
                                    u', '.join( [ unicode(a) for a in alumnesAAfegir ])))
                            
                #espero a que estigui fet el primer dia: abans de mostrar la pantalla de passar llista
                import time
                while afegeix and not afegeix.primerDiaFet(): time.sleep(  0.5 )
                return HttpResponseRedirect('/presencia/passaLlista/%s/'% pk )
    else:
        formHores = llistaLesMevesHoresForm(llistaHoresProfe=opcions)

    formset.append(formHores)
    
    return render_to_response(
                  "formset.html", 
                  {"formset": formset,
                   "head": head,
                   },
                  context_instance=RequestContext(request))