diff --git a/sapl/base/forms.py b/sapl/base/forms.py index b04fddbd6..fa7856932 100644 --- a/sapl/base/forms.py +++ b/sapl/base/forms.py @@ -30,6 +30,7 @@ from sapl.materia.models import ( MateriaLegislativa, UnidadeTramitacao, StatusTramitacao) from sapl.norma.models import (NormaJuridica, NormaEstatisticas) from sapl.parlamentares.models import SessaoLegislativa, Partido +from sapl.protocoloadm.models import DocumentoAdministrativo from sapl.sessao.models import SessaoPlenaria from sapl.settings import MAX_IMAGE_UPLOAD_SIZE from sapl.utils import (RANGE_ANOS, YES_NO_CHOICES, @@ -1422,4 +1423,43 @@ class PartidoForm(FileFieldCheckMixin, ModelForm): if cleaned_data['data_criacao'] > cleaned_data['data_extincao']: raise ValidationError("Certifique-se de que a data de criação seja anterior à data de extinção.") - return cleaned_data \ No newline at end of file + return cleaned_data + + +class RelatorioHistoricoTramitacaoAdmFilterSet(django_filters.FilterSet): + + @property + def qs(self): + parent = super(RelatorioHistoricoTramitacaoAdmFilterSet, self).qs + return parent.distinct().prefetch_related('tipo').order_by('-ano', 'tipo', 'numero') + + class Meta(FilterOverridesMetaMixin): + model = DocumentoAdministrativo + fields = ['tipo', 'tramitacaoadministrativo__status', + 'tramitacaoadministrativo__data_tramitacao', + 'tramitacaoadministrativo__unidade_tramitacao_local', + 'tramitacaoadministrativo__unidade_tramitacao_destino'] + + def __init__(self, *args, **kwargs): + super(RelatorioHistoricoTramitacaoAdmFilterSet, self).__init__( + *args, **kwargs) + + self.filters['tipo'].label = 'Tipo de Documento' + self.filters['tramitacaoadministrativo__status'].label = _('Status') + self.filters['tramitacaoadministrativo__unidade_tramitacao_local'].label = _('Unidade Local (Origem)') + self.filters['tramitacaoadministrativo__unidade_tramitacao_destino'].label = _('Unidade Destino') + + row1 = to_row([('tramitacaoadministrativo__data_tramitacao', 12)]) + row2 = to_row([('tramitacaoadministrativo__unidade_tramitacao_local', 6), + ('tramitacaoadministrativo__unidade_tramitacao_destino', 6)]) + row3 = to_row( + [('tipo', 6), + ('tramitacaoadministrativo__status', 6)]) + + self.form.helper = SaplFormHelper() + self.form.helper.form_method = 'GET' + self.form.helper.layout = Layout( + Fieldset(_(''), + row1, row2, row3, + form_actions(label='Pesquisar')) + ) diff --git a/sapl/base/urls.py b/sapl/base/urls.py index 05aed1b2b..ec48b6acc 100644 --- a/sapl/base/urls.py +++ b/sapl/base/urls.py @@ -41,7 +41,8 @@ from .views import (AlterarSenha, AppConfigCrud, CasaLegislativaCrud, ListarAutoresDuplicadosView, ListarBancadaComissaoAutorExternoView, ListarLegislaturaInfindavelView, - pesquisa_textual) + pesquisa_textual, + RelatorioHistoricoTramitacaoAdmView) app_name = AppConfig.name @@ -153,6 +154,9 @@ urlpatterns = [ url(r'^sistema/relatorios/audiencia$', RelatorioAudienciaView.as_view(), name='audiencia'), + url(r'^sistema/relatorios/historico-tramitacoesadm$', + RelatorioHistoricoTramitacaoAdmView.as_view(), + name='historico_tramitacoes_adm'), url(r'^email/validate/(?P[0-9A-Za-z_\-]+)/' '(?P[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})$', diff --git a/sapl/base/views.py b/sapl/base/views.py index 1ea862633..28d89929d 100644 --- a/sapl/base/views.py +++ b/sapl/base/views.py @@ -42,7 +42,9 @@ from sapl.materia.models import (Autoria, MateriaLegislativa, Proposicao, TipoMateriaLegislativa, StatusTramitacao, UnidadeTramitacao) from sapl.norma.models import (NormaJuridica, NormaEstatisticas) from sapl.parlamentares.models import Parlamentar, Legislatura, Mandato, Filiacao -from sapl.protocoloadm.models import Protocolo +from sapl.protocoloadm.models import (Protocolo, TipoDocumentoAdministrativo, + StatusTramitacaoAdministrativo, + DocumentoAdministrativo) from sapl.sessao.models import (PresencaOrdemDia, SessaoPlenaria, SessaoPlenariaPresenca, Bancada) from sapl.utils import (parlamentares_ativos, gerar_hash_arquivo, SEPARADOR_HASH_PROPOSICAO, @@ -60,7 +62,8 @@ from .forms import (AlterarSenhaForm, CasaLegislativaForm, RelatorioReuniaoFilterSet, UsuarioCreateForm, UsuarioEditForm, RelatorioNormasMesFilterSet, RelatorioNormasVigenciaFilterSet, - EstatisticasAcessoNormasForm, UsuarioFilterSet) + EstatisticasAcessoNormasForm, UsuarioFilterSet, + RelatorioHistoricoTramitacaoAdmFilterSet) from .models import AppConfig, CasaLegislativa @@ -1831,4 +1834,52 @@ def pesquisa_textual(request): json_dict['resultados'].append(sec_dict) - return JsonResponse(json_dict) \ No newline at end of file + return JsonResponse(json_dict) + + +class RelatorioHistoricoTramitacaoAdmView(FilterView): + model = DocumentoAdministrativo + filterset_class = RelatorioHistoricoTramitacaoAdmFilterSet + template_name = 'base/RelatorioHistoricoTramitacaoAdm_filter.html' + + def get_context_data(self, **kwargs): + context = super(RelatorioHistoricoTramitacaoAdmView, + self).get_context_data(**kwargs) + context['title'] = _('Histórico de Tramitações de Documento Administrativo') + if not self.filterset.form.is_valid(): + return context + qr = self.request.GET.copy() + context['filter_url'] = ('&' + qr.urlencode()) if len(qr) > 0 else '' + + context['show_results'] = show_results_filter_set(qr) + context['data_tramitacao'] = (self.request.GET['tramitacaoadministrativo__data_tramitacao_0'] + ' - ' + + self.request.GET['tramitacaoadministrativo__data_tramitacao_1']) + if self.request.GET['tipo']: + tipo = self.request.GET['tipo'] + context['tipo'] = ( + str(TipoDocumentoAdministrativo.objects.get(id=tipo))) + else: + context['tipo'] = '' + + if self.request.GET['tramitacaoadministrativo__status']: + tramitacao_status = self.request.GET['tramitacaoadministrativo__status'] + context['tramitacaoadministrativo__status'] = ( + str(StatusTramitacaoAdministrativo.objects.get(id=tramitacao_status))) + else: + context['tramitacaoadministrativo__status'] = '' + + if self.request.GET['tramitacaoadministrativo__unidade_tramitacao_local']: + context['tramitacaoadministrativo__unidade_tramitacao_local'] = \ + (str(UnidadeTramitacao.objects.get( + id=self.request.GET['tramitacaoadministrativo__unidade_tramitacao_local']))) + else: + context['tramitacaoadministrativo__unidade_tramitacao_local'] = '' + + if self.request.GET['tramitacaoadministrativo__unidade_tramitacao_destino']: + context['tramitacaoadministrativo__unidade_tramitacao_destino'] = \ + (str(UnidadeTramitacao.objects.get( + id=self.request.GET['tramitacaoadministrativo__unidade_tramitacao_destino']))) + else: + context['tramitacaoadministrativo__unidade_tramitacao_destino'] = '' + + return context \ No newline at end of file diff --git a/sapl/templates/base/RelatorioHistoricoTramitacaoAdm_filter.html b/sapl/templates/base/RelatorioHistoricoTramitacaoAdm_filter.html new file mode 100644 index 000000000..ba0488aac --- /dev/null +++ b/sapl/templates/base/RelatorioHistoricoTramitacaoAdm_filter.html @@ -0,0 +1,48 @@ +{% extends "crud/list.html" %} +{% load i18n %} +{% load crispy_forms_tags %} + +{% block base_content %} + {% if not show_results %} +
+ {% crispy filter.form %} + {% else %} + +



+ PARÂMETROS DE PESQUISA:
+  Período: {{ data_tramitacao }}
+  Tipo de documento: {{ tipo }}
+  Status atual: {{ tramitacaoadministrativo__status }}
+  Local de origem: {{ tramitacaoadministrativo__unidade_tramitacao_local }}
+  Local de destino: {{ tramitacaoadministrativo__unidade_tramitacao_destino }}


+ {% if object_list %} + {% if object_list|length == 1 %} +

Foi encontrado 1 documento com esses parâmetros.



+ {% else %} +

Foram encontrados {{object_list|length}} documentos com esses parâmetros.



+ {% endif %} + + + + + + + + + {% for documento in object_list %} + + + + + {% endfor %} + +
DocumentoEmenta
+ {{documento.tipo.descricao}} - {{documento.tipo.sigla}} {{documento.numero}}/{{documento.ano}} + {{documento.ementa}}
{{documento.observacao}}
+ {% else %} +

Nenhum documento encontrado com esses parâmetros.



+ {% endif %} + {% endif %} +{% endblock base_content %} diff --git a/sapl/templates/base/relatorios_list.html b/sapl/templates/base/relatorios_list.html index 012064096..cadd200db 100644 --- a/sapl/templates/base/relatorios_list.html +++ b/sapl/templates/base/relatorios_list.html @@ -56,6 +56,10 @@ Normas por vigência Normas vigentes ou não vigentes. + + Histórico de tramitações de Documentos + Histórico de tramitações de Documentos por período e local informados. + {% if estatisticas_acesso_normas %} Estatísticas de acesso de Normas