diff --git a/sigi/apps/casas/filters.py b/sigi/apps/casas/filters.py index cbf05ca..0a930ec 100644 --- a/sigi/apps/casas/filters.py +++ b/sigi/apps/casas/filters.py @@ -1,5 +1,8 @@ +from django_filters import CharFilter +from django_filters.rest_framework import FilterSet from django.contrib import admin from django.utils.translation import gettext as _ +from sigi.apps.casas.models import Orgao from sigi.apps.servidores.models import Servidor from sigi.apps.convenios.models import Projeto from sigi.apps.servicos.models import TipoServico, Servico @@ -56,3 +59,25 @@ class ServicoFilter(admin.SimpleListFilter): ) return queryset.distinct("municipio__uf__nome", "nome") + + +class OrgaoAtendidoFilterset(FilterSet): + convenio_sigla = CharFilter( + field_name="convenio__projeto__sigla", lookup_expr="iexact" + ) + evento_categoria_sigla = CharFilter( + field_name="evento__tipo_evento__categoria", lookup_expr="iexact" + ) + servico_sigla = CharFilter( + field_name="servico__tipo_servico__sigla", lookup_expr="iexact" + ) + tipo_sigla = CharFilter(field_name="tipo__sigla", lookup_expr="iexact") + + class Meta: + model = Orgao + fields = [ + "convenio_sigla", + "evento_categoria_sigla", + "servico_sigla", + "tipo_sigla", + ] diff --git a/sigi/apps/casas/serializers.py b/sigi/apps/casas/serializers.py index 530361b..5e71cd2 100644 --- a/sigi/apps/casas/serializers.py +++ b/sigi/apps/casas/serializers.py @@ -12,20 +12,18 @@ class AnexoConvenioSerializer(serializers.ModelSerializer): class ConvenioSerializer(serializers.ModelSerializer): - projeto = serializers.SlugRelatedField(read_only=True, slug_field="nome") + sigla = serializers.ReadOnlyField(source="projeto.sigla") + projeto = serializers.ReadOnlyField(source="projeto.nome") status = serializers.SerializerMethodField("get_status") inicio_vigencia = serializers.SerializerMethodField("get_inicio_vigencia") - termino_vigencia = serializers.SerializerMethodField( - "get_termino_vigencia" - ) - documento_gescon = serializers.SerializerMethodField( - "get_documento_gescon" - ) + termino_vigencia = serializers.SerializerMethodField("get_termino_vigencia") + documento_gescon = serializers.SerializerMethodField("get_documento_gescon") anexo_set = AnexoConvenioSerializer(many=True, read_only=True) class Meta: model = Convenio fields = [ + "sigla", "projeto", "num_convenio", "status", @@ -49,25 +47,33 @@ class ConvenioSerializer(serializers.ModelSerializer): class EventoSerializer(serializers.ModelSerializer): + categoria_sigla = serializers.SerializerMethodField("get_categoria_sigla") + categoria_nome = serializers.SerializerMethodField("get_categoria_nome") + class Meta: model = Evento fields = [ "nome", + "categoria_nome", + "categoria_sigla", "data_inicio", "data_termino", "num_processo", "total_participantes", ] + def get_categoria_sigla(self, obj): + return obj.tipo_evento.categoria + + def get_categoria_nome(self, obj): + return obj.tipo_evento.get_categoria_display() + class ServicoSerializer(serializers.ModelSerializer): - tipo_servico = serializers.SlugRelatedField( - read_only=True, slug_field="nome" - ) + sigla = serializers.ReadOnlyField(source="tipo_servico.sigla") + tipo_servico = serializers.ReadOnlyField(source="tipo_servico.nome") url = serializers.SerializerMethodField("get_url") - data_verificacao = serializers.SerializerMethodField( - "get_data_verificacao" - ) + data_verificacao = serializers.SerializerMethodField("get_data_verificacao") resultado_verificacao = serializers.SerializerMethodField( "get_resultado_verificacao" ) @@ -75,6 +81,7 @@ class ServicoSerializer(serializers.ModelSerializer): class Meta: model = Servico fields = [ + "sigla", "tipo_servico", "data_ativacao", "url", @@ -102,6 +109,7 @@ class ServicoSerializer(serializers.ModelSerializer): class OrgaoAtendidoSerializer(serializers.ModelSerializer): tipo = serializers.StringRelatedField() + tipo_sigla = serializers.ReadOnlyField(source="tipo.sigla") municipio = serializers.SlugRelatedField(read_only=True, slug_field="nome") uf_nome = serializers.SerializerMethodField("get_uf_nome") uf_sigla = serializers.SerializerMethodField("get_uf_sigla") @@ -116,6 +124,7 @@ class OrgaoAtendidoSerializer(serializers.ModelSerializer): "nome", "sigla", "tipo", + "tipo_sigla", "cnpj", "logradouro", "bairro", diff --git a/sigi/apps/casas/views.py b/sigi/apps/casas/views.py index c53b8ea..0b94df0 100644 --- a/sigi/apps/casas/views.py +++ b/sigi/apps/casas/views.py @@ -19,8 +19,10 @@ from django.views.generic import ( ListView, UpdateView, ) +from django_filters.rest_framework import DjangoFilterBackend from django_weasyprint.views import WeasyTemplateResponse from rest_framework import generics, filters +from sigi.apps.casas.filters import OrgaoAtendidoFilterset from sigi.apps.casas.forms import FuncionarioForm, CnpjErradoForm from sigi.apps.casas.models import Funcionario, Orgao, TipoOrgao from sigi.apps.casas.serializers import OrgaoAtendidoSerializer @@ -389,9 +391,7 @@ class CnpjDuplicadoReport( ) -class CnpjErradoReport( - LoginRequiredMixin, UserPassesTestMixin, ReportListView -): +class CnpjErradoReport(LoginRequiredMixin, UserPassesTestMixin, ReportListView): title = _("Órgãos com CNPJ digitado errado") empty_message = _("Nenhum órgão com CNPJ digitado errado") queryset = ( @@ -650,7 +650,8 @@ class ApiOrgaoAtendidoList(generics.ListAPIView): """ serializer_class = OrgaoAtendidoSerializer - filter_backends = [filters.SearchFilter] + filter_backends = [filters.SearchFilter, DjangoFilterBackend] + filterset_class = OrgaoAtendidoFilterset search_fields = ["search_text"] def get_queryset(self):