Browse Source

Add votação nominal

pull/7/head
Eduardo Edson Batista Cordeiro Alves 9 years ago
parent
commit
a3d9fbce5b
  1. 179
      sessao/views.py
  2. 24
      templates/sessao/votacao/nominal.html
  3. 65
      templates/sessao/votacao/nominal_edit.html

179
sessao/views.py

@ -7,7 +7,6 @@ from django.core.urlresolvers import reverse
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
@ -16,7 +15,8 @@ from .models import (CargoMesa, ExpedienteMateria, ExpedienteSessao,
IntegranteMesa, MateriaLegislativa, Orador, IntegranteMesa, MateriaLegislativa, Orador,
OradorExpediente, OrdemDia, PresencaOrdemDia, OradorExpediente, OrdemDia, PresencaOrdemDia,
RegistroVotacao, SessaoPlenaria, SessaoPlenariaPresenca, RegistroVotacao, SessaoPlenaria, SessaoPlenariaPresenca,
TipoExpediente, TipoResultadoVotacao, TipoSessaoPlenaria) TipoExpediente, TipoResultadoVotacao, TipoSessaoPlenaria,
VotoParlamentar)
tipo_sessao_crud = build_crud( tipo_sessao_crud = build_crud(
TipoSessaoPlenaria, 'tipo_sessao_plenaria', [ TipoSessaoPlenaria, 'tipo_sessao_plenaria', [
@ -1491,9 +1491,18 @@ class VotacaoSecretaEditView(FormMixin, sessao_crud.CrudDetailView):
kwargs={'pk': pk}) kwargs={'pk': pk})
class VotacaoNominalForm(forms.Form):
pass
class VotacaoNomimalView(FormMixin, sessao_crud.CrudDetailView): class VotacaoNomimalView(FormMixin, sessao_crud.CrudDetailView):
template_name = 'sessao/votacao/nominal.html' template_name = 'sessao/votacao/nominal.html'
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('sessaoplenaria:materiaordemdia_list',
kwargs={'pk': pk})
def get_parlamentares(self): def get_parlamentares(self):
self.object = self.get_object() self.object = self.get_object()
@ -1510,6 +1519,172 @@ class VotacaoNomimalView(FormMixin, sessao_crud.CrudDetailView):
if parlamentar in presentes: if parlamentar in presentes:
yield parlamentar yield parlamentar
def get_tipos_votacao(self):
for tipo in TipoResultadoVotacao.objects.all():
yield tipo
def get(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)
materia = {'materia': ordem.materia,
'ementa': sub(
' ', ' ', strip_tags(ordem.observacao))}
context.update({'materia': materia})
return self.render_to_response(context)
def post(self, request, *args, **kwargs):
self.object = self.get_object()
form = VotacaoNominalForm(request.POST)
if form.is_valid():
materia_id = kwargs['oid']
ordem_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 == 'nao'):
votos_nao += 1
elif(voto == 'abstencao'):
abstencoes += 1
elif(voto == 'nao_votou'):
nao_votou += 1
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.ordem_id = ordem_id
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,
ordem_id=ordem_id)
for votos in request.POST.getlist('voto_parlamentar'):
v = votos.split(':')
voto = v[0]
parlamentar_id = v[1]
voto_parlamentar = VotoParlamentar()
if(voto == 'sim'):
voto_parlamentar.voto = 'Sim'
elif(voto == 'nao'):
voto_parlamentar.voto = 'Não'
elif(voto == 'abstencao'):
voto_parlamentar.voto = 'Abestenção'
elif(voto == 'nao_votou'):
voto_parlamentar.voto = 'Não Votou'
voto_parlamentar.parlamentar_id = parlamentar_id
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.save()
return self.form_valid(form)
else:
return self.form_invalid(form)
class VotacaoNomimalEditView(FormMixin, sessao_crud.CrudDetailView): class VotacaoNomimalEditView(FormMixin, sessao_crud.CrudDetailView):
template_name = 'sessao/votacao/nominal_edit.html' template_name = 'sessao/votacao/nominal_edit.html'
def get(self, request, *args, **kwargs):
self.object = self.get_object()
context = self.get_context_data(object=self.object)
materia_id = kwargs['oid']
ordem_id = kwargs['mid']
votacao = RegistroVotacao.objects.get(
materia_id=materia_id,
ordem_id=ordem_id)
ordem = OrdemDia.objects.get(id=ordem_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': ordem.materia,
'ementa': sub(
' ', ' ', strip_tags(ordem.observacao))}
context.update({'materia': materia})
votacao_existente = {'observacao': sub(
' ', ' ', strip_tags(votacao.observacao)),
'tipo_resultado':
votacao.tipo_resultado_votacao_id}
context.update({'votacao': votacao_existente})
return self.render_to_response(context)
def post(self, request, *args, **kwargs):
self.object = self.get_object()
form = VotacaoEdit(request.POST)
materia_id = kwargs['oid']
ordem_id = kwargs['mid']
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 = None
ordem.save()
try:
votacao = VotoParlamentar.objects.filter(
votacao_id=registro.id)
for v in votacao:
v.delete()
except:
pass
registro.delete()
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('sessaoplenaria:materiaordemdia_list',
kwargs={'pk': pk})

24
templates/sessao/votacao/nominal.html

@ -7,10 +7,11 @@
<fieldset> <fieldset>
<legend>Votação Nominal</legend> <legend>Votação Nominal</legend>
<div>
Matéria: Matéria: {{materia.materia}}
<br /> <br />
Ementa: Ementa: {{materia.ementa|safe}}
</div>
<fieldset> <fieldset>
<legend>Votos</legend> <legend>Votos</legend>
@ -18,12 +19,12 @@
{% for parlamentar in view.get_parlamentares %} {% for parlamentar in view.get_parlamentares %}
<li>{{parlamentar.nome_parlamentar}}</li> <li>{{parlamentar.nome_parlamentar}}</li>
<li> <li>
<select id="anular_votacao" name="anular_votacao"> <select id="voto_parlamentar" name="voto_parlamentar">
<option value=""></option> <option value=""></option>
<option value="sim">Sim</option> <option value="sim:{{parlamentar.id}}">Sim</option>
<option value="nao">Não</option> <option value="nao:{{parlamentar.id}}">Não</option>
<option value="abstencao">Abstenção</option> <option value="abstencao:{{parlamentar.id}}">Abstenção</option>
<option value="nao_votou">Não Votou</option> <option value="nao_votou:{{parlamentar.id}}">Não Votou</option>
</select> </select>
</li> </li>
{% endfor %} {% endfor %}
@ -34,7 +35,10 @@
<li> <li>
Resultado da Votação Resultado da Votação
<select id="resultado_votacao" name="resultado_votacao"> <select id="resultado_votacao" name="resultado_votacao">
<option value=""></option> <option value="" selected></option>
{% for tipo in view.get_tipos_votacao %}
<option value="{{tipo.id}}">{{tipo.nome}}</option>
{% endfor %}
</select> </select>
</li> </li>
</ul> </ul>

65
templates/sessao/votacao/nominal_edit.html

@ -0,0 +1,65 @@
{% extends "sessao/sessaoplenaria_detail.html" %}
{% load i18n %}
{% block detail_content %}
<form method="post">
{% csrf_token %}
<fieldset>
<legend>Votação Nominal</legend>
<div>
Matéria: {{materia.materia|safe}}
<br />
Ementa: {{materia.ementa|safe}}
</div>
<br />
<fieldset>
<legend>Votos</legend>
<ul class="small-block-grid-2 medium-block-grid-2 large-block-grid-2">
{% for v in votos %}
<li>{{v.parlamentar}}</li>
<li>{{v.voto}}</li>
{% endfor %}
</ul>
</fieldset>
<ul class="small-block-grid-1 medium-block-grid-1 large-block-grid-1">
<li>
Anular Votação
<select id="anular_votacao" name="anular_votacao">
<option value="1">Sim</option>
<option value="0" selected>Não</option>
</select>
</li>
</ul>
<ul class="small-block-grid-1 medium-block-grid-1 large-block-grid-1">
<li>
Resultado da Votação:
{% for tipo in view.get_tipos_votacao %}
{% if votacao.tipo_resultado == tipo.id %}
<b>{{ tipo.nome }}</b>
{% endif %}
{% endfor %}
</li>
</ul>
<ul class="small-block-grid-1 medium-block-grid-1 large-block-grid-1">
<li>
Observações
<textarea id="observacao" name="observacao" cols="10" rows="10">{{votacao.observacao|safe}}</textarea>
</li>
</ul>
<br /><br />
<input type="submit" value="Salvar" />
</fieldset>
</form>
{% endblock detail_content %}
{% block foot_js %}
<script language="JavaScript">
document.getElementById("observacao").disabled = true;
</script>
{% endblock %}
Loading…
Cancel
Save