Browse Source

3030 migrar tela de parlamentar para vuejs (#3048)

* Configurando app parlamentaares para frontend

* Adaptando pagina de parlamentar para vuejs Fix #3030

* Mudando endpoints para drf

* Tirando arquivos desnecessarios

* Update sapl/api/serializers.py

Co-Authored-By: Leandro  Silva <leandroroberto.br@gmail.com>

* Update sapl/templates/parlamentares/parlamentares_list.html

Co-Authored-By: Leandro  Silva <leandroroberto.br@gmail.com>

* Update sapl/templates/parlamentares/parlamentares_list.html

Co-Authored-By: Leandro  Silva <leandroroberto.br@gmail.com>

* Corrigindo apresentação de parlamentar na pesquisa

* Atualiza arquivos VueJS
pull/3057/head
Ulysses Lara 5 years ago
committed by Edward
parent
commit
c27eef4ecb
  1. 31
      sapl/api/serializers.py
  2. 29
      sapl/api/views.py
  3. 126
      sapl/static/sapl/frontend/css/chunk-vendors.aa0d128d.css
  4. BIN
      sapl/static/sapl/frontend/css/chunk-vendors.aa0d128d.css.gz
  5. 0
      sapl/static/sapl/frontend/css/global.3b8f6afb.css
  6. 0
      sapl/static/sapl/frontend/css/global.3b8f6afb.css.gz
  7. 0
      sapl/static/sapl/frontend/css/parlamentar.0e433876.css
  8. 293
      sapl/static/sapl/frontend/js/chunk-vendors.a7ec6d73.js
  9. BIN
      sapl/static/sapl/frontend/js/chunk-vendors.a7ec6d73.js.gz
  10. 1
      sapl/static/sapl/frontend/js/compilacao.1d56171e.js
  11. BIN
      sapl/static/sapl/frontend/js/compilacao.1d56171e.js.gz
  12. 7
      sapl/static/sapl/frontend/js/global.6c17a26c.js
  13. BIN
      sapl/static/sapl/frontend/js/global.6c17a26c.js.gz
  14. 0
      sapl/static/sapl/frontend/js/painel.fcb12a07.js
  15. 0
      sapl/static/sapl/frontend/js/painel.fcb12a07.js.gz
  16. 1
      sapl/static/sapl/frontend/js/parlamentar.fc55c492.js
  17. BIN
      sapl/static/sapl/frontend/js/parlamentar.fc55c492.js.gz
  18. 120
      sapl/templates/parlamentares/parlamentares_list.html

31
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,30 @@ 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):
is_titular = None
if Legislatura.objects.exists():
legislatura = self.context.get('legislatura')
if not legislatura:
legislatura = Legislatura.objects.first()
mandato = Mandato.objects.filter(legislatura=legislatura,parlamentar=obj).first()
is_titular = mandato.titular if mandato else False
return is_titular
def check_partido(self,obj):
legislatura_id = self.context.get('legislatura')
if not legislatura_id:
legislatura = Legislatura.objects.first()
else:
legislatura = Legislatura.objects.get(id=legislatura_id)
filiacao = filiacao_data(obj, legislatura.data_inicio, legislatura.data_fim)
return filiacao
class Meta:
model = Parlamentar
fields = ['id', 'nome_parlamentar', 'fotografia', 'ativo', 'partido', 'titular']

29
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
@ -31,6 +31,7 @@ from sapl.protocoloadm.models import DocumentoAdministrativo,\
DocumentoAcessorioAdministrativo, TramitacaoAdministrativo, Anexado
from sapl.sessao.models import SessaoPlenaria, ExpedienteSessao
from sapl.utils import models_with_gr_for_model, choice_anos_com_sessaoplenaria
from sapl.parlamentares.models import Mandato, Parlamentar
class BusinessRulesNotImplementedMixin:
@ -303,6 +304,16 @@ class _AutorViewSet:
@customize(Parlamentar)
class _ParlamentarViewSet:
class ParlamentarPermission(SaplModelPermissions):
def has_permission(self, request, view):
if request.method == 'GET':
return True
else:
perm = super().has_permission(request, view)
return perm
permission_classes = (ParlamentarPermission, )
@action(detail=True)
def proposicoes(self, request, *args, **kwargs):
"""
@ -334,6 +345,22 @@ 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.
"""
parlamentares = Parlamentar.objects.filter(mandato__legislatura=kwargs['pk'])
serializer_class = ParlamentarResumeSerializer(parlamentares,many=True,context={'legislatura':kwargs['pk']})
return Response(serializer_class.data)
@action(detail=False,methods=['GET'])
def search_parlamentares(self,request,*args,**kwargs):
nome = request.query_params.get('nome_parlamentar','')
parlamentares = Parlamentar.objects.filter(nome_parlamentar__icontains=nome)
serializer_class= ParlamentarResumeSerializer(parlamentares,many=True)
return Response(serializer_class.data)
@customize(Proposicao)
class _ProposicaoViewSet():

126
sapl/static/sapl/frontend/css/chunk-vendors.aa0d128d.css

File diff suppressed because one or more lines are too long

BIN
sapl/static/sapl/frontend/css/chunk-vendors.aa0d128d.css.gz

Binary file not shown.

0
sapl/static/sapl/frontend/css/global.a77827ad.css → sapl/static/sapl/frontend/css/global.3b8f6afb.css

0
sapl/static/sapl/frontend/css/global.a77827ad.css.gz → sapl/static/sapl/frontend/css/global.3b8f6afb.css.gz

0
sapl/static/sapl/frontend/css/parlamentar.0e433876.css

293
sapl/static/sapl/frontend/js/chunk-vendors.a7ec6d73.js

File diff suppressed because one or more lines are too long

BIN
sapl/static/sapl/frontend/js/chunk-vendors.a7ec6d73.js.gz

Binary file not shown.

1
sapl/static/sapl/frontend/js/compilacao.1d56171e.js

File diff suppressed because one or more lines are too long

BIN
sapl/static/sapl/frontend/js/compilacao.1d56171e.js.gz

Binary file not shown.

7
sapl/static/sapl/frontend/js/global.6c17a26c.js

File diff suppressed because one or more lines are too long

BIN
sapl/static/sapl/frontend/js/global.6c17a26c.js.gz

Binary file not shown.

0
sapl/static/sapl/frontend/js/painel.35e9809a.js → sapl/static/sapl/frontend/js/painel.fcb12a07.js

0
sapl/static/sapl/frontend/js/painel.35e9809a.js.gz → sapl/static/sapl/frontend/js/painel.fcb12a07.js.gz

1
sapl/static/sapl/frontend/js/parlamentar.fc55c492.js

@ -0,0 +1 @@
!function(e){function a(a){for(var t,o,i=a[0],u=a[1],l=a[2],p=0,f=[];p<i.length;p++)o=i[p],Object.prototype.hasOwnProperty.call(n,o)&&n[o]&&f.push(n[o][0]),n[o]=0;for(t in u)Object.prototype.hasOwnProperty.call(u,t)&&(e[t]=u[t]);for(c&&c(a);f.length;)f.shift()();return s.push.apply(s,l||[]),r()}function r(){for(var e,a=0;a<s.length;a++){for(var r=s[a],t=!0,i=1;i<r.length;i++){var u=r[i];0!==n[u]&&(t=!1)}t&&(s.splice(a--,1),e=o(o.s=r[0]))}return e}var t={},n={parlamentar:0},s=[];function o(a){if(t[a])return t[a].exports;var r=t[a]={i:a,l:!1,exports:{}};return e[a].call(r.exports,r,r.exports,o),r.l=!0,r.exports}o.m=e,o.c=t,o.d=function(e,a,r){o.o(e,a)||Object.defineProperty(e,a,{enumerable:!0,get:r})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(e,a){if(1&a&&(e=o(e)),8&a)return e;if(4&a&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(o.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&a&&"string"!=typeof e)for(var t in e)o.d(r,t,function(a){return e[a]}.bind(null,t));return r},o.n=function(e){var a=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(a,"a",a),a},o.o=function(e,a){return Object.prototype.hasOwnProperty.call(e,a)},o.p="/static/sapl/frontend/";var i=window.webpackJsonp=window.webpackJsonp||[],u=i.push.bind(i);i.push=a,i=i.slice();for(var l=0;l<i.length;l++)a(i[l]);var c=u;s.push([3,"chunk-vendors"]),r()}({3:function(e,a,r){e.exports=r("71e4")},"49c2":function(e,a,r){},"71e4":function(e,a,r){"use strict";r.r(a),function(e){r("cadf"),r("551c"),r("f751"),r("097d"),r("49c2");var a=r("a026"),t=r("44d4"),n=r("bc3a"),s=r.n(n);s.a.defaults.xsrfCookieName="csrftoken",s.a.defaults.xsrfHeaderName="X-CSRFToken",a.a.use(t.a),new a.a({delimiters:["[[","]]"],el:"#app2",data:function(){return{nome_pesquisa:"",is_pesquisa:!1,legislatura_selecionada:"",legislaturas:[],parlamentares:[]}},watch:{nome_pesquisa:function(e){this.debouncepesquisaParlamentar()}},created:function(){this.debouncepesquisaParlamentar=e.debounce(this.pesquisaParlamentar,500)},methods:{getParlamentares:function(e){var a=this;this.legislatura_selecionada&&s.a.get("/api/parlamentares/parlamentar/"+this.legislatura_selecionada+"/parlamentares_by_legislatura/").then((function(e){a.parlamentares=e.data})).catch((function(e){console.error("Ocorreu um erro ao obter os dados de parlamentares:"+e)}))},pesquisaParlamentar:function(e){var a=this;s.a.get("/api/parlamentares/parlamentar/search_parlamentares/",{params:{nome_parlamentar:this.nome_pesquisa}}).then((function(e){a.parlamentares=e.data})).catch((function(e){console.error("Erro ao procurar parlamentar:"+e)}))},pesquisaChange:function(e){this.is_pesquisa=!this.is_pesquisa,this.is_pesquisa?this.parlamentares=[]:this.getParlamentares()}},mounted:function(){var e=this;s.a.get("/api/parlamentares/legislatura/").then((function(a){e.legislaturas=a.data.results,e.legislatura_selecionada=a.data.results[0].id})).then((function(a){e.getParlamentares()})).catch((function(e){console.error("Ocorreu um erro ao obter os dados de legislação: "+e)}))}})}.call(this,r("2ef0"))}});

BIN
sapl/static/sapl/frontend/js/parlamentar.fc55c492.js.gz

Binary file not shown.

120
sapl/templates/parlamentares/parlamentares_list.html

@ -1,76 +1,94 @@
{% extends "crud/list.html" %}
{% extends "base.html" %}
{% load i18n %}
{% load crispy_forms_tags cropping%}
{% block actions %}
{% load common_tags %}
{% load render_bundle from webpack_loader %}
{% load webpack_static from webpack_loader %}
{% block base_content %}
<div id="app2">
<div class="actions btn-group float-right btn-group-sm" role="group">
<a href="{% url 'sapl.parlamentares:pesquisar_parlamentar' %}" class="btn btn-outline-primary">Pesquisar Parlamentar</a>
<a v-if="is_pesquisa" v-on:click="pesquisaChange" class="btn btn-primary text-white">Listar Parlamentar</a>
<a v-else v-on:click="pesquisaChange" class="btn btn-outline-primary text-info">Pesquisar Parlamentar</a>
{% if not request.user.is_anonymous %}
<a href="{% url 'sapl.parlamentares:vincular_parlamentar' %}" class="btn btn-outline-primary">Vincular Parlamentar</a>
{% endif %}
{% block more_buttons %}{% endblock more_buttons %}
</div>
{% endblock actions %}
{% block extra_content %}
<div class="clearfix"></div>
<!--Pesquisa parlamentares-->
<div v-if="is_pesquisa">
<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">Pesquisar</span>
</div>
<input v-model="nome_pesquisa" type="text" class="form-control" aria-label="Pesquisa" aria-describedby="inputGroup-sizing-sm">
</div>
</div>
<!--Lista parlamentares-->
<div v-else>
<fieldset class="form-group">
<legend>Selecione o Período</legend>
<form method="GET">
<select name="pk" class="form-control" onChange="form.submit();">
{% for l in legislaturas %}
<option value="{{l.id}}" {% if l.id == legislatura_id %} selected {% endif %}>
{{l}}
<select @change="getParlamentares" class="form-control" v-model="legislatura_selecionada">
<option v-for="option in legislaturas" v-bind:value="option.id">
[[ option.__str__ ]]
</option>
{% endfor %}
</select>
</select>
</form>
</fieldset>
<br/>
{% endblock %}
</div>
{% block container_table_list %}
{% 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>
<div class="result-count">Total de Parlamentares: <strong>[[parlamentares.length]]</strong></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 %}
<th colspan=2 >Parlamentar</th>
<th>Parido</th>
<th>Ativo?</th>
<th v-if="!is_pesquisa" >Titlar?</th>
</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>
<tbody>
<tr v-for="parlamentar in parlamentares">
<th>
<img class="img-fluid img-thumbnail" v-bind:src="parlamentar.fotografia" @error="(() => parlamentar.fotografia = '')"/>
</th>
<th>
<a v-bind:href="'/parlamentar/'+parlamentar.id">[[ parlamentar.nome_parlamentar]]</a>
</th>
<th>
[[ parlamentar.partido ]]
</th>
<th>
<p v-if="[[ parlamentar.ativo ]]">Sim</p>
<p v-else>Não</p>
</th>
<th v-if="!is_pesquisa">
<p v-if='[[ parlamentar.titular]]'>Sim</p>
<p v-else>Não</p>
</th>
</tr>
</tbody>
</table>
</div>
{% endif %}
{% endblock base_content %}
{% block webpack_loader_css %}
{{ block.super }}
{% render_bundle 'parlamentar' 'css' %}
{% endblock %}
{% block webpack_loader_js %}
{% render_chunk_vendors 'js' %}
{% render_bundle 'global' 'js' %}
{% render_bundle 'parlamentar' 'js' %}
{% endblock %}

Loading…
Cancel
Save