Browse Source

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

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

150
sapl/painel/views.py

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

18
sapl/templates/painel/voto_nominal.html

@ -21,7 +21,7 @@
} }
</style> </style>
</head> </head>
{% if permissao and presente %} {% if not error_message %}
<body> <body>
<h1><b><font color="#4FA64D"><p align="center">{{sessao}}</p></font></b></h1> <h1><b><font color="#4FA64D"><p align="center">{{sessao}}</p></font></b></h1>
<table style="width:100%"> <table style="width:100%">
@ -74,23 +74,7 @@
</form> </form>
</body> </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 %} {% 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> <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 %}
{% endif %}
</html> </html>

Loading…
Cancel
Save