diff --git a/sapl/sessao/forms.py b/sapl/sessao/forms.py index 6fddc6747..1e7410639 100644 --- a/sapl/sessao/forms.py +++ b/sapl/sessao/forms.py @@ -18,7 +18,7 @@ from sapl.utils import (RANGE_DIAS_MES, RANGE_MESES, autor_modal, timezone) from .models import (Bancada, ExpedienteMateria, Orador, OradorExpediente, - OrdemDia, SessaoPlenaria, SessaoPlenariaPresenca) + OrdemDia, SessaoPlenaria, SessaoPlenariaPresenca, TipoResultadoVotacao) def recupera_anos(): @@ -238,10 +238,6 @@ class PresencaForm(forms.Form): parlamentar = forms.CharField(required=False, max_length=20) -class VotacaoNominalForm(forms.Form): - pass - - class ListMateriaForm(forms.Form): error_message = forms.CharField(required=False, label='votacao_aberta') @@ -256,10 +252,17 @@ class ExpedienteForm(forms.Form): class VotacaoForm(forms.Form): - votos_sim = forms.CharField(required=True, label='Sim') - votos_nao = forms.CharField(required=True, label='Não') - abstencoes = forms.CharField(required=True, label='Abstenções') + votos_sim = forms.CharField(label='Sim') + votos_nao = forms.CharField(label='Não') + abstencoes = forms.CharField(label='Abstenções') total_votos = forms.CharField(required=False, label='total') + resultado_votacao = forms.CharField(label='Resultado da Votação') + + +class VotacaoNominalForm(forms.Form): + resultado_votacao = forms.ModelChoiceField(label='Resultado da Votação', + required=True, + queryset=TipoResultadoVotacao.objects.all()) class VotacaoEditForm(forms.Form): diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index 93cd3402c..c5d19eedc 100644 --- a/sapl/sessao/views.py +++ b/sapl/sessao/views.py @@ -1651,6 +1651,7 @@ class VotacaoNominalAbstract(SessaoPermissionMixin): template_name = 'sessao/votacao/nominal.html' ordem = None expediente = None + form_class = VotacaoNominalForm def get(self, request, *args, **kwargs): if self.ordem: @@ -1699,13 +1700,14 @@ class VotacaoNominalAbstract(SessaoPermissionMixin): materia_votacao.materia.ementa))} context = {'materia': materia, 'object': self.get_object(), 'parlamentares': self.get_parlamentares(presentes), - 'tipos': self.get_tipos_votacao(), + 'form': self.get_form(), 'total': total} return self.render_to_response(context) def post(self, request, *args, **kwargs): self.object = self.get_object() + form = self.get_form() if self.ordem: ordem_id = kwargs['oid'] @@ -1725,7 +1727,6 @@ class VotacaoNominalAbstract(SessaoPermissionMixin): materia_votacao = expediente - form = VotacaoNominalForm(request.POST) if 'cancelar-votacao' in request.POST: fechar_votacao_materia(materia_votacao) @@ -1742,19 +1743,20 @@ class VotacaoNominalAbstract(SessaoPermissionMixin): voto = v[0] parlamentar_id = v[1] - if(voto == 'Sim'): + if voto == 'Sim': votos_sim += 1 - elif(voto == 'Não'): + elif voto == 'Não': votos_nao += 1 - elif(voto == 'Abstenção'): + elif voto == 'Abstenção': abstencoes += 1 - elif(voto == 'Não Votou'): + elif voto == 'Não Votou': nao_votou += 1 # Caso todas as opções sejam 'Não votou', fecha a votação if nao_votou == len(request.POST.getlist('voto_parlamentar')): - fechar_votacao_materia(materia_votacao) - return self.form_valid(form) + form.add_error(None, 'Não é possível finalizar a votação sem '\ + 'nenhum voto') + return self.form_invalid(form) if self.ordem: votacao = RegistroVotacao.objects.filter( @@ -1771,7 +1773,7 @@ class VotacaoNominalAbstract(SessaoPermissionMixin): votacao.numero_votos_sim = votos_sim votacao.numero_votos_nao = votos_nao votacao.numero_abstencoes = abstencoes - votacao.observacao = request.POST['observacao'] + votacao.observacao = request.POST.get('observacao', None) if self.ordem: votacao.materia_id = ordem.materia.id @@ -1780,8 +1782,7 @@ class VotacaoNominalAbstract(SessaoPermissionMixin): votacao.materia_id = expediente.materia.id votacao.expediente_id = expediente_id - votacao.tipo_resultado_votacao_id = int( - request.POST['resultado_votacao']) + votacao.tipo_resultado_votacao = form.cleaned_data['resultado_votacao'] votacao.save() for votos in request.POST.getlist('voto_parlamentar'): @@ -1803,8 +1804,7 @@ class VotacaoNominalAbstract(SessaoPermissionMixin): voto_parlamentar.votacao_id = votacao.id voto_parlamentar.save() - resultado = TipoResultadoVotacao.objects.get( - id=request.POST['resultado_votacao']) + resultado = form.cleaned_data['resultado_votacao'] materia_votacao.resultado = resultado.nome materia_votacao.votacao_aberta = False @@ -1823,9 +1823,35 @@ class VotacaoNominalAbstract(SessaoPermissionMixin): expediente=expediente, votacao__isnull=True).delete() return self.form_valid(form) + else: return self.form_invalid(form) + def form_invalid(self, form): + errors_tuple = [(form[e].label, form.errors[e]) for e in form.errors if e in form.fields] + error_message = '''