Browse Source

Merge pull request #469 from interlegis/compilacao

Front-end alternância de dispositivos alterados.
pull/473/head
Leandro Roberto da Silva 9 years ago
parent
commit
acb7b6c09e
  1. 38
      compilacao/forms.py
  2. 2
      compilacao/templatetags/compilacao_filters.py
  3. 10
      compilacao/views.py
  4. 4
      materia/migrations/0032_merge.py
  5. 4
      parlamentares/views.py
  6. 30
      static/js/compilacao_edit.js
  7. 72
      static/styles/compilacao.scss
  8. 6
      templates/compilacao/text_edit_bloco.html
  9. 5
      templates/compilacao/text_edit_blocoalteracao.html
  10. 1
      templates/compilacao/text_list.html
  11. 4
      templates/compilacao/text_notificacoes.html
  12. 2
      templates/compilacao/textoarticulado_detail.html

38
compilacao/forms.py

@ -980,43 +980,41 @@ class DispositivoEdicaoAlteracaoForm(ModelForm):
(inst.dispositivo_atualizador.pk, (inst.dispositivo_atualizador.pk,
inst.dispositivo_atualizador)] inst.dispositivo_atualizador)]
def clean_dispositivo_substituido(self): def clean(self):
dst = self.cleaned_data['dispositivo_substituido'] """os cleans individuais do framework não puderam ser usados devido
a última validação compor dois valores
"""
data = self.cleaned_data
dst = data['dispositivo_substituido']
dsq = data['dispositivo_subsequente']
da = data['dispositivo_atualizador']
if dst == self.instance:
raise ValidationError(_('Não é permitido selecionar o próprio '
'Dispositivo como seu substituto.'))
if dst and dst.ta != self.instance.ta: if dst and dst.ta != self.instance.ta:
raise ValidationError(_('Não é permitido selecionar um ' raise ValidationError(_('Não é permitido selecionar um '
'Dispositivo de outro Texto Articulado.')) 'Dispositivo de outro Texto Articulado.'))
if dst and dst.tipo_dispositivo != self.instance.tipo_dispositivo: if dst and dst.tipo_dispositivo != self.instance.tipo_dispositivo:
raise ValidationError(_('Não é permitido selecionar um ' raise ValidationError(_('Não é permitido selecionar um '
'Dispositivo de outro Tipo.')) 'Dispositivo de outro Tipo.'))
return dst
def clean_dispositivo_subsequente(self):
dsq = self.cleaned_data['dispositivo_subsequente']
if dsq == self.instance:
raise ValidationError(_('Não é permitido selecionar o próprio '
'Dispositivo como seu subsequente.'))
if dsq and dsq.ta != self.instance.ta: if dsq and dsq.ta != self.instance.ta:
raise ValidationError(_('Não é permitido selecionar um ' raise ValidationError(_('Não é permitido selecionar um '
'Dispositivo de outro Texto Articulado.')) 'Dispositivo de outro Texto Articulado.'))
if dsq and dsq.tipo_dispositivo != self.instance.tipo_dispositivo: if dsq and dsq.tipo_dispositivo != self.instance.tipo_dispositivo:
raise ValidationError(_('Não é permitido selecionar um ' raise ValidationError(_('Não é permitido selecionar um '
'Dispositivo de outro Tipo.')) 'Dispositivo de outro Tipo.'))
return dsq
def clean_dispositivo_atualizador(self):
da = self.cleaned_data['dispositivo_atualizador']
if da and not da.tipo_dispositivo.dispositivo_de_alteracao and\ if da and not (da.tipo_dispositivo.dispositivo_de_alteracao and
not da.tipo_dispositivo.dispositivo_de_articulacao: da.tipo_dispositivo.dispositivo_de_articulacao):
raise ValidationError(_('O Dispositivo de Atualização selecionado ' raise ValidationError(_('O Dispositivo de Atualização selecionado '
'não é um Bloco de Alteração.')) 'não é um Bloco de Alteração.'))
return da if not da and dst:
def clean(self):
data = self.cleaned_data
ndst = data['dispositivo_substituido']
nda = data['dispositivo_atualizador']
if not nda and ndst:
raise ValidationError(_('Não é permitido substituir um ' raise ValidationError(_('Não é permitido substituir um '
'Dispositivo sem haver um ' 'Dispositivo sem haver um '
'Dispositivo Alterador.')) 'Dispositivo Alterador.'))

2
compilacao/templatetags/compilacao_filters.py

@ -100,7 +100,7 @@ def render_actions_head(view, d_atual):
if view.pk_view == view.pk_edit and d_atual.pk == view.pk_view: if view.pk_view == view.pk_edit and d_atual.pk == view.pk_view:
return True return True
# conteudo e menu no filho # conteudo e menu no filho - ocorre nas inclusões feitas através do editor
if view.pk_view != view.pk_edit and d_atual.pk == view.pk_edit: if view.pk_view != view.pk_edit and d_atual.pk == view.pk_edit:
return True return True

10
compilacao/views.py

@ -440,7 +440,7 @@ class VideCreateView(VideMixin, CreateView):
self.object = None self.object = None
form = self.get_form() form = self.get_form()
return self.render_to_response(self.get_context_data(form=form)) return self.render_to_response(self.get_context_data(form=form))
""" """
def get_form_kwargs(self): def get_form_kwargs(self):
kwargs = super(VideCreateView, self).get_form_kwargs() kwargs = super(VideCreateView, self).get_form_kwargs()
@ -1031,9 +1031,7 @@ class DispositivoSimpleEditView(TextEditView):
return itens return itens
def select_provaveis_inserts(self, request=None): def select_provaveis_inserts(self, request=None):
try: try:
if request and 'perfil_estrutural' not in request.session: if request and 'perfil_estrutural' not in request.session:
self.set_perfil_in_session(request) self.set_perfil_in_session(request)
@ -1247,10 +1245,14 @@ class DispositivoSimpleEditView(TextEditView):
# result.insert(1, r) # result.insert(1, r)
# remover temporariamente a opção inserir antes # remover temporariamente a opção inserir antes
# confirmar falta de necessidade # confirmar necessidade
if len(result) > 2: if len(result) > 2:
result.pop() result.pop()
if tipb.dispositivo_de_articulacao and\
tipb.dispositivo_de_alteracao:
result.pop()
except Exception as e: except Exception as e:
print(e) print(e)

4
materia/migrations/0032_merge.py

@ -1,5 +1,5 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-05-10 12:43 # Generated by Django 1.9.5 on 2016-05-09 01:00
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import migrations from django.db import migrations
@ -8,8 +8,8 @@ from django.db import migrations
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('materia', '0031_merge'),
('materia', '0031_auto_20160502_1131'), ('materia', '0031_auto_20160502_1131'),
('materia', '0031_merge'),
] ]
operations = [ operations = [

4
parlamentares/views.py

@ -10,8 +10,8 @@ import crud.masterdetail
from crud.base import Crud from crud.base import Crud
from crud.masterdetail import MasterDetailCrud from crud.masterdetail import MasterDetailCrud
from .forms import (FiliacaoForm, LegislaturaForm, from .forms import (FiliacaoForm, LegislaturaForm, ParlamentarCreateForm,
ParlamentarCreateForm, ParlamentarForm) ParlamentarForm)
from .models import (CargoMesa, Coligacao, ComposicaoMesa, Dependente, from .models import (CargoMesa, Coligacao, ComposicaoMesa, Dependente,
Filiacao, Legislatura, Mandato, NivelInstrucao, Filiacao, Legislatura, Mandato, NivelInstrucao,
Parlamentar, Partido, SessaoLegislativa, SituacaoMilitar, Parlamentar, Partido, SessaoLegislativa, SituacaoMilitar,

30
static/js/compilacao_edit.js

@ -156,7 +156,7 @@ var clickUpdateDispositivo = function(event, __pk_refresh, __pk_edit, __action,
$('#dpt'+pk_refresh).css('min-height', $('.actions_right').height()*2); $('#dpt'+pk_refresh).css('min-height', $('.actions_right').height()*2);
$('.actions_inserts').removeClass('menu_flutuante'); $('.actions_inserts').removeClass('menu_flutuante');
} }
else if (_editortype == 'detail') { else if (_editortype == 'detail') { //TODO: código obsoleto - confirmar retirada desta condição
$('.csform .btn-salvar').parent().removeClass("displaynone"); $('.csform .btn-salvar').parent().removeClass("displaynone");
$('.csform .btn-salvar, .csform .fields').removeClass("displaynone"); $('.csform .btn-salvar, .csform .fields').removeClass("displaynone");
$('#dpt'+pk_refresh).css('min-height', $('.actions_right').height()*2); $('#dpt'+pk_refresh).css('min-height', $('.actions_right').height()*2);
@ -164,7 +164,6 @@ var clickUpdateDispositivo = function(event, __pk_refresh, __pk_edit, __action,
} }
$(".edt-"+_editortype).addClass('selected'); $(".edt-"+_editortype).addClass('selected');
//$(".container").addClass('class_color_container');
if (flag_actions_vibible == null || flag_actions_vibible) { if (flag_actions_vibible == null || flag_actions_vibible) {
$('#dpt'+pk_edit).addClass('dpt-selected'); $('#dpt'+pk_edit).addClass('dpt-selected');
@ -265,6 +264,28 @@ function reloadFunctionClicks() {
$('.btn-action').on('click', clickUpdateDispositivo); $('.btn-action').on('click', clickUpdateDispositivo);
$('#editdi_texto').focus(); $('#editdi_texto').focus();
$( ".bloco_alteracao" ).sortable({
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);
},
});
$( ".bloco_alteracao .dpt" ).draggable({
connectToSortable: ".bloco_alteracao",
revert: 'invalid',
zIndex: 1,
drag: function( event, ui ) {
$( ".bloco_alteracao" ).css('border-width', '2px');
},
stop: function( event, ui ) {
$( ".bloco_alteracao" ).css('border-width', '0px');
},
});
$( ".bloco_alteracao" ).disableSelection();
} }
$(document).ready(function() { $(document).ready(function() {
@ -284,4 +305,9 @@ $(document).ready(function() {
clickUpdateDispositivo(null, href[1], href[1], 'refresh', true); clickUpdateDispositivo(null, href[1], href[1], 'refresh', true);
} }
$('main').click(function(event) {
if (event.target == this || event.target == this.firstElementChild)
clearEditSelected();
});
}); });

72
static/styles/compilacao.scss

@ -50,7 +50,6 @@ a:link:after, a:visited:after {
} }
@mixin li_flutuante() { @mixin li_flutuante() {
& > ul { & > ul {
transform: translateY(30px); transform: translateY(30px);
transition: transform 0.1s linear, opacity 0.1s linear, clip 0s 0.3s; transition: transform 0.1s linear, opacity 0.1s linear, clip 0s 0.3s;
@ -67,9 +66,7 @@ a:link:after, a:visited:after {
border-right: 0px !important; border-right: 0px !important;
} }
&:first-child { &:first-child {
&::before { &::before {
border-width: 0.375rem; border-width: 0.375rem;
border-style: inset inset solid; border-style: inset inset solid;
@ -172,7 +169,6 @@ a:link:after, a:visited:after {
.dpt { .dpt {
font-size:1em; font-size:1em;
transition: all 0.2s ease-in-out;
position: relative; position: relative;
.ementa { .ementa {
@ -262,7 +258,6 @@ a:link:after, a:visited:after {
margin-top: 2px; margin-top: 2px;
} }
.bloco_alteracao { .bloco_alteracao {
padding-left: 10%; padding-left: 10%;
font-style: italic; font-style: italic;
@ -535,16 +530,14 @@ a:link:after, a:visited:after {
position: absolute; position: absolute;
opacity: 0; opacity: 0;
transition: all 0.4s ease-in-out; transition: all 0.4s ease-in-out;
z-index: 1; z-index: 2000;
a { a {
&.btn-edit { &.btn-edit {
@include background-top-down(#3498DB, #2980C9); background-color: #3498db;
color: #ffffff !important; color: #ffffff !important;
font-weight: bold; padding: 8px 18px 6px;
padding: 5px 7px 3px;
display: inline-block; display: inline-block;
line-height: 1; line-height: 1;
} }
} }
} }
@ -568,35 +561,26 @@ a:link:after, a:visited:after {
margin: 2em 0; margin: 2em 0;
} }
.bloco_alteracao { .bloco_alteracao {
border: 1px solid #ddd; margin: 1em 0;
margin: -1px 0 0; padding: 0em ;
padding: 1em; background-color: transparent;
} min-height: 100px;
border: 0px dashed #d9ddde;
.articulacao1 { .dpt {
margin-top: 2em; width: 100% !important;
&::before { box-shadow: 0 -1px 0 #e5e5e5, 0 0 2px rgba(0,0,0,.12),0 2px 4px rgba(0,0,0,.24);
content: "Articulação"; padding: 0.3em 1em;
background-color: #eee; margin: 1px 0;
border-bottom: 1px dotted #E88C8C; background-color: #edf0f1;
padding: 0.333em; z-index: 1;
padding-left: 1em; &:not(:first-child) {
display:block; border-top: 1px solid white;
} }
&.ui-draggable div {
cursor: pointer;
} }
.bloco_alteracao1 {
@extend .articulacao1;
margin: -1px 0 0;
padding: 1em;
border: 1px dotted #E88C8C;
overflow: hidden;
&::before {
content: "Bloco de Alteração";
margin: -1em -1em 0;
display: block;
} }
} }
} /* fim dpt */ } /* fim dpt */
.dpt-selected { .dpt-selected {
@ -606,10 +590,8 @@ a:link:after, a:visited:after {
padding: 2.2em 2.2em 1.6em 2.2em; padding: 2.2em 2.2em 1.6em 2.2em;
box-shadow: -4px 15px 15px rgba(0, 0, 0, 0.1), 0px 6px 6px rgba(0, 0, 0, 0.23); box-shadow: -4px 15px 15px rgba(0, 0, 0, 0.1), 0px 6px 6px rgba(0, 0, 0, 0.23);
@include background-top-down(#eaeaee, #ddd); @include background-top-down(#eaeaee, #ddd);
ul { ul {
list-style: none; list-style: none;
margin: 0; margin: 0;
@ -632,14 +614,20 @@ a:link:after, a:visited:after {
& > .bloco { & > .bloco {
opacity: 1; opacity: 1;
margin: 1em !important; margin: 1em ;
} }
.bloco_alteracao { .bloco_alteracao {
padding-top: 2em; margin: 0;
padding: 1em;
@include background-top-down(#eaeaee, #ddd);
&:not(:first-child) {
border-top: 0px solid white;
}
.dpt {
background-color: white;
}
} }
& > .dpt { & > .dpt {
padding: 0; padding: 0;
@ -915,7 +903,7 @@ a:link:after, a:visited:after {
} /* actions_inserts */ } /* actions_inserts */
.menu_flutuante { .menu_flutuante, .menu_flutuante_fixo {
& > li { & > li {
@include li_flutuante(); @include li_flutuante();

6
templates/compilacao/text_edit_bloco.html

@ -48,7 +48,7 @@
{% endfor %} {% endfor %}
</ul> </ul>
<ul class="actions_inserts {% if not dpt.tipo_dispositivo.dispositivo_de_articulacao %}menu_flutuante{%endif%}"> <ul class="actions_inserts {% if not dpt.tipo_dispositivo.dispositivo_de_articulacao and not dpt.tipo_dispositivo.dispositivo_de_alteracao%}menu_flutuante{% elif dpt.tipo_dispositivo.dispositivo_de_alteracao and dpt.tipo_dispositivo.dispositivo_de_articulacao%}menu_flutuante_fixo{%endif%}">
{% if dpt.dispositivo_subsequente == None %} {% if dpt.dispositivo_subsequente == None %}
{% for inserts in view|select_provaveis_inserts:request %} {% for inserts in view|select_provaveis_inserts:request %}
{% if inserts.itens %} {% if inserts.itens %}
@ -130,7 +130,9 @@
{% endif %} {% endif %}
<div class="bloco {% dispositivo_desativado dpt view.inicio_vigencia view.fim_vigencia %} {{ dpt.tipo_dispositivo.class_css }}"> <div class="bloco {% dispositivo_desativado dpt view.inicio_vigencia view.fim_vigencia %} {{ dpt.tipo_dispositivo.class_css }}">
{% spaceless %} {% spaceless %}
{% if not dpt.tipo_dispositivo.dispositivo_de_alteracao %}
<div class="de" id="id{{dpt.id}}" pk="{{dpt.pk}}" ordem="{{dpt.ordem}}" name="{{dpt.pk}}" title="{{dpt.pk}} - {{dpt.ordem}}">{{ dpt.tipo_dispositivo.rotulo_prefixo_html|safe }}{{ dpt.rotulo }}{{ dpt.tipo_dispositivo.rotulo_sufixo_html|safe }}{{ dpt.tipo_dispositivo.texto_prefixo_html|safe }}{% if dpt.texto == '' and not dpt.tipo_dispositivo.dispositivo_de_articulacao %}<span class="semtexto">({{dpt.tipo_dispositivo}} sem texto)</span>{%else%}{{ dpt.texto|safe }}{%endif%}</div> <div class="de" id="id{{dpt.id}}" pk="{{dpt.pk}}" ordem="{{dpt.ordem}}" name="{{dpt.pk}}" title="{{dpt.pk}} - {{dpt.ordem}}">{{ dpt.tipo_dispositivo.rotulo_prefixo_html|safe }}{{ dpt.rotulo }}{{ dpt.tipo_dispositivo.rotulo_sufixo_html|safe }}{{ dpt.tipo_dispositivo.texto_prefixo_html|safe }}{% if dpt.texto == '' and not dpt.tipo_dispositivo.dispositivo_de_articulacao %}<span class="semtexto">({{dpt.tipo_dispositivo}} sem texto)</span>{%else%}{{ dpt.texto|safe }}{%endif%}</div>
{% endif %}
{% if dpt.ta_publicado_id != None and not dpt.tipo_dispositivo.dispositivo_de_articulacao %} {% if dpt.ta_publicado_id != None and not dpt.tipo_dispositivo.dispositivo_de_articulacao %}
<a class="link_alterador" href="{% url 'compilacao:ta_text_edit' dpt.ta_publicado.pk %}#{{dpt.dispositivo_atualizador_id}}"> <a class="link_alterador" href="{% url 'compilacao:ta_text_edit' dpt.ta_publicado.pk %}#{{dpt.dispositivo_atualizador_id}}">
{{ dpt.tipo_dispositivo.nota_automatica_prefixo_html|safe }} {{ dpt.tipo_dispositivo.nota_automatica_prefixo_html|safe }}
@ -139,7 +141,7 @@
</a> </a>
{% endif %} {% endif %}
{% endspaceless %} {% endspaceless %}
{% if dpt.tipo_dispositivo.class_css == 'bloco_alteracao'%} {% if dpt.tipo_dispositivo.dispositivo_de_alteracao %}
{%with node=dpt template_name='compilacao/text_edit_blocoalteracao.html' %} {%with node=dpt template_name='compilacao/text_edit_blocoalteracao.html' %}
{%include template_name%} {%include template_name%}
{%endwith%} {%endwith%}

5
templates/compilacao/text_edit_blocoalteracao.html

@ -1,10 +1,9 @@
{% load compilacao_filters %} {% load compilacao_filters %}
{% load common_tags %} {% load common_tags %}
aaaaa
{% for ch in dpt.pk|get_bloco_atualizador %} {% for ch in dpt.pk|get_bloco_atualizador %}
{% spaceless %} {% spaceless %}
<div class="dpt" id="d{{ch.id}}"> <div class="dpt" id="d{{ch.id}}" pk="{{ch.id}}" >
<div class="{{ ch.tipo_dispositivo.class_css }}" id="id{{ch.id}}" nivel="{{ch.nivel}}"> <div class="{{ ch.tipo_dispositivo.class_css }}" id="id{{ch.id}}" nivel="{{ch.nivel}}" style="margin: 0px;">
{{ ch.tipo_dispositivo.rotulo_prefixo_html|safe }}<a name="{{ch.pk}}" href="{% url 'compilacao:ta_text_edit' ch.ta.pk %}#{{ch.pk}}">{{ ch.rotulo }}</a>{{ ch.tipo_dispositivo.rotulo_sufixo_html|safe }}{{ ch.tipo_dispositivo.texto_prefixo_html|safe }}{{ ch.texto|safe }} {{ ch.tipo_dispositivo.rotulo_prefixo_html|safe }}<a name="{{ch.pk}}" href="{% url 'compilacao:ta_text_edit' ch.ta.pk %}#{{ch.pk}}">{{ ch.rotulo }}</a>{{ ch.tipo_dispositivo.rotulo_sufixo_html|safe }}{{ ch.tipo_dispositivo.texto_prefixo_html|safe }}{{ ch.texto|safe }}
</div> </div>
</div> </div>

1
templates/compilacao/text_list.html

@ -14,7 +14,6 @@
{% block actions %} {% block actions %}
<div class="clearfix"> <div class="clearfix">
<div class="actions btn-group pull-right" role="group"> <div class="actions btn-group pull-right" role="group">
<a href="{% url 'compilacao:ta_text_notificacoes' object.pk %}" class="btn btn-default">{% trans 'Notificações' %}</a>
<a href="{% url 'compilacao:ta_text_edit' object.pk %}" class="btn btn-default">{% trans 'Editar Texto' %}</a> <a href="{% url 'compilacao:ta_text_edit' object.pk %}" class="btn btn-default">{% trans 'Editar Texto' %}</a>
</div> </div>
</div> </div>

4
templates/compilacao/text_notificacoes.html

@ -1,13 +1,11 @@
{% extends "base.html" %} {% extends "compilacao/textoarticulado_detail.html" %}
{% load i18n crispy_forms_tags compilacao_filters common_tags sass_tags%} {% load i18n crispy_forms_tags compilacao_filters common_tags sass_tags%}
{% block base_content %} {% block base_content %}
{{title}}
{% block head_content %}{{block.super}} {% block head_content %}{{block.super}}
<link rel="stylesheet" href="{% sass_src 'styles/compilacao.scss' %}" type="text/css"> <link rel="stylesheet" href="{% sass_src 'styles/compilacao.scss' %}" type="text/css">
{% endblock %} {% endblock %}
{% crispy form %} {% crispy form %}

2
templates/compilacao/textoarticulado_detail.html

@ -14,6 +14,7 @@
{%endif%} {%endif%}
</li> </li>
<li><a href="{% url 'compilacao:ta_pub_list' object.pk %}">{% model_verbose_name_plural 'compilacao.models.Publicacao' %}</a></li> <li><a href="{% url 'compilacao:ta_pub_list' object.pk %}">{% model_verbose_name_plural 'compilacao.models.Publicacao' %}</a></li>
<li><a href="{% url 'compilacao:ta_text_notificacoes' object.pk %}">{% trans 'Notificações' %}</a></li>
<li><a href="{% url 'compilacao:ta_text' object.pk %}">{% trans 'Texto' %}</a></li> <li><a href="{% url 'compilacao:ta_text' object.pk %}">{% trans 'Texto' %}</a></li>
{%endif %} {%endif %}
</ul> </ul>
@ -25,7 +26,6 @@
<div class="clearfix"> <div class="clearfix">
<div class="actions btn-group pull-right" role="group"> <div class="actions btn-group pull-right" role="group">
<a href="{% url 'compilacao:ta_edit' object.pk %}" class="btn btn-default">{% trans 'Editar Metadados do Texto Articulado' %}</a> <a href="{% url 'compilacao:ta_edit' object.pk %}" class="btn btn-default">{% trans 'Editar Metadados do Texto Articulado' %}</a>
<a href="{% url 'compilacao:ta_text_notificacoes' object.pk %}" class="btn btn-default">{% trans 'Notificações' %}</a>
<a href="{% url 'compilacao:ta_text_edit' object.pk %}" class="btn btn-default">{% trans 'Editar Texto' %}</a> <a href="{% url 'compilacao:ta_text_edit' object.pk %}" class="btn btn-default">{% trans 'Editar Texto' %}</a>
</div> </div>
</div> </div>

Loading…
Cancel
Save