diff --git a/sapl/base/migrations/0024_auto_20181126_1534.py b/sapl/base/migrations/0024_auto_20181126_1534.py
new file mode 100644
index 000000000..2f91af1ea
--- /dev/null
+++ b/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'),
+ ),
+ ]
diff --git a/sapl/base/migrations/0025_auto_20181126_1648.py b/sapl/base/migrations/0025_auto_20181126_1648.py
new file mode 100644
index 000000000..a1ca53ed4
--- /dev/null
+++ b/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'),
+ ),
+ ]
diff --git a/sapl/base/migrations/0026_auto_20181126_1727.py b/sapl/base/migrations/0026_auto_20181126_1727.py
new file mode 100644
index 000000000..4b908e7c4
--- /dev/null
+++ b/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'),
+ ),
+ ]
diff --git a/sapl/base/models.py b/sapl/base/models.py
index 9153803b8..5caf8b2c0 100644
--- a/sapl/base/models.py
+++ b/sapl/base/models.py
@@ -121,22 +121,22 @@ class AppConfig(models.Model):
verbose_name=_('Quem deve assina a ata'),
max_length=1, choices=ASSINATURA_ATA_CHOICES, default='T')
- cronometro_discurso = models.TimeField(
+ cronometro_discurso = models.DurationField(
verbose_name=_('Cronômetro do Discurso'),
blank=True,
null=True)
- cronometro_aparte = models.TimeField(
+ cronometro_aparte = models.DurationField(
verbose_name=_('Cronômetro do Aparte'),
blank=True,
null=True)
- cronometro_ordem = models.TimeField(
+ cronometro_ordem = models.DurationField(
verbose_name=_('Cronômetro da Ordem'),
blank=True,
null=True)
- cronometro_consideracoes = models.TimeField(
+ cronometro_consideracoes = models.DurationField(
verbose_name=_('Cronômetro de Considerações Finais'),
blank=True,
null=True)
diff --git a/sapl/base/templatetags/common_tags.py b/sapl/base/templatetags/common_tags.py
index 4251e54da..89f781558 100644
--- a/sapl/base/templatetags/common_tags.py
+++ b/sapl/base/templatetags/common_tags.py
@@ -228,11 +228,8 @@ def file_extension(value):
def cronometro_to_seconds(value):
if not AppConfig.attr('cronometro_' + value):
return 0
-
- m, s, x = AppConfig.attr(
- 'cronometro_' + value).isoformat().split(':')
-
- return 60 * int(m) + int(s)
+
+ return AppConfig.attr('cronometro_' + value).seconds
@register.filter
diff --git a/sapl/norma/fixtures/pre_popula_tipo_vinculo_norma.json b/sapl/norma/fixtures/pre_popula_tipo_vinculo_norma.json
index 50c6ad647..afae65bfe 100644
--- a/sapl/norma/fixtures/pre_popula_tipo_vinculo_norma.json
+++ b/sapl/norma/fixtures/pre_popula_tipo_vinculo_norma.json
@@ -1,6 +1,7 @@
[
{
"fields": {
+ "revoga_integralmente": "False",
"descricao_ativa": "Altera o(a)",
"descricao_passiva": "Alterado(a) pelo(a)",
"sigla": "A"
@@ -10,6 +11,7 @@
},
{
"fields": {
+ "revoga_integralmente": "True",
"descricao_ativa": "Revoga integralmente o(a)",
"descricao_passiva": "Revogado(a) integralmente pelo(a)",
"sigla": "R"
@@ -19,6 +21,7 @@
},
{
"fields": {
+ "revoga_integralmente": "False",
"descricao_ativa": "Revoga parcialmente o(a)",
"descricao_passiva": "Revogado(a) parcialmente pelo(a)",
"sigla": "P"
@@ -28,6 +31,7 @@
},
{
"fields": {
+ "revoga_integralmente": "True",
"descricao_ativa": "Revoga integralmente por consolida\u00e7\u00e3o",
"descricao_passiva": "Revogado(a) integralmente por consolida\u00e7\u00e3o",
"sigla": "T"
@@ -37,6 +41,7 @@
},
{
"fields": {
+ "revoga_integralmente": "False",
"descricao_ativa": "Norma correlata",
"descricao_passiva": "Norma correlata",
"sigla": "C"
@@ -46,6 +51,7 @@
},
{
"fields": {
+ "revoga_integralmente": "False",
"descricao_ativa": "Ressalva o(a)",
"descricao_passiva": "Ressalvada pelo(a)",
"sigla": "S"
@@ -55,6 +61,7 @@
},
{
"fields": {
+ "revoga_integralmente": "False",
"descricao_ativa": "Reedita o(a)",
"descricao_passiva": "Reeditada pelo(a)",
"sigla": "E"
@@ -64,6 +71,7 @@
},
{
"fields": {
+ "revoga_integralmente": "False",
"descricao_ativa": "Reedita com altera\u00e7\u00e3o o(a)",
"descricao_passiva": "Reeditada com altera\u00e7\u00e3o pelo(a)",
"sigla": "I"
@@ -73,6 +81,7 @@
},
{
"fields": {
+ "revoga_integralmente": "False",
"descricao_ativa": "Regulamenta o(a)",
"descricao_passiva": "Regulamentada pelo(a)",
"sigla": "G"
@@ -82,6 +91,7 @@
},
{
"fields": {
+ "revoga_integralmente": "False",
"descricao_ativa": "Suspende parcialmente o(a)",
"descricao_passiva": "Suspenso(a) parcialmente pelo(a)",
"sigla": "K"
@@ -91,6 +101,7 @@
},
{
"fields": {
+ "revoga_integralmente": "False",
"descricao_ativa": "Suspende integralmente o(a)",
"descricao_passiva": "Suspenso(a) integralmente pelo(a)",
"sigla": "L"
@@ -100,6 +111,7 @@
},
{
"fields": {
+ "revoga_integralmente": "False",
"descricao_ativa": "Julga integralmente inconstitucional",
"descricao_passiva": "Julgada integralmente inconstitucional",
"sigla": "N"
@@ -109,6 +121,7 @@
},
{
"fields": {
+ "revoga_integralmente": "False",
"descricao_ativa": "Julga parcialmente inconstitucional",
"descricao_passiva": "Julgada parcialmente inconstitucional",
"sigla": "O"
@@ -116,4 +129,4 @@
"model": "norma.TipoVinculoNormaJuridica",
"pk": "13"
}
-]
\ No newline at end of file
+]
diff --git a/sapl/norma/forms.py b/sapl/norma/forms.py
index 674e1b9a8..4f6b6a563 100644
--- a/sapl/norma/forms.py
+++ b/sapl/norma/forms.py
@@ -344,6 +344,8 @@ class NormaRelacionadaForm(ModelForm):
def save(self, commit=False):
relacionada = super(NormaRelacionadaForm, self).save(commit)
relacionada.norma_relacionada = self.cleaned_data['norma_relacionada']
+ relacionada.norma_relacionada.data_vigencia = relacionada.norma_principal.data
+ relacionada.norma_relacionada.save()
relacionada.save()
return relacionada
diff --git a/sapl/norma/migrations/0008_normajuridica_popula_tipo_vinculo_norma.py b/sapl/norma/migrations/0008_normajuridica_popula_tipo_vinculo_norma.py
index 3bfb90132..460122073 100644
--- a/sapl/norma/migrations/0008_normajuridica_popula_tipo_vinculo_norma.py
+++ b/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):
dependencies = [
- ('norma', '0007_auto_20170904_1708'),
+ ('norma', '0017_auto_20181127_0955'),
]
operations = [
migrations.RunPython(gera_tipo_vinculo),
- ]
\ No newline at end of file
+ ]
diff --git a/sapl/norma/migrations/0009_auto_20171113_1339.py b/sapl/norma/migrations/0009_auto_20171113_1339.py
index 672d87c94..36380b2a9 100644
--- a/sapl/norma/migrations/0009_auto_20171113_1339.py
+++ b/sapl/norma/migrations/0009_auto_20171113_1339.py
@@ -9,7 +9,7 @@ import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
- ('norma', '0008_normajuridica_popula_tipo_vinculo_norma'),
+ ('norma', '0007_auto_20170904_1708'),
]
operations = [
diff --git a/sapl/norma/migrations/0016_tipovinculonormajuridica_revoga_integramente.py b/sapl/norma/migrations/0016_tipovinculonormajuridica_revoga_integramente.py
new file mode 100644
index 000000000..5a57c2d9f
--- /dev/null
+++ b/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?'),
+ ),
+ ]
diff --git a/sapl/norma/migrations/0017_auto_20181127_0955.py b/sapl/norma/migrations/0017_auto_20181127_0955.py
new file mode 100644
index 000000000..45fdb463b
--- /dev/null
+++ b/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',
+ ),
+ ]
diff --git a/sapl/norma/models.py b/sapl/norma/models.py
index fd06b553e..6565304ee 100644
--- a/sapl/norma/models.py
+++ b/sapl/norma/models.py
@@ -258,6 +258,9 @@ class TipoVinculoNormaJuridica(models.Model):
max_length=50, blank=True, verbose_name=_('Descrição Ativa'))
descricao_passiva = models.CharField(
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:
verbose_name = _('Tipo de Vínculo entre Normas Jurídicas')
diff --git a/sapl/norma/views.py b/sapl/norma/views.py
index faca58d32..779cfcd11 100644
--- a/sapl/norma/views.py
+++ b/sapl/norma/views.py
@@ -37,7 +37,7 @@ TipoNormaCrud = CrudAux.build(
list_field_names=['sigla', 'descricao', 'equivalente_lexml'])
TipoVinculoNormaJuridicaCrud = CrudAux.build(
TipoVinculoNormaJuridica, '',
- list_field_names=['sigla', 'descricao_ativa', 'descricao_passiva'])
+ list_field_names=['sigla', 'descricao_ativa', 'descricao_passiva', 'revoga_integralmente'])
class NormaRelacionadaCrud(MasterDetailCrud):
@@ -208,7 +208,7 @@ class NormaCrud(Crud):
def get_initial(self):
username = self.request.user.username
-
+
try:
self.logger.debug('user=' + username + '. Tentando obter objeto de modelo da esfera da federação.')
esfera = sapl.base.models.AppConfig.objects.last(
diff --git a/sapl/painel/views.py b/sapl/painel/views.py
index 963e53019..333c3771e 100644
--- a/sapl/painel/views.py
+++ b/sapl/painel/views.py
@@ -340,7 +340,6 @@ def cronometro_painel(request):
def get_cronometro_status(request, name):
logger = logging.getLogger(__name__)
username = request.user.username
-
try:
logger.debug("user=" + username + ". Tentando obter cronometro.")
cronometro = request.session[name]
diff --git a/sapl/parlamentares/views.py b/sapl/parlamentares/views.py
index 9e6fc1d17..f9a37b373 100644
--- a/sapl/parlamentares/views.py
+++ b/sapl/parlamentares/views.py
@@ -498,7 +498,7 @@ class ParlamentarCrud(Crud):
if legislatura_id >= 0:
return queryset.filter(
mandato__legislatura_id=legislatura_id).annotate(
- mandato_titular=F('mandato__titular'))
+ mandato_titular=F('mandato__titular')).distinct()
else:
try:
self.logger.debug("user=" + username + ". Tentando obter o mais recente registro do objeto Legislatura.")
diff --git a/sapl/relatorios/templates/pdf_sessao_plenaria_gerar.py b/sapl/relatorios/templates/pdf_sessao_plenaria_gerar.py
index 2ac9a7fe7..b67a51696 100644
--- a/sapl/relatorios/templates/pdf_sessao_plenaria_gerar.py
+++ b/sapl/relatorios/templates/pdf_sessao_plenaria_gerar.py
@@ -142,7 +142,7 @@ def mesa(lst_mesa):
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
\n'
+ tmp += '\t\t \n'
+ for ausencia in lst_ausencia_sessao:
+ tmp += 'Parlamentar Justificativa Ausente em \n'
+ tmp += '' + \
+ str(ausencia['parlamentar']) + ' ' + \
+ str(ausencia['justificativa']) + ' ' + \
+ str(ausencia['tipo']) + '
+ Justificativas de Ausências na Sessão: + {% for j in justificativa_ausencia %} + {{j.parlamentar}} / {{ j.tipo_ausencia }} ; + {% endfor %} +
+ diff --git a/sapl/templates/sessao/blocos_resumo/lista_presenca.html b/sapl/templates/sessao/blocos_resumo/lista_presenca.html index 56ecf9c17..8f5ac10e2 100644 --- a/sapl/templates/sessao/blocos_resumo/lista_presenca.html +++ b/sapl/templates/sessao/blocos_resumo/lista_presenca.html @@ -7,4 +7,29 @@| Parlamentar | +Justificativa | +Ausente em | +|
|---|---|---|---|
| {{ j.parlamentar }} | +{{ j.tipo_ausencia }} | + {% if j.ausencia == 1 %} +Matéria | + {% else %} +Sessão | + {% endif %} + {% endfor %} +