class faltesAssistenciaEntreDatesForm(forms.Form): grup = forms.ModelChoiceField(queryset=None) assignatura = forms.ModelMultipleChoiceField(queryset=None) dataDesDe = forms.DateField(help_text=u'Data on començar a comptar', initial=datetime.today(), required=True, widget=DateTextImput()) horaDesDe = forms.ModelChoiceField(queryset=None, initial=None) dataFinsA = forms.DateField(help_text=u'Data on començar a comptar', initial=datetime.today(), required=True, widget=DateTextImput()) horaFinsA = forms.ModelChoiceField(queryset=None, initial=None) def __init__(self, *args, **kwargs): self.assignatures = kwargs.pop('assignatures', None) self.grups = kwargs.pop('grups', None) super(faltesAssistenciaEntreDatesForm, self).__init__(*args, **kwargs) self.fields['assignatura'].queryset = self.assignatures self.fields['grup'].queryset = self.grups self.fields['horaDesDe'].queryset = FranjaHoraria.objects.all() self.fields['horaDesDe'].initial = [FranjaHoraria.objects.all()[0]] self.fields['horaFinsA'].queryset = FranjaHoraria.objects.all() self.fields['horaFinsA'].initial = [FranjaHoraria.objects.reverse()[0]]
class alertaAssistenciaForm(forms.Form): data_inici = forms.DateField(label=u'Data inici', initial=datetime.today(), required=True, help_text=u'Dia inicial pel càlcul', widget=DateTextImput()) data_fi = forms.DateField(label=u'Data fi', initial=datetime.today(), required=True, help_text=u'Dia final pel càlcul', widget=DateTextImput()) tpc = forms.IntegerField( label=u'filtre %', max_value=100, min_value=1, initial=25, help_text= u'''Filtra alumnes amb % de absència superior a aquet valor.''', widget=TextInput(attrs={'class': "slider"})) nivell = forms.ModelChoiceField( queryset=Nivell.objects.all(), required=True, empty_label=None, ) ordenacio = forms.ChoiceField( choices=( ( 'a', u'Nom alumne', ), ( 'ca', u'Curs i alumne', ), ( 'n', u'Per % Assistència', ), ( 'cn', u'Per Curs i % Assistència', ), ), required=True, label=u'Ordenació', initial='a', help_text=u'Tria com vols ordenats els resultats')
class disponibilitatAulaPerFranjaForm(forms.Form): franja = forms.ModelChoiceField(queryset=FranjaHoraria.objects.all()) data = forms.DateField(help_text="Data a consultar", initial=datetime.today(), required=True, widget=DateTextImput()) def clean(self): cleaned_data = super(disponibilitatAulaPerFranjaForm, self).clean() data = self.cleaned_data['data'] tretze_dies = timedelta(days=13) darrer_dia_reserva = datetime.today().date() + tretze_dies - timedelta( days=datetime.today().weekday()) if data > darrer_dia_reserva or data < datetime.today().date(): raise forms.ValidationError( u"Només pots reservar a partir d'avui i fins al dia {0}". format(darrer_dia_reserva)) franja = self.cleaned_data['franja'] franges_del_dia = (FranjaHoraria.objects.filter( horari__impartir__dia_impartir=data).order_by('hora_inici')) primera_franja = franges_del_dia.first() darrera_franja = franges_del_dia.last() if franja.hora_inici < primera_franja.hora_inici or franja.hora_fi > darrera_franja.hora_fi: raise forms.ValidationError( u"En aquesta franja i dia no hi ha docència") return cleaned_data
class recuperacioDePasswdForm(forms.Form): p1 = forms.CharField(label="Nova Paraula de Pas", required=True, help_text=u"Paraula de pas, més de 6 caracters.", widget=forms.PasswordInput()) p2 = forms.CharField(label="Repeteix Paraula de Pas", required=True, help_text=u"Paraula de pas, més de 6 caracters.", widget=forms.PasswordInput()) data_neixement = forms.DateField( help_text=u"Data de naixement de l'alumne (Format dd/mm/yyyy)", widget=DateTextImput()) def clean_p1(self): p1 = self.cleaned_data.get('p1') if len(p1) < 6: raise forms.ValidationError( "La Paraula de Pas ha de tenir 6 ó més caracters.") return p1 def clean_p2(self): p1 = self.cleaned_data.get('p1') p2 = self.cleaned_data.get('p2') if not p2: raise forms.ValidationError("Cal confirmar la Contrasenya") if p1 != p2: raise forms.ValidationError( "Has escrit dues contrasenyes diferents") return p2
class disponibilitatRecursPerFranjaForm(forms.Form): franja = forms.ModelChoiceField( queryset = FranjaHoraria.objects.all() ) data = forms.DateField(help_text="Data a consultar", initial=datetime.today(), required=True, widget=DateTextImput()) def __init__(self, *args, **kwargs): self.user = kwargs.pop('user', None) super().__init__(*args, **kwargs) def clean(self): cleaned_data = super(disponibilitatRecursPerFranjaForm, self).clean() data=self.cleaned_data['data'] tretze_dies = timedelta(days=13) darrer_dia_reserva = datetime.today().date() + tretze_dies - timedelta(days=datetime.today().weekday()) es_reservador = User.objects.filter(pk=self.user.pk, groups__name__in=['reservador']).exists() if not es_reservador and (data > darrer_dia_reserva or data < datetime.today().date()): raise forms.ValidationError(u"Només pots reservar a partir d'avui i fins al dia {0}".format(darrer_dia_reserva)) franja = self.cleaned_data['franja'] franges_del_dia = (FranjaHoraria .objects .filter(horari__impartir__dia_impartir=data) .order_by('hora_inici') ) primera_franja = franges_del_dia.first() darrera_franja = franges_del_dia.last() if franja.hora_inici < primera_franja.hora_inici or franja.hora_fi > darrera_franja.hora_fi: raise forms.ValidationError(u"En aquesta franja i dia no hi ha docència") return cleaned_data
class complementFormulariTriaForm(forms.Form): dia = forms.DateField(label=u'Data Baixa', initial=datetime.today(), required=True, help_text=u'Data de la baixa', widget=DateTextImput()) professor = forms.ModelChoiceField(queryset=Professor.objects.all())
class passaLlistaGrupDataForm(forms.Form): grup = forms.ModelChoiceField(queryset=Grup.objects.filter( alumne__isnull=False).distinct().order_by("descripcio_grup")) dia = forms.DateField(label=u'Dia', initial=datetime.today(), help_text=u'Dia a passar llista.', widget=DateTextImput())
class regeneraImpartirForm(forms.Form): data_inici = forms.DateField( label=u'Data regeneració', initial=datetime.today(), required=True, help_text=u'Data en que entra en vigor l\'horari actual', widget=DateTextImput()) franja_inici = forms.ModelChoiceField(queryset=FranjaHoraria.objects.all(), required=True) confirma = forms.BooleanField( label=u'Confirma regenerar horaris', required=True, help_text=u'És un procés costos, confirma que el vols fer', ) def clean_data_regeneracio(self): data = self.cleaned_data['data_regeneracio'] if data < datetime.today(): raise forms.ValidationError( u'Només es pot regenerar amb dates iguals o posteriors a avui.' ) # Always return the cleaned data, whether you have changed it or # not. return data def clean_confirma(self): data = self.cleaned_data['confirma'] if not data: raise forms.ValidationError(u'Confirma la regeneració d\'horari.') return data
class complementFormulariImpresioTriaForm(forms.Form): dia = forms.DateField(label=u'Data a Imprimir', initial=datetime.today(), required=True, help_text=u'Dia a imprimir', widget=DateTextImput()) professors = forms.ModelMultipleChoiceField( queryset=Professor.objects.all())
class dataForm(forms.Form): data = forms.DateField(required=False, widget=DateTextImput()) def __init__(self, *args, **kwargs): self.label = kwargs.pop('label', None) self.help_text = kwargs.pop('help_text', None) super(dataForm, self).__init__(*args, **kwargs) self.fields['data'].label = self.label self.fields['data'].help_text = self.help_text
class disponibilitatMassivaRecursPerFranjaForm(forms.Form): franja = forms.ModelChoiceField( queryset = FranjaHoraria.objects.all() ) data_inici = forms.DateField(help_text="Data d'inici a consultar", initial=datetime.today(), required=True, widget=DateTextImput()) data_fi = forms.DateField(help_text="Data de fi a consultar", initial=datetime.today(), required=True, widget=DateTextImput()) def __init__(self, *args, **kwargs): self.user = kwargs.pop('user', None) super().__init__(*args, **kwargs) def clean(self): cleaned_data = super(disponibilitatMassivaRecursPerFranjaForm, self).clean() data_inici=self.cleaned_data['data_inici'] data_fi = self.cleaned_data['data_fi'] dia_setmana_data_inici = data_inici.weekday() dia_setmana_data_fi = data_fi.weekday() if dia_setmana_data_inici != dia_setmana_data_fi: raise forms.ValidationError(u"Les dates d'inici i fi no coincideixen en el dia de la setmana (dilluns, dimarts,...)") es_reservador = User.objects.filter(pk=self.user.pk, groups__name__in=['reservador']).exists() if not es_reservador: raise forms.ValidationError(u"Aquesta acció només la pot realitzar un usuari amb permissos") franja = self.cleaned_data['franja'] franges_del_dia = (FranjaHoraria .objects .filter(horari__impartir__dia_impartir=data_inici) .order_by('hora_inici') ) primera_franja = franges_del_dia.first() darrera_franja = franges_del_dia.last() if dia_setmana_data_inici in [5,6] or franja.hora_inici < primera_franja.hora_inici or franja.hora_fi > darrera_franja.hora_fi: raise forms.ValidationError(u"En aquesta franja i dia no hi ha docència") return cleaned_data
class Meta: model = ReservaRecurs labels = { "motiu": "Propòsit" } fields = ['recurs','dia_reserva','hora','motiu'] widgets = { 'motiu': forms.Textarea, 'dia_reserva' : DateTextImput() }
class elsMeusAlumnesTutoratsEntreDatesForm(forms.Form): grup = forms.ChoiceField() dataDesDe = forms.DateField(label=u'Data des de', initial=datetime.date.today, required=False, help_text=u'Rang de dates: primer dia.', widget=DateTextImput()) dataFinsA = forms.DateField(label=u'Data fins a', initial=datetime.date.today, required=True, help_text=u'Rang de dates: darrer dia.', widget=DateTextImput()) def __init__(self, *args, **kwargs): self.queryset = kwargs.pop('grups', None) super(elsMeusAlumnesTutoratsEntreDatesForm, self).__init__(*args, **kwargs) self.fields['grup'].choices = self.queryset
class complementFormulariTriaForm(forms.Form): dia = forms.DateField(label=u'Data Baixa', initial=datetime.today(), required=True, help_text=u'Data de la baixa', widget=DateTextImput()) professor = ModelChoiceField(widget=ModelSelect2Widget( queryset=Professor.objects.all(), search_fields=( 'last_name__icontains', 'first_name__icontains', ), attrs={'style': "'width': '100%'"}), queryset=Professor.objects.all(), required=True)
class disponibilitatAulaPerAulaForm(forms.Form): aula = ModelChoiceField(widget=ModelSelect2Widget( queryset=Aula.objects.filter(reservable=True), search_fields=['nom_aula__icontains', 'descripcio_aula__icontains'], attrs={'style': "'width': '100%'"}, ), queryset=Aula.objects.all(), required=True, help_text="Aula a consultar") data = forms.DateField(help_text="Data a consultar", initial=datetime.today(), required=True, widget=DateTextImput())
class complementFormulariImpresioTriaForm(forms.Form): dia = forms.DateField(label=u'Data a Imprimir', initial=datetime.today(), required=True, help_text=u'Dia a imprimir', widget=DateTextImput()) professors = forms.ModelMultipleChoiceField( label="Tria professors", widget=ModelSelect2MultipleWidget(queryset=Professor.objects.all(), search_fields=( 'last_name__icontains', 'first_name__icontains', ), attrs={'style': "'width': '100%'"}), queryset=Professor.objects.all(), required=True)
class calculadoraUnitatsFormativesForm(forms.Form): grup = forms.ModelChoiceField(queryset=None) assignatura = forms.ModelMultipleChoiceField(queryset=None) dataInici = forms.DateField(help_text=u'Data on començar a comptar', initial=datetime.today(), required=True, widget=DateTextImput()) hores = forms.IntegerField(help_text=u'Hores de la UF') def __init__(self, *args, **kwargs): self.assignatures = kwargs.pop('assignatures', None) self.grups = kwargs.pop('grups', None) super(calculadoraUnitatsFormativesForm, self).__init__(*args, **kwargs) self.fields['assignatura'].queryset = self.assignatures self.fields['grup'].queryset = self.grups
class informeSetmanalForm(forms.Form): grup = forms.ModelChoiceField( queryset=Grup.objects.none(), required=False, empty_label="-- Tots els alumnes --", help_text=u"""Tria un grup per fer l'informe.""") data = forms.DateField(label=u'Setmana informe:', initial=datetime.date.today, required=True, help_text=u'Data on hi ha les faltes a justificar.', widget=DateTextImput()) def __init__(self, *args, **kwargs): self.queryset = kwargs.pop('queryset', None) super(informeSetmanalForm, self).__init__(*args, **kwargs) self.fields['grup'].queryset = self.queryset
class justificaFaltesW1Form(forms.Form): alumne = forms.ModelChoiceField( queryset=Alumne.objects.none(), required=False, empty_label="(Justificador)", help_text= u"""Alumne al que vols justificar faltes.(Justificador per tot el grup)""" ) data = forms.DateField(label=u'Data faltes a justificar', initial=datetime.date.today, required=True, help_text=u'Data on hi ha les faltes a justificar.', widget=DateTextImput()) pas = forms.IntegerField(initial=1, widget=forms.HiddenInput()) def __init__(self, *args, **kwargs): self.queryset = kwargs.pop('queryset', None) super(justificaFaltesW1Form, self).__init__(*args, **kwargs) self.fields['alumne'].queryset = self.queryset
class passaLlistaGrupDataForm(forms.Form): grup = forms.ModelChoiceField(queryset=Grup.objects.all()) dia = forms.DateField(label=u'Dia', initial=datetime.today(), help_text=u'Dia a passar llista.', widget=DateTextImput())
def sortidaEdit(request, pk=None, clonar=False, origen=False): credentials = tools.getImpersonateUser(request) (user, _) = credentials es_post = (request.method == "POST") professor = User2Professor(user) professors_acompanyen_abans = set() professors_acompanyen_despres = set() professors_organitzen_abans = set() professors_organitzen_despres = set() fEsDireccioOrGrupSortides = request.user.groups.filter( name__in=[u"direcció", u"sortides"]).exists() if bool(pk) and not clonar: instance = get_object_or_404(Sortida, pk=pk) potEntrar = (professor in instance.professors_responsables.all() or professor in instance.altres_professors_acompanyants.all() or fEsDireccioOrGrupSortides) if not potEntrar: raise Http404 professors_acompanyen_abans = set( instance.altres_professors_acompanyants.all()) professors_organitzen_abans = set( instance.professors_responsables.all()) elif bool(pk) and clonar: instance = get_object_or_404(Sortida, pk=pk) instance.pk = None instance.estat = 'E' instance.titol_de_la_sortida = u"**CLONADA** " + instance.titol_de_la_sortida instance.esta_aprovada_pel_consell_escolar = 'P' instance.professor_que_proposa = professor # instance.professors_responsables = None # instance.altres_professors_acompanyants = None # instance.tutors_alumnes_convocats = None # instance.alumnes_convocats = None # instance.alumnes_que_no_vindran = None # instance.alumnes_justificacio = None # instance.professor_que_proposa_id = None else: instance = Sortida() instance.professor_que_proposa = professor instance.credentials = credentials exclude = ( 'alumnes_convocats', 'alumnes_que_no_vindran', 'alumnes_justificacio', ) formIncidenciaF = modelform_factory(Sortida, exclude=exclude) if request.method == "POST": post_mutable = request.POST.copy() if 'esta_aprovada_pel_consell_escolar' not in post_mutable: post_mutable['esta_aprovada_pel_consell_escolar'] = 'P' form = formIncidenciaF(post_mutable, instance=instance) if form.is_valid(): form.save() if origen == "Meves": messages.warning( request, SafeText(u"""RECORDA: Una vegada enviades les dades, has de seleccionar els <a href="{0}">alumnes convocats</a> i els <a href="{1}">alumnes que no hi van</a> des del menú desplegable ACCIONS""".format( "/sortides/alumnesConvocats/{id}".format( id=instance.id), "/sortides/alumnesFallen/{id}".format(id=instance.id), ))) professors_acompanyen_despres = set( instance.altres_professors_acompanyants.all()) professors_organitzen_despres = set( instance.professors_responsables.all()) acompanyen_nous = professors_acompanyen_despres - professors_acompanyen_abans organitzen_nous = professors_organitzen_despres - professors_organitzen_abans #helper missatges: data_inici = u"( data activitat encara no informada )" if instance.data_inici is not None: data_inici = """del dia {dia}""".format( dia=instance.data_inici.strftime('%d/%m/%Y')) #missatge a acompanyants: txt = u"""Has estat afegit com a professor acompanyant a l'activitat {sortida} {dia} """.format(sortida=instance.titol_de_la_sortida, dia=data_inici) enllac = reverse('sortides__sortides__edit_by_pk', kwargs={'pk': instance.id}) msg = Missatge(remitent=user, text_missatge=txt, enllac=enllac) for nou in acompanyen_nous: importancia = 'VI' msg.envia_a_usuari(nou, importancia) #missatge a responsables: txt = u"""Has estat afegit com a professor responsable a l'activitat {sortida} {dia} """.format(sortida=instance.titol_de_la_sortida, dia=data_inici) msg = Missatge(remitent=user, text_missatge=txt) for nou in organitzen_nous: importancia = 'VI' msg.envia_a_usuari(nou, importancia) nexturl = r"/sortides/sortides{origen}".format(origen=origen) return HttpResponseRedirect(nexturl) else: form = formIncidenciaF(instance=instance) form.fields['data_inici'].widget = DateTextImput() form.fields['data_fi'].widget = DateTextImput() #form.fields['estat'].widget = forms.RadioSelect( choices = form.fields['estat'].widget.choices ) widgetBootStrapButtonSelect = bootStrapButtonSelect() widgetBootStrapButtonSelect.choices = form.fields['estat'].widget.choices form.fields['estat'].widget = widgetBootStrapButtonSelect form.fields["alumnes_a_l_aula_amb_professor_titular"].widget.attrs[ 'style'] = u"width: 3%" form.fields["calendari_public"].widget.attrs['style'] = u"width: 3%" for f in form.fields: form.fields[f].widget.attrs[ 'class'] = ' form-control ' + form.fields[f].widget.attrs.get( 'class', "") form.fields['calendari_desde'].widget = DateTimeTextImput() form.fields['calendari_finsa'].widget = DateTimeTextImput() form.fields['termini_pagament'].widget = DateTimeTextImput() if not fEsDireccioOrGrupSortides: form.fields["esta_aprovada_pel_consell_escolar"].widget.attrs[ 'disabled'] = u"disabled" form.fields["codi_de_barres"].widget.attrs['disabled'] = u"disabled" form.fields["informacio_pagament"].widget.attrs[ 'disabled'] = u"disabled" #si no és propietari tot a disabled deshabilitat = (instance.id and not (professor in instance.professors_responsables.all() or fEsDireccioOrGrupSortides)) if deshabilitat: for field in form.fields: form.fields[field].widget.attrs['disabled'] = u"disabled" form.fields['estat'].label += u": {0} ".format( instance.get_estat_display()) return render( request, 'formSortida.html', { 'form': form, 'head': 'Sortides', 'missatge': 'Sortides', 'deshabilitat': '1==1' if deshabilitat else '1==2', }, )
class Meta: model = Expulsio fields = ( 'dia_expulsio', 'franja_expulsio' ) widgets = { 'dia_expulsio': DateTextImput() }