Browse Source

Merge 686ab49c21 into 9f29a46df4

pull/2946/merge
Edward 6 years ago
committed by GitHub
parent
commit
b43322c8e9
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 8
      sapl/base/forms.py
  2. 127
      sapl/base/views.py
  3. 3
      sapl/templates/base/RelatorioMateriasPorTramitacao_filter.html

8
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'
@ -1572,4 +1572,4 @@ class RelatorioNormasPorAutorFilterSet(django_filters.FilterSet):
HTML(autor_modal), HTML(autor_modal),
row3, row3,
form_actions(label='Pesquisar')) form_actions(label='Pesquisar'))
) )

127
sapl/base/views.py

@ -13,7 +13,8 @@ from django.core.exceptions import ObjectDoesNotExist, PermissionDenied, Validat
from django.core.mail import send_mail from django.core.mail import send_mail
from django.core.urlresolvers import reverse, reverse_lazy from django.core.urlresolvers import reverse, reverse_lazy
from django.db import connection from django.db import connection
from django.db.models import Count, Q, ProtectedError from django.db.models import Count, Q, ProtectedError, Max
from django.shortcuts import render
from django.http import Http404, HttpResponseRedirect, JsonResponse from django.http import Http404, HttpResponseRedirect, JsonResponse
from django.template import TemplateDoesNotExist from django.template import TemplateDoesNotExist
from django.template.loader import get_template from django.template.loader import get_template
@ -37,7 +38,7 @@ from sapl.comissoes.models import Reuniao, Comissao
from sapl.crud.base import CrudAux, make_pagination from sapl.crud.base import CrudAux, make_pagination
from sapl.materia.models import (Autoria, MateriaLegislativa, Proposicao, Anexada, from sapl.materia.models import (Autoria, MateriaLegislativa, Proposicao, Anexada,
TipoMateriaLegislativa, StatusTramitacao, UnidadeTramitacao, TipoMateriaLegislativa, StatusTramitacao, UnidadeTramitacao,
DocumentoAcessorio, TipoDocumento) DocumentoAcessorio, TipoDocumento, Tramitacao)
from sapl.norma.models import (NormaJuridica, TipoNormaJuridica, NormaEstatisticas) from sapl.norma.models import (NormaJuridica, TipoNormaJuridica, NormaEstatisticas)
from sapl.parlamentares.models import Parlamentar, Legislatura, Mandato, Filiacao, SessaoLegislativa from sapl.parlamentares.models import Parlamentar, Legislatura, Mandato, Filiacao, SessaoLegislativa
from sapl.protocoloadm.models import (Protocolo, TipoDocumentoAdministrativo, from sapl.protocoloadm.models import (Protocolo, TipoDocumentoAdministrativo,
@ -55,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,
@ -67,15 +68,22 @@ from .forms import (AlterarSenhaForm, CasaLegislativaForm,
from .models import AppConfig, CasaLegislativa from .models import AppConfig, CasaLegislativa
def filtra_url_materias_em_tramitacao(qr, 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 = qr[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)
@ -704,9 +712,62 @@ 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
total_resultados_tipos = {}
def get_filterset_kwargs(self, filterset_class):
data = super().get_filterset_kwargs(filterset_class)
if data['data']:
qs = data['queryset']
if data['data']['tramitacao__unidade_tramitacao_destino']:
qs = filtra_url_materias_em_tramitacao(
data['data'], qs, 'tramitacao__unidade_tramitacao_destino', 'local')
if data['data']['tramitacao__status']:
qs = filtra_url_materias_em_tramitacao(
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
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).exclude(
tramitacao__status__indicador='F'
).order_by('-ano', '-numero')
return qs
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(RelatorioMateriasTramitacaoView, context = super(RelatorioMateriasTramitacaoView,
self).get_context_data(**kwargs) self).get_context_data(**kwargs)
@ -716,48 +777,46 @@ class RelatorioMateriasTramitacaoView(FilterView):
return context return context
qr = self.request.GET.copy() qr = self.request.GET.copy()
qs = context['object_list']
qs = qs.filter(em_tramitacao=True)
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 = {} context['qtdes'] = self.total_resultados_tipos
for tipo in TipoMateriaLegislativa.objects.all():
li = context['object_list']
qtde = sum(1 for i in li 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']
page_obj = context['page_obj']
context['page_range'] = make_pagination(
page_obj.number, paginator.num_pages
)
context['NO_ENTRIES_MSG'] = 'Nenhum encontrado.'
return context return context

3
sapl/templates/base/RelatorioMateriasPorTramitacao_filter.html

@ -56,5 +56,6 @@
</tbody> </tbody>
</table> </table>
{% endif %} {% endif %}
{% include 'paginacao.html' %}
<br/>
{% endblock base_content %} {% endblock base_content %}

Loading…
Cancel
Save