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 = [] btns_excluir = []
if not inst.tipo_dispositivo.dispositivo_de_alteracao and \ if not (inst.tipo_dispositivo.dispositivo_de_alteracao and
not inst.tipo_dispositivo.dispositivo_de_articulacao: inst.tipo_dispositivo.dispositivo_de_articulacao):
btns_excluir = [ btns_excluir = [
HTML('<a class="btn btn-danger btn-excluir" ' HTML('<a class="btn btn-danger btn-excluir" '
'action="json_delete_item_dispositivo" ' 'action="json_delete_item_dispositivo" '
@ -647,7 +647,8 @@ class DispositivoEdicaoBasicaForm(ModelForm):
inst.pk, inst.pk,
_('Excluir Dispositivo')))] _('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_alteracao and
inst.tipo_dispositivo.dispositivo_de_articulacao): inst.tipo_dispositivo.dispositivo_de_articulacao):
btns_excluir.append( btns_excluir.append(
@ -661,7 +662,7 @@ class DispositivoEdicaoBasicaForm(ModelForm):
inst.pk, inst.pk,
_('Excluir Bloco de Dispositivo.')))) _('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' css_class = 'btn-group pull-right btns-excluir'
more.append(Div(*btns_excluir, css_class=css_class)) 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.nivel = dispositivo_base.nivel
dp.texto = '' dp.texto = ''
dp.visibilidade = True dp.visibilidade = True
dp.auto_inserido = dispositivo_base.auto_inserido
dp.ta = dispositivo_base.ta dp.ta = dispositivo_base.ta
dp.dispositivo_pai = dispositivo_base.dispositivo_pai dp.dispositivo_pai = dispositivo_base.dispositivo_pai
dp.publicacao = dispositivo_base.publicacao dp.publicacao = dispositivo_base.publicacao

54
sapl/compilacao/views.py

@ -1041,12 +1041,13 @@ class TextEditView(TemplateView):
class ActionsCommonsMixin: class ActionsCommonsMixin:
def set_message(self, data, _type, message, time=None): def set_message(self, data, _type, message, time=None, modal=False):
data['message'] = { data['message'] = {
'type': _type, 'type': _type,
'value': str(message)} 'value': str(message)}
if time: if time:
data['message']['time'] = time data['message']['time'] = time
data['message']['modal'] = modal
return return
def get_json_for_refresh(self, dp, dpauto=None): def get_json_for_refresh(self, dp, dpauto=None):
@ -1172,14 +1173,14 @@ class ActionDeleteDispositivoMixin(ActionsCommonsMixin):
with transaction.atomic(): with transaction.atomic():
message = str(self.remover_dispositivo(base, bloco)) message = str(self.remover_dispositivo(base, bloco))
if message: if message:
self.set_message(data, 'warning', message) self.set_message(data, 'warning', message, modal=True)
else: else:
self.set_message(data, 'success', _( self.set_message(data, 'success', _(
'Exclusão efetuada com sucesso!')) 'Exclusão efetuada com sucesso!'), modal=True)
ta_base.ordenar_dispositivos() ta_base.ordenar_dispositivos()
except Exception as e: except Exception as e:
data['pk'] = self.kwargs['dispositivo_id'] data['pk'] = self.kwargs['dispositivo_id']
self.set_message(data, 'danger', str(e)) self.set_message(data, 'danger', str(e), modal=True)
return data return data
@ -1765,23 +1766,6 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin):
else: else:
raise Exception('Não existe perfil padrão!') 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_irmao = None
dp_pai = None dp_pai = None
for dp in parents: for dp in parents:
@ -1847,7 +1831,7 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin):
return data return data
ordem = base.criar_espaco( 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.rotulo = dp.rotulo_padrao()
dp.ordem = ordem dp.ordem = ordem
@ -1856,9 +1840,32 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin):
dp.publicacao = pub_last dp.publicacao = pub_last
dp.save() 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 # Inserção automática
if count_auto_insert: if count_auto_insert:
ordem = dp.criar_espaco(
espaco_a_criar=count_auto_insert, local=local_add)
dp_pk = dp.pk dp_pk = dp.pk
dp.ordem = ordem
dp.nivel += 1 dp.nivel += 1
for tipoauto in tipos_dp_auto_insert: for tipoauto in tipos_dp_auto_insert:
dp.dispositivo_pai_id = dp_pk dp.dispositivo_pai_id = dp_pk
@ -1870,12 +1877,13 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin):
dp.set_numero_completo([1, 0, 0, 0, 0, 0, ]) dp.set_numero_completo([1, 0, 0, 0, 0, 0, ])
dp.rotulo = dp.rotulo_padrao() dp.rotulo = dp.rotulo_padrao()
dp.texto = '' dp.texto = ''
dp.ordem = dp.ordem + Dispositivo.INTERVALO_ORDEM
dp.publicacao = pub_last dp.publicacao = pub_last
dp.auto_inserido = True dp.auto_inserido = True
dp.save() dp.save()
dp_auto_insert = dp dp_auto_insert = dp
ordem += Dispositivo.INTERVALO_ORDEM
dp = Dispositivo.objects.get(pk=dp_pk) dp = Dispositivo.objects.get(pk=dp_pk)
''' Reenquadrar todos os dispositivos que possuem pai ''' 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) { $.get(url, form_data).done(function(data) {
instance.clearEditSelected(); instance.clearEditSelected();
instance.waitHide();
if (data.pk != null) { if (data.pk != null) {
if (data.message !== undefined) { if (data.message !== undefined) {
if (data.message.type == 'danger') if (data.message.modal) {
instance.modalMessage(data.message.value, 'alert-'+data.message.type, null); instance.modalMessage(data.message.value, 'alert-'+data.message.type, function() {
instance.waitShow();
instance.refreshScreenFocusPk(data);
});
return;
}
else { else {
instance.message(data) instance.message(data)
} }
} }
instance.refreshScreenFocusPk(data); instance.refreshScreenFocusPk(data);
} }
}).fail(instance.waitHide) }).fail(instance.waitHide).always(instance.waitHide);
.always(instance.waitHide);
} }
instance.clearEditSelected = function() { instance.clearEditSelected = function() {

13
sapl/templates/compilacao/ajax_actions_dinamic_edit.html

@ -61,10 +61,11 @@
{% endfor %} {% endfor %}
{%endif%} {%endif%}
</div> </div>
{% if not object.ta_publicado%}
<div class="btn-group " role="group"> <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%}"> <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 DVt
</button> </button>
</div> </div>
{%endif%}
</div> </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" 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"></div>
<div class="dpt-actions-fixed"> <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"> <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>
<div class="btn-group"> <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> </div>
{% if not node.dpt.rotulo and not node.dpt.texto and node.td.dispositivo_de_articulacao%} {% if not node.dpt.rotulo and not node.dpt.texto and node.td.dispositivo_de_articulacao%}
{% endif %} {% endif %}
</div> </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%}"> <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 %} {% 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 %} {% endif %}
{{ node.td.rotulo_sufixo_html|safe }}
{{ node.td.texto_prefixo_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 %} {% 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