From d12528f9fd9504ee2a21296cb61f253af9f8a069 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Sconetto?= Date: Tue, 11 Sep 2018 09:12:18 -0300 Subject: [PATCH 01/10] Fix #2197 (#2198) --- sapl/sessao/forms.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/sapl/sessao/forms.py b/sapl/sessao/forms.py index 34ae035f9..0166e848e 100644 --- a/sapl/sessao/forms.py +++ b/sapl/sessao/forms.py @@ -103,9 +103,8 @@ class SessaoPlenariaForm(ModelForm): abertura_entre_leg = leg.data_inicio <= abertura <= leg.data_fim abertura_entre_sl = sl.data_inicio <= abertura <= sl.data_fim if encerramento is not None: - encerramento_entre_leg = leg.data_inicio < encerramento < leg.data_fim - encerramento_entre_sl = sl.data_inicio < encerramento < sl.data_fim - + encerramento_entre_leg = leg.data_inicio <= encerramento <= leg.data_fim + encerramento_entre_sl = sl.data_inicio <= encerramento <= sl.data_fim # Verificação das datas de abertura e encerramento da Sessão # Verificações com a data de encerramento preenchidas if encerramento is not None: From 4902dd66c6828bf497bc12eadc6933a68f7511fe Mon Sep 17 00:00:00 2001 From: Leandro Roberto Date: Tue, 11 Sep 2018 10:38:15 -0300 Subject: [PATCH 02/10] =?UTF-8?q?add=20link=20a=20textos=20de=20dispositiv?= =?UTF-8?q?os=20alterados=20que=20n=C3=A3o=20possuem=20r=C3=B3tulo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../templates/compilacao/text_edit_bloco.html | 3 -- .../compilacao/text_list_blocoalteracao.html | 34 ++++++++++++++----- 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/sapl/templates/compilacao/text_edit_bloco.html b/sapl/templates/compilacao/text_edit_bloco.html index 27b6c38fc..27056b7f2 100644 --- a/sapl/templates/compilacao/text_edit_bloco.html +++ b/sapl/templates/compilacao/text_edit_bloco.html @@ -36,9 +36,6 @@ {{ node.td.rotulo_sufixo_html|safe }} {% endif %} - - - {{ node.td.texto_prefixo_html|safe }} {% if node.da and node in node.da.alts and not node.dpt.visibilidade %}({% trans 'Dispositivo visível apenas no Texto Articulado Original'%}){% endif %} diff --git a/sapl/templates/compilacao/text_list_blocoalteracao.html b/sapl/templates/compilacao/text_list_blocoalteracao.html index 26b069072..ed9876fd9 100644 --- a/sapl/templates/compilacao/text_list_blocoalteracao.html +++ b/sapl/templates/compilacao/text_list_blocoalteracao.html @@ -5,15 +5,31 @@ {% if ch.visibilidade %}
- {% if ch.auto_inserido %} - {{ ch.dispositivo_pai.tipo_dispositivo.rotulo_prefixo_html|safe }} - {{ ch.dispositivo_pai.rotulo }} - {{ ch.dispositivo_pai.tipo_dispositivo.rotulo_sufixo_html|safe }} - {% endif %} - {{ ch.tipo_dispositivo.rotulo_prefixo_html|safe }} - {{ ch.rotulo }} - {{ ch.tipo_dispositivo.rotulo_sufixo_html|safe }} - {{ ch.tipo_dispositivo.texto_prefixo_html|safe }}{{ ch.texto|safe }} + {% if ch.auto_inserido %} + {{ ch.dispositivo_pai.tipo_dispositivo.rotulo_prefixo_html|safe }} + {% if ch.dispositivo_pai.rotulo %} + {{ ch.dispositivo_pai.rotulo }} + {{ ch.dispositivo_pai.tipo_dispositivo.rotulo_sufixo_html|safe }} + {% else %} + + {{ ch.dispositivo_pai.tipo_dispositivo.rotulo_sufixo_html|safe }} + + {% endif %} + {% endif %} + {{ ch.tipo_dispositivo.rotulo_prefixo_html|safe }} + {% if ch.rotulo %} + {{ ch.rotulo }} + {{ ch.tipo_dispositivo.rotulo_sufixo_html|safe }} + {{ ch.tipo_dispositivo.texto_prefixo_html|safe }}{{ ch.texto|safe }} + {% elif not ch.rotulo and not ch.auto_inserido %} + + {{ ch.tipo_dispositivo.rotulo_sufixo_html|safe }} + {{ ch.tipo_dispositivo.texto_prefixo_html|safe }}{{ ch.texto|safe }} + + {% else %} + {{ ch.tipo_dispositivo.rotulo_sufixo_html|safe }} + {{ ch.tipo_dispositivo.texto_prefixo_html|safe }}{{ ch.texto|safe }} + {% endif %}
{%endif%} From dc9e5ac5b685fbad4973bba760ccb26126acf02c Mon Sep 17 00:00:00 2001 From: VictorFabreF Date: Tue, 11 Sep 2018 11:26:45 -0300 Subject: [PATCH 03/10] =?UTF-8?q?HOT-FIX:=20retira=20verifica=C3=A7=C3=A3o?= =?UTF-8?q?=20n=C3=BAmero=20sess=C3=A3o=20legislativa?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/base/forms.py | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/sapl/base/forms.py b/sapl/base/forms.py index 20008b73a..995bb5968 100644 --- a/sapl/base/forms.py +++ b/sapl/base/forms.py @@ -193,18 +193,19 @@ class SessaoLegislativaForm(ModelForm): 'inserida, favor verificar as Sessões existentes antes de criar uma ' 'nova Sessão Legislativa') - sessoes_legislativas = SessaoLegislativa.objects.filter(legislatura=legislatura).exclude(pk=pk) - - if sessoes_legislativas: - numeracoes = [n.numero for n in sessoes_legislativas] - numeracoes = sorted(numeracoes) - ult = max(numeracoes) - - else: - ult = SessaoLegislativa.objects.latest('data_fim') - flag_edit = ult.id != pk - ult = ult.numero - + #sessoes_legislativas = SessaoLegislativa.objects.filter(legislatura=legislatura).exclude(pk=pk) + + # if sessoes_legislativas: + # numeracoes = [n.numero for n in sessoes_legislativas] + # numeracoes = sorted(numeracoes) + # ult = max(numeracoes) + # + # else: + # ult = SessaoLegislativa.objects.latest('data_fim') + # flag_edit = ult.id != pk + # ult = ult.numero + + ult = 0 if numero <= ult and flag_edit: raise ValidationError('O número da Sessão Legislativa não pode ser menor ou igual ' 'que o de Sessões Legislativas passadas') From ecffee6bc5028d0112e12945b12f276655515858 Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Tue, 11 Sep 2018 11:28:02 -0300 Subject: [PATCH 04/10] Release: 3.1.115 --- docker-compose.yml | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 8a285050a..dd515d9d3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -11,7 +11,7 @@ sapldb: ports: - "5432:5432" sapl: - image: interlegis/sapl:3.1.114 + image: interlegis/sapl:3.1.115 restart: always environment: ADMIN_PASSWORD: interlegis diff --git a/setup.py b/setup.py index 655bf9593..90f8fa3a0 100644 --- a/setup.py +++ b/setup.py @@ -49,7 +49,7 @@ install_requires = [ ] setup( name='interlegis-sapl', - version='3.1.114', + version='3.1.115', packages=find_packages(), include_package_data=True, license='GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007', From 0e5d6a903151b84b1b254ae15d092344ac0c4cbd Mon Sep 17 00:00:00 2001 From: "tapumar@gmail.com" Date: Tue, 11 Sep 2018 12:37:44 -0100 Subject: [PATCH 05/10] =?UTF-8?q?HOT-FIX=20erro=20500=20no=20salvamento=20?= =?UTF-8?q?da=20tramita=C3=A7=C3=A3o=20em=20lote?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/materia/views.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/sapl/materia/views.py b/sapl/materia/views.py index fa48209e2..622383726 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -1843,7 +1843,7 @@ class PrimeiraTramitacaoEmLoteView(PermissionRequiredMixin, FilterView): # issue https://github.com/interlegis/sapl/issues/1123 # TODO: usar Form urgente = request.POST['urgente'] == 'True' - + flag_error = False for materia_id in marcadas: t = Tramitacao( materia_id=materia_id, @@ -1861,9 +1861,17 @@ class PrimeiraTramitacaoEmLoteView(PermissionRequiredMixin, FilterView): texto=request.POST['texto'] ) t.save() - tramitacao_signal.send(sender=Tramitacao, - post=t, - request=self.request) + try: + tramitacao_signal.send(sender=Tramitacao, + post=t, + request=self.request) + except Exception: + flag_error = True + if flag_error: + msg = _('Tramitação criada, mas e-mail de acompanhamento ' + 'de matéria não enviado. Há problemas na configuração ' + 'do e-mail.') + messages.add_message(self.request, messages.ERROR, msg) status = StatusTramitacao.objects.get(id=request.POST['status']) From 3170e977b67d4a006db4c40492e187d2e3e9f398 Mon Sep 17 00:00:00 2001 From: "tapumar@gmail.com" Date: Tue, 11 Sep 2018 12:40:50 -0100 Subject: [PATCH 06/10] Release: 3.1.116 --- docker-compose.yml | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index dd515d9d3..9179ca79e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -11,7 +11,7 @@ sapldb: ports: - "5432:5432" sapl: - image: interlegis/sapl:3.1.115 + image: interlegis/sapl:3.1.116 restart: always environment: ADMIN_PASSWORD: interlegis diff --git a/setup.py b/setup.py index 90f8fa3a0..41a55ebfd 100644 --- a/setup.py +++ b/setup.py @@ -49,7 +49,7 @@ install_requires = [ ] setup( name='interlegis-sapl', - version='3.1.115', + version='3.1.116', packages=find_packages(), include_package_data=True, license='GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007', From 7838e2817de7a28db26f32cc05dc628c80795fb2 Mon Sep 17 00:00:00 2001 From: Leandro Roberto Date: Tue, 11 Sep 2018 15:50:41 -0300 Subject: [PATCH 07/10] =?UTF-8?q?inclui=20rel=20entre=20dispositivos=20par?= =?UTF-8?q?a=20novas=20instala=C3=A7=C3=B5es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/compilacao/compilacao_data_tables.sql | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sapl/compilacao/compilacao_data_tables.sql b/sapl/compilacao/compilacao_data_tables.sql index cd70c3e6f..0d3841713 100644 --- a/sapl/compilacao/compilacao_data_tables.sql +++ b/sapl/compilacao/compilacao_data_tables.sql @@ -260,6 +260,8 @@ INSERT INTO compilacao_tipodispositivorelationship (filho_permitido_id, pai_id, INSERT INTO compilacao_tipodispositivorelationship (filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (122, 119, false, 1, -1, false); INSERT INTO compilacao_tipodispositivorelationship (filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (122, 119, false, 2, -1, true); +INSERT INTO compilacao_tipodispositivorelationship (filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (3, 125, false, 3, -1, false); + INSERT INTO compilacao_tiponota (id, sigla, nome, modelo) VALUES (1, 'NE', 'Nota Explicativa', ''); From d65de425b23174956ac131d9565ec6f0a85ba8d7 Mon Sep 17 00:00:00 2001 From: Leandro Roberto Date: Tue, 11 Sep 2018 16:05:52 -0300 Subject: [PATCH 08/10] =?UTF-8?q?add=20rel=20entre=20disp=20para=20instanc?= =?UTF-8?q?ias=20em=20produ=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../migrations/0007_auto_20180911_1600.py | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 sapl/compilacao/migrations/0007_auto_20180911_1600.py diff --git a/sapl/compilacao/migrations/0007_auto_20180911_1600.py b/sapl/compilacao/migrations/0007_auto_20180911_1600.py new file mode 100644 index 000000000..adb811a77 --- /dev/null +++ b/sapl/compilacao/migrations/0007_auto_20180911_1600.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.13 on 2018-03-21 13:54 +from __future__ import unicode_literals + +from django.db import migrations, models + + +def insert_relacionamento_entre_dispositivos(apps, schema_editor): + + TipoDispositivoRelationship = apps.get_model( + 'compilacao', 'TipoDispositivoRelationship') + + try: + rel = TipoDispositivoRelationship() + rel.filho_permitido_id = 3 + rel.pai_id = 125 + rel.filho_de_insercao_automatica = False + rel.perfil_id = 3 + rel.quantidade_permitida = -1 + rel.permitir_variacao = False + rel.save() + except: + pass + + +class Migration(migrations.Migration): + + dependencies = [ + ('compilacao', '0006_auto_20180321_1054'), + ] + + operations = [ + migrations.RunPython(insert_relacionamento_entre_dispositivos), + ] From 7d301a300f5d47cf17c52316d35167e82794a23e Mon Sep 17 00:00:00 2001 From: Leandro Roberto Date: Tue, 11 Sep 2018 16:46:29 -0300 Subject: [PATCH 09/10] =?UTF-8?q?add=20checagem=20sobre=20exist=C3=AAncia?= =?UTF-8?q?=20de=20rel=20entre=20disp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../migrations/0007_auto_20180911_1600.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/sapl/compilacao/migrations/0007_auto_20180911_1600.py b/sapl/compilacao/migrations/0007_auto_20180911_1600.py index adb811a77..9db7dfa4f 100644 --- a/sapl/compilacao/migrations/0007_auto_20180911_1600.py +++ b/sapl/compilacao/migrations/0007_auto_20180911_1600.py @@ -11,14 +11,15 @@ def insert_relacionamento_entre_dispositivos(apps, schema_editor): 'compilacao', 'TipoDispositivoRelationship') try: - rel = TipoDispositivoRelationship() - rel.filho_permitido_id = 3 - rel.pai_id = 125 - rel.filho_de_insercao_automatica = False - rel.perfil_id = 3 - rel.quantidade_permitida = -1 - rel.permitir_variacao = False - rel.save() + if TipoDispositivoRelationship.objects.exists(): + rel = TipoDispositivoRelationship() + rel.filho_permitido_id = 3 + rel.pai_id = 125 + rel.filho_de_insercao_automatica = False + rel.perfil_id = 3 + rel.quantidade_permitida = -1 + rel.permitir_variacao = False + rel.save() except: pass From 4d622f28ac67f6df5ac7051bd0efa4b356fffb22 Mon Sep 17 00:00:00 2001 From: Victor Fabre Date: Tue, 11 Sep 2018 17:53:16 -0300 Subject: [PATCH 10/10] Fix #2194 (#2203) * Fix #2194 * altera testes --- sapl/protocoloadm/forms.py | 24 ++++++++++++------- .../0006_documentoadministrativo_restrito.py | 20 ++++++++++++++++ sapl/protocoloadm/models.py | 5 +++- sapl/protocoloadm/tests/test_protocoloadm.py | 6 +++-- sapl/protocoloadm/views.py | 7 ++++++ .../documentoadministrativo_filter.html | 4 +++- 6 files changed, 53 insertions(+), 13 deletions(-) create mode 100644 sapl/protocoloadm/migrations/0006_documentoadministrativo_restrito.py diff --git a/sapl/protocoloadm/forms.py b/sapl/protocoloadm/forms.py index 22e649459..8f80a5632 100644 --- a/sapl/protocoloadm/forms.py +++ b/sapl/protocoloadm/forms.py @@ -304,15 +304,15 @@ class ProtocoloDocumentForm(ModelForm): numero_paginas = forms.CharField(label=_('Núm. Páginas'), required=True) assunto = forms.CharField( - widget=forms.Textarea, label='Assunto', required=True) + widget=forms.Textarea, label=_('Assunto'), required=True) interessado = forms.CharField(required=True, - label='Interessado') + label=_('Interessado')) observacao = forms.CharField(required=False, - widget=forms.Textarea, label='Observação') + widget=forms.Textarea, label=_('Observação')) - numero = forms.IntegerField(required=False, label='Número de Protocolo (opcional)') + numero = forms.IntegerField(required=False, label=_('Número de Protocolo (opcional)')) class Meta: model = Protocolo @@ -394,12 +394,12 @@ class ProtocoloMateriaForm(ModelForm): numero_paginas = forms.CharField(label=_('Núm. Páginas'), required=True) observacao = forms.CharField(required=False, - widget=forms.Textarea, label='Observação') + widget=forms.Textarea, label=_('Observação')) assunto_ementa = forms.CharField(required=True, - widget=forms.Textarea, label='Ementa') + widget=forms.Textarea, label=_('Ementa')) - numero = forms.IntegerField(required=False, label='Número de Protocolo (opcional)') + numero = forms.IntegerField(required=False, label=_('Número de Protocolo (opcional)')) class Meta: model = Protocolo @@ -636,6 +636,11 @@ class DocumentoAdministrativoForm(ModelForm): label=Protocolo._meta. get_field('numero').verbose_name) + restrito = forms.ChoiceField(label=_('Acesso Restrito'), + widget=forms.RadioSelect(), + choices=YES_NO_CHOICES, + initial=False) + class Meta: model = DocumentoAdministrativo fields = ['tipo', @@ -653,6 +658,7 @@ class DocumentoAdministrativoForm(ModelForm): 'observacao', 'texto_integral', 'protocolo', + 'restrito' ] widgets = {'protocolo': forms.HiddenInput()} @@ -682,7 +688,7 @@ class DocumentoAdministrativoForm(ModelForm): tipo=tipo_documento, ano=ano_protocolo).exists() if doc_exists: - raise ValidationError('Documento já existente') + raise ValidationError(_('Documento já existente')) # campos opcionais, mas que se informados devem ser válidos if numero_protocolo and ano_protocolo: @@ -740,7 +746,7 @@ class DocumentoAdministrativoForm(ModelForm): [('assunto', 12)]) row4 = to_row( - [('interessado', 9), ('tramitacao', 3)]) + [('interessado', 8), ('tramitacao', 2), (InlineRadios('restrito'), 2)]) row5 = to_row( [('texto_integral', 12)]) diff --git a/sapl/protocoloadm/migrations/0006_documentoadministrativo_restrito.py b/sapl/protocoloadm/migrations/0006_documentoadministrativo_restrito.py new file mode 100644 index 000000000..ac7f0de94 --- /dev/null +++ b/sapl/protocoloadm/migrations/0006_documentoadministrativo_restrito.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.13 on 2018-09-10 12:07 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('protocoloadm', '0005_auto_20180824_1241'), + ] + + operations = [ + migrations.AddField( + model_name='documentoadministrativo', + name='restrito', + field=models.BooleanField(default=False, verbose_name='Acesso Restrito'), + ), + ] diff --git a/sapl/protocoloadm/models.py b/sapl/protocoloadm/models.py index 1fd38e720..347b8545e 100644 --- a/sapl/protocoloadm/models.py +++ b/sapl/protocoloadm/models.py @@ -93,7 +93,7 @@ class Protocolo(models.Model): user_anulacao = models.CharField(max_length=20, blank=True) ip_anulacao = models.CharField(max_length=15, blank=True) justificativa_anulacao = models.CharField( - max_length=60, blank=True, verbose_name='Motivo') + max_length=60, blank=True, verbose_name=_('Motivo')) timestamp_anulacao = models.DateTimeField(blank=True, null=True) class Meta: @@ -148,6 +148,9 @@ class DocumentoAdministrativo(models.Model): null=True, upload_to=texto_upload_path, verbose_name=_('Texto Integral')) + restrito = models.BooleanField(default=False, + verbose_name=_('Acesso Restrito'), + blank=True) class Meta: verbose_name = _('Documento Administrativo') diff --git a/sapl/protocoloadm/tests/test_protocoloadm.py b/sapl/protocoloadm/tests/test_protocoloadm.py index f74c4dd7b..2f61d359f 100644 --- a/sapl/protocoloadm/tests/test_protocoloadm.py +++ b/sapl/protocoloadm/tests/test_protocoloadm.py @@ -359,8 +359,9 @@ def test_documento_administrativo_invalido(): assert errors['assunto'] == [_('Este campo é obrigatório.')] assert errors['numero'] == [_('Este campo é obrigatório.')] assert errors['data'] == [_('Este campo é obrigatório.')] + assert errors['restrito'] == [_('Este campo é obrigatório.')] - assert len(errors) == 5 + assert len(errors) == 6 @pytest.mark.django_db(transaction=False) @@ -374,7 +375,8 @@ def test_documento_administrativo_protocolo_inexistente(): 'numero': '1', 'data': '2017-10-10', 'numero_protocolo': '11', - 'ano_protocolo': '2017' + 'ano_protocolo': '2017', + 'restrito': False }) assert not form.is_valid() diff --git a/sapl/protocoloadm/views.py b/sapl/protocoloadm/views.py index d86063887..a084f899c 100644 --- a/sapl/protocoloadm/views.py +++ b/sapl/protocoloadm/views.py @@ -142,6 +142,13 @@ class DocumentoAdministrativoCrud(Crud): class DetailView(DocumentoAdministrativoMixin, Crud.DetailView): + def get(self, *args, **kwargs): + pk = self.kwargs['pk'] + documento = DocumentoAdministrativo.objects.get(id=pk) + if documento.restrito and self.request.user.is_anonymous(): + return redirect('/') + return super(Crud.DetailView, self).get(args, kwargs) + def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) self.layout_display[0]['rows'][-1][0]['text'] = ( diff --git a/sapl/templates/protocoloadm/documentoadministrativo_filter.html b/sapl/templates/protocoloadm/documentoadministrativo_filter.html index 719efcd04..e87962273 100644 --- a/sapl/templates/protocoloadm/documentoadministrativo_filter.html +++ b/sapl/templates/protocoloadm/documentoadministrativo_filter.html @@ -34,10 +34,11 @@ {% endif %} {% for d in page_obj %} + {% if request.user.is_anonymous and not d.restrito or not request.user.is_anonymous%} {{d.tipo.sigla}} {{d.numero}}/{{d.ano}} - {{d.tipo}}
- Interessado: {{ d.interessado|default_if_none:"Não informado"}} + Interessado: {{ d.interessado|default_if_none:"Não informado"}}
Assunto: {{ d.assunto|safe }}
@@ -65,6 +66,7 @@ + {% endif %} {% endfor %} {% else %}

Nenhum documento encontrado com essas especificações