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. 76
      static/styles/compilacao.scss
  8. 2
      templates/compilacao/dispositivo_form_search_fragment.html
  9. 8
      templates/compilacao/text_edit_bloco.html
  10. 5
      templates/compilacao/text_edit_blocoalteracao.html
  11. 1
      templates/compilacao/text_list.html
  12. 4
      templates/compilacao/text_notificacoes.html
  13. 2
      templates/compilacao/textoarticulado_detail.html

38
compilacao/forms.py

@ -980,43 +980,41 @@ class DispositivoEdicaoAlteracaoForm(ModelForm):
(inst.dispositivo_atualizador.pk,
inst.dispositivo_atualizador)]
def clean_dispositivo_substituido(self):
dst = self.cleaned_data['dispositivo_substituido']
def clean(self):
"""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:
raise ValidationError(_('Não é permitido selecionar um '
'Dispositivo de outro Texto Articulado.'))
if dst and dst.tipo_dispositivo != self.instance.tipo_dispositivo:
raise ValidationError(_('Não é permitido selecionar um '
'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:
raise ValidationError(_('Não é permitido selecionar um '
'Dispositivo de outro Texto Articulado.'))
if dsq and dsq.tipo_dispositivo != self.instance.tipo_dispositivo:
raise ValidationError(_('Não é permitido selecionar um '
'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\
not da.tipo_dispositivo.dispositivo_de_articulacao:
if da and not (da.tipo_dispositivo.dispositivo_de_alteracao and
da.tipo_dispositivo.dispositivo_de_articulacao):
raise ValidationError(_('O Dispositivo de Atualização selecionado '
'não é um Bloco de Alteração.'))
return da
def clean(self):
data = self.cleaned_data
ndst = data['dispositivo_substituido']
nda = data['dispositivo_atualizador']
if not nda and ndst:
if not da and dst:
raise ValidationError(_('Não é permitido substituir um '
'Dispositivo sem haver um '
'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:
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:
return True

10
compilacao/views.py

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

4
materia/migrations/0032_merge.py

@ -1,5 +1,5 @@
# -*- 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 django.db import migrations
@ -8,8 +8,8 @@ from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('materia', '0031_merge'),
('materia', '0031_auto_20160502_1131'),
('materia', '0031_merge'),
]
operations = [

4
parlamentares/views.py

@ -10,8 +10,8 @@ import crud.masterdetail
from crud.base import Crud
from crud.masterdetail import MasterDetailCrud
from .forms import (FiliacaoForm, LegislaturaForm,
ParlamentarCreateForm, ParlamentarForm)
from .forms import (FiliacaoForm, LegislaturaForm, ParlamentarCreateForm,
ParlamentarForm)
from .models import (CargoMesa, Coligacao, ComposicaoMesa, Dependente,
Filiacao, Legislatura, Mandato, NivelInstrucao,
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);
$('.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, .csform .fields').removeClass("displaynone");
$('#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');
//$(".container").addClass('class_color_container');
if (flag_actions_vibible == null || flag_actions_vibible) {
$('#dpt'+pk_edit).addClass('dpt-selected');
@ -265,6 +264,28 @@ function reloadFunctionClicks() {
$('.btn-action').on('click', clickUpdateDispositivo);
$('#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() {
@ -284,4 +305,9 @@ $(document).ready(function() {
clickUpdateDispositivo(null, href[1], href[1], 'refresh', true);
}
$('main').click(function(event) {
if (event.target == this || event.target == this.firstElementChild)
clearEditSelected();
});
});

76
static/styles/compilacao.scss

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

2
templates/compilacao/dispositivo_form_search_fragment.html

@ -68,7 +68,7 @@
{{ dpt.tipo_dispositivo.rotulo_sufixo_html|safe }}
<span class="dtxt"
id="d{% if not dpt.dispositivo_subsequente_id and dpt.dispositivo_substituido_id %}a{% endif %}{{dpt.pk}}"
id="d{% if not dpt.dispositivo_subsequente_id and dpt.dispositivo_substituido_id %}a{% endif %}{{dpt.pk}}"
pks="{{dpt.dispositivo_substituido_id|default:''}}"
pk="{{dpt.pk}}">{{ dpt.tipo_dispositivo.texto_prefixo_html|safe }}{%if dpt.texto %}{{ dpt.texto|safe }}{%else%}{%if not dpt.tipo_dispositivo.dispositivo_de_articulacao %}&nbsp;{% endif %}{% endif %}</span>
{% if dpt.ta_publicado_id %}

8
templates/compilacao/text_edit_bloco.html

@ -48,7 +48,7 @@
{% endfor %}
</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 %}
{% for inserts in view|select_provaveis_inserts:request %}
{% if inserts.itens %}
@ -130,7 +130,9 @@
{% endif %}
<div class="bloco {% dispositivo_desativado dpt view.inicio_vigencia view.fim_vigencia %} {{ dpt.tipo_dispositivo.class_css }}">
{% spaceless %}
<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>
{% 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>
{% endif %}
{% 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}}">
{{ dpt.tipo_dispositivo.nota_automatica_prefixo_html|safe }}
@ -139,7 +141,7 @@
</a>
{% endif %}
{% 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' %}
{%include template_name%}
{%endwith%}

5
templates/compilacao/text_edit_blocoalteracao.html

@ -1,10 +1,9 @@
{% load compilacao_filters %}
{% load common_tags %}
aaaaa
{% for ch in dpt.pk|get_bloco_atualizador %}
{% spaceless %}
<div class="dpt" id="d{{ch.id}}">
<div class="{{ ch.tipo_dispositivo.class_css }}" id="id{{ch.id}}" nivel="{{ch.nivel}}">
<div class="dpt" id="d{{ch.id}}" pk="{{ch.id}}" >
<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 }}
</div>
</div>

1
templates/compilacao/text_list.html

@ -14,7 +14,6 @@
{% block actions %}
<div class="clearfix">
<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>
</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%}
{% block base_content %}
{{title}}
{% block head_content %}{{block.super}}
<link rel="stylesheet" href="{% sass_src 'styles/compilacao.scss' %}" type="text/css">
{% endblock %}
{% crispy form %}

2
templates/compilacao/textoarticulado_detail.html

@ -14,6 +14,7 @@
{%endif%}
</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>
{%endif %}
</ul>
@ -25,7 +26,6 @@
<div class="clearfix">
<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_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>
</div>
</div>

Loading…
Cancel
Save