Browse Source

Adaptação da lógica da votação interativa

pull/1188/head
Eduardo Calil 9 years ago
parent
commit
48a62eeb58
  1. 82
      sapl/painel/views.py
  2. 12
      sapl/sessao/views.py
  3. 18
      sapl/templates/painel/voto_nominal.html

82
sapl/painel/views.py

@ -58,34 +58,24 @@ def votacao_aberta(request):
def votante_view(request):
if not Votante.objects.filter(user=request.user).exists():
raise Http404('Você não tem permissão para votar')
# Pega o votante relacionado ao usuário
try:
votante = Votante.objects.get(user=request.user)
except ObjectDoesNotExist:
raise Http404()
context = {'head_title': str(_('Votação Individual'))}
# Verifica se usuário possui permissão para votar
if 'parlamentares.can_vote' in request.user.get_all_permissions():
context.update({'permissao': True})
else:
context.update({'permissao': False})
# Pega o votante relacionado ao usuário
try:
votante = Votante.objects.get(user=request.user)
except ObjectDoesNotExist:
context.update({'error_message':
'Erro ao recuperar parlamentar ligado ao usuário'})
except MultipleObjectsReturned:
context.update({'error_message':
'Este usuário está ligado a mais de um Votante!'})
# Pega sessão
sessao = votacao_aberta(request)
if sessao:
pk = sessao.pk
context.update({'sessao_id': pk})
context.update({'sessao': sessao,
'data': sessao.data_inicio,
'hora': sessao.hora_inicio})
@ -97,45 +87,35 @@ def votante_view(request):
# Se aberta, verifica se é nominal. ID nominal == 2
ordem_dia = get_materia_aberta(pk)
expediente = get_materia_expediente_aberta(pk)
materia = None
materia_aberta = None
if ordem_dia:
materia = ordem_dia.materia
if ordem_dia.tipo_votacao == VOTACAO_NOMINAL:
context.update({'materia': materia, 'ementa': materia.ementa})
materia_aberta = ordem_dia
presentes = PresencaOrdemDia.objects.filter(
sessao_plenaria_id=pk)
else:
context.update(
{'materia': 'A matéria aberta não é votação nominal.'})
elif expediente:
materia = expediente.materia
if expediente.tipo_votacao == VOTACAO_NOMINAL:
context.update({'materia': materia, 'ementa': materia.ementa})
materia_aberta = expediente
presentes = SessaoPlenariaPresenca.objects.filter(
sessao_plenaria_id=pk)
else:
context.update(
{'materia': 'A matéria aberta não é votação nominal.'})
else:
context.update(
{'materia': 'Nenhuma matéria com votação nominal aberta.'})
# Verifica se usuário está presente na sessão
if votante:
if materia_aberta:
if materia_aberta.tipo_votacao == VOTACAO_NOMINAL:
context.update({'materia': materia_aberta.materia,
'ementa': materia_aberta.materia.ementa})
parlamentar = votante.parlamentar
context.update({'presente': False})
parlamentar_presente = False
if len(presentes) > 0:
for p in presentes:
if p.parlamentar.id == parlamentar.id:
context.update({'presente': True})
parlamentar_presente = True
break
else:
context.update({'error_message':
'Não há presentes na Sessão com a matéria em '
'votação.'})
'Não há presentes na Sessão com a '
'matéria em votação.'})
# Recupera o voto do parlamentar logado
if parlamentar_presente:
voto = []
if ordem_dia:
voto = VotoParlamentar.objects.filter(
@ -147,15 +127,31 @@ def votante_view(request):
if voto:
try:
voto = voto.get(parlamentar=parlamentar)
context.update({'voto_parlamentar': voto.voto})
except ObjectDoesNotExist:
context.update({'voto_parlamentar': 'Voto não computado.'})
context.update(
{'voto_parlamentar': 'Voto não '
'computado.'})
else:
context.update({'voto_parlamentar': voto.voto})
context.update({'error_message':
'Você não está presente na '
'Ordem do Dia/Expediente em votação.'})
else:
context.update(
{'error_message': 'A matéria aberta não é votação '
'nominal.'})
else:
context.update(
{'error_message': 'Nenhuma matéria aberta.'})
else:
context.update(
{'error_message': 'Nenhuma sessão com matéria aberta.'})
else:
context.update({'permissao': False,
'error_message': 'Usuário sem permissão para votar.'})
# Salva o voto
if request.method == 'POST':
if ordem_dia:
@ -195,7 +191,7 @@ def votante_view(request):
voto.save()
return HttpResponseRedirect(
reverse('sapl.painel:voto_individual', kwargs={'pk': pk}))
reverse('sapl.painel:voto_individual'))
return render(request, 'painel/voto_nominal.html', context)

12
sapl/sessao/views.py

@ -1752,6 +1752,18 @@ class VotacaoNominalAbstract(SessaoPermissionMixin):
materia_votacao.votacao_aberta = False
materia_votacao.save()
# Verifica se existe algum VotoParlamentar sem RegistroVotacao
# Por exemplo, se algum parlamentar votar e sua presença for
# removida da ordem do dia/expediente antes da conclusão da
# votação
if self.ordem:
VotoParlamentar.objects.filter(
ordem=ordem,
votacao__isnull=True).delete()
elif self.expediente:
VotoParlamentar.objects.filter(
expediente=expediente,
votacao__isnull=True).delete()
return self.form_valid(form)
else:
return self.form_invalid(form)

18
sapl/templates/painel/voto_nominal.html

@ -21,7 +21,7 @@
}
</style>
</head>
{% if permissao and presente %}
{% if not error_message %}
<body>
<h1><b><font color="#4FA64D"><p align="center">{{sessao}}</p></font></b></h1>
<table style="width:100%">
@ -74,23 +74,7 @@
</form>
</body>
{% elif not permissao %}
{% if error_message %}
<h2><font color="red"><p align="center" style="font-family:Verdana">{{error_message}}</p></font></h2>
{% else %}
<h2><font color="red"><p align="center" style="font-family:Verdana">Usuário sem permissão para participar de votações.</p></font></h2>
{% endif %}
{% elif not presente %}
{% if error_message %}
<h2><font color="red"><p align="center" style="font-family:Verdana">{{error_message}}</p></font></h2>
{% else %}
<h2><font color="red"><p align="center" style="font-family:Verdana">Usuário não presente na Sessão Plenária.</p></font></h2>
{% endif %}
{% else %}
{% if error_message %}
<h2><font color="red"><p align="center" style="font-family:Verdana">{{error_message}}</p></font></h2>
{% else %}
<h2><font color="red"><p align="center" style="font-family:Verdana">Usuário não presente na Sessão Plenária e sem permissão para votações.</p></font></h2>
{% endif %}
{% endif %}
</html>

Loading…
Cancel
Save