Browse Source

Issue #76 em progresso

Controles de Vigências e nomenclaturas de Norma para TextoArticulado
pull/98/head
LeandroRoberto 9 years ago
parent
commit
ff78abb928
  1. 24
      compilacao/forms.py
  2. 3
      compilacao/migrations/0032_auto_20151213_1538.py
  3. 19
      compilacao/migrations/0039_auto_20151224_1846.py
  4. 1
      compilacao/models.py
  5. 11
      compilacao/urls.py
  6. 10
      compilacao/utils.py
  7. 198
      compilacao/views.py
  8. 49
      norma/migrations/0009_auto_20151224_1637.py
  9. 10
      norma/models.py
  10. 5
      norma/views.py
  11. 8
      sapl/crud.py
  12. 4
      templates/compilacao/dispositivo_search_fragment_form.html
  13. 8
      templates/compilacao/text_list.html
  14. 12
      templates/compilacao/text_list_bloco.html
  15. 2
      templates/compilacao/text_list_blocoalteracao.html
  16. 17
      templates/compilacao/textoarticulado_detail.html

24
compilacao/forms.py

@ -12,7 +12,7 @@ from django.utils.translation import ugettext_lazy as _
from compilacao import utils, models from compilacao import utils, models
from compilacao.models import Dispositivo, Nota, TipoNota, TipoVide, Vide,\ from compilacao.models import Dispositivo, Nota, TipoNota, TipoVide, Vide,\
TextoArticulado, TipoTextoArticulado TextoArticulado, TipoTextoArticulado
from compilacao.utils import to_row, to_column from compilacao.utils import to_row, to_column, to_fieldsets
from norma.models import TipoNormaJuridica from norma.models import TipoNormaJuridica
@ -31,6 +31,21 @@ ta_error_messages = {
} }
class FormLayout(Layout):
def __init__(self, *fields):
buttons = Div(
HTML('<a href="{{ view.cancel_url }}"'
' class="button radius alert">%s</a>' % _('Cancelar')),
Submit('submit', _('Enviar'),
css_class='button radius success right'),
css_class='radius clearfix'
)
_fields = list(to_fieldsets(fields)) + \
[Row(Column(buttons, css_class='clearfix'))]
super(FormLayout, self).__init__(*_fields)
class TaForm(ModelForm): class TaForm(ModelForm):
tipo_ta = forms.ModelChoiceField( tipo_ta = forms.ModelChoiceField(
label=_('Tipo do Texto Articulado'), label=_('Tipo do Texto Articulado'),
@ -84,15 +99,12 @@ class TaForm(ModelForm):
]) ])
self.helper = FormHelper() self.helper = FormHelper()
self.helper.layout = Layout( self.helper.layout = FormLayout(
Fieldset(_('Identificação Básica'), row1, css_class="large-12"), Fieldset(_('Identificação Básica'), row1, css_class="large-12"),
Fieldset(_('Ementa'), Column('ementa'), css_class="large-12"), Fieldset(_('Ementa'), Column('ementa'), css_class="large-12"),
Fieldset( Fieldset(
_('Observações'), Column('observacao'), css_class="large-12"), _('Observações'), Column('observacao'), css_class="large-12"),
ButtonHolder(
Submit('submit', _('Salvar'),
css_class='radius')
)
) )
super(TaForm, self).__init__(*args, **kwargs) super(TaForm, self).__init__(*args, **kwargs)

3
compilacao/migrations/0032_auto_20151213_1538.py

@ -13,6 +13,7 @@ class Migration(migrations.Migration):
operations = [ operations = [
migrations.AlterUniqueTogether( migrations.AlterUniqueTogether(
name='vide', name='vide',
unique_together=set([('dispositivo_base', 'dispositivo_ref', 'tipo')]), unique_together=set(
[('dispositivo_base', 'dispositivo_ref', 'tipo')]),
), ),
] ]

19
compilacao/migrations/0039_auto_20151224_1846.py

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0038_auto_20151224_1429'),
]
operations = [
migrations.AlterField(
model_name='textoarticulado',
name='tipo_ta',
field=models.ForeignKey(default=None, null=True, to='compilacao.TipoTextoArticulado', blank=True, verbose_name='Tipo de Texto Articulado'),
),
]

1
compilacao/models.py

@ -90,6 +90,7 @@ class TextoArticulado(TimestampedMixin):
ano = models.PositiveSmallIntegerField(verbose_name=_('Ano')) ano = models.PositiveSmallIntegerField(verbose_name=_('Ano'))
tipo_ta = models.ForeignKey( tipo_ta = models.ForeignKey(
TipoTextoArticulado, TipoTextoArticulado,
blank=True, null=True, default=None,
verbose_name=_('Tipo de Texto Articulado')) verbose_name=_('Tipo de Texto Articulado'))
participacao_social = models.NullBooleanField( participacao_social = models.NullBooleanField(
default=None, default=None,

11
compilacao/urls.py

@ -10,6 +10,12 @@ urlpatterns_compilacao = [
views.TaUpdateView.as_view(), name='ta_edit'), views.TaUpdateView.as_view(), name='ta_edit'),
url(r'^(?P<pk>[0-9]+)/delete$', url(r'^(?P<pk>[0-9]+)/delete$',
views.TaDeleteView.as_view(), name='ta_delete'), views.TaDeleteView.as_view(), name='ta_delete'),
url(r'^(?P<ta_id>[0-9]+)/text',
views.TextoView.as_view(), name='ta_text'),
url(r'^(?P<ta_id>[0-9]+)/text/vigencia/(?P<sign>.+)/$',
views.TextoView.as_view(), name='ta_vigencia'),
] ]
urlpatterns = [ urlpatterns = [
@ -18,13 +24,10 @@ urlpatterns = [
""" """
url(r'^(?P<ta_id>[0-9]+)/compilacao$',
views.CompilacaoView.as_view(), name='compilacao'),
url(r'^(?P<ta_id>[0-9]+)/compilacao/(?P<dispositivo_id>[0-9]+)/$', url(r'^(?P<ta_id>[0-9]+)/compilacao/(?P<dispositivo_id>[0-9]+)/$',
views.DispositivoView.as_view(), name='dispositivo'), views.DispositivoView.as_view(), name='dispositivo'),
url(r'^(?P<ta_id>[0-9]+)/compilacao/vigencia/(?P<sign>.+)/$',
views.CompilacaoView.as_view(), name='vigencia'),
url(r'^(?P<ta_id>[0-9]+)/compilacao/edit', url(r'^(?P<ta_id>[0-9]+)/compilacao/edit',
views.CompilacaoEditView.as_view(), name='comp_edit'), views.CompilacaoEditView.as_view(), name='comp_edit'),

10
compilacao/utils.py

@ -14,6 +14,16 @@ def to_row(names_spans):
return Row(*list(map(to_column, names_spans))) return Row(*list(map(to_column, names_spans)))
def to_fieldsets(fields):
for field in fields:
if isinstance(field, list):
legend, *row_specs = field
rows = [to_row(name_span_list) for name_span_list in row_specs]
yield Fieldset(legend, *rows)
else:
yield field
def make_choices(*choice_pairs): def make_choices(*choice_pairs):
assert len(choice_pairs) % 2 == 0 assert len(choice_pairs) % 2 == 0
ipairs = iter(choice_pairs) ipairs = iter(choice_pairs)

198
compilacao/views.py

@ -36,7 +36,7 @@ DISPOSITIVO_SELECT_RELATED = (
'dispositivo_atualizador', 'dispositivo_atualizador',
'dispositivo_atualizador__dispositivo_pai', 'dispositivo_atualizador__dispositivo_pai',
'dispositivo_atualizador__dispositivo_pai__ta', 'dispositivo_atualizador__dispositivo_pai__ta',
'dispositivo_atualizador__dispositivo_pai__ta__tipo', 'dispositivo_atualizador__dispositivo_pai__ta__tipo_ta',
'dispositivo_pai', 'dispositivo_pai',
'dispositivo_pai__tipo_dispositivo') 'dispositivo_pai__tipo_dispositivo')
@ -102,3 +102,199 @@ class TaDeleteView(DeleteView):
def get_success_url(self): def get_success_url(self):
return reverse_lazy('ta_list') return reverse_lazy('ta_list')
class TextoView(ListView):
template_name = 'compilacao/text_list.html'
flag_alteradora = -1
flag_nivel_ini = 0
flag_nivel_old = -1
itens_de_vigencia = {}
inicio_vigencia = None
fim_vigencia = None
def get_context_data(self, **kwargs):
context = super(TextoView, self).get_context_data(**kwargs)
cita = Vide.objects.filter(
Q(dispositivo_base__ta_id=self.kwargs['ta_id'])).\
select_related(
'dispositivo_ref',
'dispositivo_ref__ta',
'dispositivo_ref__dispositivo_pai',
'dispositivo_ref__dispositivo_pai__ta', 'tipo')
context['cita'] = {}
for c in cita:
if str(c.dispositivo_base_id) not in context['cita']:
context['cita'][str(c.dispositivo_base_id)] = []
context['cita'][str(c.dispositivo_base_id)].append(c)
citado = Vide.objects.filter(
Q(dispositivo_ref__ta_id=self.kwargs['ta_id'])).\
select_related(
'dispositivo_base',
'dispositivo_base__ta',
'dispositivo_base__dispositivo_pai',
'dispositivo_base__dispositivo_pai__ta', 'tipo')
context['citado'] = {}
for c in citado:
if str(c.dispositivo_ref_id) not in context['citado']:
context['citado'][str(c.dispositivo_ref_id)] = []
context['citado'][str(c.dispositivo_ref_id)].append(c)
notas = Nota.objects.filter(
dispositivo__ta_id=self.kwargs['ta_id']).select_related(
'owner', 'tipo')
context['notas'] = {}
for n in notas:
if str(n.dispositivo_id) not in context['notas']:
context['notas'][str(n.dispositivo_id)] = []
context['notas'][str(n.dispositivo_id)].append(n)
return context
def get_queryset(self):
self.flag_alteradora = -1
self.flag_nivel_ini = 0
self.flag_nivel_old = -1
self.inicio_vigencia = None
self.fim_vigencia = None
if 'sign' in self.kwargs:
signer = Signer()
try:
string = signer.unsign(self.kwargs['sign']).split(',')
self.inicio_vigencia = parse_date(string[0])
self.fim_vigencia = parse_date(string[1])
except:
return{}
return Dispositivo.objects.filter(
inicio_vigencia__lte=self.fim_vigencia,
ordem__gt=0,
ta_id=self.kwargs['ta_id'],
).select_related(*DISPOSITIVO_SELECT_RELATED)
else:
r = Dispositivo.objects.filter(
ordem__gt=0,
ta_id=self.kwargs['ta_id'],
).select_related(
'tipo_dispositivo',
'ta_publicado',
'ta',
'dispositivo_atualizador',
'dispositivo_atualizador__dispositivo_pai',
'dispositivo_atualizador__dispositivo_pai__ta',
'dispositivo_atualizador__dispositivo_pai__ta__tipo_ta',
'dispositivo_pai',
'dispositivo_pai__tipo_dispositivo')
return r
def get_vigencias(self):
itens = Dispositivo.objects.filter(
ta_id=self.kwargs['ta_id'],
).order_by(
'inicio_vigencia'
).distinct(
'inicio_vigencia'
).select_related(
'ta_publicado',
'ta',
'ta_publicado__tipo_ta',
'ta__tipo_ta',)
ajuste_datas_vigencia = []
for item in itens:
ajuste_datas_vigencia.append(item)
lenLista = len(ajuste_datas_vigencia)
for i in range(lenLista):
if i + 1 < lenLista:
ajuste_datas_vigencia[
i].fim_vigencia = ajuste_datas_vigencia[
i + 1].inicio_vigencia - timedelta(days=1)
else:
ajuste_datas_vigencia[i].fim_vigencia = None
self.itens_de_vigencia = {}
idx = -1
length = len(ajuste_datas_vigencia)
for item in ajuste_datas_vigencia:
idx += 1
if idx == 0:
self.itens_de_vigencia[0] = [item, ]
continue
if idx + 1 < length:
ano = item.ta_publicado.ano
if ano in self.itens_de_vigencia:
self.itens_de_vigencia[ano].append(item)
else:
self.itens_de_vigencia[ano] = [item, ]
else:
self.itens_de_vigencia[9999] = [item, ]
if len(self.itens_de_vigencia.keys()) <= 1:
return {}
self.itens_de_vigencia = OrderedDict(
sorted(self.itens_de_vigencia.items(), key=lambda t: t[0]))
return self.itens_de_vigencia
def get_ta(self):
return TextoArticulado.objects.select_related('tipo_ta').get(
pk=self.kwargs['ta_id'])
def is_ta_alterador(self):
if self.flag_alteradora == -1:
self.flag_alteradora = Dispositivo.objects.select_related(
'dispositivos_alterados_pelo_texto_articulado_set'
).filter(ta_id=self.kwargs['ta_id']).count()
return self.flag_alteradora > 0
class DispositivoView(TextoView):
# template_name = 'compilacao/index.html'
template_name = 'compilacao/text_list_bloco.html'
def get_queryset(self):
self.flag_alteradora = -1
self.flag_nivel_ini = 0
self.flag_nivel_old = -1
try:
bloco = Dispositivo.objects.get(pk=self.kwargs['dispositivo_id'])
except Dispositivo.DoesNotExist:
return []
self.flag_nivel_old = bloco.nivel - 1
self.flag_nivel_ini = bloco.nivel
proximo_bloco = Dispositivo.objects.filter(
ordem__gt=bloco.ordem,
nivel__lte=bloco.nivel,
ta_id=self.kwargs['ta_id'])[:1]
if proximo_bloco.count() == 0:
itens = Dispositivo.objects.filter(
ordem__gte=bloco.ordem,
ta_id=self.kwargs['ta_id']
).select_related(*DISPOSITIVO_SELECT_RELATED)
else:
itens = Dispositivo.objects.filter(
ordem__gte=bloco.ordem,
ordem__lt=proximo_bloco[0].ordem,
ta_id=self.kwargs['ta_id']
).select_related(*DISPOSITIVO_SELECT_RELATED)
return itens

49
norma/migrations/0009_auto_20151224_1637.py

@ -0,0 +1,49 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0038_auto_20151224_1429'),
('norma', '0008_normajuridica_texto_integral'),
]
operations = [
migrations.AlterModelOptions(
name='normajuridica',
options={'verbose_name': 'Norma Jurídica', 'verbose_name_plural': 'Normas Jurídicas'},
),
migrations.RemoveField(
model_name='normajuridica',
name='ano',
),
migrations.RemoveField(
model_name='normajuridica',
name='data',
),
migrations.RemoveField(
model_name='normajuridica',
name='ementa',
),
migrations.RemoveField(
model_name='normajuridica',
name='id',
),
migrations.RemoveField(
model_name='normajuridica',
name='numero',
),
migrations.RemoveField(
model_name='normajuridica',
name='observacao',
),
migrations.AddField(
model_name='normajuridica',
name='textoarticulado_ptr',
field=models.OneToOneField(to='compilacao.TextoArticulado', primary_key=True, parent_link=True, auto_created=True, default=1, serialize=False),
preserve_default=False,
),
]

10
norma/models.py

@ -2,6 +2,7 @@ from django.db import models
from django.template import defaultfilters from django.template import defaultfilters
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from compilacao.models import TextoArticulado
from materia.models import MateriaLegislativa from materia.models import MateriaLegislativa
from sapl.utils import YES_NO_CHOICES, make_choices from sapl.utils import YES_NO_CHOICES, make_choices
@ -61,7 +62,7 @@ def texto_upload_path(instance, filename):
return get_norma_media_path(instance, instance.ano, filename) return get_norma_media_path(instance, instance.ano, filename)
class NormaJuridica(models.Model): class NormaJuridica(TextoArticulado):
ESFERA_FEDERACAO_CHOICES, ESTADUAL, FEDERAL, MUNICIPAL = make_choices( ESFERA_FEDERACAO_CHOICES, ESTADUAL, FEDERAL, MUNICIPAL = make_choices(
'E', _('Estadual'), 'E', _('Estadual'),
'F', _('Federal'), 'F', _('Federal'),
@ -74,13 +75,10 @@ class NormaJuridica(models.Model):
verbose_name=_('Texto Integral')) verbose_name=_('Texto Integral'))
tipo = models.ForeignKey(TipoNormaJuridica, verbose_name=_('Tipo')) tipo = models.ForeignKey(TipoNormaJuridica, verbose_name=_('Tipo'))
materia = models.ForeignKey(MateriaLegislativa, blank=True, null=True) materia = models.ForeignKey(MateriaLegislativa, blank=True, null=True)
numero = models.PositiveIntegerField(verbose_name=_('Número'))
ano = models.PositiveSmallIntegerField(verbose_name=_('Ano'))
esfera_federacao = models.CharField( esfera_federacao = models.CharField(
max_length=1, max_length=1,
verbose_name=_('Esfera Federação'), verbose_name=_('Esfera Federação'),
choices=ESFERA_FEDERACAO_CHOICES) choices=ESFERA_FEDERACAO_CHOICES)
data = models.DateField(blank=True, null=True, verbose_name=_('Data'))
data_publicacao = models.DateField( data_publicacao = models.DateField(
blank=True, null=True, verbose_name=_('Data Publicação')) blank=True, null=True, verbose_name=_('Data Publicação'))
veiculo_publicacao = models.CharField( veiculo_publicacao = models.CharField(
@ -92,11 +90,8 @@ class NormaJuridica(models.Model):
blank=True, null=True, verbose_name=_('Pg. Início')) blank=True, null=True, verbose_name=_('Pg. Início'))
pagina_fim_publicacao = models.PositiveIntegerField( pagina_fim_publicacao = models.PositiveIntegerField(
blank=True, null=True, verbose_name=_('Pg. Fim')) blank=True, null=True, verbose_name=_('Pg. Fim'))
ementa = models.TextField(verbose_name=_('Ementa'))
indexacao = models.TextField( indexacao = models.TextField(
blank=True, null=True, verbose_name=_('Indexação')) blank=True, null=True, verbose_name=_('Indexação'))
observacao = models.TextField(
blank=True, null=True, verbose_name=_('Observação'))
complemento = models.NullBooleanField( complemento = models.NullBooleanField(
blank=True, verbose_name=_('Complementar ?'), blank=True, verbose_name=_('Complementar ?'),
choices=YES_NO_CHOICES) choices=YES_NO_CHOICES)
@ -110,7 +105,6 @@ class NormaJuridica(models.Model):
class Meta: class Meta:
verbose_name = _('Norma Jurídica') verbose_name = _('Norma Jurídica')
verbose_name_plural = _('Normas Jurídicas') verbose_name_plural = _('Normas Jurídicas')
ordering = ['-data', '-numero']
def __str__(self): def __str__(self):
return _('%(tipo)s%(numero)s de %(data)s') % { return _('%(tipo)s%(numero)s de %(data)s') % {

5
norma/views.py

@ -12,13 +12,14 @@ from django.utils.translation import ugettext_lazy as _
from django.views.generic.edit import FormMixin from django.views.generic.edit import FormMixin
from vanilla import GenericView from vanilla import GenericView
import sapl
from materia.models import MateriaLegislativa, TipoMateriaLegislativa from materia.models import MateriaLegislativa, TipoMateriaLegislativa
from sapl.crud import build_crud from sapl.crud import build_crud
import sapl
from .models import (AssuntoNorma, LegislacaoCitada, NormaJuridica, from .models import (AssuntoNorma, LegislacaoCitada, NormaJuridica,
TipoNormaJuridica) TipoNormaJuridica)
assunto_norma_crud = build_crud( assunto_norma_crud = build_crud(
AssuntoNorma, 'assunto_norma_juridica', [ AssuntoNorma, 'assunto_norma_juridica', [
@ -59,7 +60,7 @@ norma_temporario_crud = build_crud(
NormaJuridica, 'normajuridica', [ NormaJuridica, 'normajuridica', [
[_('Identificação Básica'), [_('Identificação Básica'),
[('tipo', 5), ('numero', 2), ('ano', 2), ('data', 3)], [('tipo_ta', 3), ('tipo', 3), ('numero', 2), ('ano', 2), ('data', 2)],
[('ementa', 12)]], [('ementa', 12)]],
]) ])

8
sapl/crud.py

@ -169,6 +169,14 @@ def build_crud(model, help_path, layout):
_('O registro não foi criado.')) _('O registro não foi criado.'))
cancel_url = BaseMixin.list_url cancel_url = BaseMixin.list_url
def form_invalid(self, form):
"""
If the form is invalid, re-render the context data with the
data-filled form and errors.
"""
print(form.errors)
return self.render_to_response(self.get_context_data(form=form))
def get_success_url(self): def get_success_url(self):
return self.detail_url return self.detail_url

4
templates/compilacao/dispositivo_search_fragment_form.html

@ -22,7 +22,7 @@
</div> </div>
<div class="itemlabel"> <div class="itemlabel">
<label for="r{{dpt.dispositivo_pai.pk}}">{{dpt.dispositivo_pai.rotulo|safe}} - {{dpt.texto|safe}}</label> <label for="r{{dpt.dispositivo_pai.pk}}">{{dpt.dispositivo_pai.rotulo|safe}} - {{dpt.texto|safe}}</label>
<a target="_blank" href="{% url 'compilacao' dpt.ta.pk%}#{{dpt.pk}}" class="nomenclatura_heranca">{% nomenclatura_heranca dpt 1 1 %}</a> <a target="_blank" href="{% url 'ta_text' dpt.ta.pk%}#{{dpt.pk}}" class="nomenclatura_heranca">{% nomenclatura_heranca dpt 1 1 %}</a>
</div> </div>
</li> </li>
{% endif%} {% endif%}
@ -34,7 +34,7 @@
</div> </div>
<div class="itemlabel"> <div class="itemlabel">
<label for="r{{dpt.pk}}">{{dpt.rotulo|safe}} - {{dpt.texto|safe}}</label> <label for="r{{dpt.pk}}">{{dpt.rotulo|safe}} - {{dpt.texto|safe}}</label>
<a target="_blank" href="{% url 'compilacao' dpt.ta.pk%}#{{dpt.pk}}" class="nomenclatura_heranca">{% nomenclatura_heranca dpt 1 1 %}</a> <a target="_blank" href="{% url 'ta_text' dpt.ta.pk%}#{{dpt.pk}}" class="nomenclatura_heranca">{% nomenclatura_heranca dpt 1 1 %}</a>
</div> </div>
</li> </li>
{% endif%} {% endif%}

8
templates/compilacao/index.html → templates/compilacao/text_list.html

@ -41,11 +41,11 @@
<li class="nav__item has-dropdown"> <li class="nav__item has-dropdown">
{% if forloop.first %} {% if forloop.first %}
{% for dispositivo in values %} {% for dispositivo in values %}
<a class="nav__link {% if view.inicio_vigencia == dispositivo.inicio_vigencia %}selected{%endif%}" href="{%url 'vigencia' dispositivo.ta.pk dispositivo|get_sign_vigencia %}" title="{% trans 'Vigência entre'%} {{dispositivo.inicio_vigencia}} {% trans 'e'%} {{dispositivo.fim_vigencia}}">{% trans 'Texto Original'%}</a> <a class="nav__link {% if view.inicio_vigencia == dispositivo.inicio_vigencia %}selected{%endif%}" href="{%url 'ta_vigencia' dispositivo.ta.pk dispositivo|get_sign_vigencia %}" title="{% trans 'Vigência entre'%} {{dispositivo.inicio_vigencia}} {% trans 'e'%} {{dispositivo.fim_vigencia}}">{% trans 'Texto Original'%}</a>
{% endfor %} {% endfor %}
{% elif forloop.last %} {% elif forloop.last %}
{% for dispositivo in values %} {% for dispositivo in values %}
<a class="nav__link {% if view.inicio_vigencia == None %}selected{%endif%}" href="{%url 'compilacao' dispositivo.ta.pk %}" title="{% trans 'Compilação atual'%}.&#013;{% trans 'Vigência a partir de'%} {{dispositivo.inicio_vigencia}}&#013;{{dispositivo.ta_publicado}}">{% trans 'Texto Atual'%}</a> <a class="nav__link {% if view.inicio_vigencia == None %}selected{%endif%}" href="{%url 'ta_text' dispositivo.ta.pk %}" title="{% trans 'Compilação atual'%}.&#013;{% trans 'Vigência a partir de'%} {{dispositivo.inicio_vigencia}}&#013;{{dispositivo.ta_publicado}}">{% trans 'Texto Atual'%}</a>
{% endfor %} {% endfor %}
{% else %} {% else %}
<a class="nav__link {% if view.inicio_vigencia.year == key %}selected{%endif%}">{{ key }}</a> <a class="nav__link {% if view.inicio_vigencia.year == key %}selected{%endif%}">{{ key }}</a>
@ -56,7 +56,7 @@
{% for dispositivo in values %} {% for dispositivo in values %}
<li class="nav__sub-item"> <li class="nav__sub-item">
{% if not forloop.parentloop.first %} {% if not forloop.parentloop.first %}
<a class="nav__sub-link" href="{%url 'vigencia' dispositivo.ta.pk dispositivo|get_sign_vigencia %}" title="{{ dispositivo.ta_publicado }}">{% trans 'Vigência entre'%} {{dispositivo.inicio_vigencia}} {% trans 'e'%} {{dispositivo.fim_vigencia}}</a> <a class="nav__sub-link" href="{%url 'ta_vigencia' dispositivo.ta.pk dispositivo|get_sign_vigencia %}" title="{{ dispositivo.ta_publicado }}">{% trans 'Vigência entre'%} {{dispositivo.inicio_vigencia}} {% trans 'e'%} {{dispositivo.fim_vigencia}}</a>
{%endif%} {%endif%}
</li> </li>
{% endfor %} {% endfor %}
@ -95,6 +95,6 @@
{% trans 'Vigência entre'%} <b>{{view.inicio_vigencia}}</b> {% trans 'e'%} <b>{{view.fim_vigencia}}</b>. {% trans 'Vigência entre'%} <b>{{view.inicio_vigencia}}</b> {% trans 'e'%} <b>{{view.fim_vigencia}}</b>.
{%endif%} {%endif%}
{% include 'compilacao/index_bloco.html'%} {% include 'compilacao/text_list_bloco.html'%}
</div> </div>
{% endblock base_content %} {% endblock base_content %}

12
templates/compilacao/index_bloco.html → templates/compilacao/text_list_bloco.html

@ -21,7 +21,7 @@
<div class="dptt {% dispositivo_desativado dpt view.inicio_vigencia view.fim_vigencia %}" id="dptt{{dpt.pk}}" > <div class="dptt {% dispositivo_desativado dpt view.inicio_vigencia view.fim_vigencia %}" id="dptt{{dpt.pk}}" >
{{ dpt.tipo_dispositivo.rotulo_prefixo_html|safe }}<a name="{{dpt.pk}}" title="{{dpt.pk}}">{{ dpt.rotulo }}</a>{{ dpt.tipo_dispositivo.rotulo_sufixo_html|safe }}<span class="dtxt" id="d{% if not dpt.dispositivo_subsequente and dpt.dispositivo_substituido %}a{%endif%}{{dpt.pk}}" pks="{{dpt.dispositivo_substituido.pk}}" pk="{{dpt.pk}}">{{ dpt.tipo_dispositivo.texto_prefixo_html|safe }}{%if dpt.texto%}{{ dpt.texto|safe }}{%else%}&nbsp;{%endif%}</span> {{ dpt.tipo_dispositivo.rotulo_prefixo_html|safe }}<a name="{{dpt.pk}}" title="{{dpt.pk}}">{{ dpt.rotulo }}</a>{{ dpt.tipo_dispositivo.rotulo_sufixo_html|safe }}<span class="dtxt" id="d{% if not dpt.dispositivo_subsequente and dpt.dispositivo_substituido %}a{%endif%}{{dpt.pk}}" pks="{{dpt.dispositivo_substituido.pk}}" pk="{{dpt.pk}}">{{ dpt.tipo_dispositivo.texto_prefixo_html|safe }}{%if dpt.texto%}{{ dpt.texto|safe }}{%else%}&nbsp;{%endif%}</span>
{% if dpt.ta_publicado_id != None and not dpt.tipo_dispositivo.dispositivo_de_articulacao %} {% if dpt.ta_publicado_id != None and not dpt.tipo_dispositivo.dispositivo_de_articulacao %}
<a class="link_alterador" href="{%url 'compilacao' dpt.ta_publicado.pk %}#{{dpt.dispositivo_atualizador_id}}"> <a class="link_alterador" href="{%url 'ta_text' dpt.ta_publicado.pk %}#{{dpt.dispositivo_atualizador_id}}">
{{ dpt.tipo_dispositivo.nota_automatica_prefixo_html|safe }} {{ dpt.tipo_dispositivo.nota_automatica_prefixo_html|safe }}
{% nota_automatica dpt %} {% nota_automatica dpt %}
{{ dpt.tipo_dispositivo.nota_automatica_sufixo_html|safe }} {{ dpt.tipo_dispositivo.nota_automatica_sufixo_html|safe }}
@ -69,9 +69,9 @@
<div class="ntitulo">Vide: </div> <div class="ntitulo">Vide: </div>
<div class="ntexto"> <div class="ntexto">
{% if dpt.is_relative_auto_insert %} {% if dpt.is_relative_auto_insert %}
<a href="{%url 'compilacao' vide.dispositivo_ref.dispositivo_pai.ta.pk%}#{{vide.dispositivo_ref.dispositivo_pai.pk }}">{{ vide.dispositivo_ref.dispositivo_pai}}</a> <a href="{%url 'ta_text' vide.dispositivo_ref.dispositivo_pai.ta.pk%}#{{vide.dispositivo_ref.dispositivo_pai.pk }}">{{ vide.dispositivo_ref.dispositivo_pai}}</a>
{% else %} {% else %}
<a href="{%url 'compilacao' vide.dispositivo_ref.ta.pk%}#{{vide.dispositivo_ref.pk }}">{{ vide.dispositivo_ref}}</a> <a href="{%url 'ta_text' vide.dispositivo_ref.ta.pk%}#{{vide.dispositivo_ref.pk }}">{{ vide.dispositivo_ref}}</a>
{% endif %} {% endif %}
{% if vide.texto %} - {{vide.texto}}{% endif %} {% if vide.texto %} - {{vide.texto}}{% endif %}
</div> </div>
@ -91,9 +91,9 @@
<div class="ntitulo">Citado em: </div> <div class="ntitulo">Citado em: </div>
<div class="ntexto"> <div class="ntexto">
{% if dpt.is_relative_auto_insert %} {% if dpt.is_relative_auto_insert %}
<a href="{%url 'compilacao' vide.dispositivo_base.dispositivo_pai.ta.pk%}#{{vide.dispositivo_base.dispositivo_pai.pk }}">{{ vide.dispositivo_base.dispositivo_pai}}</a> <a href="{%url 'ta_text' vide.dispositivo_base.dispositivo_pai.ta.pk%}#{{vide.dispositivo_base.dispositivo_pai.pk }}">{{ vide.dispositivo_base.dispositivo_pai}}</a>
{% else %} {% else %}
<a href="{%url 'compilacao' vide.dispositivo_base.ta.pk%}#{{vide.dispositivo_base.pk }}">{{ vide.dispositivo_base}}</a> <a href="{%url 'ta_text' vide.dispositivo_base.ta.pk%}#{{vide.dispositivo_base.pk }}">{{ vide.dispositivo_base}}</a>
{% endif %} {% endif %}
{% if vide.texto %} - {{vide.texto}}{% endif %} {% if vide.texto %} - {{vide.texto}}{% endif %}
</div> </div>
@ -163,7 +163,7 @@
</div> </div>
{% endspaceless %} {% endspaceless %}
{% if view.is_ta_alterador and dpt.tipo_dispositivo.class_css == 'bloco_alteracao'%} {% if view.is_ta_alterador and dpt.tipo_dispositivo.class_css == 'bloco_alteracao'%}
{%with node=dpt template_name='compilacao/index_bloco_alteracao.html' %} {%with node=dpt template_name='compilacao/texto_list_blocoalteracao.html' %}
{%include template_name%} {%include template_name%}
{%endwith%} {%endwith%}
{% endif%} {% endif%}

2
templates/compilacao/index_bloco_alteracao.html → templates/compilacao/text_list_blocoalteracao.html

@ -4,7 +4,7 @@
{% if ch.visibilidade %} {% if ch.visibilidade %}
<div class="dpt" id="d{{ch.id}}"> <div class="dpt" id="d{{ch.id}}">
<div class="{{ ch.tipo_dispositivo.class_css }}" id="id{{ch.id}}" nivel="{{ch.nivel}}"> <div class="{{ ch.tipo_dispositivo.class_css }}" id="id{{ch.id}}" nivel="{{ch.nivel}}">
{{ ch.tipo_dispositivo.rotulo_prefixo_html|safe }}<a name="{{ch.pk}}" href="{%url 'compilacao' ch.ta.pk %}#{{ch.pk}}">{{ ch.rotulo }}</a>{{ ch.tipo_dispositivo.rotulo_sufixo_html|safe }}{{ ch.tipo_dispositivo.texto_prefixo_html|safe }}{{ ch.texto|safe }} {{ ch.tipo_dispositivo.rotulo_prefixo_html|safe }}<a name="{{ch.pk}}" href="{%url 'ta_text' ch.ta.pk %}#{{ch.pk}}">{{ ch.rotulo }}</a>{{ ch.tipo_dispositivo.rotulo_sufixo_html|safe }}{{ ch.tipo_dispositivo.texto_prefixo_html|safe }}{{ ch.texto|safe }}
</div> </div>
</div> </div>
{%endif%} {%endif%}

17
templates/compilacao/textoarticulado_detail.html

@ -5,9 +5,24 @@
<dd><a href="{% url 'ta_edit' object.pk %}" class="button">{% trans 'Editar' %}</a></dd> <dd><a href="{% url 'ta_edit' object.pk %}" class="button">{% trans 'Editar' %}</a></dd>
<dd><a href="{% url 'ta_delete' object.pk %}" class="button alert">{% trans 'Excluir' %}</a></dd> <dd><a href="{% url 'ta_delete' object.pk %}" class="button alert">{% trans 'Excluir' %}</a></dd>
</dl> </dl>
{% endblock actions %} {% block sections_nav %}{% endblock %} {% endblock actions %}
{% block sections_nav %}
<dl class="sub-nav left">
<dd><a href="{% url 'ta_detail' object.pk %}" class="button secondary">{% trans 'Início' %}</a></dd>
<dd><a href="{% url 'ta_text' object.pk %}" class="button secondary">{% trans 'Texto' %}</a></dd>
</dl>
{% endblock %}
</div> </div>
{% block detail_content %} {# TODO replace fieldset for something semantically correct, but with similar visual grouping style #} {% block detail_content %} {# TODO replace fieldset for something semantically correct, but with similar visual grouping style #}
<fieldset> <fieldset>

Loading…
Cancel
Save