diff --git a/sessao/urls.py b/sessao/urls.py index a11706088..78dd68a9c 100644 --- a/sessao/urls.py +++ b/sessao/urls.py @@ -9,9 +9,9 @@ from sessao.views import (EditExpedienteOrdemDiaView, EditMateriaOrdemDiaView, OradorExpedienteView, PainelView, PresencaOrdemDiaView, PresencaView, ResumoView, VotacaoNomimalView, VotacaoSecretaView, - VotacaoSimbolicaView, sessao_crud, - tipo_expediente_crud, tipo_resultado_votacao_crud, - tipo_sessao_crud) + VotacaoSimbolicaEditView, VotacaoSimbolicaView, + sessao_crud, tipo_expediente_crud, + tipo_resultado_votacao_crud, tipo_sessao_crud) urlpatterns_sessao = sessao_crud.urlpatterns + [ url(r'^(?P\d+)/expediente$', @@ -50,12 +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+)/materiaordemdia/votacaosimbolica/(?P\d+)/(?P\d+)$', - VotacaoSimbolicaView.as_view(), name='votacaosimbolica'), - url(r'^(?P\d+)/materiaordemdia/votacaonominal/(?P\d+)$', + url(r'^(?P\d+)/matordemdia/votacaonominal/(?P\d+)$', VotacaoNomimalView.as_view(), name='votacaonominal'), - url(r'^(?P\d+)/materiaordemdia/votacaosecreta/(?P\d+)$', + url(r'^(?P\d+)/matordemdia/votacaosecreta/(?P\d+)$', VotacaoSecretaView.as_view(), name='votacaosecreta'), + 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+)$', + VotacaoSimbolicaEditView.as_view(), name='votacaosimbolicaedit'), ] sessao_urls = urlpatterns_sessao, sessao_crud.namespace, sessao_crud.namespace diff --git a/sessao/views.py b/sessao/views.py index ac0fc338d..0ef4ae08c 100644 --- a/sessao/views.py +++ b/sessao/views.py @@ -195,18 +195,16 @@ class PresencaOrdemDiaView(FormMixin, sessao_crud.CrudDetailView): sessao_plenaria_id=self.object.id ) - presentes = [] - for p in presencas: - presentes.append(p.parlamentar.id) + presencas = SessaoPlenariaPresenca.objects.filter( + sessao_plen_id=self.object.id + ) + presentes = [p.parlamentar for p in presencas] - for parlamentar in Parlamentar.objects.all(): - if parlamentar.ativo: - try: - presentes.index(parlamentar.id) - except ValueError: - yield (parlamentar, False) - else: - yield (parlamentar, True) + for parlamentar in Parlamentar.objects.filter(ativo=True): + if parlamentar in presentes: + yield (parlamentar, True) + else: + yield (parlamentar, False) class ListMateriaOrdemDiaView(sessao_crud.CrudDetailView): @@ -1229,6 +1227,66 @@ class VotacaoForm(forms.Form): 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( + ' ', ' ', 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): template_name = 'sessao/votacao/simbolica.html' @@ -1240,32 +1298,12 @@ class VotacaoSimbolicaView(FormMixin, sessao_crud.CrudDetailView): self.object = self.get_object() context = self.get_context_data(object=self.object) - current_url = self.request.get_full_path() - words = current_url.split('/') - materia_id = words[-2] - ordem_id = words[-1] + ordem_id = kwargs['mid'] ordem = OrdemDia.objects.get(id=ordem_id) materia = {'materia': ordem.materia, 'ementa': ordem.observacao} 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) def post(self, request, *args, **kwargs): @@ -1278,29 +1316,44 @@ class VotacaoSimbolicaView(FormMixin, sessao_crud.CrudDetailView): materia_id = words[-2] ordem_id = words[-1] - 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: + 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) - 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() + 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) + return self.form_valid(form) else: return self.form_invalid(form) @@ -1320,18 +1373,14 @@ class VotacaoNomimalView(FormMixin, sessao_crud.CrudDetailView): sessao_plen_id=self.object.id ) - presentes = [] - for p in presencas: - presentes.append(p.parlamentar.id) + presencas = SessaoPlenariaPresenca.objects.filter( + sessao_plen_id=self.object.id + ) + presentes = [p.parlamentar for p in presencas] - for parlamentar in Parlamentar.objects.all(): - if parlamentar.ativo: - try: - presentes.index(parlamentar.id) - except ValueError: - pass - else: - yield parlamentar + for parlamentar in Parlamentar.objects.filter(ativo=True): + if parlamentar in presentes: + yield parlamentar class VotacaoSecretaView(FormMixin, sessao_crud.CrudDetailView): diff --git a/templates/sessao/materia_ordemdia_list.html b/templates/sessao/materia_ordemdia_list.html index e4c333ebf..8c87b1cb2 100644 --- a/templates/sessao/materia_ordemdia_list.html +++ b/templates/sessao/materia_ordemdia_list.html @@ -21,7 +21,13 @@ Matérias da Ordem do Dia
  • {{m.ementa|safe}}
  • {% if m.resultado %} - {{m.resultado}} + {% if m.tipo_votacao == 1 %} + {{m.resultado}} + {% elif m.tipo_votacao == 2 %} + {{m.resultado}} + {% elif m.tipo_votacao == 3%} + {{m.resultado}} + {% endif %} {% else %} Matéria não votada
    {% if m.tipo_votacao == 1 %} diff --git a/templates/sessao/votacao/simbolica.html b/templates/sessao/votacao/simbolica.html index d7b83faf9..6b039a22c 100644 --- a/templates/sessao/votacao/simbolica.html +++ b/templates/sessao/votacao/simbolica.html @@ -7,94 +7,46 @@
    Votação Simbólica - - Matéria: {{materia.materia}} +
    + Matéria: {{materia.materia|safe}} +
    + Ementa: {{materia.ementa|safe}} +

    - Ementa: {{materia.ementa}} - - {% if votacao_existente %} - -
      -
    • Sim:
    • -
    • Não:
    • -
    • Abstenções:
    • -
    - -
      -
    • - Anular Votação - -
    • -
    - -
      -
    • - Resultado da Votação - -
    • -
    - -
      -
    • - Observações - -
    • -
    - - {% else %} - -
      -
    • Sim:
    • -
    • Não:
    • -
    • Abstenções:
    • -
    - -
      -
    • - Anular Votação - -
    • - -
    • - A totalização inclui o voto do Presidente? - -
    • -
    - -
      -
    • - Resultado da Votação - -
    • -
    - -
      -
    • - Observações - -
    • -
    - - {% endif %} +
      +
    • Sim:
    • +
    • Não:
    • +
    • Abstenções:
    • +
    + +
      +
    • + A totalização inclui o voto do Presidente? + +
    • + +
    • + Resultado da Votação + +
    • +
    + +
      +
    • + Observações + +
    • +
    +

    diff --git a/templates/sessao/votacao/simbolica_edit.html b/templates/sessao/votacao/simbolica_edit.html new file mode 100644 index 000000000..a7bf120fe --- /dev/null +++ b/templates/sessao/votacao/simbolica_edit.html @@ -0,0 +1,55 @@ +{% extends "sessao/sessaoplenaria_detail.html" %} +{% load i18n %} + +{% block detail_content %} +
    + {% csrf_token %} + +
    + Votação Simbólica +
    + 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