Browse Source

Inicia a logica

pull/1188/head
Eduardo Calil 9 years ago
parent
commit
2932ebf7c5
  1. 2
      sapl/painel/urls.py
  2. 79
      sapl/painel/views.py
  3. 61
      sapl/sessao/views.py
  4. 5
      sapl/templates/base.html

2
sapl/painel/urls.py

@ -20,6 +20,6 @@ urlpatterns = [
url(r'^painel/cronometro$', cronometro_painel, name='cronometro_painel'), url(r'^painel/cronometro$', cronometro_painel, name='cronometro_painel'),
# url(r'^painel/cronometro$', include(CronometroPainelCrud.get_urls())), # url(r'^painel/cronometro$', include(CronometroPainelCrud.get_urls())),
url(r'^voto-individual/(?P<pk>\d+)$', votante_view, url(r'^voto-individual/$', votante_view,
name="voto_individual"), name="voto_individual"),
] ]

79
sapl/painel/views.py

@ -1,7 +1,9 @@
from datetime import date from datetime import date
from django.contrib import messages
from django.contrib.auth.decorators import user_passes_test 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.core.urlresolvers import reverse
from django.http import HttpResponse, JsonResponse from django.http import HttpResponse, JsonResponse
from django.http.response import Http404, HttpResponseRedirect from django.http.response import Http404, HttpResponseRedirect
@ -30,17 +32,59 @@ def check_permission(user):
return user.has_module_perms(AppConfig.label) return user.has_module_perms(AppConfig.label)
def votante_view(request, pk): def votacao_aberta(request):
votacoes_abertas = SessaoPlenaria.objects.filter(
Q(ordemdia__votacao_aberta=True) |
Q(expedientemateria__votacao_aberta=True)).distinct()
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__())
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('/')
else:
return votacoes_abertas.first()
def votante_view(request):
if not Votante.objects.filter(user=request.user).exists(): if not Votante.objects.filter(user=request.user).exists():
raise Http404('Você não tem permissão para votar') raise Http404('Você não tem permissão para votar')
context = {'head_title': str(_('Votação Individual')), 'sessao_id': pk} context = {'head_title': str(_('Votação Individual'))}
# Pega sessão # 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: try:
sessao = SessaoPlenaria.objects.get(pk=pk) votante = Votante.objects.get(user=request.user)
except ObjectDoesNotExist: except ObjectDoesNotExist:
raise Http404() 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, context.update({'sessao': sessao,
'data': sessao.data_inicio, 'data': sessao.data_inicio,
@ -59,7 +103,8 @@ def votante_view(request, pk):
materia = ordem_dia.materia materia = ordem_dia.materia
if ordem_dia.tipo_votacao == VOTACAO_NOMINAL: if ordem_dia.tipo_votacao == VOTACAO_NOMINAL:
context.update({'materia': materia, 'ementa': materia.ementa}) context.update({'materia': materia, 'ementa': materia.ementa})
presentes = PresencaOrdemDia.objects.filter(sessao_plenaria_id=pk) presentes = PresencaOrdemDia.objects.filter(
sessao_plenaria_id=pk)
else: else:
context.update( context.update(
{'materia': 'A matéria aberta não é votação nominal.'}) {'materia': 'A matéria aberta não é votação nominal.'})
@ -76,19 +121,8 @@ def votante_view(request, pk):
context.update( context.update(
{'materia': 'Nenhuma matéria com votação nominal aberta.'}) {'materia': 'Nenhuma matéria com votação nominal aberta.'})
# 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})
# Verifica se usuário está presente na sessão # Verifica se usuário está presente na sessão
try: if votante:
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 parlamentar = votante.parlamentar
context.update({'presente': False}) context.update({'presente': False})
if len(presentes) > 0: if len(presentes) > 0:
@ -98,7 +132,8 @@ def votante_view(request, pk):
break break
else: else:
context.update({'error_message': context.update({'error_message':
'Nenhuma matéria com votação nominal aberta.'}) 'Não há presentes na Sessão com a matéria em '
'votação.'})
# Recupera o voto do parlamentar logado # Recupera o voto do parlamentar logado
voto = [] voto = []
@ -117,6 +152,10 @@ def votante_view(request, pk):
else: else:
context.update({'voto_parlamentar': voto.voto}) context.update({'voto_parlamentar': voto.voto})
else:
context.update(
{'error_message': 'Nenhuma matéria aberta.'})
# Salva o voto # Salva o voto
if request.method == 'POST': if request.method == 'POST':
if ordem_dia: if ordem_dia:

61
sapl/sessao/views.py

@ -6,6 +6,7 @@ from django.contrib.auth.decorators import permission_required
from django.contrib.auth.mixins import PermissionRequiredMixin from django.contrib.auth.mixins import PermissionRequiredMixin
from django.core.exceptions import MultipleObjectsReturned, ObjectDoesNotExist from django.core.exceptions import MultipleObjectsReturned, ObjectDoesNotExist
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.db.models import Q
from django.forms.utils import ErrorList from django.forms.utils import ErrorList
from django.http import JsonResponse from django.http import JsonResponse
from django.http.response import Http404, HttpResponseRedirect from django.http.response import Http404, HttpResponseRedirect
@ -81,49 +82,46 @@ def reordernar_materias_ordem(request, pk):
reverse('sapl.sessao:ordemdia_list', kwargs={'pk': pk})) reverse('sapl.sessao:ordemdia_list', kwargs={'pk': pk}))
@permission_required('sessao.change_expedientemateria') def verifica_votacoes_abertas(request, model, pk):
def abrir_votacao_expediente_view(request, pk, spk): votacoes_abertas = SessaoPlenaria.objects.filter(
existe_expediente_aberto = ExpedienteMateria.objects.filter( Q(ordemdia__votacao_aberta=True) |
sessao_plenaria_id=spk, votacao_aberta=True Q(expedientemateria__votacao_aberta=True)).distinct()
).exists()
existe_ordem_aberta = OrdemDia.objects.filter( if votacoes_abertas:
sessao_plenaria_id=spk, votacao_aberta=True msg_abertas = ''
).exists() for i, v in enumerate(votacoes_abertas):
if i != 0:
if existe_expediente_aberto or existe_ordem_aberta: msg_abertas += ', '
msg = _('Já existe uma matéria com votação aberta. Para abrir ' msg_abertas += '''<a href="%s">%s</a>''' % (
'outra, termine ou feche a votação existente.') reverse('sapl.sessao:sessaoplenaria_detail',
kwargs={'pk': v.id}),
v.__str__())
msg = _('Já existem votações abertas nas seguintes Sessões: ' +
msg_abertas + '. Para abrir '
'outra, termine ou feche as votações abertas.')
messages.add_message(request, messages.INFO, msg) messages.add_message(request, messages.INFO, msg)
else: else:
expediente = ExpedienteMateria.objects.get(id=pk) materia_votacao = model.objects.get(id=pk)
expediente.votacao_aberta = True materia_votacao.votacao_aberta = True
expediente.save() materia_votacao.save()
@permission_required('sessao.change_expedientemateria')
def abrir_votacao_expediente_view(request, pk, spk):
verifica_votacoes_abertas(request, ExpedienteMateria, pk)
return HttpResponseRedirect( return HttpResponseRedirect(
reverse('sapl.sessao:expedientemateria_list', kwargs={'pk': spk})) reverse('sapl.sessao:expedientemateria_list', kwargs={'pk': spk}))
@permission_required('sessao.change_ordemdia') @permission_required('sessao.change_ordemdia')
def abrir_votacao_ordem_view(request, pk, spk): def abrir_votacao_ordem_view(request, pk, spk):
existe_ordem_aberta = OrdemDia.objects.filter( verifica_votacoes_abertas(request, OrdemDia, pk)
sessao_plenaria_id=spk, votacao_aberta=True
).exists()
existe_expediente_aberto = ExpedienteMateria.objects.filter(
sessao_plenaria_id=spk, votacao_aberta=True
).exists()
if existe_ordem_aberta or existe_expediente_aberto:
msg = _('Já existe uma matéria com votação aberta. Para abrir '
'outra, termine ou feche a votação existente.')
messages.add_message(request, messages.INFO, msg)
else:
ordem = OrdemDia.objects.get(id=pk)
ordem.votacao_aberta = True
ordem.save()
return HttpResponseRedirect( return HttpResponseRedirect(
reverse('sapl.sessao:ordemdia_list', kwargs={'pk': spk})) reverse('sapl.sessao:ordemdia_list', kwargs={'pk': spk}))
def put_link_materia(context): def put_link_materia(context):
for i, row in enumerate(context['rows']): for i, row in enumerate(context['rows']):
materia = context['object_list'][i].materia materia = context['object_list'][i].materia
@ -133,6 +131,7 @@ def put_link_materia(context):
context['rows'][i][1] = (row[1][0], url_materia) context['rows'][i][1] = (row[1][0], url_materia)
return context return context
def get_presencas_generic(model, sessao, legislatura): def get_presencas_generic(model, sessao, legislatura):
presencas = model.objects.filter( presencas = model.objects.filter(
sessao_plenaria=sessao) sessao_plenaria=sessao)

5
sapl/templates/base.html

@ -63,6 +63,11 @@
</a> </a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li><a>{{user.username}}</a></li> <li><a>{{user.username}}</a></li>
{% if 'parlamentares.can_vote' in request.user.get_all_permissions %}
<li><a href="{% url 'sapl.painel:voto_individual' %}">
Votar Matéria
</a></li>
{% endif %}
<li><a href="{% url 'sapl.base:logout' %}">Sair</a></li> <li><a href="{% url 'sapl.base:logout' %}">Sair</a></li>
</ul> </ul>
</li> </li>

Loading…
Cancel
Save