Browse Source

Mudando endpoints para drf

pull/3048/head
ulyssesBML 6 years ago
parent
commit
44ec886fd0
  1. 30
      sapl/api/serializers.py
  2. 21
      sapl/api/views.py
  3. 11
      sapl/parlamentares/urls.py
  4. 43
      sapl/parlamentares/views.py
  5. 61
      sapl/templates/parlamentares/parlamentares_list.html

30
sapl/api/serializers.py

@ -1,9 +1,9 @@
from django.conf import settings
from rest_framework import serializers
from rest_framework.relations import StringRelatedField
from sapl.parlamentares.models import Parlamentar, Mandato, Filiacao, Legislatura
from sapl.base.models import Autor, CasaLegislativa
from sapl.utils import filiacao_data
class IntRelatedField(StringRelatedField):
def to_representation(self, value):
@ -56,3 +56,29 @@ class CasaLegislativaSerializer(serializers.ModelSerializer):
class Meta:
model = CasaLegislativa
fields = '__all__'
class ParlamentarResumeSerializer(serializers.ModelSerializer):
titular = serializers.SerializerMethodField('check_titular')
partido = serializers.SerializerMethodField('check_partido')
def check_titular(self,obj):
if self.context.get('legislatura',None):
legislatura = self.context['legislatura']
else:
legislatura = Legislatura.objects.first()
mandato = Mandato.objects.filter(legislatura=legislatura,parlamentar=obj).first()
return mandato.titular if mandato else False
def check_partido(self,obj):
if self.context.get('legislatura',None):
legislatura = Legislatura.objects.get(id=self.context['legislatura'])
else:
legislatura = Legislatura.objects.first()
filiacao = filiacao_data(obj, legislatura.data_inicio, legislatura.data_fim)
return filiacao
class Meta:
model = Parlamentar
fields = ['nome_parlamentar','fotografia','ativo','partido','titular']

21
sapl/api/views.py

@ -21,7 +21,7 @@ from rest_framework.viewsets import ModelViewSet
from sapl.api.forms import SaplFilterSetMixin
from sapl.api.permissions import SaplModelPermissions
from sapl.api.serializers import ChoiceSerializer
from sapl.api.serializers import ChoiceSerializer, ParlamentarResumeSerializer
from sapl.base.models import Autor, AppConfig, DOC_ADM_OSTENSIVO
from sapl.materia.models import Proposicao, TipoMateriaLegislativa,\
MateriaLegislativa, Tramitacao
@ -333,6 +333,25 @@ class _ParlamentarViewSet:
serializer = self.get_serializer(page, many=True)
return Response(serializer.data)
@action(detail=True)
def parlamentares_by_legislatura(self,request,*args,**kwargs):
"""
Pega lista de parlamentares pelo id da legislatura.
"""
from sapl.parlamentares.models import Mandato, Parlamentar
mandatos = Mandato.objects.filter(legislatura__id=kwargs['pk']).values_list('parlamentar')
parlamentares = Parlamentar.objects.filter(id__in=[m[0] for m in mandatos])
serializer_class = ParlamentarResumeSerializer(parlamentares,many=True,context={'legislatura':kwargs['pk']})
return Response(serializer_class.data)
@action(detail=False, methods=['post'])
def search_parlamentares(self,request,*args,**kwargs):
nome = request.data.get('nome_parlamentar','')
parlamentares = Parlamentar.objects.filter(nome_parlamentar__icontains=nome)
serializer_class= ParlamentarResumeSerializer(parlamentares,many=True)
return Response(serializer_class.data)
@customize(Proposicao)

11
sapl/parlamentares/urls.py

@ -20,8 +20,7 @@ from sapl.parlamentares.views import (CargoMesaCrud, ColigacaoCrud,
remove_parlamentar_composicao,
parlamentares_filiados, BlocoCrud,
PesquisarParlamentarView, VincularParlamentarView,
get_sessoes_legislatura, get_all_legislaturas_json,
get_parlamentare_by_legislaturas_json, search_parlamentare_json)
get_sessoes_legislatura)
from .apps import AppConfig
@ -96,13 +95,5 @@ urlpatterns = [
url(r'^parlamentar/get-sessoes-legislatura/$',
get_sessoes_legislatura, name='get_sessoes_legislatura'),
url(r'^parlamentar/get-all-legislaturas_json/$',
get_all_legislaturas_json, name='get-all-legislaturas_json'),
url(r'^parlamentar/get_parlamentare_by_legislaturas_json/(?P<id_legislatura>\d+)/$',
get_parlamentare_by_legislaturas_json, name='get_parlamentare_by_legislaturas_json/'),
url(r'^parlamentar/search_parlamentare_json/$',
search_parlamentare_json, name='search_parlamentare_json'),
]

43
sapl/parlamentares/views.py

@ -1206,46 +1206,3 @@ def get_sessoes_legislatura(request):
json_response['sessoes_legislativas'].append( (s.id, str(s)) )
return JsonResponse(json_response)
def get_all_legislaturas_json(request):
all_legislaturas = [(e.id,str(e)) for e in Legislatura.objects.all()]
return JsonResponse({'legislaturas':all_legislaturas})
def get_parlamentare_by_legislaturas_json(request,id_legislatura):
id_parlamentares = Mandato.objects.filter(legislatura__id=id_legislatura).values_list('parlamentar__id','titular','data_inicio_mandato','data_fim_mandato').distinct()
parlamentares = Parlamentar.objects.filter(id__in=[i[0] for i in id_parlamentares])
my_json = []
for i, p in enumerate(parlamentares):
p_dict = {}
p_dict['parlamentar_id'] = p.id
p_dict['fotografia'] = p.fotografia.url if (p.fotografia and os.path.exists(p.fotografia.path)) else ""
p_dict['nome_parlamentar'] = p.nome_parlamentar
p_dict['partido'] = filiacao_data(p,id_parlamentares[i][2],id_parlamentares[i][3])
p_dict['ativo'] = p.ativo
p_dict['titular'] = id_parlamentares[i][1]
my_json.append(p_dict)
return JsonResponse({'parlamentares':my_json})
def search_parlamentare_json(request):
my_json = []
if request.method == 'GET':
pass
elif request.method == 'POST':
nome = request.POST.get("nome","")
parlamentares = Parlamentar.objects.filter(nome_parlamentar__icontains=nome)
for p in parlamentares:
p_dict = {}
p_dict['parlamentar_id'] = p.id
p_dict['fotografia'] = p.fotografia.url if (p.fotografia and os.path.exists(p.fotografia.path)) else ""
p_dict['nome_parlamentar'] = p.nome_parlamentar
p_dict['partido'] = p.filiacao_atual
p_dict['ativo'] = p.ativo
p_dict['titular'] = None
my_json.append(p_dict)
return JsonResponse({'parlamentares': my_json})

61
sapl/templates/parlamentares/parlamentares_list.html

@ -20,10 +20,10 @@
<!--Pesquisa parlamentares-->
<div v-if="is_pesquisa">
<h2>Pesquisa Parlamentar</h2>
<h2>Pesquisar Parlamentar</h2>
<div class="input-group input-group-lg">
<div class="input-group-prepend">
<span class="input-group-text" id="inputGroup-sizing-lg">Pesquisa</span>
<span class="input-group-text" id="inputGroup-sizing-lg">Pesquisar</span>
</div>
<input v-model="nome_pesquisa" type="text" class="form-control" aria-label="Pesquisa" aria-describedby="inputGroup-sizing-sm">
</div>
@ -35,8 +35,8 @@
<legend>Selecione o Período</legend>
<form method="GET">
<select @change="getParlamentares" class="form-control" v-model="legislatura_selecionada">
<option v-for="option in legislaturas" v-bind:value="option[0]">
[[ option[1] ]]
<option v-for="option in legislaturas" v-bind:value="option.id">
[[ option.__str__ ]]
</option>
</select>
</form>
@ -66,7 +66,7 @@
<img class="img-fluid img-thumbnail" v-bind:src="parlamentar.fotografia" @error="(() => parlamentar.fotografia = '')"/>
</th>
<th>
<a v-bind:href="'/parlamentar/'+parlamentar.parlamentar_id">[[ parlamentar.nome_parlamentar]]</a>
<a v-bind:href="'/parlamentar/'+parlamentar.id">[[ parlamentar.nome_parlamentar]]</a>
</th>
<th>
[[ parlamentar.partido ]]
@ -76,62 +76,13 @@
<p v-else>Não</p>
</th>
<th>
<p v-if="[[ parlamentar.titular ]]">Sim</p>
<p v-if='[[ parlamentar.titular]]'>Sim</p>
<p v-else>Não</p>
</th>
</tr>
</tbody>
</table>
</div>
<!--
{% if not rows %}
<p>{{ NO_ENTRIES_MSG }}</p>
{% else %}
<div class="container-table lista-parlamentares">
<div class="result-count">{% blocktrans with verbose_name_plural=view.verbose_name_plural %}Total de {{ verbose_name_plural }}: <strong>{{count}}</strong>{% endblocktrans %}</div>
<table class="table table-striped table-hover table-link-ordering">
<thead>
<tr>
{% for name in headers %}
{% if forloop.first %}
<th colspan=2>
{% else %}
<th>
{% endif %}
{{ name }}
</th>
{% endfor %}
</tr>
</thead>
<tbody>
{% for value_list in rows %}
<tr>
{% for value, href, obj in value_list %}
{% if forloop.first %}
<td>
{% if obj.fotografia %}
<div id="w-100">
<img class="img-fluid img-thumbnail" src="{% cropped_thumbnail obj "cropping"%}">
</div>
{% endif %}
</td>
{% endif %}
<td>
{% if href %}
<a href="{{ href }}">{{ value|safe|default:"" }}</a>
{% else %}
{{ value|safe|default:"" }}
{% endif %}
</td>
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
{% endif %}-->
{% endblock base_content %}

Loading…
Cancel
Save