Browse Source

Muda lógica de reg de alt de disp de ins autom.

pull/590/head
LeandroRoberto 8 years ago
parent
commit
3e7ecfa4d9
  1. 3
      .gitignore
  2. 45
      sapl/compilacao/forms.py
  3. 20
      sapl/compilacao/migrations/0051_dispositivo_auto_inserido.py
  4. 8
      sapl/compilacao/models.py
  5. 5
      sapl/compilacao/templatetags/compilacao_filters.py
  6. 151
      sapl/compilacao/views.py
  7. 6
      sapl/static/js/compilacao_view.js
  8. 19
      sapl/static/styles/compilacao.scss
  9. 2
      sapl/templates/compilacao/dispositivo_form_search_fragment.html
  10. 4
      sapl/templates/compilacao/text_edit_bloco.html
  11. 14
      sapl/templates/compilacao/text_list_bloco.html
  12. 16
      sapl/templates/compilacao/text_list_blocoalteracao.html

3
.gitignore

@ -82,6 +82,9 @@ target/
.vagrant
*.sublime-project
*.sublime-workspace
.ipynb_checkpoints/
*.ipynb
# specific to this project
collected_static

45
sapl/compilacao/forms.py

@ -636,27 +636,26 @@ class DispositivoEdicaoBasicaForm(ModelForm):
btns_excluir = []
if not inst.is_relative_auto_insert():
btns_excluir = [
HTML('<a class="btn btn-danger btn-action btn-excluir" '
'action="json_delete_item_dispositivo" '
'title="%s" '
'pk="%s" '
'>%s</a>' % (_('Excluir apenas este dispositivo.'),
inst.pk,
_('Excluir Dispositivo')))]
if inst.dispositivos_filhos_set.exists():
btns_excluir.append(
HTML(
'<a class="btn btn-danger btn-action btn-excluir" '
'action="json_delete_bloco_dispositivo" '
'title="%s" '
'pk="%s" '
'>%s</a>' % (_('Excluir este dispositivo '
'e toda sua estrutura.'),
inst.pk,
_('Excluir Bloco de Dispositivo.'))))
btns_excluir = [
HTML('<a class="btn btn-danger btn-action btn-excluir" '
'action="json_delete_item_dispositivo" '
'title="%s" '
'pk="%s" '
'>%s</a>' % (_('Excluir apenas este dispositivo.'),
inst.pk,
_('Excluir Dispositivo')))]
if inst.dispositivos_filhos_set.exists():
btns_excluir.append(
HTML(
'<a class="btn btn-danger btn-action btn-excluir" '
'action="json_delete_bloco_dispositivo" '
'title="%s" '
'pk="%s" '
'>%s</a>' % (_('Excluir este dispositivo '
'e toda sua estrutura.'),
inst.pk,
_('Excluir Bloco de Dispositivo.'))))
if btns_excluir:
css_class = 'btn-group pull-right btns-excluir'
@ -856,7 +855,7 @@ class DispositivoEdicaoVigenciaForm(ModelForm):
def clean_dispositivo_vigencia(self):
dv = self.cleaned_data['dispositivo_vigencia']
if dv and dv.is_relative_auto_insert():
if dv and dv.auto_inserido:
dv = dv.dispositivo_pai
return dv
@ -871,7 +870,7 @@ class DispositivoEdicaoVigenciaForm(ModelForm):
if extensao:
dv = data['dispositivo_vigencia']
if dv and dv.is_relative_auto_insert():
if dv and dv.auto_inserido:
dv = dv.dispositivo_pai
dv_pk = dv.pk if dv else None

20
sapl/compilacao/migrations/0051_dispositivo_auto_inserido.py

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-09-12 16:24
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0050_auto_20160503_0926'),
]
operations = [
migrations.AddField(
model_name='dispositivo',
name='auto_inserido',
field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Auto Inserido'),
),
]

8
sapl/compilacao/models.py

@ -578,7 +578,10 @@ class Dispositivo(BaseModel, TimestampedMixin):
default=False,
choices=YES_NO_CHOICES,
verbose_name=_('Declarado Inconstitucional'))
# Relevant attribute only in altering norms
auto_inserido = models.BooleanField(
default=False,
choices=YES_NO_CHOICES,
verbose_name=_('Auto Inserido'))
visibilidade = models.BooleanField(
default=False,
choices=YES_NO_CHOICES,
@ -1120,7 +1123,8 @@ class Dispositivo(BaseModel, TimestampedMixin):
ta_id=self.ta_id)
return niveis_zero
def is_relative_auto_insert(self, perfil_pk=None):
# metodo obsoleto, foi acrescentado o campo auto_inserido no modelo
def is_relative_auto_insert__obsoleto(self, perfil_pk=None):
if self.dispositivo_pai is not None:
# pp possiveis_pais

5
sapl/compilacao/templatetags/compilacao_filters.py

@ -126,11 +126,6 @@ def select_provaveis_inserts(view, request):
return view.select_provaveis_inserts(request)
@register.filter
def is_relative_auto_insert(dpt, request):
return dpt.is_relative_auto_insert(request.session['perfil_estrutural'])
@register.filter
def isinst(value, class_str):
classe = value.__class__.__name__

151
sapl/compilacao/views.py

@ -1041,10 +1041,12 @@ class TextEditView(TemplateView):
class ActionsCommonsMixin:
def set_message(self, data, _type, message):
def set_message(self, data, _type, message, time=None):
data['message'] = {
'type': _type,
'value': str(message)}
if time:
data['message']['time'] = time
return
def get_json_for_refresh(self, dp, dpauto=None):
@ -1203,7 +1205,7 @@ class ActionDeleteDispositivoMixin(ActionsCommonsMixin):
p.fim_eficacia = None
for d in base.dispositivos_filhos_set.all():
if d.is_relative_auto_insert():
if d.auto_inserido:
self.remover_dispositivo(d, bloco)
elif not bloco:
p.dispositivos_filhos_set.add(d)
@ -1226,7 +1228,7 @@ class ActionDeleteDispositivoMixin(ActionsCommonsMixin):
transferir para o caput imediatamente acima visto se
tratar de uma exclusão de item?"""
d_nivel_old = d.nivel
if d.is_relative_auto_insert():
if d.auto_inserido:
d.delete()
continue
@ -1506,7 +1508,7 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin):
if dp.nivel >= nivel:
continue
if dp.is_relative_auto_insert(perfil_pk):
if dp.auto_inserido:
continue
if prox_possivel and \
@ -1605,7 +1607,7 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin):
if paradentro and not td.permitido_inserir_in(
tipb,
include_relative_autos=False,
include_relative_autos=True,
perfil_pk=perfil_pk):
continue
@ -1617,7 +1619,7 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin):
for possivelpai in parents:
if td.permitido_inserir_in(
possivelpai.tipo_dispositivo,
include_relative_autos=False,
include_relative_autos=True,
perfil_pk=perfil_pk):
flag_insercao = True
break
@ -1625,7 +1627,7 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin):
if not flag_insercao:
continue
if possivelpai.is_relative_auto_insert(perfil_pk):
if possivelpai.auto_inserido:
continue
if prox_possivel:
@ -1694,7 +1696,7 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin):
# Dispositivo de Vigência do Texto Original e de Dpts Alterados
dvt = Dispositivo.objects.get(pk=self.kwargs['dispositivo_id'])
if dvt.is_relative_auto_insert():
if dvt.auto_inserido:
dvt = dvt.dispositivo_pai
try:
@ -1823,15 +1825,17 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin):
if pp.exists() and pp[0].quantidade_permitida >= 0:
qtd_existente = Dispositivo.objects.filter(
ta_id=dp.ta_id,
tipo_dispositivo_id=dp.tipo_dispositivo_id).count()
tipo_dispositivo_id=dp.tipo_dispositivo_id,
dispositivo_pai=dp.dispositivo_pai).count()
if qtd_existente >= pp[0].quantidade_permitida:
return {'pk': base.pk,
'pai': [base.dispositivo_pai.pk, ],
'message': str(_('Limite de inserções de '
'dispositivos deste tipo '
'foi excedido.'))
}
data = {'pk': base.pk,
'pai': [base.dispositivo_pai.pk, ]}
self.set_message(data, 'warning',
_('Limite de inserções de '
'dispositivos deste tipo '
'foi excedido.'), time=6000)
return data
ordem = base.criar_espaco(
espaco_a_criar=1 + count_auto_insert, local=local_add)
@ -1860,6 +1864,7 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin):
dp.ordem = dp.ordem + Dispositivo.INTERVALO_ORDEM
dp.publicacao = pub_last
dp.auto_inserido = True
dp.save()
dp_auto_insert = dp
dp = Dispositivo.objects.get(pk=dp_pk)
@ -2071,74 +2076,69 @@ class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin,
perfil_pk = self.request.session['perfil_estrutural']
"""Se o usuário selecionar um dispositivo de auto inserção,
como um caput, por exemplo, a alteração é
migrada para o pai imediato"""
if dispositivo_a_alterar.is_relative_auto_insert(perfil_pk=perfil_pk):
dispositivo_a_alterar = dispositivo_a_alterar.dispositivo_pai
data = {}
ndp = Dispositivo.new_instance_based_on(
dispositivo_a_alterar, dispositivo_a_alterar.tipo_dispositivo)
if dispositivo_a_alterar.tipo_dispositivo.dispositivo_de_articulacao:
pass
ndp.rotulo = dispositivo_a_alterar.rotulo
ndp.texto = dispositivo_a_alterar.texto
ndp.publicacao = bloco_alteracao.publicacao
ndp.dispositivo_vigencia = bloco_alteracao.dispositivo_vigencia
if ndp.dispositivo_vigencia:
ndp.inicio_eficacia = ndp.dispositivo_vigencia.inicio_eficacia
ndp.inicio_vigencia = ndp.dispositivo_vigencia.inicio_vigencia
else:
ndp = Dispositivo.new_instance_based_on(
dispositivo_a_alterar, dispositivo_a_alterar.tipo_dispositivo)
ndp.inicio_eficacia = bloco_alteracao.inicio_eficacia
ndp.inicio_vigencia = bloco_alteracao.inicio_vigencia
ndp.rotulo = dispositivo_a_alterar.rotulo
ndp.texto = dispositivo_a_alterar.texto
ndp.publicacao = bloco_alteracao.publicacao
try:
with transaction.atomic():
ordem = dispositivo_a_alterar.criar_espaco(
espaco_a_criar=1, local='json_add_in')
ndp.dispositivo_vigencia = bloco_alteracao.dispositivo_vigencia
if ndp.dispositivo_vigencia:
ndp.inicio_eficacia = ndp.dispositivo_vigencia.inicio_eficacia
ndp.inicio_vigencia = ndp.dispositivo_vigencia.inicio_vigencia
else:
ndp.inicio_eficacia = bloco_alteracao.inicio_eficacia
ndp.inicio_vigencia = bloco_alteracao.inicio_vigencia
ndp.ordem = ordem
ndp.dispositivo_atualizador = bloco_alteracao
ndp.ta_publicado = bloco_alteracao.ta
try:
with transaction.atomic():
ordem = dispositivo_a_alterar.criar_espaco(
espaco_a_criar=1, local='json_add_in')
ndp.ordem = ordem
ndp.dispositivo_atualizador = bloco_alteracao
ndp.ta_publicado = bloco_alteracao.ta
p = dispositivo_a_alterar
n = dispositivo_a_alterar.dispositivo_subsequente
ndp.dispositivo_substituido = p
ndp.dispositivo_subsequente = n
if n:
ndp.fim_eficacia = n.inicio_eficacia - \
timedelta(days=1)
ndp.fim_vigencia = n.inicio_vigencia - \
timedelta(days=1)
ndp.save()
p.dispositivo_subsequente = ndp
p.fim_eficacia = ndp.inicio_eficacia - timedelta(days=1)
p.fim_vigencia = ndp.inicio_vigencia - timedelta(days=1)
p.save()
if n:
n.dispositivo_substituido = ndp
n.save()
filhos_diretos = dispositivo_a_alterar.dispositivos_filhos_set
for d in filhos_diretos.all():
d.dispositivo_pai = ndp
d.save()
p = dispositivo_a_alterar
n = dispositivo_a_alterar.dispositivo_subsequente
except Exception as e:
print(e)
ndp.dispositivo_substituido = p
ndp.dispositivo_subsequente = n
if n:
ndp.fim_eficacia = n.inicio_eficacia - \
timedelta(days=1)
ndp.fim_vigencia = n.inicio_vigencia - \
timedelta(days=1)
ndp.save()
p.dispositivo_subsequente = ndp
p.fim_eficacia = ndp.inicio_eficacia - timedelta(days=1)
p.fim_vigencia = ndp.inicio_vigencia - timedelta(days=1)
p.save()
data = {'pk': ndp.pk,
'pai': [bloco_alteracao.pk, ]}
if n:
n.dispositivo_substituido = ndp
n.save()
return data
filhos_diretos = dispositivo_a_alterar.dispositivos_filhos_set
for d in filhos_diretos.all():
d.dispositivo_pai = ndp
d.save()
self.set_message(
data, 'success',
_('Dispositivo de Alteração adicionado com sucesso.'))
except Exception as e:
print(e)
data.update({'pk': ndp.pk,
'pai': [bloco_alteracao.pk, ]})
return data
class DispositivoDinamicEditView(
@ -2226,9 +2226,6 @@ class DispositivoDinamicEditView(
data = self.registra_alteracao(d, dispositivo_a_alterar)
self.set_message(
data, 'success',
_('Dispositivo de Alteração adicionado com sucesso.'))
elif formtype == 'get_form_base':
texto = request.POST['texto'].strip()
texto_atualizador = request.POST['texto_atualizador'].strip()

6
sapl/static/js/compilacao_view.js

@ -36,7 +36,7 @@ function textoMultiVigente(item, diff) {
$(".dptt.desativado").removeClass("displaynone");
$(".dtxt").removeClass("displaynone");
$(".dtxt.diff").remove();
$(".link_alterador").removeClass("displaynone");
$(".nota-alteracao").removeClass("displaynone");
if (diff) {
$(".dtxt[id^='da'").each(function() {
@ -126,9 +126,9 @@ function textoVigente(item, link) {
$(item).addClass("selected")
$(".dptt.desativado").addClass("displaynone");
$(".link_alterador").removeClass("displaynone");
$(".nota-alteracao").removeClass("displaynone");
if (!link)
$(".link_alterador").addClass("displaynone");
$(".nota-alteracao").addClass("displaynone");
if (elv) {
try {

19
sapl/static/styles/compilacao.scss

@ -166,7 +166,7 @@ a:link:after, a:visited:after {
.cp {
.desativado {
.dtxt, .dtxt * {
.dtxt, .dtxt *, .dpt-link, .dpt-link * {
text-decoration: line-through;
color: #999 !important;
@ -524,8 +524,8 @@ a:link:after, a:visited:after {
display: block;
& > .dpt-actions-fixed {
position: absolute;
right: -0.25em;
top: 0px;
right: -0.5em;
top: -0.5em;
z-index: 3;
opacity: 0;
@ -547,10 +547,10 @@ a:link:after, a:visited:after {
display: none;
}
& > .dpt-text {
cursor: pointer;
cursor: text;
min-height: 30px;
border: 1px solid transparent;
&:hover {
&:hover, &.hover-fixed {
background-color: rgba(0, 0, 0, 0.01);
color: $color_buttons;
border: 1px solid #eee;
@ -568,9 +568,14 @@ a:link:after, a:visited:after {
&:hover {
& > .dpt-actions-fixed {
opacity: 0.8;
opacity: 1;
&:hover {
opacity: 1;
& ~ .dpt-text {
background-color: rgba(0, 0, 0, 0.01);
color: $color_buttons;
border: 1px solid #eee;
transition: color 0.3s ease;
}
}
}
}

2
sapl/templates/compilacao/dispositivo_form_search_fragment.html

@ -24,7 +24,7 @@
{% endif %}
{% endifchanged %}
{% if dpt.tipo_dispositivo.dispositivo_de_alteracao or dpt.dispositivo_pai.nivel > 0 and dpt.is_relative_auto_insert and dpt.dispositivo_pai not in object_list %}
{% if dpt.tipo_dispositivo.dispositivo_de_alteracao or dpt.dispositivo_pai.nivel > 0 and dpt.auto_inserido 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}}"/>

4
sapl/templates/compilacao/text_edit_bloco.html

@ -4,6 +4,7 @@
{% dispositivotree dispositivos_list %}
<div class="dpt" id="id{{node.dpt.id}}" pk="{{node.dpt.pk}}" ordem="{{node.dpt.ordem}}" name="{{node.dpt.pk}}" title="{{node.dpt.pk}} - {{node.dpt.ordem}}" formtype="get_form_base">
<div class="dpt-actions"></div>
<div class="dpt-actions-fixed">
<a class="btn-action btn-dpt-edit btn btn-default btn-sm" pk="{{node.dpt.pk}}" title=""><span class="deactivate">{% trans 'Editar'%}</span><span class="activate">{% trans 'Em Edição'%}:</span> {{ node.td.nome }} {{ node.dpt.rotulo }}</a>
<div class="btn-group">
@ -12,8 +13,7 @@
{% if not node.dpt.rotulo and not node.dpt.texto and node.td.dispositivo_de_articulacao%}
{% endif %}
</div>
<div class="dpt-actions"></div>
<div class="dpt-text {{node.td.class_css}} {%if node.dpt.fim_vigencia %}desativado{%endif%} {%if node.dpt.rotulo or node.dpt.texto or not node.td.dispositivo_de_articulacao %}btn-dpt-edit{%endif%}" title="{% trans 'Editar' %} {{node.td.nome}}">
<div class="dpt-text {{node.td.class_css}} {%if node.dpt.fim_vigencia %}desativado{%endif%} {%if not node.filhos and node.td.dispositivo_de_articulacao %}hover-fixed{%endif%}">
{{ node.td.rotulo_prefixo_html|safe }}
{% if node.da and node in node.da.alts %}

14
sapl/templates/compilacao/text_list_bloco.html

@ -19,9 +19,17 @@
{% spaceless %}
<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 class="dpt-link" name="{{dpt.pk}}" title="{{dpt.pk}}">{{ dpt.rotulo }}</a>
{{ dpt.tipo_dispositivo.rotulo_sufixo_html|safe }}
{% if not dpt.tipo_dispositivo.dispositivo_de_articulacao %}
{% if dpt.auto_inserido %}
{{ dpt.dispositivo_pai.tipo_dispositivo.rotulo_prefixo_html|safe }}
<a class="dpt-link" name="{{dpt.pk}}">{{ dpt.dispositivo_pai.rotulo }}</a>
{{ dpt.dispositivo_pai.tipo_dispositivo.rotulo_sufixo_html|safe }}
{% else %}
{{ dpt.tipo_dispositivo.rotulo_prefixo_html|safe }}
<a class="dpt-link" name="{{dpt.pk}}" title="{{dpt.pk}}">{{ dpt.rotulo }}</a>
{{ dpt.tipo_dispositivo.rotulo_sufixo_html|safe }}
{% endif %}
{% endif %}
<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="nota-alteracao" href="{%url 'sapl.compilacao:ta_text' dpt.ta_publicado.pk %}#{{dpt.dispositivo_atualizador_id}}">

16
sapl/templates/compilacao/text_list_blocoalteracao.html

@ -3,11 +3,19 @@
{% for ch in dpt.pk|get_bloco_atualizador %}
{% spaceless %}
{% if ch.visibilidade %}
<div class="dpt" id="d{{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 'sapl.compilacao: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 class="dpt" id="d{{ch.id}}" nivel="{{ch.nivel}}">
<div class="{{ ch.tipo_dispositivo.class_css }}" id="id{{ch.id}}" nivel="{{ch.nivel}}">
{% if ch.auto_inserido %}
{{ ch.dispositivo_pai.tipo_dispositivo.rotulo_prefixo_html|safe }}
<a name="{{ch.dispositivo_pai.pk}}" href="{% url 'sapl.compilacao:ta_text' ch.dispositivo_pai.ta.pk %}#{{ch.dispositivo_pai.pk}}">{{ ch.dispositivo_pai.rotulo }}</a>
{{ ch.dispositivo_pai.tipo_dispositivo.rotulo_sufixo_html|safe }}
{% endif %}
{{ ch.tipo_dispositivo.rotulo_prefixo_html|safe }}
<a name="{{ch.pk}}" href="{% url 'sapl.compilacao: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>
{%endif%}
{% endspaceless %}
{% endfor %}

Loading…
Cancel
Save