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), # ]
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))
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))
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))
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
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))