diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py index fc31c1464..97d7156b5 100644 --- a/sapl/materia/forms.py +++ b/sapl/materia/forms.py @@ -766,14 +766,10 @@ class MateriaLegislativaFilterSet(django_filters.FilterSet): def pega_ultima_tramitacao(): - ultimas_tramitacoes = Tramitacao.objects.values( + return Tramitacao.objects.values( 'materia_id').annotate(data_encaminhamento=Max( 'data_encaminhamento'), - id=Max('id')).values_list('id') - - lista = [item for sublist in ultimas_tramitacoes for item in sublist] - - return lista + id=Max('id')).values_list('id', flat=True) def filtra_tramitacao_status(status): diff --git a/sapl/protocoloadm/forms.py b/sapl/protocoloadm/forms.py index e7b418253..22e649459 100644 --- a/sapl/protocoloadm/forms.py +++ b/sapl/protocoloadm/forms.py @@ -7,6 +7,7 @@ from django import forms from django.core.exceptions import (MultipleObjectsReturned, ObjectDoesNotExist, ValidationError) from django.db import models +from django.db.models import Max from django.forms import ModelForm from django.utils import timezone from django.utils.translation import ugettext_lazy as _ @@ -873,3 +874,34 @@ class DesvincularMateriaForm(forms.Form): form_actions(label='Desvincular') ) ) + + +def pega_ultima_tramitacao_adm(): + return TramitacaoAdministrativo.objects.values( + 'materia_id').annotate(data_encaminhamento=Max( + 'data_encaminhamento'), + id=Max('id')).values_list('id', flat=True) + + +def filtra_tramitacao_adm_status(status): + lista = pega_ultima_tramitacao_adm() + return TramitacaoAdministrativo.objects.filter( + id__in=lista, + status=status).distinct().values_list('materia_id', flat=True) + + +def filtra_tramitacao_adm_destino(destino): + lista = pega_ultima_tramitacao_adm() + return TramitacaoAdministrativo.objects.filter( + id__in=lista, + unidade_tramitacao_destino=destino).distinct().values_list( + 'materia_id', flat=True) + + +def filtra_tramitacao_adm_destino_and_status(status, destino): + lista = pega_ultima_tramitacao_adm() + return TramitacaoAdministrativo.objects.filter( + id__in=lista, + status=status, + unidade_tramitacao_destino=destino).distinct().values_list( + 'materia_id', flat=True) diff --git a/sapl/protocoloadm/views.py b/sapl/protocoloadm/views.py index 4a4115f69..3350c81cf 100644 --- a/sapl/protocoloadm/views.py +++ b/sapl/protocoloadm/views.py @@ -31,7 +31,8 @@ from .forms import (AnularProcoloAdmForm, DocumentoAcessorioAdministrativoForm, DocumentoAdministrativoFilterSet, DocumentoAdministrativoForm, ProtocoloDocumentForm, ProtocoloFilterSet, ProtocoloMateriaForm, - TramitacaoAdmEditForm, TramitacaoAdmForm, DesvincularDocumentoForm, DesvincularMateriaForm) + TramitacaoAdmEditForm, TramitacaoAdmForm, DesvincularDocumentoForm, DesvincularMateriaForm, + filtra_tramitacao_adm_destino_and_status, filtra_tramitacao_adm_destino, filtra_tramitacao_adm_status) from .models import (DocumentoAcessorioAdministrativo, DocumentoAdministrativo, StatusTramitacaoAdministrativo, TipoDocumentoAdministrativo, TramitacaoAdministrativo) @@ -543,13 +544,34 @@ class PesquisarDocumentoAdministrativoView(DocumentoAdministrativoMixin, kwargs = {'data': self.request.GET or None} + status_tramitacao = self.request.GET.get('tramitacao__status') + unidade_destino = self.request.GET.get( + 'tramitacao__unidade_tramitacao_destino') + qs = self.get_queryset() - qs = qs.distinct() + if status_tramitacao and unidade_destino: + lista = filtra_tramitacao_adm_destino_and_status(status_tramitacao, + unidade_destino) + qs = qs.filter(id__in=lista).distinct() + + elif status_tramitacao: + lista = filtra_tramitacao_adm_status(status_tramitacao) + qs = qs.filter(id__in=lista).distinct() + + elif unidade_destino: + lista = filtra_tramitacao_adm_destino(unidade_destino) + qs = qs.filter(id__in=lista).distinct() if 'o' in self.request.GET and not self.request.GET['o']: qs = qs.order_by('-ano', '-numero') + qs = qs.prefetch_related("documentoacessorioadministrativo_set", + "tramitacaoadministrativo_set", + "tramitacaoadministrativo_set__status", + "tramitacaoadministrativo_set__unidade_tramitacao_local", + "tramitacaoadministrativo_set__unidade_tramitacao_destino") + kwargs.update({ 'queryset': qs, }) diff --git a/sapl/templates/protocoloadm/documentoadministrativo_filter.html b/sapl/templates/protocoloadm/documentoadministrativo_filter.html index b15726772..83eb1bd40 100644 --- a/sapl/templates/protocoloadm/documentoadministrativo_filter.html +++ b/sapl/templates/protocoloadm/documentoadministrativo_filter.html @@ -37,11 +37,26 @@