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 django.conf import settings
from rest_framework import serializers from rest_framework import serializers
from rest_framework.relations import StringRelatedField from rest_framework.relations import StringRelatedField
from sapl.parlamentares.models import Parlamentar, Mandato, Filiacao, Legislatura
from sapl.base.models import Autor, CasaLegislativa from sapl.base.models import Autor, CasaLegislativa
from sapl.utils import filiacao_data
class IntRelatedField(StringRelatedField): class IntRelatedField(StringRelatedField):
def to_representation(self, value): def to_representation(self, value):
@ -56,3 +56,29 @@ class CasaLegislativaSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = CasaLegislativa model = CasaLegislativa
fields = '__all__' 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.forms import SaplFilterSetMixin
from sapl.api.permissions import SaplModelPermissions 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.base.models import Autor, AppConfig, DOC_ADM_OSTENSIVO
from sapl.materia.models import Proposicao, TipoMateriaLegislativa,\ from sapl.materia.models import Proposicao, TipoMateriaLegislativa,\
MateriaLegislativa, Tramitacao MateriaLegislativa, Tramitacao
@ -333,6 +333,25 @@ class _ParlamentarViewSet:
serializer = self.get_serializer(page, many=True) serializer = self.get_serializer(page, many=True)
return Response(serializer.data) 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) @customize(Proposicao)

11
sapl/parlamentares/urls.py

@ -20,8 +20,7 @@ from sapl.parlamentares.views import (CargoMesaCrud, ColigacaoCrud,
remove_parlamentar_composicao, remove_parlamentar_composicao,
parlamentares_filiados, BlocoCrud, parlamentares_filiados, BlocoCrud,
PesquisarParlamentarView, VincularParlamentarView, PesquisarParlamentarView, VincularParlamentarView,
get_sessoes_legislatura, get_all_legislaturas_json, get_sessoes_legislatura)
get_parlamentare_by_legislaturas_json, search_parlamentare_json)
from .apps import AppConfig from .apps import AppConfig
@ -96,13 +95,5 @@ urlpatterns = [
url(r'^parlamentar/get-sessoes-legislatura/$', url(r'^parlamentar/get-sessoes-legislatura/$',
get_sessoes_legislatura, name='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)) ) json_response['sessoes_legislativas'].append( (s.id, str(s)) )
return JsonResponse(json_response) 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--> <!--Pesquisa parlamentares-->
<div v-if="is_pesquisa"> <div v-if="is_pesquisa">
<h2>Pesquisa Parlamentar</h2> <h2>Pesquisar Parlamentar</h2>
<div class="input-group input-group-lg"> <div class="input-group input-group-lg">
<div class="input-group-prepend"> <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> </div>
<input v-model="nome_pesquisa" type="text" class="form-control" aria-label="Pesquisa" aria-describedby="inputGroup-sizing-sm"> <input v-model="nome_pesquisa" type="text" class="form-control" aria-label="Pesquisa" aria-describedby="inputGroup-sizing-sm">
</div> </div>
@ -35,8 +35,8 @@
<legend>Selecione o Período</legend> <legend>Selecione o Período</legend>
<form method="GET"> <form method="GET">
<select @change="getParlamentares" class="form-control" v-model="legislatura_selecionada"> <select @change="getParlamentares" class="form-control" v-model="legislatura_selecionada">
<option v-for="option in legislaturas" v-bind:value="option[0]"> <option v-for="option in legislaturas" v-bind:value="option.id">
[[ option[1] ]] [[ option.__str__ ]]
</option> </option>
</select> </select>
</form> </form>
@ -66,7 +66,7 @@
<img class="img-fluid img-thumbnail" v-bind:src="parlamentar.fotografia" @error="(() => parlamentar.fotografia = '')"/> <img class="img-fluid img-thumbnail" v-bind:src="parlamentar.fotografia" @error="(() => parlamentar.fotografia = '')"/>
</th> </th>
<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>
<th> <th>
[[ parlamentar.partido ]] [[ parlamentar.partido ]]
@ -76,62 +76,13 @@
<p v-else>Não</p> <p v-else>Não</p>
</th> </th>
<th> <th>
<p v-if="[[ parlamentar.titular ]]">Sim</p> <p v-if='[[ parlamentar.titular]]'>Sim</p>
<p v-else>Não</p> <p v-else>Não</p>
</th> </th>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div> </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 %} {% endblock base_content %}

Loading…
Cancel
Save