diff --git a/compilacao/models.py b/compilacao/models.py index 99104bd81..37ea8f2ba 100644 --- a/compilacao/models.py +++ b/compilacao/models.py @@ -292,7 +292,7 @@ class Dispositivo(models.Model): dispositivo_pai = models.ForeignKey( 'self', blank=True, null=True, default=None, - related_name='+', + related_name='filhos', verbose_name=_('Dispositivo Pai')) dispositivo_vigencia = models.ForeignKey( 'self', diff --git a/compilacao/templatetags/__init__.py b/compilacao/templatetags/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/compilacao/templatetags/compilacao_filters.py b/compilacao/templatetags/compilacao_filters.py new file mode 100644 index 000000000..0e802bd9c --- /dev/null +++ b/compilacao/templatetags/compilacao_filters.py @@ -0,0 +1,13 @@ +from django import template +from django.db.models import Q + +from compilacao.models import Dispositivo + +register = template.Library() + + +@register.filter +def get_bloco(pk): + return Dispositivo.objects.order_by('ordem_bloco_atualizador').filter( + Q(dispositivo_pai_id=pk) | + Q(dispositivo_atualizador=pk)).select_related() diff --git a/compilacao/urls.py b/compilacao/urls.py index e69de29bb..158ce9fc1 100644 --- a/compilacao/urls.py +++ b/compilacao/urls.py @@ -0,0 +1,8 @@ +from django.conf.urls import url + +from compilacao import views + +urlpatterns = [ + url(r'^norma/(?P\d+)/compilacao/', + views.CompilacaoView.as_view(), name='compilacao'), +] diff --git a/compilacao/views.py b/compilacao/views.py index 60f00ef0e..ec70879d9 100644 --- a/compilacao/views.py +++ b/compilacao/views.py @@ -1 +1,27 @@ -# Create your views here. +from django.views.generic.list import ListView + +from compilacao.models import Dispositivo +from norma.models import NormaJuridica + + +class CompilacaoView(ListView): + model = Dispositivo + template_name = 'compilacao/index.html' + + flag_alteradora = None + + def get_queryset(self): + return Dispositivo.objects.filter( + ordem__gt=0, + norma_id=self.kwargs['norma_id']).select_related() + + def get_norma(self): + return NormaJuridica.objects.get( + pk=self.kwargs['norma_id']) + + def is_norma_alteradora(self): + if self.flag_alteradora is None: + self.flag_alteradora = NormaJuridica.objects.get( + pk=self.kwargs['norma_id'] + ).dispositivos_alterados_set.count() > 1 + return self.flag_alteradora diff --git a/norma/models.py b/norma/models.py index fee95bdeb..32d616dce 100644 --- a/norma/models.py +++ b/norma/models.py @@ -98,10 +98,10 @@ class NormaJuridica(models.Model): verbose_name_plural = _('Normas Jurídicas') def __str__(self): - return _('%(tipo)s nº %(numero)s - %(materia)s - %(ano)s') % { + return _('%(tipo)s nº %(numero)s - %(data)s - %(ano)s') % { 'tipo': self.tipo, 'numero': self.numero, - 'materia': self.materia, + 'data': self.data, 'ano': self.ano} diff --git a/sapl/urls.py b/sapl/urls.py index 4ebf95179..4be663a14 100644 --- a/sapl/urls.py +++ b/sapl/urls.py @@ -29,6 +29,8 @@ urlpatterns = [ url(r'', include('lexml.urls')), url(r'', include('painel.urls')), + url(r'', include('compilacao.urls')), + # must come at the end # so that base /sistema/ url doesn't capture its children url(r'', include('base.urls')), diff --git a/static/styles/compilacao.scss b/static/styles/compilacao.scss new file mode 100644 index 000000000..2df3a5ea6 --- /dev/null +++ b/static/styles/compilacao.scss @@ -0,0 +1,7 @@ + + +.articulacao { + + background-color: rgba(100,100,100,0.3); + margin: 1em; +} \ No newline at end of file diff --git a/templates/base.html b/templates/base.html index 6c1742631..dae162f15 100644 --- a/templates/base.html +++ b/templates/base.html @@ -20,6 +20,7 @@ + {# Scripts #} {# modernizr must be in head (see http://modernizr.com/docs/#installing) #} diff --git a/templates/compilacao/index.html b/templates/compilacao/index.html new file mode 100644 index 000000000..c9f9e40f7 --- /dev/null +++ b/templates/compilacao/index.html @@ -0,0 +1,46 @@ +{% extends "base.html" %} +{% load i18n %} +{% load compilacao_filters %} + + +{% block title%} +

{{ view.get_norma }}

+{% endblock %} + +{% block base_content %} + {% for dispositivo in view.get_queryset %} + {% if dispositivo.tipo_dispositivo.class_css == 'articulacao'%} + {%if not forloop.first%} + + {% endif%} +
+ {% else %} + + + + + +
+ {{ dispositivo.tipo_dispositivo.class_css }} - {{ dispositivo.rotulo }} - {{ dispositivo.texto|safe }} +
+ + {% if view.is_norma_alteradora %} + {% if dispositivo.tipo_dispositivo.class_css == 'bloco_alteracao'%} + {% for alterado in dispositivo.id|get_bloco %} + +
+ {{ alterado.tipo_dispositivo.class_css }} - {{ alterado.rotulo }} - {{ alterado.texto }} +
+
+ + {% endfor %} + {% endif%} + {% endif%} + +
+ {% endif%} + {%if forloop.last %} +
+ {% endif%} + {% endfor %} +{% endblock base_content %} \ No newline at end of file