Browse Source

Hack para evitar envio de resultado_votacao em branco (#1553)

* Hack para evitar envio de resultado_votacao em branco

* Fix #1549

* Faz melhorias no tratamento de erros de votação nominal
pull/1571/head
Edward 7 years ago
committed by GitHub
parent
commit
db2a924c86
  1. 19
      sapl/sessao/forms.py
  2. 56
      sapl/sessao/views.py
  3. 9
      sapl/templates/sessao/votacao/nominal.html

19
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():
@ -238,10 +238,6 @@ class PresencaForm(forms.Form):
parlamentar = forms.CharField(required=False, max_length=20) parlamentar = forms.CharField(required=False, max_length=20)
class VotacaoNominalForm(forms.Form):
pass
class ListMateriaForm(forms.Form): class ListMateriaForm(forms.Form):
error_message = forms.CharField(required=False, label='votacao_aberta') error_message = forms.CharField(required=False, label='votacao_aberta')
@ -256,10 +252,17 @@ class ExpedienteForm(forms.Form):
class VotacaoForm(forms.Form): class VotacaoForm(forms.Form):
votos_sim = forms.CharField(required=True, label='Sim') votos_sim = forms.CharField(label='Sim')
votos_nao = forms.CharField(required=True, label='Não') votos_nao = forms.CharField(label='Não')
abstencoes = forms.CharField(required=True, label='Abstenções') abstencoes = forms.CharField(label='Abstenções')
total_votos = forms.CharField(required=False, label='total') 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): class VotacaoEditForm(forms.Form):

56
sapl/sessao/views.py

@ -1651,6 +1651,7 @@ class VotacaoNominalAbstract(SessaoPermissionMixin):
template_name = 'sessao/votacao/nominal.html' template_name = 'sessao/votacao/nominal.html'
ordem = None ordem = None
expediente = None expediente = None
form_class = VotacaoNominalForm
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
if self.ordem: if self.ordem:
@ -1699,13 +1700,14 @@ 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)
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
self.object = self.get_object() self.object = self.get_object()
form = self.get_form()
if self.ordem: if self.ordem:
ordem_id = kwargs['oid'] ordem_id = kwargs['oid']
@ -1725,7 +1727,6 @@ class VotacaoNominalAbstract(SessaoPermissionMixin):
materia_votacao = expediente materia_votacao = expediente
form = VotacaoNominalForm(request.POST)
if 'cancelar-votacao' in request.POST: if 'cancelar-votacao' in request.POST:
fechar_votacao_materia(materia_votacao) fechar_votacao_materia(materia_votacao)
@ -1742,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(
@ -1771,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
@ -1780,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'):
@ -1803,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
@ -1823,9 +1823,35 @@ class VotacaoNominalAbstract(SessaoPermissionMixin):
expediente=expediente, expediente=expediente,
votacao__isnull=True).delete() votacao__isnull=True).delete()
return self.form_valid(form) return self.form_valid(form)
else: else:
return self.form_invalid(form) 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 = '''<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>'''
messages.add_message(self.request, messages.ERROR, error_message)
if self.ordem:
view = 'sapl.sessao:votacaonominal'
elif self.expediente:
view = 'sapl.sessao:votacaonominalexp'
else:
view = None
return HttpResponseRedirect(reverse(
view,
kwargs={'pk': self.kwargs['pk'],
'oid': self.kwargs['oid'],
'mid': self.kwargs['mid']}))
def get_parlamentares(self, presencas): def get_parlamentares(self, presencas):
self.object = self.get_object() self.object = self.get_object()
@ -1848,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']

9
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,12 +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">
{% for tipo in tipos %}
<option value="{{tipo.id}}">{{tipo.nome}}</option>
{% endfor %}
</select>
</div> </div>
</div> </div>

Loading…
Cancel
Save