Browse Source

Merge pull request #483 from interlegis/compilacao

Reposicionamento de Dispositivos alterados
pull/485/head
Leandro Roberto da Silva 9 years ago
parent
commit
f1b87702a6
  1. 29
      compilacao/models.py
  2. 65
      compilacao/views.py
  3. 14
      static/js/compilacao_edit.js
  4. 16
      static/styles/compilacao.scss
  5. 6
      templates/compilacao/text_edit_bloco.html
  6. 5
      templates/compilacao/text_list_bloco.html

29
compilacao/models.py

@ -133,7 +133,7 @@ class TextoArticulado(TimestampedMixin):
'numero': self.numero, 'numero': self.numero,
'data': defaultfilters.date(self.data, "d \d\e F \d\e Y")} 'data': defaultfilters.date(self.data, "d \d\e F \d\e Y")}
def organizar_ordem_de_dispositivos(self): def ordenar_dispositivos(self):
dpts = Dispositivo.objects.filter(ta=self) dpts = Dispositivo.objects.filter(ta=self)
@ -1148,6 +1148,7 @@ class Dispositivo(BaseModel, TimestampedMixin):
dispositivo_base.get_numero_completo()) dispositivo_base.get_numero_completo())
dp.nivel = dispositivo_base.nivel dp.nivel = dispositivo_base.nivel
dp.texto = '' dp.texto = ''
dp.visibilidade = True
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
@ -1203,6 +1204,32 @@ class Dispositivo(BaseModel, TimestampedMixin):
else: else:
dispositivo.set_numero_completo([1, 0, 0, 0, 0, 0, ]) dispositivo.set_numero_completo([1, 0, 0, 0, 0, 0, ])
def ordenar_bloco_alteracao(self):
if not self.tipo_dispositivo.dispositivo_de_articulacao or\
not self.tipo_dispositivo.dispositivo_de_alteracao:
return
filhos = Dispositivo.objects.order_by(
'ordem_bloco_atualizador').filter(
Q(dispositivo_pai_id=self.pk) |
Q(dispositivo_atualizador_id=self.pk))
if not filhos.exists():
return
ordem_max = filhos.last().ordem_bloco_atualizador
filhos.update(
ordem_bloco_atualizador=F('ordem_bloco_atualizador') + ordem_max)
filhos = filhos.values_list(
'pk', flat=True).order_by('ordem_bloco_atualizador')
count = 0
for d in filhos:
count += Dispositivo.INTERVALO_ORDEM
Dispositivo.objects.filter(pk=d).update(
ordem_bloco_atualizador=count)
class Vide(TimestampedMixin): class Vide(TimestampedMixin):
texto = models.TextField(verbose_name=_('Texto do Vide')) texto = models.TextField(verbose_name=_('Texto do Vide'))

65
compilacao/views.py

@ -1,6 +1,6 @@
import sys
from collections import OrderedDict from collections import OrderedDict
from datetime import datetime, timedelta from datetime import datetime, timedelta
import sys
from braces.views import FormMessagesMixin from braces.views import FormMessagesMixin
from django import forms from django import forms
@ -37,6 +37,7 @@ from compilacao.models import (Dispositivo, Nota,
from compilacao.utils import DISPOSITIVO_SELECT_RELATED from compilacao.utils import DISPOSITIVO_SELECT_RELATED
from crud.base import Crud, CrudListView, make_pagination from crud.base import Crud, CrudListView, make_pagination
TipoNotaCrud = Crud.build(TipoNota, 'tipo_nota') TipoNotaCrud = Crud.build(TipoNota, 'tipo_nota')
TipoVideCrud = Crud.build(TipoVide, 'tipo_vide') TipoVideCrud = Crud.build(TipoVide, 'tipo_vide')
TipoPublicacaoCrud = Crud.build(TipoPublicacao, 'tipo_publicacao') TipoPublicacaoCrud = Crud.build(TipoPublicacao, 'tipo_publicacao')
@ -1249,9 +1250,9 @@ class DispositivoSimpleEditView(TextEditView):
if len(result) > 2: if len(result) > 2:
result.pop() result.pop()
if tipb.dispositivo_de_articulacao and\ # if tipb.dispositivo_de_articulacao and\
tipb.dispositivo_de_alteracao: # tipb.dispositivo_de_alteracao:
result.pop() # result.pop()
except Exception as e: except Exception as e:
print(e) print(e)
@ -1337,7 +1338,7 @@ class ActionsEditMixin:
try: try:
with transaction.atomic(): with transaction.atomic():
data['message'] = str(self.remover_dispositivo(base, bloco)) data['message'] = str(self.remover_dispositivo(base, bloco))
ta_base.organizar_ordem_de_dispositivos() ta_base.ordenar_dispositivos()
except Exception as e: except Exception as e:
print(e) print(e)
data['pk'] = context['dispositivo_id'] data['pk'] = context['dispositivo_id']
@ -1859,6 +1860,13 @@ class ActionsEditMixin:
filho.rotulo = filho.rotulo_padrao() filho.rotulo = filho.rotulo_padrao()
filho.save() filho.save()
''' Reordenar bloco atualizador caso a inserção seja
dentro de um bloco de alteração'''
if dp.tipo_dispositivo.dispositivo_de_alteracao and\
not dp.tipo_dispositivo.dispositivo_de_articulacao:
dp.dispositivo_pai.ordenar_bloco_alteracao()
except Exception as e: except Exception as e:
print(e) print(e)
@ -1907,6 +1915,49 @@ class ActionsEditMixin:
return data return data
def move_dpt_alterado(self, context):
bloco = Dispositivo.objects.get(pk=context['bloco_pk'])
dpt = Dispositivo.objects.get(pk=context['dispositivo_id'])
if dpt.tipo_dispositivo.dispositivo_de_alteracao:
dpt.dispositivo_pai = bloco
else:
dpt.dispositivo_atualizador = bloco
filhos = Dispositivo.objects.order_by(
'ordem_bloco_atualizador').filter(
Q(dispositivo_pai_id=bloco.pk) |
Q(dispositivo_atualizador_id=bloco.pk))
if not filhos.exists():
dpt.ordem_bloco_atualizador = Dispositivo.INTERVALO_ORDEM
else:
index = int(context['index'])
fpks = filhos.values_list(
'pk', flat=True).order_by('ordem_bloco_atualizador')
index_dpt = 0
try:
index_dpt = list(fpks).index(dpt.pk)
except:
pass
filho_index = filhos[
index if index_dpt >= index
else index + 1] if (
index if index_dpt >= index
else index + 1) < filhos.count() else filhos.last()
if filhos.last() == filho_index:
dpt.ordem_bloco_atualizador = \
filho_index.ordem_bloco_atualizador + 1
else:
dpt.ordem_bloco_atualizador = \
filho_index.ordem_bloco_atualizador - 1
dpt.save()
bloco.ordenar_bloco_alteracao()
class ActionsEditView(ActionsEditMixin, TemplateView): class ActionsEditView(ActionsEditMixin, TemplateView):
@ -1926,6 +1977,10 @@ class ActionsEditView(ActionsEditMixin, TemplateView):
del self.request.session['herancas'] del self.request.session['herancas']
del self.request.session['herancas_fila'] del self.request.session['herancas_fila']
if context['action'] == 'move_dpt_alterado':
context['index'] = self.request.GET['index']
context['bloco_pk'] = self.request.GET['bloco_pk']
return self.render_to_json_response(context, **response_kwargs) return self.render_to_json_response(context, **response_kwargs)

14
static/js/compilacao_edit.js

@ -268,9 +268,13 @@ function reloadFunctionClicks() {
revert: true, revert: true,
stop: function( event, ui ) { stop: function( event, ui ) {
var pk = ui.item.attr('pk'); var pk = ui.item.attr('pk');
var pk_bloco = ui.item.closest('.bloco').closest('.dpt').attr('pk'); var bloco_pk = ui.item.closest('.bloco').closest('.dpt').attr('pk');
console.log(pk+ ' - '+ pk_bloco);
}, url = pk+'/actions?action=move_dpt_alterado&index='+ui.item.index()+'&bloco_pk='+bloco_pk;
$.get(url).done(function( data ) {
console.log(pk+ ' - '+ bloco_pk);
});
}
}); });
$( ".bloco_alteracao .dpt" ).draggable({ $( ".bloco_alteracao .dpt" ).draggable({
@ -278,10 +282,10 @@ function reloadFunctionClicks() {
revert: 'invalid', revert: 'invalid',
zIndex: 1, zIndex: 1,
drag: function( event, ui ) { drag: function( event, ui ) {
$( ".bloco_alteracao" ).css('border-width', '2px'); $( ".bloco_alteracao" ).addClass('drag');
}, },
stop: function( event, ui ) { stop: function( event, ui ) {
$( ".bloco_alteracao" ).css('border-width', '0px'); $( ".bloco_alteracao" ).removeClass('drag');
}, },
}); });

16
static/styles/compilacao.scss

@ -524,9 +524,9 @@ a:link:after, a:visited:after {
.caput { .caput {
margin-top: 0; margin-top: 0;
} }
& > .actions_left { & > .actions_right {
color: #fff; color: #fff;
left: 0em; right: 0em;
position: absolute; position: absolute;
opacity: 0; opacity: 0;
transition: all 0.4s ease-in-out; transition: all 0.4s ease-in-out;
@ -542,7 +542,7 @@ a:link:after, a:visited:after {
} }
} }
&:hover > .actions_left { &:hover > .actions_right {
opacity: 1; opacity: 1;
} }
@ -565,7 +565,13 @@ a:link:after, a:visited:after {
padding: 0em ; padding: 0em ;
background-color: transparent; background-color: transparent;
min-height: 100px; min-height: 100px;
border: 0px dashed #d9ddde; border: 2px dashed #fff;
&:hover {
border-color: #d9ddde;
}
&.drag {
border-color: #d9ddde;
}
.dpt { .dpt {
width: 100% !important; width: 100% !important;
box-shadow: 0 -1px 0 #e5e5e5, 0 0 2px rgba(0,0,0,.12),0 2px 4px rgba(0,0,0,.24); box-shadow: 0 -1px 0 #e5e5e5, 0 0 2px rgba(0,0,0,.12),0 2px 4px rgba(0,0,0,.24);
@ -636,7 +642,7 @@ a:link:after, a:visited:after {
} }
} }
& > .actions_left { & > .actions_right {
display: none; display: none;
} }

6
templates/compilacao/text_edit_bloco.html

@ -3,6 +3,8 @@
{% load common_tags %} {% load common_tags %}
{% for dpt in object_list %} {% for dpt in object_list %}
{% if dpt.tipo_dispositivo.dispositivo_de_alteracao and not dpt.tipo_dispositivo.dispositivo_de_articulacao%}
{% else %}
{% if dpt.nivel == view.flag_nivel_old %} {% if dpt.nivel == view.flag_nivel_old %}
</div> </div>
{% elif dpt.nivel < view.flag_nivel_old %} {% elif dpt.nivel < view.flag_nivel_old %}
@ -124,7 +126,7 @@
{% if view.pk_view == 0 and view.pk_edit == 0 or view.pk_edit != view.pk_view %} {% if view.pk_view == 0 and view.pk_edit == 0 or view.pk_edit != view.pk_view %}
{% if not dpt.rotulo and not dpt.texto and dpt.tipo_dispositivo.dispositivo_de_articulacao%} {% if not dpt.rotulo and not dpt.texto and dpt.tipo_dispositivo.dispositivo_de_articulacao%}
<div class="btns-action actions_left"> <div class="btns-action actions_right">
<a class="btn-edit" pk="{{dpt.pk}}">{% trans 'Editar'%} {{ dpt.tipo_dispositivo.nome }} {{ dpt.rotulo }}</a> <a class="btn-edit" pk="{{dpt.pk}}">{% trans 'Editar'%} {{ dpt.tipo_dispositivo.nome }} {{ dpt.rotulo }}</a>
</div> </div>
{% endif %} {% endif %}
@ -150,7 +152,7 @@
{% endif%} {% endif%}
{% set_nivel_old view dpt.nivel %} {% set_nivel_old view dpt.nivel %}
{% endif%}
{% endfor %} {% endfor %}
{% if view|isinst:'DispositivoSimpleEditView' %} {% if view|isinst:'DispositivoSimpleEditView' %}

5
templates/compilacao/text_list_bloco.html

@ -3,6 +3,8 @@
{% load common_tags %} {% load common_tags %}
{% for dpt in object_list %} {% for dpt in object_list %}
{% if dpt.tipo_dispositivo.dispositivo_de_alteracao and not dpt.tipo_dispositivo.dispositivo_de_articulacao%}
{% else %}
{% if dpt.nivel == view.flag_nivel_old %} {% if dpt.nivel == view.flag_nivel_old %}
</div> </div>
{% elif dpt.nivel < view.flag_nivel_old %} {% elif dpt.nivel < view.flag_nivel_old %}
@ -11,7 +13,7 @@
{% if forloop.first and not view|isinst:'TextView' %} {% if forloop.first and not view|isinst:'TextView' %}
{% else %} {% else %}
<div class="dpt {%if dpt.tipo_dispositivo.class_css == 'bloco_alteracao'%}bloco_alteracao{% endif %}" nivel="{{dpt.nivel}}"> <div class="dpt {%if dpt.tipo_dispositivo.dispositivo_de_articulacao and dpt.tipo_dispositivo.dispositivo_de_alteracao%}{{dpt.tipo_dispositivo.class_css}}{% endif %}" nivel="{{dpt.nivel}}">
{% endif%} {% endif%}
{% spaceless %} {% spaceless %}
@ -169,6 +171,7 @@
{%endwith%} {%endwith%}
{% endif%} {% endif%}
{% set_nivel_old view dpt.nivel %} {% set_nivel_old view dpt.nivel %}
{% endif %}
{% endfor %} {% endfor %}
{% if not view|isinst:'TextView' %} {% if not view|isinst:'TextView' %}

Loading…
Cancel
Save