def __init__(self, *args, **kwargs): super(SessaoPlenariaFilterSet, self).__init__(*args, **kwargs) # pré-popula o campo do formulário com o ano corrente self.form.fields['data_inicio__year'].initial = timezone.now().year row1 = to_row([('data_inicio__year', 3), ('data_inicio__month', 3), ('data_inicio__day', 3), ('tipo', 3)]) self.form.helper = SaplFormHelper() self.form.helper.form_method = 'GET' self.form.helper.layout = Layout( Fieldset(self.titulo, row1, form_actions(label='Pesquisar')))
class ExpedienteMateriaForm(ModelForm): _model = ExpedienteMateria data_atual = timezone.now() tipo_materia = forms.ModelChoiceField( label=_('Tipo Matéria'), required=True, queryset=TipoMateriaLegislativa.objects.all(), empty_label='Selecione', widget=forms.Select(attrs={'autocomplete': 'off'})) numero_materia = forms.CharField( label='Número Matéria', required=True, widget=forms.TextInput(attrs={'autocomplete': 'off'})) ano_materia = forms.CharField( label='Ano Matéria', initial=int(data_atual.year), required=True, widget=forms.TextInput(attrs={'autocomplete': 'off'})) data_ordem = forms.CharField( label='Data Sessão', initial=datetime.strftime(timezone.now(), '%d/%m/%Y'), widget=forms.TextInput(attrs={'readonly': 'readonly'})) class Meta: model = ExpedienteMateria fields = [ 'data_ordem', 'numero_ordem', 'tipo_materia', 'observacao', 'numero_materia', 'ano_materia', 'tipo_votacao' ] def clean_numero_ordem(self): sessao = self.instance.sessao_plenaria numero_ordem_exists = ExpedienteMateria.objects.filter( sessao_plenaria=sessao, numero_ordem=self.cleaned_data['numero_ordem']).exists() if numero_ordem_exists and not self.instance.pk: msg = _('Esse número de ordem já existe.') raise ValidationError(msg) return self.cleaned_data['numero_ordem'] def clean_data_ordem(self): return self.instance.sessao_plenaria.data_inicio def clean(self): cleaned_data = super(ExpedienteMateriaForm, self).clean() if not self.is_valid(): return cleaned_data sessao = self.instance.sessao_plenaria try: materia = MateriaLegislativa.objects.get( numero=self.cleaned_data['numero_materia'], ano=self.cleaned_data['ano_materia'], tipo=self.cleaned_data['tipo_materia']) except ObjectDoesNotExist: msg = _('A matéria a ser inclusa não existe no cadastro' ' de matérias legislativas.') raise ValidationError(msg) else: cleaned_data['materia'] = materia exists = self._model.objects.filter(sessao_plenaria=sessao, materia=materia).exists() if exists and not self.instance.pk: msg = _('Essa matéria já foi cadastrada.') raise ValidationError(msg) return cleaned_data def save(self, commit=False): expediente = super(ExpedienteMateriaForm, self).save(commit) expediente.materia = self.cleaned_data['materia'] expediente.save() return expediente
class AudienciaForm(forms.ModelForm): data_atual = timezone.now() tipo = forms.ModelChoiceField( required=True, label='Tipo de Audiência Pública', queryset=TipoAudienciaPublica.objects.all().order_by('nome')) tipo_materia = forms.ModelChoiceField( label=_('Tipo Matéria'), required=False, queryset=TipoMateriaLegislativa.objects.all(), empty_label='Selecione', ) numero_materia = forms.CharField(label='Número Matéria', required=False) ano_materia = forms.CharField(label='Ano Matéria', required=False) materia = forms.ModelChoiceField(required=False, widget=forms.HiddenInput(), queryset=MateriaLegislativa.objects.all()) class Meta: model = AudienciaPublica fields = [ 'tipo', 'numero', 'nome', 'tema', 'data', 'hora_inicio', 'hora_fim', 'observacao', 'audiencia_cancelada', 'url_audio', 'url_video', 'upload_pauta', 'upload_ata', 'upload_anexo', 'tipo_materia', 'numero_materia', 'ano_materia', 'materia' ] def __init__(self, **kwargs): super(AudienciaForm, self).__init__(**kwargs) tipos = [] if not self.fields['tipo'].queryset: tipos.append( TipoAudienciaPublica.objects.create(nome='Audiência Pública', tipo='A')) tipos.append( TipoAudienciaPublica.objects.create(nome='Plebiscito', tipo='P')) tipos.append( TipoAudienciaPublica.objects.create(nome='Referendo', tipo='R')) tipos.append( TipoAudienciaPublica.objects.create(nome='Iniciativa Popular', tipo='I')) for t in tipos: t.save() def clean(self): cleaned_data = super(AudienciaForm, self).clean() if not self.is_valid(): return cleaned_data materia = cleaned_data['numero_materia'] ano_materia = cleaned_data['ano_materia'] tipo_materia = cleaned_data['tipo_materia'] if materia and ano_materia and tipo_materia: try: materia = MateriaLegislativa.objects.get(numero=materia, ano=ano_materia, tipo=tipo_materia) except ObjectDoesNotExist: msg = _('A matéria %s nº %s/%s não existe no cadastro' ' de matérias legislativas.' % (tipo_materia, materia, ano_materia)) raise ValidationError(msg) else: cleaned_data['materia'] = materia else: campos = [materia, tipo_materia, ano_materia] if campos.count(None) + campos.count('') < len(campos): msg = _( 'Preencha todos os campos relacionados à Matéria Legislativa' ) raise ValidationError(msg) if not cleaned_data['numero']: ultima_audiencia = AudienciaPublica.objects.all().order_by( 'numero').last() if ultima_audiencia: cleaned_data['numero'] = ultima_audiencia.numero + 1 else: cleaned_data['numero'] = 1 if self.cleaned_data['hora_inicio'] and self.cleaned_data['hora_fim']: if (self.cleaned_data['hora_fim'] < self.cleaned_data['hora_inicio']): msg = _('A hora de fim não pode ser anterior a hora de ínicio') raise ValidationError(msg) return cleaned_data
class AudienciaForm(FileFieldCheckMixin, forms.ModelForm): logger = logging.getLogger(__name__) data_atual = timezone.now() tipo = forms.ModelChoiceField( required=True, label=_('Tipo de Audiência Pública'), queryset=TipoAudienciaPublica.objects.all().order_by('nome')) tipo_materia = forms.ModelChoiceField( label=_('Tipo Matéria'), required=False, queryset=TipoMateriaLegislativa.objects.all(), empty_label=_('Selecione')) numero_materia = forms.CharField( label=_('Número Matéria'), required=False) ano_materia = forms.CharField( label=_('Ano Matéria'), required=False) materia = forms.ModelChoiceField( required=False, widget=forms.HiddenInput(), queryset=MateriaLegislativa.objects.all()) parlamentar_autor = forms.ModelChoiceField( label=_("Parlamentar Autor"), required=False, queryset=Parlamentar.objects.all()) requerimento = forms.ModelChoiceField( label=_("Requerimento"), required=False, queryset=MateriaLegislativa.objects.select_related("tipo").filter(tipo__descricao="Requerimento")) class Meta: model = AudienciaPublica fields = ['tipo', 'numero', 'nome', 'tema', 'data', 'hora_inicio', 'hora_fim', 'observacao', 'audiencia_cancelada', 'parlamentar_autor', 'requerimento', 'url_audio', 'url_video', 'upload_pauta', 'upload_ata', 'upload_anexo', 'tipo_materia', 'numero_materia', 'ano_materia', 'materia'] def __init__(self, **kwargs): super(AudienciaForm, self).__init__(**kwargs) tipos = [] if not self.fields['tipo'].queryset: tipos.append(TipoAudienciaPublica.objects.create(nome='Audiência Pública', tipo='A')) tipos.append(TipoAudienciaPublica.objects.create(nome='Plebiscito', tipo='P')) tipos.append(TipoAudienciaPublica.objects.create(nome='Referendo', tipo='R')) tipos.append(TipoAudienciaPublica.objects.create(nome='Iniciativa Popular', tipo='I')) for t in tipos: t.save() def clean(self): cleaned_data = super(AudienciaForm, self).clean() if not self.is_valid(): return cleaned_data materia = cleaned_data['numero_materia'] ano_materia = cleaned_data['ano_materia'] tipo_materia = cleaned_data['tipo_materia'] parlamentar_autor = cleaned_data["parlamentar_autor"] requerimento = cleaned_data["requerimento"] if materia and ano_materia and tipo_materia: try: self.logger.debug("Tentando obter MateriaLegislativa %s nº %s/%s." % (tipo_materia, materia, ano_materia)) materia = MateriaLegislativa.objects.get( numero=materia, ano=ano_materia, tipo=tipo_materia) except ObjectDoesNotExist: msg = _('A matéria %s nº %s/%s não existe no cadastro' ' de matérias legislativas.' % (tipo_materia, materia, ano_materia)) self.logger.error('A MateriaLegislativa %s nº %s/%s não existe no cadastro' ' de matérias legislativas.' % (tipo_materia, materia, ano_materia)) raise ValidationError(msg) else: self.logger.info("MateriaLegislativa %s nº %s/%s obtida com sucesso." % (tipo_materia, materia, ano_materia)) cleaned_data['materia'] = materia else: campos = [materia, tipo_materia, ano_materia] if campos.count(None) + campos.count('') < len(campos): msg = _('Preencha todos os campos relacionados à Matéria Legislativa') self.logger.error('Algum campo relacionado à MatériaLegislativa %s nº %s/%s \ não foi preenchido.' % (tipo_materia, materia, ano_materia)) raise ValidationError(msg) if not cleaned_data['numero']: ultima_audiencia = AudienciaPublica.objects.all().order_by('numero').last() if ultima_audiencia: cleaned_data['numero'] = ultima_audiencia.numero + 1 else: cleaned_data['numero'] = 1 if self.cleaned_data['hora_inicio'] and self.cleaned_data['hora_fim']: if self.cleaned_data['hora_fim'] < self.cleaned_data['hora_inicio']: msg = _('A hora de fim ({}) não pode ser anterior a hora de início({})' .format(self.cleaned_data['hora_fim'], self.cleaned_data['hora_inicio'])) self.logger.error('Hora de fim anterior à hora de início.') raise ValidationError(msg) if parlamentar_autor.autor.first() not in requerimento.autores.all(): raise ValidationError("Parlamentar Autor selecionado não faz parte da autoria do Requerimento selecionado.") upload_pauta = self.cleaned_data.get('upload_pauta', False) upload_ata = self.cleaned_data.get('upload_ata', False) upload_anexo = self.cleaned_data.get('upload_anexo', False) if upload_pauta: validar_arquivo(upload_pauta, "Pauta da Audiência Pública") if upload_ata: validar_arquivo(upload_ata, "Ata da Audiência Pública") if upload_anexo: validar_arquivo(upload_anexo, "Anexo da Audiência Pública") return cleaned_data
class AudienciaForm(forms.ModelForm): data_atual = timezone.now() tipo = forms.ModelChoiceField(required=True, label='Tipo de Audiência Pública', queryset=TipoAudienciaPublica.objects.all().order_by('nome')) tipo_materia = forms.ModelChoiceField( label=_('Tipo Matéria'), required=True, queryset=TipoMateriaLegislativa.objects.all(), empty_label='Selecione', ) numero_materia = forms.CharField( label='Número Matéria', required=True) ano_materia = forms.CharField( label='Ano Matéria', initial=int(data_atual.year), required=True) class Meta: model = AudienciaPublica fields = ['tipo', 'numero', 'nome', 'tema', 'data', 'hora_inicio', 'hora_fim', 'observacao', 'audiencia_cancelada', 'url_audio', 'url_video', 'upload_pauta', 'upload_ata', 'upload_anexo', 'tipo_materia', 'numero_materia', 'ano_materia'] def __init__(self, **kwargs): super(AudienciaForm, self).__init__(**kwargs) tipos = [] if not self.fields['tipo'].queryset: tipos.append(TipoAudienciaPublica.objects.create(nome='Audiência Pública', tipo='A')) tipos.append(TipoAudienciaPublica.objects.create(nome='Plebiscito', tipo='P')) tipos.append(TipoAudienciaPublica.objects.create(nome='Referendo', tipo='R')) tipos.append(TipoAudienciaPublica.objects.create(nome='Iniciativa Popular', tipo='I')) for t in tipos: t.save() def clean(self): cleaned_data = super(AudienciaForm, self).clean() if not self.is_valid(): return cleaned_data try: materia = MateriaLegislativa.objects.get( numero=self.cleaned_data['numero_materia'], ano=self.cleaned_data['ano_materia'], tipo=self.cleaned_data['tipo_materia']) except ObjectDoesNotExist: msg = _('A matéria a ser inclusa não existe no cadastro' ' de matérias legislativas.') raise ValidationError(msg) else: cleaned_data['materia'] = materia if self.cleaned_data['hora_inicio'] and self.cleaned_data['hora_fim']: if (self.cleaned_data['hora_fim'] < self.cleaned_data['hora_inicio']): msg = _('A hora de fim não pode ser anterior a hora de ínicio') raise ValidationError(msg) return self.cleaned_data @transaction.atomic() def save(self, commit=True): audiencia = super(AudienciaForm, self).save(commit) return audiencia