From 630d6851221887e5b6a2f5383d752c72907bff25 Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Mon, 5 Jun 2017 13:53:24 -0300 Subject: [PATCH] Correcao e otimizacao do codigo de votacao nominal --- .../migrations/0005_auto_20170601_1246.py | 39 ++ .../migrations/0006_auto_20170601_1257.py | 26 + sapl/sessao/models.py | 38 +- sapl/sessao/views.py | 638 +++++++----------- 4 files changed, 335 insertions(+), 406 deletions(-) create mode 100644 sapl/sessao/migrations/0005_auto_20170601_1246.py create mode 100644 sapl/sessao/migrations/0006_auto_20170601_1257.py diff --git a/sapl/sessao/migrations/0005_auto_20170601_1246.py b/sapl/sessao/migrations/0005_auto_20170601_1246.py new file mode 100644 index 000000000..842f99319 --- /dev/null +++ b/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), + ), + ] diff --git a/sapl/sessao/migrations/0006_auto_20170601_1257.py b/sapl/sessao/migrations/0006_auto_20170601_1257.py new file mode 100644 index 000000000..6d43c17d0 --- /dev/null +++ b/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'), + ), + ] diff --git a/sapl/sessao/models.py b/sapl/sessao/models.py index 6d43127fd..c2ad8d19b 100644 --- a/sapl/sessao/models.py +++ b/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, diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index 6b2fc1c6d..cf83e74c3 100644 --- a/sapl/sessao/views.py +++ b/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 = ''' %s
%s' % - (url, - resultado_descricao, - resultado_observacao)) + (url, + resultado_descricao, + resultado_observacao)) else: obj.resultado = ('%s
%s' % - (resultado_descricao, - resultado_observacao)) + (resultado_descricao, + resultado_observacao)) return [self._as_row(obj) for obj in object_list] @@ -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 = ('%s
%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 = ('%s
%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,85 +1568,115 @@ 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'] - ordem = OrdemDia.objects.get(id=ordem_id) - total = PresencaOrdemDia.objects.filter( - sessao_plenaria_id=ordem.sessao_plenaria_id).count() + 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() + + 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( - ' ', ' ', strip_tags(ordem.observacao))} + ' ', ' ', strip_tags( + tipo_materia_votacao.observacao))} context = {'materia': materia, 'object': self.get_object(), - 'parlamentares': self.get_parlamentares(ordem.materia), - 'tipos': self.get_tipos_votacao(), - 'total': total} + 'parlamentares': self.get_parlamentares( + tipo_materia_votacao.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() - 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: - ordem = OrdemDia.objects.get(id=ordem_id) - except ObjectDoesNotExist: - raise Http404() + 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) - votacao = RegistroVotacao.objects.filter( - materia_id=materia_id, - ordem_id=ordem_id) + if self.ordem: + votacao = RegistroVotacao.objects.filter( + 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 - 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( 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'] - 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' def get(self, request, *args, **kwargs): context = {} - materia_id = kwargs['oid'] - ordem_id = kwargs['mid'] + if self.ordem: + ordem_id = kwargs['oid'] - try: - 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() + try: + ordem = OrdemDia.objects.get(id=ordem_id) + votacao = RegistroVotacao.objects.get( + ordem_id=ordem_id) + except ObjectDoesNotExist: + raise Http404() + + 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 - ordem = OrdemDia.objects.get(id=ordem_id) 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( - ' ', ' ', strip_tags(ordem.observacao))} + ' ', ' ', 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( - ' ', ' ', 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) + raise Http404() - # Remove todas as votação desta matéria, caso existam - for v in votacao: - v.delete() + elif self.expediente: + expediente_id = kwargs['oid'] 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() + expediente = ExpedienteMateria.objects.get(id=expediente_id) + except ObjectDoesNotExist: + raise Http404() - return self.form_valid(form) - else: - return self.form_invalid(form) + 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 + + materia_votacao.resultado = '' + materia_votacao.votacao_aberta = False + materia_votacao.save() - 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] + registro.delete() - 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] + return self.form_valid(form) 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'] - 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( - ' ', ' ', strip_tags(expediente.observacao))} - context.update({'materia': materia}) - votacao_existente = {'observacao': sub( - ' ', ' ', 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()}) + if self.ordem: + return reverse('sapl.sessao:ordemdia_list', + kwargs={'pk': pk}) + elif self.expediente: + return reverse('sapl.sessao:expedientemateria_list', + kwargs={'pk': pk}) - return self.render_to_response(context) - def post(self, request, *args, **kwargs): - self.object = self.get_object() - form = VotacaoEditForm(request.POST) +class VotacaoNominalView(VotacaoNominalAbstract): + ordem = True + expediente = False - materia_id = kwargs['oid'] - expediente_id = kwargs['mid'] - 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() +class VotacaoNominalExpedienteView(VotacaoNominalAbstract): + expediente = True + ordem = False - 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 +class VotacaoNominalEditView(VotacaoNominalEditAbstract): + ordem = True + expediente = False - 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): 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: