From dcc07edf351afb12ed252440ca22419c8da6b15e Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Thu, 1 Jun 2017 12:43:20 -0300 Subject: [PATCH] =?UTF-8?q?Otimiza=C3=A7=C3=B5es=20no=20c=C3=B3digo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../0004_votonominal_registro_votacao.py | 21 ++++ sapl/sessao/models.py | 34 ++--- sapl/sessao/views.py | 116 ++++++++++++------ 3 files changed, 110 insertions(+), 61 deletions(-) create mode 100644 sapl/sessao/migrations/0004_votonominal_registro_votacao.py diff --git a/sapl/sessao/migrations/0004_votonominal_registro_votacao.py b/sapl/sessao/migrations/0004_votonominal_registro_votacao.py new file mode 100644 index 000000000..d3267d34f --- /dev/null +++ b/sapl/sessao/migrations/0004_votonominal_registro_votacao.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.7 on 2017-06-01 11:06 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('sessao', '0003_resumoordenacao'), + ] + + operations = [ + migrations.AddField( + model_name='votonominal', + name='registro_votacao', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='sessao.RegistroVotacao'), + ), + ] diff --git a/sapl/sessao/models.py b/sapl/sessao/models.py index f79eee6b1..6d43127fd 100644 --- a/sapl/sessao/models.py +++ b/sapl/sessao/models.py @@ -414,38 +414,26 @@ class RegistroVotacao(models.Model): class VotoParlamentar(models.Model): # RegistroVotacaoParlamentar votacao = models.ForeignKey(RegistroVotacao, on_delete=models.PROTECT) parlamentar = models.ForeignKey(Parlamentar, on_delete=models.PROTECT) - # XXX change to restricted choices voto = models.CharField(max_length=10) - class Meta: - verbose_name = _('Registro de Votação de Parlamentar') - verbose_name_plural = _('Registros de Votações de Parlamentares') - - def __str__(self): - return _('Votação: %(votacao)s - Parlamentar: %(parlamentar)s') % { - '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) - - 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) + on_delete=models.PROTECT, + null=True, + black=True) + ip = models.CharField(verbose_name=_('IP'), + max_length=30, + null=True, + black=True) 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') + verbose_name = _('Registro de Votação de Parlamentar') + verbose_name_plural = _('Registros de Votações de Parlamentares') def __str__(self): - return '%s - %s' % (self.parlamentar.nome_parlamentar, self.voto) + return _('Votação: %(votacao)s - Parlamentar: %(parlamentar)s') % { + 'votacao': self.votacao, 'parlamentar': self.parlamentar} @reversion.register() diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index 4810054ab..6b2fc1c6d 100644 --- a/sapl/sessao/views.py +++ b/sapl/sessao/views.py @@ -1568,8 +1568,40 @@ class VotacaoView(SessaoPermissionMixin): kwargs={'pk': pk}) -def fechar_votacao_materia(sessao, materia, ordem=None, expediente=None): - +def fechar_votacao_materia(presentes, 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.delete() + voto_nominal.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.delete() + voto_nominal.delete() + + expediente.votacao_aberta = False + expediente.save() class VotacaoNominalView(SessaoPermissionMixin): @@ -1595,28 +1627,20 @@ class VotacaoNominalView(SessaoPermissionMixin): self.object = self.get_object() ordem_id = kwargs['mid'] - ordem = OrdemDia.objects.get(id=ordem_id) + + try: + ordem = OrdemDia.objects.get(id=ordem_id) + except ObjectDoesNotExist: + raise Http404() form = VotacaoNominalForm(request.POST) if 'cancelar-votacao' in request.POST: - sessao = self.object - materia = ordem.materia presentes = PresencaOrdemDia.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) - except ObjectDoesNotExist: - pass - else: - voto.delete() + sessao_plenaria_id=ordem.sessao_plenaria_id) + + fechar_votacao_materia(presentes, ordem=ordem) - ordem.votacao_aberta = False - ordem.save() return self.form_valid(form) if form.is_valid(): @@ -1642,7 +1666,14 @@ class VotacaoNominalView(SessaoPermissionMixin): 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 = PresencaOrdemDia.objects.filter( + sessao_plenaria_id=ordem.sessao_plenaria_id) + + fechar_votacao_materia(presentes, ordem=ordem) + + return self.form_valid(form) votacao = RegistroVotacao.objects.filter( materia_id=materia_id, @@ -1699,9 +1730,9 @@ class VotacaoNominalView(SessaoPermissionMixin): if parlamentar in presentes: try: voto = VotoNominal.objects.get( - parlamentar=parlamentar, - sessao=self.object.pk, - materia=materia) + parlamentar=parlamentar, + sessao=self.object.pk, + materia=materia) except ObjectDoesNotExist: yield [parlamentar, None] else: @@ -1796,6 +1827,8 @@ class VotacaoNominalEditView(SessaoPermissionMixin): ordem.votacao_aberta = False ordem.save() + registro.delete() + try: votacao = VotoParlamentar.objects.filter( votacao_id=registro.id) @@ -1839,30 +1872,20 @@ class VotacaoNominalExpedienteView(SessaoPermissionMixin): self.object = self.get_object() expediente_id = kwargs['mid'] - expediente = ExpedienteMateria.objects.get(id=expediente_id) + + try: + expediente = ExpedienteMateria.objects.get(id=expediente_id) + except ObjectDoesNotExist: + raise Http404() form = VotacaoNominalForm(request.POST) if 'cancelar-votacao' in request.POST: - sessao = self.object - expediente_id = kwargs['mid'] - expediente = ExpedienteMateria.objects.get(id=expediente_id) - materia = expediente.materia 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) - except ObjectDoesNotExist: - pass - else: - voto.delete() - expediente.votacao_aberta = False - expediente.save() + fechar_votacao_materia(presentes, expediente=expediente) + return self.form_valid(form) if form.is_valid(): @@ -1888,6 +1911,23 @@ class VotacaoNominalExpedienteView(SessaoPermissionMixin): 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 + for v in votacao: + v.delete() + try: votacao = RegistroVotacao() votacao.numero_votos_sim = votos_sim