Browse Source

create timeline in compilacao app

pull/6/head
LeandroRoberto 9 years ago
parent
commit
102a262a0b
  1. 8
      compilacao/templatetags/compilacao_filters.py
  2. 81
      compilacao/views.py
  3. 2
      norma/models.py
  4. 5
      norma/urls.py
  5. 37
      static/styles/compilacao.scss
  6. 24
      templates/compilacao/bloco_alteracao.html
  7. 54
      templates/compilacao/index.html
  8. 51
      templates/compilacao/template_render_bloco.html

8
compilacao/templatetags/compilacao_filters.py

@ -16,6 +16,14 @@ def get_bloco(pk_atualizador):
Q(dispositivo_atualizador_id=pk_atualizador)).select_related() Q(dispositivo_atualizador_id=pk_atualizador)).select_related()
@register.filter
def get_field(value, key):
try:
return value[key]
except ValueError:
return None
@register.filter @register.filter
def bloco_ja_incluso(view, bloco): def bloco_ja_incluso(view, bloco):
try: try:

81
compilacao/views.py

@ -1,8 +1,12 @@
from collections import OrderedDict
from datetime import timedelta
from django.views.generic.list import ListView from django.views.generic.list import ListView
from compilacao.models import Dispositivo from compilacao.models import Dispositivo
from norma.models import NormaJuridica from norma.models import NormaJuridica
DISPOSITIVO_SELECT_RELATED = ( DISPOSITIVO_SELECT_RELATED = (
'tipo_dispositivo', 'tipo_dispositivo',
'norma_publicada', 'norma_publicada',
@ -22,13 +26,12 @@ class CompilacaoView(ListView):
flag_nivel_ini = 0 flag_nivel_ini = 0
flag_nivel_old = -1 flag_nivel_old = -1
itens_de_bloco = [] itens_de_vigencia = {}
def get_queryset(self): def get_queryset(self):
self.flag_alteradora = -1 self.flag_alteradora = -1
self.flag_nivel_ini = 0 self.flag_nivel_ini = 0
self.flag_nivel_old = -1 self.flag_nivel_old = -1
self.itens_de_bloco = []
if self.is_norma_alteradora(): if self.is_norma_alteradora():
return Dispositivo.objects.filter( return Dispositivo.objects.filter(
@ -41,6 +44,57 @@ class CompilacaoView(ListView):
norma_id=self.kwargs['norma_id'] norma_id=self.kwargs['norma_id']
).select_related(*DISPOSITIVO_SELECT_RELATED) ).select_related(*DISPOSITIVO_SELECT_RELATED)
def get_vigencias(self):
itens = Dispositivo.objects.filter(
norma_id=self.kwargs['norma_id'],
).order_by(
'inicio_vigencia'
).distinct(
'inicio_vigencia'
).select_related(
'norma_publicada',
'norma',
'norma_publicada__tipo',
'norma__tipo',)
ajuste_datas_vigencia = []
for item in itens:
ajuste_datas_vigencia.append(item)
lenLista = len(ajuste_datas_vigencia)
for i in range(lenLista):
if i + 1 < lenLista:
ajuste_datas_vigencia[
i].fim_vigencia = ajuste_datas_vigencia[
i + 1].inicio_vigencia - timedelta(days=1)
else:
ajuste_datas_vigencia[i].fim_vigencia = None
self.itens_de_vigencia = {}
idx = -1
length = len(ajuste_datas_vigencia)
for item in ajuste_datas_vigencia:
idx += 1
if idx == 0:
self.itens_de_vigencia[0] = [item, ]
continue
if idx + 1 < length:
ano = item.norma_publicada.ano
if ano in self.itens_de_vigencia:
self.itens_de_vigencia[ano].append(item)
else:
self.itens_de_vigencia[ano] = [item, ]
else:
self.itens_de_vigencia[9999] = [item, ]
self.itens_de_vigencia = OrderedDict(
sorted(self.itens_de_vigencia.items(), key=lambda t: t[0]))
return self.itens_de_vigencia
def get_norma(self): def get_norma(self):
return NormaJuridica.objects.select_related('tipo').get( return NormaJuridica.objects.select_related('tipo').get(
pk=self.kwargs['norma_id']) pk=self.kwargs['norma_id'])
@ -53,22 +107,14 @@ class CompilacaoView(ListView):
return self.flag_alteradora > 0 return self.flag_alteradora > 0
class DispositivoView(ListView): class DispositivoView(CompilacaoView):
#template_name = 'compilacao/index.html' # template_name = 'compilacao/index.html'
template_name = 'compilacao/template_render_bloco.html' template_name = 'compilacao/template_render_bloco.html'
flag_alteradora = None
flag_nivel_ini = 0
flag_nivel_old = -1
itens_de_bloco = []
def get_queryset(self): def get_queryset(self):
self.flag_alteradora = -1 self.flag_alteradora = -1
self.flag_nivel_ini = 0 self.flag_nivel_ini = 0
self.flag_nivel_old = -1 self.flag_nivel_old = -1
self.itens_de_bloco = []
try: try:
bloco = Dispositivo.objects.get(pk=self.kwargs['dispositivo_id']) bloco = Dispositivo.objects.get(pk=self.kwargs['dispositivo_id'])
@ -98,14 +144,3 @@ class DispositivoView(ListView):
norma_id=self.kwargs['norma_id'] norma_id=self.kwargs['norma_id']
).select_related(*DISPOSITIVO_SELECT_RELATED) ).select_related(*DISPOSITIVO_SELECT_RELATED)
return itens return itens
def get_norma(self):
return NormaJuridica.objects.select_related('tipo').get(
pk=self.kwargs['norma_id'])
def is_norma_alteradora(self):
if self.flag_alteradora == -1:
self.flag_alteradora = Dispositivo.objects.select_related(
'dispositivos_alterados_pela_norma_set'
).filter(norma_id=self.kwargs['norma_id']).count()
return self.flag_alteradora > 0

2
norma/models.py

@ -103,7 +103,7 @@ class NormaJuridica(models.Model):
return _('%(tipo)s%(numero)s de %(data)s') % { return _('%(tipo)s%(numero)s de %(data)s') % {
'tipo': self.tipo, 'tipo': self.tipo,
'numero': self.numero, 'numero': self.numero,
'data': defaultfilters.date(self.data, "d \d\e N \d\e Y")} 'data': defaultfilters.date(self.data, "d \d\e F \d\e Y")}
class AssuntoNormaRelationship(models.Model): class AssuntoNormaRelationship(models.Model):

5
norma/urls.py

@ -1,7 +1,8 @@
from django.conf.urls import include, url from django.conf.urls import include, url
from norma.views import (assunto_norma_crud, tipo_norma_crud, from norma.views import (assunto_norma_crud,
norma_temporario_para_compilacao_crud) norma_temporario_para_compilacao_crud,
tipo_norma_crud)
norma_url_patterns = norma_temporario_para_compilacao_crud.urlpatterns norma_url_patterns = norma_temporario_para_compilacao_crud.urlpatterns

37
static/styles/compilacao.scss

@ -3,17 +3,17 @@
.articulacao div { .articulacao div {
background-color: #fff; background-color: #fff;
} }
.dispositivo { .dispositivo {
background-color: #ddd !important; background-color: #ddd !important;
transition: all .4s ease-in-out; transition: all .4s ease-in-out;
display:inline; display:inline;
} }
.dispositivo .ementa { .dispositivo .ementa {
padding: 2em 0em 3em 50%; padding: 4em 0em 3em 50%;
font-weight: bold; font-weight: bold;
} }
@ -117,15 +117,38 @@
color: #2980B9 !important; color: #2980B9 !important;
font-size: 0.9rem; font-size: 0.9rem;
} }
.dispositivo .bloco_alteracao {
.dispositivo .bloco_alteracao{
margin-left: 5em; margin-left: 5em;
} }
.dispositivo .bloco_alteracao:hover a {
text-decoration: underline;
}
.dispositivo .bloco_alteracao, .dispositivo .bloco_alteracao,
.dispositivo .bloco_alteracao a, .dispositivo .bloco_alteracao a,
.dispositivo .bloco_alteracao table, .dispositivo .bloco_alteracao table,
.dispositivo .bloco_alteracao table td { .dispositivo .bloco_alteracao table td {
color: #018 !important; color: #018 !important;
} }
.compilacao .top-bar-section li:not(.has-form) a:not(.button),
.compilacao .top-bar {
line-height: 1.6rem;
height: auto;
}
.compilacao .top-bar-section li:not(.has-form) a:not(.button) {
padding: 0 0.43333rem;
}
.compilacao ul.nav {
background: #34495E;
display:block;
width: 100%;
}
.compilacao .vigencias{
margin: 2em 0 0 0;
}

24
templates/compilacao/bloco_alteracao.html

@ -1,18 +1,10 @@
{% load compilacao_filters %} {% load compilacao_filters %}
{% for ch in dispositivo.pk|get_bloco %} {% for ch in dispositivo.pk|get_bloco %}
{% spaceless %}
<div class="dispositivo" id="d{{ch.id}}"> <div class="dispositivo" id="d{{ch.id}}">
<div class="{{ ch.tipo_dispositivo.class_css }}" id="{{ch.id}}" nivel="{{ch.nivel}}"> <div class="{{ ch.tipo_dispositivo.class_css }}" id="id{{ch.id}}" nivel="{{ch.nivel}}">
{{ ch.tipo_dispositivo.rotulo_prefixo_html|safe }}<a name="ch.pk" href="{%url 'compilacao' ch.norma.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 }} </div>
<a name="ch.pk" href="{%url 'compilacao' ch.norma.pk %}#{{ch.pk}}"> </div>
{{ ch.rotulo }} {% endspaceless %}
</a>
{{ ch.tipo_dispositivo.rotulo_sufixo_html|safe }}
{{ ch.tipo_dispositivo.texto_prefixo_html|safe }}
{{ ch.texto|safe }}
</div>
</div>
{% endfor %} {% endfor %}

54
templates/compilacao/index.html

@ -1,16 +1,60 @@
{% extends "base.html" %} {% extends "base.html" %}
{% load i18n %} {% load i18n %}
{% load compilacao_filters %} {% load compilacao_filters %}
{% block title%} {% block title%}
<h1>{{ view.get_norma }}</h1> <h1>{{ view.get_norma }}</h1>
{% endblock %} {% endblock %}
{% block base_content %} {% block base_content %}
{% include 'compilacao/template_render_bloco.html'%}
<div class="compilacao">
<section class="vigencias">
<nav class="top-bar" data-topbar="" role="navigation">
<section class="top-bar-section">
<ul class="nav left">
{% for key, values in view.get_vigencias.items %}
<li class="nav__item has-dropdown">
{% if forloop.first %}
{% for dispositivo in values %}
<a class="nav__link" href="{%url 'compilacao' dispositivo.norma.pk %}" title="{{ dispositivo.norma }}">{% trans 'Norma Original'%}</a>
{% endfor %}
{% elif forloop.last %}
{% for dispositivo in values %}
<a class="nav__link" href="{%url 'compilacao' dispositivo.norma_publicada.pk %}" title="{% trans 'Compilação atual'%}">{% trans 'Texto em Vigência'%}</a>
{% endfor %}
{% else %}
<a class="nav__link">{{ key }}</a>
{%endif%}
{% if not forloop.first and not forloop.last %}
<ul class="nav__sub-nav dropdown">
{% for dispositivo in values %}
<li class="nav__sub-item">
{% if forloop.parentloop.first %}
<a class="nav__sub-link" href="{%url 'compilacao' dispositivo.norma.pk %}" >{% trans 'Norma Original'%}</a>
{% else %}
<a class="nav__sub-link" href="{%url 'compilacao' dispositivo.norma_publicada.pk %}" title="{{ dispositivo.norma_publicada }}">{% trans 'Vigência entre'%} {{dispositivo.inicio_vigencia}} {% trans 'e'%} {{dispositivo.fim_vigencia}}</a>
{%endif%}
</li>
{% endfor %}
</ul>
{%endif%}
</li>
{% endfor %}
</ul>
</section>
</nav>
</section>
{% include 'compilacao/template_render_bloco.html'%}
</div>
{% endblock base_content %} {% endblock base_content %}

51
templates/compilacao/template_render_bloco.html

@ -1,41 +1,34 @@
{% load i18n %} {% load i18n %}
{% load compilacao_filters %} {% load compilacao_filters %}
{% for dispositivo in view.get_queryset %} {% for dispositivo in view.get_queryset %}
{% if dispositivo.nivel == view.flag_nivel_old %} {% if dispositivo.nivel == view.flag_nivel_old %}
</div> </div>
{% elif dispositivo.nivel < view.flag_nivel_old %} {% elif dispositivo.nivel < view.flag_nivel_old %}
{% close_div view.flag_nivel_old dispositivo.nivel %} {% close_div view.flag_nivel_old dispositivo.nivel %}
{% endif%} {% endif%}
<div class="dispositivo" id="d{{dispositivo.id}}"> <div class="dispositivo" id="d{{dispositivo.id}}">
{% spaceless %}
<div class="{% dispositivo_desativado dispositivo %} {{ dispositivo.tipo_dispositivo.class_css }}" id="id{{dispositivo.id}}"> <div class="{% dispositivo_desativado dispositivo %} {{ dispositivo.tipo_dispositivo.class_css }}" id="id{{dispositivo.id}}">
{% spaceless %}
{{ dispositivo.tipo_dispositivo.rotulo_prefixo_html|safe }} {{ dispositivo.tipo_dispositivo.rotulo_prefixo_html|safe }}
<a name="{{dispositivo.pk}}" >{{ dispositivo.rotulo }}</a> <a name="{{dispositivo.pk}}">{{ dispositivo.rotulo }}</a>
{{ dispositivo.tipo_dispositivo.rotulo_sufixo_html|safe }} {{ dispositivo.tipo_dispositivo.rotulo_sufixo_html|safe }}
{{ dispositivo.tipo_dispositivo.texto_prefixo_html|safe }}
{{ dispositivo.tipo_dispositivo.texto_prefixo_html|safe }} {{ dispositivo.texto|safe }}
{{ dispositivo.texto|safe }} {% if dispositivo.norma_publicada_id != None %}
<a class="link_alterador" href="{%url 'compilacao' dispositivo.norma_publicada.pk %}#{{dispositivo.dispositivo_atualizador_id}}">
{% if dispositivo.norma_publicada_id != None %} {{ dispositivo.tipo_dispositivo.nota_automatica_prefixo_html|safe }}
<a class="link_alterador" href="{%url 'compilacao' dispositivo.norma_publicada.pk %}#{{dispositivo.dispositivo_atualizador_id}}">
{{ dispositivo.tipo_dispositivo.nota_automatica_prefixo_html|safe }}
{% nota_automatica dispositivo %} {% nota_automatica dispositivo %}
{{ dispositivo.tipo_dispositivo.nota_automatica_sufixo_html|safe }} {{ dispositivo.tipo_dispositivo.nota_automatica_sufixo_html|safe }}
</a> </a>
{% endif %}
{% endspaceless %}
{% if view.is_norma_alteradora and dispositivo.tipo_dispositivo.class_css == 'bloco_alteracao'%}
{%with node=dispositivo template_name='compilacao/bloco_alteracao.html' %}
{%include template_name%}
{%endwith%}
{% endif%} {% endif%}
{% if view.is_norma_alteradora and dispositivo.tipo_dispositivo.class_css == 'bloco_alteracao'%}
{%with node=dispositivo template_name='compilacao/bloco_alteracao.html' %}
{%include template_name%}
{%endwith%}
{% endif%}
</div> </div>
{% endspaceless %} {% set_nivel_old view dispositivo.nivel %}
{% endfor %}
{% set_nivel_old view dispositivo.nivel %}
{% endfor %}
{% close_div view.flag_nivel_old view.flag_nivel_ini %} {% close_div view.flag_nivel_old view.flag_nivel_ini %}
Loading…
Cancel
Save