Browse Source

Ajustes na inclusão de disp de inserção automática

pull/590/head
LeandroRoberto 8 years ago
parent
commit
7114922382
  1. 9
      sapl/compilacao/forms.py
  2. 19
      sapl/compilacao/migrations/0053_auto_20160916_1420.py
  3. 19
      sapl/compilacao/migrations/0054_auto_20160916_1424.py
  4. 1
      sapl/compilacao/models.py
  5. 54
      sapl/compilacao/views.py
  6. 13
      sapl/static/js/compilacao_edit.js
  7. 13
      sapl/templates/compilacao/ajax_actions_dinamic_edit.html
  8. 31
      sapl/templates/compilacao/text_edit_bloco.html

9
sapl/compilacao/forms.py

@ -636,8 +636,8 @@ class DispositivoEdicaoBasicaForm(ModelForm):
btns_excluir = []
if not inst.tipo_dispositivo.dispositivo_de_alteracao and \
not inst.tipo_dispositivo.dispositivo_de_articulacao:
if not (inst.tipo_dispositivo.dispositivo_de_alteracao and
inst.tipo_dispositivo.dispositivo_de_articulacao):
btns_excluir = [
HTML('<a class="btn btn-danger btn-excluir" '
'action="json_delete_item_dispositivo" '
@ -647,7 +647,8 @@ class DispositivoEdicaoBasicaForm(ModelForm):
inst.pk,
_('Excluir Dispositivo')))]
if inst.dispositivos_filhos_set.exists() or (
if inst.dispositivos_filhos_set.filter(
auto_inserido=False).exists() or (
inst.tipo_dispositivo.dispositivo_de_alteracao and
inst.tipo_dispositivo.dispositivo_de_articulacao):
btns_excluir.append(
@ -661,7 +662,7 @@ class DispositivoEdicaoBasicaForm(ModelForm):
inst.pk,
_('Excluir Bloco de Dispositivo.'))))
if btns_excluir:
if btns_excluir and (not inst.auto_inserido or inst.ta_publicado):
css_class = 'btn-group pull-right btns-excluir'
more.append(Div(*btns_excluir, css_class=css_class))

19
sapl/compilacao/migrations/0053_auto_20160916_1420.py

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-09-16 17:20
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0052_auto_20160915_1327'),
]
operations = [
migrations.AlterUniqueTogether(
name='dispositivo',
unique_together=set([('ta', 'ordem'), ('ta', 'dispositivo0', 'dispositivo1', 'dispositivo2', 'dispositivo3', 'dispositivo4', 'dispositivo5', 'tipo_dispositivo', 'dispositivo_pai', 'ta_publicado', 'publicacao')]),
),
]

19
sapl/compilacao/migrations/0054_auto_20160916_1424.py

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-09-16 17:24
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0053_auto_20160916_1420'),
]
operations = [
migrations.AlterUniqueTogether(
name='dispositivo',
unique_together=set([('ta', 'ordem'), ('ta', 'dispositivo0', 'dispositivo1', 'dispositivo2', 'dispositivo3', 'dispositivo4', 'dispositivo5', 'tipo_dispositivo', 'dispositivo_pai', 'dispositivo_atualizador', 'ta_publicado', 'publicacao')]),
),
]

1
sapl/compilacao/models.py

@ -1171,6 +1171,7 @@ class Dispositivo(BaseModel, TimestampedMixin):
dp.nivel = dispositivo_base.nivel
dp.texto = ''
dp.visibilidade = True
dp.auto_inserido = dispositivo_base.auto_inserido
dp.ta = dispositivo_base.ta
dp.dispositivo_pai = dispositivo_base.dispositivo_pai
dp.publicacao = dispositivo_base.publicacao

54
sapl/compilacao/views.py

@ -1041,12 +1041,13 @@ class TextEditView(TemplateView):
class ActionsCommonsMixin:
def set_message(self, data, _type, message, time=None):
def set_message(self, data, _type, message, time=None, modal=False):
data['message'] = {
'type': _type,
'value': str(message)}
if time:
data['message']['time'] = time
data['message']['modal'] = modal
return
def get_json_for_refresh(self, dp, dpauto=None):
@ -1172,14 +1173,14 @@ class ActionDeleteDispositivoMixin(ActionsCommonsMixin):
with transaction.atomic():
message = str(self.remover_dispositivo(base, bloco))
if message:
self.set_message(data, 'warning', message)
self.set_message(data, 'warning', message, modal=True)
else:
self.set_message(data, 'success', _(
'Exclusão efetuada com sucesso!'))
'Exclusão efetuada com sucesso!'), modal=True)
ta_base.ordenar_dispositivos()
except Exception as e:
data['pk'] = self.kwargs['dispositivo_id']
self.set_message(data, 'danger', str(e))
self.set_message(data, 'danger', str(e), modal=True)
return data
@ -1765,23 +1766,6 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin):
else:
raise Exception('Não existe perfil padrão!')
tipos_dp_auto_insert = tipo.filhos_permitidos.filter(
filho_de_insercao_automatica=True,
perfil_id=context['perfil_pk'])
count_auto_insert = 0
for tipoauto in tipos_dp_auto_insert:
qtdp = tipoauto.quantidade_permitida
if qtdp >= 0:
qtdp -= Dispositivo.objects.filter(
ta_id=base.ta_id,
tipo_dispositivo_id=tipoauto.filho_permitido.pk
).count()
if qtdp > 0:
count_auto_insert += 1
else:
count_auto_insert += 1
dp_irmao = None
dp_pai = None
for dp in parents:
@ -1847,7 +1831,7 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin):
return data
ordem = base.criar_espaco(
espaco_a_criar=1 + count_auto_insert, local=local_add)
espaco_a_criar=1, local=local_add)
dp.rotulo = dp.rotulo_padrao()
dp.ordem = ordem
@ -1856,9 +1840,32 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin):
dp.publicacao = pub_last
dp.save()
tipos_dp_auto_insert = tipo.filhos_permitidos.filter(
filho_de_insercao_automatica=True,
perfil_id=context['perfil_pk'])
count_auto_insert = 0
for tipoauto in tipos_dp_auto_insert:
qtdp = tipoauto.quantidade_permitida
if qtdp >= 0:
qtdp -= Dispositivo.objects.filter(
ta_id=dp.ta_id,
dispositivo_pai_id=dp.id,
tipo_dispositivo_id=tipoauto.filho_permitido.pk
).count()
if qtdp > 0:
count_auto_insert += 1
else:
count_auto_insert += 1
# Inserção automática
if count_auto_insert:
ordem = dp.criar_espaco(
espaco_a_criar=count_auto_insert, local=local_add)
dp_pk = dp.pk
dp.ordem = ordem
dp.nivel += 1
for tipoauto in tipos_dp_auto_insert:
dp.dispositivo_pai_id = dp_pk
@ -1870,12 +1877,13 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin):
dp.set_numero_completo([1, 0, 0, 0, 0, 0, ])
dp.rotulo = dp.rotulo_padrao()
dp.texto = ''
dp.ordem = dp.ordem + Dispositivo.INTERVALO_ORDEM
dp.publicacao = pub_last
dp.auto_inserido = True
dp.save()
dp_auto_insert = dp
ordem += Dispositivo.INTERVALO_ORDEM
dp = Dispositivo.objects.get(pk=dp_pk)
''' Reenquadrar todos os dispositivos que possuem pai

13
sapl/static/js/compilacao_edit.js

@ -40,19 +40,22 @@ function DispositivoEdit() {
$.get(url, form_data).done(function(data) {
instance.clearEditSelected();
instance.waitHide();
if (data.pk != null) {
if (data.message !== undefined) {
if (data.message.type == 'danger')
instance.modalMessage(data.message.value, 'alert-'+data.message.type, null);
if (data.message.modal) {
instance.modalMessage(data.message.value, 'alert-'+data.message.type, function() {
instance.waitShow();
instance.refreshScreenFocusPk(data);
});
return;
}
else {
instance.message(data)
}
}
instance.refreshScreenFocusPk(data);
}
}).fail(instance.waitHide)
.always(instance.waitHide);
}).fail(instance.waitHide).always(instance.waitHide);
}
instance.clearEditSelected = function() {

13
sapl/templates/compilacao/ajax_actions_dinamic_edit.html

@ -61,10 +61,11 @@
{% endfor %}
{%endif%}
</div>
<div class="btn-group " role="group">
<button type="button" class="btn-action btn btn-xs radius-right {% if object.pk == object.dispositivo_vigencia_id %}btn-primary{%else%}btn-default{%endif%}" pk="{{object.pk}}" action="json_set_dvt" title="{% if object.pk == object.dispositivo_vigencia_id %}{% trans 'Dispositivo de Vigência Atual'%}{%else%}{% trans 'Tornar este o Dispositivo de Vigência de todo o Texto Articulado.'%}{%endif%}">
DVt
</button>
</div>
{% if not object.ta_publicado%}
<div class="btn-group " role="group">
<button type="button" class="btn-action btn btn-xs radius-right {% if object.pk == object.dispositivo_vigencia_id %}btn-primary{%else%}btn-default{%endif%}" pk="{{object.pk}}" action="json_set_dvt" title="{% if object.pk == object.dispositivo_vigencia_id %}{% trans 'Dispositivo de Vigência Atual'%}{%else%}{% trans 'Tornar este o Dispositivo de Vigência de todo o Texto Articulado.'%}{%endif%}">
DVt
</button>
</div>
{%endif%}
</div>

31
sapl/templates/compilacao/text_edit_bloco.html

@ -6,25 +6,40 @@
<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>
<a class="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">
<a class="btn-action btn-dpt-edit btn btn-warning btn-sm activate" pk="{{node.dpt.pk}}" action="editor-help" data-toggle="modal" data-target="#modal-help"><span class="deactivate"></span><span class="activate"><i class="fa fa-question" aria-hidden="true"></i></span></a>
<a class="btn-dpt-edit btn btn-warning btn-sm activate" pk="{{node.dpt.pk}}" action="editor-help" data-toggle="modal" data-target="#modal-help"><span class="deactivate"></span><span class="activate"><i class="fa fa-question" aria-hidden="true"></i></span></a>
</div>
<div class="btn-group">
<a class="btn-action btn-dpt-edit btn btn-info btn-sm activate" pk="{{node.dpt.pk}}" action="editor-close" title="{% trans 'Fechar Edição' %}"><span class="deactivate"></span><span class="activate"><i class="fa fa-times" aria-hidden="true"></i></span></a>
<a class="btn-dpt-edit btn btn-info btn-sm activate" pk="{{node.dpt.pk}}" action="editor-close" title="{% trans 'Fechar Edição' %}"><span class="deactivate"></span><span class="activate"><i class="fa fa-times" aria-hidden="true"></i></span></a>
</div>
{% if not node.dpt.rotulo and not node.dpt.texto and node.td.dispositivo_de_articulacao%}
{% endif %}
</div>
<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%}">
{% if node.dpt.auto_inserido and node.da%}
{{ node.dpt.dispositivo_pai.tipo_dispositivo.rotulo_prefixo_html|safe }}
{% if node.da and node in node.da.alts %}
<a class="dpt-link link-rotulo" name="{{node.dpt.pk}}" href="{% url 'sapl.compilacao:ta_text_edit' node.dpt.dispositivo_pai.ta_id %}#{{node.dpt.pk}}" title="{% trans 'Abrir editor deste dispositivo em seu Texto Articulado Original'%}">{{ node.dpt.dispositivo_pai.rotulo }}</a>
{% else %}
<a class="dpt-link link-rotulo" name="{{node.dpt.pk}}">{{ node.dpt.dispositivo_pai.rotulo }}</a>
{% endif %}
{{ node.dpt.dispositivo_pai.tipo_dispositivo.rotulo_sufixo_html|safe }}
{{ node.td.rotulo_prefixo_html|safe }}
{% if node.da and node in node.da.alts %}
<a class="dpt-link link-rotulo" name="{{node.dpt.pk}}" href="{% url 'compilacao:ta_text_edit' node.dpt.ta_id %}#{{node.dpt.pk}}" title="{% trans 'Abrir editor deste dispositivo em seu Texto Articulado Original'%}">{{ node.dpt.rotulo }}</a>
{% else %}
<a class="dpt-link link-rotulo" name="{{node.dpt.pk}}">{{ node.dpt.rotulo }}</a>
{{ node.td.rotulo_prefixo_html|safe }}
{% if node.da and node in node.da.alts %}
<a class="dpt-link link-rotulo" name="{{node.dpt.pk}}" href="{% url 'sapl.compilacao:ta_text_edit' node.dpt.ta_id %}#{{node.dpt.pk}}" title="{% trans 'Abrir editor deste dispositivo em seu Texto Articulado Original'%}">{{ node.dpt.rotulo }}</a>
{% else %}
<a class="dpt-link link-rotulo" name="{{node.dpt.pk}}">{{ node.dpt.rotulo }}</a>
{% endif %}
{{ node.td.rotulo_sufixo_html|safe }}
{% endif %}
{{ node.td.rotulo_sufixo_html|safe }}
{{ node.td.texto_prefixo_html|safe }}
{% if node.da and node in node.da.alts and not node.dpt.visibilidade %}<small>({% trans 'Dispositivo visível apenas no Texto Articulado Original'%})</small>{% endif %}

Loading…
Cancel
Save