Browse Source

Votação simbolica completa (espero)

pull/7/head
Eduardo Edson Batista Cordeiro Alves 9 years ago
parent
commit
3d9ec77e17
  1. 16
      sessao/urls.py
  2. 177
      sessao/views.py
  3. 8
      templates/sessao/materia_ordemdia_list.html
  4. 124
      templates/sessao/votacao/simbolica.html
  5. 55
      templates/sessao/votacao/simbolica_edit.html

16
sessao/urls.py

@ -9,9 +9,9 @@ from sessao.views import (EditExpedienteOrdemDiaView, EditMateriaOrdemDiaView,
OradorExpedienteView, PainelView, OradorExpedienteView, PainelView,
PresencaOrdemDiaView, PresencaView, ResumoView, PresencaOrdemDiaView, PresencaView, ResumoView,
VotacaoNomimalView, VotacaoSecretaView, VotacaoNomimalView, VotacaoSecretaView,
VotacaoSimbolicaView, sessao_crud, VotacaoSimbolicaEditView, VotacaoSimbolicaView,
tipo_expediente_crud, tipo_resultado_votacao_crud, sessao_crud, tipo_expediente_crud,
tipo_sessao_crud) tipo_resultado_votacao_crud, tipo_sessao_crud)
urlpatterns_sessao = sessao_crud.urlpatterns + [ urlpatterns_sessao = sessao_crud.urlpatterns + [
url(r'^(?P<pk>\d+)/expediente$', url(r'^(?P<pk>\d+)/expediente$',
@ -50,12 +50,14 @@ urlpatterns_sessao = sessao_crud.urlpatterns + [
ExplicacaoDelete.as_view(), name='explicacaoexcluir'), ExplicacaoDelete.as_view(), name='explicacaoexcluir'),
url(r'^(?P<pk>\d+)/explicacao/editar/(?P<oid>\d+)$', url(r'^(?P<pk>\d+)/explicacao/editar/(?P<oid>\d+)$',
ExplicacaoEdit.as_view(), name='explicacaoeditar'), ExplicacaoEdit.as_view(), name='explicacaoeditar'),
url(r'^(?P<pk>\d+)/materiaordemdia/votacaosimbolica/(?P<oid>\d+)/(?P<mid>\d+)$', url(r'^(?P<pk>\d+)/matordemdia/votacaonominal/(?P<oid>\d+)$',
VotacaoSimbolicaView.as_view(), name='votacaosimbolica'),
url(r'^(?P<pk>\d+)/materiaordemdia/votacaonominal/(?P<oid>\d+)$',
VotacaoNomimalView.as_view(), name='votacaonominal'), VotacaoNomimalView.as_view(), name='votacaonominal'),
url(r'^(?P<pk>\d+)/materiaordemdia/votacaosecreta/(?P<oid>\d+)$', url(r'^(?P<pk>\d+)/matordemdia/votacaosecreta/(?P<oid>\d+)$',
VotacaoSecretaView.as_view(), name='votacaosecreta'), VotacaoSecretaView.as_view(), name='votacaosecreta'),
url(r'^(?P<pk>\d+)/matordemdia/votsimb/(?P<oid>\d+)/(?P<mid>\d+)$',
VotacaoSimbolicaView.as_view(), name='votacaosimbolica'),
url(r'^(?P<pk>\d+)/matordemdia/votsimb/view/(?P<oid>\d+)/(?P<mid>\d+)$',
VotacaoSimbolicaEditView.as_view(), name='votacaosimbolicaedit'),
] ]
sessao_urls = urlpatterns_sessao, sessao_crud.namespace, sessao_crud.namespace sessao_urls = urlpatterns_sessao, sessao_crud.namespace, sessao_crud.namespace

177
sessao/views.py

@ -195,18 +195,16 @@ class PresencaOrdemDiaView(FormMixin, sessao_crud.CrudDetailView):
sessao_plenaria_id=self.object.id sessao_plenaria_id=self.object.id
) )
presentes = [] presencas = SessaoPlenariaPresenca.objects.filter(
for p in presencas: sessao_plen_id=self.object.id
presentes.append(p.parlamentar.id) )
presentes = [p.parlamentar for p in presencas]
for parlamentar in Parlamentar.objects.all(): for parlamentar in Parlamentar.objects.filter(ativo=True):
if parlamentar.ativo: if parlamentar in presentes:
try: yield (parlamentar, True)
presentes.index(parlamentar.id) else:
except ValueError: yield (parlamentar, False)
yield (parlamentar, False)
else:
yield (parlamentar, True)
class ListMateriaOrdemDiaView(sessao_crud.CrudDetailView): class ListMateriaOrdemDiaView(sessao_crud.CrudDetailView):
@ -1229,6 +1227,66 @@ class VotacaoForm(forms.Form):
abstencoes = forms.CharField(required=True) abstencoes = forms.CharField(required=True)
class VotacaoEdit(forms.Form):
pass
class VotacaoSimbolicaEditView(FormMixin, sessao_crud.CrudDetailView):
template_name = 'sessao/votacao/simbolica_edit.html'
def get_tipos_votacao(self):
for tipo in TipoResultadoVotacao.objects.all():
yield tipo
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):
RegistroVotacao.objects.get(
materia_id=materia_id,
ordem_id=ordem_id).delete()
ordem = OrdemDia.objects.get(
sessao_plenaria_id=self.object.id,
materia_id=materia_id)
ordem.resultado = None
ordem.save()
return self.form_valid(form)
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']
ordem = OrdemDia.objects.get(id=ordem_id)
materia = {'materia': ordem.materia, 'ementa': ordem.observacao}
context.update({'materia': materia})
votacao = RegistroVotacao.objects.get(
materia_id=materia_id,
ordem_id=ordem_id)
votacao_existente = {'observacao': sub(
'&nbsp;', ' ', strip_tags(votacao.observacao)),
'tipo_resultado':
votacao.tipo_resultado_votacao_id}
context.update({'votacao': votacao_existente})
return self.render_to_response(context)
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('sessaoplenaria:materiaordemdia_list',
kwargs={'pk': pk})
class VotacaoSimbolicaView(FormMixin, sessao_crud.CrudDetailView): class VotacaoSimbolicaView(FormMixin, sessao_crud.CrudDetailView):
template_name = 'sessao/votacao/simbolica.html' template_name = 'sessao/votacao/simbolica.html'
@ -1240,32 +1298,12 @@ class VotacaoSimbolicaView(FormMixin, sessao_crud.CrudDetailView):
self.object = self.get_object() self.object = self.get_object()
context = self.get_context_data(object=self.object) context = self.get_context_data(object=self.object)
current_url = self.request.get_full_path() ordem_id = kwargs['mid']
words = current_url.split('/')
materia_id = words[-2]
ordem_id = words[-1]
ordem = OrdemDia.objects.get(id=ordem_id) ordem = OrdemDia.objects.get(id=ordem_id)
materia = {'materia': ordem.materia, 'ementa': ordem.observacao} materia = {'materia': ordem.materia, 'ementa': ordem.observacao}
context.update({'materia': materia}) context.update({'materia': materia})
try:
votacao = RegistroVotacao.objects.get(
materia_id=materia_id,
ordem_id=ordem_id)
except:
pass
else:
votacao_existente = {'materia': ordem.materia,
'ementa': ordem.observacao,
'votos_sim': votacao.numero_votos_sim,
'votos_nao': votacao.numero_votos_nao,
'abstencoes': votacao.numero_abstencoes,
'observacao': votacao.observacao,
'tipo_resultado':
votacao.tipo_resultado_votacao_id}
context.update({'votacao_existente': votacao_existente})
return self.render_to_response(context) return self.render_to_response(context)
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
@ -1278,29 +1316,44 @@ class VotacaoSimbolicaView(FormMixin, sessao_crud.CrudDetailView):
materia_id = words[-2] materia_id = words[-2]
ordem_id = words[-1] ordem_id = words[-1]
try: qtde_presentes = len(SessaoPlenariaPresenca.objects.filter(
votacao = RegistroVotacao() sessao_plen_id=self.object.id))
votacao.numero_votos_sim = int(request.POST['votos_sim']) qtde_votos = (int(request.POST['votos_sim']) +
votacao.numero_votos_nao = int(request.POST['votos_nao']) int(request.POST['votos_nao']) +
votacao.numero_abstencoes = int(request.POST['abstencoes']) int(request.POST['abstencoes']))
votacao.observacao = request.POST['observacao']
votacao.materia_id = materia_id if(int(request.POST['voto_presidente']) == 0):
votacao.ordem_id = ordem_id qtde_presentes -= 1
votacao.tipo_resultado_votacao_id = int(
request.POST['resultado_votacao']) if(qtde_votos > qtde_presentes or qtde_votos < qtde_presentes):
votacao.save() # context.update ({'error_message':
except: # 'A quantidade de votos e de
# presentes não correspondem.'})
return self.form_invalid(form) return self.form_invalid(form)
else: elif (qtde_presentes == qtde_votos):
ordem = OrdemDia.objects.get( try:
sessao_plenaria_id=self.object.id, votacao = RegistroVotacao()
materia_id=materia_id) votacao.numero_votos_sim = int(request.POST['votos_sim'])
resultado = TipoResultadoVotacao.objects.get( votacao.numero_votos_nao = int(request.POST['votos_nao'])
id=request.POST['resultado_votacao']) votacao.numero_abstencoes = int(request.POST['abstencoes'])
ordem.resultado = resultado.nome votacao.observacao = request.POST['observacao']
ordem.save() 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:
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) return self.form_valid(form)
else: else:
return self.form_invalid(form) return self.form_invalid(form)
@ -1320,18 +1373,14 @@ class VotacaoNomimalView(FormMixin, sessao_crud.CrudDetailView):
sessao_plen_id=self.object.id sessao_plen_id=self.object.id
) )
presentes = [] presencas = SessaoPlenariaPresenca.objects.filter(
for p in presencas: sessao_plen_id=self.object.id
presentes.append(p.parlamentar.id) )
presentes = [p.parlamentar for p in presencas]
for parlamentar in Parlamentar.objects.all(): for parlamentar in Parlamentar.objects.filter(ativo=True):
if parlamentar.ativo: if parlamentar in presentes:
try: yield parlamentar
presentes.index(parlamentar.id)
except ValueError:
pass
else:
yield parlamentar
class VotacaoSecretaView(FormMixin, sessao_crud.CrudDetailView): class VotacaoSecretaView(FormMixin, sessao_crud.CrudDetailView):

8
templates/sessao/materia_ordemdia_list.html

@ -21,7 +21,13 @@ Matérias da Ordem do Dia
<li>{{m.ementa|safe}}</li> <li>{{m.ementa|safe}}</li>
<li> <li>
{% if m.resultado %} {% if m.resultado %}
{{m.resultado}} {% if m.tipo_votacao == 1 %}
<b><a href="{% url 'sessaoplenaria:votacaosimbolicaedit' m.pk m.oid m.ordem_id %}">{{m.resultado}}</a></b>
{% elif m.tipo_votacao == 2 %}
<b><a href="{% url 'sessaoplenaria:votacaonominaledit' m.pk m.oid %}">{{m.resultado}}</a></b>
{% elif m.tipo_votacao == 3%}
<b><a href="{% url 'sessaoplenaria:votacaosecretaedit' m.pk m.oid %}">{{m.resultado}}</a></b>
{% endif %}
{% else %} {% else %}
Matéria não votada <br /> Matéria não votada <br />
{% if m.tipo_votacao == 1 %} {% if m.tipo_votacao == 1 %}

124
templates/sessao/votacao/simbolica.html

@ -7,94 +7,46 @@
<fieldset> <fieldset>
<legend>Votação Simbólica</legend> <legend>Votação Simbólica</legend>
<div>
Matéria: {{materia.materia}} Matéria: {{materia.materia|safe}}
<br />
Ementa: {{materia.ementa|safe}}
</div>
<br /> <br />
Ementa: {{materia.ementa}}
{% if votacao_existente %}
<ul class="small-block-grid-3 medium-block-grid-3 large-block-grid-3">
<li>Sim: <input type="text" id="votos_sim" name="votos_sim" value="{{votacao_existente.votos_sim}}"/></li>
<li>Não: <input type="text" id="votos_nao" name="votos_nao" value="{{votacao_existente.votos_nao}}"/></li>
<li>Abstenções: <input type="text" id="abstencoes" name="abstencoes" value="{{votacao_existente.abstencoes}}"/></li>
</ul>
<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
<select id="resultado_votacao" name="resultado_votacao">
{% for tipo in view.get_tipos_votacao %}
<option value="{{tipo.id}}" {% if tipo == votacao_existente.tipo_resultado %} selected {% endif %}>{{tipo.nome}}</option>
{% endfor %}
</select>
</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_existente.observacao}}</textarea>
</li>
</ul>
{% else %}
<ul class="small-block-grid-3 medium-block-grid-3 large-block-grid-3">
<li>Sim: <input type="text" id="votos_sim" name="votos_sim" value=""/></li>
<li>Não: <input type="text" id="votos_nao" name="votos_nao" value=""/></li>
<li>Abstenções: <input type="text" id="abstencoes" name="abstencoes" value=""/></li>
</ul>
<ul class="small-block-grid-2 medium-block-grid-2 large-block-grid-2">
<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>
<li>
A totalização inclui o voto do Presidente?
<select id="voto_presidente" name="voto_presidente">
<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
<select id="resultado_votacao" name="resultado_votacao">
<option value="" selected></option>
{% for tipo in view.get_tipos_votacao %}
<option value="{{tipo.id}}">{{tipo.nome}}</option>
{% endfor %}
</select>
</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"></textarea>
</li>
</ul>
{% endif %}
<ul class="small-block-grid-3 medium-block-grid-3 large-block-grid-3">
<li>Sim: <input type="text" id="votos_sim" name="votos_sim" value=""/></li>
<li>Não: <input type="text" id="votos_nao" name="votos_nao" value=""/></li>
<li>Abstenções: <input type="text" id="abstencoes" name="abstencoes" value=""/></li>
</ul>
<ul class="small-block-grid-2 medium-block-grid-2 large-block-grid-2">
<li>
A totalização inclui o voto do Presidente?
<select id="voto_presidente" name="voto_presidente">
<option value="1">Sim</option>
<option value="0" selected>Não</option>
</select>
</li>
<li>
Resultado da Votação
<select id="resultado_votacao" name="resultado_votacao">
<option value="" selected></option>
{% for tipo in view.get_tipos_votacao %}
<option value="{{tipo.id}}">{{tipo.nome}}</option>
{% endfor %}
</select>
</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"></textarea>
</li>
</ul>
<br /><br /> <br /><br />
<input type="submit" value="Salvar" /> <input type="submit" value="Salvar" />
</fieldset> </fieldset>

55
templates/sessao/votacao/simbolica_edit.html

@ -0,0 +1,55 @@
{% extends "sessao/sessaoplenaria_detail.html" %}
{% load i18n %}
{% block detail_content %}
<form method="post">
{% csrf_token %}
<fieldset>
<legend>Votação Simbólica</legend>
<div>
Matéria: {{materia.materia|safe}}
<br />
Ementa: {{materia.ementa|safe}}
</div>
<br />
<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