Browse Source

Merge branch '3.1.x' into fix-erro-tramitacao-2711

pull/2733/head
Edward 7 years ago
committed by GitHub
parent
commit
790f84f403
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      Dockerfile
  2. 13
      check_solr.sh
  3. 17
      docker-compose.yml
  4. 24
      sapl/relatorios/templates/pdf_sessao_plenaria_gerar.py
  5. 15
      sapl/relatorios/views.py
  6. 128
      sapl/sessao/forms.py
  7. 85
      sapl/sessao/migrations/0037_auto_20190415_1635.py
  8. 16
      sapl/sessao/migrations/0038_merge_20190415_1800.py
  9. 84
      sapl/sessao/models.py
  10. 112
      sapl/sessao/views.py
  11. 3
      sapl/templates/base/layouts.yaml
  12. 8
      sapl/templates/relatorios/relatorio_ata.html
  13. 4
      sapl/templates/sessao/blocos_ata/assinaturas.html
  14. 2
      sapl/templates/sessao/blocos_ata/lista_presenca.html
  15. 2
      sapl/templates/sessao/blocos_ata/lista_presenca_ordem_dia.html
  16. 4
      sapl/templates/sessao/blocos_ata/mesa_diretora.html
  17. 5
      sapl/templates/sessao/blocos_ata/oradores_expediente.html
  18. 4
      sapl/templates/sessao/blocos_ata/oradores_explicacoes.html
  19. 4
      sapl/templates/sessao/blocos_resumo/mesa_diretora.html
  20. 4
      sapl/templates/sessao/blocos_resumo/oradores_explicacoes.html
  21. 8
      start.sh

1
Dockerfile

@ -39,6 +39,7 @@ RUN rm -rf /var/interlegis/sapl/sapl/.env && \
rm -rf /var/interlegis/sapl/sapl.db rm -rf /var/interlegis/sapl/sapl.db
RUN chmod +x /var/interlegis/sapl/start.sh && \ 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/stdout /var/log/nginx/access.log && \
ln -sf /dev/stderr /var/log/nginx/error.log && \ ln -sf /dev/stderr /var/log/nginx/error.log && \
mkdir /var/log/sapl/ && touch /var/interlegis/sapl/sapl.log && \ mkdir /var/log/sapl/ && touch /var/interlegis/sapl/sapl.log && \

13
check_solr.sh

@ -4,15 +4,22 @@
SOLR_URL=$1 SOLR_URL=$1
RETRY_COUNT=1
RETRY_LIMIT=4
echo "Waiting for solr connection at $SOLR_URL ..." 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" 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}') RESULT=$(curl -s -o /dev/null -I "$SOLR_URL/solr/admin/collections?action=LIST" -w '%{http_code}')
echo $RESULT echo $RESULT
if [ "$RESULT" -eq '200' ]; then if [ $RESULT == 200 ]; then
echo "Solr server is up!" echo "Solr server is up!"
break exit 1
else else
sleep 3 sleep 3
fi fi
done done
echo "Solr connection failed."
exit 2

17
docker-compose.yml

@ -12,6 +12,7 @@ sapldb:
- "5432:5432" - "5432:5432"
sapl: sapl:
image: interlegis/sapl:3.1.153 image: interlegis/sapl:3.1.153
# build: .
restart: always restart: always
environment: environment:
ADMIN_PASSWORD: interlegis ADMIN_PASSWORD: interlegis
@ -23,11 +24,27 @@ sapl:
EMAIL_HOST_USER: usuariosmtp EMAIL_HOST_USER: usuariosmtp
EMAIL_SEND_USER: usuariosmtp EMAIL_SEND_USER: usuariosmtp
EMAIL_HOST_PASSWORD: senhasmtp EMAIL_HOST_PASSWORD: senhasmtp
# USE_SOLR: 'True'
# SOLR_COLLECTION: sapl
# SOLR_URL: http://saplsolr:8983
TZ: America/Sao_Paulo TZ: America/Sao_Paulo
volumes: volumes:
- sapl_data:/var/interlegis/sapl/data - sapl_data:/var/interlegis/sapl/data
- sapl_media:/var/interlegis/sapl/media - sapl_media:/var/interlegis/sapl/media
links: links:
- sapldb - sapldb
# - saplsolr
ports: ports:
- "80:80" - "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"

24
sapl/relatorios/templates/pdf_sessao_plenaria_gerar.py

@ -128,6 +128,24 @@ def inf_basicas(inf_basicas_dic):
return tmp return tmp
def multimidia(cont_mult_dic):
"""
"""
tmp = ""
mul_audio = cont_mult_dic['multimidia_audio']
mul_video = cont_mult_dic['multimidia_video']
tmp += '\t\t<para style="P1">Conteúdo Multimídia</para>\n'
tmp += '\t\t<para style="P2">\n'
tmp += '\t\t\t<font color="white"> <br/></font>\n'
tmp += '\t\t</para>\n'
tmp += '\t\t<para style="P2" spaceAfter="5"><b>Audio: </b> ' + mul_audio + '</para>\n'
tmp += '\t\t<para style="P2" spaceAfter="5"><b>Video: </b> ' + mul_video + '</para>\n'
return tmp
def mesa(lst_mesa): def mesa(lst_mesa):
""" """
@ -392,7 +410,7 @@ def ocorrencias(lst_ocorrencias):
return tmp 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" 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() ordenacao = ResumoOrdenacao.objects.first()
dict_ord_template = { dict_ord_template = {
'cont_mult': '', 'cont_mult': multimidia(cont_mult_dic),
'exp': expedientes(lst_expedientes), 'exp': expedientes(lst_expedientes),
'id_basica': inf_basicas(inf_basicas_dic), 'id_basica': inf_basicas(inf_basicas_dic),
'lista_p': presenca(lst_presenca_sessao, lst_ausencia_sessao), '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 " logger.error("KeyError: " + str(e) + ". Erro ao tentar utilizar "
"configuração de ordenação. Utilizando ordenação padrão.") "configuração de ordenação. Utilizando ordenação padrão.")
tmp += inf_basicas(inf_basicas_dic) tmp += inf_basicas(inf_basicas_dic)
tmp += multimidia(cont_mult_dic)
tmp += mesa(lst_mesa) tmp += mesa(lst_mesa)
tmp += presenca(lst_presenca_sessao, lst_ausencia_sessao) tmp += presenca(lst_presenca_sessao, lst_ausencia_sessao)
tmp += expedientes(lst_expedientes) tmp += expedientes(lst_expedientes)
@ -467,6 +486,7 @@ def principal(rodape_dic, imagem, inf_basicas_dic, lst_mesa, lst_presenca_sessao
else: else:
tmp += inf_basicas(inf_basicas_dic) tmp += inf_basicas(inf_basicas_dic)
tmp += multimidia(cont_mult_dic)
tmp += mesa(lst_mesa) tmp += mesa(lst_mesa)
tmp += presenca(lst_presenca_sessao, lst_ausencia_sessao) tmp += presenca(lst_presenca_sessao, lst_ausencia_sessao)
tmp += expedientes(lst_expedientes) tmp += expedientes(lst_expedientes)

15
sapl/relatorios/views.py

@ -520,6 +520,18 @@ def get_sessao_plenaria(sessao, casa):
inf_basicas_dic["hr_fim_sessao"] = sessao.hora_fim inf_basicas_dic["hr_fim_sessao"] = sessao.hora_fim
inf_basicas_dic["nom_camara"] = casa.nome 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 # Lista da composicao da mesa diretora
lst_mesa = [] lst_mesa = []
for composicao in IntegranteMesa.objects.filter(sessao_plenaria=sessao): for composicao in IntegranteMesa.objects.filter(sessao_plenaria=sessao):
@ -852,6 +864,7 @@ def get_sessao_plenaria(sessao, casa):
lst_ocorrencias.append(o) lst_ocorrencias.append(o)
return (inf_basicas_dic, return (inf_basicas_dic,
cont_mult_dic,
lst_mesa, lst_mesa,
lst_presenca_sessao, lst_presenca_sessao,
lst_ausencia_sessao, lst_ausencia_sessao,
@ -910,6 +923,7 @@ def relatorio_sessao_plenaria(request, pk):
raise Http404('Essa página não existe') raise Http404('Essa página não existe')
(inf_basicas_dic, (inf_basicas_dic,
cont_mult_dic,
lst_mesa, lst_mesa,
lst_presenca_sessao, lst_presenca_sessao,
lst_ausencia_sessao, lst_ausencia_sessao,
@ -934,6 +948,7 @@ def relatorio_sessao_plenaria(request, pk):
rodape, rodape,
imagem, imagem,
inf_basicas_dic, inf_basicas_dic,
cont_mult_dic,
lst_mesa, lst_mesa,
lst_presenca_sessao, lst_presenca_sessao,
lst_ausencia_sessao, lst_ausencia_sessao,

128
sapl/sessao/forms.py

@ -26,29 +26,14 @@ from sapl.utils import (RANGE_DIAS_MES, RANGE_MESES,
from .models import (Bancada, Bloco, ExpedienteMateria, JustificativaAusencia, from .models import (Bancada, Bloco, ExpedienteMateria, JustificativaAusencia,
Orador, OradorExpediente, OrdemDia, PresencaOrdemDia, SessaoPlenaria, Orador, OradorExpediente, OrdemDia, PresencaOrdemDia, SessaoPlenaria,
SessaoPlenariaPresenca, TipoResultadoVotacao, SessaoPlenariaPresenca, TipoResultadoVotacao,
OcorrenciaSessao, RetiradaPauta, TipoRetiradaPauta, OradorOrdemDia) OcorrenciaSessao, RetiradaPauta, TipoRetiradaPauta, OradorOrdemDia, ORDENACAO_RESUMO,
ResumoOrdenacao)
MES_CHOICES = RANGE_MESES MES_CHOICES = RANGE_MESES
DIA_CHOICES = RANGE_DIAS_MES 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 SessaoPlenariaForm(FileFieldCheckMixin, ModelForm):
class Meta: class Meta:
@ -807,38 +792,64 @@ class PautaSessaoFilterSet(SessaoPlenariaFilterSet):
class ResumoOrdenacaoForm(forms.Form): class ResumoOrdenacaoForm(forms.Form):
primeiro = forms.ChoiceField(label=_(''), primeiro = forms.ChoiceField(
choices=ORDENACAO_RESUMO) label='',
segundo = forms.ChoiceField(label=_(''), choices=ORDENACAO_RESUMO
choices=ORDENACAO_RESUMO) )
terceiro = forms.ChoiceField(label='', segundo = forms.ChoiceField(
choices=ORDENACAO_RESUMO) label='',
quarto = forms.ChoiceField(label=_(''), choices=ORDENACAO_RESUMO
choices=ORDENACAO_RESUMO) )
quinto = forms.ChoiceField(label=_(''), terceiro = forms.ChoiceField(
choices=ORDENACAO_RESUMO) label='',
sexto = forms.ChoiceField(label=_(''), choices=ORDENACAO_RESUMO
choices=ORDENACAO_RESUMO) )
setimo = forms.ChoiceField(label=_(''), quarto = forms.ChoiceField(
choices=ORDENACAO_RESUMO) label='',
oitavo = forms.ChoiceField(label=_(''), choices=ORDENACAO_RESUMO
choices=ORDENACAO_RESUMO) )
nono = forms.ChoiceField(label=_(''), quinto = forms.ChoiceField(
choices=ORDENACAO_RESUMO) label='',
decimo = forms.ChoiceField(label='10°', choices=ORDENACAO_RESUMO
choices=ORDENACAO_RESUMO) )
decimo_primeiro = forms.ChoiceField(label='11°', sexto = forms.ChoiceField(
choices=ORDENACAO_RESUMO) label='',
decimo_segundo = forms.ChoiceField(label='12°', choices=ORDENACAO_RESUMO
choices=ORDENACAO_RESUMO) )
decimo_terceiro = forms.ChoiceField(label='13°', setimo = forms.ChoiceField(
choices=ORDENACAO_RESUMO) label='',
decimo_quarto = forms.ChoiceField(label='14°', choices=ORDENACAO_RESUMO
choices=ORDENACAO_RESUMO) )
oitavo = forms.ChoiceField(
label='',
choices=ORDENACAO_RESUMO
)
nono = forms.ChoiceField(
label='',
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): def __init__(self, *args, **kwargs):
super(ResumoOrdenacaoForm, self).__init__(*args, **kwargs)
row1 = to_row( row1 = to_row(
[('primeiro', 12)]) [('primeiro', 12)])
row2 = to_row( row2 = to_row(
@ -878,6 +889,8 @@ class ResumoOrdenacaoForm(forms.Form):
form_actions(label='Atualizar')) form_actions(label='Atualizar'))
) )
super().__init__(*args, **kwargs)
def clean(self): def clean(self):
super(ResumoOrdenacaoForm, self).clean() super(ResumoOrdenacaoForm, self).clean()
@ -896,6 +909,27 @@ class ResumoOrdenacaoForm(forms.Form):
'Não é possível ter campos repetidos')) 'Não é possível ter campos repetidos'))
return self.cleaned_data 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): class JustificativaAusenciaForm(ModelForm):

85
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),
),
]

16
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 = [
]

84
sapl/sessao/models.py

@ -584,30 +584,86 @@ class Bloco(models.Model):
return self.nome 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() @reversion.register()
class ResumoOrdenacao(models.Model): class ResumoOrdenacao(models.Model):
''' '''
Tabela para registrar em qual ordem serão renderizados os componentes Tabela para registrar em qual ordem serão renderizados os componentes
da tela de resumo de uma sessão da tela de resumo de uma sessão
''' '''
primeiro = models.CharField(max_length=30) primeiro = models.CharField(
segundo = models.CharField(max_length=30) max_length=50,
terceiro = models.CharField(max_length=30) default=ORDENACAO_RESUMO[0][0]
quarto = models.CharField(max_length=30) )
quinto = models.CharField(max_length=30) segundo = models.CharField(
sexto = models.CharField(max_length=30) max_length=50,
setimo = models.CharField(max_length=30) default=ORDENACAO_RESUMO[1][0]
oitavo = models.CharField(max_length=30) )
nono = models.CharField(max_length=30) terceiro = models.CharField(
decimo = models.CharField(max_length=30) 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( 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( decimo_segundo = models.CharField(
max_length=30, default="Votos Nominais Mat Expediente") max_length=50,
default=ORDENACAO_RESUMO[11][0]
)
decimo_terceiro = models.CharField( 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( decimo_quarto = models.CharField(
max_length=30, default="Oradores da Ordem do Dia") max_length=50,
default=ORDENACAO_RESUMO[13][0]
)
class Meta: class Meta:
verbose_name = _('Ordenação do Resumo de uma Sessão') verbose_name = _('Ordenação do Resumo de uma Sessão')

112
sapl/sessao/views.py

@ -49,7 +49,7 @@ from .models import (Bancada, Bloco, CargoBancada, CargoMesa,
PresencaOrdemDia, RegistroVotacao, ResumoOrdenacao, PresencaOrdemDia, RegistroVotacao, ResumoOrdenacao,
SessaoPlenaria, SessaoPlenariaPresenca, TipoExpediente, SessaoPlenaria, SessaoPlenariaPresenca, TipoExpediente,
TipoResultadoVotacao, TipoSessaoPlenaria, VotoParlamentar, TipoRetiradaPauta, TipoResultadoVotacao, TipoSessaoPlenaria, VotoParlamentar, TipoRetiradaPauta,
RetiradaPauta, TipoJustificativa, JustificativaAusencia, OradorOrdemDia) RetiradaPauta, TipoJustificativa, JustificativaAusencia, OradorOrdemDia, ORDENACAO_RESUMO)
TipoSessaoCrud = CrudAux.build(TipoSessaoPlenaria, 'tipo_sessao_plenaria') TipoSessaoCrud = CrudAux.build(TipoSessaoPlenaria, 'tipo_sessao_plenaria')
@ -1296,49 +1296,38 @@ class ResumoOrdenacaoView(PermissionRequiredMixin, FormView):
form_class = ResumoOrdenacaoForm form_class = ResumoOrdenacaoForm
permission_required = {'sessao.change_resumoordenacao'} permission_required = {'sessao.change_resumoordenacao'}
def get_success_url(self): def get_tupla(self, tupla_key):
return reverse('sapl.base:sistema') for tupla in ORDENACAO_RESUMO:
if tupla[0] == tupla_key:
return tupla
def get_initial(self): 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 = ResumoOrdenacao.objects.get_or_create()[0]
ordenacao.primeiro = form.cleaned_data['primeiro'] initial = {
ordenacao.segundo = form.cleaned_data['segundo'] 'primeiro': self.get_tupla(ordenacao.primeiro),
ordenacao.terceiro = form.cleaned_data['terceiro'] 'segundo': self.get_tupla(ordenacao.segundo),
ordenacao.quarto = form.cleaned_data['quarto'] 'terceiro': self.get_tupla(ordenacao.terceiro),
ordenacao.quinto = form.cleaned_data['quinto'] 'quarto': self.get_tupla(ordenacao.quarto),
ordenacao.sexto = form.cleaned_data['sexto'] 'quinto': self.get_tupla(ordenacao.quinto),
ordenacao.setimo = form.cleaned_data['setimo'] 'sexto': self.get_tupla(ordenacao.sexto),
ordenacao.oitavo = form.cleaned_data['oitavo'] 'setimo': self.get_tupla(ordenacao.setimo),
ordenacao.nono = form.cleaned_data['nono'] 'oitavo': self.get_tupla(ordenacao.oitavo),
ordenacao.decimo = form.cleaned_data['decimo'] 'nono': self.get_tupla(ordenacao.nono),
ordenacao.decimo_primeiro = form.cleaned_data['decimo_primeiro'] 'decimo': self.get_tupla(ordenacao.decimo),
ordenacao.decimo_segundo = form.cleaned_data['decimo_segundo'] 'decimo_primeiro': self.get_tupla(ordenacao.decimo_primeiro),
ordenacao.decimo_terceiro = form.cleaned_data['decimo_terceiro'] 'decimo_segundo': self.get_tupla(ordenacao.decimo_segundo),
ordenacao.decimo_quarto = form.cleaned_data['decimo_quarto'] 'decimo_terceiro': self.get_tupla(ordenacao.decimo_terceiro),
'decimo_quarto': self.get_tupla(ordenacao.decimo_quarto)
ordenacao.save() }
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()) return HttpResponseRedirect(self.get_success_url())
@ -1761,7 +1750,6 @@ class ResumoView(DetailView):
context.update(get_ocorrencias_da_sessão(self.object)) context.update(get_ocorrencias_da_sessão(self.object))
# ===================================================================== # =====================================================================
# Indica a ordem com a qual o template será renderizado # Indica a ordem com a qual o template será renderizado
ordenacao = ResumoOrdenacao.objects.first()
dict_ord_template = { dict_ord_template = {
'cont_mult': 'conteudo_multimidia.html', 'cont_mult': 'conteudo_multimidia.html',
'exp': 'expedientes.html', 'exp': 'expedientes.html',
@ -1779,10 +1767,9 @@ class ResumoView(DetailView):
'ocorr_sessao': 'ocorrencias_da_sessao.html' 'ocorr_sessao': 'ocorrencias_da_sessao.html'
} }
if ordenacao: ordenacao = ResumoOrdenacao.objects.get_or_create()[0]
try: context.update({
context.update( 'primeiro_ordenacao': dict_ord_template[ordenacao.primeiro],
{'primeiro_ordenacao': dict_ord_template[ordenacao.primeiro],
'segundo_ordenacao': dict_ord_template[ordenacao.segundo], 'segundo_ordenacao': dict_ord_template[ordenacao.segundo],
'terceiro_ordenacao': dict_ord_template[ordenacao.terceiro], 'terceiro_ordenacao': dict_ord_template[ordenacao.terceiro],
'quarto_ordenacao': dict_ord_template[ordenacao.quarto], 'quarto_ordenacao': dict_ord_template[ordenacao.quarto],
@ -1795,42 +1782,7 @@ class ResumoView(DetailView):
'decimo_primeiro_ordenacao': dict_ord_template[ordenacao.decimo_primeiro], 'decimo_primeiro_ordenacao': dict_ord_template[ordenacao.decimo_primeiro],
'decimo_segundo_ordenacao': dict_ord_template[ordenacao.decimo_segundo], 'decimo_segundo_ordenacao': dict_ord_template[ordenacao.decimo_segundo],
'decimo_terceiro_ordenacao': dict_ord_template[ordenacao.decimo_terceiro], 'decimo_terceiro_ordenacao': dict_ord_template[ordenacao.decimo_terceiro],
'decimo_quarto_ordenacao': dict_ord_template[ordenacao.decimo_quarto]}) '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']
}) })
return context return context

3
sapl/templates/base/layouts.yaml

@ -32,7 +32,8 @@ AppConfig:
- assinatura_ata - assinatura_ata
{% trans 'Cronômetros do Painel' %}: {% 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' %}: {% trans 'Configurações do Painel' %}:
- mostrar_brasao_painel - mostrar_brasao_painel

8
sapl/templates/relatorios/relatorio_ata.html

@ -65,12 +65,12 @@
<tr style="margin-top:20px"> <tr style="margin-top:20px">
<td> <td>
<div style="float: left; position: relative; top: -50px; left: 8px; width: 120px">____________________ </br> <div style="float: left; position: relative; top: -50px; left: 8px; width: 120px">____________________ </br>
<p style="font-size:8pt"><b>{{p.cargo}}: </b> {{p.parlamentar.nome_completo}} / {{ p.parlamentar|filiacao_data_filter:object.data_inicio }}</p> <p style="font-size:8pt"><b>{{p.cargo}}: </b> {{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 %}</p>
</br></br></br> </br></br></br>
</div> </div>
{% else %} {% else %}
<div style="float: left; position: relative; top: -50px; left: 142px; width: 120px; margin-right:-220px;">____________________ </br> <div style="float: left; position: relative; top: -50px; left: 142px; width: 120px; margin-right:-220px;">____________________ </br>
<p style="font-size:8pt"><b>{{p.cargo}}: </b> {{p.parlamentar.nome_completo}} / {{ p.parlamentar|filiacao_data_filter:object.data_inicio }}</p> <p style="font-size:8pt"><b>{{p.cargo}}: </b> {{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 %}</p>
</br></br></br> </br></br></br>
</div> </div>
</td> </td>
@ -84,12 +84,12 @@
<td> <td>
<div style="float: left; position: relative;top: -50px; left: 8px; width: 120px;">_____________________</br> <div style="float: left; position: relative;top: -50px; left: 8px; width: 120px;">_____________________</br>
<p style="font-size:8pt"> <p style="font-size:8pt">
{{p.nome_completo}} / {{ p|filiacao_data_filter:object.data_inicio }}</p> {{p.nome_completo}} / {% if p|filiacao_data_filter:object.data_inicio %} {{ p|filiacao_data_filter:object.data_inicio }} {% else %} Sem partido {% endif %}</p>
</br></br></br> </br></br></br>
</div> </div>
{% else %} {% else %}
<div style="float: left; position: relative; top: -50px;left: 142px; width: 120px; margin-right:-220px;">_____________________ </br> <div style="float: left; position: relative; top: -50px;left: 142px; width: 120px; margin-right:-220px;">_____________________ </br>
<p style="font-size:8pt">{{p.nome_completo}} / {{ p|filiacao_data_filter:object.data_inicio }}</p> <p style="font-size:8pt">{{p.nome_completo}} / {% if p|filiacao_data_filter:object.data_inicio %} {{ p|filiacao_data_filter:object.data_inicio }} {% else %} Sem partido {% endif %}</p>
</br></br></br> </br></br></br>
</div> </div>
</td> </td>

4
sapl/templates/sessao/blocos_ata/assinaturas.html

@ -5,13 +5,13 @@
</br></br> </br></br>
{% for p in assinatura_mesa %} {% for p in assinatura_mesa %}
<div class="col-md-6">___________________________________________ </br> <div class="col-md-6">___________________________________________ </br>
<b>{{p.cargo}}: </b> {{p.parlamentar.nome_completo}} / {{ p.parlamentar|filiacao_data_filter:object.data_inicio }} <b>{{p.cargo}}: </b> {{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 %}
</br></br></br> </br></br></br>
</div> </div>
{% endfor %} {% endfor %}
{% for p in assinatura_presentes %} {% for p in assinatura_presentes %}
<div class="col-md-6">___________________________________________ </br> <div class="col-md-6">___________________________________________ </br>
{{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 %}
</br></br></br> </br></br></br>
</div> </div>
{% endfor %} {% endfor %}

2
sapl/templates/sessao/blocos_ata/lista_presenca.html

@ -5,7 +5,7 @@
{% if presenca_sessao %} {% if presenca_sessao %}
<strong>Lista de Presença na Sessão: </strong> <strong>Lista de Presença na Sessão: </strong>
{% for p in presenca_sessao %} {% 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 %} {% if not forloop.last %} ; {% endif %}
{% endfor %} {% endfor %}
{% endif %} {% endif %}

2
sapl/templates/sessao/blocos_ata/lista_presenca_ordem_dia.html

@ -5,7 +5,7 @@
{% if presenca_ordem %} {% if presenca_ordem %}
<strong>Lista de Presença na Ordem do Dia: </strong> <strong>Lista de Presença na Ordem do Dia: </strong>
{% for p in presenca_ordem %} {% 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 %} {% if not forloop.last %} ; {% endif %}
{% endfor %} {% endfor %}
{% endif %} {% endif %}

4
sapl/templates/sessao/blocos_ata/mesa_diretora.html

@ -1,10 +1,12 @@
{% load common_tags %}
<fieldset> <fieldset>
<p align="justify"> <p align="justify">
{% if mesa %} {% if mesa %}
<strong>Mesa Diretora: </strong> <strong>Mesa Diretora: </strong>
{% for m in mesa %} {% for m in mesa %}
{{m.cargo}}: {{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 %} {% if not forloop.last %} ; {% endif %}
{% endfor %} {% endfor %}
{% endif %} {% endif %}

5
sapl/templates/sessao/blocos_ata/oradores_expediente.html

@ -1,9 +1,12 @@
{% load common_tags %}
<fieldset> <fieldset>
<p align="justify"> <p align="justify">
{% if oradores %} {% if oradores %}
<strong>Oradores do Expediente: </strong> <strong>Oradores do Expediente: </strong>
{% for o in oradores %} {% for o in oradores %}
<b>{{o.numero_ordem}}</b> - {{o.parlamentar.nome_completo}} / {{ o.parlamentar.filiacao_atual }} <b>{{o.numero_ordem}}</b> - {{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 o.observacao %} - {{o.observacao}} {% endif %}
{% if not forloop.last %} ; {% endif %} {% if not forloop.last %} ; {% endif %}
{% endfor %} {% endfor %}

4
sapl/templates/sessao/blocos_ata/oradores_explicacoes.html

@ -1,9 +1,11 @@
{% load common_tags %}
<fieldset> <fieldset>
<p align="justify"> <p align="justify">
{% if oradores_explicacoes %} {% if oradores_explicacoes %}
<strong>Oradores das Explicações Pessoais: </strong> <strong>Oradores das Explicações Pessoais: </strong>
{% for o in oradores_explicacoes %} {% for o in oradores_explicacoes %}
<b>{{o.numero_ordem}}</b> - {{o.parlamentar.nome_completo}} / {{ o.parlamentar.filiacao_atual }} <b>{{o.numero_ordem}}</b> - {{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 o.observacao %} - {{o.observacao}} {% endif %}
{% if not forloop.last %} ; {% endif %} {% if not forloop.last %} ; {% endif %}
{% endfor %} {% endfor %}

4
sapl/templates/sessao/blocos_resumo/mesa_diretora.html

@ -1,9 +1,11 @@
{% load common_tags %}
<fieldset> <fieldset>
<legend>Mesa Diretora</legend> <legend>Mesa Diretora</legend>
<div class="row"> <div class="row">
{% for m in mesa %} {% for m in mesa %}
<div class="col-md-12"><b>{{m.cargo}}: <div class="col-md-12"><b>{{m.cargo}}:
</b>{{m.parlamentar.nome_parlamentar}} / {% if m.parlamentar.filiacao_atual %} {{ m.parlamentar.filiacao_atual }} {% else %} Sem partido {% endif %} </b>{{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 %}
</div> </div>
{% endfor %} {% endfor %}
</div> </div>

4
sapl/templates/sessao/blocos_resumo/oradores_explicacoes.html

@ -1,3 +1,5 @@
{% load common_tags %}
<fieldset> <fieldset>
<legend>Oradores das Explicações Pessoais</legend> <legend>Oradores das Explicações Pessoais</legend>
<div class="row"> <div class="row">
@ -6,7 +8,7 @@
</div> </div>
<div class="row"> <div class="row">
{% for o in oradores_explicacoes %} {% for o in oradores_explicacoes %}
<div class="col-md-6"><b>{{o.numero_ordem}}</b> - {{o.parlamentar.nome_parlamentar}} / {{ o.parlamentar.filiacao_atual }}</div> <div class="col-md-6"><b>{{o.numero_ordem}}</b> - {{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 %}</div>
<div class="col-md-6">{{o.url_discurso}}</div> <div class="col-md-6">{{o.url_discurso}}</div>
</br> </br>
{% endfor %} {% endfor %}

8
start.sh

@ -71,10 +71,18 @@ if [ "${USE_SOLR-False}" == "True" ] || [ "${USE_SOLR-False}" == "true" ]; then
echo "MAX SHARDS PER NODE: $MAX_SHARDS_PER_NODE" echo "MAX SHARDS PER NODE: $MAX_SHARDS_PER_NODE"
echo "=========================================" echo "========================================="
echo "running solr script"
/bin/bash check_solr.sh $SOLR_URL /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 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 & # python3 manage.py rebuild_index --noinput &
else
echo "Solr is offline, not possible to connect."
fi
else else
echo "Suporte a SOLR não inicializado." echo "Suporte a SOLR não inicializado."
fi fi

Loading…
Cancel
Save