Browse Source

Construction and structural editing norms

pull/10/head
LeandroRoberto 9 years ago
parent
commit
e071c01260
  1. 23
      compilacao/migrations/0009_auto_20151007_1635.py
  2. 9
      compilacao/models.py
  3. 6
      compilacao/templatetags/compilacao_filters.py
  4. 51
      compilacao/views.py
  5. 18
      static/styles/compilacao.scss
  6. 16
      templates/compilacao/edit.html
  7. 6
      templates/compilacao/edit_bloco.html
  8. 26
      templates/compilacao/index.html

23
compilacao/migrations/0009_auto_20151007_1635.py

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0008_auto_20151005_1023'),
]
operations = [
migrations.AlterField(
model_name='tipodispositivo',
name='rotulo_ordinal',
field=models.IntegerField(choices=[(0, 'Numeração Cardinal.'), (-1, 'Numeração Ordinal.'), (9, 'Numeração Ordinal até o item nove.')], verbose_name='Tipo de número do rótulo'),
),
migrations.AlterUniqueTogether(
name='dispositivo',
unique_together=set([('norma', 'ordem'), ('norma', 'dispositivo0', 'dispositivo1', 'dispositivo2', 'dispositivo3', 'dispositivo4', 'dispositivo5', 'tipo_dispositivo', 'dispositivo_pai', 'norma_publicada', 'publicacao')]),
),
]

9
compilacao/models.py

@ -453,10 +453,11 @@ class Dispositivo(BaseModel):
if len(prefixo) > 1: if len(prefixo) > 1:
if for_insertion and \ if (for_insertion and
d_base_for_insertion is not None and \ d_base_for_insertion is not None and
d_base_for_insertion.pk != self.pk and \ d_base_for_insertion.pk != self.pk and
d_base_for_insertion.tipo_dispositivo.pk <= t.pk: d_base_for_insertion.tipo_dispositivo.pk <= t.pk) or \
for_insertion and d_base_for_insertion is None:
count_irmaos_mesmo_tipo = Dispositivo.objects.filter( count_irmaos_mesmo_tipo = Dispositivo.objects.filter(
tipo_dispositivo=self.tipo_dispositivo, tipo_dispositivo=self.tipo_dispositivo,

6
compilacao/templatetags/compilacao_filters.py

@ -82,11 +82,7 @@ def render_actions_head(view, d_atual):
if view.__class__.__name__ != 'DispositivoEditView': if view.__class__.__name__ != 'DispositivoEditView':
return False return False
# Apenas Menu actions head # Menu
if view.pk_add == 0 and d_atual.pk == view.pk_view:
return True
# Menu e conteudo
if view.pk_view == view.pk_add and d_atual.pk == view.pk_view: if view.pk_view == view.pk_add and d_atual.pk == view.pk_view:
return True return True

51
compilacao/views.py

@ -271,7 +271,7 @@ class CompilacaoEditView(CompilacaoView):
).select_related(*DISPOSITIVO_SELECT_RELATED) ).select_related(*DISPOSITIVO_SELECT_RELATED)
class DispositivoEditView(DispositivoView): class DispositivoEditView(CompilacaoEditView):
template_name = 'compilacao/edit_bloco.html' template_name = 'compilacao/edit_bloco.html'
def get_queryset(self): def get_queryset(self):
@ -405,7 +405,8 @@ class DispositivoEditView(DispositivoView):
for mudarnivel in [1, 0]: for mudarnivel in [1, 0]:
if mudarnivel: if mudarnivel:
# Outros Tipos de Dispositivos PARA DENTRO # Outros Tipos de Dispositivos PARA DENTRO
otds = TipoDispositivo.objects.order_by('-contagem_continua', 'id').filter( otds = TipoDispositivo.objects.order_by(
'-contagem_continua', 'id').filter(
Q(id__gt=100) & Q(id__gt=d_base.tipo_dispositivo_id)) Q(id__gt=100) & Q(id__gt=d_base.tipo_dispositivo_id))
else: else:
# Outros Tipos de Dispositivos PARA FORA # Outros Tipos de Dispositivos PARA FORA
@ -413,22 +414,36 @@ class DispositivoEditView(DispositivoView):
for c in result[0]['itens']: for c in result[0]['itens']:
if c['class_css'] not in classes_ja_inseridas: if c['class_css'] not in classes_ja_inseridas:
classes_ja_inseridas.append(c['class_css']) classes_ja_inseridas.append(c['class_css'])
otds = TipoDispositivo.objects.order_by('-contagem_continua', 'id').filter( otds = TipoDispositivo.objects.order_by(
'-contagem_continua', 'id').filter(
id__gt=100, id__gt=100,
id__lt=d_base.tipo_dispositivo_id).exclude( id__lt=d_base.tipo_dispositivo_id).exclude(
class_css__in=classes_ja_inseridas) class_css__in=classes_ja_inseridas)
for td in otds: for td in otds:
if (tipb.class_css == 'caput' and if td.class_css == 'caput' or (tipb.class_css == 'caput' and
td.class_css == 'paragrafo'): td.class_css == 'paragrafo'):
continue continue
d_base.tipo_dispositivo = td d_base.tipo_dispositivo = td
disps = Dispositivo.objects.filter( if td.contagem_continua:
tipo_dispositivo_id=td.pk, disps = Dispositivo.objects.filter(
dispositivo_pai_id=d_base.pk).aggregate( tipo_dispositivo_id=td.pk,
ordem__lte=d_base.ordem,
norma_id=d_base.norma_id).aggregate(
Max('dispositivo0'),
Max('dispositivo1'),
Max('dispositivo2'),
Max('dispositivo3'),
Max('dispositivo4'),
Max('dispositivo5'))
else:
disps = Dispositivo.objects.filter(
tipo_dispositivo_id=td.pk,
dispositivo_pai_id=d_base.pk).aggregate(
Max('dispositivo0'), Max('dispositivo0'),
Max('dispositivo1'), Max('dispositivo1'),
Max('dispositivo2'), Max('dispositivo2'),
@ -464,14 +479,14 @@ class DispositivoEditView(DispositivoView):
if mudarnivel == 1: if mudarnivel == 1:
result[1]['itens'] += r result[1]['itens'] += r
else: else:
if td.pk < tipb.pk and td.class_css != 'caput': if td.pk < tipb.pk:
result[2]['itens'] += r result[2]['itens'] += r
result[0]['itens'] += r result[0]['itens'] += r
# retira inserir após e inserir antes # retira inserir após e inserir antes
if tipb.class_css == 'caput': if tipb.class_css == 'caput':
result.pop() result.pop()
result.remove(result[0]) # result.remove(result[0])
if tipb.class_css == 'articulacao': if tipb.class_css == 'articulacao':
r = result[0] r = result[0]
@ -816,10 +831,18 @@ class ActionsEditMixin(object):
pkfilho = dp.pk pkfilho = dp.pk
dp = dp.dispositivo_pai dp = dp.dispositivo_pai
parents = Dispositivo.objects.filter( if proxima_articulacao is not None and \
norma_id=dp.norma_id, proxima_articulacao.exists():
ordem__gte=dp.ordem, parents = Dispositivo.objects.filter(
nivel__lte=dp.nivel) norma_id=dp.norma_id,
ordem__gte=dp.ordem,
ordem__lt=proxima_articulacao[0].ordem,
nivel__lte=dp.nivel)
else:
parents = Dispositivo.objects.filter(
norma_id=dp.norma_id,
ordem__gte=dp.ordem,
nivel__lte=dp.nivel)
nivel = sys.maxsize nivel = sys.maxsize
for p in parents: for p in parents:

18
static/styles/compilacao.scss

@ -2,7 +2,7 @@
#message_block { #message_block {
display: none; display: block;
position: fixed; position: fixed;
top: 0; top: 0;
bottom: 0; bottom: 0;
@ -14,7 +14,7 @@
#message_block #msg{ #message_block #msg{
position: relative; position: relative;
margin: 25% auto; margin: 20% auto;
padding: 1.2em 2em; padding: 1.2em 2em;
max-width: 600px; max-width: 600px;
text-align: center; text-align: center;
@ -152,7 +152,7 @@
} }
.dispositivo .bloco_alteracao { .dispositivo .bloco_alteracao {
padding-left: 5em; padding-left: 10%;
font-style: italic; font-style: italic;
} }
@ -330,7 +330,8 @@
.compilacaoedit .editclick { .compilacaoedit .editclick {
border: 2.1em solid #eee; border: 2.1em solid #eee;
padding: 1em; padding: 1em;
padding-bottom: 0em;
margin: 1em -2em 1em -2.8em; margin: 1em -2em 1em -2.8em;
z-index: 1; z-index: 1;
background-color: #fff !important; background-color: #fff !important;
@ -532,6 +533,15 @@
width: 0; width: 0;
} }
@media only screen and (max-width: 40.0625em) {
.compilacao .fixed{
z-index:98;
position: relative;
}
}
@media print { @media print {

16
templates/compilacao/edit.html

@ -17,7 +17,7 @@ $(document).ready(function() {
var flag_add_next_pai = 0 var flag_add_next_pai = 0
clickEditDispositivo = function(event) { clickEditDispositivo = function(event) {
var _pk = event.target.getAttribute('pk'); var _pk = event.currentTarget.getAttribute('pk');
if ($('#de'+_pk).hasClass("editclick")) { if ($('#de'+_pk).hasClass("editclick")) {
@ -38,7 +38,7 @@ $(document).ready(function() {
var _tipo_pk = ''; var _tipo_pk = '';
if (event != null) { if (event != null) {
_pk = event.target.getAttribute('pk'); _pk = event.currentTarget.getAttribute('pk');
_action = $(this).attr('action'); _action = $(this).attr('action');
_variacao = $(this).attr('variacao'); _variacao = $(this).attr('variacao');
_tipo_pk = $(this).attr('tipo_pk'); _tipo_pk = $(this).attr('tipo_pk');
@ -50,14 +50,12 @@ $(document).ready(function() {
var url = '' var url = ''
if (_action == '') if (_action == '')
return return
else if (_action == 'refresh' || typeof _action == 'undefined') else if (_action == 'refresh' || _action == null)
url = _pk+'/refresh?pkadd='+flag_add_next_pk; url = _pk+'/refresh?pkadd='+flag_add_next_pk;
else { else {
url = _pk+'/actions?action='+_action; url = _pk+'/actions?action='+_action;
url += '&tipo_pk='+_tipo_pk; url += '&tipo_pk='+_tipo_pk;
url += '&variacao='+_variacao; url += '&variacao='+_variacao;
if (typeof addeditclick == 'undefined' || addeditclick) { if (typeof addeditclick == 'undefined' || addeditclick) {
$("#message_block").css("display", "block"); $("#message_block").css("display", "block");
} }
@ -69,7 +67,7 @@ $(document).ready(function() {
if (addeditclick) if (addeditclick)
clearEditClick(); clearEditClick();
if (_action == 'refresh' || typeof _action == 'undefined') { if (_action == 'refresh' || _action == null) {
if (flag_add_next) { if (flag_add_next) {
@ -86,7 +84,7 @@ $(document).ready(function() {
if (typeof addeditclick == 'undefined' || addeditclick) { if (typeof addeditclick == 'undefined' || addeditclick) {
$('#de'+flag_add_next_pk).addClass('editclick'); $('#de'+flag_add_next_pk).addClass('editclick');
$('html, body').animate({ $('html, body').animate({
scrollTop: $('#de' + flag_add_next_pk ).offset().top - window.innerHeight / 3 scrollTop: $('#de' + flag_add_next_pk ).offset().top - window.innerHeight / 10
}, 300); }, 300);
flag_add_next_pk = 0; flag_add_next_pk = 0;
} }
@ -112,7 +110,7 @@ $(document).ready(function() {
location.reload(true) location.reload(true)
} }
else { else {
alert('TODO: Inserção com renumeração '); alert('Erro na inserção!');
flag_add_next_pk = 0; flag_add_next_pk = 0;
flag_add_next = false; flag_add_next = false;
} }
@ -142,7 +140,7 @@ function reloadFunctionClicks() {
} }
reloadFunctionClicks(); reloadFunctionClicks();
$("#message_block").css("display", "none");
}); });

6
templates/compilacao/edit_bloco.html

@ -27,9 +27,7 @@
{% endfor %} {% endfor %}
<li class="right"><a class="btn-action" pk="{{dispositivo.pk}}" action="refresh" title="Atualizar bloco...">A</a></li> <li class="right"><a class="btn-action" pk="{{dispositivo.pk}}" action="refresh" title="TODO: Aumentar nível do Dispositivo">&gt;</a></li>
<li class="right"><a class="btn-action" pk="{{dispositivo.pk}}" action="refresh" title="TODO: Aumentar nível do Dispositivo">&gt;</a></li>
<li class="right"><a class="btn-action" pk="{{dispositivo.pk}}" action="refresh" title="TODO: Reduzir nível do Dispositivo">&lt;</a></li> <li class="right"><a class="btn-action" pk="{{dispositivo.pk}}" action="refresh" title="TODO: Reduzir nível do Dispositivo">&lt;</a></li>
<li class="right"><a class="btn-action" pk="{{dispositivo.pk}}" action="refresh" title="TODO: Descer uma posição">&#8595;</a></li> <li class="right"><a class="btn-action" pk="{{dispositivo.pk}}" action="refresh" title="TODO: Descer uma posição">&#8595;</a></li>
<li class="right"><a class="btn-action" pk="{{dispositivo.pk}}" action="refresh" title="TODO: Subir uma posição">&#8593;</a></li> <li class="right"><a class="btn-action" pk="{{dispositivo.pk}}" action="refresh" title="TODO: Subir uma posição">&#8593;</a></li>
@ -51,7 +49,7 @@
{% endif%} {% endif%}
{% if view.pk_view == 0 and view.pk_add == 0 or view.pk_add != view.pk_view%} {% if view.pk_view == 0 and view.pk_add == 0 or view.pk_add != view.pk_view %}
<div class="actions"> <div class="actions">
<a class="btn-action" pk="{{dispositivo.pk}}" title="Edição do dispositivo: {{ dispositivo.tipo_dispositivo.nome }} {{ dispositivo.rotulo }}">E</a> <a class="btn-action" pk="{{dispositivo.pk}}" title="Edição do dispositivo: {{ dispositivo.tipo_dispositivo.nome }} {{ dispositivo.rotulo }}">E</a>

26
templates/compilacao/index.html

@ -19,9 +19,11 @@ $( window ).scroll(function() {
$(window).load(function() { $(window).load(function() {
setTimeout(function() { setTimeout(function() {
height = $( "section.vigencias" ).height() height = $( "section.vigencias" ).height();
window.scrollTo(0, window.pageYOffset - height - 36 ); $('html, body').animate({
}, 1000); scrollTop: window.pageYOffset - height - 36
}, 300);
}, 100);
}); });
function textoMultiVigente(item) { function textoMultiVigente(item) {
@ -38,14 +40,28 @@ function textoVigente(item, link) {
if (!link) if (!link)
$(".link_alterador").addClass("displaynone"); $(".link_alterador").addClass("displaynone");
} }
$(document).ready(function() {
$("#btn_font_menos").click(function() {
$(".dispositivo").css("font-size", "-=1");
});
$("#btn_font_mais").click(function() {
$(".dispositivo").css("font-size", "+=1");
});
});
</script> </script>
<div class="compilacao"> <div class="compilacao">
<div style="float: right; clear:right;"> <div style="float: right; clear:right;">
<a title="TODO: diminuir fonte... basta manipular font-size da classe css dispositivo">---</a> <a id="btn_font_menos" title="Diminuir tamanho da letra">a</a>
<a title="TODO: aumentar fonte... basta manipular font-size da classe css dispositivo">+++</a> <a id="btn_font_mais" title="Aumentar tamanho da Letra">A</a>
</div> </div>
{% for key, values in view.get_vigencias.items %} {% for key, values in view.get_vigencias.items %}

Loading…
Cancel
Save