From b507d32ead410976f30ee4a05ffe9e4b08d81192 Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Mon, 28 Sep 2015 10:31:55 -0300 Subject: [PATCH] =?UTF-8?q?Add=20Vota=C3=A7=C3=A3o=20Secreta?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sessao/urls.py | 12 +- sessao/views.py | 140 +++++++++++++++++++- templates/sessao/materia_ordemdia_list.html | 8 +- templates/sessao/votacao/nominal.html | 10 -- templates/sessao/votacao/nominal_edit.html | 0 templates/sessao/votacao/secreta.html | 25 ++-- templates/sessao/votacao/secreta_edit.html | 55 ++++++++ 7 files changed, 211 insertions(+), 39 deletions(-) create mode 100644 templates/sessao/votacao/nominal_edit.html create mode 100644 templates/sessao/votacao/secreta_edit.html diff --git a/sessao/urls.py b/sessao/urls.py index 78dd68a9c..7e15d04b8 100644 --- a/sessao/urls.py +++ b/sessao/urls.py @@ -1,5 +1,4 @@ from django.conf.urls import include, url - from sessao.views import (EditExpedienteOrdemDiaView, EditMateriaOrdemDiaView, ExpedienteOrdemDiaView, ExpedienteView, ExplicacaoDelete, ExplicacaoEdit, ExplicacaoView, @@ -8,7 +7,8 @@ from sessao.views import (EditExpedienteOrdemDiaView, EditMateriaOrdemDiaView, OradorExpedienteDelete, OradorExpedienteEdit, OradorExpedienteView, PainelView, PresencaOrdemDiaView, PresencaView, ResumoView, - VotacaoNomimalView, VotacaoSecretaView, + VotacaoNomimalEditView, VotacaoNomimalView, + VotacaoSecretaEditView, VotacaoSecretaView, VotacaoSimbolicaEditView, VotacaoSimbolicaView, sessao_crud, tipo_expediente_crud, tipo_resultado_votacao_crud, tipo_sessao_crud) @@ -50,10 +50,14 @@ urlpatterns_sessao = sessao_crud.urlpatterns + [ ExplicacaoDelete.as_view(), name='explicacaoexcluir'), url(r'^(?P\d+)/explicacao/editar/(?P\d+)$', ExplicacaoEdit.as_view(), name='explicacaoeditar'), - url(r'^(?P\d+)/matordemdia/votacaonominal/(?P\d+)$', + url(r'^(?P\d+)/matordemdia/votnom/(?P\d+)/(?P\d+)$', VotacaoNomimalView.as_view(), name='votacaonominal'), - url(r'^(?P\d+)/matordemdia/votacaosecreta/(?P\d+)$', + url(r'^(?P\d+)/matordemdia/votnom/edit/(?P\d+)/(?P\d+)$', + VotacaoNomimalEditView.as_view(), name='votacaonominaledit'), + url(r'^(?P\d+)/matordemdia/votsec/(?P\d+)/(?P\d+)$', VotacaoSecretaView.as_view(), name='votacaosecreta'), + url(r'^(?P\d+)/matordemdia/votsec/view/(?P\d+)/(?P\d+)$', + VotacaoSecretaEditView.as_view(), name='votacaosecretaedit'), url(r'^(?P\d+)/matordemdia/votsimb/(?P\d+)/(?P\d+)$', VotacaoSimbolicaView.as_view(), name='votacaosimbolica'), url(r'^(?P\d+)/matordemdia/votsimb/view/(?P\d+)/(?P\d+)$', diff --git a/sessao/views.py b/sessao/views.py index 0ef4ae08c..ef1f76d8f 100644 --- a/sessao/views.py +++ b/sessao/views.py @@ -1311,10 +1311,82 @@ class VotacaoSimbolicaView(FormMixin, sessao_crud.CrudDetailView): form = VotacaoForm(request.POST) if form.is_valid(): - current_url = request.get_full_path() - words = current_url.split('/') - materia_id = words[-2] - ordem_id = words[-1] + materia_id = kwargs['oid'] + ordem_id = kwargs['mid'] + + qtde_presentes = len(SessaoPlenariaPresenca.objects.filter( + sessao_plen_id=self.object.id)) + qtde_votos = (int(request.POST['votos_sim']) + + int(request.POST['votos_nao']) + + int(request.POST['abstencoes'])) + + if(int(request.POST['voto_presidente']) == 0): + qtde_presentes -= 1 + + if(qtde_votos > qtde_presentes or qtde_votos < qtde_presentes): + # context.update ({'error_message': + # 'A quantidade de votos e de + # presentes não correspondem.'}) + return self.form_invalid(form) + elif (qtde_presentes == qtde_votos): + try: + votacao = RegistroVotacao() + votacao.numero_votos_sim = int(request.POST['votos_sim']) + votacao.numero_votos_nao = int(request.POST['votos_nao']) + votacao.numero_abstencoes = int(request.POST['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: + 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) + + def get_success_url(self): + pk = self.kwargs['pk'] + return reverse('sessaoplenaria:materiaordemdia_list', + kwargs={'pk': pk}) + + +class VotacaoSecretaView(FormMixin, sessao_crud.CrudDetailView): + template_name = 'sessao/votacao/secreta.html' + + 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': ordem.observacao} + context.update({'materia': materia}) + + return self.render_to_response(context) + + def post(self, request, *args, **kwargs): + self.object = self.get_object() + form = VotacaoForm(request.POST) + + if form.is_valid(): + materia_id = kwargs['oid'] + ordem_id = kwargs['mid'] qtde_presentes = len(SessaoPlenariaPresenca.objects.filter( sessao_plen_id=self.object.id)) @@ -1363,6 +1435,62 @@ class VotacaoSimbolicaView(FormMixin, sessao_crud.CrudDetailView): kwargs={'pk': pk}) +class VotacaoSecretaEditView(FormMixin, sessao_crud.CrudDetailView): + template_name = 'sessao/votacao/secreta_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( + ' ', ' ', 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 VotacaoNomimalView(FormMixin, sessao_crud.CrudDetailView): template_name = 'sessao/votacao/nominal.html' @@ -1383,5 +1511,5 @@ class VotacaoNomimalView(FormMixin, sessao_crud.CrudDetailView): yield parlamentar -class VotacaoSecretaView(FormMixin, sessao_crud.CrudDetailView): - template_name = 'sessao/votacao/secreta.html' +class VotacaoNomimalEditView(FormMixin, sessao_crud.CrudDetailView): + template_name = 'sessao/votacao/nominal_edit.html' diff --git a/templates/sessao/materia_ordemdia_list.html b/templates/sessao/materia_ordemdia_list.html index 8c87b1cb2..5d273267a 100644 --- a/templates/sessao/materia_ordemdia_list.html +++ b/templates/sessao/materia_ordemdia_list.html @@ -24,18 +24,18 @@ Matérias da Ordem do Dia {% if m.tipo_votacao == 1 %} {{m.resultado}} {% elif m.tipo_votacao == 2 %} - {{m.resultado}} + {{m.resultado}} {% elif m.tipo_votacao == 3%} - {{m.resultado}} + {{m.resultado}} {% endif %} {% else %} Matéria não votada
{% if m.tipo_votacao == 1 %} Registrar Votação {% elif m.tipo_votacao == 2 %} - Registrar Votação + Registrar Votação {% elif m.tipo_votacao == 3%} - Registrar Votação + Registrar Votação {% endif %} {% endif %} diff --git a/templates/sessao/votacao/nominal.html b/templates/sessao/votacao/nominal.html index 468fdfb57..e8ca5b876 100644 --- a/templates/sessao/votacao/nominal.html +++ b/templates/sessao/votacao/nominal.html @@ -30,16 +30,6 @@ -
    -
  • - Anular Votação - -
  • -
-
  • Resultado da Votação diff --git a/templates/sessao/votacao/nominal_edit.html b/templates/sessao/votacao/nominal_edit.html new file mode 100644 index 000000000..e69de29bb diff --git a/templates/sessao/votacao/secreta.html b/templates/sessao/votacao/secreta.html index d2bb92474..c1b0e42dc 100644 --- a/templates/sessao/votacao/secreta.html +++ b/templates/sessao/votacao/secreta.html @@ -7,10 +7,12 @@
    Votação Secreta - - Matéria: +
    + Matéria: {{materia.materia|safe}} +
    + Ementa: {{materia.ementa|safe}} +

    - Ementa:
    • Sim:
    • @@ -19,14 +21,6 @@
      -
    • - Anular Votação - -
    • -
    • A totalização inclui o voto do Presidente?
    • -
    -
    • Resultado da Votação
    @@ -51,7 +46,7 @@
- +

diff --git a/templates/sessao/votacao/secreta_edit.html b/templates/sessao/votacao/secreta_edit.html new file mode 100644 index 000000000..c7b3c7690 --- /dev/null +++ b/templates/sessao/votacao/secreta_edit.html @@ -0,0 +1,55 @@ +{% extends "sessao/sessaoplenaria_detail.html" %} +{% load i18n %} + +{% block detail_content %} +
+ {% csrf_token %} + +
+ Votação Secreta +
+ Matéria: {{materia.materia|safe}} +
+ Ementa: {{materia.ementa|safe}} +
+
+ +
    +
  • + Anular Votação + +
  • +
+ +
    +
  • + Resultado da Votação: + {% for tipo in view.get_tipos_votacao %} + {% if votacao.tipo_resultado == tipo.id %} + {{ tipo.nome }} + {% endif %} + {% endfor %} +
  • +
+ +
    +
  • + Observações + +
  • +
+ +

+ +
+
+{% endblock detail_content %} + +{% block foot_js %} + +{% endblock %} \ No newline at end of file