From 17321dd9ea177fc0b571c647b931d5757a14d590 Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Tue, 6 Oct 2015 17:13:02 -0300 Subject: [PATCH] Refactor votacao expediente, painel --- painel/urls.py | 6 +- painel/views.py | 87 +++++++++++-------- sessao/models.py | 11 +-- sessao/urls.py | 1 + sessao/views.py | 59 +++++-------- .../sessao/expediente_ordemdia_list.html | 2 +- templates/sessao/mesa.html | 2 +- 7 files changed, 82 insertions(+), 86 deletions(-) diff --git a/painel/urls.py b/painel/urls.py index 01762c78e..1dbcb66cc 100644 --- a/painel/urls.py +++ b/painel/urls.py @@ -8,9 +8,11 @@ from .views import (controlador_painel, cronometro_painel_crud, urlpatterns = [ url(r'^(?P\d+)/painel$', painel_view, name="painel_principal"), url(r'^painel/(?P\d+)/dados$', get_dados_painel, name='dados_painel'), - url(r'^painel/controlador$', controlador_painel, name='painel_controlador'), + url(r'^painel/controlador$', + controlador_painel, name='painel_controlador'), url(r'^painel/mensagem$', painel_mensagem_view, name="painel_mensagem"), - url(r'^painel/parlamentares$', painel_parlamentares_view, name='painel_parlamentares'), + url(r'^painel/parlamentares$', painel_parlamentares_view, + name='painel_parlamentares'), url(r'^painel/votacao$', painel_votacao_view, name='painel_votacao'), url(r'^painel/cronometro$', include(cronometro_painel_crud.urls)), ] diff --git a/painel/views.py b/painel/views.py index 6d29130d5..8074d788b 100644 --- a/painel/views.py +++ b/painel/views.py @@ -1,7 +1,6 @@ from datetime import date from django.core.exceptions import ObjectDoesNotExist -from django.core import serializers from django.http import HttpResponse, JsonResponse from django.shortcuts import render from django.utils.translation import ugettext_lazy as _ @@ -15,6 +14,9 @@ from sessao.models import (OrdemDia, PresencaOrdemDia, RegistroVotacao, from .models import Cronometro +# VotoParlamentar) + + cronometro_painel_crud = build_crud( Cronometro, '', [ @@ -23,8 +25,6 @@ cronometro_painel_crud = build_crud( ('tipo', 3)]], ]) -# REST WS - def controlador_painel(request): @@ -69,6 +69,7 @@ def painel_parlamentares_view(request): def painel_votacao_view(request): return render(request, 'painel/votacao.html') + def get_dados_painel(request, pk): # Sessão Plenária @@ -78,29 +79,34 @@ def get_dados_painel(request, pk): # # Pra recuperar o partido do parlamentar # # tem que fazer OUTRA query, deve ter uma # # forma de fazer isso na base do join de data models. - filiacao = Filiacao.objects.filter(data_desfiliacao__isnull=True, parlamentar__ativo=True) + filiacao = Filiacao.objects.filter( + data_desfiliacao__isnull=True, parlamentar__ativo=True) parlamentar_partido = {} for f in filiacao: - parlamentar_partido[f.parlamentar.nome_parlamentar] = f.partido.sigla + parlamentar_partido[f.parlamentar.nome_parlamentar] = f.partido.sigla # Presença Sessão Plenária - sessao_plenaria_presenca = SessaoPlenariaPresenca.objects.filter(id=sessao_plenaria_id) - presentes_sessao_plenaria = [p.parlamentar.nome_parlamentar for p in sessao_plenaria_presenca] + sessao_plenaria_presenca = SessaoPlenariaPresenca.objects.filter( + sessao_plenaria_id=sessao_plenaria_id) + print(sessao_plenaria_presenca) + presentes_sessao_plenaria = [ + p.parlamentar.nome_parlamentar for p in sessao_plenaria_presenca] num_presentes_sessao_plen = len(presentes_sessao_plenaria) # Presença Ordem do dia - presenca_ordem_dia = PresencaOrdemDia.objects.filter(sessao_plenaria_id=sessao_plenaria_id) + presenca_ordem_dia = PresencaOrdemDia.objects.filter( + sessao_plenaria_id=sessao_plenaria_id) presentes_ordem_dia = [] for p in presenca_ordem_dia: nome_parlamentar = p.parlamentar.nome_parlamentar presentes_ordem_dia.append( - {'nome': nome_parlamentar, + {'id': p.id, + 'nome': nome_parlamentar, 'partido': parlamentar_partido[nome_parlamentar], - #'voto': votos.get(nome_parlamentar, '-') }) num_presentes_ordem_dia = len(presentes_ordem_dia) - try: + try: ordemdia = OrdemDia.objects.get( sessao_plenaria_id=sessao_plenaria_id, votacao_aberta=True) @@ -108,53 +114,60 @@ def get_dados_painel(request, pk): materia_legislativa_texto = ordemdia.materia.ementa materia_observacao = ordemdia.materia.observacao tipo_votacao = ordemdia.tipo_votacao + # materia_titulo = ordemdia.materia + materia_titulo = "" try: votacao = RegistroVotacao.objects.get( ordem_id=ordemdia.id, materia_id=ordemdia.materia.id) + numero_votos_sim = votacao.numero_votos_sim + numero_votos_nao = votacao.numero_votos_nao + numero_abstencoes = votacao.numero_abstencoes + tipo_resultado = votacao.tipo_resultado_votacao.nome + votacao_id = votacao.id + except ObjectDoesNotExist: + votacao_id = -1 + numero_votos_sim = 0 + numero_votos_nao = 0 + numero_abstencoes = 0 + tipo_resultado = "" + + total_votos = numero_votos_sim + numero_votos_nao + numero_abstencoes + + votos = {} + try: + voto_parlamentar = VotoParlamentar.objects.filter( + votacao_id=votacao_id) + for vp in voto_parlamentar: + votos[vp.parlamentar.id] = vp.voto except ObjectDoesNotExist: - None + pass + except ObjectDoesNotExist: votacao_aberta = False + materia_titulo = "" materia_legislativa_texto = "" materia_observacao = "" tipo_votacao = "" - - # # TODO: se tentar usar objects.get(ordem_id = 104 - # # ocorre a msg: 'RegistroVotacao' object does not support indexing - # # TODO; tratar o caso de vir vazio - # votacao = RegistroVotacao.objects.first() - - # # Magic! - # # http://stackoverflow.com/questions/15507171/django-filter-query-foreign-key - # # recuperar pela votacao.id - # voto_parlamentar = VotoParlamentar.objects.filter(votacao_id=votacao.id) - # votos = {} - # for vp in voto_parlamentar: - # votos[vp.parlamentar.nome_parlamentar] = vp.voto - - # total_votos = votacao.numero_votos_sim + votacao.numero_votos_nao + votacao.numero_abstencoes - - # tipo_resultado = votacao.tipo_resultado_votacao.nome.upper() - votacao_json = {"sessao_plenaria": str(sessao_plenaria), "sessao_plenaria_data": sessao_plenaria.data_inicio, "sessao_plenaria_hora_inicio": sessao_plenaria.hora_inicio, + "materia_titulo": materia_titulo, "materia_legislativa_texto": materia_legislativa_texto, "materia_observacao": materia_observacao, "tipo_votacao": tipo_votacao, "presentes_ordem_dia": presentes_ordem_dia, - "num_presentes_ordem_dia": num_presentes_ordem_dia, + "num_presentes_ordem_dia": num_presentes_ordem_dia, "presentes_sessao_plenaria": presentes_sessao_plenaria, "num_presentes_sessao_plenaria": num_presentes_sessao_plen, "votacao_aberta": votacao_aberta, - # "numero_votos_sim": votacao.numero_votos_sim, - # "numero_votos_nao": votacao.numero_votos_nao, - # "numero_abstencoes": votacao.numero_abstencoes, - # "total_votos": total_votos, - # "tipo_resultado": tipo_resultado, + "numero_votos_sim": numero_votos_sim, + "numero_votos_nao": numero_votos_nao, + "numero_abstencoes": numero_abstencoes, + "total_votos": total_votos, + "tipo_resultado": tipo_resultado, + "votos": votos, } - return JsonResponse(votacao_json) diff --git a/sessao/models.py b/sessao/models.py index 0c7905cba..cb47a8d0b 100644 --- a/sessao/models.py +++ b/sessao/models.py @@ -107,9 +107,10 @@ class AbstractOrdemDia(models.Model): resultado = models.TextField(blank=True, null=True) tipo_votacao = models.PositiveIntegerField( verbose_name=_('Tipo de votação'), choices=TIPO_VOTACAO_CHOICES) - votacao_aberta = models.NullBooleanField(blank=True, - choices=YES_NO_CHOICES, - verbose_name=_('Votação iniciada?')) + votacao_aberta = models.NullBooleanField( + blank=True, + choices=YES_NO_CHOICES, + verbose_name=_('Votação iniciada?')) class Meta: abstract = True @@ -278,7 +279,3 @@ class SessaoPlenariaPresenca(models.Model): verbose_name = _('Presença em Sessão Plenária') verbose_name_plural = _('Presenças em Sessões Plenárias') ordering = ['parlamentar__nome_parlamentar'] - - def __str__(self): - return _('Sessão: %(sessao_plenaria)s Data: %(data)s') % { - 'sessao_plen': self.sessao_plen, 'data': self.data_sessao} diff --git a/sessao/urls.py b/sessao/urls.py index 7126c8577..7ddef0d95 100644 --- a/sessao/urls.py +++ b/sessao/urls.py @@ -1,4 +1,5 @@ from django.conf.urls import include, url + from sessao.views import (EditExpedienteOrdemDiaView, EditMateriaOrdemDiaView, ExpedienteOrdemDiaView, ExpedienteView, ExplicacaoDelete, ExplicacaoEdit, ExplicacaoView, diff --git a/sessao/views.py b/sessao/views.py index 9ecc97c5e..94380c118 100644 --- a/sessao/views.py +++ b/sessao/views.py @@ -8,6 +8,7 @@ from django.forms.util import ErrorList from django.utils.html import strip_tags from django.utils.translation import ugettext_lazy as _ from django.views.generic.edit import FormMixin + from materia.models import Autoria, TipoMateriaLegislativa from parlamentares.models import Parlamentar from sapl.crud import build_crud @@ -230,7 +231,6 @@ class ListMateriaOrdemDiaView(sessao_crud.CrudDetailView): numero = o.numero_ordem autoria = Autoria.objects.filter(materia_id=o.materia_id) - autor = [str(a.autor) for a in autoria] mat = {'pk': pk, @@ -254,6 +254,8 @@ class ListMateriaOrdemDiaView(sessao_crud.CrudDetailView): def post(self, request, *args, **kwargs): self.object = self.get_object() + context = self.get_context_data(object=self.object) + pk = self.kwargs['pk'] form = ListMateriaForm(request.POST) @@ -270,11 +272,8 @@ class ListMateriaOrdemDiaView(sessao_crud.CrudDetailView): o.save() ordem_num += 1 elif 'abrir-votacao' in request.POST: - existe_votacao_aberta = OrdemDia.objects.filter( - sessao_plenaria_id=pk, votacao_aberta=True - ).exists() - + sessao_plenaria_id=pk, votacao_aberta=True).exists() if existe_votacao_aberta: context = self.get_context_data(object=self.object) @@ -291,7 +290,6 @@ class ListMateriaOrdemDiaView(sessao_crud.CrudDetailView): numero = o.numero_ordem autoria = Autoria.objects.filter(materia_id=o.materia_id) - autor = [str(a.autor) for a in autoria] mat = {'pk': pk, @@ -335,14 +333,7 @@ class ListExpedienteOrdemDiaView(sessao_crud.CrudDetailView): numero = o.numero_ordem autoria = Autoria.objects.filter(materia_id=o.materia_id) - if len(autoria) > 1: - autor = 'Autores: ' - else: - autor = 'Autor: ' - - for a in autoria: - autor += str(a.autor) - autor += ' ' + autor = [str(a.autor) for a in autoria] mat = {'pk': pk, 'oid': o.materia_id, @@ -379,7 +370,7 @@ class ListExpedienteOrdemDiaView(sessao_crud.CrudDetailView): elif 'abrir-votacao' in request.POST: existe_votacao_aberta = ExpedienteMateria.objects.filter( sessao_plenaria_id=pk, votacao_aberta=True - ).exists() + ).exists() if existe_votacao_aberta: context = self.get_context_data(object=self.object) @@ -397,16 +388,8 @@ class ListExpedienteOrdemDiaView(sessao_crud.CrudDetailView): titulo = o.materia numero = o.numero_ordem - autoria = Autoria.objects.filter( - materia_id=o.materia_id) - if len(autoria) > 1: - autor = 'Autores: ' - else: - autor = 'Autor: ' - - for a in autoria: - autor += str(a.autor) - autor += ' ' + autoria = Autoria.objects.filter(materia_id=o.materia_id) + autor = [str(a.autor) for a in autoria] mat = {'pk': pk, 'oid': o.materia_id, @@ -982,12 +965,16 @@ class MesaView(FormMixin, sessao_crud.CrudDetailView): form.clean() return self.form_valid(form) elif 'Excluir' in request.POST: - ids = request.POST['composicao_mesa'].split(':') - IntegranteMesa.objects.get( - sessao_plenaria_id=self.object.id, - parlamentar_id=ids[0], - cargo_id=ids[1] - ).delete() + if 'composicao_mesa' in request.POST: + ids = request.POST['composicao_mesa'].split(':') + IntegranteMesa.objects.get( + sessao_plenaria_id=self.object.id, + parlamentar_id=ids[0], + cargo_id=ids[1] + ).delete() + else: + pass + # TODO display message asking to select a member of list return self.form_valid(form) @@ -1120,9 +1107,7 @@ class ResumoView(FormMixin, sessao_crud.CrudDetailView): else: resultado = 'Matéria não votada' - autoria = Autoria.objects.filter( - materia_id=m.materia_id) - + autoria = Autoria.objects.filter(materia_id=m.materia_id) autor = [str(x.autor) for x in autoria] mat = {'ementa': ementa, @@ -1186,7 +1171,6 @@ class ResumoView(FormMixin, sessao_crud.CrudDetailView): autoria = Autoria.objects.filter( materia_id=o.materia_id) - autor = [str(x.autor) for x in autoria] mat = {'ementa': ementa, @@ -1654,8 +1638,7 @@ class VotacaoNominalView(FormMixin, sessao_crud.CrudDetailView): def post(self, request, *args, **kwargs): self.object = self.get_object() - context = self.get_context_data(object=self.object) - + ordem_id = kwargs['mid'] ordem = OrdemDia.objects.get(id=ordem_id) @@ -1664,7 +1647,7 @@ class VotacaoNominalView(FormMixin, sessao_crud.CrudDetailView): if 'cancelar-votacao' in request.POST: ordem.votacao_aberta = False ordem.save() - return self.form_valid(form) + return self.form_valid(form) if form.is_valid(): materia_id = kwargs['oid'] diff --git a/templates/sessao/expediente_ordemdia_list.html b/templates/sessao/expediente_ordemdia_list.html index 870ab9342..0348ecffd 100644 --- a/templates/sessao/expediente_ordemdia_list.html +++ b/templates/sessao/expediente_ordemdia_list.html @@ -31,7 +31,7 @@ Matérias do Expediente {{m.numero}} - {{m.titulo}}  
- {{m.autor}} + Autor{{m.autor|length|pluralize:"es"}}: {{m.autor|join:', '}}
  • {{m.ementa|safe}}
  • diff --git a/templates/sessao/mesa.html b/templates/sessao/mesa.html index 3cc4a85b2..14334d945 100644 --- a/templates/sessao/mesa.html +++ b/templates/sessao/mesa.html @@ -19,7 +19,7 @@
  • - {% if view.get_cargos_mesa %}{% endif %} + {% if view.get_cargos_mesa %}{% endif %}