Browse Source

Correcao e otimizacao do codigo de votacao nominal

pull/1174/head
Eduardo Calil 9 years ago
parent
commit
630d685122
  1. 39
      sapl/sessao/migrations/0005_auto_20170601_1246.py
  2. 26
      sapl/sessao/migrations/0006_auto_20170601_1257.py
  3. 38
      sapl/sessao/models.py
  4. 638
      sapl/sessao/views.py

39
sapl/sessao/migrations/0005_auto_20170601_1246.py

@ -0,0 +1,39 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2017-06-01 12:46
from __future__ import unicode_literals
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
from datetime import datetime
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('sessao', '0004_votonominal_registro_votacao'),
]
operations = [
migrations.RemoveField(
model_name='votonominal',
name='registro_votacao',
),
migrations.AddField(
model_name='votoparlamentar',
name='data_hora',
field=models.DateTimeField(auto_now_add=True, blank=True, null=True, verbose_name='Data/Hora'),
preserve_default=False,
),
migrations.AddField(
model_name='votoparlamentar',
name='ip',
field=models.CharField(blank=True, max_length=30, null=True, verbose_name='IP'),
),
migrations.AddField(
model_name='votoparlamentar',
name='user',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL),
),
]

26
sapl/sessao/migrations/0006_auto_20170601_1257.py

@ -0,0 +1,26 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2017-06-01 12:57
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('sessao', '0005_auto_20170601_1246'),
]
operations = [
migrations.AddField(
model_name='votonominal',
name='votacao',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='sessao.RegistroVotacao'),
),
migrations.AlterField(
model_name='votoparlamentar',
name='votacao',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='sessao.RegistroVotacao'),
),
]

38
sapl/sessao/models.py

@ -412,20 +412,25 @@ class RegistroVotacao(models.Model):
@reversion.register() @reversion.register()
class VotoParlamentar(models.Model): # RegistroVotacaoParlamentar class VotoParlamentar(models.Model): # RegistroVotacaoParlamentar
votacao = models.ForeignKey(RegistroVotacao, on_delete=models.PROTECT) votacao = models.ForeignKey(RegistroVotacao,
blank=True,
null=True)
parlamentar = models.ForeignKey(Parlamentar, on_delete=models.PROTECT) parlamentar = models.ForeignKey(Parlamentar, on_delete=models.PROTECT)
voto = models.CharField(max_length=10) voto = models.CharField(max_length=10)
user = models.ForeignKey(get_settings_auth_user_model(), user = models.ForeignKey(get_settings_auth_user_model(),
on_delete=models.PROTECT, on_delete=models.PROTECT,
null=True, null=True,
black=True) blank=True)
ip = models.CharField(verbose_name=_('IP'), ip = models.CharField(verbose_name=_('IP'),
max_length=30, max_length=30,
null=True, null=True,
black=True) blank=True)
data_hora = models.DateTimeField( data_hora = models.DateTimeField(
verbose_name=_('Data/Hora'), auto_now_add=True) verbose_name=_('Data/Hora'),
auto_now_add=True,
blank=True,
null=True)
class Meta: class Meta:
verbose_name = _('Registro de Votação de Parlamentar') verbose_name = _('Registro de Votação de Parlamentar')
@ -436,6 +441,31 @@ class VotoParlamentar(models.Model): # RegistroVotacaoParlamentar
'votacao': self.votacao, 'parlamentar': self.parlamentar} 'votacao': self.votacao, 'parlamentar': self.parlamentar}
@reversion.register()
class VotoNominal(models.Model):
parlamentar = models.ForeignKey(Parlamentar, on_delete=models.PROTECT)
voto = models.CharField(verbose_name=_('Voto'), max_length=10)
votacao = models.ForeignKey(RegistroVotacao,
blank=True,
null=True)
sessao = models.ForeignKey(SessaoPlenaria, on_delete=models.PROTECT)
materia = models.ForeignKey(MateriaLegislativa, on_delete=models.PROTECT)
user = models.ForeignKey(get_settings_auth_user_model(),
on_delete=models.PROTECT)
ip = models.CharField(verbose_name=_('IP'), max_length=30)
data_hora = models.DateTimeField(
verbose_name=_('Data/Hora'), auto_now_add=True)
class Meta:
verbose_name = _('Registro do Voto do Parlamentar')
verbose_name_plural = _('Registros dos Votos dos Parlamentares')
def __str__(self):
return '%s - %s' % (self.parlamentar.nome_parlamentar, self.voto)
@reversion.register() @reversion.register()
class SessaoPlenariaPresenca(models.Model): class SessaoPlenariaPresenca(models.Model):
sessao_plenaria = models.ForeignKey(SessaoPlenaria, sessao_plenaria = models.ForeignKey(SessaoPlenaria,

638
sapl/sessao/views.py

@ -190,20 +190,20 @@ class MateriaOrdemDiaCrud(MasterDetailCrud):
url = reverse('sapl.sessao:votacaosimbolica', url = reverse('sapl.sessao:votacaosimbolica',
kwargs={ kwargs={
'pk': obj.sessao_plenaria_id, 'pk': obj.sessao_plenaria_id,
'oid': obj.materia_id, 'oid': obj.pk,
'mid': obj.pk}) 'mid': obj.materia_id})
elif obj.tipo_votacao == 2: elif obj.tipo_votacao == 2:
url = reverse('sapl.sessao:votacaonominal', url = reverse('sapl.sessao:votacaonominal',
kwargs={ kwargs={
'pk': obj.sessao_plenaria_id, 'pk': obj.sessao_plenaria_id,
'oid': obj.materia_id, 'oid': obj.pk,
'mid': obj.pk}) 'mid': obj.materia_id})
elif obj.tipo_votacao == 3: elif obj.tipo_votacao == 3:
url = reverse('sapl.sessao:votacaosecreta', url = reverse('sapl.sessao:votacaosecreta',
kwargs={ kwargs={
'pk': obj.sessao_plenaria_id, 'pk': obj.sessao_plenaria_id,
'oid': obj.materia_id, 'oid': obj.pk,
'mid': obj.pk}) 'mid': obj.materia_id})
if self.request.user.has_module_perms(AppConfig.label): if self.request.user.has_module_perms(AppConfig.label):
btn_registrar = ''' btn_registrar = '''
<a href="%s" <a href="%s"
@ -228,7 +228,7 @@ class MateriaOrdemDiaCrud(MasterDetailCrud):
obj.resultado = '''Não há resultado''' obj.resultado = '''Não há resultado'''
else: else:
resultado = obj.registrovotacao_set.get( resultado = obj.registrovotacao_set.get(
materia_id=obj.materia_id) materia_id=obj.materia_id)
resultado_descricao = resultado.tipo_resultado_votacao.nome resultado_descricao = resultado.tipo_resultado_votacao.nome
resultado_observacao = resultado.observacao resultado_observacao = resultado.observacao
@ -238,28 +238,28 @@ class MateriaOrdemDiaCrud(MasterDetailCrud):
url = reverse('sapl.sessao:votacaosimbolicaedit', url = reverse('sapl.sessao:votacaosimbolicaedit',
kwargs={ kwargs={
'pk': obj.sessao_plenaria_id, 'pk': obj.sessao_plenaria_id,
'oid': obj.materia_id, 'oid': obj.pk,
'mid': obj.pk}) 'mid': obj.materia_id})
elif obj.tipo_votacao == 2: elif obj.tipo_votacao == 2:
url = reverse('sapl.sessao:votacaonominaledit', url = reverse('sapl.sessao:votacaonominaledit',
kwargs={ kwargs={
'pk': obj.sessao_plenaria_id, 'pk': obj.sessao_plenaria_id,
'oid': obj.materia_id, 'oid': obj.pk,
'mid': obj.pk}) 'mid': obj.materia_id})
elif obj.tipo_votacao == 3: elif obj.tipo_votacao == 3:
url = reverse('sapl.sessao:votacaosecretaedit', url = reverse('sapl.sessao:votacaosecretaedit',
kwargs={ kwargs={
'pk': obj.sessao_plenaria_id, 'pk': obj.sessao_plenaria_id,
'oid': obj.materia_id, 'oid': obj.pk,
'mid': obj.pk}) 'mid': obj.materia_id})
obj.resultado = ('<a href="%s">%s</a><br/>%s' % obj.resultado = ('<a href="%s">%s</a><br/>%s' %
(url, (url,
resultado_descricao, resultado_descricao,
resultado_observacao)) resultado_observacao))
else: else:
obj.resultado = ('%s<br/>%s' % obj.resultado = ('%s<br/>%s' %
(resultado_descricao, (resultado_descricao,
resultado_observacao)) resultado_observacao))
return [self._as_row(obj) for obj in object_list] return [self._as_row(obj) for obj in object_list]
@ -310,20 +310,20 @@ class ExpedienteMateriaCrud(MasterDetailCrud):
url = reverse('sapl.sessao:votacaosimbolicaexp', url = reverse('sapl.sessao:votacaosimbolicaexp',
kwargs={ kwargs={
'pk': obj.sessao_plenaria_id, 'pk': obj.sessao_plenaria_id,
'oid': obj.materia_id, 'oid': obj.pk,
'mid': obj.pk}) 'mid': obj.materia_id})
elif obj.tipo_votacao == 2: elif obj.tipo_votacao == 2:
url = reverse('sapl.sessao:votacaonominalexp', url = reverse('sapl.sessao:votacaonominalexp',
kwargs={ kwargs={
'pk': obj.sessao_plenaria_id, 'pk': obj.sessao_plenaria_id,
'oid': obj.materia_id, 'oid': obj.pk,
'mid': obj.pk}) 'mid': obj.materia_id})
elif obj.tipo_votacao == 3: elif obj.tipo_votacao == 3:
url = reverse('sapl.sessao:votacaosecretaexp', url = reverse('sapl.sessao:votacaosecretaexp',
kwargs={ kwargs={
'pk': obj.sessao_plenaria_id, 'pk': obj.sessao_plenaria_id,
'oid': obj.materia_id, 'oid': obj.pk,
'mid': obj.pk}) 'mid': obj.materia_id})
if self.request.user.has_module_perms(AppConfig.label): if self.request.user.has_module_perms(AppConfig.label):
btn_registrar = ''' btn_registrar = '''
@ -355,20 +355,20 @@ class ExpedienteMateriaCrud(MasterDetailCrud):
'sapl.sessao:votacaosimbolicaexpedit', 'sapl.sessao:votacaosimbolicaexpedit',
kwargs={ kwargs={
'pk': obj.sessao_plenaria_id, 'pk': obj.sessao_plenaria_id,
'oid': obj.materia_id, 'oid': obj.pk,
'mid': obj.pk}) 'mid': obj.materia_id})
elif obj.tipo_votacao == 2: elif obj.tipo_votacao == 2:
url = reverse('sapl.sessao:votacaonominalexpedit', url = reverse('sapl.sessao:votacaonominalexpedit',
kwargs={ kwargs={
'pk': obj.sessao_plenaria_id, 'pk': obj.sessao_plenaria_id,
'oid': obj.materia_id, 'oid': obj.pk,
'mid': obj.pk}) 'mid': obj.materia_id})
elif obj.tipo_votacao == 3: elif obj.tipo_votacao == 3:
url = reverse('sapl.sessao:votacaosecretaexpedit', url = reverse('sapl.sessao:votacaosecretaexpedit',
kwargs={ kwargs={
'pk': obj.sessao_plenaria_id, 'pk': obj.sessao_plenaria_id,
'oid': obj.materia_id, 'oid': obj.pk,
'mid': obj.pk}) 'mid': obj.materia_id})
obj.resultado = ('<a href="%s">%s</a><br/>%s' % obj.resultado = ('<a href="%s">%s</a><br/>%s' %
(url, (url,
resultado_descricao, resultado_descricao,
@ -378,8 +378,8 @@ class ExpedienteMateriaCrud(MasterDetailCrud):
url = reverse('sapl.sessao:votacaonominalexpdetail', url = reverse('sapl.sessao:votacaonominalexpdetail',
kwargs={ kwargs={
'pk': obj.sessao_plenaria_id, 'pk': obj.sessao_plenaria_id,
'oid': obj.materia_id, 'oid': obj.pk,
'mid': obj.pk}) 'mid': obj.materia_id})
obj.resultado = ('<a href="%s">%s</a><br/>%s' % obj.resultado = ('<a href="%s">%s</a><br/>%s' %
(url, (url,
resultado_descricao, resultado_descricao,
@ -761,8 +761,8 @@ class ListMateriaOrdemDiaView(FormMixin, DetailView):
autor = [str(a.autor) for a in autoria] autor = [str(a.autor) for a in autoria]
mat = {'pk': pk, mat = {'pk': pk,
'oid': o.materia_id, 'oid': o.id,
'ordem_id': o.id, 'ordem_id': o.materia_id,
'ementa': ementa, 'ementa': ementa,
'titulo': titulo, 'titulo': titulo,
'numero': numero, 'numero': numero,
@ -821,8 +821,8 @@ class ListMateriaOrdemDiaView(FormMixin, DetailView):
autor = [str(a.autor) for a in autoria] autor = [str(a.autor) for a in autoria]
mat = {'pk': pk, mat = {'pk': pk,
'oid': o.materia_id, 'oid': o.id,
'ordem_id': o.id, 'ordem_id': o.materia_id,
'ementa': ementa, 'ementa': ementa,
'titulo': titulo, 'titulo': titulo,
'numero': numero, 'numero': numero,
@ -1388,8 +1388,8 @@ class VotacaoEditView(SessaoPermissionMixin):
self.object = self.get_object() self.object = self.get_object()
form = VotacaoEditForm(request.POST) form = VotacaoEditForm(request.POST)
materia_id = kwargs['oid'] materia_id = kwargs['mid']
ordem_id = kwargs['mid'] ordem_id = kwargs['oid']
if(int(request.POST['anular_votacao']) == 1): if(int(request.POST['anular_votacao']) == 1):
RegistroVotacao.objects.filter( RegistroVotacao.objects.filter(
@ -1417,8 +1417,8 @@ class VotacaoEditView(SessaoPermissionMixin):
else: else:
titulo = _("Não definida") titulo = _("Não definida")
materia_id = kwargs['oid'] materia_id = kwargs['mid']
ordem_id = kwargs['mid'] ordem_id = kwargs['oid']
ordem = OrdemDia.objects.get(id=ordem_id) ordem = OrdemDia.objects.get(id=ordem_id)
@ -1471,7 +1471,7 @@ class VotacaoView(SessaoPermissionMixin):
else: else:
titulo = _("Não definida") titulo = _("Não definida")
ordem_id = kwargs['mid'] ordem_id = kwargs['oid']
ordem = OrdemDia.objects.get(id=ordem_id) ordem = OrdemDia.objects.get(id=ordem_id)
qtde_presentes = PresencaOrdemDia.objects.filter( qtde_presentes = PresencaOrdemDia.objects.filter(
sessao_plenaria_id=self.object.id).count() sessao_plenaria_id=self.object.id).count()
@ -1497,7 +1497,7 @@ class VotacaoView(SessaoPermissionMixin):
else: else:
titulo = _("Não definida") titulo = _("Não definida")
ordem_id = kwargs['mid'] ordem_id = kwargs['oid']
ordem = OrdemDia.objects.get(id=ordem_id) ordem = OrdemDia.objects.get(id=ordem_id)
qtde_presentes = PresencaOrdemDia.objects.filter( qtde_presentes = PresencaOrdemDia.objects.filter(
sessao_plenaria_id=self.object.id).count() sessao_plenaria_id=self.object.id).count()
@ -1515,8 +1515,8 @@ class VotacaoView(SessaoPermissionMixin):
return self.form_valid(form) return self.form_valid(form)
if form.is_valid(): if form.is_valid():
materia_id = kwargs['oid'] materia_id = kwargs['mid']
ordem_id = kwargs['mid'] ordem_id = kwargs['oid']
qtde_presentes = PresencaOrdemDia.objects.filter( qtde_presentes = PresencaOrdemDia.objects.filter(
sessao_plenaria_id=self.object.id).count() sessao_plenaria_id=self.object.id).count()
@ -1568,85 +1568,115 @@ class VotacaoView(SessaoPermissionMixin):
kwargs={'pk': pk}) kwargs={'pk': pk})
def fechar_votacao_materia(presentes, ordem=None, expediente=None): def fechar_votacao_materia(ordem=None, expediente=None):
if ordem: if ordem:
for p in presentes: registro_votacao = RegistroVotacao.objects.filter(ordem=ordem)
try:
voto_nominal = VotoNominal.objects.get(
parlamentar=p.parlamentar,
registro_votacao__ordem=ordem)
except ObjectDoesNotExist:
pass
else:
registro_votacao = voto_nominal.registro_votacao
registro_votacao.delete() for r in registro_votacao:
voto_nominal.delete() r.delete()
ordem.votacao_aberta = False ordem.votacao_aberta = False
ordem.save() ordem.save()
elif expediente: elif expediente:
for p in presentes: registro_votacao = RegistroVotacao.objects.filter(
try: expediente=expediente)
voto_nominal = VotoNominal.objects.get(
parlamentar=p.parlamentar,
registro_votacao__expediente=expediente)
except ObjectDoesNotExist:
pass
else:
registro_votacao = voto_nominal.registro_votacao
registro_votacao.delete() for r in registro_votacao:
voto_nominal.delete() r.delete()
expediente.votacao_aberta = False expediente.votacao_aberta = False
expediente.save() expediente.save()
class VotacaoNominalView(SessaoPermissionMixin): class VotacaoNominalAbstract(SessaoPermissionMixin):
template_name = 'sessao/votacao/nominal.html' template_name = 'sessao/votacao/nominal.html'
ordem = None
expediente = None
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
ordem_id = kwargs['mid'] if self.ordem:
ordem = OrdemDia.objects.get(id=ordem_id) ordem_id = kwargs['oid']
total = PresencaOrdemDia.objects.filter( if RegistroVotacao.objects.filter(ordem_id=ordem_id).exists():
sessao_plenaria_id=ordem.sessao_plenaria_id).count() msg = _('Esta matéria já foi votada!')
messages.add_message(request, messages.ERROR, msg)
return HttpResponseRedirect(reverse(
'sapl.sessao:ordemdia_list', kwargs={'pk': kwargs['pk']}))
try:
ordem = OrdemDia.objects.get(id=ordem_id)
except ObjectDoesNotExist:
raise Http404()
total = PresencaOrdemDia.objects.filter(
sessao_plenaria_id=ordem.sessao_plenaria_id).count()
tipo_materia_votacao = ordem
elif self.expediente:
expediente_id = kwargs['oid']
if (RegistroVotacao.objects.filter(
expediente_id=expediente_id).exists()):
msg = _('Esta matéria já foi votada!')
messages.add_message(request, messages.ERROR, msg)
return HttpResponseRedirect(reverse(
'sapl.sessao:expedientemateria_list',
kwargs={'pk': kwargs['pk']}))
try:
expediente = ExpedienteMateria.objects.get(id=expediente_id)
except ObjectDoesNotExist:
raise Http404()
materia = {'materia': ordem.materia, total = SessaoPlenariaPresenca.objects.filter(
sessao_plenaria_id=expediente.sessao_plenaria_id).count()
tipo_materia_votacao = expediente
materia = {'materia': tipo_materia_votacao.materia,
'ementa': sub( 'ementa': sub(
'&nbsp;', ' ', strip_tags(ordem.observacao))} '&nbsp;', ' ', strip_tags(
tipo_materia_votacao.observacao))}
context = {'materia': materia, 'object': self.get_object(), context = {'materia': materia, 'object': self.get_object(),
'parlamentares': self.get_parlamentares(ordem.materia), 'parlamentares': self.get_parlamentares(
'tipos': self.get_tipos_votacao(), tipo_materia_votacao.materia),
'total': total} 'tipos': self.get_tipos_votacao(),
'total': total}
return self.render_to_response(context) return self.render_to_response(context)
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
self.object = self.get_object() self.object = self.get_object()
ordem_id = kwargs['mid'] if self.ordem:
ordem_id = kwargs['oid']
try:
ordem = OrdemDia.objects.get(id=ordem_id)
except ObjectDoesNotExist:
raise Http404()
tipo_materia_votacao = ordem
try: elif self.expediente:
ordem = OrdemDia.objects.get(id=ordem_id) expediente_id = kwargs['oid']
except ObjectDoesNotExist: try:
raise Http404() expediente = ExpedienteMateria.objects.get(id=expediente_id)
except ObjectDoesNotExist:
raise Http404()
tipo_materia_votacao = expediente
form = VotacaoNominalForm(request.POST) form = VotacaoNominalForm(request.POST)
if 'cancelar-votacao' in request.POST: if 'cancelar-votacao' in request.POST:
presentes = PresencaOrdemDia.objects.filter( if self.ordem:
sessao_plenaria_id=ordem.sessao_plenaria_id) fechar_votacao_materia(ordem=ordem)
elif self.expediente:
fechar_votacao_materia(presentes, ordem=ordem) fechar_votacao_materia(expediente=expediente)
return self.form_valid(form) return self.form_valid(form)
if form.is_valid(): if form.is_valid():
materia_id = kwargs['oid']
ordem_id = kwargs['mid']
votos_sim = 0 votos_sim = 0
votos_nao = 0 votos_nao = 0
abstencoes = 0 abstencoes = 0
@ -1668,16 +1698,19 @@ class VotacaoNominalView(SessaoPermissionMixin):
# Caso todas as opções sejam 'Não votou', fecha a votação # Caso todas as opções sejam 'Não votou', fecha a votação
if nao_votou == len(request.POST.getlist('voto_parlamentar')): if nao_votou == len(request.POST.getlist('voto_parlamentar')):
presentes = PresencaOrdemDia.objects.filter( if self.ordem:
sessao_plenaria_id=ordem.sessao_plenaria_id) fechar_votacao_materia(ordem=ordem)
elif self.expediente:
fechar_votacao_materia(presentes, ordem=ordem) fechar_votacao_materia(expediente=expediente)
return self.form_valid(form) return self.form_valid(form)
votacao = RegistroVotacao.objects.filter( if self.ordem:
materia_id=materia_id, votacao = RegistroVotacao.objects.filter(
ordem_id=ordem_id) ordem_id=ordem_id)
elif self.expediente:
votacao = RegistroVotacao.objects.filter(
expediente_id=expediente_id)
# Remove todas as votação desta matéria, caso existam # Remove todas as votação desta matéria, caso existam
for v in votacao: for v in votacao:
@ -1688,8 +1721,14 @@ class VotacaoNominalView(SessaoPermissionMixin):
votacao.numero_votos_nao = votos_nao votacao.numero_votos_nao = votos_nao
votacao.numero_abstencoes = abstencoes votacao.numero_abstencoes = abstencoes
votacao.observacao = request.POST['observacao'] votacao.observacao = request.POST['observacao']
votacao.materia_id = materia_id
votacao.ordem_id = ordem_id if self.ordem:
votacao.materia_id = ordem.materia.id
votacao.ordem_id = ordem_id
elif self.expediente:
votacao.materia_id = expediente.materia.id
votacao.expediente_id = expediente_id
votacao.tipo_resultado_votacao_id = int( votacao.tipo_resultado_votacao_id = int(
request.POST['resultado_votacao']) request.POST['resultado_votacao'])
votacao.save() votacao.save()
@ -1705,14 +1744,12 @@ class VotacaoNominalView(SessaoPermissionMixin):
voto_parlamentar.votacao_id = votacao.id voto_parlamentar.votacao_id = votacao.id
voto_parlamentar.save() voto_parlamentar.save()
ordem = OrdemDia.objects.get(
sessao_plenaria_id=self.object.id,
materia_id=materia_id)
resultado = TipoResultadoVotacao.objects.get( resultado = TipoResultadoVotacao.objects.get(
id=request.POST['resultado_votacao']) id=request.POST['resultado_votacao'])
ordem.resultado = resultado.nome
ordem.votacao_aberta = False tipo_materia_votacao.resultado = resultado.nome
ordem.save() tipo_materia_votacao.votacao_aberta = False
tipo_materia_votacao.save()
return self.form_valid(form) return self.form_valid(form)
else: else:
@ -1726,13 +1763,18 @@ class VotacaoNominalView(SessaoPermissionMixin):
) )
presentes = [p.parlamentar for p in presencas] presentes = [p.parlamentar for p in presencas]
if self.ordem:
voto_parlamentar = VotoParlamentar.objects.filter(
votacao__ordem=self.kwargs['oid'])
elif self.expediente:
voto_parlamentar = VotoParlamentar.objects.filter(
votacao__expediente=self.kwargs['oid'])
for parlamentar in Parlamentar.objects.filter(ativo=True): for parlamentar in Parlamentar.objects.filter(ativo=True):
if parlamentar in presentes: if parlamentar in presentes:
try: try:
voto = VotoNominal.objects.get( voto = voto_parlamentar.get(
parlamentar=parlamentar, parlamentar=parlamentar)
sessao=self.object.pk,
materia=materia)
except ObjectDoesNotExist: except ObjectDoesNotExist:
yield [parlamentar, None] yield [parlamentar, None]
else: else:
@ -1744,31 +1786,47 @@ class VotacaoNominalView(SessaoPermissionMixin):
def get_success_url(self): def get_success_url(self):
pk = self.kwargs['pk'] pk = self.kwargs['pk']
return reverse('sapl.sessao:ordemdia_list',
kwargs={'pk': pk}) if self.ordem:
return reverse('sapl.sessao:ordemdia_list',
kwargs={'pk': pk})
elif self.expediente:
return reverse('sapl.sessao:expedientemateria_list',
kwargs={'pk': pk})
class VotacaoNominalEditView(SessaoPermissionMixin): class VotacaoNominalEditAbstract(SessaoPermissionMixin):
template_name = 'sessao/votacao/nominal_edit.html' template_name = 'sessao/votacao/nominal_edit.html'
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
context = {} context = {}
materia_id = kwargs['oid'] if self.ordem:
ordem_id = kwargs['mid'] ordem_id = kwargs['oid']
try: try:
votacao = RegistroVotacao.objects.get( ordem = OrdemDia.objects.get(id=ordem_id)
materia_id=materia_id, votacao = RegistroVotacao.objects.get(
ordem_id=ordem_id) ordem_id=ordem_id)
except ObjectDoesNotExist: except ObjectDoesNotExist:
raise Http404() raise Http404()
except MultipleObjectsReturned:
votacao = RegistroVotacao.objects.filter( materia = ordem.materia
materia_id=materia_id, observacao = ordem.observacao
ordem_id=ordem_id).first()
elif self.expediente:
expediente_id = kwargs['oid']
try:
expediente = ExpedienteMateria.objects.get(id=expediente_id)
votacao = RegistroVotacao.objects.get(
expediente_id=expediente_id)
except ObjectDoesNotExist:
raise Http404()
materia = expediente.materia
observacao = expediente.observacao
ordem = OrdemDia.objects.get(id=ordem_id)
votos = VotoParlamentar.objects.filter(votacao_id=votacao.id) votos = VotoParlamentar.objects.filter(votacao_id=votacao.id)
list_votos = [] list_votos = []
@ -1778,9 +1836,9 @@ class VotacaoNominalEditView(SessaoPermissionMixin):
context.update({'votos': list_votos}) context.update({'votos': list_votos})
materia = {'materia': ordem.materia, materia = {'materia': materia,
'ementa': sub( 'ementa': sub(
'&nbsp;', ' ', strip_tags(ordem.observacao))} '&nbsp;', ' ', strip_tags(observacao))}
context.update({'materia': materia}) context.update({'materia': materia})
votacao_existente = {'observacao': sub( votacao_existente = {'observacao': sub(
@ -1797,197 +1855,39 @@ class VotacaoNominalEditView(SessaoPermissionMixin):
self.object = self.get_object() self.object = self.get_object()
form = VotacaoEditForm(request.POST) form = VotacaoEditForm(request.POST)
materia_id = kwargs['oid'] if self.ordem:
ordem_id = kwargs['mid'] ordem_id = kwargs['oid']
sessao = self.object
ordem = ExpedienteMateria.objects.get(id=ordem_id)
presentes = PresencaOrdemDia.objects.filter(
sessao_plenaria_id=ordem.sessao_plenaria_id)
for p in presentes:
try: try:
voto = VotoNominal.objects.get( ordem = OrdemDia.objects.get(id=ordem_id)
parlamentar=p.parlamentar,
sessao=self.object.pk,
materia=materia_id)
except ObjectDoesNotExist: except ObjectDoesNotExist:
pass raise Http404()
else:
voto.delete()
if(int(request.POST['anular_votacao']) == 1):
registro = RegistroVotacao.objects.get(
materia_id=materia_id,
ordem_id=ordem_id)
ordem = OrdemDia.objects.get(
sessao_plenaria_id=self.object.id,
materia_id=materia_id)
ordem.resultado = ''
ordem.votacao_aberta = False
ordem.save()
registro.delete()
try:
votacao = VotoParlamentar.objects.filter(
votacao_id=registro.id)
for v in votacao:
v.delete()
except:
pass
return self.form_valid(form)
def get_tipos_votacao(self):
for tipo in TipoResultadoVotacao.objects.all():
yield tipo
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('sapl.sessao:ordemdia_list',
kwargs={'pk': pk})
class VotacaoNominalExpedienteView(SessaoPermissionMixin):
template_name = 'sessao/votacao/nominal.html'
def get(self, request, *args, **kwargs):
expediente_id = kwargs['mid']
expediente = ExpedienteMateria.objects.get(id=expediente_id)
total = SessaoPlenariaPresenca.objects.filter(
sessao_plenaria_id=expediente.sessao_plenaria_id).count()
materia = {'materia': expediente.materia,
'ementa': sub(
'&nbsp;', ' ', strip_tags(expediente.observacao))}
context = {'materia': materia, 'object': self.get_object(),
'parlamentares': self.get_parlamentares(expediente.materia),
'tipos': self.get_tipos_votacao(),
'total': total}
return self.render_to_response(context)
def post(self, request, *args, **kwargs):
self.object = self.get_object()
expediente_id = kwargs['mid']
try:
expediente = ExpedienteMateria.objects.get(id=expediente_id)
except ObjectDoesNotExist:
raise Http404()
form = VotacaoNominalForm(request.POST)
if 'cancelar-votacao' in request.POST:
presentes = SessaoPlenariaPresenca.objects.filter(
sessao_plenaria_id=expediente.sessao_plenaria_id)
fechar_votacao_materia(presentes, expediente=expediente)
return self.form_valid(form)
if form.is_valid():
materia_id = kwargs['oid']
expediente_id = kwargs['mid']
votos_sim = 0
votos_nao = 0
abstencoes = 0
nao_votou = 0
for votos in request.POST.getlist('voto_parlamentar'):
v = votos.split(':')
voto = v[0]
parlamentar_id = v[1]
if(voto == 'Sim'):
votos_sim += 1
elif(voto == 'Não'):
votos_nao += 1
elif(voto == 'Abstenção'):
abstencoes += 1
elif(voto == 'Não Votou'):
nao_votou += 1
# Caso todas as opções sejam 'Não votou', fecha a votação
if nao_votou == len(request.POST.getlist('voto_parlamentar')):
presentes = SessaoPlenariaPresenca.objects.filter(
sessao_plenaria_id=expediente.sessao_plenaria_id)
fechar_votacao_materia(presentes, expediente=expediente)
return self.form_valid(form)
votacao = RegistroVotacao.objects.filter(
materia_id=materia_id,
expediente=expediente)
# Remove todas as votação desta matéria, caso existam elif self.expediente:
for v in votacao: expediente_id = kwargs['oid']
v.delete()
try: try:
votacao = RegistroVotacao() expediente = ExpedienteMateria.objects.get(id=expediente_id)
votacao.numero_votos_sim = votos_sim except ObjectDoesNotExist:
votacao.numero_votos_nao = votos_nao raise Http404()
votacao.numero_abstencoes = abstencoes
votacao.observacao = request.POST['observacao']
votacao.materia_id = materia_id
votacao.expediente = expediente
votacao.tipo_resultado_votacao_id = int(
request.POST['resultado_votacao'])
votacao.save()
except:
return self.form_invalid(form)
else:
votacao = RegistroVotacao.objects.get(
materia_id=materia_id,
expediente_id=expediente)
for votos in request.POST.getlist('voto_parlamentar'):
v = votos.split(':')
voto = v[0]
parlamentar_id = v[1]
voto_parlamentar = VotoParlamentar()
voto_parlamentar.voto = voto
voto_parlamentar.parlamentar_id = parlamentar_id
voto_parlamentar.votacao_id = votacao.id
voto_parlamentar.save()
expediente = ExpedienteMateria.objects.get(
sessao_plenaria_id=self.object.id,
materia_id=materia_id)
resultado = TipoResultadoVotacao.objects.get(
id=request.POST['resultado_votacao'])
expediente.resultado = resultado.nome
expediente.votacao_aberta = False
expediente.save()
return self.form_valid(form) if(int(request.POST['anular_votacao']) == 1):
else: if self.ordem:
return self.form_invalid(form) registro = RegistroVotacao.objects.get(
ordem=ordem)
materia_votacao = registro.ordem
elif self.expediente:
registro = RegistroVotacao.objects.get(
expediente=expediente)
materia_votacao = registro.expediente
materia_votacao.resultado = ''
materia_votacao.votacao_aberta = False
materia_votacao.save()
def get_parlamentares(self, materia): registro.delete()
self.object = self.get_object()
presencas = SessaoPlenariaPresenca.objects.filter(
sessao_plenaria_id=self.object.id
)
presentes = [p.parlamentar for p in presencas]
for parlamentar in Parlamentar.objects.filter(ativo=True): return self.form_valid(form)
if parlamentar in presentes:
try:
voto = VotoNominal.objects.get(
parlamentar=parlamentar,
sessao=self.object.pk,
materia=materia)
except ObjectDoesNotExist:
yield [parlamentar, None]
else:
yield [parlamentar, voto.voto]
def get_tipos_votacao(self): def get_tipos_votacao(self):
for tipo in TipoResultadoVotacao.objects.all(): for tipo in TipoResultadoVotacao.objects.all():
@ -1995,108 +1895,42 @@ class VotacaoNominalExpedienteView(SessaoPermissionMixin):
def get_success_url(self): def get_success_url(self):
pk = self.kwargs['pk'] pk = self.kwargs['pk']
return reverse('sapl.sessao:expedientemateria_list',
kwargs={'pk': pk})
class VotacaoNominalExpedienteEditView(SessaoPermissionMixin):
template_name = 'sessao/votacao/nominal_edit.html'
def get(self, request, *args, **kwargs):
context = {}
materia_id = kwargs['oid']
expediente_id = kwargs['mid']
votacao = RegistroVotacao.objects.get(
materia_id=materia_id,
expediente_id=expediente_id)
expediente = ExpedienteMateria.objects.get(id=expediente_id)
votos = VotoParlamentar.objects.filter(votacao_id=votacao.id)
list_votos = []
for v in votos:
parlamentar = Parlamentar.objects.get(id=v.parlamentar_id)
list_votos.append({'parlamentar': parlamentar, 'voto': v.voto})
context.update({'votos': list_votos})
materia = {'materia': expediente.materia,
'ementa': sub(
'&nbsp;', ' ', strip_tags(expediente.observacao))}
context.update({'materia': materia})
votacao_existente = {'observacao': sub( if self.ordem:
'&nbsp;', ' ', strip_tags(votacao.observacao)), return reverse('sapl.sessao:ordemdia_list',
'resultado': votacao.tipo_resultado_votacao.nome, kwargs={'pk': pk})
'tipo_resultado': elif self.expediente:
votacao.tipo_resultado_votacao_id} return reverse('sapl.sessao:expedientemateria_list',
context.update({'votacao': votacao_existente, kwargs={'pk': pk})
'tipos': self.get_tipos_votacao()})
return self.render_to_response(context)
def post(self, request, *args, **kwargs): class VotacaoNominalView(VotacaoNominalAbstract):
self.object = self.get_object() ordem = True
form = VotacaoEditForm(request.POST) expediente = False
materia_id = kwargs['oid']
expediente_id = kwargs['mid']
sessao = self.object class VotacaoNominalExpedienteView(VotacaoNominalAbstract):
expediente = ExpedienteMateria.objects.get(id=expediente_id) expediente = True
presentes = SessaoPlenariaPresenca.objects.filter( ordem = False
sessao_plenaria_id=expediente.sessao_plenaria_id)
for p in presentes:
try:
voto = VotoNominal.objects.get(
parlamentar=p.parlamentar,
sessao=self.object.pk,
materia=materia_id)
except ObjectDoesNotExist:
pass
else:
voto.delete()
if(int(request.POST['anular_votacao']) == 1):
registro = RegistroVotacao.objects.get(
materia_id=materia_id,
expediente_id=expediente_id)
expediente = ExpedienteMateria.objects.get( class VotacaoNominalEditView(VotacaoNominalEditAbstract):
sessao_plenaria_id=self.object.id, ordem = True
materia_id=materia_id) expediente = False
expediente.resultado = ''
expediente.votacao_aberta = False
expediente.save()
try:
votacao = VotoParlamentar.objects.filter(
votacao_id=registro.id)
for v in votacao:
v.delete()
except:
pass
registro.delete()
return self.form_valid(form) class VotacaoNominalExpedienteEditView(VotacaoNominalEditAbstract):
expediente = True
ordem = False
def get_tipos_votacao(self):
for tipo in TipoResultadoVotacao.objects.all():
yield tipo
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('sapl.sessao:expedientemateria_list',
kwargs={'pk': pk})
class VotacaoNominalExpedienteDetailView(DetailView): class VotacaoNominalExpedienteDetailView(DetailView):
template_name = 'sessao/votacao/nominal_detail.html' template_name = 'sessao/votacao/nominal_detail.html'
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
context = {} context = {}
materia_id = kwargs['oid'] materia_id = kwargs['mid']
expediente_id = kwargs['mid'] expediente_id = kwargs['oid']
votacao = RegistroVotacao.objects.get( votacao = RegistroVotacao.objects.get(
materia_id=materia_id, materia_id=materia_id,
@ -2158,7 +1992,7 @@ class VotacaoExpedienteView(SessaoPermissionMixin):
else: else:
titulo = _("Não definida") titulo = _("Não definida")
expediente_id = kwargs['mid'] expediente_id = kwargs['oid']
expediente = ExpedienteMateria.objects.get(id=expediente_id) expediente = ExpedienteMateria.objects.get(id=expediente_id)
qtde_presentes = SessaoPlenariaPresenca.objects.filter( qtde_presentes = SessaoPlenariaPresenca.objects.filter(
sessao_plenaria_id=self.object.id).count() sessao_plenaria_id=self.object.id).count()
@ -2185,7 +2019,7 @@ class VotacaoExpedienteView(SessaoPermissionMixin):
else: else:
titulo = _("Não definida") titulo = _("Não definida")
expediente_id = kwargs['mid'] expediente_id = kwargs['oid']
expediente = ExpedienteMateria.objects.get(id=expediente_id) expediente = ExpedienteMateria.objects.get(id=expediente_id)
qtde_presentes = SessaoPlenariaPresenca.objects.filter( qtde_presentes = SessaoPlenariaPresenca.objects.filter(
sessao_plenaria_id=self.object.id).count() sessao_plenaria_id=self.object.id).count()
@ -2204,8 +2038,8 @@ class VotacaoExpedienteView(SessaoPermissionMixin):
return self.form_valid(form) return self.form_valid(form)
if form.is_valid(): if form.is_valid():
materia_id = kwargs['oid'] materia_id = kwargs['mid']
expediente_id = kwargs['mid'] expediente_id = kwargs['oid']
qtde_presentes = SessaoPlenariaPresenca.objects.filter( qtde_presentes = SessaoPlenariaPresenca.objects.filter(
sessao_plenaria_id=self.object.id).count() sessao_plenaria_id=self.object.id).count()
@ -2288,8 +2122,8 @@ class VotacaoExpedienteEditView(SessaoPermissionMixin):
else: else:
titulo = _("Não definida") titulo = _("Não definida")
materia_id = kwargs['oid'] materia_id = kwargs['mid']
expediente_id = kwargs['mid'] expediente_id = kwargs['oid']
expediente = ExpedienteMateria.objects.get(id=expediente_id) expediente = ExpedienteMateria.objects.get(id=expediente_id)
@ -2320,8 +2154,8 @@ class VotacaoExpedienteEditView(SessaoPermissionMixin):
self.object = self.get_object() self.object = self.get_object()
form = VotacaoEditForm(request.POST) form = VotacaoEditForm(request.POST)
materia_id = kwargs['oid'] materia_id = kwargs['mid']
expediente_id = kwargs['mid'] expediente_id = kwargs['oid']
if(int(request.POST['anular_votacao']) == 1): if(int(request.POST['anular_votacao']) == 1):
try: try:

Loading…
Cancel
Save