Browse Source

Conserta detalhes da votacao nominal

pull/1174/head
Eduardo Calil 9 years ago
parent
commit
8881ae3802
  1. 5
      create_admin.py
  2. 1
      genkey.py
  3. 4
      sapl/api/forms.py
  4. 2
      sapl/api/serializers.py
  5. 5
      sapl/api/views.py
  6. 5
      sapl/base/search_indexes.py
  7. 7
      sapl/legacy/migracao_documentos.py
  8. 4
      sapl/legacy/migration.py
  9. 4
      sapl/materia/signals.py
  10. 2
      sapl/materia/views.py
  11. 4
      sapl/norma/signals.py
  12. 14
      sapl/painel/views.py
  13. 2
      sapl/parlamentares/models.py
  14. 15
      sapl/parlamentares/urls.py
  15. 2
      sapl/parlamentares/views.py
  16. 5
      sapl/relatorios/views.py
  17. 4
      sapl/rules/tests/test_rules.py
  18. 1
      sapl/sessao/serializers.py
  19. 17
      sapl/sessao/urls.py
  20. 49
      sapl/sessao/views.py
  21. 13
      sapl/utils.py

5
create_admin.py

@ -1,11 +1,12 @@
import sys
import os import os
import sys
import django import django
from django.contrib.auth.models import User
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "sapl.settings") os.environ.setdefault("DJANGO_SETTINGS_MODULE", "sapl.settings")
django.setup() django.setup()
from django.contrib.auth.models import User
def create_superuser(): def create_superuser():
username = "admin" username = "admin"

1
genkey.py

@ -1,5 +1,6 @@
import random import random
def generate_secret(): def generate_secret():
return ''.join([random.SystemRandom().choice('abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*(-_=+)') for i in range(50)]) return ''.join([random.SystemRandom().choice('abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*(-_=+)') for i in range(50)])

4
sapl/api/forms.py

@ -1,6 +1,6 @@
from django.db.models import Q from django.db.models import Q
from django.forms.fields import MultiValueField, CharField from django.forms.fields import CharField, MultiValueField
from django.forms.widgets import TextInput, MultiWidget from django.forms.widgets import MultiWidget, TextInput
from django_filters.filters import MethodFilter, ModelChoiceFilter from django_filters.filters import MethodFilter, ModelChoiceFilter
from rest_framework.compat import django_filters from rest_framework.compat import django_filters
from rest_framework.filters import FilterSet from rest_framework.filters import FilterSet

2
sapl/api/serializers.py

@ -2,7 +2,7 @@ from rest_framework import serializers
from sapl.base.models import Autor, CasaLegislativa from sapl.base.models import Autor, CasaLegislativa
from sapl.materia.models import MateriaLegislativa from sapl.materia.models import MateriaLegislativa
from sapl.sessao.models import SessaoPlenaria, OrdemDia from sapl.sessao.models import OrdemDia, SessaoPlenaria
class ChoiceSerializer(serializers.Serializer): class ChoiceSerializer(serializers.Serializer):

5
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.filters import DjangoFilterBackend
from rest_framework.generics import ListAPIView from rest_framework.generics import ListAPIView
from rest_framework.mixins import ListModelMixin, RetrieveModelMixin from rest_framework.mixins import ListModelMixin, RetrieveModelMixin
from rest_framework.permissions import (IsAuthenticated, from rest_framework.permissions import (AllowAny, IsAuthenticated,
IsAuthenticatedOrReadOnly, IsAuthenticatedOrReadOnly)
AllowAny)
from rest_framework.viewsets import GenericViewSet, ModelViewSet from rest_framework.viewsets import GenericViewSet, ModelViewSet
from sapl.api.forms import AutorChoiceFilterSet, AutorSearchForFieldFilterSet from sapl.api.forms import AutorChoiceFilterSet, AutorSearchForFieldFilterSet

5
sapl/base/search_indexes.py

@ -4,13 +4,12 @@ import os.path
import textract import textract
from django.template import Context, loader from django.template import Context, loader
from haystack import indexes from haystack import indexes
from textract.exceptions import ExtensionNotSupported
from sapl.materia.models import DocumentoAcessorio, MateriaLegislativa from sapl.materia.models import DocumentoAcessorio, MateriaLegislativa
from sapl.norma.models import NormaJuridica from sapl.norma.models import NormaJuridica
from textract.exceptions import ExtensionNotSupported
from sapl.settings import BASE_DIR from sapl.settings import BASE_DIR
logger = logging.getLogger(BASE_DIR.name) logger = logging.getLogger(BASE_DIR.name)
class DocumentoAcessorioIndex(indexes.SearchIndex, indexes.Indexable): class DocumentoAcessorioIndex(indexes.SearchIndex, indexes.Indexable):

7
sapl/legacy/migracao_documentos.py

@ -3,20 +3,19 @@ import os
import re import re
import magic import magic
from django.db.models.signals import post_delete, post_save from django.db.models.signals import post_delete, post_save
from sapl.base.models import CasaLegislativa from sapl.base.models import CasaLegislativa
from sapl.materia.models import (DocumentoAcessorio, MateriaLegislativa, from sapl.materia.models import (DocumentoAcessorio, MateriaLegislativa,
Proposicao) Proposicao)
from sapl.norma.models import NormaJuridica from sapl.norma.models import NormaJuridica
from sapl.parlamentares.models import Parlamentar 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.sessao.models import SessaoPlenaria
from sapl.settings import MEDIA_ROOT from sapl.settings import MEDIA_ROOT
from sapl.utils import delete_texto, save_texto from sapl.utils import delete_texto, save_texto
# MIGRAÇÃO DE DOCUMENTOS ################################################### # MIGRAÇÃO DE DOCUMENTOS ###################################################
EXTENSOES = { EXTENSOES = {
'application/msword': '.doc', 'application/msword': '.doc',

4
sapl/legacy/migration.py

@ -24,8 +24,8 @@ from sapl.materia.models import (DocumentoAcessorio, MateriaLegislativa,
StatusTramitacao, TipoDocumento, StatusTramitacao, TipoDocumento,
TipoMateriaLegislativa, TipoProposicao, TipoMateriaLegislativa, TipoProposicao,
Tramitacao) Tramitacao)
from sapl.norma.models import (AssuntoNorma, NormaJuridica, from sapl.norma.models import (AssuntoNorma, NormaJuridica, NormaRelacionada,
TipoVinculoNormaJuridica, NormaRelacionada) TipoVinculoNormaJuridica)
from sapl.parlamentares.models import Parlamentar, TipoAfastamento from sapl.parlamentares.models import Parlamentar, TipoAfastamento
from sapl.protocoloadm.models import Protocolo, StatusTramitacaoAdministrativo from sapl.protocoloadm.models import Protocolo, StatusTramitacaoAdministrativo
from sapl.sessao.models import ExpedienteMateria, OrdemDia, RegistroVotacao from sapl.sessao.models import ExpedienteMateria, OrdemDia, RegistroVotacao

4
sapl/materia/signals.py

@ -1,8 +1,8 @@
from django.db.models.signals import post_delete, post_save 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=MateriaLegislativa)
post_save.connect(save_texto, sender=DocumentoAcessorio) post_save.connect(save_texto, sender=DocumentoAcessorio)

2
sapl/materia/views.py

@ -7,7 +7,7 @@ from crispy_forms.layout import HTML
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.decorators import permission_required from django.contrib.auth.decorators import permission_required
from django.contrib.auth.mixins import PermissionRequiredMixin 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.mail import send_mail
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.http import HttpResponse, JsonResponse from django.http import HttpResponse, JsonResponse

4
sapl/norma/signals.py

@ -1,8 +1,8 @@
from django.db.models.signals import post_delete, post_save 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_save.connect(save_texto, sender=NormaJuridica)
post_delete.connect(delete_texto, sender=NormaJuridica) post_delete.connect(delete_texto, sender=NormaJuridica)

14
sapl/painel/views.py

@ -102,6 +102,7 @@ def votante_view(request, pk):
'Nenhuma matéria com votação nominal aberta.'}) 'Nenhuma matéria com votação nominal aberta.'})
# Recupera o voto do parlamentar logado # Recupera o voto do parlamentar logado
voto = []
if ordem_dia: if ordem_dia:
voto = VotoParlamentar.objects.filter( voto = VotoParlamentar.objects.filter(
ordem=ordem_dia) ordem=ordem_dia)
@ -109,12 +110,13 @@ def votante_view(request, pk):
voto = VotoParlamentar.objects.filter( voto = VotoParlamentar.objects.filter(
expediente=expediente) expediente=expediente)
try: if voto:
voto = voto.get(parlamentar=parlamentar) try:
except ObjectDoesNotExist: voto = voto.get(parlamentar=parlamentar)
context.update({'voto_parlamentar': 'Voto não computado.'}) except ObjectDoesNotExist:
else: context.update({'voto_parlamentar': 'Voto não computado.'})
context.update({'voto_parlamentar': voto.voto}) else:
context.update({'voto_parlamentar': voto.voto})
# Salva o voto # Salva o voto
if request.method == 'POST': if request.method == 'POST':

2
sapl/parlamentares/models.py

@ -1,9 +1,9 @@
from datetime import datetime from datetime import datetime
import reversion
from django.db import models from django.db import models
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from model_utils import Choices from model_utils import Choices
import reversion
from sapl.base.models import Autor from sapl.base.models import Autor
from sapl.utils import (INDICADOR_AFASTAMENTO, UF, YES_NO_CHOICES, from sapl.utils import (INDICADOR_AFASTAMENTO, UF, YES_NO_CHOICES,

15
sapl/parlamentares/urls.py

@ -1,22 +1,21 @@
from django.conf.urls import include, url from django.conf.urls import include, url
from sapl.parlamentares.views import (altera_field_mesa, from sapl.parlamentares.views import (CargoMesaCrud, ColigacaoCrud,
altera_field_mesa_public_view,
CargoMesaCrud, ColigacaoCrud,
ComposicaoColigacaoCrud, DependenteCrud, ComposicaoColigacaoCrud, DependenteCrud,
FiliacaoCrud, FrenteCrud, FrenteList, FiliacaoCrud, FrenteCrud, FrenteList,
LegislaturaCrud, LegislaturaCrud, MandatoCrud,
insere_parlamentar_composicao,
MandatoCrud,
MesaDiretoraView, NivelInstrucaoCrud, MesaDiretoraView, NivelInstrucaoCrud,
ParlamentarCrud, ParlamentarCrud,
ParticipacaoParlamentarCrud, PartidoCrud, ParticipacaoParlamentarCrud, PartidoCrud,
ProposicaoParlamentarCrud, ProposicaoParlamentarCrud,
RelatoriaParlamentarCrud, RelatoriaParlamentarCrud,
remove_parlamentar_composicao,
SessaoLegislativaCrud, SessaoLegislativaCrud,
TipoAfastamentoCrud, TipoDependenteCrud, TipoAfastamentoCrud, TipoDependenteCrud,
TipoMilitarCrud, VotanteView) TipoMilitarCrud, VotanteView,
altera_field_mesa,
altera_field_mesa_public_view,
insere_parlamentar_composicao,
remove_parlamentar_composicao)
from .apps import AppConfig from .apps import AppConfig

2
sapl/parlamentares/views.py

@ -1,5 +1,5 @@
from django.contrib import messages 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.core.urlresolvers import reverse, reverse_lazy
from django.db.models import F, Q from django.db.models import F, Q
from django.http import JsonResponse from django.http import JsonResponse

5
sapl/relatorios/views.py

@ -1,7 +1,6 @@
from datetime import datetime
import re
import html import html
import re
from datetime import datetime
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
from django.http import Http404, HttpResponse from django.http import Http404, HttpResponse

4
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 import six
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from sapl.base.models import (CasaLegislativa, ProblemaMigracao, Argumento, from sapl.base.models import (Argumento, CasaLegislativa, Constraint,
Constraint) ProblemaMigracao)
from sapl.compilacao.models import (PerfilEstruturalTextoArticulado, from sapl.compilacao.models import (PerfilEstruturalTextoArticulado,
TipoDispositivo, TipoDispositivo,
TipoDispositivoRelationship) TipoDispositivoRelationship)

1
sapl/sessao/serializers.py

@ -2,6 +2,7 @@ from rest_framework import serializers
from .models import SessaoPlenaria from .models import SessaoPlenaria
class SessaoPlenariaSerializer(serializers.Serializer): class SessaoPlenariaSerializer(serializers.Serializer):
class Meta: class Meta:
model = SessaoPlenaria model = SessaoPlenaria

17
sapl/sessao/urls.py

@ -1,8 +1,8 @@
from django.conf.urls import include, url from django.conf.urls import include, url
from sapl.sessao.views import (AdicionarVariasMateriasExpediente, from sapl.sessao.views import (AdicionarVariasMateriasExpediente,
AdicionarVariasMateriasOrdemDia, AdicionarVariasMateriasOrdemDia, BancadaCrud,
BancadaCrud, BlocoCrud, CargoBancadaCrud, BlocoCrud, CargoBancadaCrud,
ExpedienteMateriaCrud, ExpedienteView, ExpedienteMateriaCrud, ExpedienteView,
MateriaOrdemDiaCrud, MesaView, OradorCrud, MateriaOrdemDiaCrud, MesaView, OradorCrud,
OradorExpedienteCrud, PainelView, OradorExpedienteCrud, PainelView,
@ -11,18 +11,17 @@ from sapl.sessao.views import (AdicionarVariasMateriasExpediente,
PesquisarPautaSessaoView, PesquisarPautaSessaoView,
PesquisarSessaoPlenariaView, PesquisarSessaoPlenariaView,
PresencaOrdemDiaView, PresencaView, PresencaOrdemDiaView, PresencaView,
ResumoOrdenacaoView, ResumoView, ResumoOrdenacaoView, ResumoView, SessaoCrud,
SessaoCrud, TipoExpedienteCrud, TipoExpedienteCrud, TipoResultadoVotacaoCrud,
TipoResultadoVotacaoCrud, TipoSessaoCrud, TipoSessaoCrud, VotacaoEditView,
VotacaoEditView, VotacaoExpedienteEditView, VotacaoExpedienteEditView,
VotacaoExpedienteView, VotacaoNominalEditView, VotacaoExpedienteView, VotacaoNominalEditView,
VotacaoNominalExpedienteEditView,
VotacaoNominalExpedienteDetailView, VotacaoNominalExpedienteDetailView,
VotacaoNominalExpedienteEditView,
VotacaoNominalExpedienteView, VotacaoNominalExpedienteView,
VotacaoNominalView, VotacaoView, VotacaoNominalView, VotacaoView,
abrir_votacao_expediente_view, abrir_votacao_expediente_view,
abrir_votacao_ordem_view, abrir_votacao_ordem_view, atualizar_mesa,
atualizar_mesa,
insere_parlamentar_composicao, insere_parlamentar_composicao,
mudar_ordem_materia_sessao, recuperar_materia, mudar_ordem_materia_sessao, recuperar_materia,
recuperar_numero_sessao, recuperar_numero_sessao,

49
sapl/sessao/views.py

@ -37,9 +37,8 @@ from sapl.sessao.forms import ExpedienteMateriaForm, OrdemDiaForm
from .forms import (AdicionarVariasMateriasFilterSet, ExpedienteForm, from .forms import (AdicionarVariasMateriasFilterSet, ExpedienteForm,
ListMateriaForm, MesaForm, OradorExpedienteForm, ListMateriaForm, MesaForm, OradorExpedienteForm,
OradorForm, PautaSessaoFilterSet, PresencaForm, OradorForm, PautaSessaoFilterSet, PresencaForm,
ResumoOrdenacaoForm, ResumoOrdenacaoForm, SessaoPlenariaFilterSet,
SessaoPlenariaFilterSet, VotacaoEditForm, VotacaoForm, VotacaoEditForm, VotacaoForm, VotacaoNominalForm)
VotacaoNominalForm)
from .models import (Bancada, Bloco, CargoBancada, CargoMesa, from .models import (Bancada, Bloco, CargoBancada, CargoMesa,
ExpedienteMateria, ExpedienteSessao, IntegranteMesa, ExpedienteMateria, ExpedienteSessao, IntegranteMesa,
MateriaLegislativa, Orador, OradorExpediente, OrdemDia, MateriaLegislativa, Orador, OradorExpediente, OrdemDia,
@ -1584,6 +1583,8 @@ def fechar_votacao_materia(materia):
for r in registro_votacao: for r in registro_votacao:
r.delete() r.delete()
if materia.resultado:
materia.resultado = ''
materia.votacao_aberta = False materia.votacao_aberta = False
materia.save() materia.save()
@ -1607,8 +1608,9 @@ class VotacaoNominalAbstract(SessaoPermissionMixin):
except ObjectDoesNotExist: except ObjectDoesNotExist:
raise Http404() raise Http404()
total = PresencaOrdemDia.objects.filter( presentes = PresencaOrdemDia.objects.filter(
sessao_plenaria_id=ordem.sessao_plenaria_id).count() sessao_plenaria_id=ordem.sessao_plenaria_id)
total = presentes.count()
materia_votacao = ordem materia_votacao = ordem
@ -1627,8 +1629,9 @@ class VotacaoNominalAbstract(SessaoPermissionMixin):
except ObjectDoesNotExist: except ObjectDoesNotExist:
raise Http404() raise Http404()
total = SessaoPlenariaPresenca.objects.filter( presentes = SessaoPlenariaPresenca.objects.filter(
sessao_plenaria_id=expediente.sessao_plenaria_id).count() sessao_plenaria_id=expediente.sessao_plenaria_id)
total = presentes.count()
materia_votacao = expediente materia_votacao = expediente
@ -1637,10 +1640,9 @@ class VotacaoNominalAbstract(SessaoPermissionMixin):
' ', ' ', strip_tags( ' ', ' ', strip_tags(
materia_votacao.observacao))} materia_votacao.observacao))}
context = {'materia': materia, 'object': self.get_object(), context = {'materia': materia, 'object': self.get_object(),
'parlamentares': self.get_parlamentares( 'parlamentares': self.get_parlamentares(presentes),
materia_votacao.materia), 'tipos': self.get_tipos_votacao(),
'tipos': self.get_tipos_votacao(), 'total': total}
'total': total}
return self.render_to_response(context) return self.render_to_response(context)
@ -1754,12 +1756,9 @@ class VotacaoNominalAbstract(SessaoPermissionMixin):
else: else:
return self.form_invalid(form) return self.form_invalid(form)
def get_parlamentares(self, materia): def get_parlamentares(self, presencas):
self.object = self.get_object() self.object = self.get_object()
presencas = PresencaOrdemDia.objects.filter(
sessao_plenaria_id=self.object.id
)
presentes = [p.parlamentar for p in presencas] presentes = [p.parlamentar for p in presencas]
if self.ordem: if self.ordem:
@ -1858,7 +1857,7 @@ class VotacaoNominalEditAbstract(SessaoPermissionMixin):
ordem_id = kwargs['oid'] ordem_id = kwargs['oid']
try: try:
ordem = OrdemDia.objects.get(id=ordem_id) materia_votacao = OrdemDia.objects.get(id=ordem_id)
except ObjectDoesNotExist: except ObjectDoesNotExist:
raise Http404() raise Http404()
@ -1866,25 +1865,13 @@ class VotacaoNominalEditAbstract(SessaoPermissionMixin):
expediente_id = kwargs['oid'] expediente_id = kwargs['oid']
try: try:
expediente = ExpedienteMateria.objects.get(id=expediente_id) materia_votacao = ExpedienteMateria.objects.get(
id=expediente_id)
except ObjectDoesNotExist: except ObjectDoesNotExist:
raise Http404() raise Http404()
if(int(request.POST['anular_votacao']) == 1): if(int(request.POST['anular_votacao']) == 1):
if self.ordem: fechar_votacao_materia(materia_votacao)
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()
return self.form_valid(form) return self.form_valid(form)

13
sapl/utils.py

@ -1,13 +1,15 @@
import hashlib
import logging
import os
import re
from datetime import date from datetime import date
from functools import wraps from functools import wraps
from subprocess import PIPE, call from subprocess import PIPE, call
from threading import Thread from threading import Thread
from unicodedata import normalize as unicodedata_normalize 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.helper import FormHelper
from crispy_forms.layout import HTML, Button from crispy_forms.layout import HTML, Button
from django import forms from django import forms
@ -20,13 +22,10 @@ from django.core.exceptions import ValidationError
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from floppyforms import ClearableFileInput from floppyforms import ClearableFileInput
from reversion.admin import VersionAdmin from reversion.admin import VersionAdmin
import django_filters
import magic
from sapl.crispy_layout_mixin import SaplFormLayout, form_actions, to_row from sapl.crispy_layout_mixin import SaplFormLayout, form_actions, to_row
from sapl.settings import BASE_DIR, PROJECT_DIR from sapl.settings import BASE_DIR, PROJECT_DIR
sapl_logger = logging.getLogger(BASE_DIR.name) sapl_logger = logging.getLogger(BASE_DIR.name)

Loading…
Cancel
Save