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()
@register.filter
def get_field(value, key):
try:
return value[key]
except ValueError:
return None
@register.filter
def bloco_ja_incluso(view, bloco):
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 compilacao.models import Dispositivo
from norma.models import NormaJuridica
DISPOSITIVO_SELECT_RELATED = (
'tipo_dispositivo',
'norma_publicada',
@ -22,13 +26,12 @@ class CompilacaoView(ListView):
flag_nivel_ini = 0
flag_nivel_old = -1
itens_de_bloco = []
itens_de_vigencia = {}
def get_queryset(self):
self.flag_alteradora = -1
self.flag_nivel_ini = 0
self.flag_nivel_old = -1
self.itens_de_bloco = []
if self.is_norma_alteradora():
return Dispositivo.objects.filter(
@ -41,6 +44,57 @@ class CompilacaoView(ListView):
norma_id=self.kwargs['norma_id']
).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):
return NormaJuridica.objects.select_related('tipo').get(
pk=self.kwargs['norma_id'])
@ -53,22 +107,14 @@ class CompilacaoView(ListView):
return self.flag_alteradora > 0
class DispositivoView(ListView):
#template_name = 'compilacao/index.html'
class DispositivoView(CompilacaoView):
# template_name = 'compilacao/index.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):
self.flag_alteradora = -1
self.flag_nivel_ini = 0
self.flag_nivel_old = -1
self.itens_de_bloco = []
try:
bloco = Dispositivo.objects.get(pk=self.kwargs['dispositivo_id'])
@ -98,14 +144,3 @@ class DispositivoView(ListView):
norma_id=self.kwargs['norma_id']
).select_related(*DISPOSITIVO_SELECT_RELATED)
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') % {
'tipo': self.tipo,
'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):

5
norma/urls.py

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

37
static/styles/compilacao.scss

@ -3,17 +3,17 @@
.articulacao div {
background-color: #fff;
}
.dispositivo {
background-color: #ddd !important;
transition: all .4s ease-in-out;
display:inline;
display:inline;
}
.dispositivo .ementa {
padding: 2em 0em 3em 50%;
padding: 4em 0em 3em 50%;
font-weight: bold;
}
@ -117,15 +117,38 @@
color: #2980B9 !important;
font-size: 0.9rem;
}
.dispositivo .bloco_alteracao{
.dispositivo .bloco_alteracao {
margin-left: 5em;
}
.dispositivo .bloco_alteracao:hover a {
text-decoration: underline;
}
.dispositivo .bloco_alteracao,
.dispositivo .bloco_alteracao a,
.dispositivo .bloco_alteracao table,
.dispositivo .bloco_alteracao table td {
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 %}
<div class="dispositivo" id="d{{ch.id}}">
<div class="{{ ch.tipo_dispositivo.class_css }}" 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 }}
</div>
</div>
{% spaceless %}
<div class="dispositivo" id="d{{ch.id}}">
<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 }}
</div>
</div>
{% endspaceless %}
{% endfor %}

54
templates/compilacao/index.html

@ -1,16 +1,60 @@
{% extends "base.html" %}
{% load i18n %}
{% load compilacao_filters %}
{% block title%}
<h1>{{ view.get_norma }}</h1>
{% endblock %}
{% endblock %}
{% 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 %}

51
templates/compilacao/template_render_bloco.html

@ -1,41 +1,34 @@
{% 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 %}
</div>
</div>
{% elif dispositivo.nivel < view.flag_nivel_old %}
{% close_div view.flag_nivel_old dispositivo.nivel %}
{% endif%}
<div class="dispositivo" id="d{{dispositivo.id}}">
{% spaceless %}
<div class="{% dispositivo_desativado dispositivo %} {{ dispositivo.tipo_dispositivo.class_css }}" id="id{{dispositivo.id}}">
{{ dispositivo.tipo_dispositivo.rotulo_prefixo_html|safe }}
<a name="{{dispositivo.pk}}" >{{ dispositivo.rotulo }}</a>
{{ dispositivo.tipo_dispositivo.rotulo_sufixo_html|safe }}
{{ dispositivo.tipo_dispositivo.texto_prefixo_html|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}}">
{{ dispositivo.tipo_dispositivo.nota_automatica_prefixo_html|safe }}
{% spaceless %}
{{ dispositivo.tipo_dispositivo.rotulo_prefixo_html|safe }}
<a name="{{dispositivo.pk}}">{{ dispositivo.rotulo }}</a>
{{ dispositivo.tipo_dispositivo.rotulo_sufixo_html|safe }}
{{ dispositivo.tipo_dispositivo.texto_prefixo_html|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}}">
{{ dispositivo.tipo_dispositivo.nota_automatica_prefixo_html|safe }}
{% nota_automatica dispositivo %}
{{ dispositivo.tipo_dispositivo.nota_automatica_sufixo_html|safe }}
</a>
{{ dispositivo.tipo_dispositivo.nota_automatica_sufixo_html|safe }}
</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%}
{% 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>
{% 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 %}
Loading…
Cancel
Save