From 8881ae3802f1c7df919853219389dac9ea8ec82a Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Wed, 7 Jun 2017 12:02:26 -0300 Subject: [PATCH] Conserta detalhes da votacao nominal --- create_admin.py | 5 +-- genkey.py | 1 + sapl/api/forms.py | 4 +-- sapl/api/serializers.py | 2 +- sapl/api/views.py | 5 ++- sapl/base/search_indexes.py | 5 ++- sapl/legacy/migracao_documentos.py | 7 ++--- sapl/legacy/migration.py | 4 +-- sapl/materia/signals.py | 4 +-- sapl/materia/views.py | 2 +- sapl/norma/signals.py | 4 +-- sapl/painel/views.py | 14 +++++---- sapl/parlamentares/models.py | 2 +- sapl/parlamentares/urls.py | 15 +++++---- sapl/parlamentares/views.py | 2 +- sapl/relatorios/views.py | 5 ++- sapl/rules/tests/test_rules.py | 4 +-- sapl/sessao/serializers.py | 1 + sapl/sessao/urls.py | 17 +++++------ sapl/sessao/views.py | 49 +++++++++++------------------- sapl/utils.py | 13 ++++---- 21 files changed, 75 insertions(+), 90 deletions(-) diff --git a/create_admin.py b/create_admin.py index 7fe03a65c..09ca17798 100644 --- a/create_admin.py +++ b/create_admin.py @@ -1,11 +1,12 @@ -import sys import os +import sys + import django +from django.contrib.auth.models import User os.environ.setdefault("DJANGO_SETTINGS_MODULE", "sapl.settings") django.setup() -from django.contrib.auth.models import User def create_superuser(): username = "admin" diff --git a/genkey.py b/genkey.py index 85f399c54..248a67e8f 100644 --- a/genkey.py +++ b/genkey.py @@ -1,5 +1,6 @@ import random + def generate_secret(): return ''.join([random.SystemRandom().choice('abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*(-_=+)') for i in range(50)]) diff --git a/sapl/api/forms.py b/sapl/api/forms.py index afa9190f4..41e40eacf 100644 --- a/sapl/api/forms.py +++ b/sapl/api/forms.py @@ -1,6 +1,6 @@ from django.db.models import Q -from django.forms.fields import MultiValueField, CharField -from django.forms.widgets import TextInput, MultiWidget +from django.forms.fields import CharField, MultiValueField +from django.forms.widgets import MultiWidget, TextInput from django_filters.filters import MethodFilter, ModelChoiceFilter from rest_framework.compat import django_filters from rest_framework.filters import FilterSet diff --git a/sapl/api/serializers.py b/sapl/api/serializers.py index e6adaf21a..4590e0186 100644 --- a/sapl/api/serializers.py +++ b/sapl/api/serializers.py @@ -2,7 +2,7 @@ from rest_framework import serializers from sapl.base.models import Autor, CasaLegislativa from sapl.materia.models import MateriaLegislativa -from sapl.sessao.models import SessaoPlenaria, OrdemDia +from sapl.sessao.models import OrdemDia, SessaoPlenaria class ChoiceSerializer(serializers.Serializer): diff --git a/sapl/api/views.py b/sapl/api/views.py index eb1364bf7..1cb669599 100644 --- a/sapl/api/views.py +++ b/sapl/api/views.py @@ -5,9 +5,8 @@ from django.utils.translation import ugettext_lazy as _ from rest_framework.filters import DjangoFilterBackend from rest_framework.generics import ListAPIView from rest_framework.mixins import ListModelMixin, RetrieveModelMixin -from rest_framework.permissions import (IsAuthenticated, - IsAuthenticatedOrReadOnly, - AllowAny) +from rest_framework.permissions import (AllowAny, IsAuthenticated, + IsAuthenticatedOrReadOnly) from rest_framework.viewsets import GenericViewSet, ModelViewSet from sapl.api.forms import AutorChoiceFilterSet, AutorSearchForFieldFilterSet diff --git a/sapl/base/search_indexes.py b/sapl/base/search_indexes.py index 394d92e41..1ac607001 100644 --- a/sapl/base/search_indexes.py +++ b/sapl/base/search_indexes.py @@ -4,13 +4,12 @@ import os.path import textract from django.template import Context, loader from haystack import indexes +from textract.exceptions import ExtensionNotSupported from sapl.materia.models import DocumentoAcessorio, MateriaLegislativa from sapl.norma.models import NormaJuridica - -from textract.exceptions import ExtensionNotSupported - from sapl.settings import BASE_DIR + logger = logging.getLogger(BASE_DIR.name) class DocumentoAcessorioIndex(indexes.SearchIndex, indexes.Indexable): diff --git a/sapl/legacy/migracao_documentos.py b/sapl/legacy/migracao_documentos.py index 8ac380b5f..bd770a06e 100644 --- a/sapl/legacy/migracao_documentos.py +++ b/sapl/legacy/migracao_documentos.py @@ -3,20 +3,19 @@ import os import re import magic - from django.db.models.signals import post_delete, post_save + from sapl.base.models import CasaLegislativa from sapl.materia.models import (DocumentoAcessorio, MateriaLegislativa, Proposicao) from sapl.norma.models import NormaJuridica from sapl.parlamentares.models import Parlamentar -from sapl.protocoloadm.models import DocumentoAdministrativo -from sapl.protocoloadm.models import DocumentoAcessorioAdministrativo +from sapl.protocoloadm.models import (DocumentoAcessorioAdministrativo, + DocumentoAdministrativo) from sapl.sessao.models import SessaoPlenaria from sapl.settings import MEDIA_ROOT from sapl.utils import delete_texto, save_texto - # MIGRAÇÃO DE DOCUMENTOS ################################################### EXTENSOES = { 'application/msword': '.doc', diff --git a/sapl/legacy/migration.py b/sapl/legacy/migration.py index 8cb9bb37d..be55edde3 100644 --- a/sapl/legacy/migration.py +++ b/sapl/legacy/migration.py @@ -24,8 +24,8 @@ from sapl.materia.models import (DocumentoAcessorio, MateriaLegislativa, StatusTramitacao, TipoDocumento, TipoMateriaLegislativa, TipoProposicao, Tramitacao) -from sapl.norma.models import (AssuntoNorma, NormaJuridica, - TipoVinculoNormaJuridica, NormaRelacionada) +from sapl.norma.models import (AssuntoNorma, NormaJuridica, NormaRelacionada, + TipoVinculoNormaJuridica) from sapl.parlamentares.models import Parlamentar, TipoAfastamento from sapl.protocoloadm.models import Protocolo, StatusTramitacaoAdministrativo from sapl.sessao.models import ExpedienteMateria, OrdemDia, RegistroVotacao diff --git a/sapl/materia/signals.py b/sapl/materia/signals.py index 9f08b104c..7314d7504 100644 --- a/sapl/materia/signals.py +++ b/sapl/materia/signals.py @@ -1,8 +1,8 @@ from django.db.models.signals import post_delete, post_save -from sapl.utils import save_texto, delete_texto -from .models import DocumentoAcessorio, MateriaLegislativa +from sapl.utils import delete_texto, save_texto +from .models import DocumentoAcessorio, MateriaLegislativa post_save.connect(save_texto, sender=MateriaLegislativa) post_save.connect(save_texto, sender=DocumentoAcessorio) diff --git a/sapl/materia/views.py b/sapl/materia/views.py index 37e65161a..a60f9d838 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -7,7 +7,7 @@ from crispy_forms.layout import HTML from django.contrib import messages from django.contrib.auth.decorators import permission_required from django.contrib.auth.mixins import PermissionRequiredMixin -from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned +from django.core.exceptions import MultipleObjectsReturned, ObjectDoesNotExist from django.core.mail import send_mail from django.core.urlresolvers import reverse from django.http import HttpResponse, JsonResponse diff --git a/sapl/norma/signals.py b/sapl/norma/signals.py index 3089e563e..c01ac927d 100644 --- a/sapl/norma/signals.py +++ b/sapl/norma/signals.py @@ -1,8 +1,8 @@ from django.db.models.signals import post_delete, post_save -from sapl.utils import save_texto, delete_texto -from .models import NormaJuridica +from sapl.utils import delete_texto, save_texto +from .models import NormaJuridica post_save.connect(save_texto, sender=NormaJuridica) post_delete.connect(delete_texto, sender=NormaJuridica) diff --git a/sapl/painel/views.py b/sapl/painel/views.py index e0760dcfb..57b8c6ac2 100644 --- a/sapl/painel/views.py +++ b/sapl/painel/views.py @@ -102,6 +102,7 @@ def votante_view(request, pk): 'Nenhuma matéria com votação nominal aberta.'}) # Recupera o voto do parlamentar logado + voto = [] if ordem_dia: voto = VotoParlamentar.objects.filter( ordem=ordem_dia) @@ -109,12 +110,13 @@ def votante_view(request, pk): voto = VotoParlamentar.objects.filter( expediente=expediente) - try: - voto = voto.get(parlamentar=parlamentar) - except ObjectDoesNotExist: - context.update({'voto_parlamentar': 'Voto não computado.'}) - else: - context.update({'voto_parlamentar': voto.voto}) + if voto: + try: + voto = voto.get(parlamentar=parlamentar) + except ObjectDoesNotExist: + context.update({'voto_parlamentar': 'Voto não computado.'}) + else: + context.update({'voto_parlamentar': voto.voto}) # Salva o voto if request.method == 'POST': diff --git a/sapl/parlamentares/models.py b/sapl/parlamentares/models.py index 2f1284fbf..965761e34 100644 --- a/sapl/parlamentares/models.py +++ b/sapl/parlamentares/models.py @@ -1,9 +1,9 @@ from datetime import datetime +import reversion from django.db import models from django.utils.translation import ugettext_lazy as _ from model_utils import Choices -import reversion from sapl.base.models import Autor from sapl.utils import (INDICADOR_AFASTAMENTO, UF, YES_NO_CHOICES, diff --git a/sapl/parlamentares/urls.py b/sapl/parlamentares/urls.py index 0d8d406da..870090ad4 100644 --- a/sapl/parlamentares/urls.py +++ b/sapl/parlamentares/urls.py @@ -1,22 +1,21 @@ from django.conf.urls import include, url -from sapl.parlamentares.views import (altera_field_mesa, - altera_field_mesa_public_view, - CargoMesaCrud, ColigacaoCrud, +from sapl.parlamentares.views import (CargoMesaCrud, ColigacaoCrud, ComposicaoColigacaoCrud, DependenteCrud, FiliacaoCrud, FrenteCrud, FrenteList, - LegislaturaCrud, - insere_parlamentar_composicao, - MandatoCrud, + LegislaturaCrud, MandatoCrud, MesaDiretoraView, NivelInstrucaoCrud, ParlamentarCrud, ParticipacaoParlamentarCrud, PartidoCrud, ProposicaoParlamentarCrud, RelatoriaParlamentarCrud, - remove_parlamentar_composicao, SessaoLegislativaCrud, TipoAfastamentoCrud, TipoDependenteCrud, - TipoMilitarCrud, VotanteView) + TipoMilitarCrud, VotanteView, + altera_field_mesa, + altera_field_mesa_public_view, + insere_parlamentar_composicao, + remove_parlamentar_composicao) from .apps import AppConfig diff --git a/sapl/parlamentares/views.py b/sapl/parlamentares/views.py index f9dc33f60..668aa8120 100644 --- a/sapl/parlamentares/views.py +++ b/sapl/parlamentares/views.py @@ -1,5 +1,5 @@ from django.contrib import messages -from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned +from django.core.exceptions import MultipleObjectsReturned, ObjectDoesNotExist from django.core.urlresolvers import reverse, reverse_lazy from django.db.models import F, Q from django.http import JsonResponse diff --git a/sapl/relatorios/views.py b/sapl/relatorios/views.py index 0960dbfa0..0882d90a0 100644 --- a/sapl/relatorios/views.py +++ b/sapl/relatorios/views.py @@ -1,7 +1,6 @@ -from datetime import datetime - -import re import html +import re +from datetime import datetime from django.core.exceptions import ObjectDoesNotExist from django.http import Http404, HttpResponse diff --git a/sapl/rules/tests/test_rules.py b/sapl/rules/tests/test_rules.py index 6fc7eb3fe..099ca8bf7 100644 --- a/sapl/rules/tests/test_rules.py +++ b/sapl/rules/tests/test_rules.py @@ -6,8 +6,8 @@ from django.contrib.contenttypes.models import ContentType from django.utils import six from django.utils.translation import ugettext_lazy as _ -from sapl.base.models import (CasaLegislativa, ProblemaMigracao, Argumento, - Constraint) +from sapl.base.models import (Argumento, CasaLegislativa, Constraint, + ProblemaMigracao) from sapl.compilacao.models import (PerfilEstruturalTextoArticulado, TipoDispositivo, TipoDispositivoRelationship) diff --git a/sapl/sessao/serializers.py b/sapl/sessao/serializers.py index 6d6f4cd9b..c38509f93 100644 --- a/sapl/sessao/serializers.py +++ b/sapl/sessao/serializers.py @@ -2,6 +2,7 @@ from rest_framework import serializers from .models import SessaoPlenaria + class SessaoPlenariaSerializer(serializers.Serializer): class Meta: model = SessaoPlenaria diff --git a/sapl/sessao/urls.py b/sapl/sessao/urls.py index 4f6e5c887..a28d5eb38 100644 --- a/sapl/sessao/urls.py +++ b/sapl/sessao/urls.py @@ -1,8 +1,8 @@ from django.conf.urls import include, url from sapl.sessao.views import (AdicionarVariasMateriasExpediente, - AdicionarVariasMateriasOrdemDia, - BancadaCrud, BlocoCrud, CargoBancadaCrud, + AdicionarVariasMateriasOrdemDia, BancadaCrud, + BlocoCrud, CargoBancadaCrud, ExpedienteMateriaCrud, ExpedienteView, MateriaOrdemDiaCrud, MesaView, OradorCrud, OradorExpedienteCrud, PainelView, @@ -11,18 +11,17 @@ from sapl.sessao.views import (AdicionarVariasMateriasExpediente, PesquisarPautaSessaoView, PesquisarSessaoPlenariaView, PresencaOrdemDiaView, PresencaView, - ResumoOrdenacaoView, ResumoView, - SessaoCrud, TipoExpedienteCrud, - TipoResultadoVotacaoCrud, TipoSessaoCrud, - VotacaoEditView, VotacaoExpedienteEditView, + ResumoOrdenacaoView, ResumoView, SessaoCrud, + TipoExpedienteCrud, TipoResultadoVotacaoCrud, + TipoSessaoCrud, VotacaoEditView, + VotacaoExpedienteEditView, VotacaoExpedienteView, VotacaoNominalEditView, - VotacaoNominalExpedienteEditView, VotacaoNominalExpedienteDetailView, + VotacaoNominalExpedienteEditView, VotacaoNominalExpedienteView, VotacaoNominalView, VotacaoView, abrir_votacao_expediente_view, - abrir_votacao_ordem_view, - atualizar_mesa, + abrir_votacao_ordem_view, atualizar_mesa, insere_parlamentar_composicao, mudar_ordem_materia_sessao, recuperar_materia, recuperar_numero_sessao, diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index 4f1dfd546..f096e87e4 100644 --- a/sapl/sessao/views.py +++ b/sapl/sessao/views.py @@ -37,9 +37,8 @@ from sapl.sessao.forms import ExpedienteMateriaForm, OrdemDiaForm from .forms import (AdicionarVariasMateriasFilterSet, ExpedienteForm, ListMateriaForm, MesaForm, OradorExpedienteForm, OradorForm, PautaSessaoFilterSet, PresencaForm, - ResumoOrdenacaoForm, - SessaoPlenariaFilterSet, VotacaoEditForm, VotacaoForm, - VotacaoNominalForm) + ResumoOrdenacaoForm, SessaoPlenariaFilterSet, + VotacaoEditForm, VotacaoForm, VotacaoNominalForm) from .models import (Bancada, Bloco, CargoBancada, CargoMesa, ExpedienteMateria, ExpedienteSessao, IntegranteMesa, MateriaLegislativa, Orador, OradorExpediente, OrdemDia, @@ -1584,6 +1583,8 @@ def fechar_votacao_materia(materia): for r in registro_votacao: r.delete() + if materia.resultado: + materia.resultado = '' materia.votacao_aberta = False materia.save() @@ -1607,8 +1608,9 @@ class VotacaoNominalAbstract(SessaoPermissionMixin): except ObjectDoesNotExist: raise Http404() - total = PresencaOrdemDia.objects.filter( - sessao_plenaria_id=ordem.sessao_plenaria_id).count() + presentes = PresencaOrdemDia.objects.filter( + sessao_plenaria_id=ordem.sessao_plenaria_id) + total = presentes.count() materia_votacao = ordem @@ -1627,8 +1629,9 @@ class VotacaoNominalAbstract(SessaoPermissionMixin): except ObjectDoesNotExist: raise Http404() - total = SessaoPlenariaPresenca.objects.filter( - sessao_plenaria_id=expediente.sessao_plenaria_id).count() + presentes = SessaoPlenariaPresenca.objects.filter( + sessao_plenaria_id=expediente.sessao_plenaria_id) + total = presentes.count() materia_votacao = expediente @@ -1637,10 +1640,9 @@ class VotacaoNominalAbstract(SessaoPermissionMixin): ' ', ' ', strip_tags( materia_votacao.observacao))} context = {'materia': materia, 'object': self.get_object(), - 'parlamentares': self.get_parlamentares( - materia_votacao.materia), - 'tipos': self.get_tipos_votacao(), - 'total': total} + 'parlamentares': self.get_parlamentares(presentes), + 'tipos': self.get_tipos_votacao(), + 'total': total} return self.render_to_response(context) @@ -1754,12 +1756,9 @@ class VotacaoNominalAbstract(SessaoPermissionMixin): else: return self.form_invalid(form) - def get_parlamentares(self, materia): + def get_parlamentares(self, presencas): self.object = self.get_object() - presencas = PresencaOrdemDia.objects.filter( - sessao_plenaria_id=self.object.id - ) presentes = [p.parlamentar for p in presencas] if self.ordem: @@ -1858,7 +1857,7 @@ class VotacaoNominalEditAbstract(SessaoPermissionMixin): ordem_id = kwargs['oid'] try: - ordem = OrdemDia.objects.get(id=ordem_id) + materia_votacao = OrdemDia.objects.get(id=ordem_id) except ObjectDoesNotExist: raise Http404() @@ -1866,25 +1865,13 @@ class VotacaoNominalEditAbstract(SessaoPermissionMixin): expediente_id = kwargs['oid'] try: - expediente = ExpedienteMateria.objects.get(id=expediente_id) + materia_votacao = ExpedienteMateria.objects.get( + id=expediente_id) except ObjectDoesNotExist: raise Http404() if(int(request.POST['anular_votacao']) == 1): - if self.ordem: - registro = RegistroVotacao.objects.get( - ordem=ordem) - materia_votacao = registro.ordem - elif self.expediente: - registro = RegistroVotacao.objects.get( - expediente=expediente) - materia_votacao = registro.expediente - - materia_votacao.resultado = '' - materia_votacao.votacao_aberta = False - materia_votacao.save() - - registro.delete() + fechar_votacao_materia(materia_votacao) return self.form_valid(form) diff --git a/sapl/utils.py b/sapl/utils.py index 50b7faffc..e4b3fc074 100644 --- a/sapl/utils.py +++ b/sapl/utils.py @@ -1,13 +1,15 @@ +import hashlib +import logging +import os +import re from datetime import date from functools import wraps from subprocess import PIPE, call from threading import Thread from unicodedata import normalize as unicodedata_normalize -import hashlib -import logging -import os -import re +import django_filters +import magic from crispy_forms.helper import FormHelper from crispy_forms.layout import HTML, Button from django import forms @@ -20,13 +22,10 @@ from django.core.exceptions import ValidationError from django.utils.translation import ugettext_lazy as _ from floppyforms import ClearableFileInput from reversion.admin import VersionAdmin -import django_filters -import magic from sapl.crispy_layout_mixin import SaplFormLayout, form_actions, to_row from sapl.settings import BASE_DIR, PROJECT_DIR - sapl_logger = logging.getLogger(BASE_DIR.name)