From 6408ac90c0dcc7b3e46ea155f8d0c80b63a7e0d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Rodrigues?= Date: Wed, 17 Apr 2019 14:17:48 -0300 Subject: [PATCH 1/5] =?UTF-8?q?Adicionar=20Conte=C3=BAdo=20Multim=C3=ADdia?= =?UTF-8?q?=20-=20PDF=20Resumo=20(#2731)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../templates/pdf_sessao_plenaria_gerar.py | 24 +++++++++++++++++-- sapl/relatorios/views.py | 15 ++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/sapl/relatorios/templates/pdf_sessao_plenaria_gerar.py b/sapl/relatorios/templates/pdf_sessao_plenaria_gerar.py index 4c388e59a..4bbe31bed 100644 --- a/sapl/relatorios/templates/pdf_sessao_plenaria_gerar.py +++ b/sapl/relatorios/templates/pdf_sessao_plenaria_gerar.py @@ -128,6 +128,24 @@ def inf_basicas(inf_basicas_dic): return tmp +def multimidia(cont_mult_dic): + """ + """ + tmp = "" + + mul_audio = cont_mult_dic['multimidia_audio'] + mul_video = cont_mult_dic['multimidia_video'] + + tmp += '\t\tConteúdo Multimídia\n' + tmp += '\t\t\n' + tmp += '\t\t\t
\n' + tmp += '\t\t
\n' + tmp += '\t\tAudio: ' + mul_audio + '\n' + tmp += '\t\tVideo: ' + mul_video + '\n' + + return tmp + + def mesa(lst_mesa): """ @@ -392,7 +410,7 @@ def ocorrencias(lst_ocorrencias): return tmp -def principal(rodape_dic, imagem, inf_basicas_dic, lst_mesa, lst_presenca_sessao, lst_ausencia_sessao, lst_expedientes, lst_expediente_materia, lst_expediente_materia_vot_nom, lst_oradores_expediente, lst_presenca_ordem_dia, lst_votacao, lst_votacao_vot_nom, lst_oradores_ordemdia, lst_oradores, lst_ocorrencias): +def principal(rodape_dic, imagem, inf_basicas_dic, cont_mult_dic, lst_mesa, lst_presenca_sessao, lst_ausencia_sessao, lst_expedientes, lst_expediente_materia, lst_expediente_materia_vot_nom, lst_oradores_expediente, lst_presenca_ordem_dia, lst_votacao, lst_votacao_vot_nom, lst_oradores_ordemdia, lst_oradores, lst_ocorrencias): """ """ arquivoPdf = str(int(time.time() * 100)) + ".pdf" @@ -416,7 +434,7 @@ def principal(rodape_dic, imagem, inf_basicas_dic, lst_mesa, lst_presenca_sessao ordenacao = ResumoOrdenacao.objects.first() dict_ord_template = { - 'cont_mult': '', + 'cont_mult': multimidia(cont_mult_dic), 'exp': expedientes(lst_expedientes), 'id_basica': inf_basicas(inf_basicas_dic), 'lista_p': presenca(lst_presenca_sessao, lst_ausencia_sessao), @@ -452,6 +470,7 @@ def principal(rodape_dic, imagem, inf_basicas_dic, lst_mesa, lst_presenca_sessao logger.error("KeyError: " + str(e) + ". Erro ao tentar utilizar " "configuração de ordenação. Utilizando ordenação padrão.") tmp += inf_basicas(inf_basicas_dic) + tmp += multimidia(cont_mult_dic) tmp += mesa(lst_mesa) tmp += presenca(lst_presenca_sessao, lst_ausencia_sessao) tmp += expedientes(lst_expedientes) @@ -467,6 +486,7 @@ def principal(rodape_dic, imagem, inf_basicas_dic, lst_mesa, lst_presenca_sessao else: tmp += inf_basicas(inf_basicas_dic) + tmp += multimidia(cont_mult_dic) tmp += mesa(lst_mesa) tmp += presenca(lst_presenca_sessao, lst_ausencia_sessao) tmp += expedientes(lst_expedientes) diff --git a/sapl/relatorios/views.py b/sapl/relatorios/views.py index 5bd3fe6f7..72595b239 100755 --- a/sapl/relatorios/views.py +++ b/sapl/relatorios/views.py @@ -519,6 +519,18 @@ def get_sessao_plenaria(sessao, casa): inf_basicas_dic["dat_fim_sessao"] = '' inf_basicas_dic["hr_fim_sessao"] = sessao.hora_fim inf_basicas_dic["nom_camara"] = casa.nome + + # Conteudo multimidia + cont_mult_dic = {} + if sessao.url_audio: + cont_mult_dic['multimidia_audio'] = str(sessao.url_audio) + else: + cont_mult_dic['multimidia_audio'] = 'Indisponível' + + if sessao.url_video: + cont_mult_dic['multimidia_video'] = str(sessao.url_video) + else: + cont_mult_dic['multimidia_video'] = 'Indisponível' # Lista da composicao da mesa diretora lst_mesa = [] @@ -852,6 +864,7 @@ def get_sessao_plenaria(sessao, casa): lst_ocorrencias.append(o) return (inf_basicas_dic, + cont_mult_dic, lst_mesa, lst_presenca_sessao, lst_ausencia_sessao, @@ -910,6 +923,7 @@ def relatorio_sessao_plenaria(request, pk): raise Http404('Essa página não existe') (inf_basicas_dic, + cont_mult_dic, lst_mesa, lst_presenca_sessao, lst_ausencia_sessao, @@ -934,6 +948,7 @@ def relatorio_sessao_plenaria(request, pk): rodape, imagem, inf_basicas_dic, + cont_mult_dic, lst_mesa, lst_presenca_sessao, lst_ausencia_sessao, From e4ac60abc9615aa1eb5b11b17876cecd7cf702df Mon Sep 17 00:00:00 2001 From: Cesar Augusto de Carvalho Date: Wed, 17 Apr 2019 14:21:18 -0300 Subject: [PATCH 2/5] =?UTF-8?q?Reordena=20configura=C3=A7oes=20do=20cronom?= =?UTF-8?q?etro=20(#2735)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/templates/base/layouts.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sapl/templates/base/layouts.yaml b/sapl/templates/base/layouts.yaml index 91f0cd67e..3d248c313 100644 --- a/sapl/templates/base/layouts.yaml +++ b/sapl/templates/base/layouts.yaml @@ -31,7 +31,8 @@ AppConfig: - assinatura_ata {% trans 'Cronômetros do Painel' %}: - - cronometro_discurso cronometro_aparte cronometro_ordem cronometro_consideracoes + - cronometro_discurso cronometro_aparte + - cronometro_ordem cronometro_consideracoes {% trans 'Configurações do Painel' %}: - mostrar_brasao_painel From bf024efcf4e16ab2f9d12522da1077e983c7afe5 Mon Sep 17 00:00:00 2001 From: Ricardo Lima Canela Date: Wed, 17 Apr 2019 14:24:50 -0300 Subject: [PATCH 3/5] verifica quatro vezes se solr esta online (#2732) --- Dockerfile | 1 + check_solr.sh | 13 ++++++++++--- docker-compose.yml | 17 +++++++++++++++++ start.sh | 14 +++++++++++--- 4 files changed, 39 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index 015357a40..9c33fcd0f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -39,6 +39,7 @@ RUN rm -rf /var/interlegis/sapl/sapl/.env && \ rm -rf /var/interlegis/sapl/sapl.db RUN chmod +x /var/interlegis/sapl/start.sh && \ + chmod +x /var/interlegis/sapl/check_solr.sh && \ ln -sf /dev/stdout /var/log/nginx/access.log && \ ln -sf /dev/stderr /var/log/nginx/error.log && \ mkdir /var/log/sapl/ && touch /var/interlegis/sapl/sapl.log && \ diff --git a/check_solr.sh b/check_solr.sh index b3c4760c4..c600466bb 100644 --- a/check_solr.sh +++ b/check_solr.sh @@ -4,15 +4,22 @@ SOLR_URL=$1 +RETRY_COUNT=1 +RETRY_LIMIT=4 + echo "Waiting for solr connection at $SOLR_URL ..." -while true; do +while [[ $RETRY_COUNT < $RETRY_LIMIT ]]; do + echo "Attempt to connect to solr: $RETRY_COUNT of $RETRY_LIMIT" + let RETRY_COUNT=RETRY_COUNT+1; echo "$SOLR_URL/solr/admin/collections?action=LIST" RESULT=$(curl -s -o /dev/null -I "$SOLR_URL/solr/admin/collections?action=LIST" -w '%{http_code}') echo $RESULT - if [ "$RESULT" -eq '200' ]; then + if [ $RESULT == 200 ]; then echo "Solr server is up!" - break + exit 1 else sleep 3 fi done +echo "Solr connection failed." +exit 2 \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index e2dfb6824..5fe0b554b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,6 +12,7 @@ sapldb: - "5432:5432" sapl: image: interlegis/sapl:3.1.153 +# build: . restart: always environment: ADMIN_PASSWORD: interlegis @@ -23,11 +24,27 @@ sapl: EMAIL_HOST_USER: usuariosmtp EMAIL_SEND_USER: usuariosmtp EMAIL_HOST_PASSWORD: senhasmtp +# USE_SOLR: 'True' +# SOLR_COLLECTION: sapl +# SOLR_URL: http://saplsolr:8983 TZ: America/Sao_Paulo volumes: - sapl_data:/var/interlegis/sapl/data - sapl_media:/var/interlegis/sapl/media links: - sapldb +# - saplsolr ports: - "80:80" + +#saplsolr: +# image: solr:7.4-alpine +# restart: always +# command: bin/solr start -c -f +# volumes: +# - solr_data:/opt/solr/server/solr +# - solr_configsets:/opt/solr/server/solr/configsets +# ports: +# - "8983:8983" + + diff --git a/start.sh b/start.sh index 0790c2c24..bea1eb959 100755 --- a/start.sh +++ b/start.sh @@ -70,11 +70,19 @@ if [ "${USE_SOLR-False}" == "True" ] || [ "${USE_SOLR-False}" == "true" ]; then echo "REPLICATION FACTOR: $RF" echo "MAX SHARDS PER NODE: $MAX_SHARDS_PER_NODE" echo "=========================================" - + + echo "running solr script" /bin/bash check_solr.sh $SOLR_URL + CHECK_SOLR_RETURN=$? + + if [ $CHECK_SOLR_RETURN == 1 ]; then + echo "Connecting to solr..." + python3 solr_api.py -u $SOLR_URL -c $SOLR_COLLECTION -s $NUM_SHARDS -rf $RF -ms $MAX_SHARDS_PER_NODE & + # python3 manage.py rebuild_index --noinput & + else + echo "Solr is offline, not possible to connect." + fi - python3 solr_api.py -u $SOLR_URL -c $SOLR_COLLECTION -s $NUM_SHARDS -rf $RF -ms $MAX_SHARDS_PER_NODE & - # python3 manage.py rebuild_index --noinput & else echo "Suporte a SOLR não inicializado." fi From 5f0a0e4363af74b35e0f4945c7e6ca7f2207c2d9 Mon Sep 17 00:00:00 2001 From: Ulysses Lara Date: Wed, 17 Apr 2019 14:31:16 -0300 Subject: [PATCH 4/5] Fix #2712 Ocorrencias de partido atual em extrato e resumo. (#2714) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [BugFix] Fix #2712 Arrumando ocorrencias de filiação atual em extrato e resumo da sessão * Colocando if de quando não a partido --- sapl/templates/relatorios/relatorio_ata.html | 8 ++++---- sapl/templates/sessao/blocos_ata/assinaturas.html | 4 ++-- sapl/templates/sessao/blocos_ata/lista_presenca.html | 2 +- .../sessao/blocos_ata/lista_presenca_ordem_dia.html | 2 +- sapl/templates/sessao/blocos_ata/mesa_diretora.html | 6 ++++-- sapl/templates/sessao/blocos_ata/oradores_expediente.html | 5 ++++- .../templates/sessao/blocos_ata/oradores_explicacoes.html | 4 +++- .../sessao/blocos_resumo/lista_presenca_ordem_dia.html | 2 +- sapl/templates/sessao/blocos_resumo/mesa_diretora.html | 4 +++- .../sessao/blocos_resumo/oradores_explicacoes.html | 4 +++- 10 files changed, 26 insertions(+), 15 deletions(-) diff --git a/sapl/templates/relatorios/relatorio_ata.html b/sapl/templates/relatorios/relatorio_ata.html index 05c5355c4..11e3ce428 100644 --- a/sapl/templates/relatorios/relatorio_ata.html +++ b/sapl/templates/relatorios/relatorio_ata.html @@ -65,12 +65,12 @@
____________________
-

{{p.cargo}}: {{p.parlamentar.nome_completo}} / {{ p.parlamentar|filiacao_data_filter:object.data_inicio }}

+

{{p.cargo}}: {{p.parlamentar.nome_completo}} / {% if p.parlamentar|filiacao_data_filter:object.data_inicio %} {{ p.parlamentar|filiacao_data_filter:object.data_inicio }} {% else %} Sem partido {% endif %}




{% else %}
____________________
-

{{p.cargo}}: {{p.parlamentar.nome_completo}} / {{ p.parlamentar|filiacao_data_filter:object.data_inicio }}

+

{{p.cargo}}: {{p.parlamentar.nome_completo}} / {% if p.parlamentar|filiacao_data_filter:object.data_inicio %} {{ p.parlamentar|filiacao_data_filter:object.data_inicio }} {% else %} Sem partido {% endif %}




@@ -84,12 +84,12 @@
_____________________

- {{p.nome_completo}} / {{ p|filiacao_data_filter:object.data_inicio }}

+ {{p.nome_completo}} / {% if p|filiacao_data_filter:object.data_inicio %} {{ p|filiacao_data_filter:object.data_inicio }} {% else %} Sem partido {% endif %}




{% else %}
_____________________
-

{{p.nome_completo}} / {{ p|filiacao_data_filter:object.data_inicio }}

+

{{p.nome_completo}} / {% if p|filiacao_data_filter:object.data_inicio %} {{ p|filiacao_data_filter:object.data_inicio }} {% else %} Sem partido {% endif %}




diff --git a/sapl/templates/sessao/blocos_ata/assinaturas.html b/sapl/templates/sessao/blocos_ata/assinaturas.html index 9eba4ce9b..520215fe1 100644 --- a/sapl/templates/sessao/blocos_ata/assinaturas.html +++ b/sapl/templates/sessao/blocos_ata/assinaturas.html @@ -5,13 +5,13 @@

{% for p in assinatura_mesa %}
___________________________________________
- {{p.cargo}}: {{p.parlamentar.nome_completo}} / {{ p.parlamentar|filiacao_data_filter:object.data_inicio }} + {{p.cargo}}: {{p.parlamentar.nome_completo}} / {% if p.parlamentar|filiacao_data_filter:object.data_inicio %} {{ p.parlamentar|filiacao_data_filter:object.data_inicio }} {% else %} Sem partido {% endif %}


{% endfor %} {% for p in assinatura_presentes %}
___________________________________________
- {{p.nome_completo}} / {{ p|filiacao_data_filter:object.data_inicio }} + {{p.nome_completo}} / {% if p|filiacao_data_filter:object.data_inicio %} {{ p|filiacao_data_filter:object.data_inicio }} {% else %} Sem partido {% endif %}


{% endfor %} diff --git a/sapl/templates/sessao/blocos_ata/lista_presenca.html b/sapl/templates/sessao/blocos_ata/lista_presenca.html index 1efc2c8ea..f2a4df4c5 100644 --- a/sapl/templates/sessao/blocos_ata/lista_presenca.html +++ b/sapl/templates/sessao/blocos_ata/lista_presenca.html @@ -5,7 +5,7 @@ {% if presenca_sessao %} Lista de Presença na Sessão: {% for p in presenca_sessao %} - {{p.nome_completo}} / {{ p|filiacao_data_filter:object.data_inicio }} + {{p.nome_completo}} / {% if p|filiacao_data_filter:object.data_inicio %} {{ p|filiacao_data_filter:object.data_inicio }} {% else %} Sem partido {% endif %} {% if not forloop.last %} ; {% endif %} {% endfor %} {% endif %} diff --git a/sapl/templates/sessao/blocos_ata/lista_presenca_ordem_dia.html b/sapl/templates/sessao/blocos_ata/lista_presenca_ordem_dia.html index 855d1be6f..58729609c 100644 --- a/sapl/templates/sessao/blocos_ata/lista_presenca_ordem_dia.html +++ b/sapl/templates/sessao/blocos_ata/lista_presenca_ordem_dia.html @@ -5,7 +5,7 @@ {% if presenca_ordem %} Lista de Presença na Ordem do Dia: {% for p in presenca_ordem %} - {{p.nome_completo}} / {{ p|filiacao_data_filter:object.data_inicio }} + {{p.nome_completo}} / {% if p|filiacao_data_filter:object.data_inicio %} {{ p|filiacao_data_filter:object.data_inicio }} {% else %} Sem partido {% endif %} {% if not forloop.last %} ; {% endif %} {% endfor %} {% endif %} diff --git a/sapl/templates/sessao/blocos_ata/mesa_diretora.html b/sapl/templates/sessao/blocos_ata/mesa_diretora.html index 2d2de86d7..e0f0d4b8b 100644 --- a/sapl/templates/sessao/blocos_ata/mesa_diretora.html +++ b/sapl/templates/sessao/blocos_ata/mesa_diretora.html @@ -1,13 +1,15 @@ +{% load common_tags %} +

{% if mesa %} Mesa Diretora: {% for m in mesa %} {{m.cargo}}: - {{m.parlamentar.nome_completo}} / {{ m.parlamentar.filiacao_atual }} + {{m.parlamentar.nome_completo}} / {% if m.parlamentar|filiacao_data_filter:object.data_inicio %} {{ m.parlamentar|filiacao_data_filter:object.data_inicio }} {% else %} Sem partido {% endif %} {% if not forloop.last %} ; {% endif %} {% endfor %} {% endif %}

-
\ No newline at end of file + diff --git a/sapl/templates/sessao/blocos_ata/oradores_expediente.html b/sapl/templates/sessao/blocos_ata/oradores_expediente.html index f85b27895..1b355c128 100644 --- a/sapl/templates/sessao/blocos_ata/oradores_expediente.html +++ b/sapl/templates/sessao/blocos_ata/oradores_expediente.html @@ -1,9 +1,12 @@ +{% load common_tags %} + +

{% if oradores %} Oradores do Expediente: {% for o in oradores %} - {{o.numero_ordem}} - {{o.parlamentar.nome_completo}} / {{ o.parlamentar.filiacao_atual }} + {{o.numero_ordem}} - {{o.parlamentar.nome_completo}} / {% if o.parlamentar|filiacao_data_filter:object.data_inicio %} {{ o.parlamentar|filiacao_data_filter:object.data_inicio }} {% else %} Sem partido {% endif %} {% if o.observacao %} - {{o.observacao}} {% endif %} {% if not forloop.last %} ; {% endif %} {% endfor %} diff --git a/sapl/templates/sessao/blocos_ata/oradores_explicacoes.html b/sapl/templates/sessao/blocos_ata/oradores_explicacoes.html index 98a454d78..70d4d65b2 100644 --- a/sapl/templates/sessao/blocos_ata/oradores_explicacoes.html +++ b/sapl/templates/sessao/blocos_ata/oradores_explicacoes.html @@ -1,9 +1,11 @@ +{% load common_tags %} +

{% if oradores_explicacoes %} Oradores das Explicações Pessoais: {% for o in oradores_explicacoes %} - {{o.numero_ordem}} - {{o.parlamentar.nome_completo}} / {{ o.parlamentar.filiacao_atual }} + {{o.numero_ordem}} - {{o.parlamentar.nome_completo}} / {% if o.parlamentar|filiacao_data_filter:object.data_inicio %} {{ o.parlamentar|filiacao_data_filter:object.data_inicio }} {% else %} Sem partido {% endif %} {% if o.observacao %} - {{o.observacao}} {% endif %} {% if not forloop.last %} ; {% endif %} {% endfor %} diff --git a/sapl/templates/sessao/blocos_resumo/lista_presenca_ordem_dia.html b/sapl/templates/sessao/blocos_resumo/lista_presenca_ordem_dia.html index b3074c0ea..672d28063 100644 --- a/sapl/templates/sessao/blocos_resumo/lista_presenca_ordem_dia.html +++ b/sapl/templates/sessao/blocos_resumo/lista_presenca_ordem_dia.html @@ -4,7 +4,7 @@ Lista de Presença na Ordem do Dia

{% for p in presenca_ordem %} -
{{p.nome_parlamentar}} / {% if p|filiacao_data_filter:object.data_inicio %} {{ p|filiacao_data_filter:object.data_inicio }} {% else %} Sem partido {% endif %}
+
{{p.nome_parlamentar}} / {% if p|filiacao_data_filter:object.data_inicio %} {{ p|filiacao_data_filter:object.data_inicio }} {% else %} Sem partido {% endif %}
{% endfor %}
\ No newline at end of file diff --git a/sapl/templates/sessao/blocos_resumo/mesa_diretora.html b/sapl/templates/sessao/blocos_resumo/mesa_diretora.html index d8340c477..ed7bfc318 100644 --- a/sapl/templates/sessao/blocos_resumo/mesa_diretora.html +++ b/sapl/templates/sessao/blocos_resumo/mesa_diretora.html @@ -1,9 +1,11 @@ +{% load common_tags %} +
Mesa Diretora
{% for m in mesa %}
{{m.cargo}}: - {{m.parlamentar.nome_parlamentar}} / {% if m.parlamentar.filiacao_atual %} {{ m.parlamentar.filiacao_atual }} {% else %} Sem partido {% endif %} + {{m.parlamentar.nome_parlamentar}} / {% if p.parlamentar|filiacao_data_filter:object.data_inicio %} {{ m.parlamentar|filiacao_data_filter:object.data_inicio }} {% else %} Sem partido {% endif %}
{% endfor %}
diff --git a/sapl/templates/sessao/blocos_resumo/oradores_explicacoes.html b/sapl/templates/sessao/blocos_resumo/oradores_explicacoes.html index e97ac5aea..e1a835cbc 100644 --- a/sapl/templates/sessao/blocos_resumo/oradores_explicacoes.html +++ b/sapl/templates/sessao/blocos_resumo/oradores_explicacoes.html @@ -1,3 +1,5 @@ +{% load common_tags %} +
Oradores das Explicações Pessoais
@@ -6,7 +8,7 @@
{% for o in oradores_explicacoes %} -
{{o.numero_ordem}} - {{o.parlamentar.nome_parlamentar}} / {{ o.parlamentar.filiacao_atual }}
+
{{o.numero_ordem}} - {{o.parlamentar.nome_parlamentar}} / {% if o.parlamentar|filiacao_data_filter:object.data_inicio %} {{ o.parlamentar|filiacao_data_filter:object.data_inicio }} {% else %} Sem partido {% endif %}
{{o.url_discurso}}

{% endfor %} From cf3df64125ac285f597eb5e27206db9cabfb3ebb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Cantu=C3=A1ria?= Date: Wed, 17 Apr 2019 14:39:10 -0300 Subject: [PATCH 5/5] =?UTF-8?q?Fix=20#2700=20Corrige=20Duplica=C3=A7=C3=A3?= =?UTF-8?q?o=20em=20PDF=20de=20Resumo=20de=20Sess=C3=A3o=20(#2704)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Corrige duplicação em pdf de resumo de sessão * Corrige conflito de migração --- sapl/sessao/forms.py | 128 ++++++++++------ .../migrations/0037_auto_20190415_1635.py | 85 +++++++++++ .../migrations/0038_merge_20190415_1800.py | 16 ++ sapl/sessao/models.py | 84 +++++++++-- sapl/sessao/views.py | 138 ++++++------------ 5 files changed, 297 insertions(+), 154 deletions(-) create mode 100644 sapl/sessao/migrations/0037_auto_20190415_1635.py create mode 100644 sapl/sessao/migrations/0038_merge_20190415_1800.py diff --git a/sapl/sessao/forms.py b/sapl/sessao/forms.py index 373b1e951..451f2b990 100644 --- a/sapl/sessao/forms.py +++ b/sapl/sessao/forms.py @@ -26,29 +26,14 @@ from sapl.utils import (RANGE_DIAS_MES, RANGE_MESES, from .models import (Bancada, Bloco, ExpedienteMateria, JustificativaAusencia, Orador, OradorExpediente, OrdemDia, PresencaOrdemDia, SessaoPlenaria, SessaoPlenariaPresenca, TipoResultadoVotacao, - OcorrenciaSessao, RetiradaPauta, TipoRetiradaPauta, OradorOrdemDia) + OcorrenciaSessao, RetiradaPauta, TipoRetiradaPauta, OradorOrdemDia, ORDENACAO_RESUMO, + ResumoOrdenacao) MES_CHOICES = RANGE_MESES DIA_CHOICES = RANGE_DIAS_MES -ORDENACAO_RESUMO = [('cont_mult', 'Conteúdo Multimídia'), - ('exp', 'Expedientes'), - ('id_basica', 'Identificação Básica'), - ('lista_p', 'Lista de Presença'), - ('lista_p_o_d', 'Lista de Presença Ordem do Dia'), - ('mat_exp', 'Matérias do Expediente'), - ('mat_o_d', 'Matérias da Ordem do Dia'), - ('mesa_d', 'Mesa Diretora'), - ('oradores_exped', 'Oradores do Expediente'), - ('oradores_expli', 'Oradores das Explicações Pessoais'), - ('ocorr_sessao', 'Ocorrências da Sessão'), - ('v_n_mat_exp', 'Votações Nominais - Matérias do Expediente'), - ('v_n_mat_o_d', 'Votações Nominais - Matérias da Ordem do Dia'), - ('oradores_o_d', 'Oradores da Ordem do Dia')] - - class SessaoPlenariaForm(FileFieldCheckMixin, ModelForm): class Meta: @@ -807,38 +792,64 @@ class PautaSessaoFilterSet(SessaoPlenariaFilterSet): class ResumoOrdenacaoForm(forms.Form): - primeiro = forms.ChoiceField(label=_('1°'), - choices=ORDENACAO_RESUMO) - segundo = forms.ChoiceField(label=_('2°'), - choices=ORDENACAO_RESUMO) - terceiro = forms.ChoiceField(label='3°', - choices=ORDENACAO_RESUMO) - quarto = forms.ChoiceField(label=_('4°'), - choices=ORDENACAO_RESUMO) - quinto = forms.ChoiceField(label=_('5°'), - choices=ORDENACAO_RESUMO) - sexto = forms.ChoiceField(label=_('6°'), - choices=ORDENACAO_RESUMO) - setimo = forms.ChoiceField(label=_('7°'), - choices=ORDENACAO_RESUMO) - oitavo = forms.ChoiceField(label=_('8°'), - choices=ORDENACAO_RESUMO) - nono = forms.ChoiceField(label=_('9°'), - choices=ORDENACAO_RESUMO) - decimo = forms.ChoiceField(label='10°', - choices=ORDENACAO_RESUMO) - decimo_primeiro = forms.ChoiceField(label='11°', - choices=ORDENACAO_RESUMO) - decimo_segundo = forms.ChoiceField(label='12°', - choices=ORDENACAO_RESUMO) - decimo_terceiro = forms.ChoiceField(label='13°', - choices=ORDENACAO_RESUMO) - decimo_quarto = forms.ChoiceField(label='14°', - choices=ORDENACAO_RESUMO) + primeiro = forms.ChoiceField( + label='1°', + choices=ORDENACAO_RESUMO + ) + segundo = forms.ChoiceField( + label='2°', + choices=ORDENACAO_RESUMO + ) + terceiro = forms.ChoiceField( + label='3°', + choices=ORDENACAO_RESUMO + ) + quarto = forms.ChoiceField( + label='4°', + choices=ORDENACAO_RESUMO + ) + quinto = forms.ChoiceField( + label='5°', + choices=ORDENACAO_RESUMO + ) + sexto = forms.ChoiceField( + label='6°', + choices=ORDENACAO_RESUMO + ) + setimo = forms.ChoiceField( + label='7°', + choices=ORDENACAO_RESUMO + ) + oitavo = forms.ChoiceField( + label='8°', + choices=ORDENACAO_RESUMO + ) + nono = forms.ChoiceField( + label='9°', + choices=ORDENACAO_RESUMO + ) + decimo = forms.ChoiceField( + label='10°', + choices=ORDENACAO_RESUMO + ) + decimo_primeiro = forms.ChoiceField( + label='11°', + choices=ORDENACAO_RESUMO + ) + decimo_segundo = forms.ChoiceField( + label='12°', + choices=ORDENACAO_RESUMO + ) + decimo_terceiro = forms.ChoiceField( + label='13°', + choices=ORDENACAO_RESUMO + ) + decimo_quarto = forms.ChoiceField( + label='14°', + choices=ORDENACAO_RESUMO + ) def __init__(self, *args, **kwargs): - super(ResumoOrdenacaoForm, self).__init__(*args, **kwargs) - row1 = to_row( [('primeiro', 12)]) row2 = to_row( @@ -878,6 +889,8 @@ class ResumoOrdenacaoForm(forms.Form): form_actions(label='Atualizar')) ) + super().__init__(*args, **kwargs) + def clean(self): super(ResumoOrdenacaoForm, self).clean() @@ -896,6 +909,27 @@ class ResumoOrdenacaoForm(forms.Form): 'Não é possível ter campos repetidos')) return self.cleaned_data + def save(self): + ordenacao = ResumoOrdenacao.objects.get() + cleaned_data = self.cleaned_data + + ordenacao.primeiro = cleaned_data['primeiro'] + ordenacao.segundo = cleaned_data['segundo'] + ordenacao.terceiro = cleaned_data['terceiro'] + ordenacao.quarto = cleaned_data['quarto'] + ordenacao.quinto = cleaned_data['quinto'] + ordenacao.sexto = cleaned_data['sexto'] + ordenacao.setimo = cleaned_data['setimo'] + ordenacao.oitavo = cleaned_data['oitavo'] + ordenacao.nono = cleaned_data['nono'] + ordenacao.decimo = cleaned_data['decimo'] + ordenacao.decimo_primeiro = cleaned_data['decimo_primeiro'] + ordenacao.decimo_segundo = cleaned_data['decimo_segundo'] + ordenacao.decimo_terceiro = cleaned_data['decimo_terceiro'] + ordenacao.decimo_quarto = cleaned_data['decimo_quarto'] + + ordenacao.save() + class JustificativaAusenciaForm(ModelForm): diff --git a/sapl/sessao/migrations/0037_auto_20190415_1635.py b/sapl/sessao/migrations/0037_auto_20190415_1635.py new file mode 100644 index 000000000..701d9eee9 --- /dev/null +++ b/sapl/sessao/migrations/0037_auto_20190415_1635.py @@ -0,0 +1,85 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-04-15 19:35 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sessao', '0036_auto_20190412_1106'), + ] + + operations = [ + migrations.AlterField( + model_name='resumoordenacao', + name='decimo', + field=models.CharField(default='mat_o_d', max_length=50), + ), + migrations.AlterField( + model_name='resumoordenacao', + name='decimo_primeiro', + field=models.CharField(default='v_n_mat_o_d', max_length=50), + ), + migrations.AlterField( + model_name='resumoordenacao', + name='decimo_quarto', + field=models.CharField(default='ocorr_sessao', max_length=50), + ), + migrations.AlterField( + model_name='resumoordenacao', + name='decimo_segundo', + field=models.CharField(default='oradores_o_d', max_length=50), + ), + migrations.AlterField( + model_name='resumoordenacao', + name='decimo_terceiro', + field=models.CharField(default='oradores_expli', max_length=50), + ), + migrations.AlterField( + model_name='resumoordenacao', + name='nono', + field=models.CharField(default='lista_p_o_d', max_length=50), + ), + migrations.AlterField( + model_name='resumoordenacao', + name='oitavo', + field=models.CharField(default='oradores_exped', max_length=50), + ), + migrations.AlterField( + model_name='resumoordenacao', + name='primeiro', + field=models.CharField(default='id_basica', max_length=50), + ), + migrations.AlterField( + model_name='resumoordenacao', + name='quarto', + field=models.CharField(default='lista_p', max_length=50), + ), + migrations.AlterField( + model_name='resumoordenacao', + name='quinto', + field=models.CharField(default='exp', max_length=50), + ), + migrations.AlterField( + model_name='resumoordenacao', + name='segundo', + field=models.CharField(default='cont_mult', max_length=50), + ), + migrations.AlterField( + model_name='resumoordenacao', + name='setimo', + field=models.CharField(default='v_n_mat_exp', max_length=50), + ), + migrations.AlterField( + model_name='resumoordenacao', + name='sexto', + field=models.CharField(default='mat_exp', max_length=50), + ), + migrations.AlterField( + model_name='resumoordenacao', + name='terceiro', + field=models.CharField(default='mesa_d', max_length=50), + ), + ] diff --git a/sapl/sessao/migrations/0038_merge_20190415_1800.py b/sapl/sessao/migrations/0038_merge_20190415_1800.py new file mode 100644 index 000000000..0bf3ab4ea --- /dev/null +++ b/sapl/sessao/migrations/0038_merge_20190415_1800.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-04-15 21:00 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('sessao', '0037_auto_20190415_1635'), + ('sessao', '0037_auto_20190415_1324'), + ] + + operations = [ + ] diff --git a/sapl/sessao/models.py b/sapl/sessao/models.py index 5d2d1c7cc..3d7c98186 100644 --- a/sapl/sessao/models.py +++ b/sapl/sessao/models.py @@ -584,30 +584,86 @@ class Bloco(models.Model): return self.nome +ORDENACAO_RESUMO = [ + ('id_basica', 'Identificação Básica'), + ('cont_mult', 'Conteúdo Multimídia'), + ('mesa_d', 'Mesa Diretora'), + ('lista_p', 'Lista de Presença'), + ('exp', 'Expedientes'), + ('mat_exp', 'Matérias do Expediente'), + ('v_n_mat_exp', 'Votações Nominais - Matérias do Expediente'), + ('oradores_exped', 'Oradores do Expediente'), + ('lista_p_o_d', 'Lista de Presença Ordem do Dia'), + ('mat_o_d', 'Matérias da Ordem do Dia'), + ('v_n_mat_o_d', 'Votações Nominais - Matérias da Ordem do Dia'), + ('oradores_o_d', 'Oradores da Ordem do Dia'), + ('oradores_expli', 'Oradores das Explicações Pessoais'), + ('ocorr_sessao', 'Ocorrências da Sessão') +] + + @reversion.register() class ResumoOrdenacao(models.Model): ''' Tabela para registrar em qual ordem serão renderizados os componentes da tela de resumo de uma sessão ''' - primeiro = models.CharField(max_length=30) - segundo = models.CharField(max_length=30) - terceiro = models.CharField(max_length=30) - quarto = models.CharField(max_length=30) - quinto = models.CharField(max_length=30) - sexto = models.CharField(max_length=30) - setimo = models.CharField(max_length=30) - oitavo = models.CharField(max_length=30) - nono = models.CharField(max_length=30) - decimo = models.CharField(max_length=30) + primeiro = models.CharField( + max_length=50, + default=ORDENACAO_RESUMO[0][0] + ) + segundo = models.CharField( + max_length=50, + default=ORDENACAO_RESUMO[1][0] + ) + terceiro = models.CharField( + max_length=50, + default=ORDENACAO_RESUMO[2][0] + ) + quarto = models.CharField( + max_length=50, + default=ORDENACAO_RESUMO[3][0] + ) + quinto = models.CharField( + max_length=50, + default=ORDENACAO_RESUMO[4][0] + ) + sexto = models.CharField( + max_length=50, + default=ORDENACAO_RESUMO[5][0] + ) + setimo = models.CharField( + max_length=50, + default=ORDENACAO_RESUMO[6][0] + ) + oitavo = models.CharField( + max_length=50, + default=ORDENACAO_RESUMO[7][0] + ) + nono = models.CharField( + max_length=50, + default=ORDENACAO_RESUMO[8][0] + ) + decimo = models.CharField( + max_length=50, + default=ORDENACAO_RESUMO[9][0] + ) decimo_primeiro = models.CharField( - max_length=30, default="Ocorrências da Sessão") + max_length=50, + default=ORDENACAO_RESUMO[10][0] + ) decimo_segundo = models.CharField( - max_length=30, default="Votos Nominais Mat Expediente") + max_length=50, + default=ORDENACAO_RESUMO[11][0] + ) decimo_terceiro = models.CharField( - max_length=30, default="Votos Nominais Mat Ordem Dia") + max_length=50, + default=ORDENACAO_RESUMO[12][0] + ) decimo_quarto = models.CharField( - max_length=30, default="Oradores da Ordem do Dia") + max_length=50, + default=ORDENACAO_RESUMO[13][0] + ) class Meta: verbose_name = _('Ordenação do Resumo de uma Sessão') diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index 602e70ca6..afc349221 100755 --- a/sapl/sessao/views.py +++ b/sapl/sessao/views.py @@ -49,7 +49,7 @@ from .models import (Bancada, Bloco, CargoBancada, CargoMesa, PresencaOrdemDia, RegistroVotacao, ResumoOrdenacao, SessaoPlenaria, SessaoPlenariaPresenca, TipoExpediente, TipoResultadoVotacao, TipoSessaoPlenaria, VotoParlamentar, TipoRetiradaPauta, - RetiradaPauta, TipoJustificativa, JustificativaAusencia, OradorOrdemDia) + RetiradaPauta, TipoJustificativa, JustificativaAusencia, OradorOrdemDia, ORDENACAO_RESUMO) TipoSessaoCrud = CrudAux.build(TipoSessaoPlenaria, 'tipo_sessao_plenaria') @@ -1296,49 +1296,38 @@ class ResumoOrdenacaoView(PermissionRequiredMixin, FormView): form_class = ResumoOrdenacaoForm permission_required = {'sessao.change_resumoordenacao'} - def get_success_url(self): - return reverse('sapl.base:sistema') + def get_tupla(self, tupla_key): + for tupla in ORDENACAO_RESUMO: + if tupla[0] == tupla_key: + return tupla def get_initial(self): - initial = super(ResumoOrdenacaoView, self).get_initial() - ordenacao = ResumoOrdenacao.objects.first() - if ordenacao: - initial.update({'primeiro': ordenacao.primeiro, - 'segundo': ordenacao.segundo, - 'terceiro': ordenacao.terceiro, - 'quarto': ordenacao.quarto, - 'quinto': ordenacao.quinto, - 'sexto': ordenacao.sexto, - 'setimo': ordenacao.setimo, - 'oitavo': ordenacao.oitavo, - 'nono': ordenacao.nono, - 'decimo': ordenacao.decimo, - 'decimo_primeiro': ordenacao.decimo_primeiro, - 'decimo_segundo': ordenacao.decimo_segundo, - 'decimo_terceiro': ordenacao.decimo_terceiro, - 'decimo_quarto': ordenacao.decimo_quarto}) - return initial - - def form_valid(self, form): ordenacao = ResumoOrdenacao.objects.get_or_create()[0] - ordenacao.primeiro = form.cleaned_data['primeiro'] - ordenacao.segundo = form.cleaned_data['segundo'] - ordenacao.terceiro = form.cleaned_data['terceiro'] - ordenacao.quarto = form.cleaned_data['quarto'] - ordenacao.quinto = form.cleaned_data['quinto'] - ordenacao.sexto = form.cleaned_data['sexto'] - ordenacao.setimo = form.cleaned_data['setimo'] - ordenacao.oitavo = form.cleaned_data['oitavo'] - ordenacao.nono = form.cleaned_data['nono'] - ordenacao.decimo = form.cleaned_data['decimo'] - ordenacao.decimo_primeiro = form.cleaned_data['decimo_primeiro'] - ordenacao.decimo_segundo = form.cleaned_data['decimo_segundo'] - ordenacao.decimo_terceiro = form.cleaned_data['decimo_terceiro'] - ordenacao.decimo_quarto = form.cleaned_data['decimo_quarto'] - - ordenacao.save() + initial = { + 'primeiro': self.get_tupla(ordenacao.primeiro), + 'segundo': self.get_tupla(ordenacao.segundo), + 'terceiro': self.get_tupla(ordenacao.terceiro), + 'quarto': self.get_tupla(ordenacao.quarto), + 'quinto': self.get_tupla(ordenacao.quinto), + 'sexto': self.get_tupla(ordenacao.sexto), + 'setimo': self.get_tupla(ordenacao.setimo), + 'oitavo': self.get_tupla(ordenacao.oitavo), + 'nono': self.get_tupla(ordenacao.nono), + 'decimo': self.get_tupla(ordenacao.decimo), + 'decimo_primeiro': self.get_tupla(ordenacao.decimo_primeiro), + 'decimo_segundo': self.get_tupla(ordenacao.decimo_segundo), + 'decimo_terceiro': self.get_tupla(ordenacao.decimo_terceiro), + 'decimo_quarto': self.get_tupla(ordenacao.decimo_quarto) + } + + return initial + def get_success_url(self): + return reverse('sapl.base:sistema') + + def form_valid(self, form): + form.save() return HttpResponseRedirect(self.get_success_url()) @@ -1761,7 +1750,6 @@ class ResumoView(DetailView): context.update(get_ocorrencias_da_sessão(self.object)) # ===================================================================== # Indica a ordem com a qual o template será renderizado - ordenacao = ResumoOrdenacao.objects.first() dict_ord_template = { 'cont_mult': 'conteudo_multimidia.html', 'exp': 'expedientes.html', @@ -1779,59 +1767,23 @@ class ResumoView(DetailView): 'ocorr_sessao': 'ocorrencias_da_sessao.html' } - if ordenacao: - try: - context.update( - {'primeiro_ordenacao': dict_ord_template[ordenacao.primeiro], - 'segundo_ordenacao': dict_ord_template[ordenacao.segundo], - 'terceiro_ordenacao': dict_ord_template[ordenacao.terceiro], - 'quarto_ordenacao': dict_ord_template[ordenacao.quarto], - 'quinto_ordenacao': dict_ord_template[ordenacao.quinto], - 'sexto_ordenacao': dict_ord_template[ordenacao.sexto], - 'setimo_ordenacao': dict_ord_template[ordenacao.setimo], - 'oitavo_ordenacao': dict_ord_template[ordenacao.oitavo], - 'nono_ordenacao': dict_ord_template[ordenacao.nono], - 'decimo_ordenacao': dict_ord_template[ordenacao.decimo], - 'decimo_primeiro_ordenacao': dict_ord_template[ordenacao.decimo_primeiro], - 'decimo_segundo_ordenacao': dict_ord_template[ordenacao.decimo_segundo], - 'decimo_terceiro_ordenacao': dict_ord_template[ordenacao.decimo_terceiro], - 'decimo_quarto_ordenacao': dict_ord_template[ordenacao.decimo_quarto]}) - except KeyError as e: - self.logger.error('user=' + self.request.user.username + '. ' + "KeyError: " + str(e) + ". Erro " - "ao tentar utilizar configuração de ordenação. Utilizando ordenação padrão.") - context.update( - {'primeiro_ordenacao': dict_ord_template['id_basica'], - 'segundo_ordenacao': dict_ord_template['cont_mult'], - 'terceiro_ordenacao': dict_ord_template['mesa_d'], - 'quarto_ordenacao': dict_ord_template['lista_p'], - 'quinto_ordenacao': dict_ord_template['exp'], - 'sexto_ordenacao': dict_ord_template['mat_exp'], - 'setimo_ordenacao': dict_ord_template['v_n_mat_exp'], - 'oitavo_ordenacao': dict_ord_template['oradores_exped'], - 'nono_ordenacao': dict_ord_template['lista_p_o_d'], - 'decimo_ordenacao': dict_ord_template['mat_o_d'], - 'decimo_primeiro_ordenacao': dict_ord_template['v_n_mat_o_d'], - 'decimo_segundo_ordenacao': dict_ord_template['oradores_o_d'], - 'decimo_terceiro_ordenacao': dict_ord_template['oradores_expli'], - 'decimo_quarto_ordenacao': dict_ord_template['ocorr_sessao'] - }) - else: - context.update( - {'primeiro_ordenacao': dict_ord_template['id_basica'], - 'segundo_ordenacao': dict_ord_template['cont_mult'], - 'terceiro_ordenacao': dict_ord_template['mesa_d'], - 'quarto_ordenacao': dict_ord_template['lista_p'], - 'quinto_ordenacao': dict_ord_template['exp'], - 'sexto_ordenacao': dict_ord_template['mat_exp'], - 'setimo_ordenacao': dict_ord_template['v_n_mat_exp'], - 'oitavo_ordenacao': dict_ord_template['oradores_exped'], - 'nono_ordenacao': dict_ord_template['lista_p_o_d'], - 'decimo_ordenacao': dict_ord_template['mat_o_d'], - 'decimo_primeiro_ordenacao': dict_ord_template['v_n_mat_o_d'], - 'decimo_segundo_ordenacao': dict_ord_template['oradores_o_d'], - 'decimo_terceiro_ordenacao': dict_ord_template['oradores_expli'], - 'decimo_quarto_ordenacao': dict_ord_template['ocorr_sessao'] - }) + ordenacao = ResumoOrdenacao.objects.get_or_create()[0] + context.update({ + 'primeiro_ordenacao': dict_ord_template[ordenacao.primeiro], + 'segundo_ordenacao': dict_ord_template[ordenacao.segundo], + 'terceiro_ordenacao': dict_ord_template[ordenacao.terceiro], + 'quarto_ordenacao': dict_ord_template[ordenacao.quarto], + 'quinto_ordenacao': dict_ord_template[ordenacao.quinto], + 'sexto_ordenacao': dict_ord_template[ordenacao.sexto], + 'setimo_ordenacao': dict_ord_template[ordenacao.setimo], + 'oitavo_ordenacao': dict_ord_template[ordenacao.oitavo], + 'nono_ordenacao': dict_ord_template[ordenacao.nono], + 'decimo_ordenacao': dict_ord_template[ordenacao.decimo], + 'decimo_primeiro_ordenacao': dict_ord_template[ordenacao.decimo_primeiro], + 'decimo_segundo_ordenacao': dict_ord_template[ordenacao.decimo_segundo], + 'decimo_terceiro_ordenacao': dict_ord_template[ordenacao.decimo_terceiro], + 'decimo_quarto_ordenacao': dict_ord_template[ordenacao.decimo_quarto] + }) return context