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.models import Dispositivo, Nota, TipoNota, TipoVide, Vide,\
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
@ -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):
tipo_ta = forms.ModelChoiceField(
label=_('Tipo do Texto Articulado'),
@ -84,15 +99,12 @@ class TaForm(ModelForm):
])
self.helper = FormHelper()
self.helper.layout = Layout(
self.helper.layout = FormLayout(
Fieldset(_('Identificação Básica'), row1, css_class="large-12"),
Fieldset(_('Ementa'), Column('ementa'), css_class="large-12"),
Fieldset(
_('Observações'), Column('observacao'), css_class="large-12"),
ButtonHolder(
Submit('submit', _('Salvar'),
css_class='radius')
)
)
super(TaForm, self).__init__(*args, **kwargs)

3
compilacao/migrations/0032_auto_20151213_1538.py

@ -13,6 +13,7 @@ class Migration(migrations.Migration):
operations = [
migrations.AlterUniqueTogether(
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'))
tipo_ta = models.ForeignKey(
TipoTextoArticulado,
blank=True, null=True, default=None,
verbose_name=_('Tipo de Texto Articulado'))
participacao_social = models.NullBooleanField(
default=None,

11
compilacao/urls.py

@ -10,6 +10,12 @@ urlpatterns_compilacao = [
views.TaUpdateView.as_view(), name='ta_edit'),
url(r'^(?P<pk>[0-9]+)/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 = [
@ -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]+)/$',
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',
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)))
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):
assert len(choice_pairs) % 2 == 0
ipairs = iter(choice_pairs)

198
compilacao/views.py

@ -36,7 +36,7 @@ DISPOSITIVO_SELECT_RELATED = (
'dispositivo_atualizador',
'dispositivo_atualizador__dispositivo_pai',
'dispositivo_atualizador__dispositivo_pai__ta',
'dispositivo_atualizador__dispositivo_pai__ta__tipo',
'dispositivo_atualizador__dispositivo_pai__ta__tipo_ta',
'dispositivo_pai',
'dispositivo_pai__tipo_dispositivo')
@ -102,3 +102,199 @@ class TaDeleteView(DeleteView):
def get_success_url(self):
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.utils.translation import ugettext_lazy as _
from compilacao.models import TextoArticulado
from materia.models import MateriaLegislativa
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)
class NormaJuridica(models.Model):
class NormaJuridica(TextoArticulado):
ESFERA_FEDERACAO_CHOICES, ESTADUAL, FEDERAL, MUNICIPAL = make_choices(
'E', _('Estadual'),
'F', _('Federal'),
@ -74,13 +75,10 @@ class NormaJuridica(models.Model):
verbose_name=_('Texto Integral'))
tipo = models.ForeignKey(TipoNormaJuridica, verbose_name=_('Tipo'))
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(
max_length=1,
verbose_name=_('Esfera Federação'),
choices=ESFERA_FEDERACAO_CHOICES)
data = models.DateField(blank=True, null=True, verbose_name=_('Data'))
data_publicacao = models.DateField(
blank=True, null=True, verbose_name=_('Data Publicação'))
veiculo_publicacao = models.CharField(
@ -92,11 +90,8 @@ class NormaJuridica(models.Model):
blank=True, null=True, verbose_name=_('Pg. Início'))
pagina_fim_publicacao = models.PositiveIntegerField(
blank=True, null=True, verbose_name=_('Pg. Fim'))
ementa = models.TextField(verbose_name=_('Ementa'))
indexacao = models.TextField(
blank=True, null=True, verbose_name=_('Indexação'))
observacao = models.TextField(
blank=True, null=True, verbose_name=_('Observação'))
complemento = models.NullBooleanField(
blank=True, verbose_name=_('Complementar ?'),
choices=YES_NO_CHOICES)
@ -110,7 +105,6 @@ class NormaJuridica(models.Model):
class Meta:
verbose_name = _('Norma Jurídica')
verbose_name_plural = _('Normas Jurídicas')
ordering = ['-data', '-numero']
def __str__(self):
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 vanilla import GenericView
import sapl
from materia.models import MateriaLegislativa, TipoMateriaLegislativa
from sapl.crud import build_crud
import sapl
from .models import (AssuntoNorma, LegislacaoCitada, NormaJuridica,
TipoNormaJuridica)
assunto_norma_crud = build_crud(
AssuntoNorma, 'assunto_norma_juridica', [
@ -59,7 +60,7 @@ norma_temporario_crud = build_crud(
NormaJuridica, 'normajuridica', [
[_('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)]],
])

8
sapl/crud.py

@ -169,6 +169,14 @@ def build_crud(model, help_path, layout):
_('O registro não foi criado.'))
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):
return self.detail_url

4
templates/compilacao/dispositivo_search_fragment_form.html

@ -22,7 +22,7 @@
</div>
<div class="itemlabel">
<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>
</li>
{% endif%}
@ -34,7 +34,7 @@
</div>
<div class="itemlabel">
<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>
</li>
{% endif%}

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

@ -41,11 +41,11 @@
<li class="nav__item has-dropdown">
{% if forloop.first %}
{% 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 %}
{% elif forloop.last %}
{% 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 %}
{% else %}
<a class="nav__link {% if view.inicio_vigencia.year == key %}selected{%endif%}">{{ key }}</a>
@ -56,7 +56,7 @@
{% for dispositivo in values %}
<li class="nav__sub-item">
{% 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%}
</li>
{% endfor %}
@ -95,6 +95,6 @@
{% trans 'Vigência entre'%} <b>{{view.inicio_vigencia}}</b> {% trans 'e'%} <b>{{view.fim_vigencia}}</b>.
{%endif%}
{% include 'compilacao/index_bloco.html'%}
{% include 'compilacao/text_list_bloco.html'%}
</div>
{% 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}}" >
{{ 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 %}
<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 }}
{% nota_automatica dpt %}
{{ dpt.tipo_dispositivo.nota_automatica_sufixo_html|safe }}
@ -69,9 +69,9 @@
<div class="ntitulo">Vide: </div>
<div class="ntexto">
{% 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 %}
<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 %}
{% if vide.texto %} - {{vide.texto}}{% endif %}
</div>
@ -91,9 +91,9 @@
<div class="ntitulo">Citado em: </div>
<div class="ntexto">
{% 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 %}
<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 %}
{% if vide.texto %} - {{vide.texto}}{% endif %}
</div>
@ -163,7 +163,7 @@
</div>
{% endspaceless %}
{% 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%}
{%endwith%}
{% endif%}

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

@ -4,7 +4,7 @@
{% if ch.visibilidade %}
<div class="dpt" id="d{{ch.id}}">
<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>
{%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_delete' object.pk %}" class="button alert">{% trans 'Excluir' %}</a></dd>
</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>
{% block detail_content %} {# TODO replace fieldset for something semantically correct, but with similar visual grouping style #}
<fieldset>

Loading…
Cancel
Save