Browse Source

migra endpoint deprecated para drfautoapi

pull/3606/head
LeandroJatai 3 years ago
parent
commit
9a393c7a37
  1. 135
      sapl/api/deprecated.py
  2. 130
      sapl/api/forms.py
  3. 4
      sapl/api/urls.py
  4. 8
      sapl/api/views_base.py
  5. 2
      sapl/api/views_comissoes.py
  6. 2
      sapl/api/views_compilacao.py
  7. 2
      sapl/api/views_materia.py
  8. 2
      sapl/api/views_norma.py
  9. 2
      sapl/api/views_painel.py
  10. 2
      sapl/api/views_parlamentares.py
  11. 2
      sapl/api/views_protocoloadm.py
  12. 2
      sapl/api/views_sessao.py
  13. 6
      sapl/protocoloadm/urls.py
  14. 24
      sapl/templates/materia/autoria_form.html
  15. 22
      sapl/templates/materia/autoria_multicreate_form.html
  16. 29
      sapl/templates/materia/materialegislativa_form.html
  17. 25
      sapl/templates/norma/autorianorma_form.html
  18. 27
      sapl/templates/protocoloadm/protocolar_materia.html

135
sapl/api/deprecated.py

@ -137,124 +137,6 @@ class AutorSearchForFieldFilterSet(AutorChoiceFilterSet):
return queryset.filter(**params).distinct('nome').order_by('nome')
class AutoresPossiveisFilterSet(FilterSet):
logger = logging.getLogger(__name__)
data_relativa = DateFilter(method='filter_data_relativa')
tipo = CharFilter(method='filter_tipo')
class Meta:
model = Autor
fields = ['data_relativa', 'tipo', ]
def filter_data_relativa(self, queryset, name, value):
return queryset
def filter_tipo(self, queryset, name, value):
try:
self.logger.debug(
"Tentando obter TipoAutor correspondente à pk {}.".format(value))
tipo = TipoAutor.objects.get(pk=value)
except:
self.logger.error("TipoAutor(pk={}) inexistente.".format(value))
raise serializers.ValidationError(_('Tipo de Autor inexistente.'))
qs = queryset.filter(tipo=tipo)
return qs
@property
def qs(self):
qs = super().qs
data_relativa = self.form.cleaned_data['data_relativa'] \
if 'data_relativa' in self.form.cleaned_data else None
tipo = self.form.cleaned_data['tipo'] \
if 'tipo' in self.form.cleaned_data else None
if not tipo:
return qs
tipo = TipoAutor.objects.get(pk=tipo)
if not tipo.content_type:
return qs
filter_for_model = 'filter_%s' % tipo.content_type.model
if not hasattr(self, filter_for_model):
return qs
if not data_relativa:
data_relativa = timezone.now()
return getattr(self, filter_for_model)(qs, data_relativa).distinct()
def filter_parlamentar(self, queryset, data_relativa):
# não leva em conta afastamentos
legislatura_relativa = Legislatura.objects.filter(
data_inicio__lte=data_relativa,
data_fim__gte=data_relativa).first()
q = Q(
parlamentar_set__mandato__data_inicio_mandato__lte=data_relativa,
parlamentar_set__mandato__data_fim_mandato__isnull=True) | Q(
parlamentar_set__mandato__data_inicio_mandato__lte=data_relativa,
parlamentar_set__mandato__data_fim_mandato__gte=data_relativa)
if legislatura_relativa.atual():
q = q & Q(parlamentar_set__ativo=True)
legislatura_anterior = self.request.GET.get(
'legislatura_anterior', 'False')
if legislatura_anterior.lower() == 'true':
legislaturas = Legislatura.objects.filter(
data_fim__lte=data_relativa).order_by('-data_fim')[:2]
if len(legislaturas) == 2:
_, leg_anterior = legislaturas
q = q | Q(
parlamentar_set__mandato__data_inicio_mandato__gte=leg_anterior.data_inicio)
qs = queryset.filter(q)
return qs
def filter_comissao(self, queryset, data_relativa):
return queryset.filter(
Q(comissao_set__data_extincao__isnull=True,
comissao_set__data_fim_comissao__isnull=True) |
Q(comissao_set__data_extincao__gte=data_relativa,
comissao_set__data_fim_comissao__isnull=True) |
Q(comissao_set__data_extincao__gte=data_relativa,
comissao_set__data_fim_comissao__isnull=True) |
Q(comissao_set__data_extincao__isnull=True,
comissao_set__data_fim_comissao__gte=data_relativa) |
Q(comissao_set__data_extincao__gte=data_relativa,
comissao_set__data_fim_comissao__gte=data_relativa),
comissao_set__data_criacao__lte=data_relativa)
def filter_frente(self, queryset, data_relativa):
return queryset.filter(
Q(frente_set__data_extincao__isnull=True) |
Q(frente_set__data_extincao__gte=data_relativa),
frente_set__data_criacao__lte=data_relativa)
def filter_bancada(self, queryset, data_relativa):
return queryset.filter(
Q(bancada_set__data_extincao__isnull=True) |
Q(bancada_set__data_extincao__gte=data_relativa),
bancada_set__data_criacao__lte=data_relativa)
def filter_bloco(self, queryset, data_relativa):
return queryset.filter(
Q(bloco_set__data_extincao__isnull=True) |
Q(bloco_set__data_extincao__gte=data_relativa),
bloco_set__data_criacao__lte=data_relativa)
def filter_orgao(self, queryset, data_relativa):
# na implementação, não havia regras a implementar para orgao
return queryset
class AutorChoiceSerializer(ModelChoiceSerializer):
def get_text(self, obj):
@ -475,23 +357,6 @@ class AutoresProvaveisListView(ListAPIView):
return r
class AutoresPossiveisListView(ListAPIView):
"""
Deprecated
TODO Migrar para customização na api automática
"""
permission_classes = (IsAuthenticatedOrReadOnly,)
queryset = Autor.objects.all()
model = Autor
pagination_class = None
filter_class = AutoresPossiveisFilterSet
serializer_class = AutorChoiceSerializer
class SessaoPlenariaViewSet(ListModelMixin,
RetrieveModelMixin,
GenericViewSet):

130
sapl/api/forms.py

@ -1,5 +1,135 @@
import logging
from django.db.models import Q
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _
from django_filters.filters import CharFilter, DateFilter
from django_filters.filterset import FilterSet
from rest_framework import serializers
from drfautoapi.drfautoapi import ApiFilterSetMixin
from sapl.base.models import TipoAutor, Autor
from sapl.parlamentares.models import Legislatura
logger = logging.getLogger(__name__)
class SaplFilterSetMixin(ApiFilterSetMixin):
pass
class AutoresPossiveisFilterSet(SaplFilterSetMixin):
data_relativa = DateFilter(method='filter_data_relativa')
tipo = CharFilter(method='filter_tipo')
class Meta:
model = Autor
fields = ['data_relativa', 'tipo', ]
def filter_data_relativa(self, queryset, name, value):
return queryset
def filter_tipo(self, queryset, name, value):
try:
logger.debug(
"Tentando obter TipoAutor correspondente à pk {}.".format(value))
tipo = TipoAutor.objects.get(pk=value)
except:
logger.error("TipoAutor(pk={}) inexistente.".format(value))
raise serializers.ValidationError(_('Tipo de Autor inexistente.'))
qs = queryset.filter(tipo=tipo)
return qs
@property
def qs(self):
qs = super().qs
data_relativa = self.form.cleaned_data['data_relativa'] \
if 'data_relativa' in self.form.cleaned_data else None
tipo = self.form.cleaned_data['tipo'] \
if 'tipo' in self.form.cleaned_data else None
if not tipo:
return qs
tipo = TipoAutor.objects.get(pk=tipo)
if not tipo.content_type:
return qs
filter_for_model = 'filter_%s' % tipo.content_type.model
if not hasattr(self, filter_for_model):
return qs
if not data_relativa:
data_relativa = timezone.now()
return getattr(self, filter_for_model)(qs, data_relativa).distinct()
def filter_parlamentar(self, queryset, data_relativa):
# não leva em conta afastamentos
legislatura_relativa = Legislatura.objects.filter(
data_inicio__lte=data_relativa,
data_fim__gte=data_relativa).first()
q = Q(
parlamentar_set__mandato__data_inicio_mandato__lte=data_relativa,
parlamentar_set__mandato__data_fim_mandato__isnull=True) | Q(
parlamentar_set__mandato__data_inicio_mandato__lte=data_relativa,
parlamentar_set__mandato__data_fim_mandato__gte=data_relativa)
if legislatura_relativa.atual():
q = q & Q(parlamentar_set__ativo=True)
legislatura_anterior = self.request.GET.get(
'legislatura_anterior', 'False')
if legislatura_anterior.lower() == 'true':
legislaturas = Legislatura.objects.filter(
data_fim__lte=data_relativa).order_by('-data_fim')[:2]
if len(legislaturas) == 2:
_, leg_anterior = legislaturas
q = q | Q(
parlamentar_set__mandato__data_inicio_mandato__gte=leg_anterior.data_inicio)
qs = queryset.filter(q)
return qs
def filter_comissao(self, queryset, data_relativa):
return queryset.filter(
Q(comissao_set__data_extincao__isnull=True,
comissao_set__data_fim_comissao__isnull=True) |
Q(comissao_set__data_extincao__gte=data_relativa,
comissao_set__data_fim_comissao__isnull=True) |
Q(comissao_set__data_extincao__gte=data_relativa,
comissao_set__data_fim_comissao__isnull=True) |
Q(comissao_set__data_extincao__isnull=True,
comissao_set__data_fim_comissao__gte=data_relativa) |
Q(comissao_set__data_extincao__gte=data_relativa,
comissao_set__data_fim_comissao__gte=data_relativa),
comissao_set__data_criacao__lte=data_relativa)
def filter_frente(self, queryset, data_relativa):
return queryset.filter(
Q(frente_set__data_extincao__isnull=True) |
Q(frente_set__data_extincao__gte=data_relativa),
frente_set__data_criacao__lte=data_relativa)
def filter_bancada(self, queryset, data_relativa):
return queryset.filter(
Q(bancada_set__data_extincao__isnull=True) |
Q(bancada_set__data_extincao__gte=data_relativa),
bancada_set__data_criacao__lte=data_relativa)
def filter_bloco(self, queryset, data_relativa):
return queryset.filter(
Q(bloco_set__data_extincao__isnull=True) |
Q(bloco_set__data_extincao__gte=data_relativa),
bloco_set__data_criacao__lte=data_relativa)
def filter_orgao(self, queryset, data_relativa):
# na implementação, não havia regras a implementar para orgao
return queryset

4
sapl/api/urls.py

@ -5,7 +5,7 @@ from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView, \
from rest_framework.authtoken.views import obtain_auth_token
from sapl.api.deprecated import SessaoPlenariaViewSet, \
AutoresProvaveisListView, AutoresPossiveisListView, AutorListView
AutoresProvaveisListView, AutorListView
from sapl.api.views import AppVersionView, recria_token,\
SaplApiViewSetConstrutor
@ -39,8 +39,6 @@ urlpatterns_api_doc = [
deprecated_urlpatterns_api = [
url(r'^autor/provaveis',
AutoresProvaveisListView.as_view(), name='autores_provaveis_list'),
url(r'^autor/possiveis',
AutoresPossiveisListView.as_view(), name='autores_possiveis_list'),
url(r'^autor', AutorListView.as_view(), name='autor_list'),
]

8
sapl/api/views_base.py

@ -4,11 +4,12 @@ from rest_framework.decorators import action
from rest_framework.response import Response
from drfautoapi.drfautoapi import ApiViewSetConstrutor, customize
from sapl.api.forms import AutoresPossiveisFilterSet
from sapl.base.models import Autor
from sapl.utils import models_with_gr_for_model
BaseApiViewSetConstrutor = ApiViewSetConstrutor.build_class(
ApiViewSetConstrutor.build_class(
[
apps.get_app_config('contenttypes'),
apps.get_app_config('base')
@ -87,3 +88,8 @@ class _AutorViewSet:
setattr(cls, _model._meta.model_name, func)
return cls
@action(detail=False)
def possiveis(self, request, *args, **kwargs):
self.filterset_class = AutoresPossiveisFilterSet
return self.list(request, *args, **kwargs)

2
sapl/api/views_comissoes.py

@ -5,7 +5,7 @@ from drfautoapi.drfautoapi import ApiViewSetConstrutor, \
customize, wrapper_queryset_response_for_drf_action
ComissoesApiViewSetConstrutor = ApiViewSetConstrutor.build_class(
ApiViewSetConstrutor.build_class(
[
apps.get_app_config('comissoes')
]

2
sapl/api/views_compilacao.py

@ -5,7 +5,7 @@ from drfautoapi.drfautoapi import ApiViewSetConstrutor, \
customize, wrapper_queryset_response_for_drf_action
CompilacaoApiViewSetConstrutor = ApiViewSetConstrutor.build_class(
ApiViewSetConstrutor.build_class(
[
apps.get_app_config('compilacao')
]

2
sapl/api/views_materia.py

@ -11,7 +11,7 @@ from sapl.materia.models import TipoMateriaLegislativa, Tramitacao,\
MateriaLegislativa, Proposicao
MateriaApiViewSetConstrutor = ApiViewSetConstrutor.build_class(
ApiViewSetConstrutor.build_class(
[
apps.get_app_config('materia')
]

2
sapl/api/views_norma.py

@ -7,7 +7,7 @@ from drfautoapi.drfautoapi import ApiViewSetConstrutor, \
from sapl.norma.models import NormaJuridica
NormaApiViewSetConstrutor = ApiViewSetConstrutor.build_class(
ApiViewSetConstrutor.build_class(
[
apps.get_app_config('norma')
]

2
sapl/api/views_painel.py

@ -4,7 +4,7 @@ from django.apps.registry import apps
from drfautoapi.drfautoapi import ApiViewSetConstrutor, \
customize, wrapper_queryset_response_for_drf_action
PainelApiViewSetConstrutor = ApiViewSetConstrutor.build_class(
ApiViewSetConstrutor.build_class(
[
apps.get_app_config('painel')
]

2
sapl/api/views_parlamentares.py

@ -15,7 +15,7 @@ from sapl.materia.models import Proposicao
from sapl.parlamentares.models import Mandato, Legislatura
from sapl.parlamentares.models import Parlamentar
ParlamentaresApiViewSetConstrutor = ApiViewSetConstrutor.build_class(
ApiViewSetConstrutor.build_class(
[
apps.get_app_config('parlamentares')
]

2
sapl/api/views_protocoloadm.py

@ -9,7 +9,7 @@ from sapl.protocoloadm.models import DocumentoAdministrativo, \
DocumentoAcessorioAdministrativo, TramitacaoAdministrativo, Anexado
ProtocoloAdmApiViewSetConstrutor = ApiViewSetConstrutor.build_class(
ApiViewSetConstrutor.build_class(
[
apps.get_app_config('protocoloadm')
]

2
sapl/api/views_sessao.py

@ -11,7 +11,7 @@ from sapl.sessao.models import SessaoPlenaria, ExpedienteSessao
from sapl.utils import choice_anos_com_sessaoplenaria
SessaoApiViewSetConstrutor = ApiViewSetConstrutor.build_class(
ApiViewSetConstrutor.build_class(
[
apps.get_app_config('sessao')
]

6
sapl/protocoloadm/urls.py

@ -124,12 +124,6 @@ urlpatterns_sistema = [
include(TipoDocumentoAdministrativoCrud.get_urls())),
url(r'^sistema/status-tramitacao-adm/',
include(StatusTramitacaoAdministrativoCrud.get_urls())),
# FIXME: Usado para pesquisar autor- SOLUÇÃO-foi transformado em api/autor
# Melhor forma de fazer?
# Deve mudar de app?
# url(r'^protocoloadm/pesquisar-autor',
# pesquisa_autores, name='pesquisar_autor'),
]
urlpatterns = (urlpatterns_documento_administrativo +

24
sapl/templates/materia/autoria_form.html

@ -5,15 +5,6 @@
{% block extra_js %}
<script language="Javascript">
function compare(a, b) {
if (a.text < b.text)
return -1;
if (a.text > b.text)
return 1;
return 0;
}
$(document).ready(function() {
$("#id_tipo_autor").change(function() {
var tipo_selecionado = $("#id_tipo_autor").val();
@ -22,19 +13,20 @@
if (tipo_selecionado !== undefined && tipo_selecionado !== null) {
var json_data = {
tipo : tipo_selecionado,
data_relativa : $("#id_data_relativa").val()
data_relativa : $("#id_data_relativa").val(),
o: 'nome',
get_all: true
}
$.getJSON("/api/autor/possiveis", json_data, function(data){
$.getJSON("{% url 'sapl.api:autor-possiveis' %}", json_data, function(data){
if (data) {
var results = data.sort(compare);
if (results.length > 1) {
if (data.length > 1) {
$("#id_autor").append("<option>-----</option>");
}
$.each(results, function(idx, obj) {
$.each(data, function(idx, obj) {
$("#id_autor")
.append($("<option></option>")
.attr("value", obj.value)
.text(obj.text));
.attr("value", obj.id)
.text(obj.nome));
});
$("#id_autor").val(autor_selecionado);
}

22
sapl/templates/materia/autoria_multicreate_form.html

@ -7,30 +7,27 @@
<script language="Javascript">
$(document).ready(function() {
var autores_pre_cadastrados = $.parseJSON($("#id_autores").val());
$("#id_tipo_autor").change(function() {
var tipo_selecionado = $("#id_tipo_autor").val();
$("#id_autor option").remove()
if (tipo_selecionado !== '') {
var json_data = {
tipo : tipo_selecionado,
data_relativa : $("#id_data_relativa").val()
data_relativa : $("#id_data_relativa").val(),
o: 'nome',
get_all: true
}
$.getJSON("/api/autor/possiveis", json_data, function(data){
$("#div_id_autor > div").html('');
$.getJSON("{% url 'sapl.api:autor-possiveis' %}", json_data, function(data){
$("#div_id_autor > div").html('');
if (data) {
var results = data;
$.each(results, function(idx, obj) {
if (autores_pre_cadastrados.indexOf(obj.value) !== -1)
$.each(data, function(idx, obj) {
if (autores_pre_cadastrados.indexOf(obj.id) !== -1)
return ;
$('<input/>')
.attr('type', 'checkbox')
.attr('name','autor')
.attr('id', 'id_autor_'+idx)
.attr('value', obj.value)
.attr('value', obj.id)
.appendTo(
$('<label/>')
.appendTo(
@ -40,8 +37,7 @@
)
)
)
.after(obj.text)
.after(obj.nome)
});
}
});

29
sapl/templates/materia/materialegislativa_form.html

@ -20,14 +20,6 @@
}
$("#id_tipo, #id_ano").change(recuperar_numero_ano);
function compare(a, b) {
if (a.text < b.text)
return -1;
if (a.text > b.text)
return 1;
return 0;
}
var modal_estilos = 'display: block;'
+'width: 85%; max-width: 600px;'
+'background: #fff; padding: 15px;'
@ -56,7 +48,7 @@
let ano = $("select#id_ano.select").val();
let data_apresentacao = $("input#id_data_apresentacao.dateinput").val();
let ano_apresentacao = data_apresentacao.substr(data_apresentacao.length - 4);
if (ano && ano_apresentacao && ano_apresentacao != ano){
$('#fundo_modal').fadeIn();
}
@ -72,19 +64,20 @@
if (tipo_selecionado !== undefined && tipo_selecionado !== null){
var json_data = {
tipo : tipo_selecionado,
data_relativa : $("#id_data_apresentacao").val()
}
$.getJSON("/api/autor/possiveis", json_data, function(data) {
if (data) {
var results = data.sort(compare);
if (results.length > 1) {
data_relativa : $("#id_data_apresentacao").val(),
o: 'nome',
get_all: true
}
$.getJSON("{% url 'sapl.api:autor-possiveis' %}", json_data, function(data){
if (data) {
if (data.length > 1) {
$("#id_autor").append("<option>-----</option>");
}
$.each(results, function(idx, obj) {
$.each(data, function(idx, obj) {
$("#id_autor")
.append($("<option></option>")
.attr("value", obj.value)
.text(obj.text));
.attr("value", obj.id)
.text(obj.nome));
});
$("#id_autor").val(autor_selecionado);
}

25
sapl/templates/norma/autorianorma_form.html

@ -5,17 +5,7 @@
{% block extra_js %}
<script language="Javascript">
function compare(a, b) {
if (a.text < b.text)
return -1;
if (a.text > b.text)
return 1;
return 0;
}
$(document).ready(function() {
function atualiza_select_autor() {
var tipo_selecionado = $("#id_tipo_autor").val();
var autor_selecionado = $("#id_autor").val();
@ -24,19 +14,20 @@
var json_data = {
tipo : tipo_selecionado,
data_relativa : $("#id_data_relativa").val(),
legislatura_anterior: $('#id_legislatura_anterior').is(':checked')
legislatura_anterior: $('#id_legislatura_anterior').is(':checked'),
o: 'nome',
get_all: true
}
$.getJSON("/api/autor/possiveis", json_data, function(data){
$.getJSON("{% url 'sapl.api:autor-possiveis' %}", json_data, function(data){
if (data) {
var results = data.sort(compare);
if (results.length > 1) {
if (data.length > 1) {
$("#id_autor").append("<option>-----</option>");
}
$.each(results, function(idx, obj) {
$.each(data, function(idx, obj) {
$("#id_autor")
.append($("<option></option>")
.attr("value", obj.value)
.text(obj.text));
.attr("value", obj.id)
.text(obj.nome));
});
$("#id_autor").val(autor_selecionado);
}

27
sapl/templates/protocoloadm/protocolar_materia.html

@ -8,16 +8,7 @@
{% block extra_js %}
<script language="Javascript">
function compare(a, b) {
if (a.text < b.text)
return -1;
if (a.text > b.text)
return 1;
return 0;
}
$(document).ready(function() {
$("input[name=data_hora_manual]").change(function(event) {
if (this.value === 'True' && this.checked)
$("#protocolo_data_hora_manual").show();
@ -25,7 +16,7 @@
$("#protocolo_data_hora_manual").hide();
});
$("input[name=data_hora_manual]").trigger('change')
function busca_ementa() {
var vincular_materia = $("#id_vincular_materia_1").prop("checked");
var ano_materia = $("#id_ano_materia").val();
@ -62,26 +53,26 @@
$("#id_autor option").remove()
if (tipo_selecionado !== undefined && tipo_selecionado !== null) {
var json_data = {
tipo : tipo_selecionado
tipo : tipo_selecionado,
o: 'nome',
get_all: true
}
$.getJSON("/api/autor/possiveis", json_data, function(data){
$.getJSON("{% url 'sapl.api:autor-possiveis' %}", json_data, function(data){
if (data) {
var results = data.sort(compare);
if (results.length > 1) {
if (data.length > 1) {
$("#id_autor").append("<option>-----</option>");
}
$.each(results, function(idx, obj) {
$.each(data, function(idx, obj) {
$("#id_autor")
.append($("<option></option>")
.attr("value", obj.value)
.text(obj.text));
.attr("value", obj.id)
.text(obj.nome));
});
$("#id_autor").prop("selectedIndex", 0);
}
});
}
});
});
</script>
{% endblock %}

Loading…
Cancel
Save