Browse Source

Refactor votacao expediente, painel

pull/7/head
Edward Ribeiro 9 years ago
parent
commit
17321dd9ea
  1. 6
      painel/urls.py
  2. 87
      painel/views.py
  3. 11
      sessao/models.py
  4. 1
      sessao/urls.py
  5. 59
      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 = [
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/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)),
]

87
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)

11
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}

1
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,

59
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']

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>
&nbsp;
</br>
{{m.autor}}
<strong>Autor{{m.autor|length|pluralize:"es"}}</strong>: {{m.autor|join:', '}}
</li>
<li>{{m.ementa|safe}}</li>
<li>

2
templates/sessao/mesa.html

@ -19,7 +19,7 @@
</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 />
<input type="submit" name="Excluir" Value="Excluir" class="button primary" />

Loading…
Cancel
Save