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,
'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)
@ -1148,6 +1148,7 @@ class Dispositivo(BaseModel, TimestampedMixin):
dispositivo_base.get_numero_completo())
dp.nivel = dispositivo_base.nivel
dp.texto = ''
dp.visibilidade = True
dp.ta = dispositivo_base.ta
dp.dispositivo_pai = dispositivo_base.dispositivo_pai
dp.publicacao = dispositivo_base.publicacao
@ -1203,6 +1204,32 @@ class Dispositivo(BaseModel, TimestampedMixin):
else:
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):
texto = models.TextField(verbose_name=_('Texto do Vide'))

65
compilacao/views.py

@ -1,6 +1,6 @@
import sys
from collections import OrderedDict
from datetime import datetime, timedelta
import sys
from braces.views import FormMessagesMixin
from django import forms
@ -37,6 +37,7 @@ from compilacao.models import (Dispositivo, Nota,
from compilacao.utils import DISPOSITIVO_SELECT_RELATED
from crud.base import Crud, CrudListView, make_pagination
TipoNotaCrud = Crud.build(TipoNota, 'tipo_nota')
TipoVideCrud = Crud.build(TipoVide, 'tipo_vide')
TipoPublicacaoCrud = Crud.build(TipoPublicacao, 'tipo_publicacao')
@ -1249,9 +1250,9 @@ class DispositivoSimpleEditView(TextEditView):
if len(result) > 2:
result.pop()
if tipb.dispositivo_de_articulacao and\
tipb.dispositivo_de_alteracao:
result.pop()
# if tipb.dispositivo_de_articulacao and\
# tipb.dispositivo_de_alteracao:
# result.pop()
except Exception as e:
print(e)
@ -1337,7 +1338,7 @@ class ActionsEditMixin:
try:
with transaction.atomic():
data['message'] = str(self.remover_dispositivo(base, bloco))
ta_base.organizar_ordem_de_dispositivos()
ta_base.ordenar_dispositivos()
except Exception as e:
print(e)
data['pk'] = context['dispositivo_id']
@ -1859,6 +1860,13 @@ class ActionsEditMixin:
filho.rotulo = filho.rotulo_padrao()
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:
print(e)
@ -1907,6 +1915,49 @@ class ActionsEditMixin:
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):
@ -1926,6 +1977,10 @@ class ActionsEditView(ActionsEditMixin, TemplateView):
del self.request.session['herancas']
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)

14
static/js/compilacao_edit.js

@ -268,9 +268,13 @@ function reloadFunctionClicks() {
revert: true,
stop: function( event, ui ) {
var pk = ui.item.attr('pk');
var pk_bloco = ui.item.closest('.bloco').closest('.dpt').attr('pk');
console.log(pk+ ' - '+ pk_bloco);
},
var bloco_pk = ui.item.closest('.bloco').closest('.dpt').attr('pk');
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({
@ -278,10 +282,10 @@ function reloadFunctionClicks() {
revert: 'invalid',
zIndex: 1,
drag: function( event, ui ) {
$( ".bloco_alteracao" ).css('border-width', '2px');
$( ".bloco_alteracao" ).addClass('drag');
},
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 {
margin-top: 0;
}
& > .actions_left {
& > .actions_right {
color: #fff;
left: 0em;
right: 0em;
position: absolute;
opacity: 0;
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;
}
@ -565,7 +565,13 @@ a:link:after, a:visited:after {
padding: 0em ;
background-color: transparent;
min-height: 100px;
border: 0px dashed #d9ddde;
border: 2px dashed #fff;
&:hover {
border-color: #d9ddde;
}
&.drag {
border-color: #d9ddde;
}
.dpt {
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);
@ -636,7 +642,7 @@ a:link:after, a:visited:after {
}
}
& > .actions_left {
& > .actions_right {
display: none;
}

6
templates/compilacao/text_edit_bloco.html

@ -3,6 +3,8 @@
{% load common_tags %}
{% 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 %}
</div>
{% 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 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>
</div>
{% endif %}
@ -150,7 +152,7 @@
{% endif%}
{% set_nivel_old view dpt.nivel %}
{% endif%}
{% endfor %}
{% if view|isinst:'DispositivoSimpleEditView' %}

5
templates/compilacao/text_list_bloco.html

@ -3,6 +3,8 @@
{% load common_tags %}
{% 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 %}
</div>
{% elif dpt.nivel < view.flag_nivel_old %}
@ -11,7 +13,7 @@
{% if forloop.first and not view|isinst:'TextView' %}
{% 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%}
{% spaceless %}
@ -169,6 +171,7 @@
{%endwith%}
{% endif%}
{% set_nivel_old view dpt.nivel %}
{% endif %}
{% endfor %}
{% if not view|isinst:'TextView' %}

Loading…
Cancel
Save