Browse Source

Refactor votacao expediente, painel

pull/7/head
Edward Ribeiro 9 years ago
parent
commit
17321dd9ea
  1. 6
      painel/urls.py
  2. 81
      painel/views.py
  3. 7
      sessao/models.py
  4. 1
      sessao/urls.py
  5. 41
      sessao/views.py
  6. 2
      templates/sessao/expediente_ordemdia_list.html
  7. 2
      templates/sessao/mesa.html

6
painel/urls.py

@ -8,9 +8,11 @@ from .views import (controlador_painel, cronometro_painel_crud,
urlpatterns = [ urlpatterns = [
url(r'^(?P<pk>\d+)/painel$', painel_view, name="painel_principal"), url(r'^(?P<pk>\d+)/painel$', painel_view, name="painel_principal"),
url(r'^painel/(?P<pk>\d+)/dados$', get_dados_painel, name='dados_painel'), url(r'^painel/(?P<pk>\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/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/votacao$', painel_votacao_view, name='painel_votacao'),
url(r'^painel/cronometro$', include(cronometro_painel_crud.urls)), url(r'^painel/cronometro$', include(cronometro_painel_crud.urls)),
] ]

81
painel/views.py

@ -1,7 +1,6 @@
from datetime import date from datetime import date
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
from django.core import serializers
from django.http import HttpResponse, JsonResponse from django.http import HttpResponse, JsonResponse
from django.shortcuts import render from django.shortcuts import render
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
@ -15,6 +14,9 @@ from sessao.models import (OrdemDia, PresencaOrdemDia, RegistroVotacao,
from .models import Cronometro from .models import Cronometro
# VotoParlamentar)
cronometro_painel_crud = build_crud( cronometro_painel_crud = build_crud(
Cronometro, '', [ Cronometro, '', [
@ -23,8 +25,6 @@ cronometro_painel_crud = build_crud(
('tipo', 3)]], ('tipo', 3)]],
]) ])
# REST WS
def controlador_painel(request): def controlador_painel(request):
@ -69,6 +69,7 @@ def painel_parlamentares_view(request):
def painel_votacao_view(request): def painel_votacao_view(request):
return render(request, 'painel/votacao.html') return render(request, 'painel/votacao.html')
def get_dados_painel(request, pk): def get_dados_painel(request, pk):
# Sessão Plenária # Sessão Plenária
@ -78,25 +79,30 @@ def get_dados_painel(request, pk):
# # Pra recuperar o partido do parlamentar # # Pra recuperar o partido do parlamentar
# # tem que fazer OUTRA query, deve ter uma # # tem que fazer OUTRA query, deve ter uma
# # forma de fazer isso na base do join de data models. # # 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 = {} parlamentar_partido = {}
for f in filiacao: 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 # Presença Sessão Plenária
sessao_plenaria_presenca = SessaoPlenariaPresenca.objects.filter(id=sessao_plenaria_id) sessao_plenaria_presenca = SessaoPlenariaPresenca.objects.filter(
presentes_sessao_plenaria = [p.parlamentar.nome_parlamentar for p in sessao_plenaria_presenca] 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) num_presentes_sessao_plen = len(presentes_sessao_plenaria)
# Presença Ordem do dia # 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 = [] presentes_ordem_dia = []
for p in presenca_ordem_dia: for p in presenca_ordem_dia:
nome_parlamentar = p.parlamentar.nome_parlamentar nome_parlamentar = p.parlamentar.nome_parlamentar
presentes_ordem_dia.append( presentes_ordem_dia.append(
{'nome': nome_parlamentar, {'id': p.id,
'nome': nome_parlamentar,
'partido': parlamentar_partido[nome_parlamentar], 'partido': parlamentar_partido[nome_parlamentar],
#'voto': votos.get(nome_parlamentar, '-')
}) })
num_presentes_ordem_dia = len(presentes_ordem_dia) num_presentes_ordem_dia = len(presentes_ordem_dia)
@ -108,39 +114,46 @@ def get_dados_painel(request, pk):
materia_legislativa_texto = ordemdia.materia.ementa materia_legislativa_texto = ordemdia.materia.ementa
materia_observacao = ordemdia.materia.observacao materia_observacao = ordemdia.materia.observacao
tipo_votacao = ordemdia.tipo_votacao tipo_votacao = ordemdia.tipo_votacao
# materia_titulo = ordemdia.materia
materia_titulo = ""
try: try:
votacao = RegistroVotacao.objects.get( votacao = RegistroVotacao.objects.get(
ordem_id=ordemdia.id, materia_id=ordemdia.materia.id) 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: except ObjectDoesNotExist:
None 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:
pass
except ObjectDoesNotExist: except ObjectDoesNotExist:
votacao_aberta = False votacao_aberta = False
materia_titulo = ""
materia_legislativa_texto = "" materia_legislativa_texto = ""
materia_observacao = "" materia_observacao = ""
tipo_votacao = "" 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), votacao_json = {"sessao_plenaria": str(sessao_plenaria),
"sessao_plenaria_data": sessao_plenaria.data_inicio, "sessao_plenaria_data": sessao_plenaria.data_inicio,
"sessao_plenaria_hora_inicio": sessao_plenaria.hora_inicio, "sessao_plenaria_hora_inicio": sessao_plenaria.hora_inicio,
"materia_titulo": materia_titulo,
"materia_legislativa_texto": materia_legislativa_texto, "materia_legislativa_texto": materia_legislativa_texto,
"materia_observacao": materia_observacao, "materia_observacao": materia_observacao,
"tipo_votacao": tipo_votacao, "tipo_votacao": tipo_votacao,
@ -149,12 +162,12 @@ def get_dados_painel(request, pk):
"presentes_sessao_plenaria": presentes_sessao_plenaria, "presentes_sessao_plenaria": presentes_sessao_plenaria,
"num_presentes_sessao_plenaria": num_presentes_sessao_plen, "num_presentes_sessao_plenaria": num_presentes_sessao_plen,
"votacao_aberta": votacao_aberta, "votacao_aberta": votacao_aberta,
# "numero_votos_sim": votacao.numero_votos_sim, "numero_votos_sim": numero_votos_sim,
# "numero_votos_nao": votacao.numero_votos_nao, "numero_votos_nao": numero_votos_nao,
# "numero_abstencoes": votacao.numero_abstencoes, "numero_abstencoes": numero_abstencoes,
# "total_votos": total_votos, "total_votos": total_votos,
# "tipo_resultado": tipo_resultado, "tipo_resultado": tipo_resultado,
"votos": votos,
} }
return JsonResponse(votacao_json) return JsonResponse(votacao_json)

7
sessao/models.py

@ -107,7 +107,8 @@ class AbstractOrdemDia(models.Model):
resultado = models.TextField(blank=True, null=True) resultado = models.TextField(blank=True, null=True)
tipo_votacao = models.PositiveIntegerField( tipo_votacao = models.PositiveIntegerField(
verbose_name=_('Tipo de votação'), choices=TIPO_VOTACAO_CHOICES) verbose_name=_('Tipo de votação'), choices=TIPO_VOTACAO_CHOICES)
votacao_aberta = models.NullBooleanField(blank=True, votacao_aberta = models.NullBooleanField(
blank=True,
choices=YES_NO_CHOICES, choices=YES_NO_CHOICES,
verbose_name=_('Votação iniciada?')) verbose_name=_('Votação iniciada?'))
@ -278,7 +279,3 @@ class SessaoPlenariaPresenca(models.Model):
verbose_name = _('Presença em Sessão Plenária') verbose_name = _('Presença em Sessão Plenária')
verbose_name_plural = _('Presenças em Sessões Plenárias') verbose_name_plural = _('Presenças em Sessões Plenárias')
ordering = ['parlamentar__nome_parlamentar'] 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}

1
sessao/urls.py

@ -1,4 +1,5 @@
from django.conf.urls import include, url from django.conf.urls import include, url
from sessao.views import (EditExpedienteOrdemDiaView, EditMateriaOrdemDiaView, from sessao.views import (EditExpedienteOrdemDiaView, EditMateriaOrdemDiaView,
ExpedienteOrdemDiaView, ExpedienteView, ExpedienteOrdemDiaView, ExpedienteView,
ExplicacaoDelete, ExplicacaoEdit, ExplicacaoView, ExplicacaoDelete, ExplicacaoEdit, ExplicacaoView,

41
sessao/views.py

@ -8,6 +8,7 @@ from django.forms.util import ErrorList
from django.utils.html import strip_tags from django.utils.html import strip_tags
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.views.generic.edit import FormMixin from django.views.generic.edit import FormMixin
from materia.models import Autoria, TipoMateriaLegislativa from materia.models import Autoria, TipoMateriaLegislativa
from parlamentares.models import Parlamentar from parlamentares.models import Parlamentar
from sapl.crud import build_crud from sapl.crud import build_crud
@ -230,7 +231,6 @@ class ListMateriaOrdemDiaView(sessao_crud.CrudDetailView):
numero = o.numero_ordem numero = o.numero_ordem
autoria = Autoria.objects.filter(materia_id=o.materia_id) autoria = Autoria.objects.filter(materia_id=o.materia_id)
autor = [str(a.autor) for a in autoria] autor = [str(a.autor) for a in autoria]
mat = {'pk': pk, mat = {'pk': pk,
@ -254,6 +254,8 @@ class ListMateriaOrdemDiaView(sessao_crud.CrudDetailView):
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
self.object = self.get_object() self.object = self.get_object()
context = self.get_context_data(object=self.object)
pk = self.kwargs['pk'] pk = self.kwargs['pk']
form = ListMateriaForm(request.POST) form = ListMateriaForm(request.POST)
@ -270,11 +272,8 @@ class ListMateriaOrdemDiaView(sessao_crud.CrudDetailView):
o.save() o.save()
ordem_num += 1 ordem_num += 1
elif 'abrir-votacao' in request.POST: elif 'abrir-votacao' in request.POST:
existe_votacao_aberta = OrdemDia.objects.filter( existe_votacao_aberta = OrdemDia.objects.filter(
sessao_plenaria_id=pk, votacao_aberta=True sessao_plenaria_id=pk, votacao_aberta=True).exists()
).exists()
if existe_votacao_aberta: if existe_votacao_aberta:
context = self.get_context_data(object=self.object) context = self.get_context_data(object=self.object)
@ -291,7 +290,6 @@ class ListMateriaOrdemDiaView(sessao_crud.CrudDetailView):
numero = o.numero_ordem numero = o.numero_ordem
autoria = Autoria.objects.filter(materia_id=o.materia_id) autoria = Autoria.objects.filter(materia_id=o.materia_id)
autor = [str(a.autor) for a in autoria] autor = [str(a.autor) for a in autoria]
mat = {'pk': pk, mat = {'pk': pk,
@ -335,14 +333,7 @@ class ListExpedienteOrdemDiaView(sessao_crud.CrudDetailView):
numero = o.numero_ordem numero = o.numero_ordem
autoria = Autoria.objects.filter(materia_id=o.materia_id) autoria = Autoria.objects.filter(materia_id=o.materia_id)
if len(autoria) > 1: autor = [str(a.autor) for a in autoria]
autor = 'Autores: '
else:
autor = 'Autor: '
for a in autoria:
autor += str(a.autor)
autor += ' '
mat = {'pk': pk, mat = {'pk': pk,
'oid': o.materia_id, 'oid': o.materia_id,
@ -397,16 +388,8 @@ class ListExpedienteOrdemDiaView(sessao_crud.CrudDetailView):
titulo = o.materia titulo = o.materia
numero = o.numero_ordem numero = o.numero_ordem
autoria = Autoria.objects.filter( autoria = Autoria.objects.filter(materia_id=o.materia_id)
materia_id=o.materia_id) autor = [str(a.autor) for a in autoria]
if len(autoria) > 1:
autor = 'Autores: '
else:
autor = 'Autor: '
for a in autoria:
autor += str(a.autor)
autor += ' '
mat = {'pk': pk, mat = {'pk': pk,
'oid': o.materia_id, 'oid': o.materia_id,
@ -982,12 +965,16 @@ class MesaView(FormMixin, sessao_crud.CrudDetailView):
form.clean() form.clean()
return self.form_valid(form) return self.form_valid(form)
elif 'Excluir' in request.POST: elif 'Excluir' in request.POST:
if 'composicao_mesa' in request.POST:
ids = request.POST['composicao_mesa'].split(':') ids = request.POST['composicao_mesa'].split(':')
IntegranteMesa.objects.get( IntegranteMesa.objects.get(
sessao_plenaria_id=self.object.id, sessao_plenaria_id=self.object.id,
parlamentar_id=ids[0], parlamentar_id=ids[0],
cargo_id=ids[1] cargo_id=ids[1]
).delete() ).delete()
else:
pass
# TODO display message asking to select a member of list
return self.form_valid(form) return self.form_valid(form)
@ -1120,9 +1107,7 @@ class ResumoView(FormMixin, sessao_crud.CrudDetailView):
else: else:
resultado = 'Matéria não votada' resultado = 'Matéria não votada'
autoria = Autoria.objects.filter( autoria = Autoria.objects.filter(materia_id=m.materia_id)
materia_id=m.materia_id)
autor = [str(x.autor) for x in autoria] autor = [str(x.autor) for x in autoria]
mat = {'ementa': ementa, mat = {'ementa': ementa,
@ -1186,7 +1171,6 @@ class ResumoView(FormMixin, sessao_crud.CrudDetailView):
autoria = Autoria.objects.filter( autoria = Autoria.objects.filter(
materia_id=o.materia_id) materia_id=o.materia_id)
autor = [str(x.autor) for x in autoria] autor = [str(x.autor) for x in autoria]
mat = {'ementa': ementa, mat = {'ementa': ementa,
@ -1654,7 +1638,6 @@ class VotacaoNominalView(FormMixin, sessao_crud.CrudDetailView):
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
self.object = self.get_object() self.object = self.get_object()
context = self.get_context_data(object=self.object)
ordem_id = kwargs['mid'] ordem_id = kwargs['mid']
ordem = OrdemDia.objects.get(id=ordem_id) ordem = OrdemDia.objects.get(id=ordem_id)

2
templates/sessao/expediente_ordemdia_list.html

@ -31,7 +31,7 @@ Matérias do Expediente
{{m.numero}} - <a href="{% url 'sessaoplenaria:expedienteordemdia_edit' m.pk m.oid %}">{{m.titulo}}</a> {{m.numero}} - <a href="{% url 'sessaoplenaria:expedienteordemdia_edit' m.pk m.oid %}">{{m.titulo}}</a>
&nbsp; &nbsp;
</br> </br>
{{m.autor}} <strong>Autor{{m.autor|length|pluralize:"es"}}</strong>: {{m.autor|join:', '}}
</li> </li>
<li>{{m.ementa|safe}}</li> <li>{{m.ementa|safe}}</li>
<li> <li>

2
templates/sessao/mesa.html

@ -19,7 +19,7 @@
</li> </li>
<li> <li>
{% if view.get_cargos_mesa %}<input type="submit" name="Incluir" Value="Incluir" />{% endif %} {% if view.get_cargos_mesa %}<input type="submit" name="Incluir" Value="Incluir" class="button primary" />{% endif %}
<br /> <br />
<br /> <br />
<input type="submit" name="Excluir" Value="Excluir" class="button primary" /> <input type="submit" name="Excluir" Value="Excluir" class="button primary" />

Loading…
Cancel
Save