diff --git a/sapl/base/forms.py b/sapl/base/forms.py index f5d98e4a7..e0589ed81 100644 --- a/sapl/base/forms.py +++ b/sapl/base/forms.py @@ -1085,7 +1085,7 @@ class RelatorioAudienciaFilterSet(django_filters.FilterSet): ) -class RelatorioMateriasTramitacaoilterSet(django_filters.FilterSet): +class RelatorioMateriasTramitacaoFilterSet(django_filters.FilterSet): ano = django_filters.ChoiceFilter(required=True, label='Ano da Matéria', @@ -1101,7 +1101,7 @@ class RelatorioMateriasTramitacaoilterSet(django_filters.FilterSet): @property def qs(self): - parent = super(RelatorioMateriasTramitacaoilterSet, self).qs + parent = super(RelatorioMateriasTramitacaoFilterSet, self).qs return parent.distinct().order_by('-ano', 'tipo', '-numero') class Meta: @@ -1110,7 +1110,7 @@ class RelatorioMateriasTramitacaoilterSet(django_filters.FilterSet): 'tramitacao__status'] def __init__(self, *args, **kwargs): - super(RelatorioMateriasTramitacaoilterSet, self).__init__( + super(RelatorioMateriasTramitacaoFilterSet, self).__init__( *args, **kwargs) self.filters['tipo'].label = 'Tipo de Matéria' diff --git a/sapl/base/views.py b/sapl/base/views.py index e2f4b319e..6aec5e78f 100644 --- a/sapl/base/views.py +++ b/sapl/base/views.py @@ -56,7 +56,7 @@ from .forms import (AlterarSenhaForm, CasaLegislativaForm, RelatorioHistoricoTramitacaoFilterSet, RelatorioMateriasPorAnoAutorTipoFilterSet, RelatorioMateriasPorAutorFilterSet, - RelatorioMateriasTramitacaoilterSet, + RelatorioMateriasTramitacaoFilterSet, RelatorioPresencaSessaoFilterSet, RelatorioReuniaoFilterSet, UsuarioCreateForm, UsuarioEditForm, RelatorioNormasMesFilterSet, @@ -71,12 +71,19 @@ from .models import AppConfig, CasaLegislativa def filtra_url_materias_em_tramitacao(data, qs, campo_url, local_ou_status): id_materias = [] filtro_url = data[campo_url] + if local_ou_status == 'local': - id_materias = [item.id for item in qs if item.tramitacao_set.order_by( - '-id').first().unidade_tramitacao_destino_id == int(filtro_url)] + for item in qs: + f = item.tramitacao_set.order_by('-id').first() + if f: + if f.unidade_tramitacao_destino_id == int(filtro_url): + id_materias.append(item.id) elif local_ou_status == 'status': - id_materias = [item.id for item in qs if item.tramitacao_set.order_by( - '-id').first().status_id == int(filtro_url)] + for item in qs: + f = item.tramitacao_set.order_by('-id').first() + if f: + if f.status_id == int(filtro_url): + id_materias.append(item.id) return qs.filter(em_tramitacao=True, id__in=id_materias) @@ -705,51 +712,60 @@ class RelatorioAudienciaView(FilterView): class RelatorioMateriasTramitacaoView(FilterView): model = MateriaLegislativa - filterset_class = RelatorioMateriasTramitacaoilterSet + filterset_class = RelatorioMateriasTramitacaoFilterSet template_name = 'base/RelatorioMateriasPorTramitacao_filter.html' paginate_by = 100 - qs2 = None + total_resultados_tipos = {} def get_filterset_kwargs(self, filterset_class): data = super().get_filterset_kwargs(filterset_class) - # import ipdb; ipdb.set_trace() - if data['data']: qs = data['queryset'] - qs.exclude(tramitacao__status__indicador='F') - - # import ipdb; ipdb.set_trace() - - if 'tramitacao__unidade_tramitacao_destino' in data: + if data['data']['tramitacao__unidade_tramitacao_destino']: qs = filtra_url_materias_em_tramitacao( - data, qs, 'tramitacao__unidade_tramitacao_destino', 'local') + data['data'], qs, 'tramitacao__unidade_tramitacao_destino', 'local') - if 'tramitacao__status' in data: + if data['data']['tramitacao__status']: qs = filtra_url_materias_em_tramitacao( - data, qs, 'tramitacao__status', 'status') - - ultimas_tramitacoes = Tramitacao.objects.filter( - materia__ano=data['data']['ano']).values( - 'materia__ano', 'materia__numero').annotate(id=Max('id')) - + data['data'], qs, 'tramitacao__status', 'status') + + if data['data']['tipo']: + ultimas_tramitacoes = Tramitacao.objects.filter( + materia__ano=data['data']['ano'], + materia__tipo=data['data']['tipo'] + ).values( + 'materia__ano', 'materia__numero' + ).annotate(id=Max('id')) + else: + ultimas_tramitacoes = Tramitacao.objects.filter( + materia__ano=data['data']['ano'] + ).values( + 'materia__ano', 'materia__numero' + ).annotate(id=Max('id')) ultimas_tramitacoes_ids = [i['id'] for i in ultimas_tramitacoes] - qs = qs.filter(tramitacao__id__in=ultimas_tramitacoes_ids) - data['queryset'] = qs - - # import ipdb; ipdb.set_trace() - self.qs2 = qs + data['queryset'] = qs + + qtdes = { tipo:0 for tipo in TipoMateriaLegislativa.objects.all()} + for i in qs: + qtdes[i.tipo] += 1 + # remove as entradas de valor igual a zero + qtdes = {k:v for k,v in qtdes.items() if v > 0} + self.total_resultados_tipos = qtdes return data def get_queryset(self): qs = super().get_queryset() - qs = qs.select_related('tipo').filter(em_tramitacao=True).order_by('-ano', '-numero') + qs = qs.select_related('tipo').filter( + em_tramitacao=True).exclude( + tramitacao__status__indicador='F' + ).order_by('-ano', '-numero') return qs def get_context_data(self, **kwargs): @@ -762,47 +778,35 @@ class RelatorioMateriasTramitacaoView(FilterView): qr = self.request.GET.copy() - - # qs = context['object_list'] - # import ipdb; ipdb.set_trace() - # - # if qr.get('tramitacao__unidade_tramitacao_destino'): - # qs = filtra_url_materias_em_tramitacao( - # qr, qs, 'tramitacao__unidade_tramitacao_destino', 'local') - # if qr.get('tramitacao__status'): - # qs = filtra_url_materias_em_tramitacao( - # qr, qs, 'tramitacao__status', 'status') - # - # li = [li1 for li1 in qs if li1.tramitacao_set.last() and li1.tramitacao_set.last().status.indicador != 'F'] - # context['object_list'] = li - - qtdes = {} - for tipo in TipoMateriaLegislativa.objects.all(): - li = context['object_list'] - qtde = sum(1 for i in self.qs2 if i.tipo_id==tipo.id) - if qtde > 0: - qtdes[tipo] = qtde - context['qtdes'] = qtdes + context['qtdes'] = self.total_resultados_tipos context['ano'] = (self.request.GET['ano']) + if self.request.GET['tipo']: tipo = self.request.GET['tipo'] context['tipo'] = ( - str(TipoMateriaLegislativa.objects.get(id=tipo))) + str(TipoMateriaLegislativa.objects.get(id=tipo)) + ) else: context['tipo'] = '' + if self.request.GET['tramitacao__status']: tramitacao_status = self.request.GET['tramitacao__status'] context['tramitacao__status'] = ( - str(StatusTramitacao.objects.get(id=tramitacao_status))) + str(StatusTramitacao.objects.get(id=tramitacao_status)) + ) else: context['tramitacao__status'] = '' + if self.request.GET['tramitacao__unidade_tramitacao_destino']: - context['tramitacao__unidade_tramitacao_destino'] = (str(UnidadeTramitacao.objects.get( - id=self.request.GET['tramitacao__unidade_tramitacao_destino']))) + context['tramitacao__unidade_tramitacao_destino'] = ( + str(UnidadeTramitacao.objects.get( + id=self.request.GET['tramitacao__unidade_tramitacao_destino'] + )) + ) else: context['tramitacao__unidade_tramitacao_destino'] = '' + context['filter_url'] = ('&' + qr.urlencode()) if len(qr) > 0 else '' - context['show_results'] = show_results_filter_set(qr) paginator = context['paginator']