|
|
|
@ -1,7 +1,9 @@ |
|
|
|
from datetime import date |
|
|
|
|
|
|
|
from django.contrib import messages |
|
|
|
from django.contrib.auth.decorators import user_passes_test |
|
|
|
from django.core.exceptions import ObjectDoesNotExist |
|
|
|
from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned |
|
|
|
from django.db.models import Q |
|
|
|
from django.core.urlresolvers import reverse |
|
|
|
from django.http import HttpResponse, JsonResponse |
|
|
|
from django.http.response import Http404, HttpResponseRedirect |
|
|
|
@ -30,51 +32,36 @@ def check_permission(user): |
|
|
|
return user.has_module_perms(AppConfig.label) |
|
|
|
|
|
|
|
|
|
|
|
def votante_view(request, pk): |
|
|
|
if not Votante.objects.filter(user=request.user).exists(): |
|
|
|
raise Http404('Você não tem permissão para votar') |
|
|
|
def votacao_aberta(request): |
|
|
|
votacoes_abertas = SessaoPlenaria.objects.filter( |
|
|
|
Q(ordemdia__votacao_aberta=True) | |
|
|
|
Q(expedientemateria__votacao_aberta=True)).distinct() |
|
|
|
|
|
|
|
context = {'head_title': str(_('Votação Individual')), 'sessao_id': pk} |
|
|
|
if len(votacoes_abertas) > 1: |
|
|
|
msg_abertas = '' |
|
|
|
for i, v in enumerate(votacoes_abertas): |
|
|
|
if i != 0: |
|
|
|
msg_abertas += ', ' |
|
|
|
msg_abertas += '''<a href="%s">%s</a>''' % ( |
|
|
|
reverse('sapl.sessao:sessaoplenaria_detail', |
|
|
|
kwargs={'pk': v.id}), |
|
|
|
v.__str__()) |
|
|
|
|
|
|
|
# Pega sessão |
|
|
|
try: |
|
|
|
sessao = SessaoPlenaria.objects.get(pk=pk) |
|
|
|
except ObjectDoesNotExist: |
|
|
|
raise Http404() |
|
|
|
msg = _('Existe mais de uma votações aberta. Elas se encontram ' |
|
|
|
'nas seguintes Sessões: ' + msg_abertas + '. Para votar, ' |
|
|
|
'peça para que o Operador as feche.') |
|
|
|
messages.add_message(request, messages.INFO, msg) |
|
|
|
return HttpResponseRedirect('/') |
|
|
|
|
|
|
|
context.update({'sessao': sessao, |
|
|
|
'data': sessao.data_inicio, |
|
|
|
'hora': sessao.hora_inicio}) |
|
|
|
else: |
|
|
|
return votacoes_abertas.first() |
|
|
|
|
|
|
|
# Inicializa presentes |
|
|
|
presentes = [] |
|
|
|
|
|
|
|
# Verifica votação aberta |
|
|
|
# Se aberta, verifica se é nominal. ID nominal == 2 |
|
|
|
ordem_dia = get_materia_aberta(pk) |
|
|
|
expediente = get_materia_expediente_aberta(pk) |
|
|
|
materia = None |
|
|
|
def votante_view(request): |
|
|
|
if not Votante.objects.filter(user=request.user).exists(): |
|
|
|
raise Http404('Você não tem permissão para votar') |
|
|
|
|
|
|
|
if ordem_dia: |
|
|
|
materia = ordem_dia.materia |
|
|
|
if ordem_dia.tipo_votacao == VOTACAO_NOMINAL: |
|
|
|
context.update({'materia': materia, 'ementa': materia.ementa}) |
|
|
|
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}) |
|
|
|
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.'}) |
|
|
|
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(): |
|
|
|
@ -82,40 +69,92 @@ def votante_view(request, pk): |
|
|
|
else: |
|
|
|
context.update({'permissao': False}) |
|
|
|
|
|
|
|
# Verifica se usuário está presente na sessão |
|
|
|
# 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'}) |
|
|
|
else: |
|
|
|
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': |
|
|
|
'Nenhuma matéria com votação nominal aberta.'}) |
|
|
|
except MultipleObjectsReturned: |
|
|
|
context.update({'error_message': |
|
|
|
'Este usuário está ligado a mais de um Votante!'}) |
|
|
|
|
|
|
|
# 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) |
|
|
|
# Pega sessão |
|
|
|
sessao = votacao_aberta(request) |
|
|
|
if sessao: |
|
|
|
pk = sessao.pk |
|
|
|
|
|
|
|
if voto: |
|
|
|
try: |
|
|
|
voto = voto.get(parlamentar=parlamentar) |
|
|
|
except ObjectDoesNotExist: |
|
|
|
context.update({'voto_parlamentar': 'Voto não computado.'}) |
|
|
|
context.update({'sessao_id': pk}) |
|
|
|
|
|
|
|
context.update({'sessao': sessao, |
|
|
|
'data': sessao.data_inicio, |
|
|
|
'hora': sessao.hora_inicio}) |
|
|
|
|
|
|
|
# Inicializa presentes |
|
|
|
presentes = [] |
|
|
|
|
|
|
|
# Verifica votação aberta |
|
|
|
# Se aberta, verifica se é nominal. ID nominal == 2 |
|
|
|
ordem_dia = get_materia_aberta(pk) |
|
|
|
expediente = get_materia_expediente_aberta(pk) |
|
|
|
materia = None |
|
|
|
|
|
|
|
if ordem_dia: |
|
|
|
materia = ordem_dia.materia |
|
|
|
if ordem_dia.tipo_votacao == VOTACAO_NOMINAL: |
|
|
|
context.update({'materia': materia, 'ementa': materia.ementa}) |
|
|
|
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}) |
|
|
|
presentes = SessaoPlenariaPresenca.objects.filter( |
|
|
|
sessao_plenaria_id=pk) |
|
|
|
else: |
|
|
|
context.update( |
|
|
|
{'materia': 'A matéria aberta não é votação nominal.'}) |
|
|
|
else: |
|
|
|
context.update({'voto_parlamentar': voto.voto}) |
|
|
|
context.update( |
|
|
|
{'materia': 'Nenhuma matéria com votação nominal 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: |
|
|
|
context.update( |
|
|
|
{'error_message': 'Nenhuma matéria aberta.'}) |
|
|
|
|
|
|
|
# Salva o voto |
|
|
|
if request.method == 'POST': |
|
|
|
|