Browse Source

Refatoração

refatora-relatorio-tramitacao
João Rodrigues 5 years ago
parent
commit
686ab49c21
  1. 6
      sapl/base/forms.py
  2. 112
      sapl/base/views.py

6
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, ano = django_filters.ChoiceFilter(required=True,
label='Ano da Matéria', label='Ano da Matéria',
@ -1101,7 +1101,7 @@ class RelatorioMateriasTramitacaoilterSet(django_filters.FilterSet):
@property @property
def qs(self): def qs(self):
parent = super(RelatorioMateriasTramitacaoilterSet, self).qs parent = super(RelatorioMateriasTramitacaoFilterSet, self).qs
return parent.distinct().order_by('-ano', 'tipo', '-numero') return parent.distinct().order_by('-ano', 'tipo', '-numero')
class Meta: class Meta:
@ -1110,7 +1110,7 @@ class RelatorioMateriasTramitacaoilterSet(django_filters.FilterSet):
'tramitacao__status'] 'tramitacao__status']
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(RelatorioMateriasTramitacaoilterSet, self).__init__( super(RelatorioMateriasTramitacaoFilterSet, self).__init__(
*args, **kwargs) *args, **kwargs)
self.filters['tipo'].label = 'Tipo de Matéria' self.filters['tipo'].label = 'Tipo de Matéria'

112
sapl/base/views.py

@ -56,7 +56,7 @@ from .forms import (AlterarSenhaForm, CasaLegislativaForm,
RelatorioHistoricoTramitacaoFilterSet, RelatorioHistoricoTramitacaoFilterSet,
RelatorioMateriasPorAnoAutorTipoFilterSet, RelatorioMateriasPorAnoAutorTipoFilterSet,
RelatorioMateriasPorAutorFilterSet, RelatorioMateriasPorAutorFilterSet,
RelatorioMateriasTramitacaoilterSet, RelatorioMateriasTramitacaoFilterSet,
RelatorioPresencaSessaoFilterSet, RelatorioPresencaSessaoFilterSet,
RelatorioReuniaoFilterSet, UsuarioCreateForm, RelatorioReuniaoFilterSet, UsuarioCreateForm,
UsuarioEditForm, RelatorioNormasMesFilterSet, UsuarioEditForm, RelatorioNormasMesFilterSet,
@ -71,12 +71,19 @@ from .models import AppConfig, CasaLegislativa
def filtra_url_materias_em_tramitacao(data, qs, campo_url, local_ou_status): def filtra_url_materias_em_tramitacao(data, qs, campo_url, local_ou_status):
id_materias = [] id_materias = []
filtro_url = data[campo_url] filtro_url = data[campo_url]
if local_ou_status == 'local': if local_ou_status == 'local':
id_materias = [item.id for item in qs if item.tramitacao_set.order_by( for item in qs:
'-id').first().unidade_tramitacao_destino_id == int(filtro_url)] 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': elif local_ou_status == 'status':
id_materias = [item.id for item in qs if item.tramitacao_set.order_by( for item in qs:
'-id').first().status_id == int(filtro_url)] 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) return qs.filter(em_tramitacao=True, id__in=id_materias)
@ -705,51 +712,60 @@ class RelatorioAudienciaView(FilterView):
class RelatorioMateriasTramitacaoView(FilterView): class RelatorioMateriasTramitacaoView(FilterView):
model = MateriaLegislativa model = MateriaLegislativa
filterset_class = RelatorioMateriasTramitacaoilterSet filterset_class = RelatorioMateriasTramitacaoFilterSet
template_name = 'base/RelatorioMateriasPorTramitacao_filter.html' template_name = 'base/RelatorioMateriasPorTramitacao_filter.html'
paginate_by = 100 paginate_by = 100
qs2 = None total_resultados_tipos = {}
def get_filterset_kwargs(self, filterset_class): def get_filterset_kwargs(self, filterset_class):
data = super().get_filterset_kwargs(filterset_class) data = super().get_filterset_kwargs(filterset_class)
# import ipdb; ipdb.set_trace()
if data['data']: if data['data']:
qs = data['queryset'] qs = data['queryset']
qs.exclude(tramitacao__status__indicador='F') if data['data']['tramitacao__unidade_tramitacao_destino']:
# import ipdb; ipdb.set_trace()
if 'tramitacao__unidade_tramitacao_destino' in data:
qs = filtra_url_materias_em_tramitacao( 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( qs = filtra_url_materias_em_tramitacao(
data, qs, 'tramitacao__status', 'status') data['data'], qs, 'tramitacao__status', 'status')
ultimas_tramitacoes = Tramitacao.objects.filter( if data['data']['tipo']:
materia__ano=data['data']['ano']).values( ultimas_tramitacoes = Tramitacao.objects.filter(
'materia__ano', 'materia__numero').annotate(id=Max('id')) 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] ultimas_tramitacoes_ids = [i['id'] for i in ultimas_tramitacoes]
qs = qs.filter(tramitacao__id__in=ultimas_tramitacoes_ids) 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 return data
def get_queryset(self): def get_queryset(self):
qs = super().get_queryset() 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 return qs
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
@ -762,47 +778,35 @@ class RelatorioMateriasTramitacaoView(FilterView):
qr = self.request.GET.copy() qr = self.request.GET.copy()
context['qtdes'] = self.total_resultados_tipos
# 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['ano'] = (self.request.GET['ano']) context['ano'] = (self.request.GET['ano'])
if self.request.GET['tipo']: if self.request.GET['tipo']:
tipo = self.request.GET['tipo'] tipo = self.request.GET['tipo']
context['tipo'] = ( context['tipo'] = (
str(TipoMateriaLegislativa.objects.get(id=tipo))) str(TipoMateriaLegislativa.objects.get(id=tipo))
)
else: else:
context['tipo'] = '' context['tipo'] = ''
if self.request.GET['tramitacao__status']: if self.request.GET['tramitacao__status']:
tramitacao_status = self.request.GET['tramitacao__status'] tramitacao_status = self.request.GET['tramitacao__status']
context['tramitacao__status'] = ( context['tramitacao__status'] = (
str(StatusTramitacao.objects.get(id=tramitacao_status))) str(StatusTramitacao.objects.get(id=tramitacao_status))
)
else: else:
context['tramitacao__status'] = '' context['tramitacao__status'] = ''
if self.request.GET['tramitacao__unidade_tramitacao_destino']: if self.request.GET['tramitacao__unidade_tramitacao_destino']:
context['tramitacao__unidade_tramitacao_destino'] = (str(UnidadeTramitacao.objects.get( context['tramitacao__unidade_tramitacao_destino'] = (
id=self.request.GET['tramitacao__unidade_tramitacao_destino']))) str(UnidadeTramitacao.objects.get(
id=self.request.GET['tramitacao__unidade_tramitacao_destino']
))
)
else: else:
context['tramitacao__unidade_tramitacao_destino'] = '' context['tramitacao__unidade_tramitacao_destino'] = ''
context['filter_url'] = ('&' + qr.urlencode()) if len(qr) > 0 else '' context['filter_url'] = ('&' + qr.urlencode()) if len(qr) > 0 else ''
context['show_results'] = show_results_filter_set(qr) context['show_results'] = show_results_filter_set(qr)
paginator = context['paginator'] paginator = context['paginator']

Loading…
Cancel
Save