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. 576
      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()
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)
voto = models.CharField(max_length=10)
user = models.ForeignKey(get_settings_auth_user_model(),
on_delete=models.PROTECT,
null=True,
black=True)
blank=True)
ip = models.CharField(verbose_name=_('IP'),
max_length=30,
null=True,
black=True)
blank=True)
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:
verbose_name = _('Registro de Votação de Parlamentar')
@ -436,6 +441,31 @@ class VotoParlamentar(models.Model): # RegistroVotacaoParlamentar
'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()
class SessaoPlenariaPresenca(models.Model):
sessao_plenaria = models.ForeignKey(SessaoPlenaria,

576
sapl/sessao/views.py

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

Loading…
Cancel
Save