Browse Source

Votacao interativa refatorada

pull/1174/head
Eduardo Calil 9 years ago
parent
commit
7781cb351b
  1. 49
      sapl/painel/views.py
  2. 26
      sapl/sessao/migrations/0007_auto_20170606_1238.py
  3. 13
      sapl/sessao/models.py
  4. 71
      sapl/sessao/views.py

49
sapl/painel/views.py

@ -38,7 +38,11 @@ def votante_view(request, pk):
context = {'head_title': str(_('Votação Individual')), 'sessao_id': pk}
# Pega sessão
try:
sessao = SessaoPlenaria.objects.get(pk=pk)
except ObjectDoesNotExist:
raise Http404()
context.update({'sessao': sessao,
'data': sessao.data_inicio,
'hora': sessao.hora_inicio})
@ -98,11 +102,15 @@ def votante_view(request, pk):
'Nenhuma matéria com votação nominal aberta.'})
# Recupera o voto do parlamentar logado
if ordem_dia:
voto = VotoParlamentar.objects.filter(
ordem=ordem_dia)
elif expediente:
voto = VotoParlamentar.objects.filter(
expediente=expediente)
try:
voto = VotoNominal.objects.get(
sessao=sessao,
parlamentar=parlamentar,
materia=materia)
voto = voto.get(parlamentar=parlamentar)
except ObjectDoesNotExist:
context.update({'voto_parlamentar': 'Voto não computado.'})
else:
@ -110,23 +118,42 @@ def votante_view(request, pk):
# Salva o voto
if request.method == 'POST':
if ordem_dia:
try:
voto = VotoNominal.objects.get(
sessao=sessao,
voto = VotoParlamentar.objects.get(
parlamentar=parlamentar,
materia=materia)
ordem=ordem_dia)
except ObjectDoesNotExist:
voto = VotoNominal.objects.create(
sessao=sessao,
voto = VotoParlamentar.objects.create(
parlamentar=parlamentar,
materia=materia,
voto=request.POST['voto'],
user=request.user,
ip=get_client_ip(request),
user=request.user)
ordem=ordem_dia)
else:
voto.voto = request.POST['voto']
voto.ip = get_client_ip(request)
voto.user = request.user
voto.save()
elif expediente:
try:
voto = VotoParlamentar.objects.get(
parlamentar=parlamentar,
expediente=expediente)
except ObjectDoesNotExist:
voto = VotoParlamentar.objects.create(
parlamentar=parlamentar,
voto=request.POST['voto'],
user=request.user,
ip=get_client_ip(request),
expediente=expediente)
else:
voto.voto = request.POST['voto']
voto.ip = get_client_ip(request)
voto.user = request.user
voto.save()
return HttpResponseRedirect(
reverse('sapl.painel:voto_individual', kwargs={'pk': pk}))

26
sapl/sessao/migrations/0007_auto_20170606_1238.py

@ -0,0 +1,26 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2017-06-06 12:38
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('sessao', '0006_auto_20170601_1257'),
]
operations = [
migrations.AddField(
model_name='votoparlamentar',
name='expediente',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='sessao.ExpedienteMateria'),
),
migrations.AddField(
model_name='votoparlamentar',
name='ordem',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='sessao.OrdemDia'),
),
]

13
sapl/sessao/models.py

@ -412,6 +412,12 @@ class RegistroVotacao(models.Model):
@reversion.register()
class VotoParlamentar(models.Model): # RegistroVotacaoParlamentar
'''
As colunas ordem e expediente são redundantes, levando em consideração
que RegistroVotacao possui ordem/expediente. Entretanto, para
viabilizar a votação interativa, uma vez que ela é feita antes de haver
um RegistroVotacao, é preciso identificar o voto por ordem/expediente.
'''
votacao = models.ForeignKey(RegistroVotacao,
blank=True,
null=True)
@ -432,6 +438,13 @@ class VotoParlamentar(models.Model): # RegistroVotacaoParlamentar
blank=True,
null=True)
ordem = models.ForeignKey(OrdemDia,
blank=True,
null=True)
expediente = models.ForeignKey(ExpedienteMateria,
blank=True,
null=True)
class Meta:
verbose_name = _('Registro de Votação de Parlamentar')
verbose_name_plural = _('Registros de Votações de Parlamentares')

71
sapl/sessao/views.py

@ -1568,25 +1568,24 @@ class VotacaoView(SessaoPermissionMixin):
kwargs={'pk': pk})
def fechar_votacao_materia(ordem=None, expediente=None):
if ordem:
registro_votacao = RegistroVotacao.objects.filter(ordem=ordem)
def fechar_votacao_materia(materia):
if type(materia) == OrdemDia:
registro_votacao = RegistroVotacao.objects.filter(ordem=materia)
voto_parlamentar = VotoParlamentar.objects.filter(ordem=materia)
for r in registro_votacao:
r.delete()
ordem.votacao_aberta = False
ordem.save()
elif expediente:
elif type(materia) == ExpedienteMateria:
registro_votacao = RegistroVotacao.objects.filter(
expediente=expediente)
expediente=materia)
voto_parlamentar = VotoParlamentar.objects.filter(expediente=materia)
for v in voto_parlamentar:
v.delete()
for r in registro_votacao:
r.delete()
expediente.votacao_aberta = False
expediente.save()
materia.votacao_aberta = False
materia.save()
class VotacaoNominalAbstract(SessaoPermissionMixin):
@ -1611,7 +1610,7 @@ class VotacaoNominalAbstract(SessaoPermissionMixin):
total = PresencaOrdemDia.objects.filter(
sessao_plenaria_id=ordem.sessao_plenaria_id).count()
tipo_materia_votacao = ordem
materia_votacao = ordem
elif self.expediente:
expediente_id = kwargs['oid']
@ -1631,15 +1630,15 @@ class VotacaoNominalAbstract(SessaoPermissionMixin):
total = SessaoPlenariaPresenca.objects.filter(
sessao_plenaria_id=expediente.sessao_plenaria_id).count()
tipo_materia_votacao = expediente
materia_votacao = expediente
materia = {'materia': tipo_materia_votacao.materia,
materia = {'materia': materia_votacao.materia,
'ementa': sub(
' ', ' ', strip_tags(
tipo_materia_votacao.observacao))}
materia_votacao.observacao))}
context = {'materia': materia, 'object': self.get_object(),
'parlamentares': self.get_parlamentares(
tipo_materia_votacao.materia),
materia_votacao.materia),
'tipos': self.get_tipos_votacao(),
'total': total}
@ -1655,7 +1654,7 @@ class VotacaoNominalAbstract(SessaoPermissionMixin):
except ObjectDoesNotExist:
raise Http404()
tipo_materia_votacao = ordem
materia_votacao = ordem
elif self.expediente:
expediente_id = kwargs['oid']
@ -1664,16 +1663,12 @@ class VotacaoNominalAbstract(SessaoPermissionMixin):
except ObjectDoesNotExist:
raise Http404()
tipo_materia_votacao = expediente
materia_votacao = expediente
form = VotacaoNominalForm(request.POST)
if 'cancelar-votacao' in request.POST:
if self.ordem:
fechar_votacao_materia(ordem=ordem)
elif self.expediente:
fechar_votacao_materia(expediente=expediente)
fechar_votacao_materia(materia_votacao)
return self.form_valid(form)
if form.is_valid():
@ -1698,11 +1693,7 @@ class VotacaoNominalAbstract(SessaoPermissionMixin):
# Caso todas as opções sejam 'Não votou', fecha a votação
if nao_votou == len(request.POST.getlist('voto_parlamentar')):
if self.ordem:
fechar_votacao_materia(ordem=ordem)
elif self.expediente:
fechar_votacao_materia(expediente=expediente)
fechar_votacao_materia(materia_votacao)
return self.form_valid(form)
if self.ordem:
@ -1738,7 +1729,15 @@ class VotacaoNominalAbstract(SessaoPermissionMixin):
voto = v[0]
parlamentar_id = v[1]
voto_parlamentar = VotoParlamentar()
if self.ordem:
voto_parlamentar = VotoParlamentar.objects.get_or_create(
parlamentar_id=parlamentar_id,
ordem=ordem)[0]
elif self.expediente:
voto_parlamentar = VotoParlamentar.objects.get_or_create(
parlamentar_id=parlamentar_id,
expediente=expediente)[0]
voto_parlamentar.voto = voto
voto_parlamentar.parlamentar_id = parlamentar_id
voto_parlamentar.votacao_id = votacao.id
@ -1747,9 +1746,9 @@ class VotacaoNominalAbstract(SessaoPermissionMixin):
resultado = TipoResultadoVotacao.objects.get(
id=request.POST['resultado_votacao'])
tipo_materia_votacao.resultado = resultado.nome
tipo_materia_votacao.votacao_aberta = False
tipo_materia_votacao.save()
materia_votacao.resultado = resultado.nome
materia_votacao.votacao_aberta = False
materia_votacao.save()
return self.form_valid(form)
else:
@ -1765,10 +1764,10 @@ class VotacaoNominalAbstract(SessaoPermissionMixin):
if self.ordem:
voto_parlamentar = VotoParlamentar.objects.filter(
votacao__ordem=self.kwargs['oid'])
ordem=self.kwargs['oid'])
elif self.expediente:
voto_parlamentar = VotoParlamentar.objects.filter(
votacao__expediente=self.kwargs['oid'])
expediente=self.kwargs['oid'])
for parlamentar in Parlamentar.objects.filter(ativo=True):
if parlamentar in presentes:

Loading…
Cancel
Save