Browse Source

fix(sessao): preserva votos e mantém edição após erro na votação nominal (#2985)

- Reconstrói 'parlamentares' a partir dos votos enviados no POST em
form_invalid da VotacaoEmBlocoNominalView, preservando as marcações
quando a validação falhar (ex.: resultado da votação ausente).
- Adiciona flag 'votos_from_post' no contexto e ajusta o template para
não desabilitar o select/gerar input hidden quando os votos vierem do
POST, permitindo correção antes de reenviar.

closes #2985
pull/3800/head
Michel de Almeida Silva 1 month ago
parent
commit
ad12851815
  1. 21
      sapl/sessao/views.py
  2. 4
      sapl/templates/sessao/votacao/votacao_nominal_bloco.html

21
sapl/sessao/views.py

@ -5068,11 +5068,28 @@ class VotacaoEmBlocoNominalView(PermissionRequiredForAppCrudMixin, TemplateView)
context.update({'expedientes': expedientes})
total_presentes = presentes.count()
context.update({'parlamentares': self.get_parlamentares(),
# Preserva votos selecionados pelo usuário ao retornar com erro
presentes_list = [p.parlamentar for p in presentes]
votos_post = {}
for votos in self.request.POST.getlist('voto_parlamentar'):
try:
voto, parlamentar_id = votos.split(':', 1)
votos_post[int(parlamentar_id)] = voto
except ValueError:
continue
parlamentares_ctx = []
for parlamentar in Parlamentar.objects.filter(ativo=True):
if parlamentar in presentes_list:
parlamentares_ctx.append([parlamentar, votos_post.get(parlamentar.id)])
context.update({'parlamentares': parlamentares_ctx,
'total_presentes': total_presentes,
'resultado_votacao': TipoResultadoVotacao.objects.all(),
'form': form,
'origem': self.request.POST['origem']})
'origem': self.request.POST['origem'],
'votos_from_post': True})
return self.render_to_response(context)

4
sapl/templates/sessao/votacao/votacao_nominal_bloco.html

@ -47,8 +47,8 @@
{% for parlamentar in parlamentares %}
<div class="col-md-4" id="styleparlamentar">{{parlamentar.0.nome_parlamentar}}</div>
<div class="col-md-5">
{% if parlamentar.1 %} <input type="hidden" name="voto_parlamentar" value="{{parlamentar.1}}:{{parlamentar.0.id}}" /> {% endif %}
<select id="voto_parlamentar" name="voto_parlamentar" class="form-control" {% if parlamentar.1 %} disabled {% endif %}>
{% if parlamentar.1 and not votos_from_post %} <input type="hidden" name="voto_parlamentar" value="{{parlamentar.1}}:{{parlamentar.0.id}}" /> {% endif %}
<select id="voto_parlamentar" name="voto_parlamentar" class="form-control" {% if parlamentar.1 and not votos_from_post %} disabled {% endif %}>
<option value="Não Votou:{{parlamentar.0.id}}">Não Votou</option>
<option value="Sim:{{parlamentar.0.id}}" {% if parlamentar.1 == 'Sim' %} selected {% endif %}>Sim</option>
<option value="Não:{{parlamentar.0.id}}" {% if parlamentar.1 == 'Não' %} selected {% endif %}>Não</option>

Loading…
Cancel
Save