Browse Source

remove código substituído

3828_refatorar_mesa_diretora
LeandroJatai 2 days ago
parent
commit
958e83fd2a
  1. 27
      sapl/parlamentares/urls.py
  2. 391
      sapl/parlamentares/views.py
  3. 312
      sapl/templates/parlamentares/composicaomesa_form_old.html
  4. 146
      sapl/templates/parlamentares/public_composicaomesa_form_old.html
  5. 1
      sapl/utils.py

27
sapl/parlamentares/urls.py

@ -5,7 +5,7 @@ from sapl.parlamentares.views import (CargoMesaCrud, ColigacaoCrud, ComposicaoMe
ComposicaoColigacaoCrud, DependenteCrud, ComposicaoColigacaoCrud, DependenteCrud,
FiliacaoCrud, FrenteCrud, FrenteList, FiliacaoCrud, FrenteCrud, FrenteList,
LegislaturaCrud, MandatoCrud, LegislaturaCrud, MandatoCrud,
MesaDiretoraView, NivelInstrucaoCrud, NivelInstrucaoCrud,
ParlamentarCrud, ParlamentarMateriasView, ParlamentarNormasView, ParlamentarCrud, ParlamentarMateriasView, ParlamentarNormasView,
ParticipacaoParlamentarCrud, PartidoCrud, ParticipacaoParlamentarCrud, PartidoCrud,
ProposicaoParlamentarCrud, ProposicaoParlamentarCrud,
@ -13,12 +13,8 @@ from sapl.parlamentares.views import (CargoMesaCrud, ColigacaoCrud, ComposicaoMe
SessaoLegislativaCrud, SessaoLegislativaCrud,
TipoAfastamentoCrud, TipoDependenteCrud, TipoAfastamentoCrud, TipoDependenteCrud,
TipoMilitarCrud, VotanteView, TipoMilitarCrud, VotanteView,
altera_field_mesa,
altera_field_mesa_public_view,
frente_atualiza_lista_parlamentares, frente_atualiza_lista_parlamentares,
insere_parlamentar_composicao,
parlamentares_frente_selected, parlamentares_frente_selected,
remove_parlamentar_composicao,
parlamentares_filiados, BlocoCrud, parlamentares_filiados, BlocoCrud,
PesquisarParlamentarView, VincularParlamentarView, PesquisarParlamentarView, VincularParlamentarView,
get_sessoes_legislatura, FrenteCargoCrud, FrenteParlamentarCrud, get_sessoes_legislatura, FrenteCargoCrud, FrenteParlamentarCrud,
@ -105,27 +101,10 @@ urlpatterns = [
include(CargoMesaCrud.get_urls())), include(CargoMesaCrud.get_urls())),
url(r'^mesa-diretora/', include( url(r'^mesa-diretora/', include(
MesaDiretoraCrud.get_urls() + ComposicaoMesaCrud.get_urls() MesaDiretoraCrud.get_urls() +
ComposicaoMesaCrud.get_urls()
)), )),
]
urlpatterns_mesa_old = [
url(r'^mesa-diretora/$',
MesaDiretoraView.as_view(), name='mesa_diretora'),
url(r'^mesa-diretora/altera-field-mesa/$',
altera_field_mesa, name='altera_field_mesa'),
url(r'^mesa-diretora/altera-field-mesa-public-view/$',
altera_field_mesa_public_view, name='altera_field_mesa_public_view'),
url(r'^mesa-diretora/insere-parlamentar-composicao/$',
insere_parlamentar_composicao, name='insere_parlamentar_composicao'),
url(r'^mesa-diretora/remove-parlamentar-composicao/$',
remove_parlamentar_composicao, name='remove_parlamentar_composicao'),
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'),
] ]

391
sapl/parlamentares/views.py

@ -1087,283 +1087,6 @@ class ComposicaoMesaCrud(MasterDetailCrud):
initial['mesa_diretora'] = MesaDiretora.objects.get(pk=self.kwargs['pk']) initial['mesa_diretora'] = MesaDiretora.objects.get(pk=self.kwargs['pk'])
return initial return initial
class MesaDiretoraView(FormView):
template_name = 'parlamentares/composicaomesa_form_old.html'
success_url = ''#reverse_lazy('sapl.parlamentares:mesa_diretora')
logger = logging.getLogger(__name__)
def get_template_names(self):
if self.request.user.has_perm('parlamentares.change_composicaomesa'):
if 'iframe' not in self.request.GET:
if not self.request.session.get('iframe'):
return 'parlamentares/composicaomesa_form_old.html'
elif self.request.GET['iframe'] == '0':
return 'parlamentares/composicaomesa_form_old.html'
return 'parlamentares/public_composicaomesa_form_old.html'
# Essa função avisa quando se pode compor uma Mesa Legislativa
def validation(self, request):
username = request.user.username
self.logger.info('user=' + username + '. Não há nenhuma Sessão Legislativa cadastrada. ' +
'Só é possível compor uma Mesa Diretora quando ' +
'há uma Sessão Legislativa cadastrada.')
mensagem = _('Não há nenhuma Sessão Legislativa cadastrada. ' +
'Só é possível compor uma Mesa Diretora quando ' +
'há uma Sessão Legislativa cadastrada.')
messages.add_message(request, messages.INFO, mensagem)
return self.render_to_response(
{'legislaturas': Legislatura.objects.all(
).order_by('-numero'),
'legislatura_selecionada': Legislatura.objects.last(),
'cargos_vagos': CargoMesa.objects.all()})
@xframe_options_exempt
def get(self, request, *args, **kwargs):
if (not Legislatura.objects.exists() or
not SessaoLegislativa.objects.exists()):
return self.validation(request)
legislatura = Legislatura.objects.first()
sessoes = SessaoLegislativa.objects.filter(
legislatura=legislatura).order_by("data_inicio")
year = timezone.now().year
sessao_atual = sessoes.filter(data_inicio__year__lte=year).exclude(
data_inicio__gt=timezone.now()).order_by('-data_inicio').first()
mesa_diretora = sessao_atual.mesadiretora_set.order_by(
'-data_inicio').first() if sessao_atual else None
composicao_mesa = ComposicaoMesa.objects.select_related('cargo', 'parlamentar').filter(
mesa_diretora=mesa_diretora).order_by('cargo__id_ordenacao', 'cargo_id')
cargos_ocupados = [m.cargo for m in composicao_mesa]
cargos = CargoMesa.objects.all()
cargos_vagos = list(set(cargos) - set(cargos_ocupados))
parlamentares = legislatura.mandato_set.all()
parlamentares_ocupados = [m.parlamentar for m in composicao_mesa]
parlamentares_vagos = list(
set(
[p.parlamentar for p in parlamentares if p.parlamentar.ativo]) - set(
parlamentares_ocupados))
parlamentares_vagos.sort(key=lambda x: x.nome_parlamentar)
# Se todos os cargos estiverem ocupados, a listagem de parlamentares
# deve ser renderizada vazia
if not cargos_vagos:
parlamentares_vagos = []
return self.render_to_response(
{'legislaturas': Legislatura.objects.all(
).order_by('-numero'),
'legislatura_selecionada': legislatura,
'sessoes': sessoes,
'sessao_selecionada': sessao_atual,
'composicao_mesa': composicao_mesa,
'parlamentares': parlamentares_vagos,
'cargos_vagos': cargos_vagos
})
def altera_field_mesa(request):
"""
Essa função lida com qualquer alteração nos campos
da Mesa Diretora, após qualquer
operação (Legislatura/Sessão/Inclusão/Remoção),
atualizando os campos após cada alteração
"""
# TODO: Adicionar opção de selecionar mesa diretora no CRUD
logger = logging.getLogger(__name__)
legislatura = request.GET['legislatura']
sessoes = SessaoLegislativa.objects.filter(
legislatura=legislatura).order_by('-data_inicio')
username = request.user.username
if not sessoes:
return JsonResponse({'msg': ('Nenhuma sessão encontrada!', 0)})
# Verifica se já tem uma sessão selecionada. Ocorre quando
# é alterado o campo de sessão ou feita alguma operação
# de inclusão/remoção.
if request.GET['sessao']:
sessao_selecionada = SessaoLegislativa.objects.get(
id=request.GET['sessao'])
# Caso a mudança tenha sido no campo legislatura, a sessão
# atual deve ser a primeira daquela legislatura
else:
year = timezone.now().year
logger.debug(
"user={}. Tentando obter id de sessoes com data_inicio.ano={}.".format(username, year))
sessao_selecionada = sessoes.filter(data_inicio__year=year).first()
if not sessao_selecionada:
logger.error("user=" + username + ". Id de sessoes com data_inicio.ano={} não encontrado. "
"Selecionado o ID da primeira sessão.".format(year))
sessao_selecionada = sessoes.first()
mesa_diretora = request.GET.get('mesa_diretora')
# Mesa nao deve ser informada ainda
if not mesa_diretora:
# Cria nova mesa diretora ou retorna a primeira
mesa_diretora, _ = MesaDiretora.objects.get_or_create(
sessao_legislativa=sessao_selecionada)
# TODO: quando a mesa for criada explicitamente em tabelas auxiliares,
# deve-se somente tentar recuperar a mesa, e caso nao exista
# retornar o erro abaixo
# return JsonResponse({'msg': ('Nenhuma mesa encontrada na sessão!')})
else:
try:
mesa_diretora = MesaDiretora.objects.get(
id=mesa_diretora, sessao_legislativa=sessao_selecionada)
except ObjectDoesNotExist:
mesa_diretora = MesaDiretora.objects.filter(
sessao_legislativa=sessao_selecionada).first()
# Atualiza os componentes da view após a mudança
composicao_mesa = ComposicaoMesa.objects.select_related('cargo', 'parlamentar').filter(
mesa_diretora=mesa_diretora).order_by('cargo_id')
cargos_ocupados = [m.cargo for m in composicao_mesa]
cargos = CargoMesa.objects.all()
cargos_vagos = list(set(cargos) - set(cargos_ocupados))
parlamentares = Legislatura.objects.get(
id=legislatura).mandato_set.all()
parlamentares_ocupados = [m.parlamentar for m in composicao_mesa]
parlamentares_vagos = list(
set(
[p.parlamentar for p in parlamentares]) - set(
parlamentares_ocupados))
parlamentares_vagos.sort(key=lambda x: x.nome_parlamentar)
lista_sessoes = [(s.id, s.__str__()) for s in sessoes]
lista_composicao = [(c.id, c.parlamentar.__str__(),
c.cargo.__str__()) for c in composicao_mesa]
lista_parlamentares = [(
p.id, p.__str__()) for p in parlamentares_vagos]
lista_cargos = [(c.id, c.__str__()) for c in cargos_vagos]
return JsonResponse(
{'lista_sessoes': lista_sessoes,
'lista_composicao': lista_composicao,
'lista_parlamentares': lista_parlamentares,
'lista_cargos': lista_cargos,
'sessao_selecionada': sessao_selecionada.id,
'msg': ('', 1)})
def insere_parlamentar_composicao(request):
"""
Essa função lida com qualquer operação de inserção
na composição da Mesa Diretora
"""
logger = logging.getLogger(__name__)
username = request.user.username
if request.user.has_perm(
'%s.add_%s' % (
AppConfig.label, ComposicaoMesa._meta.model_name)):
composicao = ComposicaoMesa()
try:
# logger.debug(
# "user=" + username + ". Tentando obter SessaoLegislativa com id={}.".format(request.POST['sessao']))
mesa_diretora, _ = MesaDiretora.objects.get_or_create(
sessao_legislativa_id=int(request.POST['sessao']))
composicao.mesa_diretora = mesa_diretora
except MultiValueDictKeyError:
logger.error(
"user=" + username + ". 'MultiValueDictKeyError', nenhuma sessão foi inserida!")
return JsonResponse({'msg': ('Nenhuma sessão foi inserida!', 0)})
try:
logger.debug(
"user=" + username + ". Tentando obter Parlamentar com id={}.".format(request.POST['parlamentar']))
composicao.parlamentar = Parlamentar.objects.get(
id=int(request.POST['parlamentar']))
except MultiValueDictKeyError:
logger.error(
"user=" + username + ". 'MultiValueDictKeyError', nenhum parlamentar foi inserido!")
return JsonResponse({
'msg': ('Nenhum parlamentar foi inserido!', 0)})
try:
logger.info("user=" + username +
". Tentando obter CargoMesa com id={}.".format(request.POST['cargo']))
composicao.cargo = CargoMesa.objects.get(
id=int(request.POST['cargo']))
parlamentar_ja_inserido = ComposicaoMesa.objects.filter(
mesa_diretora=mesa_diretora,
cargo=composicao.cargo).exists()
if parlamentar_ja_inserido:
return JsonResponse({'msg': ('Parlamentar já inserido!', 0)})
composicao.save()
except MultiValueDictKeyError:
logger.error("user=" + username +
". 'MultiValueDictKeyError', nenhum cargo foi inserido!")
return JsonResponse({'msg': ('Nenhum cargo foi inserido!', 0)})
logger.info("user=" + username + ". Parlamentar inserido com sucesso!")
return JsonResponse({'msg': ('Parlamentar inserido com sucesso!', 1)})
else:
logger.error("user=" + username +
" não tem permissão para esta operação!")
return JsonResponse(
{'msg': ('Você não tem permissão para esta operação!', 0)})
def remove_parlamentar_composicao(request):
"""
Essa função lida com qualquer operação de remoção
na composição da Mesa Diretora
"""
logger = logging.getLogger(__name__)
username = request.user.username
if request.POST and request.user.has_perm(
'%s.delete_%s' % (
AppConfig.label, ComposicaoMesa._meta.model_name)):
if 'composicao_mesa' in request.POST:
try:
logger.debug("user=" + username + ". Tentando obter ComposicaoMesa com id={}.".format(
request.POST['composicao_mesa']))
composicao = ComposicaoMesa.objects.get(
id=request.POST['composicao_mesa'])
except ObjectDoesNotExist:
logger.error(
"user=" + username +
". ComposicaoMesa com id={} não encontrada, portanto não pode ser removida."
.format(request.POST['composicao_mesa']))
return JsonResponse(
{'msg': (
'Composição da Mesa não pôde ser removida!', 0)})
composicao.delete()
logger.info("user=" + username + ". ComposicaoMesa com id={} excluido com sucesso!".format(
request.POST['composicao_mesa']))
return JsonResponse(
{'msg': (
'Parlamentar excluido com sucesso!', 1)})
else:
logger.info("user=" + username +
". Nenhum parlamentar escolhido para ser excluído.")
return JsonResponse(
{'msg': (
'Selecione algum parlamentar para ser excluido!', 0)})
def partido_parlamentar_sessao_legislativa(sessao, parlamentar): def partido_parlamentar_sessao_legislativa(sessao, parlamentar):
""" """
Função para descobrir o partido do parlamentar durante Função para descobrir o partido do parlamentar durante
@ -1410,120 +1133,6 @@ def partido_parlamentar_sessao_legislativa(sessao, parlamentar):
return filiacao.partido.sigla return filiacao.partido.sigla
def altera_field_mesa_public_view(request):
"""
Essa função lida com qualquer alteração nos campos
da Mesa Diretora para usuários anônimos,
atualizando os campos após cada alteração
"""
# TODO: Adicionar opção de selecionar mesa diretora no CRUD
logger = logging.getLogger(__name__)
username = request.user.username
legislatura = request.GET['legislatura']
if legislatura:
legislatura = Legislatura.objects.get(id=legislatura)
else:
legislatura = Legislatura.objects.order_by('-data_inicio').first()
sessoes = legislatura.sessaolegislativa_set.filter(
tipo='O').order_by('-data_inicio')
if not sessoes:
return JsonResponse({'msg': ('Nenhuma sessão encontrada!', 0)})
# Verifica se já tem uma sessão selecionada. Ocorre quando é alterado o
# campo de sessão
sessao_selecionada = request.GET['sessao']
if not sessao_selecionada:
year = timezone.now().year
logger.info(
f"user={username}. Tentando obter sessões com data_inicio.ano = {year}.")
sessao_selecionada = sessoes.filter(data_inicio__year=year).first()
if sessao_selecionada is None:
logger.error(f"user={username}. Sessões não encontradas com com data_inicio.ano = {year}. "
"Selecionado o id da primeira sessão.")
sessao_selecionada = sessoes.first()
else:
sessao_selecionada = SessaoLegislativa.objects.get(
id=sessao_selecionada)
# Atualiza os componentes da view após a mudança
lista_sessoes = [(s.id, s.__str__()) for s in sessoes]
# Pegar Mesas diretoras da sessao
mesa_diretora = request.GET.get('mesa_diretora')
# Mesa nao deve ser informada ainda
if not mesa_diretora:
try:
mesa_diretora = sessao_selecionada.mesadiretora_set.first()
except ObjectDoesNotExist:
logger.error(
f"user={username}. Mesa não encontrada com sessão Nº {sessao_selecionada.id}. ")
else:
# Cria nova mesa diretora ou retorna a primeira
mesa_diretora, _ = MesaDiretora.objects.get_or_create(
sessao_legislativa=sessao_selecionada)
# TODO: quando a mesa for criada explicitamente em tabelas auxiliares,
# deve-se somente tentar recuperar a mesa, e caso nao exista
# retornar o erro abaixo
# logger.error(f"user={username}. Mesa Nº {mesa_diretora} não encontrada na sessão Nº {sessao_selecionada.id}. "
# "Selecionada a mesa com o primeiro id na sessão")
composicao_mesa = ComposicaoMesa.objects.select_related('cargo', 'parlamentar').filter(
mesa_diretora=mesa_diretora).order_by('cargo_id')
cargos_ocupados = list(composicao_mesa.values_list(
'cargo__id', 'cargo__descricao'))
parlamentares_ocupados = list(composicao_mesa.values_list(
'parlamentar__id', 'parlamentar__nome_parlamentar'))
lista_fotos = []
lista_partidos = []
sessao = SessaoLegislativa.objects.get(id=sessao_selecionada.id)
for p in parlamentares_ocupados:
parlamentar = Parlamentar.objects.get(id=p[0])
lista_partidos.append(
partido_parlamentar_sessao_legislativa(sessao, parlamentar))
if parlamentar.fotografia:
try:
logger.warning(
f"Iniciando cropping da imagem {parlamentar.fotografia}")
thumbnail_url = get_backend().get_thumbnail_url(
parlamentar.fotografia,
{
'size': (128, 128),
'box': parlamentar.cropping,
'crop': True,
'detail': True,
}
)
logger.warning(
f"Cropping da imagem {parlamentar.fotografia} realizado com sucesso")
lista_fotos.append(thumbnail_url)
except Exception as e:
logger.error(e)
logger.error(
F'erro processando arquivo: {parlamentar.fotografia.path}')
else:
lista_fotos.append(None)
return JsonResponse({
'lista_parlamentares': parlamentares_ocupados,
'lista_partidos': lista_partidos,
'lista_cargos': cargos_ocupados,
'lista_sessoes': lista_sessoes,
'lista_fotos': lista_fotos,
'sessao_selecionada': sessao_selecionada.id,
'mesa_diretora': mesa_diretora.id,
'msg': ('', 1)
})
class VincularParlamentarView(PermissionRequiredMixin, FormView): class VincularParlamentarView(PermissionRequiredMixin, FormView):
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
form_class = VincularParlamentarForm form_class = VincularParlamentarForm

312
sapl/templates/parlamentares/composicaomesa_form_old.html

@ -1,312 +0,0 @@
{% extends "crud/detail.html" %}
{% load i18n %}
{% block actions %} {% endblock %}
{% block detail_content %}
{% if sessoes|length == 0 %}
<div class="alert alert-danger alert-dismissible" role="alert">
<b>{{legislatura_selecionada}}</b> não possui nenhuma Sessão Legislativa cadastrada.<br />
Clique <a href="{% url 'sapl.parlamentares:sessaolegislativa_create' %}">aqui</a> para cadastrar uma nova.
</div>
{% else %}
<div class="alert alert-danger alert-dismissible" id="div-error" role="alert" style="display: none">
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
<b><span id="error-message"></span></b>
</div>
<div class="alert alert-success alert-dismissible" id="div-success" style="display: none" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
<b><span id="success-message"></span></b>
</div>
<fieldset class="form-group">
<legend>Escolha da Legislatura e da Sessão Legislativa</legend>
<div class="row">
<div class="col-md-6">
<label>Escolha uma Legislatura</label>
<select name="legislatura" id="id_legislatura" class="form-control">
{% for l in legislaturas %}
<option value="{{l.id}}" {% if l == legislatura_selecionada %} selected {% endif %}>
{{l}}
</option>
{% endfor %}
</select>
</div>
<div class="col-md-6">
<label>Escolha uma Sessão Legislativa</label>
<select name="sessao" id="id_sessao_legislativa" class="form-control">
{% for s in sessoes %}
<option value="{{s.id}}" {% if s == sessao_selecionada %} selected {% endif %}>
{{s}}
</option>
{% endfor %}
</select>
</div>
</div>
</fieldset>
<br />
<fieldset class="form-group">
<legend>Escolha da Composição da Mesa Diretora</legend>
<div class="row">
<div class="col-md-4">
<label>Composição da Mesa Diretora</label>
<select multiple size="5" class="form-control" id="id_composicao_mesa" name="composicao_mesa">
{% for p in composicao_mesa %}
<option value="{{p.id}}">
{{p.parlamentar}} || {{p.cargo}}
</option>
{% endfor %}
</select>
</div>
<div class="col-md-4" align="center">
<br /><br />
{% if perms.parlamentares.add_cargomesa %}
<input type="submit" style="display: none" name="Incluir" id="id_incluir" Value="Incluir" class="btn btn-primary" />
{% endif %}
<br />
<br />
{% if perms.parlamentares.add_composicaomesa %}
<input type="submit" style="display: none" name="Excluir" id="id_excluir" Value="Excluir" class="btn btn-danger" />
{% endif %}
</div>
<div class="col-md-4">
<label id='parlamentar-cargo-title' style="display: none">Parlamentar | Cargo</label>
<select class="form-control" name="parlamentar" id="id_parlamentar" style="display: none">
{% for p in parlamentares %}
<option value="{{p.id}}">{{p.nome_parlamentar}}</option>
{% endfor %}
</select>
<br />
<select class="form-control" name="cargo" id="id_cargo" style="display: none">
{% for c in cargos_vagos %}
<option value="{{c.id}}">{{c}}</option>
{% endfor %}
</select>
</div>
</div>
</fieldset>
{% endif %}
{% endblock detail_content %}
{% block extra_js %}
<script language="Javascript">
//##############################################################
// Inicialização da View #
//##############################################################
// Se a composicao estiver completa, deve-se esconder o botão e os
// campos de inserção
$(document).ready(function(){
if($("#id_parlamentar").val() == null || $("#id_cargo").val() == null){
$("#id_parlamentar").hide();
$("#id_cargo").hide();
$("#parlamentar-cargo-title").hide();
$('#id_incluir').hide();
}
else{
$("#id_parlamentar").show();
$("#id_cargo").show();
$("#parlamentar-cargo-title").show();
$('#id_incluir').show();
}
// Se a composição estiver vazia, deve-se esconder
// de Excluir
if (!$("#id_composicao_mesa option").val()){
$("#id_excluir").hide()
}
else{
$("#id_excluir").show()
}
});
//##############################################################
//# EVENT HANDLERS #
//##############################################################
function errors_handler(msg){
if (msg == null){
$("#div-success").hide()
$("#div-error").hide()
$("#success-message").html('')
$("#error-message").html('')
}
else{
if (msg[1] == 0){
$("#div-error").show()
$("#error-message").html(msg[0])
}
else{
$("#div-success").show()
$("#success-message").html(msg[0])
}
}
}
// Atualiza os campos após alguma operação de mudança da Legislatura/Sessao ou
// Inserção/Remoção
function altera_field(id_legislatura, id_sessao=null, msg=null){
// Pega o novo valor dos campos modificados
var sessao_value = id_sessao
var legislatura_value = id_legislatura
// Limpa os campos que serão atualizados
$("#id_sessao_legislativa option").remove();
$("#id_composicao_mesa option").remove();
$("#id_parlamentar option").remove();
$("#id_cargo option").remove();
$.get("{% url 'sapl.parlamentares:altera_field_mesa' %}",
{legislatura: legislatura_value, sessao: sessao_value},
function(data) {
// Caso não venha nenhum dado da requisição, retorna null
if ($.isEmptyObject(data)){
return null
}
lista_sessoes = data['lista_sessoes'];
lista_composicao = data['lista_composicao'];
lista_parlamentares = data['lista_parlamentares'];
lista_cargos = data['lista_cargos'];
// Atualiza a listagem dos campos
if (lista_sessoes != undefined) {
for (i = 0; i < lista_sessoes.length; i++) {
$('#id_sessao_legislativa').append('<option value="' + lista_sessoes[i][0] + '">' + lista_sessoes[i][1] + '</option>');
}
}
if (lista_composicao != null) {
for (i = 0; i < lista_composicao.length; i++) {
$('#id_composicao_mesa').append('<option value="' + lista_composicao[i][0] + '">' + lista_composicao[i][1] + ' || ' + lista_composicao[i][2] + '</option>');
}
}
// Caso ainda tenha parlamentares/cargos a serem inseridos, preenche a listagem com
// os disponíveis e garante que as ferramentas de inserção estejam disponíveis
if (lista_parlamentares != null && lista_parlamentares.length != 0 && lista_cargos.length != 0){
$('#id_incluir').show()
$('#id_cargo').show();
$('#id_parlamentar').show();
$("#parlamentar-cargo-title").show();
for (i = 0; i < lista_parlamentares.length; i++) {
$('#id_parlamentar').append('<option value="' + lista_parlamentares[i][0] + '">' + lista_parlamentares[i][1] + '</option>');
}
for (i = 0; i < lista_cargos.length; i++) {
$('#id_cargo').append('<option value="' + lista_cargos[i][0] + '">' + lista_cargos[i][1] + '</option>');
}
}
// Caso contrário, esconde do usuário essas opções
else{
$('#id_incluir').hide();
$('#id_cargo').hide();
$('#id_parlamentar').hide();
$("#parlamentar-cargo-title").hide();
}
// Garante que o botão de remoção aparecerá, caso tenha
// algum parlamentar na composição
if (lista_composicao != null && lista_composicao.length != 0){
$("#id_excluir").show()
}
else{
$("#id_excluir").hide()
}
// Garante que a Sessão atual será a selecionada previamente e, no caso em que
// o campo modificado seja o de Legislatura, que a Sessão seja a última daquela
// legislatura
$("#id_sessao_legislativa").val(data['sessao_selecionada'])
// Caso haja algum erro que venha após a alteração da legislatura/sessao
// Essa mensagem de erro é prioridade
if (data['msg'][1] == 0){
msg = data['msg']
}
errors_handler(msg)
});
}
//#############################################################
//# EVENTS CATCH #
//#############################################################
$("#id_legislatura").change(function(){
legislatura = $("#id_legislatura").val();
altera_field(legislatura);
});
$("#id_sessao_legislativa").change(function(){
legislatura = $("#id_legislatura").val();
sessao = $("#id_sessao_legislativa").val();
altera_field(legislatura, sessao);
});
$('#id_incluir').click(function(){
$.ajax({
data: {sessao: $("#id_sessao_legislativa").val(),
parlamentar: $("#id_parlamentar").val(),
cargo: $("#id_cargo").val()},
type: 'POST',
url: "{% url 'sapl.parlamentares:insere_parlamentar_composicao' %}",
headers: {
'X-CSRFToken': getCookie('csrftoken')
},
success: function(data){
var msg = data['msg'];
legislatura = $("#id_legislatura").val();
sessao = $("#id_sessao_legislativa").val();
setTimeout(function(data){
// Atualiza os campos após a inserção
altera_field(legislatura, sessao, msg)
}, 500)
},
});
})
$('#id_excluir').click(function(){
// Pega o id do parlamentar que foi selecionado
selecionado = $("#id_composicao_mesa option:selected").val()
if (selecionado){
$.ajax({
data: {composicao_mesa: selecionado},
type: 'POST',
url: "{% url 'sapl.parlamentares:remove_parlamentar_composicao' %}",
headers: {
'X-CSRFToken': getCookie('csrftoken')
},
success: function(data){
var msg = data['msg'];
legislatura = $("#id_legislatura").val();
sessao = $("#id_sessao_legislativa").val();
setTimeout(function(data){
// Atualiza os campos após a remoção
altera_field(legislatura, sessao, msg)
}, 500)
},
});
}
});
</script>
{% endblock %}

146
sapl/templates/parlamentares/public_composicaomesa_form_old.html

@ -1,146 +0,0 @@
{% extends "crud/detail.html" %}
{% load i18n cropping%}
{% block actions %} {% endblock %}
{% block detail_content %}
<form method="POST">
{% csrf_token %}
<fieldset class="form-group">
<legend>Escolha da Legislatura e da Sessão Legislativa</legend>
<div class="row">
<div class="col-md-6">
<label>Escolha uma Legislatura</label>
<select name="legislatura" id="id_legislatura" class="form-control">
{% for l in legislaturas %}
<option value="{{l.id}}" {% if l == legislatura_selecionada %} selected {% endif %}>
{{l}}
</option>
{% endfor %}
</select>
</div>
<div class="col-md-6">
<label>Escolha uma Sessão Legislativa</label>
<select name="sessao" id="id_sessao_legislativa" class="form-control">
{% for s in sessoes %}
<option value="{{s.id}}" {% if s == sessao_selecionada %} selected {% endif %}>
{{s}}
</option>
{% endfor %}
</select>
</div>
</div>
</fieldset>
<br />
<fieldset class="form-group lista-parlamentares">
<legend>Composição da Mesa Diretora</legend>
<table id="tabela-composicao" class="table table-striped table-hover table-link-ordering">
<thead>
<tr>
<th></th>
<th>Nome do Parlamentar</th>
<th>Partido</th>
<th>Cargo</th>
</tr>
</thead>
<tbody>
{% for p in composicao_mesa %}
<tr>
{% if p.parlamentar.fotografia %}
<td>
<div id="w-100">
<img class="img-fluid img-thumbnail" src="{% cropped_thumbnail p.parlamentar "cropping"%}">
</div>
{% else %}
<td></td>
{% endif %}
<td><a href="{% url 'sapl.parlamentares:parlamentar_detail' p.parlamentar.pk %}">{{p.parlamentar.nome_parlamentar}}</a></td>
<td>{{p.parlamentar.filiacao_atual}}</td>
<td>{{p.cargo}}</td>
</tr>
{% endfor %}
</tbody>
</table>
</fieldset>
</form>
{% endblock detail_content %}
{% block extra_js %}
<script language="Javascript">
//##############################################################
//# USEFUL FUNCTIONS #
//##############################################################
function retorna_imagem(url){
if (url != null){
image_component = '<img class="img-fluid img-thumbnail" src="' + url + '">'
return image_component
}
else{
return ''
}
}
//##############################################################
//# EVENT HANDLERS #
//##############################################################
function altera_field(id_legislatura, id_sessao=null){
// Pega o novo valor do campo que foi modificado (Sessao/Legislatura)
var sessao_value = id_sessao
var legislatura_value = id_legislatura
// Limpa o campo que será atualizado
$("#id_sessao_legislativa option").remove();
$("#tabela-composicao tbody").empty();
$.get("/mesa-diretora/altera-field-mesa-public-view",
{legislatura: legislatura_value, sessao: sessao_value},
function(data) {
// Caso não venha nenhum dado da requisição, retorna null
if ($.isEmptyObject(data)){
return null
}
lista_sessoes = data['lista_sessoes'];
lista_parlamentares = data['lista_parlamentares'];
lista_cargos = data['lista_cargos'];
lista_fotos = data['lista_fotos']
lista_partidos = data['lista_partidos']
// Atualiza a listagem de sessões
for (i = 0; i < lista_sessoes.length; i++) {
$('#id_sessao_legislativa').append('<option value="' + lista_sessoes[i][0] + '">' + lista_sessoes[i][1] + '</option>');
}
// Atualiza a tabela de composição
for (i = 0; i < lista_parlamentares.length; i++) {
$("#tabela-composicao tbody").append('<tr> <td> <div class="w-100">' + retorna_imagem(lista_fotos[i]) +' </div> </td> <td><a href="/parlamentar/' + lista_parlamentares[i][0] + '">' + lista_parlamentares[i][1] + '</a></td> <td>' + lista_partidos[i] + '</td> <td>'+ lista_cargos[i][1] + '</td> </tr>');
}
// Garante que a Sessão atual será a selecionada previamente e, no caso em que
// o campo modificado seja o de Legislatura, que a Sessão seja a última daquela
// legislatura
$("#id_sessao_legislativa").val(data['sessao_selecionada'])
});
}
//#############################################################
//# EVENTS CATCH #
//#############################################################
$("#id_legislatura").change(function(){
legislatura = $("#id_legislatura").val();
altera_field(legislatura);
});
$("#id_sessao_legislativa").change(function(){
legislatura = $("#id_legislatura").val();
sessao = $("#id_sessao_legislativa").val();
altera_field(legislatura, sessao);
});
</script>
{% endblock %}

1
sapl/utils.py

@ -267,6 +267,7 @@ class SelectSubmitChangeWidget(forms.Select):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.attrs.update({'onchange': 'this.form.submit();'}) self.attrs.update({'onchange': 'this.form.submit();'})
class SaplGenericForeignKey(GenericForeignKey): class SaplGenericForeignKey(GenericForeignKey):
def __init__( def __init__(

Loading…
Cancel
Save