Browse Source

Faz melhorias no tratamento de erros de votação nominal

pull/1553/head
Eduardo Calil 8 years ago
parent
commit
7cd7e7a4c0
  1. 10
      sapl/sessao/forms.py
  2. 67
      sapl/sessao/views.py
  3. 10
      sapl/templates/sessao/votacao/nominal.html

10
sapl/sessao/forms.py

@ -18,7 +18,7 @@ from sapl.utils import (RANGE_DIAS_MES, RANGE_MESES,
autor_modal, timezone) autor_modal, timezone)
from .models import (Bancada, ExpedienteMateria, Orador, OradorExpediente, from .models import (Bancada, ExpedienteMateria, Orador, OradorExpediente,
OrdemDia, SessaoPlenaria, SessaoPlenariaPresenca) OrdemDia, SessaoPlenaria, SessaoPlenariaPresenca, TipoResultadoVotacao)
def recupera_anos(): def recupera_anos():
@ -259,10 +259,10 @@ class VotacaoForm(forms.Form):
resultado_votacao = forms.CharField(label='Resultado da Votação') resultado_votacao = forms.CharField(label='Resultado da Votação')
class VotacaoNominalForm(VotacaoForm): class VotacaoNominalForm(forms.Form):
votos_sim = forms.CharField(required=False, label='Sim') resultado_votacao = forms.ModelChoiceField(label='Resultado da Votação',
votos_nao = forms.CharField(required=False, label='Não') required=True,
abstencoes = forms.CharField(required=False, label='Abstenções') queryset=TipoResultadoVotacao.objects.all())
class VotacaoEditForm(forms.Form): class VotacaoEditForm(forms.Form):

67
sapl/sessao/views.py

@ -1700,7 +1700,7 @@ class VotacaoNominalAbstract(SessaoPermissionMixin):
materia_votacao.materia.ementa))} materia_votacao.materia.ementa))}
context = {'materia': materia, 'object': self.get_object(), context = {'materia': materia, 'object': self.get_object(),
'parlamentares': self.get_parlamentares(presentes), 'parlamentares': self.get_parlamentares(presentes),
'tipos': self.get_tipos_votacao(), 'form': self.get_form(),
'total': total} 'total': total}
return self.render_to_response(context) return self.render_to_response(context)
@ -1743,19 +1743,20 @@ class VotacaoNominalAbstract(SessaoPermissionMixin):
voto = v[0] voto = v[0]
parlamentar_id = v[1] parlamentar_id = v[1]
if(voto == 'Sim'): if voto == 'Sim':
votos_sim += 1 votos_sim += 1
elif(voto == 'Não'): elif voto == 'Não':
votos_nao += 1 votos_nao += 1
elif(voto == 'Abstenção'): elif voto == 'Abstenção':
abstencoes += 1 abstencoes += 1
elif(voto == 'Não Votou'): elif voto == 'Não Votou':
nao_votou += 1 nao_votou += 1
# Caso todas as opções sejam 'Não votou', fecha a votação # Caso todas as opções sejam 'Não votou', fecha a votação
if nao_votou == len(request.POST.getlist('voto_parlamentar')): if nao_votou == len(request.POST.getlist('voto_parlamentar')):
fechar_votacao_materia(materia_votacao) form.add_error(None, 'Não é possível finalizar a votação sem '\
return self.form_valid(form) 'nenhum voto')
return self.form_invalid(form)
if self.ordem: if self.ordem:
votacao = RegistroVotacao.objects.filter( votacao = RegistroVotacao.objects.filter(
@ -1772,7 +1773,7 @@ class VotacaoNominalAbstract(SessaoPermissionMixin):
votacao.numero_votos_sim = votos_sim votacao.numero_votos_sim = votos_sim
votacao.numero_votos_nao = votos_nao votacao.numero_votos_nao = votos_nao
votacao.numero_abstencoes = abstencoes votacao.numero_abstencoes = abstencoes
votacao.observacao = request.POST['observacao'] votacao.observacao = request.POST.get('observacao', None)
if self.ordem: if self.ordem:
votacao.materia_id = ordem.materia.id votacao.materia_id = ordem.materia.id
@ -1781,8 +1782,7 @@ class VotacaoNominalAbstract(SessaoPermissionMixin):
votacao.materia_id = expediente.materia.id votacao.materia_id = expediente.materia.id
votacao.expediente_id = expediente_id votacao.expediente_id = expediente_id
votacao.tipo_resultado_votacao_id = int( votacao.tipo_resultado_votacao = form.cleaned_data['resultado_votacao']
request.POST['resultado_votacao'])
votacao.save() votacao.save()
for votos in request.POST.getlist('voto_parlamentar'): for votos in request.POST.getlist('voto_parlamentar'):
@ -1804,8 +1804,7 @@ class VotacaoNominalAbstract(SessaoPermissionMixin):
voto_parlamentar.votacao_id = votacao.id voto_parlamentar.votacao_id = votacao.id
voto_parlamentar.save() voto_parlamentar.save()
resultado = TipoResultadoVotacao.objects.get( resultado = form.cleaned_data['resultado_votacao']
id=request.POST['resultado_votacao'])
materia_votacao.resultado = resultado.nome materia_votacao.resultado = resultado.nome
materia_votacao.votacao_aberta = False materia_votacao.votacao_aberta = False
@ -1826,26 +1825,32 @@ class VotacaoNominalAbstract(SessaoPermissionMixin):
return self.form_valid(form) return self.form_valid(form)
else: else:
errors_tuple = [(form[e].label, form.errors[e]) for e in form.errors] return self.form_invalid(form)
error_message = '''<ul>'''
for e in errors_tuple:
error_message += '''<li><b>%s</b>: %s</li>''' % (e[0], e[1][0])
error_message += '''</ul>'''
messages.add_message(request, messages.ERROR, error_message) 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 = '''<ul>'''
for e in errors_tuple:
error_message += '''<li><b>%s</b>: %s</li>''' % (e[0], e[1][0])
for e in form.non_field_errors():
error_message += '''<li>%s</li>''' % e
error_message += '''</ul>'''
if self.ordem: messages.add_message(self.request, messages.ERROR, error_message)
view = 'sapl.sessao:votacaonominal'
elif self.expediente: if self.ordem:
view = 'sapl.sessao:votacaonominalexp' view = 'sapl.sessao:votacaonominal'
else: elif self.expediente:
view = None view = 'sapl.sessao:votacaonominalexp'
else:
view = None
return HttpResponseRedirect(reverse(
view,
kwargs={'pk': self.kwargs['pk'],
'oid': self.kwargs['oid'],
'mid': self.kwargs['mid']}))
return HttpResponseRedirect(reverse(
view,
kwargs={'pk': kwargs['pk'],
'oid': kwargs['oid'],
'mid': kwargs['mid']}))
def get_parlamentares(self, presencas): def get_parlamentares(self, presencas):
self.object = self.get_object() self.object = self.get_object()
@ -1869,10 +1874,6 @@ class VotacaoNominalAbstract(SessaoPermissionMixin):
else: else:
yield [parlamentar, voto.voto] yield [parlamentar, voto.voto]
def get_tipos_votacao(self):
for tipo in TipoResultadoVotacao.objects.all():
yield tipo
def get_success_url(self): def get_success_url(self):
pk = self.kwargs['pk'] pk = self.kwargs['pk']

10
sapl/templates/sessao/votacao/nominal.html

@ -1,5 +1,5 @@
{% extends "crud/detail.html" %} {% extends "crud/detail.html" %}
{% load i18n %} {% load i18n crispy_forms_tags %}
{% block detail_content %} {% block detail_content %}
<form method="post"> <form method="post">
@ -44,13 +44,7 @@
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
Resultado da Votação {{ form.resultado_votacao|as_crispy_field }}
<select id="resultado_votacao" name="resultado_votacao" class="form-control">
<option value="">-------------------</option>
{% for tipo in tipos %}
<option value="{{tipo.id}}">{{tipo.nome}}</option>
{% endfor %}
</select>
</div> </div>
</div> </div>

Loading…
Cancel
Save