diff --git a/compilacao/templatetags/compilacao_filters.py b/compilacao/templatetags/compilacao_filters.py index ce7c18df6..81ad6ea2c 100644 --- a/compilacao/templatetags/compilacao_filters.py +++ b/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: diff --git a/compilacao/views.py b/compilacao/views.py index ff4e7edc1..e14114f48 100644 --- a/compilacao/views.py +++ b/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 diff --git a/norma/models.py b/norma/models.py index 62512d500..a6f24dce7 100644 --- a/norma/models.py +++ b/norma/models.py @@ -103,7 +103,7 @@ class NormaJuridica(models.Model): return _('%(tipo)s nº %(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): diff --git a/norma/urls.py b/norma/urls.py index 1db761f8c..f2900f535 100644 --- a/norma/urls.py +++ b/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 diff --git a/static/styles/compilacao.scss b/static/styles/compilacao.scss index 566b82cac..b1c1cde84 100644 --- a/static/styles/compilacao.scss +++ b/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; -} \ No newline at end of file +} + + +.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; +} diff --git a/templates/compilacao/bloco_alteracao.html b/templates/compilacao/bloco_alteracao.html index 3104bc978..1051b0b6c 100644 --- a/templates/compilacao/bloco_alteracao.html +++ b/templates/compilacao/bloco_alteracao.html @@ -1,18 +1,10 @@ -{% load compilacao_filters %} - +{% load compilacao_filters %} {% for ch in dispositivo.pk|get_bloco %} - -
-
- - {{ ch.tipo_dispositivo.rotulo_prefixo_html|safe }} - - {{ ch.rotulo }} - - {{ ch.tipo_dispositivo.rotulo_sufixo_html|safe }} - - {{ ch.tipo_dispositivo.texto_prefixo_html|safe }} - {{ ch.texto|safe }} -
-
+{% spaceless %} +
+
+ {{ ch.tipo_dispositivo.rotulo_prefixo_html|safe }}{{ ch.rotulo }}{{ ch.tipo_dispositivo.rotulo_sufixo_html|safe }}{{ ch.tipo_dispositivo.texto_prefixo_html|safe }}{{ ch.texto|safe }} +
+
+{% endspaceless %} {% endfor %} \ No newline at end of file diff --git a/templates/compilacao/index.html b/templates/compilacao/index.html index e31422c53..05ba14a41 100644 --- a/templates/compilacao/index.html +++ b/templates/compilacao/index.html @@ -1,16 +1,60 @@ {% extends "base.html" %} {% load i18n %} {% load compilacao_filters %} - - + + {% block title%}

{{ view.get_norma }}

-{% endblock %} +{% endblock %} {% block base_content %} - - {% include 'compilacao/template_render_bloco.html'%} + +
+
+ +
+ +{% include 'compilacao/template_render_bloco.html'%} +
{% endblock base_content %} \ No newline at end of file diff --git a/templates/compilacao/template_render_bloco.html b/templates/compilacao/template_render_bloco.html index bf8e9689a..f797163bd 100644 --- a/templates/compilacao/template_render_bloco.html +++ b/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 %} - + {% elif dispositivo.nivel < view.flag_nivel_old %} {% close_div view.flag_nivel_old dispositivo.nivel %} {% endif%}
- {% spaceless %}
- - {{ dispositivo.tipo_dispositivo.rotulo_prefixo_html|safe }} - {{ dispositivo.rotulo }} - {{ dispositivo.tipo_dispositivo.rotulo_sufixo_html|safe }} - - {{ dispositivo.tipo_dispositivo.texto_prefixo_html|safe }} - {{ dispositivo.texto|safe }} - - {% if dispositivo.norma_publicada_id != None %} - - - {{ dispositivo.tipo_dispositivo.nota_automatica_prefixo_html|safe }} +{% spaceless %} + {{ dispositivo.tipo_dispositivo.rotulo_prefixo_html|safe }} + {{ dispositivo.rotulo }} + {{ dispositivo.tipo_dispositivo.rotulo_sufixo_html|safe }} + {{ dispositivo.tipo_dispositivo.texto_prefixo_html|safe }} + {{ dispositivo.texto|safe }} + {% if dispositivo.norma_publicada_id != None %} + + {{ dispositivo.tipo_dispositivo.nota_automatica_prefixo_html|safe }} {% nota_automatica dispositivo %} - {{ dispositivo.tipo_dispositivo.nota_automatica_sufixo_html|safe }} - + {{ dispositivo.tipo_dispositivo.nota_automatica_sufixo_html|safe }} + + {% 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%}
- {% 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 %} \ No newline at end of file