Browse Source

Merge branch '3.1.x' into 2402-nome-autores

pull/2406/head
Cesar Augusto de Carvalho 7 years ago
committed by GitHub
parent
commit
a113fdcb75
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 35
      sapl/base/migrations/0024_auto_20181126_1534.py
  2. 21
      sapl/base/migrations/0025_auto_20181126_1648.py
  3. 20
      sapl/base/migrations/0026_auto_20181126_1727.py
  4. 8
      sapl/base/models.py
  5. 7
      sapl/base/templatetags/common_tags.py
  6. 15
      sapl/norma/fixtures/pre_popula_tipo_vinculo_norma.json
  7. 2
      sapl/norma/forms.py
  8. 4
      sapl/norma/migrations/0008_normajuridica_popula_tipo_vinculo_norma.py
  9. 2
      sapl/norma/migrations/0009_auto_20171113_1339.py
  10. 20
      sapl/norma/migrations/0016_tipovinculonormajuridica_revoga_integramente.py
  11. 20
      sapl/norma/migrations/0017_auto_20181127_0955.py
  12. 3
      sapl/norma/models.py
  13. 4
      sapl/norma/views.py
  14. 1
      sapl/painel/views.py
  15. 2
      sapl/parlamentares/views.py
  16. 19
      sapl/relatorios/templates/pdf_sessao_plenaria_gerar.py
  17. 20
      sapl/relatorios/views.py
  18. 33
      sapl/sessao/views.py
  19. 2
      sapl/static/js/app.js
  20. 4
      sapl/templates/norma/layouts.yaml
  21. 12
      sapl/templates/sessao/blocos_ata/lista_presenca.html
  22. 27
      sapl/templates/sessao/blocos_resumo/lista_presenca.html
  23. 2
      sapl/templates/sessao/resumo_ata.html

35
sapl/base/migrations/0024_auto_20181126_1534.py

@ -0,0 +1,35 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.8 on 2018-11-26 17:34
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base', '0023_auto_20181105_1804'),
]
operations = [
migrations.AlterField(
model_name='appconfig',
name='cronometro_aparte',
field=models.DurationField(blank=True, null=True, verbose_name='Cronômetro do Aparte'),
),
migrations.AlterField(
model_name='appconfig',
name='cronometro_consideracoes',
field=models.DurationField(blank=True, null=True, verbose_name='Cronômetro de Considerações Finais'),
),
migrations.AlterField(
model_name='appconfig',
name='cronometro_discurso',
field=models.DurationField(blank=True, null=True, verbose_name='Cronômetro do Discurso'),
),
migrations.AlterField(
model_name='appconfig',
name='cronometro_ordem',
field=models.DurationField(blank=True, null=True, verbose_name='Cronômetro da Ordem'),
),
]

21
sapl/base/migrations/0025_auto_20181126_1648.py

@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.8 on 2018-11-26 18:48
from __future__ import unicode_literals
import datetime
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base', '0024_auto_20181126_1534'),
]
operations = [
migrations.AlterField(
model_name='appconfig',
name='cronometro_discurso',
field=models.DurationField(blank=True, default=datetime.timedelta(0, 2400), null=True, verbose_name='Cronômetro do Discurso'),
),
]

20
sapl/base/migrations/0026_auto_20181126_1727.py

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.8 on 2018-11-26 19:27
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base', '0025_auto_20181126_1648'),
]
operations = [
migrations.AlterField(
model_name='appconfig',
name='cronometro_discurso',
field=models.DurationField(blank=True, null=True, verbose_name='Cronômetro do Discurso'),
),
]

8
sapl/base/models.py

@ -121,22 +121,22 @@ class AppConfig(models.Model):
verbose_name=_('Quem deve assina a ata'), verbose_name=_('Quem deve assina a ata'),
max_length=1, choices=ASSINATURA_ATA_CHOICES, default='T') max_length=1, choices=ASSINATURA_ATA_CHOICES, default='T')
cronometro_discurso = models.TimeField( cronometro_discurso = models.DurationField(
verbose_name=_('Cronômetro do Discurso'), verbose_name=_('Cronômetro do Discurso'),
blank=True, blank=True,
null=True) null=True)
cronometro_aparte = models.TimeField( cronometro_aparte = models.DurationField(
verbose_name=_('Cronômetro do Aparte'), verbose_name=_('Cronômetro do Aparte'),
blank=True, blank=True,
null=True) null=True)
cronometro_ordem = models.TimeField( cronometro_ordem = models.DurationField(
verbose_name=_('Cronômetro da Ordem'), verbose_name=_('Cronômetro da Ordem'),
blank=True, blank=True,
null=True) null=True)
cronometro_consideracoes = models.TimeField( cronometro_consideracoes = models.DurationField(
verbose_name=_('Cronômetro de Considerações Finais'), verbose_name=_('Cronômetro de Considerações Finais'),
blank=True, blank=True,
null=True) null=True)

7
sapl/base/templatetags/common_tags.py

@ -228,11 +228,8 @@ def file_extension(value):
def cronometro_to_seconds(value): def cronometro_to_seconds(value):
if not AppConfig.attr('cronometro_' + value): if not AppConfig.attr('cronometro_' + value):
return 0 return 0
m, s, x = AppConfig.attr( return AppConfig.attr('cronometro_' + value).seconds
'cronometro_' + value).isoformat().split(':')
return 60 * int(m) + int(s)
@register.filter @register.filter

15
sapl/norma/fixtures/pre_popula_tipo_vinculo_norma.json

@ -1,6 +1,7 @@
[ [
{ {
"fields": { "fields": {
"revoga_integralmente": "False",
"descricao_ativa": "Altera o(a)", "descricao_ativa": "Altera o(a)",
"descricao_passiva": "Alterado(a) pelo(a)", "descricao_passiva": "Alterado(a) pelo(a)",
"sigla": "A" "sigla": "A"
@ -10,6 +11,7 @@
}, },
{ {
"fields": { "fields": {
"revoga_integralmente": "True",
"descricao_ativa": "Revoga integralmente o(a)", "descricao_ativa": "Revoga integralmente o(a)",
"descricao_passiva": "Revogado(a) integralmente pelo(a)", "descricao_passiva": "Revogado(a) integralmente pelo(a)",
"sigla": "R" "sigla": "R"
@ -19,6 +21,7 @@
}, },
{ {
"fields": { "fields": {
"revoga_integralmente": "False",
"descricao_ativa": "Revoga parcialmente o(a)", "descricao_ativa": "Revoga parcialmente o(a)",
"descricao_passiva": "Revogado(a) parcialmente pelo(a)", "descricao_passiva": "Revogado(a) parcialmente pelo(a)",
"sigla": "P" "sigla": "P"
@ -28,6 +31,7 @@
}, },
{ {
"fields": { "fields": {
"revoga_integralmente": "True",
"descricao_ativa": "Revoga integralmente por consolida\u00e7\u00e3o", "descricao_ativa": "Revoga integralmente por consolida\u00e7\u00e3o",
"descricao_passiva": "Revogado(a) integralmente por consolida\u00e7\u00e3o", "descricao_passiva": "Revogado(a) integralmente por consolida\u00e7\u00e3o",
"sigla": "T" "sigla": "T"
@ -37,6 +41,7 @@
}, },
{ {
"fields": { "fields": {
"revoga_integralmente": "False",
"descricao_ativa": "Norma correlata", "descricao_ativa": "Norma correlata",
"descricao_passiva": "Norma correlata", "descricao_passiva": "Norma correlata",
"sigla": "C" "sigla": "C"
@ -46,6 +51,7 @@
}, },
{ {
"fields": { "fields": {
"revoga_integralmente": "False",
"descricao_ativa": "Ressalva o(a)", "descricao_ativa": "Ressalva o(a)",
"descricao_passiva": "Ressalvada pelo(a)", "descricao_passiva": "Ressalvada pelo(a)",
"sigla": "S" "sigla": "S"
@ -55,6 +61,7 @@
}, },
{ {
"fields": { "fields": {
"revoga_integralmente": "False",
"descricao_ativa": "Reedita o(a)", "descricao_ativa": "Reedita o(a)",
"descricao_passiva": "Reeditada pelo(a)", "descricao_passiva": "Reeditada pelo(a)",
"sigla": "E" "sigla": "E"
@ -64,6 +71,7 @@
}, },
{ {
"fields": { "fields": {
"revoga_integralmente": "False",
"descricao_ativa": "Reedita com altera\u00e7\u00e3o o(a)", "descricao_ativa": "Reedita com altera\u00e7\u00e3o o(a)",
"descricao_passiva": "Reeditada com altera\u00e7\u00e3o pelo(a)", "descricao_passiva": "Reeditada com altera\u00e7\u00e3o pelo(a)",
"sigla": "I" "sigla": "I"
@ -73,6 +81,7 @@
}, },
{ {
"fields": { "fields": {
"revoga_integralmente": "False",
"descricao_ativa": "Regulamenta o(a)", "descricao_ativa": "Regulamenta o(a)",
"descricao_passiva": "Regulamentada pelo(a)", "descricao_passiva": "Regulamentada pelo(a)",
"sigla": "G" "sigla": "G"
@ -82,6 +91,7 @@
}, },
{ {
"fields": { "fields": {
"revoga_integralmente": "False",
"descricao_ativa": "Suspende parcialmente o(a)", "descricao_ativa": "Suspende parcialmente o(a)",
"descricao_passiva": "Suspenso(a) parcialmente pelo(a)", "descricao_passiva": "Suspenso(a) parcialmente pelo(a)",
"sigla": "K" "sigla": "K"
@ -91,6 +101,7 @@
}, },
{ {
"fields": { "fields": {
"revoga_integralmente": "False",
"descricao_ativa": "Suspende integralmente o(a)", "descricao_ativa": "Suspende integralmente o(a)",
"descricao_passiva": "Suspenso(a) integralmente pelo(a)", "descricao_passiva": "Suspenso(a) integralmente pelo(a)",
"sigla": "L" "sigla": "L"
@ -100,6 +111,7 @@
}, },
{ {
"fields": { "fields": {
"revoga_integralmente": "False",
"descricao_ativa": "Julga integralmente inconstitucional", "descricao_ativa": "Julga integralmente inconstitucional",
"descricao_passiva": "Julgada integralmente inconstitucional", "descricao_passiva": "Julgada integralmente inconstitucional",
"sigla": "N" "sigla": "N"
@ -109,6 +121,7 @@
}, },
{ {
"fields": { "fields": {
"revoga_integralmente": "False",
"descricao_ativa": "Julga parcialmente inconstitucional", "descricao_ativa": "Julga parcialmente inconstitucional",
"descricao_passiva": "Julgada parcialmente inconstitucional", "descricao_passiva": "Julgada parcialmente inconstitucional",
"sigla": "O" "sigla": "O"
@ -116,4 +129,4 @@
"model": "norma.TipoVinculoNormaJuridica", "model": "norma.TipoVinculoNormaJuridica",
"pk": "13" "pk": "13"
} }
] ]

2
sapl/norma/forms.py

@ -344,6 +344,8 @@ class NormaRelacionadaForm(ModelForm):
def save(self, commit=False): def save(self, commit=False):
relacionada = super(NormaRelacionadaForm, self).save(commit) relacionada = super(NormaRelacionadaForm, self).save(commit)
relacionada.norma_relacionada = self.cleaned_data['norma_relacionada'] relacionada.norma_relacionada = self.cleaned_data['norma_relacionada']
relacionada.norma_relacionada.data_vigencia = relacionada.norma_principal.data
relacionada.norma_relacionada.save()
relacionada.save() relacionada.save()
return relacionada return relacionada

4
sapl/norma/migrations/0008_normajuridica_popula_tipo_vinculo_norma.py

@ -31,9 +31,9 @@ def gera_tipo_vinculo(apps, schema_editor):
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('norma', '0007_auto_20170904_1708'), ('norma', '0017_auto_20181127_0955'),
] ]
operations = [ operations = [
migrations.RunPython(gera_tipo_vinculo), migrations.RunPython(gera_tipo_vinculo),
] ]

2
sapl/norma/migrations/0009_auto_20171113_1339.py

@ -9,7 +9,7 @@ import django.db.models.deletion
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('norma', '0008_normajuridica_popula_tipo_vinculo_norma'), ('norma', '0007_auto_20170904_1708'),
] ]
operations = [ operations = [

20
sapl/norma/migrations/0016_tipovinculonormajuridica_revoga_integramente.py

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.8 on 2018-11-23 14:51
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('norma', '0015_auto_20181109_1422'),
]
operations = [
migrations.AddField(
model_name='tipovinculonormajuridica',
name='revoga_integramente',
field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Revoga Integralmente?'),
),
]

20
sapl/norma/migrations/0017_auto_20181127_0955.py

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.8 on 2018-11-27 11:55
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('norma', '0016_tipovinculonormajuridica_revoga_integramente'),
]
operations = [
migrations.RenameField(
model_name='tipovinculonormajuridica',
old_name='revoga_integramente',
new_name='revoga_integralmente',
),
]

3
sapl/norma/models.py

@ -258,6 +258,9 @@ class TipoVinculoNormaJuridica(models.Model):
max_length=50, blank=True, verbose_name=_('Descrição Ativa')) max_length=50, blank=True, verbose_name=_('Descrição Ativa'))
descricao_passiva = models.CharField( descricao_passiva = models.CharField(
max_length=50, blank=True, verbose_name=_('Descrição Passiva')) max_length=50, blank=True, verbose_name=_('Descrição Passiva'))
revoga_integralmente = models.BooleanField(verbose_name=_('Revoga Integralmente?'),
choices=YES_NO_CHOICES,
default=False)
class Meta: class Meta:
verbose_name = _('Tipo de Vínculo entre Normas Jurídicas') verbose_name = _('Tipo de Vínculo entre Normas Jurídicas')

4
sapl/norma/views.py

@ -37,7 +37,7 @@ TipoNormaCrud = CrudAux.build(
list_field_names=['sigla', 'descricao', 'equivalente_lexml']) list_field_names=['sigla', 'descricao', 'equivalente_lexml'])
TipoVinculoNormaJuridicaCrud = CrudAux.build( TipoVinculoNormaJuridicaCrud = CrudAux.build(
TipoVinculoNormaJuridica, '', TipoVinculoNormaJuridica, '',
list_field_names=['sigla', 'descricao_ativa', 'descricao_passiva']) list_field_names=['sigla', 'descricao_ativa', 'descricao_passiva', 'revoga_integralmente'])
class NormaRelacionadaCrud(MasterDetailCrud): class NormaRelacionadaCrud(MasterDetailCrud):
@ -208,7 +208,7 @@ class NormaCrud(Crud):
def get_initial(self): def get_initial(self):
username = self.request.user.username username = self.request.user.username
try: try:
self.logger.debug('user=' + username + '. Tentando obter objeto de modelo da esfera da federação.') self.logger.debug('user=' + username + '. Tentando obter objeto de modelo da esfera da federação.')
esfera = sapl.base.models.AppConfig.objects.last( esfera = sapl.base.models.AppConfig.objects.last(

1
sapl/painel/views.py

@ -340,7 +340,6 @@ def cronometro_painel(request):
def get_cronometro_status(request, name): def get_cronometro_status(request, name):
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
username = request.user.username username = request.user.username
try: try:
logger.debug("user=" + username + ". Tentando obter cronometro.") logger.debug("user=" + username + ". Tentando obter cronometro.")
cronometro = request.session[name] cronometro = request.session[name]

2
sapl/parlamentares/views.py

@ -498,7 +498,7 @@ class ParlamentarCrud(Crud):
if legislatura_id >= 0: if legislatura_id >= 0:
return queryset.filter( return queryset.filter(
mandato__legislatura_id=legislatura_id).annotate( mandato__legislatura_id=legislatura_id).annotate(
mandato_titular=F('mandato__titular')) mandato_titular=F('mandato__titular')).distinct()
else: else:
try: try:
self.logger.debug("user=" + username + ". Tentando obter o mais recente registro do objeto Legislatura.") self.logger.debug("user=" + username + ". Tentando obter o mais recente registro do objeto Legislatura.")

19
sapl/relatorios/templates/pdf_sessao_plenaria_gerar.py

@ -142,7 +142,7 @@ def mesa(lst_mesa):
return tmp return tmp
def presenca(lst_presenca_sessao): def presenca(lst_presenca_sessao,lst_ausencia_sessao):
""" """
""" """
@ -155,6 +155,19 @@ def presenca(lst_presenca_sessao):
tmp += '\t\t<para style="P2" spaceAfter="5">' + \ tmp += '\t\t<para style="P2" spaceAfter="5">' + \
str(presenca['nom_parlamentar']) + '/' + \ str(presenca['nom_parlamentar']) + '/' + \
str(presenca['sgl_partido']) + '</para>\n' str(presenca['sgl_partido']) + '</para>\n'
tmp += '\t\t<para style="P1">Justificativas de Ausência da Sessão</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 += '<blockTable style="repeater" repeatRows="1">\n'
tmp += '<tr><td >Parlamentar</td><td>Justificativa</td><td>Ausente em</td></tr>\n'
for ausencia in lst_ausencia_sessao:
tmp += '<tr><td>' + \
str(ausencia['parlamentar']) + '</td><td> ' + \
str(ausencia['justificativa']) + '</td><td>' + \
str(ausencia['tipo']) + '</td></tr>\n'
tmp += '</blockTable>'
return tmp return tmp
@ -329,7 +342,7 @@ def principal(rodape_dic, imagem, inf_basicas_dic, lst_mesa, lst_presenca_sessao
'cont_mult': '', 'cont_mult': '',
'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), 'lista_p': presenca(lst_presenca_sessao,lst_ausencia_sessao),
'lista_p_o_d': presenca_ordem_dia(lst_presenca_ordem_dia), 'lista_p_o_d': presenca_ordem_dia(lst_presenca_ordem_dia),
'mat_exp': expediente_materia(lst_expediente_materia), 'mat_exp': expediente_materia(lst_expediente_materia),
'mat_o_d': votacao(lst_votacao), 'mat_o_d': votacao(lst_votacao),
@ -355,7 +368,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 += mesa(lst_mesa) tmp += mesa(lst_mesa)
tmp += presenca(lst_presenca_sessao) tmp += presenca(lst_presenca_sessao,lst_ausencia_sessao)
tmp += expedientes(lst_expedientes) tmp += expedientes(lst_expedientes)
tmp += expediente_materia(lst_expediente_materia) tmp += expediente_materia(lst_expediente_materia)
tmp += oradores_expediente(lst_oradores_expediente) tmp += oradores_expediente(lst_oradores_expediente)

20
sapl/relatorios/views.py

@ -16,7 +16,8 @@ from sapl.parlamentares.models import CargoMesa, Filiacao, Parlamentar
from sapl.protocoloadm.models import (DocumentoAdministrativo, Protocolo, from sapl.protocoloadm.models import (DocumentoAdministrativo, Protocolo,
TramitacaoAdministrativo) TramitacaoAdministrativo)
from sapl.sessao.models import (ExpedienteMateria, ExpedienteSessao, from sapl.sessao.models import (ExpedienteMateria, ExpedienteSessao,
IntegranteMesa, Orador, OradorExpediente, IntegranteMesa, JustificativaAusencia,
Orador, OradorExpediente,
OrdemDia, PresencaOrdemDia, SessaoPlenaria, OrdemDia, PresencaOrdemDia, SessaoPlenaria,
SessaoPlenariaPresenca, OcorrenciaSessao) SessaoPlenariaPresenca, OcorrenciaSessao)
from sapl.settings import STATIC_ROOT from sapl.settings import STATIC_ROOT
@ -538,6 +539,20 @@ def get_sessao_plenaria(sessao, casa):
dic_presenca['sgl_partido'] = partido_sigla dic_presenca['sgl_partido'] = partido_sigla
lst_presenca_sessao.append(dic_presenca) lst_presenca_sessao.append(dic_presenca)
# Lista de ausencias na sessão
lst_ausencia_sessao = []
ausencia = JustificativaAusencia.objects.filter(
sessao_plenaria=sessao).order_by('parlamentar__nome_parlamentar')
for ausente in ausencia:
dic_ausencia = {}
dic_ausencia['parlamentar'] = ausente.parlamentar
dic_ausencia['justificativa'] = ausente.tipo_ausencia
if ausente.ausencia == 1:
dic_ausencia['tipo'] = 'Matéria'
else:
dic_ausencia['tipo'] = 'Sessão'
lst_ausencia_sessao.append(dic_ausencia)
# Exibe os Expedientes # Exibe os Expedientes
lst_expedientes = [] lst_expedientes = []
@ -751,6 +766,7 @@ def get_sessao_plenaria(sessao, casa):
return (inf_basicas_dic, return (inf_basicas_dic,
lst_mesa, lst_mesa,
lst_presenca_sessao, lst_presenca_sessao,
lst_ausencia_sessao,
lst_expedientes, lst_expedientes,
lst_expediente_materia, lst_expediente_materia,
lst_oradores_expediente, lst_oradores_expediente,
@ -803,6 +819,7 @@ def relatorio_sessao_plenaria(request, pk):
(inf_basicas_dic, (inf_basicas_dic,
lst_mesa, lst_mesa,
lst_presenca_sessao, lst_presenca_sessao,
lst_ausencia_sessao,
lst_expedientes, lst_expedientes,
lst_expediente_materia, lst_expediente_materia,
lst_oradores_expediente, lst_oradores_expediente,
@ -824,6 +841,7 @@ def relatorio_sessao_plenaria(request, pk):
inf_basicas_dic, inf_basicas_dic,
lst_mesa, lst_mesa,
lst_presenca_sessao, lst_presenca_sessao,
lst_ausencia_sessao,
lst_expedientes, lst_expedientes,
lst_expediente_materia, lst_expediente_materia,
lst_oradores_expediente, lst_oradores_expediente,

33
sapl/sessao/views.py

@ -846,18 +846,11 @@ class PainelView(PermissionRequiredForAppCrudMixin, TemplateView):
messages.add_message(self.request, messages.ERROR, msg) messages.add_message(self.request, messages.ERROR, msg)
else: else:
m, s, x = cronometro_discurso.isoformat().split(':') cronometro_discurso = cronometro_discurso.seconds
cronometro_discurso = int(m) * 60 + int(s) cronometro_aparte = cronometro_aparte.seconds
cronometro_ordem = cronometro_ordem.seconds
m, s, x = cronometro_aparte.isoformat().split(':') cronometro_consideracoes = cronometro_consideracoes.seconds
cronometro_aparte = int(m) * 60 + int(s)
m, s, x = cronometro_ordem.isoformat().split(':')
cronometro_ordem = int(m) * 60 + int(s)
m, s, x = cronometro_consideracoes.isoformat().split(':')
cronometro_consideracoes = int(m) * 60 + int(s)
context = TemplateView.get_context_data(self, **kwargs) context = TemplateView.get_context_data(self, **kwargs)
context.update({ context.update({
'head_title': str(_('Painel Plenário')), 'head_title': str(_('Painel Plenário')),
@ -1349,7 +1342,12 @@ class ResumoView(DetailView):
parlamentares_sessao = [p.parlamentar for p in presencas] parlamentares_sessao = [p.parlamentar for p in presencas]
context.update({'presenca_sessao': parlamentares_sessao}) ausentes_sessao = JustificativaAusencia.objects.filter(
sessao_plenaria_id=self.object.id
).order_by('parlamentar__nome_parlamentar')
context.update({'presenca_sessao': parlamentares_sessao,
'justificativa_ausencia': ausentes_sessao})
# ===================================================================== # =====================================================================
@ -1383,10 +1381,13 @@ class ResumoView(DetailView):
turno = get_turno(tramitacao.turno) turno = get_turno(tramitacao.turno)
rv = m.registrovotacao_set.first() rv = m.registrovotacao_set.first()
rp = m.retiradapauta_set.filter(materia=m.materia).first()
if rv: if rv:
resultado = rv.tipo_resultado_votacao.nome resultado = rv.tipo_resultado_votacao.nome
resultado_observacao = rv.observacao resultado_observacao = rv.observacao
elif rp:
resultado = rp.tipo_de_retirada.descricao
resultado_observacao = rp.observacao
else: else:
resultado = _('Matéria não votada') resultado = _('Matéria não votada')
resultado_observacao = _(' ') resultado_observacao = _(' ')
@ -1474,9 +1475,13 @@ class ResumoView(DetailView):
# Verificar resultado # Verificar resultado
rv = o.registrovotacao_set.filter(materia=o.materia).first() rv = o.registrovotacao_set.filter(materia=o.materia).first()
rp = o.retiradapauta_set.filter(materia=o.materia).first()
if rv: if rv:
resultado = rv.tipo_resultado_votacao.nome resultado = rv.tipo_resultado_votacao.nome
resultado_observacao = rv.observacao resultado_observacao = rv.observacao
elif rp:
resultado = rp.tipo_de_retirada.descricao
resultado_observacao = rp.observacao
else: else:
resultado = _('Matéria não votada') resultado = _('Matéria não votada')
resultado_observacao = _(' ') resultado_observacao = _(' ')

2
sapl/static/js/app.js

@ -47,7 +47,7 @@ function refreshMask() {
$('.dateinput').mask('00/00/0000', {placeholder:"__/__/____"}); $('.dateinput').mask('00/00/0000', {placeholder:"__/__/____"});
$('.hora').mask("00:00", {placeholder:"hh:mm"}); $('.hora').mask("00:00", {placeholder:"hh:mm"});
$('.hora_hms').mask("00:00:00", {placeholder:"hh:mm:ss"}); $('.hora_hms').mask("00:00:00", {placeholder:"hh:mm:ss"});
$('.cronometro').mask("00:00", {placeholder:"mm:ss"}); $('.cronometro').mask("00:00:00", {placeholder:"hh:mm:ss"});
} }
function autorModal() { function autorModal() {

4
sapl/templates/norma/layouts.yaml

@ -58,7 +58,7 @@ LegislacaoCitadaDetail:
TipoVinculoNormaJuridica: TipoVinculoNormaJuridica:
{% trans 'Tipo de Vínculo entre Normas Jurídicas' %}: {% trans 'Tipo de Vínculo entre Normas Jurídicas' %}:
- sigla:2 descricao_ativa descricao_passiva - sigla:2 descricao_ativa descricao_passiva revoga_integralmente
NormaRelacionada: NormaRelacionada:
{% trans 'Norma Relacionada' %}: {% trans 'Norma Relacionada' %}:
@ -73,4 +73,4 @@ NormaRelacionadaDetail:
AutoriaNorma: AutoriaNorma:
{% trans 'Autoria' %}: {% trans 'Autoria' %}:
- autor primeiro_autor - autor primeiro_autor

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

@ -2,9 +2,15 @@
<fieldset> <fieldset>
<p align="justify"> <p align="justify">
<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_parlamentar}} / {{ p|filiacao_data_filter:object.data_inicio }} ; {{p.nome_parlamentar}} / {{ p|filiacao_data_filter:object.data_inicio }} ;
{% endfor %} {% endfor %}
</p> </p>
</fieldset> <p align="justify">
<strong>Justificativas de Ausências na Sessão: </strong>
{% for j in justificativa_ausencia %}
{{j.parlamentar}} / {{ j.tipo_ausencia }} ;
{% endfor %}
</p>
</fieldset>

27
sapl/templates/sessao/blocos_resumo/lista_presenca.html

@ -7,4 +7,29 @@
<div class="col-md-12">{{p.nome_parlamentar}} / {{ p|filiacao_data_filter:object.data_inicio }}</div> <div class="col-md-12">{{p.nome_parlamentar}} / {{ p|filiacao_data_filter:object.data_inicio }}</div>
{% endfor %} {% endfor %}
</div> </div>
</fieldset> </br></br></br>
<div class="row">
<legend>Justificativas de Ausência na Sessão</legend>
<table class="table">
<thead>
<tr>
<th>Parlamentar</th>
<th>Justificativa</th>
<th>Ausente em</th>
</tr>
</thead>
<tbody>
{% for j in justificativa_ausencia %}
<tr>
<td> {{ j.parlamentar }} </td>
<td> {{ j.tipo_ausencia }} </td>
{% if j.ausencia == 1 %}
<td> Matéria </td>
{% else %}
<td> Sessão </td>
{% endif %}
{% endfor %}
</tbody>
</table>
</div>
</fieldset>

2
sapl/templates/sessao/resumo_ata.html

@ -19,6 +19,6 @@
{% include 'sessao/blocos_ata/'|add:oitavo_ordenacao %} {% include 'sessao/blocos_ata/'|add:oitavo_ordenacao %}
{% include 'sessao/blocos_ata/'|add:nono_ordenacao %} {% include 'sessao/blocos_ata/'|add:nono_ordenacao %}
{% include 'sessao/blocos_ata/'|add:decimo_ordenacao %} {% include 'sessao/blocos_ata/'|add:decimo_ordenacao %}
{% include 'sessao/blocos_ata/'|add:decimo_primeiro_ordenacao %} {% include 'sessao/blocos_ata/'|add:decimo_primeiro_ordenacao %}
{% include 'sessao/blocos_ata/assinaturas.html' %} {% include 'sessao/blocos_ata/assinaturas.html' %}
{% endblock detail_content %} {% endblock detail_content %}

Loading…
Cancel
Save