diff --git a/sapl/comissoes/views.py b/sapl/comissoes/views.py index aa16b6a15..0c315f0d9 100644 --- a/sapl/comissoes/views.py +++ b/sapl/comissoes/views.py @@ -55,9 +55,6 @@ class ComposicaoCrud(MasterDetailCrud): def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) -# context['composicao_pk'] = context['composicao_list'].last( -# ).pk if self.take_composicao_pk( -# ) == 0 else self.take_composicao_pk() composicao_pk = self.take_composicao_pk() diff --git a/sapl/materia/views.py b/sapl/materia/views.py index 299532733..f123a57c3 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -2,6 +2,7 @@ from datetime import datetime from random import choice from string import ascii_letters, digits +import weasyprint from crispy_forms.helper import FormHelper from crispy_forms.layout import HTML from django.contrib import messages @@ -19,8 +20,8 @@ from django.views.generic import CreateView, ListView, TemplateView, UpdateView from django.views.generic.base import RedirectView from django.views.generic.edit import FormView from django_filters.views import FilterView -import weasyprint +import sapl from sapl.base.models import Autor, CasaLegislativa from sapl.comissoes.models import Comissao, Participacao from sapl.compilacao.models import (STATUS_TA_IMMUTABLE_RESTRICT, @@ -40,9 +41,7 @@ from sapl.norma.models import LegislacaoCitada from sapl.protocoloadm.models import Protocolo from sapl.utils import (TURNO_TRAMITACAO_CHOICES, YES_NO_CHOICES, autor_label, autor_modal, gerar_hash_arquivo, get_base_url, - montar_row_autor, show_results_filter_set) -import sapl - + montar_row_autor, show_results_filter_set, get_mime_type_from_file_extension) from .email_utils import do_envia_email_confirmacao from .forms import (AcessorioEmLoteFilterSet, AcompanhamentoMateriaForm, AdicionarVariasAutoriasFilterSet, DespachoInicialForm, @@ -62,7 +61,6 @@ from .models import (AcompanhamentoMateria, Anexada, AssuntoMateria, Autoria, TipoProposicao, Tramitacao, UnidadeTramitacao) from .signals import tramitacao_signal - AssuntoMateriaCrud = Crud.build(AssuntoMateria, 'assunto_materia') OrigemCrud = Crud.build(Origem, '') @@ -81,9 +79,9 @@ TipoFimRelatoriaCrud = CrudAux.build( def autores_ja_adicionados(materia_pk): - autorias = Autoria.objects.filter(materia_id=materia_pk) - pks = [a.autor.pk for a in autorias] - return pks + autorias = Autoria.objects.filter(materia_id=materia_pk).values_list( + 'autor_id', flat=True) + return autorias def proposicao_texto(request, pk): @@ -96,12 +94,7 @@ def proposicao_texto(request, pk): arquivo = proposicao.texto_original - ext = arquivo.name.split('.')[-1] - mime = '' - if ext == 'odt': - mime = 'application/vnd.oasis.opendocument.text' - else: - mime = "application/%s" % (ext,) + mime = get_mime_type_from_file_extension(arquivo.name) with open(arquivo.path, 'rb') as f: data = f.read() @@ -176,14 +169,14 @@ class CriarProtocoloMateriaView(CreateView): except ObjectDoesNotExist: raise Http404() - materias_ano = MateriaLegislativa.objects.filter( - ano=protocolo.ano, - tipo=protocolo.tipo_materia).order_by('-numero') - - if materias_ano: - numero = materias_ano.first().numero + 1 - else: - numero = 1 + numero = 1 + try: + materias_ano = MateriaLegislativa.objects.filter( + ano=protocolo.ano, + tipo=protocolo.tipo_materia).latest('numero') + numero = materias_ano.numero + 1 + except ObjectDoesNotExist: + pass # numero ficou com o valor padrão 1 acima context['form'].fields['tipo'].initial = protocolo.tipo_materia context['form'].fields['numero'].initial = numero @@ -489,7 +482,8 @@ class ConfirmarProposicao(PermissionRequiredForAppCrudMixin, UpdateView): def get_object(self, queryset=None): try: - """Não deve haver acesso na rotina de confirmação a proposições: + """ + Não deve haver acesso na rotina de confirmação a proposições: já recebidas -> data_recebimento != None não enviadas -> data_envio == None """ @@ -901,11 +895,9 @@ class RelatoriaCrud(MasterDetailCrud): participacao = Participacao.objects.filter( composicao=composicao) - parlamentares = [] - for p in participacao: - if p.titular: - parlamentares.append( - [p.parlamentar.id, p.parlamentar.nome_parlamentar]) + parlamentares = [[p.parlamentar.id, p.parlamentar.nome_parlamentar] for + p in participacao if p.titular] + context['form'].fields['parlamentar'].choices = parlamentares return context diff --git a/sapl/parlamentares/views.py b/sapl/parlamentares/views.py index e7b37f358..9a289cc20 100644 --- a/sapl/parlamentares/views.py +++ b/sapl/parlamentares/views.py @@ -223,20 +223,20 @@ class ColigacaoCrud(CrudAux): def json_date_convert(date): - ''' + """ :param date: recebe a data de uma chamada ajax no formato de string "dd/mm/yyyy" :return: - ''' + """ return datetime.strptime(date, "%d/%m/%Y").date() def frente_atualiza_lista_parlamentares(request): - ''' + """ :param request: recebe os parâmetros do GET da chamada Ajax :return: retorna a lista atualizada dos parlamentares - ''' + """ ativos = json.loads(request.GET['ativos']) parlamentares = Parlamentar.objects.all() @@ -258,9 +258,9 @@ def frente_atualiza_lista_parlamentares(request): def parlamentares_frente_selected(request): - ''' + """ :return: Lista com o id dos parlamentares em uma frente - ''' + """ try: frente = Frente.objects.get(id=int(request.GET['frente_id'])) except ObjectDoesNotExist: @@ -445,12 +445,12 @@ class ParlamentarCrud(Crud): return 'ParlamentarCreate' def form_valid(self, form): - ''' + """ Reimplementa form_valid devido ao save de ParlamentarCreateForm ser específico, sendo necessário isolar padrão do crud que aciona form.save(commit=False) para registrar dados de auditoria se o model implementá-los, bem como de container se também implement. - ''' + """ return super(Crud.CreateView, self).form_valid(form) class ListView(Crud.ListView): diff --git a/sapl/protocoloadm/views.py b/sapl/protocoloadm/views.py index 9a924c45e..eb2a18852 100644 --- a/sapl/protocoloadm/views.py +++ b/sapl/protocoloadm/views.py @@ -22,8 +22,7 @@ from sapl.crud.base import Crud, CrudAux, MasterDetailCrud, make_pagination from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa from sapl.parlamentares.models import Legislatura, Parlamentar from sapl.protocoloadm.models import Protocolo -from sapl.utils import create_barcode, get_client_ip, show_results_filter_set - +from sapl.utils import create_barcode, get_client_ip, show_results_filter_set, get_mime_type_from_file_extension from .forms import (AnularProcoloAdmForm, DocumentoAcessorioAdministrativoForm, DocumentoAdministrativoFilterSet, DocumentoAdministrativoForm, ProtocoloDocumentForm, @@ -55,12 +54,7 @@ def doc_texto_integral(request, pk): if documento.texto_integral: arquivo = documento.texto_integral - ext = arquivo.name.split('.')[-1] - mime = '' - if ext == 'odt': - mime = 'application/vnd.oasis.opendocument.text' - else: - mime = "application/%s" % (ext,) + mime = get_mime_type_from_file_extension(arquivo.name) with open(arquivo.path, 'rb') as f: data = f.read() @@ -163,9 +157,7 @@ class ProtocoloPesquisaView(PermissionRequiredMixin, FilterView): kwargs = {'data': self.request.GET or None} - qs = self.get_queryset().order_by('ano', 'numero') - - qs = qs.distinct() + qs = self.get_queryset().order_by('ano', 'numero').distinct() if 'o' in self.request.GET and not self.request.GET['o']: qs = qs.order_by('-ano', '-numero') @@ -197,7 +189,7 @@ class ProtocoloPesquisaView(PermissionRequiredMixin, FilterView): # Provavelmente você criou um novo campo no Form/FilterSet # Então a ordem da URL está diferente data = self.filterset.data - if (data and data.get('numero') is not None): + if data and data.get('numero') is not None: url = "&" + str(self.request.environ['QUERY_STRING']) if url.startswith("&page"): ponto_comeco = url.find('numero=') - 1 @@ -552,7 +544,7 @@ class PesquisarDocumentoAdministrativoView(DocumentoAdministrativoMixin, # Provavelmente você criou um novo campo no Form/FilterSet # Então a ordem da URL está diferente data = self.filterset.data - if (data and data.get('tipo') is not None): + if data and data.get('tipo') is not None: url = "&" + str(self.request.environ['QUERY_STRING']) if url.startswith("&page"): ponto_comeco = url.find('tipo=') - 1 diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index 18c379ff2..887ade0fc 100644 --- a/sapl/sessao/views.py +++ b/sapl/sessao/views.py @@ -577,14 +577,14 @@ def recuperar_numero_sessao(request): tipo__pk=request.GET['tipo'], sessao_legislativa=request.GET['sessao_legislativa']).last() except ObjectDoesNotExist: - response = JsonResponse({'numero': 1}) + numero = 1 else: if sessao: - response = JsonResponse({'numero': sessao.numero + 1}) + numero = sessao.numero + 1 else: - response = JsonResponse({'numero': 1}) + numero = 1 - return response + return JsonResponse({'numero': numero}) def sessao_legislativa_legislatura_ajax(request): @@ -1764,21 +1764,16 @@ class VotacaoNominalAbstract(SessaoPermissionMixin): if self.ordem: ordem_id = kwargs['oid'] try: - ordem = OrdemDia.objects.get(id=ordem_id) + materia_votacao = OrdemDia.objects.get(id=ordem_id) except ObjectDoesNotExist: raise Http404() - - materia_votacao = ordem - elif self.expediente: expediente_id = kwargs['oid'] try: - expediente = ExpedienteMateria.objects.get(id=expediente_id) + materia_votacao = ExpedienteMateria.objects.get(id=expediente_id) except ObjectDoesNotExist: raise Http404() - materia_votacao = expediente - if 'cancelar-votacao' in request.POST: fechar_votacao_materia(materia_votacao) @@ -2157,9 +2152,9 @@ class VotacaoNominalExpedienteDetailView(DetailView): class VotacaoExpedienteView(SessaoPermissionMixin): - ''' + """ Votação Simbólica e Secreta - ''' + """ template_name = 'sessao/votacao/votacao.html' form_class = VotacaoForm @@ -2278,9 +2273,9 @@ class VotacaoExpedienteView(SessaoPermissionMixin): class VotacaoExpedienteEditView(SessaoPermissionMixin): - ''' + """ Votação Simbólica e Secreta - ''' + """ template_name = 'sessao/votacao/votacao_edit.html' form_class = VotacaoEditForm @@ -2554,7 +2549,7 @@ class PesquisarSessaoPlenariaView(FilterView): # Provavelmente você criou um novo campo no Form/FilterSet # Então a ordem da URL está diferente data = self.filterset.data - if (data and data.get('data_inicio__year') is not None): + if data and data.get('data_inicio__year') is not None: url = "&" + str(self.request.environ['QUERY_STRING']) if url.startswith("&page"): ponto_comeco = url.find('data_inicio__year=') - 1 diff --git a/sapl/utils.py b/sapl/utils.py index 37565148d..6e690eb5e 100644 --- a/sapl/utils.py +++ b/sapl/utils.py @@ -665,3 +665,12 @@ def sort_lista_chave(lista, chave): """ lista_ordenada = sorted(lista, key=itemgetter(chave)) return lista_ordenada + + +def get_mime_type_from_file_extension(filename): + ext = filename.split('.')[-1] + if ext == 'odt': + mime = 'application/vnd.oasis.opendocument.text' + else: + mime = "application/%s" % (ext,) + return mime \ No newline at end of file