Browse Source

Merge pull request #383 from interlegis/compilacao

Adição de Lista de Pendências e ajustes na integração
pull/384/head
Leandro Roberto da Silva 9 years ago
parent
commit
b2053934c9
  1. 17
      compilacao/forms.py
  2. 3
      compilacao/urls.py
  3. 166
      compilacao/views.py
  4. 3
      materia/urls.py
  5. 20
      norma/urls.py
  6. 1
      norma/views.py
  7. 2
      protocoloadm/views.py
  8. 1
      static/js/compilacao_edit.js
  9. 1
      static/js/compilacao_notas.js
  10. 24
      static/styles/compilacao.scss
  11. 8
      templates/compilacao/text_list_bloco.html
  12. 52
      templates/compilacao/text_pendencias.html
  13. 9
      templates/norma/subnav.yaml

17
compilacao/forms.py

@ -7,6 +7,7 @@ from crispy_forms.layout import (HTML, Button, Column, Div, Field, Fieldset,
Layout, Row) Layout, Row)
from django import forms from django import forms
from django.core.exceptions import NON_FIELD_ERRORS, ValidationError from django.core.exceptions import NON_FIELD_ERRORS, ValidationError
from django.db.models import Q
from django.forms.forms import Form from django.forms.forms import Form
from django.forms.models import ModelForm from django.forms.models import ModelForm
from django.template import defaultfilters from django.template import defaultfilters
@ -559,7 +560,7 @@ class DispositivoEdicaoBasicaForm(ModelForm):
self.helper = FormHelper() self.helper = FormHelper()
self.helper.layout = SaplFormLayout( self.helper.layout = SaplFormLayout(
*layout, *layout,
label_cancel=_('Retornar para o Editor Sequencial')) label_cancel=_('Ir para o Editor Sequencial'))
super(DispositivoEdicaoBasicaForm, self).__init__(*args, **kwargs) super(DispositivoEdicaoBasicaForm, self).__init__(*args, **kwargs)
@ -727,17 +728,19 @@ class DispositivoEdicaoVigenciaForm(ModelForm):
self.helper = FormHelper() self.helper = FormHelper()
self.helper.layout = SaplFormLayout( self.helper.layout = SaplFormLayout(
*layout, *layout,
label_cancel=_('Retornar para o Editor Sequencial')) label_cancel=_('Ir para o Editor Sequencial'))
super(DispositivoEdicaoVigenciaForm, self).__init__(*args, **kwargs) super(DispositivoEdicaoVigenciaForm, self).__init__(*args, **kwargs)
pubs = Publicacao.objects.order_by( pubs = Publicacao.objects.order_by(
'-data', '-hora').filter(ta=self.instance.ta) '-data', '-hora').filter(Q(ta=self.instance.ta) |
Q(ta=self.instance.ta_publicado))
self.fields['publicacao'].choices = [("", "---------")] + [( self.fields['publicacao'].choices = [("", "---------")] + [(
p.pk, _('%s realizada em %s') % ( p.pk, _('%s realizada em %s. %s') % (
p.tipo_publicacao, p.tipo_publicacao,
defaultfilters.date( defaultfilters.date(
p.data, "d \d\e F \d\e Y"))) for p in pubs] p.data, "d \d\e F \d\e Y"),
str(p.ta))) for p in pubs]
dvs = Dispositivo.objects.order_by('ordem').filter( dvs = Dispositivo.objects.order_by('ordem').filter(
pk=self.instance.dispositivo_vigencia_id) pk=self.instance.dispositivo_vigencia_id)
@ -816,7 +819,7 @@ class DispositivoDefinidorVigenciaForm(Form):
self.helper = FormHelper() self.helper = FormHelper()
self.helper.layout = SaplFormLayout( self.helper.layout = SaplFormLayout(
*layout, *layout,
label_cancel=_('Retornar para o Editor Sequencial')) label_cancel=_('Ir para o Editor Sequencial'))
pk = kwargs.pop('pk') pk = kwargs.pop('pk')
super(DispositivoDefinidorVigenciaForm, self).__init__(*args, **kwargs) super(DispositivoDefinidorVigenciaForm, self).__init__(*args, **kwargs)
@ -955,7 +958,7 @@ class DispositivoEdicaoAlteracaoForm(ModelForm):
self.helper = FormHelper() self.helper = FormHelper()
self.helper.layout = SaplFormLayout( self.helper.layout = SaplFormLayout(
*layout, *layout,
label_cancel=_('Retornar para o Editor Sequencial')) label_cancel=_('Ir para o Editor Sequencial'))
super(DispositivoEdicaoAlteracaoForm, self).__init__(*args, **kwargs) super(DispositivoEdicaoAlteracaoForm, self).__init__(*args, **kwargs)

3
compilacao/urls.py

@ -27,6 +27,9 @@ urlpatterns_compilacao = [
url(r'^(?P<ta_id>[0-9]+)/text/edit', url(r'^(?P<ta_id>[0-9]+)/text/edit',
views.TextEditView.as_view(), name='ta_text_edit'), views.TextEditView.as_view(), name='ta_text_edit'),
url(r'^(?P<ta_id>[0-9]+)/text/pendencias',
views.TextPendenciasView.as_view(), name='ta_text_pendencias'),
url(r'^(?P<ta_id>[0-9]+)/text/(?P<dispositivo_id>[0-9]+)/$', url(r'^(?P<ta_id>[0-9]+)/text/(?P<dispositivo_id>[0-9]+)/$',
views.DispositivoView.as_view(), name='dispositivo'), views.DispositivoView.as_view(), name='dispositivo'),

166
compilacao/views.py

@ -6,6 +6,7 @@ from braces.views import FormMessagesMixin
from django import forms from django import forms
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.contrib.messages import constants
from django.core.signing import Signer from django.core.signing import Signer
from django.core.urlresolvers import reverse_lazy from django.core.urlresolvers import reverse_lazy
from django.db import transaction from django.db import transaction
@ -2291,3 +2292,168 @@ class DispositivoEdicaoAlteracaoView(FormMessagesMixin, UpdateView):
return self.form_invalid(form) return self.form_invalid(form)
else: else:
return self.form_invalid(form) return self.form_invalid(form)
class TextPendenciasView(ListView, CompMixin):
template_name = 'compilacao/text_pendencias.html'
def get_queryset(self):
result = Dispositivo.objects.filter(
ta_id=self.kwargs['ta_id']
).select_related(*DISPOSITIVO_SELECT_RELATED)
p = []
def padd(r, type_pendencia, reverse_url=None, test=True, msg='',
kwargs=None, to_position=None):
if not test:
return
r.contextual_class = type_pendencia
if not kwargs:
kwargs = {'ta_id': r.ta_id, 'pk': r.pk}
if reverse_url:
p.append((type_pendencia, msg,
reverse_lazy(reverse_url, kwargs=kwargs),
to_position))
else:
p.append((type_pendencia, msg, None, to_position))
def success(r):
type_pendencia = 'success'
padd(r, type_pendencia, 'compilacao:dispositivo_edit_vigencia',
r.inconstitucionalidade,
_('Declarado Inconstitucional.'))
padd(r, type_pendencia, 'compilacao:ta_text_edit',
r.ta_publicado and r.dispositivo_atualizador,
_('Dispositivo alterado em %s' % r.ta_publicado),
{'ta_id': r.ta_publicado_id}, r.dispositivo_atualizador_id)
def info(r):
type_pendencia = 'info'
padd(r, type_pendencia, 'compilacao:dispositivo_edit_vigencia',
r.publicacao and
r.dispositivo_vigencia and
r.publicacao.data != r.dispositivo_vigencia.inicio_vigencia,
_('Data da publicação associada ao Dispositivo difere da data'
' de inicio de vigência do Dispositivo de vigência.'))
padd(r, type_pendencia, 'compilacao:dispositivo_edit_vigencia',
r.publicacao and r.publicacao.data != r.inicio_vigencia,
_('Data da publicação associada ao Dispositivo difere '
'da data de inicio de vigência.'))
padd(r, type_pendencia, 'compilacao:dispositivo_edit',
r.rotulo != r.rotulo_padrao(local_insert=1),
_('Rótulo Diferente do Padrão'))
padd(r, type_pendencia, 'compilacao:dispositivo_edit',
r.texto_atualizador and r.texto_atualizador != r.texto,
_('Texto do Dispositivo para o Documento '
'está diferente do texto para o Documento Alterador.'))
padd(r, type_pendencia, 'compilacao:dispositivo_edit_alteracao',
r.texto_atualizador and r.texto_atualizador == r.texto,
_('Texto do Dispositivo no Documento Alterador '
'está igual ao Texto no Documento Original. '
'Não é necessário manter armazenado o texto no Documento '
'Alterador.'))
def warning(r):
type_pendencia = 'warning'
padd(r, type_pendencia, 'compilacao:dispositivo_edit_vigencia',
r.dispositivo_vigencia and r.inicio_vigencia !=
r.dispositivo_vigencia.inicio_vigencia,
_('Data de início de Vigência difere da data início de '
'Vigência do Dispositivo de Vigência'))
padd(r, type_pendencia, 'compilacao:ta_text',
r.inconstitucionalidade and not r.notas.exists(),
_('Dispositivo está definido como inconstitucional. É '
'aconcelhavel inserir uma Nota informando esta condição.'),
kwargs={'ta_id': r.ta_id},
to_position=r.pk)
padd(r, type_pendencia, 'compilacao:dispositivo_edit_vigencia',
r.inconstitucionalidade and not (
r.inicio_vigencia == r.fim_vigencia and
r.fim_vigencia == r.inicio_eficacia and
r.inicio_eficacia == r.fim_eficacia),
_('Dispositivo está definido como inconstitucional porém '
'existe diferença entre as datas início e fim de '
'vigência e eficácia.'))
padd(r, type_pendencia, 'compilacao:dispositivo_edit_vigencia',
r.publicacao and
r.ta_publicado and r.ta_publicado != r.publicacao.ta,
_('A Publicação associada a este Dispositivo não é '
'uma publicação do Texto Articulado Alterador.'))
padd(r, type_pendencia, 'compilacao:dispositivo_edit_vigencia',
not r.publicacao,
_('Dispositivo sem registro de publicação.'))
padd(r, type_pendencia, 'compilacao:dispositivo_edit_vigencia',
r.texto and r.tipo_dispositivo.dispositivo_de_articulacao,
_('Dispositivos de Articulação não '
'deveriam armazenar texto.'))
padd(r, type_pendencia, 'compilacao:dispositivo_edit_vigencia',
not r.texto and r.tipo_dispositivo.dispositivo_de_articulacao,
_('Dispositivo está sem texto.'))
padd(r, type_pendencia, 'compilacao:dispositivo_edit_alteracao',
r.texto_atualizador and not r.ta_publicado,
_('Existe Texto Atualizador, porém este Dispositivo não '
'está associado a nenhum Documento Atualizador.'))
def danger(r):
type_pendencia = 'danger'
padd(r, type_pendencia, 'compilacao:dispositivo_edit_vigencia',
not r.dispositivo_vigencia,
_('Dispositivo sem definição de Dispositivo de Vigência.'))
padd(r, type_pendencia, 'compilacao:dispositivo_edit_vigencia',
r.inconstitucionalidade and
r.inicio_vigencia != r.fim_vigencia,
_('Dispositivo está definido como inconstitucional porém '
'existe período de vigência.'))
padd(r, type_pendencia, 'compilacao:dispositivo_edit_alteracao',
r.ta_publicado and not r.dispositivo_atualizador,
_('Dispositivo está associado a um Texto Articulado '
'Atualizador mas, a nenhum Dispositivo Atualizador.'))
padd(r, type_pendencia, 'compilacao:dispositivo_edit_alteracao',
not r.dispositivo_atualizador and
r.dispositivo_substituido,
_('Dispositivo está substituindo outro mas não foi informado '
'o Dispositivo Atualizador.'))
padd(r, type_pendencia, 'compilacao:dispositivo_edit_alteracao',
r.dispositivo_substituido.tipo_dispositivo !=
r.tipo_dispositivo,
_('Dispositivo está substituindo um Dispositivo '
'de outro tipo.'))
padd(r, type_pendencia, 'compilacao:dispositivo_edit_alteracao',
r.dispositivo_substituido.ta != r.ta,
_('Dispositivo está substituindo um Dispositivo de outro '
'Texto Articulado.'))
for r in result:
p = []
r.contextual_class = ""
# sucess
success(r)
info(r)
warning(r)
danger(r)
r.pendencias = p
return result

3
materia/urls.py

@ -29,13 +29,12 @@ urlpatterns = [
DespachoInicialCrud.get_urls() + DespachoInicialCrud.get_urls() +
NumeracaoCrud.get_urls())), NumeracaoCrud.get_urls())),
# Integração com Compilação
url(r'^materia/(?P<pk>[0-9]+)/ta$', url(r'^materia/(?P<pk>[0-9]+)/ta$',
MateriaTaView.as_view(), name='materia_ta'), MateriaTaView.as_view(), name='materia_ta'),
url(r'^materia/proposicao/(?P<pk>[0-9]+)/ta$', url(r'^materia/proposicao/(?P<pk>[0-9]+)/ta$',
ProposicaoTaView.as_view(), name='proposicao_ta'), ProposicaoTaView.as_view(), name='proposicao_ta'),
url(r'^sistema/proposicao/tipo/', url(r'^sistema/proposicao/tipo/',
include(TipoProposicaoCrud.get_urls())), include(TipoProposicaoCrud.get_urls())),
url(r'^sistema/proposicao/autor/', include(AutorCrud.get_urls())), url(r'^sistema/proposicao/autor/', include(AutorCrud.get_urls())),

20
norma/urls.py

@ -1,31 +1,19 @@
from django.conf.urls import include, url from django.conf.urls import include, url
from norma.views import (AssuntoNormaCrud, NormaCrud, NormaPesquisaView, from norma.views import (AssuntoNormaCrud, NormaCrud, NormaPesquisaView,
NormaTaView, NormaTemporarioCrud, NormaTaView, PesquisaNormaListView, TipoNormaCrud)
PesquisaNormaListView, TipoNormaCrud)
from .apps import AppConfig from .apps import AppConfig
app_name = AppConfig.name app_name = AppConfig.name
# @LeandroRoberto comentou em
# https://github.com/interlegis/sapl/pull/255#discussion_r55894269
#
# esse código só está assim de forma temporária, criado no início do
# projeto para apenas dar uma tela básica de listagem de normas para a app
# compilação... a implementação da app norma é independente e não sei em
# que estágio está... para a compilação é relevante apenas que se mantenha
# o código abaixo:
# url(r'^norma/(?P<pk>[0-9]+)/ta$', NormaTaView.as_view(), name='ta')
# bem como a classe NormaTaView que está em norma.views
norma_url_patterns = NormaTemporarioCrud.get_urls() + [
url(r'^(?P<pk>[0-9]+)/ta$',
NormaTaView.as_view(), name='ta')
]
urlpatterns = [ urlpatterns = [
url(r'^norma/', include(NormaCrud.get_urls())), url(r'^norma/', include(NormaCrud.get_urls())),
# Integração com Compilação
url(r'^norma/(?P<pk>[0-9]+)/ta$', NormaTaView.as_view(), name='norma_ta'),
url(r'^sistema/norma/tipo/', include(TipoNormaCrud.get_urls())), url(r'^sistema/norma/tipo/', include(TipoNormaCrud.get_urls())),
url(r'^sistema/norma/assunto/', include(AssuntoNormaCrud.get_urls())), url(r'^sistema/norma/assunto/', include(AssuntoNormaCrud.get_urls())),
url(r'^norma/pesquisa$', url(r'^norma/pesquisa$',

1
norma/views.py

@ -13,7 +13,6 @@ from .models import (AssuntoNorma, LegislacaoCitada, NormaJuridica,
AssuntoNormaCrud = Crud.build(AssuntoNorma, 'assunto_norma_juridica') AssuntoNormaCrud = Crud.build(AssuntoNorma, 'assunto_norma_juridica')
TipoNormaCrud = Crud.build(TipoNormaJuridica, 'tipo_norma_juridica') TipoNormaCrud = Crud.build(TipoNormaJuridica, 'tipo_norma_juridica')
NormaTemporarioCrud = Crud.build(NormaJuridica, 'norma')
LegislacaoCitadaCrud = Crud.build(LegislacaoCitada, '') LegislacaoCitadaCrud = Crud.build(LegislacaoCitada, '')

2
protocoloadm/views.py

@ -4,7 +4,7 @@ from datetime import date, datetime
from braces.views import FormValidMessageMixin from braces.views import FormValidMessageMixin
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.db.models import Q, Max from django.db.models import Max, Q
from django.http import HttpResponse, HttpResponseRedirect from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import redirect from django.shortcuts import redirect
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _

1
static/js/compilacao_edit.js

@ -1,6 +1,5 @@
var editortype = "textarea"; var editortype = "textarea";
var gets = 0;
var onSubmitEditForm = function(event) { var onSubmitEditForm = function(event) {
var texto = ''; var texto = '';

1
static/js/compilacao_notas.js

@ -137,6 +137,7 @@ function onReadyNotasVides() {
onDelete(this); onDelete(this);
}); });
} }
$(document).ready(function() { $(document).ready(function() {
onReadyNotasVides() onReadyNotasVides()
}); });

24
static/styles/compilacao.scss

@ -1063,6 +1063,28 @@ a:link:after, a:visited:after {
} }
} }
.table-pendencias {
tbody {
tr {
td {
border-top: 1px solid white;
padding: 5px;
vertical-align: middle;
ul {
margin: 0px;
/*padding: 0px;
list-style: none;*/
li {
&:hover {
background-color: rgba(0, 0, 0, 0.1)
}
}
}
}
}
}
}
.btn-modal-open { .btn-modal-open {
float: right; float: right;
} }
@ -1071,9 +1093,11 @@ a:link:after, a:visited:after {
.class_color_container { .class_color_container {
background: #ddd !important; background: #ddd !important;
} }
.clear { .clear {
clear:both; clear:both;
} }
.mce-panel { .mce-panel {
/*border: 0px solid #ccc !important;*/ /*border: 0px solid #ccc !important;*/
} }

8
templates/compilacao/text_list_bloco.html

@ -72,9 +72,9 @@
<div class="ntitulo">Vide: </div> <div class="ntitulo">Vide: </div>
<div class="ntexto"> <div class="ntexto">
{% if vide.dispositivo_ref.dispositivo_pai.nivel != 0 and vide.dispositivo_ref.dispositivo_pai.tipo_dispositivo.dispositivo_de_articulacao %} {% if vide.dispositivo_ref.dispositivo_pai.nivel != 0 and vide.dispositivo_ref.dispositivo_pai.tipo_dispositivo.dispositivo_de_articulacao %}
<a href="{%url 'compilacao:ta_text' vide.dispositivo_ref.dispositivo_pai.ta.pk%}#{{vide.dispositivo_ref.dispositivo_pai.pk }}">{{ vide.dispositivo_ref.dispositivo_pai}}</a> <a href="{%url 'compilacao:ta_text' vide.dispositivo_ref.dispositivo_pai.ta.pk%}#{{vide.dispositivo_ref.dispositivo_pai.pk }}">{{ vide.dispositivo_ref}} {% trans 'do'%} {{ vide.dispositivo_ref.dispositivo_pai}} - {{ vide.dispositivo_ref.dispositivo_pai.ta}}</a>
{% else %} {% else %}
<a href="{%url 'compilacao:ta_text' vide.dispositivo_ref.ta.pk%}#{{vide.dispositivo_ref.pk }}">{{ vide.dispositivo_ref}}</a> <a href="{%url 'compilacao:ta_text' vide.dispositivo_ref.ta.pk%}#{{vide.dispositivo_ref.pk }}">{{ vide.dispositivo_ref}} - {{vide.dispositivo_ref.ta}}</a>
{% endif %} {% endif %}
{% if vide.texto %} - {{vide.texto}}{% endif %} {% if vide.texto %} - {{vide.texto}}{% endif %}
</div> </div>
@ -100,9 +100,9 @@
<div class="ntitulo">Citado em: </div> <div class="ntitulo">Citado em: </div>
<div class="ntexto"> <div class="ntexto">
{% if vide.dispositivo_base.dispositivo_pai.nivel != 0 and vide.dispositivo_base.dispositivo_pai.tipo_dispositivo.dispositivo_de_articulacao%} {% if vide.dispositivo_base.dispositivo_pai.nivel != 0 and vide.dispositivo_base.dispositivo_pai.tipo_dispositivo.dispositivo_de_articulacao%}
<a href="{%url 'compilacao:ta_text' vide.dispositivo_base.dispositivo_pai.ta.pk%}#{{vide.dispositivo_base.dispositivo_pai.pk }}">{{ vide.dispositivo_base.dispositivo_pai}}</a> <a href="{%url 'compilacao:ta_text' vide.dispositivo_base.dispositivo_pai.ta.pk%}#{{vide.dispositivo_base.dispositivo_pai.pk }}">{{ vide.dispositivo_base}} {% trans 'do'%} {{ vide.dispositivo_base.dispositivo_pai}} - {{ vide.dispositivo_base.dispositivo_pai.ta}}</a>
{% else %} {% else %}
<a href="{%url 'compilacao:ta_text' vide.dispositivo_base.ta.pk%}#{{vide.dispositivo_base.pk }}">{{ vide.dispositivo_base}}</a> <a href="{%url 'compilacao:ta_text' vide.dispositivo_base.ta.pk%}#{{vide.dispositivo_base.pk }}">{{ vide.dispositivo_base}} - {{ vide.dispositivo_base.ta}}</a>
{% endif %} {% endif %}
{% if vide.texto %} - {{vide.texto}}{% endif %} {% if vide.texto %} - {{vide.texto}}{% endif %}
</div> </div>

52
templates/compilacao/text_pendencias.html

@ -0,0 +1,52 @@
{% extends "base.html" %}
{% load i18n compilacao_filters common_tags sass_tags%}
{% block base_content %}
{% block head_content %}{{block.super}}
<link rel="stylesheet" href="{% sass_src 'styles/compilacao.scss' %}" type="text/css">
{% endblock %}
<table class="table table-striped table-hover table-pendencias">
<thead>
<tr>
<th>{% trans "Dispositivos" %}</th>
<th>{% trans "Pendências" %}</th>
</tr>
</thead>
<tbody>
{% for dpt in object_list %}
<tr class="{{dpt.contextual_class}}">
<td class="cp" width="63%" {% if not dpt.contextual_class %}colspan=2{% endif %} >
<div class="dpt">
<div class="{{ dpt.tipo_dispositivo.class_css }}">
<div class="dptt {% dispositivo_desativado dpt None None %}" id="dptt{{dpt.pk}}" >
{{ dpt.tipo_dispositivo.rotulo_prefixo_html|safe }}
<a href="{% url 'compilacao:ta_text_edit' dpt.ta_id %}#{{dpt.pk}}">{% if dpt.rotulo or dpt.nivel = 1 %}{{ dpt.rotulo }}{%else%}[{{ dpt|nomenclatura}}{% if dpt.dispositivo_pai_id %} {% trans "de" %} {{ dpt.dispositivo_pai.rotulo }}{% endif %}] - {% endif %}</a>
{{ dpt.tipo_dispositivo.rotulo_sufixo_html|safe }}
<span class="dtxt"
id="d{% if not dpt.dispositivo_subsequente_id and dpt.dispositivo_substituido_id %}a{% endif %}{{dpt.pk}}"
pks="{{dpt.dispositivo_substituido_id|default:''}}"
pk="{{dpt.pk}}">{{ dpt.tipo_dispositivo.texto_prefixo_html|safe }}{%if dpt.texto %}{{ dpt.texto|safe }}{%else%}{%if not dpt.tipo_dispositivo.dispositivo_de_articulacao %}&nbsp;{% endif %}{% endif %}</span>
</div>
</div>
</div>
</td>
{% if dpt.contextual_class %}
<td>
<ul>
{% for p in dpt.pendencias %}
<li>
{%if p.2 %}
<a target="_blank" class="text-{{p.0}}" href="{{p.2}}{%if p.3 %}#{{p.3}}{% endif %}"><u>{{p.1}}</u></a>
{% else%}
<span class="text-{{p.0}}">{{p.1}}</span>
{% endif %}</li>
{% endfor %}
</ul>
</td>
{% endif %}
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}

9
templates/norma/subnav.yaml

@ -0,0 +1,9 @@
- title: Início
url: normajuridica_detail
# Opção adicionada para chamar o TextoArticulado da norma.
# para integração foram necessárias apenas criar a url norma_ta em urls.py
# e a view NormaTaView(IntegracaoTaView) em views.py
# Em nada mais a integração interfere em NormaJuridica
- title: Texto
url: norma_ta
Loading…
Cancel
Save