Browse Source

Concl. Editores individual e reverso de vigências

pull/299/head
LeandroRoberto 9 years ago
parent
commit
d258c9bc9d
  1. 53
      compilacao/forms.py
  2. 21
      compilacao/migrations/0047_auto_20160330_0027.py
  3. 1
      compilacao/models.py
  4. 13
      compilacao/utils.py
  5. 62
      compilacao/views.py
  6. 111
      static/js/compilacao.js
  7. 10
      static/js/compilacao_edit.js
  8. 4
      static/js/compilacao_notas.js
  9. 9
      static/styles/compilacao.scss
  10. 125
      templates/compilacao/dispositivo_form_search_fragment.html
  11. 16
      templates/compilacao/layout/dispositivo_checkbox.html
  12. 2
      templates/compilacao/layout/dispositivo_radio.html
  13. 8
      templates/compilacao/text_edit.html
  14. 2
      templates/compilacao/text_edit_bloco.html

53
compilacao/forms.py

@ -18,6 +18,7 @@ from compilacao.models import (NOTAS_PUBLICIDADE_CHOICES,
Publicacao, TextoArticulado, TipoNota,
TipoPublicacao, TipoTextoArticulado, TipoVide,
VeiculoPublicacao, Vide, TipoDispositivo)
from compilacao.utils import DISPOSITIVO_SELECT_RELATED
from crispy_layout_mixin import SaplFormLayout, to_column, to_row
from sapl import utils
from sapl.utils import YES_NO_CHOICES
@ -621,7 +622,7 @@ class DispositivoSearchModalForm(Form):
label=_('Ano do Documento'), required=False)
dispositivos_internos = forms.ChoiceField(
label=_('Incluir Dispositivos Internos?'),
label=_('Incluir Dispositivos Internos Imediatos?'),
choices=utils.YES_NO_CHOICES,
widget=forms.RadioSelect(),
required=False)
@ -639,9 +640,9 @@ class DispositivoSearchModalForm(Form):
fields_search = Fieldset(
_('Busca por um Dispositivo'),
Row(
to_column(('num_ta', 4)),
to_column(('ano_ta', 4)),
to_column((InlineRadios('dispositivos_internos'), 4))),
to_column(('num_ta', 3)),
to_column(('ano_ta', 3)),
to_column((InlineRadios('dispositivos_internos'), 6))),
Row(
to_column(('tipo_ta', 6)),
to_column(('tipo_model', 6))),
@ -765,6 +766,14 @@ class DispositivoEdicaoVigenciaForm(ModelForm):
pk=self.instance.dispositivo_vigencia_id)
self.fields['dispositivo_vigencia'].choices = [(d.pk, d) for d in dvs]
def clean_dispositivo_vigencia(self):
dv = self.cleaned_data['dispositivo_vigencia']
if dv and dv.is_relative_auto_insert():
dv = dv.dispositivo_pai
return dv
def save(self):
super(DispositivoEdicaoVigenciaForm, self).save()
@ -774,6 +783,10 @@ class DispositivoEdicaoVigenciaForm(ModelForm):
if extensao:
dv = data['dispositivo_vigencia']
if dv and dv.is_relative_auto_insert():
dv = dv.dispositivo_pai
dv_pk = dv.pk if dv else None
instance = self.instance
@ -833,17 +846,7 @@ class DispositivoDefinidorVigenciaForm(Form):
dvs = Dispositivo.objects.order_by('ta', 'ordem').filter(
dispositivo_vigencia_id=pk).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',
'ta_publicado',
'ta',)
*DISPOSITIVO_SELECT_RELATED)
self.initial['dispositivo_vigencia'] = [d.pk for d in dvs]
tas = Dispositivo.objects.filter(
@ -854,18 +857,10 @@ class DispositivoDefinidorVigenciaForm(Form):
if not tas:
tas = Dispositivo.objects.filter(pk=pk).values_list('ta_id')
dvs = Dispositivo.objects.order_by('-ta__data', '-ta__ano', '-ta__numero', 'ta', 'ordem').filter(
ta__in=tas).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',
'ta_publicado',
'ta',)
dvs = Dispositivo.objects.order_by(
'-ta__data', '-ta__ano', '-ta__numero', 'ta', 'ordem').filter(
ta__in=tas).select_related(*DISPOSITIVO_SELECT_RELATED)
self.fields['dispositivo_vigencia'].choices = [
(d.pk, d) for d in dvs]
(d.pk, d)
for d in dvs
if d.pk in self.initial['dispositivo_vigencia']]

21
compilacao/migrations/0047_auto_20160330_0027.py

@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9 on 2016-03-30 03:27
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0046_auto_20160319_1542'),
]
operations = [
migrations.AlterField(
model_name='dispositivo',
name='dispositivo_vigencia',
field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='dispositivos_vigencias_set', to='compilacao.Dispositivo', verbose_name='Dispositivo de Vigência'),
),
]

1
compilacao/models.py

@ -627,6 +627,7 @@ class Dispositivo(BaseModel, TimestampedMixin):
dispositivo_vigencia = models.ForeignKey(
'self',
blank=True, null=True, default=None,
on_delete=models.SET_NULL,
related_name='dispositivos_vigencias_set',
verbose_name=_('Dispositivo de Vigência'))
dispositivo_atualizador = models.ForeignKey(

13
compilacao/utils.py

@ -1,4 +1,17 @@
DISPOSITIVO_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',
'ta_publicado',
'ta',)
def int_to_roman(int_value):
# if isinstance(int_value, type(1)):

62
compilacao/views.py

@ -33,22 +33,10 @@ from compilacao.models import (Dispositivo, Nota,
TextoArticulado, TipoDispositivo, TipoNota,
TipoPublicacao, TipoTextoArticulado, TipoVide,
VeiculoPublicacao, Vide)
from compilacao.utils import DISPOSITIVO_SELECT_RELATED
from crud.base import Crud, CrudListView, make_pagination
DISPOSITIVO_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',
'ta_publicado',
'ta',)
TipoNotaCrud = Crud.build(TipoNota, 'tipo_nota')
TipoVideCrud = Crud.build(TipoVide, 'tipo_vide')
TipoPublicacaoCrud = Crud.build(TipoPublicacao, 'tipo_publicacao')
@ -2090,8 +2078,8 @@ class DispositivoSearchFragmentFormView(ListView):
def get_queryset(self):
try:
n = 10
q = Q(nivel__gt=0)
n = 50
q = Q()
if 'initial_ref' in self.request.GET:
initial_ref = self.request.GET['initial_ref']
if initial_ref:
@ -2103,13 +2091,16 @@ class DispositivoSearchFragmentFormView(ListView):
return result[:n]
str_texto = ''
texto = ''
rotulo = ''
num_ta = ''
ano_ta = ''
if 'texto' in self.request.GET:
texto = self.request.GET['texto']
str_texto = self.request.GET['texto']
texto = texto.split(' ')
texto = str_texto.split(' ')
if 'rotulo' in self.request.GET:
rotulo = self.request.GET['rotulo']
@ -2122,39 +2113,51 @@ class DispositivoSearchFragmentFormView(ListView):
if q:
q = q & (Q(texto__icontains=item) |
Q(texto_atualizador__icontains=item))
n = 50
else:
q = (Q(texto__icontains=item) |
Q(texto_atualizador__icontains=item))
n = 50
if 'tipo_ta' in self.request.GET:
tipo_ta = self.request.GET['tipo_ta']
if tipo_ta:
q = q & Q(ta__tipo_ta_id=tipo_ta)
n = 50
if 'num_ta' in self.request.GET:
num_ta = self.request.GET['num_ta']
if num_ta:
q = q & Q(ta__numero=num_ta)
n = 50
if 'ano_ta' in self.request.GET:
ano_ta = self.request.GET['ano_ta']
if ano_ta:
q = q & Q(ta__ano=ano_ta)
n = 50
result = Dispositivo.objects.filter(q).select_related(
'ta').exclude(tipo_dispositivo__dispositivo_de_alteracao=True)
if not q.children:
n = 10
q = q & Q(nivel__gt=0)
result = Dispositivo.objects.order_by(
'-ta__data',
'-ta__ano',
'-ta__numero',
'ta',
'ordem').filter(q).select_related('ta').exclude(
tipo_dispositivo__dispositivo_de_alteracao=True)
def resultados(r):
if num_ta and ano_ta and not rotulo and not str_texto and\
'data_type_selection' in self.request.GET and\
self.request.GET['data_type_selection'] == 'checkbox':
return r
else:
return r[:n]
if 'tipo_model' not in self.request.GET:
return result[:n]
return resultados(result)
tipo_model = self.request.GET['tipo_model']
if not tipo_model:
return result[:n]
return resultados(result)
integrations_view_names = get_integrations_view_names()
@ -2176,7 +2179,7 @@ class DispositivoSearchFragmentFormView(ListView):
break
if not model_class:
return result[:n]
return resultados(result)
column_field = ''
for field in model_class._meta.fields:
@ -2185,7 +2188,7 @@ class DispositivoSearchFragmentFormView(ListView):
break
if not column_field:
return result[:n]
return resultados(result)
r = []
@ -2197,7 +2200,8 @@ class DispositivoSearchFragmentFormView(ListView):
if tipo_model.pk == getattr(d.ta.content_object, column_field):
r.append(d)
if len(r) == n:
if (len(r) == n and (not num_ta or
not ano_ta or rotulo or str_texto)):
break
return r

111
static/js/compilacao.js

@ -23,45 +23,6 @@ function insertWaitAjax(element) {
}
var tipo_select = '';
var tipo_form = '';
var configFormSearchTA = function(container, _tipo_form, _tipo_select) {
tipo_select = _tipo_select;
tipo_form = _tipo_form;
var ta_select = $(container+" select[name='tipo_ta']");
$(container+" label[for='id_tipo_model']").html('Tipos de ' + ta_select[0].children[ta_select[0].selectedIndex].innerHTML);
$(container+" select[name='tipo_ta']").change(function(event) {
var url = '';
url = '/ta/search_fragment_form?action=get_tipos&tipo_ta='+this.value;
$(container+" label[for='id_tipo_model']").html('Tipos de ' + this.children[this.selectedIndex].innerHTML);
var select = $(container+" select[name='tipo_model']");
select.empty();
$('<option value="">Carregando...</option>').appendTo(select);
$.get(url).done(function( data ) {
select.empty();
for(var item in data) {
for (var i in data[item])
select.append($("<option>").attr('value',i).text(data[item][i]));
//$('<option value="'+i+'">'+data[item][i]+'</option>').appendTo(select);
}
select.change(onChangeParamTA)
});
});
$(container+" input[name='num_ta'], "
+ container+" input[name='ano_ta'], "
+ container+" select[name='tipo_model'], "
+ container+" input[name='dispositivos_internos'], "
+ container+" input[name='texto_dispositivo'], "
+ container+" input[name='rotulo_dispositivo']"
).change(onChangeParamTA);
$(container+" .btn-busca").click(onChangeParamTA);
}
function DispostivoSearch(opts) {
@ -80,23 +41,23 @@ function DispostivoSearch(opts) {
var data_field = field.attr('data-field');
var onChangeFieldSelects = function(event) {
var selecionados = field.find('input');
selecionados.off()
if (data_type_selection == 'checkbox') {
selecionados.on('change', function(event) {
if (!this.checked) {
if ($(this).closest('ul').find('li').length == 2)
$(this).closest('ul').remove();
else
$(this).closest('li').remove();
}
var tas = field.find('input[name="ta_select_all"]'); //tas - Textos Articulados
tas.off();
tas.on('change', function(event) {
$(this).closest('ul').find('input[name="'+data_field+'"]').prop("checked", this.checked);
//$(this).prop("checked", false);
});
}
else {
selecionados.attr('type', 'hidden');
var dpts = field.find('input');
dpts.off()
dpts.attr('type', 'hidden');
$('<a class="text-danger" href="#">')
.insertBefore(selecionados)
.insertBefore(dpts)
.append($('<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>'))
.on('click', function() {
if ($(this).closest('ul').find('li').length == 2)
@ -117,6 +78,17 @@ function DispostivoSearch(opts) {
var rotulo_dispositivo = $("input[name='rotulo_dispositivo']").val();
var texto_dispositivo = $("input[name='texto_dispositivo']").val();
var url = '';
if (rotulo_dispositivo.length > 0 || texto_dispositivo.length > 0) {
$("input[name='dispositivos_internos']").prop('disabled', false);
$("input[name='dispositivos_internos']").closest('#div_id_dispositivos_internos').css('opacity','1');
}
else {
$("input[name='dispositivos_internos']").filter('[value="False"]').prop('checked', true);
$("input[name='dispositivos_internos']").prop('disabled', true);
$("input[name='dispositivos_internos']").closest('#div_id_dispositivos_internos').css('opacity','0.3');
dispositivos_internos = 'False';
}
var formData = {
'tipo_ta' : tipo_ta,
'tipo_model' : tipo_model,
@ -134,9 +106,35 @@ function DispostivoSearch(opts) {
insertWaitAjax('.result-busca-dispositivo')
$.get(url, formData).done(function( data ) {
$('.result-busca-dispositivo').html(data);
if (data_type_selection == 'checkbox') {
var tas = $('.result-busca-dispositivo').find('input[name="ta_select_all"]');
tas.off();
tas.on('change', function(event) {
$(this).closest('ul').find('input[name="'+data_field+'"]').prop("checked", this.checked);
});
}
});
}
var onKeyPressRotuloBuscaTextual = function(event) {
var rotulo_dispositivo = $("input[name='rotulo_dispositivo']").val();
var texto_dispositivo = $("input[name='texto_dispositivo']").val();
var dispositivos_internos = $("input[name='dispositivos_internos']:checked").val();
if (rotulo_dispositivo.length > 0 || texto_dispositivo.length > 0) {
$("input[name='dispositivos_internos']").prop('disabled', false);
$("input[name='dispositivos_internos']").closest('#div_id_dispositivos_internos').css('opacity','1');
}
else {
$("input[name='dispositivos_internos']").filter('[value="False"]').prop('checked', true);
$("input[name='dispositivos_internos']").prop('disabled', true);
$("input[name='dispositivos_internos']").closest('#div_id_dispositivos_internos').css('opacity','0.3');
dispositivos_internos = 'False';
}
}
var button_ds = field.children("#button_ds");
if (button_ds.length > 0)
$(button_ds).remove();
@ -168,17 +166,20 @@ function DispostivoSearch(opts) {
for (var i in data[item])
select.append($("<option>").attr('value',i).text(data[item][i]));
}
select.change(onChangeParamTA)
//select.change(onChangeParamTA)
});
});
modal_ds.find("input[name='num_ta'], "
/*modal_ds.find("input[name='num_ta'], "
+"input[name='ano_ta'], "
+"select[name='tipo_model'], "
+"input[name='texto_dispositivo'], "
+"input[name='dispositivos_internos'], "
+"input[name='rotulo_dispositivo']"
).change(onChangeParamTA);
).change(onChangeParamTA);*/
modal_ds.find("input[name='texto_dispositivo'], "
+"input[name='rotulo_dispositivo']")
.on('keyup', onKeyPressRotuloBuscaTextual)
modal_ds.find(".btn-busca").click(onChangeParamTA);
@ -192,7 +193,7 @@ function DispostivoSearch(opts) {
var selecionados = modal_ds.find('[name="'+data_field+'"]:checked');
// com base nos selecionados, limpa seus ta's removendo os não selecionados
selecionados.closest('ul').find('input:not(:checked)').closest('li').remove();
selecionados.closest('ul').find('input:not(:checked)').filter('[name!="ta_select_all"]').closest('li').remove();
selecionados.closest('ul').each(function() {
//insere na lista de selecionados os ta's não presentes

10
static/js/compilacao_edit.js

@ -169,9 +169,13 @@ var clickUpdateDispositivo = function(event, __pk_refresh, __pk_edit, __action,
if (flag_actions_vibible == null || flag_actions_vibible) {
$('#dpt'+pk_edit).addClass('dpt-selected');
$('html, body').animate({
scrollTop: $('#dpt' + pk_edit ).offset().top - window.innerHeight / 9
}, 0);
try {
$('html, body').animate({
scrollTop: $('#dpt' + pk_edit ).offset().top - window.innerHeight / 9
}, 100);
}
catch(err) {
}
}
}

4
static/js/compilacao_notas.js

@ -23,7 +23,7 @@ function onEventsDneExec(pk, model) {
});
}
else if (model == 'vide') {
configFormSearchTA('#dne'+pk, 'radio', 'select_for_vide');
configFormSearchTA('#dne'+pk, 'radio', 'select_for_vide');
onChangeParamTA();
}
@ -68,9 +68,7 @@ var onSubmitEditNVForm = function(event) {
}, 300);
}
catch(err) {
console.log(err.message);
}
}
}
}

9
static/styles/compilacao.scss

@ -993,13 +993,17 @@ a:link:after, a:visited:after {
border-bottom: 1px solid white;
&.ta_title {
padding: 0.15em 0.7em;
background-color: rgba(0, 0, 0, 0.15);
display:block;
border-radius: 4px 4px 0 0;
width: 100%;
span {
padding: 0.5em;
}
}
&:last-child .itemlabel {
border-radius: 0 0 4px 0px;
margin: 0px;
}
&:last-child .iteminput {
@ -1029,6 +1033,7 @@ a:link:after, a:visited:after {
line-height: 1;
font-family: "SourceSansPro", Helvetica, Arial, sans-serif;
display: block;
margin: 0px;
}
}
}

125
templates/compilacao/dispositivo_form_search_fragment.html

@ -10,66 +10,105 @@
{% ifchanged dpt.ta%}
{% if not forloop.first %}</ul>{% endif %}
<ul class="cp" id="ta{{dpt.ta.pk}}">
<li class="ta_title">{{dpt.ta}}</li>
{% if request.GET.data_type_selection == 'checkbox' %}
<li class="ta_title">
<div class="iteminput">
<input type="{{request.GET.data_type_selection}}" name="ta_select_all" id="ta_title{{dpt.ta.pk}}" value="{{dpt.ta.pk}}"/>
</div>
<div class="itemlabel">
<label for="ta_title{{dpt.ta.pk}}">{{dpt.ta}}</label>
</div>
</li>
{% else %}
<li class="ta_title"><span>{{dpt.ta}}</span></li>
{% endif %}
{% endifchanged %}
{% if dpt.dispositivo_pai.nivel > 0 and dpt.is_relative_auto_insert and dpt.dispositivo_pai not in object_list %}
<li>
<div class="iteminput">
<input type="{{request.GET.data_type_selection}}" name="{{request.GET.data_field}}" id="dpt{{dpt.pk}}" value="{{dpt.pk}}"/>
</div>
<div class="itemlabel dpt">
{% if dpt.nivel > 1 %}
<a target="_blank" href="{% url 'compilacao:ta_text' dpt.ta.pk%}#{{dpt.pk}}" class="nomenclatura_heranca">{% trans "Herança:" %} {% nomenclatura_heranca dpt 1 1 %}</a>
{% if dpt.dispositivo_pai.nivel > 1 %}
<a target="_blank" href="{% url 'compilacao:ta_text' dpt.dispositivo_pai.ta.pk%}#{{dpt.dispositivo_pai.pk}}" class="nomenclatura_heranca">{% trans "Herança:" %} {% nomenclatura_heranca dpt 1 1 %}</a>
{% endif %}
<div class="{{ dpt.tipo_dispositivo.class_css }}">
<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}}">{% if dpt.rotulo or dpt.nivel = 1 %}{{ dpt.rotulo }}{%else%}[{{ dpt|nomenclatura}} {% trans "de" %} {{ dpt.dispositivo_pai.rotulo }}] - {% 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>
{% if dpt.ta_publicado_id and not dpt.tipo_dispositivo.dispositivo_de_articulacao %}
<a class="link_alterador" href="{%url 'compilacao:ta_text' dpt.ta_publicado.pk %}#{{dpt.dispositivo_atualizador_id}}">
{{ dpt.tipo_dispositivo.nota_automatica_prefixo_html|safe }}
{% nota_automatica dpt ta_pub_list %}
{{ dpt.tipo_dispositivo.nota_automatica_sufixo_html|safe }}
<div class="{{ dpt.dispositivo_pai.tipo_dispositivo.class_css }}">
<div class="dptt {% dispositivo_desativado dpt.dispositivo_pai view.inicio_vigencia view.fim_vigencia %}" id="dptt{{dpt.dispositivo_pai.pk}}" >
{{ dpt.dispositivo_pai.tipo_dispositivo.rotulo_prefixo_html|safe }}
{{ dpt.dispositivo_pai.rotulo }}
{{ dpt.dispositivo_pai.tipo_dispositivo.rotulo_sufixo_html|safe }}
<span class="dtxt" id="d{% if not dpt.dispositivo_pai.dispositivo_subsequente_id and dpt.dispositivo_pai.dispositivo_substituido_id %}a{% endif %}{{dpt.dispositivo_pai.pk}}" pks="{{dpt.dispositivo_pai.dispositivo_substituido_id|default:''}}" pk="{{dpt.dispositivo_pai.pk}}">{{ dpt.dispositivo_pai.tipo_dispositivo.texto_prefixo_html|safe }}{%if dpt.dispositivo_pai.texto %}{{ dpt.dispositivo_pai.texto|safe }}{%else%}{%if not dpt.dispositivo_pai.tipo_dispositivo.dispositivo_de_articulacao %}&nbsp;{% endif %}{% endif %}</span>
{% if dpt.dispositivo_pai.ta_publicado_id and not dpt.dispositivo_pai.tipo_dispositivo.dispositivo_de_articulacao %}
<a class="link_alterador" href="{%url 'compilacao:ta_text' dpt.dispositivo_pai.ta_publicado.pk %}#{{dpt.dispositivo_pai.dispositivo_atualizador_id}}">
{{ dpt.dispositivo_pai.tipo_dispositivo.nota_automatica_prefixo_html|safe }}
{% nota_automatica dpt.dispositivo_pai ta_pub_list %}
{{ dpt.dispositivo_pai.tipo_dispositivo.nota_automatica_sufixo_html|safe }}
</a>
{% endif %}
</div>
</div>
</div>
</li>
{% endif %}
{% if request.GET.dispositivos_internos == 'True' %}
{% for df in dpt.dispositivos_filhos_set.all %}
{% if df not in object_list %}
<li>
<div class="iteminput">
<input type="{{request.GET.data_type_selection}}" name="{{request.GET.data_field}}" id="dpt{{df.pk}}" value="{{df.pk}}"/>
</div>
<div class="itemlabel dpt">
{% if df.nivel > 1 %}
<a target="_blank" href="{% url 'compilacao:ta_text' df.ta.pk%}#{{df.pk}}" class="nomenclatura_heranca">{% trans "Herança:" %} {% nomenclatura_heranca df 1 1 %}</a>
{% endif %}
<li>
<div class="iteminput">
<input type="{{request.GET.data_type_selection}}" name="{{request.GET.data_field}}" id="dpt{{dpt.pk}}" value="{{dpt.pk}}"/>
</div>
<div class="itemlabel dpt">
{% if dpt.nivel > 1 %}
<a target="_blank" href="{% url 'compilacao:ta_text' dpt.ta.pk%}#{{dpt.pk}}" class="nomenclatura_heranca">{% trans "Herança:" %} {% nomenclatura_heranca dpt 1 1 %}</a>
{% endif %}
<div class="{{ dpt.tipo_dispositivo.class_css }}">
<div class="dptt {% dispositivo_desativado dpt view.inicio_vigencia view.fim_vigencia %}" id="dptt{{dpt.pk}}" >
{{ dpt.tipo_dispositivo.rotulo_prefixo_html|safe }}
{% if dpt.rotulo or dpt.nivel = 1 %}{{ dpt.rotulo }}{%else%}[{{ dpt|nomenclatura}} {% trans "de" %} {{ dpt.dispositivo_pai.rotulo }}] - {% endif %}
{{ 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>
{% if dpt.ta_publicado_id and not dpt.tipo_dispositivo.dispositivo_de_articulacao %}
<a class="link_alterador" href="{%url 'compilacao:ta_text' dpt.ta_publicado.pk %}#{{dpt.dispositivo_atualizador_id}}">
{{ dpt.tipo_dispositivo.nota_automatica_prefixo_html|safe }}
{% nota_automatica dpt ta_pub_list %}
{{ dpt.tipo_dispositivo.nota_automatica_sufixo_html|safe }}
</a>
{% endif %}
</div>
</div>
</div>
</li>
{% if request.GET.dispositivos_internos == 'True' %}
{% for df in dpt.dispositivos_filhos_set.all %}
{% if df not in object_list %}
<li>
<div class="iteminput">
<input type="{{request.GET.data_type_selection}}" name="{{request.GET.data_field}}" id="dpt{{df.pk}}" value="{{df.pk}}"/>
</div>
<div class="itemlabel dpt">
{% if df.nivel > 1 %}
<a target="_blank" href="{% url 'compilacao:ta_text' df.ta.pk%}#{{df.pk}}" class="nomenclatura_heranca">{% trans "Herança:" %} {% nomenclatura_heranca df 1 1 %}</a>
{% endif %}
<div class="{{ df.tipo_dispositivo.class_css }}">
<div class="dptt {% dispositivo_desativado dpt view.inicio_vigencia view.fim_vigencia %}" id="dptt{{df.pk}}" >
{{ df.tipo_dispositivo.rotulo_prefixo_html|safe }}
<a name="{{df.pk}}" title="{{df.pk}}">{% if df.rotulo or df.nivel = 1%}{{ df.rotulo }}{%else%}[{{ df|nomenclatura}} {% trans "de" %} {{ df.dispositivo_pai.rotulo }}] - {% endif %}</a>
{{ df.tipo_dispositivo.rotulo_sufixo_html|safe }}
<span class="dtxt" id="d{% if not df.dispositivo_subsequente_id and df.dispositivo_substituido_id %}a{% endif %}{{df.pk}}" pks="{{df.dispositivo_substituido_id|default:''}}" pk="{{df.pk}}">{{ df.tipo_dispositivo.texto_prefixo_html|safe }}{%if df.texto %}{{ df.texto|safe }}{%else%}{%if not df.tipo_dispositivo.dispositivo_de_articulacao %}&nbsp;{% endif %}{% endif %}</span>
{% if df.ta_publicado_id and not df.tipo_dispositivo.dispositivo_de_articulacao %}
<a class="link_alterador" href="{%url 'compilacao:ta_text' df.ta_publicado.pk %}#{{df.dispositivo_atualizador_id}}">
{{ df.tipo_dispositivo.nota_automatica_prefixo_html|safe }}
{% nota_automatica df ta_pub_list %}
{{ df.tipo_dispositivo.nota_automatica_sufixo_html|safe }}
</a>
{% endif %}
</div>
<div class="{{ df.tipo_dispositivo.class_css }}">
<div class="dptt {% dispositivo_desativado dpt view.inicio_vigencia view.fim_vigencia %}" id="dptt{{df.pk}}" >
{{ df.tipo_dispositivo.rotulo_prefixo_html|safe }}
<a name="{{df.pk}}" title="{{df.pk}}">{% if df.rotulo or df.nivel = 1%}{{ df.rotulo }}{%else%}[{{ df|nomenclatura}} {% trans "de" %} {{ df.dispositivo_pai.rotulo }}] - {% endif %}</a>
{{ df.tipo_dispositivo.rotulo_sufixo_html|safe }}
<span class="dtxt" id="d{% if not df.dispositivo_subsequente_id and df.dispositivo_substituido_id %}a{% endif %}{{df.pk}}" pks="{{df.dispositivo_substituido_id|default:''}}" pk="{{df.pk}}">{{ df.tipo_dispositivo.texto_prefixo_html|safe }}{%if df.texto %}{{ df.texto|safe }}{%else%}{%if not df.tipo_dispositivo.dispositivo_de_articulacao %}&nbsp;{% endif %}{% endif %}</span>
{% if df.ta_publicado_id and not df.tipo_dispositivo.dispositivo_de_articulacao %}
<a class="link_alterador" href="{%url 'compilacao:ta_text' df.ta_publicado.pk %}#{{df.dispositivo_atualizador_id}}">
{{ df.tipo_dispositivo.nota_automatica_prefixo_html|safe }}
{% nota_automatica df ta_pub_list %}
{{ df.tipo_dispositivo.nota_automatica_sufixo_html|safe }}
</a>
{% endif %}
</div>
</div>
</li>
{% endif %}
{% endfor %}
{% endif %}
</div>
</li>
{% endif %}
{% endfor %}
{% endif %}
{% if forloop.last %}</ul>{% endif %}
{% endfor %}

16
templates/compilacao/layout/dispositivo_checkbox.html

@ -1,7 +1,6 @@
{% load crispy_forms_filters %}
{% load i18n compilacao_filters common_tags%}
<div class="controls cp lista-dispositvo"{% if flat_attrs %} {{ flat_attrs|safe }}{% endif %}>
{% include 'bootstrap/layout/field_errors_block.html' %}
@ -10,7 +9,14 @@
{% ifchanged choice.1.ta%}
{% if not forloop.first %}</ul>{% endif %}
<ul id="ta{{choice.1.ta.pk}}">
<li class="ta_title">{{choice.1.ta}}</li>
<li class="ta_title">
<div class="iteminput">
<input type="{{field.field.widget.attrs|lookup:"data-type-selection"}}" name="ta_select_all" id="ta_title{{choice.1.ta.pk}}" value="{{choice.1.ta.pk}}"/>
</div>
<div class="itemlabel">
<label for="ta_title{{choice.1.ta.pk}}">{{choice.1.ta}}</label>
</div>
</li>
{% endifchanged %}
@ -19,9 +25,11 @@
<input type="{{field.field.widget.attrs|lookup:"data-type-selection"}}" name="{{ field.html_name }}" id="dpt{{choice.1.pk}}" value="{{choice.1.pk}}" {% if choice.0 in field.value or choice.0|stringformat:"s" in field.value or choice.0|stringformat:"s" == field.value|stringformat:"s" %} checked="checked"{% endif %} />
</div>
<div class="itemlabel dpt">
{% if choice.1.ta_publicado_id %}
<a target="_blank" href="{% url 'compilacao:ta_text' choice.1.ta.pk%}#{{choice.1.pk}}" class="nomenclatura_heranca">{% trans "Herança:" %} {% nomenclatura_heranca choice.1 1 1 %}</a>
{% endif %}
<div class="{{ choice.1.tipo_dispositivo.class_css }}">
<div class="dptt {% dispositivo_desativado choice.1 view.inicio_vigencia view.fim_vigencia %}" id="dptt{{choice.1.pk}}" >
<div class="dptt {% dispositivo_desativado choice.1 None None %}" id="dptt{{choice.1.pk}}" >
{{ choice.1.tipo_dispositivo.rotulo_prefixo_html|safe }}
<a name="{{choice.1.pk}}" title="{{choice.1.pk}}">{% if choice.1.rotulo %}{{ choice.1.rotulo }}{%else%}[{{ choice.1|nomenclatura}}{% if choice.1.dispositivo_pai %} {% trans "de" %} {{ choice.1.dispositivo_pai.rotulo }}{% endif %}] - {% endif %}</a>
{{ choice.1.tipo_dispositivo.rotulo_sufixo_html|safe }}

2
templates/compilacao/layout/dispositivo_radio.html

@ -12,7 +12,7 @@
{% ifchanged dpt.ta%}
{% if not forloop.first %}</ul>{% endif %}
<ul id="ta{{dpt.ta.pk}}">
<li class="ta_title">{{dpt.ta}}</li>
<li class="ta_title"><span>{{dpt.ta}}</span></li>
{% endifchanged %}
{% if dpt.is_relative_auto_insert %}
<li>

8
templates/compilacao/text_edit.html

@ -63,7 +63,7 @@
<li><strong>(E) Editor Simples:</strong> Edição Básica de Texto, além de novas inserções e exclusões. É recomendável o uso deste sempre que possível.</li>
<li><strong>(E+) Editor Rico:</strong> Edição do texto com o editor TinyMCE. Neste editor é possível registro de tabelas e textos customizados</li>
<li><strong>(E*) Editor Avançado:</strong> Edição e Lançamento de Dispositivos Originais, Alterados e Alteradores, além de todos os dados que controlam a compilação. </li>
<li><strong>(C) Construtor Estrutural:</strong> Neste modo, o editor foca na inserção de Dispositivos e busca deixar mais acessíveis as estas ações.</li>
<li><strong>(C) Construtor Estrutural:</strong> Neste modo, o editor foca na inserção de Dispositivos e busca deixar mais acessíveis estas ações.</li>
</ol></li>
<li>A Edição Avançada é complexa e sensível a erros de edição. É recomendável o uso cuidadoso e consciente das funcionalidades.</li>
@ -75,7 +75,7 @@
</ol>
</li>
<li>Inserir os Dispositivos na sequência natural é mais produtivo para você, além de ser também mais simples para o algorítmo que controla este processo. Quanto maior a mudança estutural, mais lento será o procedimento. </li>
<li>A Opção DVt (Dispositivo de Vigência do Texto) redefine o dispositivo em seleção, como o dispositivo de vigência de todos os outros, inclusive os dispositivos alterados, caso se trate de um Texto Alterador.
<li>A Opção DVt (Dispositivo de Vigência do Texto) redefine o dispositivo em seleção como o dispositivo de vigência de todos os outros, inclusive os dispositivos alterados, caso se trate de um Texto Alterador.
<ol>
<li>O Dispositivo de Vigência de Dispositivos Alterados é, quase sempre, o Dispositivo do Texto Alterador, e não do Texto Alterado.</li>
<li>Ao usar a opção DVt, todas as datas de início de vigência serão reenquadradas para a data de vigência do dispositivo de vigência. Posteriormente, alterações manuais poderão ser feitas.</li>
@ -96,9 +96,9 @@
As exclusões podem ser diretas, individuais ou em bloco:
<ol>
<li><strong>Diretas:</strong> Dispositivos que não possuam itens internos são excluidos diretamente.</li>
<li><strong>Individuais:</strong> Dispositivos que possuam itens internos e este podem ser reenquadrados no Dispositivo imediatamente anterior
<li><strong>Individuais:</strong> Dispositivos que possuam itens internos e estes podem ser reenquadrados no Dispositivo imediatamente anterior
<ul>
<li>Ainda Não foi implementado a transferência de conteúdo na exclusão individual de DCC's que estão estruturalmente separados. Ex: Um artigo possui parágrafos, se seu artigo imediatamente anterior estiver no mesmo sub-grupo, esses parágrafos, na exlcusão individual, serão transferidos para o artigo anterior, no entanto, se estiverem em sub-grupo separados, o artigo será completamente excluido como em uma exclusão em bloco.</li>
<li>Ainda Não foi implementado a transferência de conteúdo na exclusão individual de DCC's que estão estruturalmente separados. Ex: Um artigo possui parágrafos, se seu artigo imediatamente anterior estiver no mesmo sub-grupo, esses parágrafos, na exclusão individual, serão transferidos para o artigo anterior, no entanto, se estiverem em sub-grupo separados, o artigo será completamente excluido como em uma exclusão em bloco.</li>
</ul>
</li>
<li><strong>Em Bloco:</strong> Todo o conteúdo incluído no Dispositivo em edição será excluído.</li>

2
templates/compilacao/text_edit_bloco.html

@ -99,7 +99,7 @@
{% if dpt.dispositivo_vigencia %}
<li>&#8226;</li>
<li>{% field_verbose_name dpt 'dispositivo_vigencia'%}: <a action="refresh" pk="{{dpt.dispositivo_vigencia.pk}}" title="{% field_verbose_name dpt 'dispositivo_vigencia'%} {% trans 'em' %}:&#013;{{dpt.dispositivo_vigencia.ta}}" class="btn-action">{{dpt.dispositivo_vigencia|nomenclatura}}</a> </li>
<li>{% field_verbose_name dpt 'dispositivo_vigencia'%}: <a href="{% url 'compilacao:ta_text_edit' dpt.dispositivo_vigencia.ta_id %}#{{ dpt.dispositivo_vigencia_id }}" action="refresh" pk="{{dpt.dispositivo_vigencia.pk}}" title="{% field_verbose_name dpt 'dispositivo_vigencia'%} {% trans 'em' %}:&#013;{{dpt.dispositivo_vigencia.ta}}">{{dpt.dispositivo_vigencia|nomenclatura}}</a> </li>
{% endif %}
<li>&#8226;</li>

Loading…
Cancel
Save