mirror of https://github.com/interlegis/sapl.git
Edward Ribeiro
9 years ago
33 changed files with 1456 additions and 7 deletions
@ -0,0 +1,3 @@ |
|||||
|
from sapl.utils import register_all_models_in_admin |
||||
|
|
||||
|
register_all_models_in_admin(__name__) |
@ -0,0 +1,7 @@ |
|||||
|
from django.apps import AppConfig |
||||
|
from django.utils.translation import ugettext_lazy as _ |
||||
|
|
||||
|
|
||||
|
class CompilacaoAppConfig(AppConfig): |
||||
|
name = 'compilacao' |
||||
|
verbose_name = _('Compilação') |
@ -0,0 +1,27 @@ |
|||||
|
insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5) VALUES (1, 'Articulação', 'articulacao', '', '', 0, '.....', '', '', '', '', '', '', True, '1', '1', '1', '1', '1', '1'); |
||||
|
insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5) VALUES (2, 'Ementa', 'ementa', '', '', 0, '.....', '', '', '', '', '', '', False, 'N', '1', '1', '1', '1', '1'); |
||||
|
insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5) VALUES (3, 'Bloco Alteração', 'bloco_alteracao', '', '', 0, '.....', '', '', '', '', '', '', True, '1', '1', '1', '1', '1', '1'); |
||||
|
insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5) VALUES (4, 'Omissis', 'omissis', '', '', 0, '.....', '', '', '', '', '', '', False, '1', '1', '1', '1', '1', '1'); |
||||
|
insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5) VALUES (11, 'Anexo', 'anexo', '', 'Anexo', 0, '-----', '', '<br>', '', '<br>', '', '', False, 'I', '1', '1', '1', '1', '1'); |
||||
|
insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5) VALUES (12, 'Parte', 'parte', '', 'Parte', 0, '-----', '', '<br>', '', '<br>', '', '', False, 'I', '1', '1', '1', '1', '1'); |
||||
|
insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5) VALUES (13, 'Livro', 'livro', '', 'Livro', 0, '-----', '', '<br>', '', '<br>', '', '', False, 'I', '1', '1', '1', '1', '1'); |
||||
|
insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5) VALUES (14, 'Título', 'titulo', '', 'Título', 0, '-----', '', '<br>', '', '<br>', '', '', False, 'I', '1', '1', '1', '1', '1'); |
||||
|
insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5) VALUES (15, 'Capítulo', 'capitulo', '', 'Capítulo', 0, '-----', '', '<br>', '', '<br>', '', '', False, 'I', '1', '1', '1', '1', '1'); |
||||
|
insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5) VALUES (16, 'Seção', 'secao', '', 'Seção', 0, '-----', '', '<br>', '', '<br>', '', '', False, 'I', '1', '1', '1', '1', '1'); |
||||
|
insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5) VALUES (17, 'SubSeção', 'subsecao', '', 'SubSeção', 0, '-----', '', '<br>', '', '<br>', '', '', False, '1', '1', '1', '1', '1', '1'); |
||||
|
insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5) VALUES (18, 'Item de Seção', 'itemsecao', '', 'Item', 0, '-----', '', '<br>', '', '<br>', '', '', False, '1', '1', '1', '1', '1', '1'); |
||||
|
insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5) VALUES (19, 'Artigo', 'artigo', '', 'Art.', 9, '-----', '', ' – ', '', '', '', '', True, '1', '1', '1', '1', '1', '1'); |
||||
|
insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5) VALUES (20, 'Caput', 'caput', '', '', 0, '', '', '', '', '', '', '', False, 'N', 'N', 'N', 'N', 'N', 'N'); |
||||
|
insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5) VALUES (21, 'Parágrafo', 'paragrafo', '', '§;Parágrafo Único', 9, '-----', '', ' – ', '', '', '', '', False, '1', '1', '1', '1', '1', '1'); |
||||
|
insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5) VALUES (22, 'Inciso', 'inciso', '', '', 0, '.....', '', ' – ', '', '', '', '', False, 'I', '1', '1', '1', '1', '1'); |
||||
|
insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5) VALUES (23, 'Alinea', 'alinea', '', '', 0, '.....', '', ' – ', '', '', '', '', False, 'a', '1', '1', '1', '1', '1'); |
||||
|
insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5) VALUES (24, 'Item', 'item', '', '', 0, '.....', '', ' – ', '', '', '', '', False, '1', '1', '1', '1', '1', '1'); |
||||
|
insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5) VALUES (25, 'Disposições Preliminares', 'disp_preliminares', '', 'Disposições Preliminares', 0, '-----', '', '<br>', '', '<br>', '', '', False, 'N', '1', '1', '1', '1', '1'); |
||||
|
insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5) VALUES (26, 'Disposições Gerais', 'disp_gerais', '', 'Disposições Gerais', 0, '-----', '', '<br>', '', '<br>', '', '', False, 'N', '1', '1', '1', '1', '1'); |
||||
|
insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5) VALUES (27, 'Disposições Transitórias', 'disp_transitorias', '', 'Disposições Transitórias', 0, '-----', '', '<br>', '', '<br>', '', '', False, 'N', '1', '1', '1', '1', '1'); |
||||
|
insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5) VALUES (28, 'Disposições Finais', 'disp_finais', '', 'Disposições Finais', 0, '-----', '', '<br>', '', '<br>', '', '', False, 'N', '1', '1', '1', '1', '1'); |
||||
|
insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5) VALUES (29, 'Texto Não Estruturado', 'texto_n_estruturado', '', '', 0, '.....', '', '', '', '', '', '',False, '1', '1', '1', '1', '1', '1'); |
||||
|
|
||||
|
|
||||
|
|
||||
|
select setval('compilacao_tipodispositivo_id_seq'::regclass, (select max(id) from compilacao_tipodispositivo)); |
@ -0,0 +1,207 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
from __future__ import unicode_literals |
||||
|
|
||||
|
from django.db import models, migrations |
||||
|
from django.conf import settings |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL), |
||||
|
('norma', '0003_auto_20150906_0239'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.CreateModel( |
||||
|
name='Dispositivo', |
||||
|
fields=[ |
||||
|
('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)), |
||||
|
('ordem', models.PositiveIntegerField(verbose_name='Ordem de Renderização', default=0)), |
||||
|
('ordem_bloco_atualizador', models.PositiveIntegerField(verbose_name='Ordem de Renderização no Bloco Atualizador', default=0)), |
||||
|
('nivel', models.PositiveIntegerField(blank=True, null=True, verbose_name='Nível Estrutural', default=0)), |
||||
|
('dispositivo0', models.PositiveIntegerField(verbose_name='Número do Dispositivo', default=0)), |
||||
|
('dispositivo1', models.PositiveIntegerField(blank=True, null=True, verbose_name='Primeiro Nível de Variação', default=0)), |
||||
|
('dispositivo2', models.PositiveIntegerField(blank=True, null=True, verbose_name='Segundo Nível de Variação', default=0)), |
||||
|
('dispositivo3', models.PositiveIntegerField(blank=True, null=True, verbose_name='Terceiro Nível de Variação', default=0)), |
||||
|
('dispositivo4', models.PositiveIntegerField(blank=True, null=True, verbose_name='Quarto Nível de Variação', default=0)), |
||||
|
('dispositivo5', models.PositiveIntegerField(blank=True, null=True, verbose_name='Quinto Nível de Variação', default=0)), |
||||
|
('rotulo', models.CharField(blank=True, max_length=50, verbose_name='Rótulo', default='')), |
||||
|
('texto', models.TextField(blank=True, verbose_name='Texto', default='')), |
||||
|
('texto_atualizador', models.TextField(blank=True, verbose_name='Texto no Dispositivo Atualizador', default='')), |
||||
|
('inicio_vigencia', models.DateField(verbose_name='Início de Vigência')), |
||||
|
('fim_vigencia', models.DateField(blank=True, null=True, verbose_name='Fim de Vigência')), |
||||
|
('inicio_eficacia', models.DateField(verbose_name='Início de Eficácia')), |
||||
|
('fim_eficacia', models.DateField(blank=True, null=True, verbose_name='Fim de Eficácia')), |
||||
|
('inconstitucionalidade', models.BooleanField(verbose_name='Inconstitucionalidade', default=False, choices=[(True, 'Sim'), (False, 'Não')])), |
||||
|
('visibilidade', models.BooleanField(verbose_name='Visibilidade na Norma Publicada', default=False, choices=[(True, 'Sim'), (False, 'Não')])), |
||||
|
('timestamp', models.DateTimeField()), |
||||
|
('dispositivo_atualizador', models.ForeignKey(blank=True, null=True, to='compilacao.Dispositivo', verbose_name='Dispositivo Atualizador', default=None, related_name='dispositivo_dispositivo_atualizador')), |
||||
|
('dispositivo_pai', models.ForeignKey(blank=True, null=True, to='compilacao.Dispositivo', verbose_name='Dispositivo Pai', default=None, related_name='dispositivo_dispositivo_pai')), |
||||
|
('dispositivo_subsequente', models.ForeignKey(blank=True, null=True, to='compilacao.Dispositivo', verbose_name='Dispositivo Subsequente', default=None, related_name='dispositivo_dispositivo_subsequente')), |
||||
|
('dispositivo_substituido', models.ForeignKey(blank=True, null=True, to='compilacao.Dispositivo', verbose_name='Dispositivo Substituido', default=None, related_name='dispositivo_dispositivo_substituido')), |
||||
|
('dispositivo_vigencia', models.ForeignKey(blank=True, null=True, to='compilacao.Dispositivo', verbose_name='Dispositivo de Vigência', default=None, related_name='dispositivo_dispositivo_vigencia')), |
||||
|
('norma', models.ForeignKey(to='norma.NormaJuridica', verbose_name='Norma Jurídica')), |
||||
|
('norma_publicada', models.ForeignKey(blank=True, null=True, to='norma.NormaJuridica', verbose_name='Norma Jurídica Publicada', default=None, related_name='dispositivo_norma_publicada')), |
||||
|
], |
||||
|
options={ |
||||
|
'verbose_name': 'Dispositivo', |
||||
|
'verbose_name_plural': 'Dispositivos', |
||||
|
}, |
||||
|
), |
||||
|
migrations.CreateModel( |
||||
|
name='Nota', |
||||
|
fields=[ |
||||
|
('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)), |
||||
|
('texto', models.TextField(verbose_name='Texto da Nota')), |
||||
|
('url_externa', models.CharField(blank=True, max_length=1024, verbose_name='Url externa')), |
||||
|
('data_criacao', models.DateTimeField(verbose_name='Data de Criação')), |
||||
|
('publicacao', models.DateTimeField(verbose_name='Data de Publicação')), |
||||
|
('efetifidade', models.DateTimeField(verbose_name='Data de Efeito')), |
||||
|
('publicidade', models.PositiveSmallIntegerField(verbose_name='Nível de Publicidade', choices=[(1, 'Nota Privada'), (2, 'Nota Setorial'), (3, 'Nota Institucional'), (4, 'Nota Pública')])), |
||||
|
('dispositivo', models.ForeignKey(to='compilacao.Dispositivo', verbose_name='Dispositivo da Nota')), |
||||
|
('owner', models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name='Dono da Nota')), |
||||
|
], |
||||
|
options={ |
||||
|
'verbose_name': 'Nota', |
||||
|
'verbose_name_plural': 'Notas', |
||||
|
}, |
||||
|
), |
||||
|
migrations.CreateModel( |
||||
|
name='Publicacao', |
||||
|
fields=[ |
||||
|
('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)), |
||||
|
('publicacao', models.DateTimeField(verbose_name='Data de Publicação')), |
||||
|
('pagina_inicio', models.PositiveIntegerField(blank=True, null=True, verbose_name='Pg. Início')), |
||||
|
('pagina_fim', models.PositiveIntegerField(blank=True, null=True, verbose_name='Pg. Fim')), |
||||
|
('timestamp', models.DateTimeField()), |
||||
|
('norma', models.ForeignKey(to='norma.NormaJuridica', verbose_name='Norma Jurídica')), |
||||
|
], |
||||
|
options={ |
||||
|
'verbose_name': 'Publicação', |
||||
|
'verbose_name_plural': 'Publicações', |
||||
|
}, |
||||
|
), |
||||
|
migrations.CreateModel( |
||||
|
name='TipoDispositivo', |
||||
|
fields=[ |
||||
|
('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)), |
||||
|
('nome', models.CharField(max_length=50, verbose_name='Nome', unique=True)), |
||||
|
('class_css', models.CharField(max_length=20, verbose_name='Classe CSS')), |
||||
|
('rotulo_prefixo_html', models.CharField(blank=True, max_length=100, verbose_name='Prefixo html do rótulo')), |
||||
|
('rotulo_prefixo_texto', models.CharField(blank=True, max_length=30, verbose_name='Prefixo de construção do rótulo')), |
||||
|
('rotulo_ordinal', models.IntegerField(verbose_name='Tipo de número do rótulo')), |
||||
|
('rotulo_separadores_variacao', models.CharField(blank=True, max_length=5, verbose_name='Separadores das Variações')), |
||||
|
('rotulo_sufixo_texto', models.CharField(blank=True, max_length=30, verbose_name='Sufixo de construção do rótulo')), |
||||
|
('rotulo_sufixo_html', models.CharField(blank=True, max_length=100, verbose_name='Sufixo html do rótulo')), |
||||
|
('texto_prefixo_html', models.CharField(blank=True, max_length=100, verbose_name='Prefixo html do texto')), |
||||
|
('texto_sufixo_html', models.CharField(blank=True, max_length=100, verbose_name='Sufixo html do texto')), |
||||
|
('nota_automatica_prefixo_html', models.CharField(blank=True, max_length=100, verbose_name='Prefixo html da nota automática')), |
||||
|
('nota_automatica_sufixo_html', models.CharField(blank=True, max_length=100, verbose_name='Sufixo html da nota automática')), |
||||
|
('contagem_continua', models.BooleanField(verbose_name='Contagem contínua', choices=[(True, 'Sim'), (False, 'Não')])), |
||||
|
('formato_variacao0', models.CharField(max_length=1, verbose_name='Formato da Numeração', default='1', choices=[('1', '(1) Numérico'), ('I', '(I) Romano Maiúsculo'), ('i', '(i) Romano Minúsculo'), ('A', '(A) Alfabético Maiúsculo'), ('a', '(a) Alfabético Minúsculo'), ('*', 'Tópico - Sem contagem'), ('N', 'Sem renderização')])), |
||||
|
('formato_variacao1', models.CharField(max_length=1, verbose_name='Formato da Variação 1', default='1', choices=[('1', '(1) Numérico'), ('I', '(I) Romano Maiúsculo'), ('i', '(i) Romano Minúsculo'), ('A', '(A) Alfabético Maiúsculo'), ('a', '(a) Alfabético Minúsculo'), ('*', 'Tópico - Sem contagem'), ('N', 'Sem renderização')])), |
||||
|
('formato_variacao2', models.CharField(max_length=1, verbose_name='Formato da Variação 2', default='1', choices=[('1', '(1) Numérico'), ('I', '(I) Romano Maiúsculo'), ('i', '(i) Romano Minúsculo'), ('A', '(A) Alfabético Maiúsculo'), ('a', '(a) Alfabético Minúsculo'), ('*', 'Tópico - Sem contagem'), ('N', 'Sem renderização')])), |
||||
|
('formato_variacao3', models.CharField(max_length=1, verbose_name='Formato da Variação 3', default='1', choices=[('1', '(1) Numérico'), ('I', '(I) Romano Maiúsculo'), ('i', '(i) Romano Minúsculo'), ('A', '(A) Alfabético Maiúsculo'), ('a', '(a) Alfabético Minúsculo'), ('*', 'Tópico - Sem contagem'), ('N', 'Sem renderização')])), |
||||
|
('formato_variacao4', models.CharField(max_length=1, verbose_name='Formato da Variação 4', default='1', choices=[('1', '(1) Numérico'), ('I', '(I) Romano Maiúsculo'), ('i', '(i) Romano Minúsculo'), ('A', '(A) Alfabético Maiúsculo'), ('a', '(a) Alfabético Minúsculo'), ('*', 'Tópico - Sem contagem'), ('N', 'Sem renderização')])), |
||||
|
('formato_variacao5', models.CharField(max_length=1, verbose_name='Formato da Variação 5', default='1', choices=[('1', '(1) Numérico'), ('I', '(I) Romano Maiúsculo'), ('i', '(i) Romano Minúsculo'), ('A', '(A) Alfabético Maiúsculo'), ('a', '(a) Alfabético Minúsculo'), ('*', 'Tópico - Sem contagem'), ('N', 'Sem renderização')])), |
||||
|
], |
||||
|
options={ |
||||
|
'verbose_name': 'Tipo de Dispositivo', |
||||
|
'verbose_name_plural': 'Tipos de Dispositivo', |
||||
|
}, |
||||
|
), |
||||
|
migrations.CreateModel( |
||||
|
name='TipoNota', |
||||
|
fields=[ |
||||
|
('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)), |
||||
|
('sigla', models.CharField(max_length=10, verbose_name='Sigla', unique=True)), |
||||
|
('nome', models.CharField(max_length=50, verbose_name='Nome')), |
||||
|
('modelo', models.TextField(blank=True, verbose_name='Modelo')), |
||||
|
], |
||||
|
options={ |
||||
|
'verbose_name': 'Tipo de Nota', |
||||
|
'verbose_name_plural': 'Tipos de Nota', |
||||
|
}, |
||||
|
), |
||||
|
migrations.CreateModel( |
||||
|
name='TipoPublicacao', |
||||
|
fields=[ |
||||
|
('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)), |
||||
|
('sigla', models.CharField(max_length=10, verbose_name='Sigla', unique=True)), |
||||
|
('nome', models.CharField(max_length=50, verbose_name='Nome')), |
||||
|
], |
||||
|
options={ |
||||
|
'verbose_name': 'Tipo de Publicação', |
||||
|
'verbose_name_plural': 'Tipos de Publicação', |
||||
|
}, |
||||
|
), |
||||
|
migrations.CreateModel( |
||||
|
name='TipoVide', |
||||
|
fields=[ |
||||
|
('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)), |
||||
|
('sigla', models.CharField(max_length=10, verbose_name='Sigla', unique=True)), |
||||
|
('nome', models.CharField(max_length=50, verbose_name='Nome')), |
||||
|
], |
||||
|
options={ |
||||
|
'verbose_name': 'Tipo de Vide', |
||||
|
'verbose_name_plural': 'Tipos de Vide', |
||||
|
}, |
||||
|
), |
||||
|
migrations.CreateModel( |
||||
|
name='VeiculoPublicacao', |
||||
|
fields=[ |
||||
|
('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)), |
||||
|
('sigla', models.CharField(max_length=10, verbose_name='Sigla', unique=True)), |
||||
|
('nome', models.CharField(max_length=60, verbose_name='Nome')), |
||||
|
], |
||||
|
options={ |
||||
|
'verbose_name': 'Veículo de Publicação', |
||||
|
'verbose_name_plural': 'Veículos de Publicação', |
||||
|
}, |
||||
|
), |
||||
|
migrations.CreateModel( |
||||
|
name='Vide', |
||||
|
fields=[ |
||||
|
('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)), |
||||
|
('data_criacao', models.DateTimeField(verbose_name='Data de Criação')), |
||||
|
('texto', models.TextField(verbose_name='Texto do Vide')), |
||||
|
('dispositivo_base', models.ForeignKey(to='compilacao.Dispositivo', verbose_name='Dispositivo Base', related_name='vide_dispositivo_base')), |
||||
|
('dispositivo_ref', models.ForeignKey(to='compilacao.Dispositivo', verbose_name='Dispositivo Referido', related_name='vide_dispositivo_ref')), |
||||
|
('tipo', models.ForeignKey(to='compilacao.TipoVide', verbose_name='Tipo do Vide')), |
||||
|
], |
||||
|
options={ |
||||
|
'verbose_name': 'Vide', |
||||
|
'verbose_name_plural': 'Vides', |
||||
|
}, |
||||
|
), |
||||
|
migrations.AddField( |
||||
|
model_name='publicacao', |
||||
|
name='tipo_publicacao', |
||||
|
field=models.ForeignKey(to='compilacao.TipoPublicacao', verbose_name='Tipo de Publicação'), |
||||
|
), |
||||
|
migrations.AddField( |
||||
|
model_name='publicacao', |
||||
|
name='veiculo_publicacao', |
||||
|
field=models.ForeignKey(to='compilacao.VeiculoPublicacao', verbose_name='Veículo de Publicação'), |
||||
|
), |
||||
|
migrations.AddField( |
||||
|
model_name='nota', |
||||
|
name='tipo', |
||||
|
field=models.ForeignKey(to='compilacao.TipoNota', verbose_name='Tipo da Nota'), |
||||
|
), |
||||
|
migrations.AddField( |
||||
|
model_name='dispositivo', |
||||
|
name='publicacao', |
||||
|
field=models.ForeignKey(blank=True, null=True, to='compilacao.Publicacao', verbose_name='Publicação', default=None), |
||||
|
), |
||||
|
migrations.AddField( |
||||
|
model_name='dispositivo', |
||||
|
name='tipo_dispositivo', |
||||
|
field=models.ForeignKey(to='compilacao.TipoDispositivo', verbose_name='Tipo do Dispositivo'), |
||||
|
), |
||||
|
migrations.AlterUniqueTogether( |
||||
|
name='dispositivo', |
||||
|
unique_together=set([('norma', 'dispositivo0', 'dispositivo1', 'dispositivo2', 'dispositivo3', 'dispositivo4', 'dispositivo5', 'tipo_dispositivo', 'dispositivo_pai', 'publicacao'), ('norma', 'ordem')]), |
||||
|
), |
||||
|
] |
@ -0,0 +1,48 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
from __future__ import unicode_literals |
||||
|
|
||||
|
from django.db import models, migrations |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('compilacao', '0001_initial'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AlterModelOptions( |
||||
|
name='dispositivo', |
||||
|
options={'ordering': ['norma', 'ordem'], 'verbose_name_plural': 'Dispositivos', 'verbose_name': 'Dispositivo'}, |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='dispositivo', |
||||
|
name='dispositivo_atualizador', |
||||
|
field=models.ForeignKey(related_name='dispositivos_alterados_set', to='compilacao.Dispositivo', null=True, verbose_name='Dispositivo Atualizador', default=None, blank=True), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='dispositivo', |
||||
|
name='dispositivo_pai', |
||||
|
field=models.ForeignKey(related_name='+', to='compilacao.Dispositivo', null=True, verbose_name='Dispositivo Pai', default=None, blank=True), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='dispositivo', |
||||
|
name='dispositivo_subsequente', |
||||
|
field=models.ForeignKey(related_name='+', to='compilacao.Dispositivo', null=True, verbose_name='Dispositivo Subsequente', default=None, blank=True), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='dispositivo', |
||||
|
name='dispositivo_substituido', |
||||
|
field=models.ForeignKey(related_name='+', to='compilacao.Dispositivo', null=True, verbose_name='Dispositivo Substituido', default=None, blank=True), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='dispositivo', |
||||
|
name='dispositivo_vigencia', |
||||
|
field=models.ForeignKey(related_name='+', to='compilacao.Dispositivo', null=True, verbose_name='Dispositivo de Vigência', default=None, blank=True), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='dispositivo', |
||||
|
name='norma_publicada', |
||||
|
field=models.ForeignKey(related_name='dispositivos_alterados_set', to='norma.NormaJuridica', null=True, verbose_name='Norma Jurídica Publicada', default=None, blank=True), |
||||
|
), |
||||
|
] |
@ -0,0 +1,19 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
from __future__ import unicode_literals |
||||
|
|
||||
|
from django.db import models, migrations |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('compilacao', '0002_auto_20150907_2334'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AlterField( |
||||
|
model_name='dispositivo', |
||||
|
name='dispositivo_pai', |
||||
|
field=models.ForeignKey(blank=True, null=True, verbose_name='Dispositivo Pai', to='compilacao.Dispositivo', related_name='filhos', default=None), |
||||
|
), |
||||
|
] |
@ -0,0 +1,34 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
from __future__ import unicode_literals |
||||
|
|
||||
|
from django.db import models, migrations |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('compilacao', '0003_auto_20150911_1735'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AlterField( |
||||
|
model_name='dispositivo', |
||||
|
name='dispositivo_pai', |
||||
|
field=models.ForeignKey(to='compilacao.Dispositivo', verbose_name='Dispositivo Pai', blank=True, related_name='dispositivos_filhos_set', null=True, default=None), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='dispositivo', |
||||
|
name='norma', |
||||
|
field=models.ForeignKey(related_name='dispositivos_set', to='norma.NormaJuridica', verbose_name='Norma Jurídica'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='dispositivo', |
||||
|
name='norma_publicada', |
||||
|
field=models.ForeignKey(to='norma.NormaJuridica', verbose_name='Norma Jurídica Publicada', blank=True, related_name='dispositivos_alterados_pela_norma_set', null=True, default=None), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='dispositivo', |
||||
|
name='tipo_dispositivo', |
||||
|
field=models.ForeignKey(related_name='dispositivos_do_tipo_set', to='compilacao.TipoDispositivo', verbose_name='Tipo do Dispositivo'), |
||||
|
), |
||||
|
] |
@ -0,0 +1,402 @@ |
|||||
|
from django.contrib.auth.models import User |
||||
|
from django.db import models |
||||
|
from django.utils.translation import ugettext_lazy as _ |
||||
|
|
||||
|
from norma.models import NormaJuridica |
||||
|
from sapl.utils import YES_NO_CHOICES |
||||
|
|
||||
|
|
||||
|
class TipoNota(models.Model): |
||||
|
sigla = models.CharField( |
||||
|
max_length=10, unique=True, verbose_name=_('Sigla')) |
||||
|
nome = models.CharField(max_length=50, verbose_name=_('Nome')) |
||||
|
modelo = models.TextField( |
||||
|
blank=True, verbose_name=_('Modelo')) |
||||
|
|
||||
|
class Meta: |
||||
|
verbose_name = _('Tipo de Nota') |
||||
|
verbose_name_plural = _('Tipos de Nota') |
||||
|
|
||||
|
def __str__(self): |
||||
|
return '%s: %s' % (self.sigla, self.nome) |
||||
|
|
||||
|
|
||||
|
class TipoVide(models.Model): |
||||
|
sigla = models.CharField( |
||||
|
max_length=10, unique=True, verbose_name=_('Sigla')) |
||||
|
nome = models.CharField(max_length=50, verbose_name=_('Nome')) |
||||
|
|
||||
|
class Meta: |
||||
|
verbose_name = _('Tipo de Vide') |
||||
|
verbose_name_plural = _('Tipos de Vide') |
||||
|
|
||||
|
def __str__(self): |
||||
|
return '%s: %s' % (self.sigla, self.nome) |
||||
|
|
||||
|
|
||||
|
class TipoDispositivo(models.Model): |
||||
|
FNC1 = '1' |
||||
|
FNCI = 'I' |
||||
|
FNCi = 'i' |
||||
|
FNCA = 'A' |
||||
|
FNCa = 'a' |
||||
|
FNC8 = '*' |
||||
|
FNCN = 'N' |
||||
|
FORMATO_NUMERACAO_CHOICES = ( |
||||
|
(FNC1, _('(1) Numérico')), |
||||
|
(FNCI, _('(I) Romano Maiúsculo')), |
||||
|
(FNCi, _('(i) Romano Minúsculo')), |
||||
|
(FNCA, _('(A) Alfabético Maiúsculo')), |
||||
|
(FNCa, _('(a) Alfabético Minúsculo')), |
||||
|
(FNC8, _('Tópico - Sem contagem')), |
||||
|
(FNCN, _('Sem renderização')), |
||||
|
) |
||||
|
|
||||
|
nome = models.CharField( |
||||
|
max_length=50, unique=True, verbose_name=_('Nome')) |
||||
|
class_css = models.CharField( |
||||
|
max_length=20, |
||||
|
verbose_name=_('Classe CSS')) |
||||
|
rotulo_prefixo_html = models.CharField( |
||||
|
blank=True, |
||||
|
max_length=100, |
||||
|
verbose_name=_('Prefixo html do rótulo')) |
||||
|
rotulo_prefixo_texto = models.CharField( |
||||
|
blank=True, |
||||
|
max_length=30, |
||||
|
verbose_name=_('Prefixo de construção do rótulo')) |
||||
|
rotulo_ordinal = models.IntegerField( |
||||
|
verbose_name=_('Tipo de número do rótulo')) |
||||
|
rotulo_separadores_variacao = models.CharField( |
||||
|
blank=True, |
||||
|
max_length=5, |
||||
|
verbose_name=_('Separadores das Variações')) |
||||
|
rotulo_sufixo_texto = models.CharField( |
||||
|
blank=True, |
||||
|
max_length=30, |
||||
|
verbose_name=_('Sufixo de construção do rótulo')) |
||||
|
rotulo_sufixo_html = models.CharField( |
||||
|
blank=True, |
||||
|
max_length=100, |
||||
|
verbose_name=_('Sufixo html do rótulo')) |
||||
|
texto_prefixo_html = models.CharField( |
||||
|
blank=True, |
||||
|
max_length=100, |
||||
|
verbose_name=_('Prefixo html do texto')) |
||||
|
texto_sufixo_html = models.CharField( |
||||
|
blank=True, |
||||
|
max_length=100, |
||||
|
verbose_name=_('Sufixo html do texto')) |
||||
|
nota_automatica_prefixo_html = models.CharField( |
||||
|
blank=True, |
||||
|
max_length=100, |
||||
|
verbose_name=_('Prefixo html da nota automática')) |
||||
|
nota_automatica_sufixo_html = models.CharField( |
||||
|
blank=True, |
||||
|
max_length=100, |
||||
|
verbose_name=_('Sufixo html da nota automática')) |
||||
|
contagem_continua = models.BooleanField( |
||||
|
choices=YES_NO_CHOICES, verbose_name=_('Contagem contínua')) |
||||
|
formato_variacao0 = models.CharField( |
||||
|
max_length=1, |
||||
|
choices=FORMATO_NUMERACAO_CHOICES, |
||||
|
default=FNC1, |
||||
|
verbose_name=_('Formato da Numeração')) |
||||
|
formato_variacao1 = models.CharField( |
||||
|
max_length=1, |
||||
|
choices=FORMATO_NUMERACAO_CHOICES, |
||||
|
default=FNC1, |
||||
|
verbose_name=_('Formato da Variação 1')) |
||||
|
formato_variacao2 = models.CharField( |
||||
|
max_length=1, |
||||
|
choices=FORMATO_NUMERACAO_CHOICES, |
||||
|
default=FNC1, |
||||
|
verbose_name=_('Formato da Variação 2')) |
||||
|
formato_variacao3 = models.CharField( |
||||
|
max_length=1, |
||||
|
choices=FORMATO_NUMERACAO_CHOICES, |
||||
|
default=FNC1, |
||||
|
verbose_name=_('Formato da Variação 3')) |
||||
|
formato_variacao4 = models.CharField( |
||||
|
max_length=1, |
||||
|
choices=FORMATO_NUMERACAO_CHOICES, |
||||
|
default=FNC1, |
||||
|
verbose_name=_('Formato da Variação 4')) |
||||
|
formato_variacao5 = models.CharField( |
||||
|
max_length=1, |
||||
|
choices=FORMATO_NUMERACAO_CHOICES, |
||||
|
default=FNC1, |
||||
|
verbose_name=_('Formato da Variação 5')) |
||||
|
|
||||
|
class Meta: |
||||
|
verbose_name = _('Tipo de Dispositivo') |
||||
|
verbose_name_plural = _('Tipos de Dispositivo') |
||||
|
|
||||
|
def __str__(self): |
||||
|
return self.nome |
||||
|
|
||||
|
|
||||
|
class TipoPublicacao(models.Model): |
||||
|
sigla = models.CharField( |
||||
|
max_length=10, unique=True, verbose_name=_('Sigla')) |
||||
|
nome = models.CharField(max_length=50, verbose_name=_('Nome')) |
||||
|
|
||||
|
class Meta: |
||||
|
verbose_name = _('Tipo de Publicação') |
||||
|
verbose_name_plural = _('Tipos de Publicação') |
||||
|
|
||||
|
def __str__(self): |
||||
|
return self.sigla + ' - ' + self.nome |
||||
|
|
||||
|
|
||||
|
class VeiculoPublicacao(models.Model): |
||||
|
sigla = models.CharField( |
||||
|
max_length=10, unique=True, verbose_name=_('Sigla')) |
||||
|
nome = models.CharField(max_length=60, verbose_name=_('Nome')) |
||||
|
|
||||
|
class Meta: |
||||
|
verbose_name = _('Veículo de Publicação') |
||||
|
verbose_name_plural = _('Veículos de Publicação') |
||||
|
|
||||
|
def __str__(self): |
||||
|
return '%s: %s' % (self.sigla, self.nome) |
||||
|
|
||||
|
|
||||
|
class Publicacao(models.Model): |
||||
|
norma = models.ForeignKey( |
||||
|
NormaJuridica, verbose_name=_('Norma Jurídica')) |
||||
|
veiculo_publicacao = models.ForeignKey( |
||||
|
VeiculoPublicacao, verbose_name=_('Veículo de Publicação')) |
||||
|
tipo_publicacao = models.ForeignKey( |
||||
|
TipoPublicacao, verbose_name=_('Tipo de Publicação')) |
||||
|
publicacao = models.DateTimeField(verbose_name=_('Data de Publicação')) |
||||
|
pagina_inicio = models.PositiveIntegerField( |
||||
|
blank=True, null=True, verbose_name=_('Pg. Início')) |
||||
|
pagina_fim = models.PositiveIntegerField( |
||||
|
blank=True, null=True, verbose_name=_('Pg. Fim')) |
||||
|
timestamp = models.DateTimeField() |
||||
|
|
||||
|
class Meta: |
||||
|
verbose_name = _('Publicação') |
||||
|
verbose_name_plural = _('Publicações') |
||||
|
|
||||
|
def __str__(self): |
||||
|
return '%s: %s' % (self.veiculo_publicacao, self.publicacao) |
||||
|
|
||||
|
|
||||
|
class Dispositivo(models.Model): |
||||
|
TEXTO_PADRAO_DISPOSITIVO_REVOGADO = _('(Revogado)') |
||||
|
ordem = models.PositiveIntegerField( |
||||
|
default=0, |
||||
|
verbose_name=_('Ordem de Renderização')) |
||||
|
ordem_bloco_atualizador = models.PositiveIntegerField( |
||||
|
default=0, |
||||
|
verbose_name=_('Ordem de Renderização no Bloco Atualizador')) |
||||
|
nivel = models.PositiveIntegerField( |
||||
|
default=0, |
||||
|
blank=True, |
||||
|
null=True, |
||||
|
verbose_name=_('Nível Estrutural')) |
||||
|
|
||||
|
dispositivo0 = models.PositiveIntegerField( |
||||
|
default=0, |
||||
|
verbose_name=_('Número do Dispositivo')) |
||||
|
dispositivo1 = models.PositiveIntegerField( |
||||
|
default=0, |
||||
|
blank=True, |
||||
|
null=True, |
||||
|
verbose_name=_('Primeiro Nível de Variação')) |
||||
|
dispositivo2 = models.PositiveIntegerField( |
||||
|
default=0, |
||||
|
blank=True, |
||||
|
null=True, |
||||
|
verbose_name=_('Segundo Nível de Variação')) |
||||
|
dispositivo3 = models.PositiveIntegerField( |
||||
|
default=0, |
||||
|
blank=True, |
||||
|
null=True, |
||||
|
verbose_name=_('Terceiro Nível de Variação')) |
||||
|
dispositivo4 = models.PositiveIntegerField( |
||||
|
default=0, |
||||
|
blank=True, |
||||
|
null=True, |
||||
|
verbose_name=_('Quarto Nível de Variação')) |
||||
|
dispositivo5 = models.PositiveIntegerField( |
||||
|
default=0, |
||||
|
blank=True, |
||||
|
null=True, |
||||
|
verbose_name=_('Quinto Nível de Variação')) |
||||
|
|
||||
|
rotulo = models.CharField( |
||||
|
max_length=50, |
||||
|
blank=True, |
||||
|
default='', |
||||
|
verbose_name=_('Rótulo')) |
||||
|
texto = models.TextField( |
||||
|
blank=True, |
||||
|
default='', |
||||
|
verbose_name=_('Texto')) |
||||
|
texto_atualizador = models.TextField( |
||||
|
blank=True, |
||||
|
default='', |
||||
|
verbose_name=_('Texto no Dispositivo Atualizador')) |
||||
|
|
||||
|
inicio_vigencia = models.DateField( |
||||
|
verbose_name=_('Início de Vigência')) |
||||
|
fim_vigencia = models.DateField( |
||||
|
blank=True, null=True, verbose_name=_('Fim de Vigência')) |
||||
|
|
||||
|
inicio_eficacia = models.DateField( |
||||
|
verbose_name=_('Início de Eficácia')) |
||||
|
fim_eficacia = models.DateField( |
||||
|
blank=True, null=True, verbose_name=_('Fim de Eficácia')) |
||||
|
|
||||
|
inconstitucionalidade = models.BooleanField( |
||||
|
default=False, |
||||
|
choices=YES_NO_CHOICES, |
||||
|
verbose_name=_('Inconstitucionalidade')) |
||||
|
# Relevant attribute only in altering norms |
||||
|
visibilidade = models.BooleanField( |
||||
|
default=False, |
||||
|
choices=YES_NO_CHOICES, |
||||
|
verbose_name=_('Visibilidade na Norma Publicada')) |
||||
|
|
||||
|
timestamp = models.DateTimeField() |
||||
|
|
||||
|
tipo_dispositivo = models.ForeignKey( |
||||
|
TipoDispositivo, |
||||
|
related_name='dispositivos_do_tipo_set', |
||||
|
verbose_name=_('Tipo do Dispositivo')) |
||||
|
|
||||
|
publicacao = models.ForeignKey( |
||||
|
Publicacao, |
||||
|
blank=True, null=True, default=None, verbose_name=_('Publicação')) |
||||
|
|
||||
|
norma = models.ForeignKey( |
||||
|
NormaJuridica, |
||||
|
related_name='dispositivos_set', |
||||
|
verbose_name=_('Norma Jurídica')) |
||||
|
norma_publicada = models.ForeignKey( |
||||
|
NormaJuridica, |
||||
|
blank=True, null=True, default=None, |
||||
|
related_name='dispositivos_alterados_pela_norma_set', |
||||
|
verbose_name=_('Norma Jurídica Publicada')) |
||||
|
|
||||
|
dispositivo_subsequente = models.ForeignKey( |
||||
|
'self', |
||||
|
blank=True, null=True, default=None, |
||||
|
related_name='+', |
||||
|
verbose_name=_('Dispositivo Subsequente')) |
||||
|
dispositivo_substituido = models.ForeignKey( |
||||
|
'self', |
||||
|
blank=True, null=True, default=None, |
||||
|
related_name='+', |
||||
|
verbose_name=_('Dispositivo Substituido')) |
||||
|
dispositivo_pai = models.ForeignKey( |
||||
|
'self', |
||||
|
blank=True, null=True, default=None, |
||||
|
related_name='dispositivos_filhos_set', |
||||
|
verbose_name=_('Dispositivo Pai')) |
||||
|
dispositivo_vigencia = models.ForeignKey( |
||||
|
'self', |
||||
|
blank=True, null=True, default=None, |
||||
|
related_name='+', |
||||
|
verbose_name=_('Dispositivo de Vigência')) |
||||
|
dispositivo_atualizador = models.ForeignKey( |
||||
|
'self', |
||||
|
blank=True, null=True, default=None, |
||||
|
related_name='dispositivos_alterados_set', |
||||
|
verbose_name=_('Dispositivo Atualizador')) |
||||
|
|
||||
|
class Meta: |
||||
|
verbose_name = _('Dispositivo') |
||||
|
verbose_name_plural = _('Dispositivos') |
||||
|
ordering = ['norma', 'ordem'] |
||||
|
unique_together = ( |
||||
|
('norma', 'ordem',), |
||||
|
('norma', |
||||
|
'dispositivo0', |
||||
|
'dispositivo1', |
||||
|
'dispositivo2', |
||||
|
'dispositivo3', |
||||
|
'dispositivo4', |
||||
|
'dispositivo5', |
||||
|
'tipo_dispositivo', |
||||
|
'dispositivo_pai', |
||||
|
'publicacao',), |
||||
|
) |
||||
|
|
||||
|
def __str__(self): |
||||
|
return '%(rotulo)s - %(norma)s' % { |
||||
|
'rotulo': (self.rotulo if self.rotulo else self.tipo_dispositivo), |
||||
|
'norma': self.norma} |
||||
|
|
||||
|
|
||||
|
class Vide(models.Model): |
||||
|
data_criacao = models.DateTimeField(verbose_name=_('Data de Criação')) |
||||
|
texto = models.TextField(verbose_name=_('Texto do Vide')) |
||||
|
|
||||
|
tipo = models.ForeignKey(TipoVide, verbose_name=_('Tipo do Vide')) |
||||
|
|
||||
|
dispositivo_base = models.ForeignKey( |
||||
|
Dispositivo, |
||||
|
verbose_name=_('Dispositivo Base'), |
||||
|
related_name='%(class)s_dispositivo_base') |
||||
|
dispositivo_ref = models.ForeignKey( |
||||
|
Dispositivo, |
||||
|
related_name='%(class)s_dispositivo_ref', |
||||
|
verbose_name=_('Dispositivo Referido')) |
||||
|
|
||||
|
class Meta: |
||||
|
verbose_name = _('Vide') |
||||
|
verbose_name_plural = _('Vides') |
||||
|
|
||||
|
def __str__(self): |
||||
|
return _('Vide %s') % self.texto |
||||
|
|
||||
|
|
||||
|
class Nota(models.Model): |
||||
|
NPRIV = 1 |
||||
|
NSTRL = 2 |
||||
|
NINST = 3 |
||||
|
NPUBL = 4 |
||||
|
PUBLICIDADE_CHOICES = ( |
||||
|
# Only the owner of the note has visibility. |
||||
|
(NPRIV, _('Nota Privada')), |
||||
|
# All of the same group have visibility. |
||||
|
(NSTRL, _('Nota Setorial')), |
||||
|
# All authenticated users have visibility. |
||||
|
(NINST, _('Nota Institucional')), |
||||
|
# All users have visibility. |
||||
|
(NPUBL, _('Nota Pública')), |
||||
|
) |
||||
|
|
||||
|
texto = models.TextField(verbose_name=_('Texto da Nota')) |
||||
|
url_externa = models.CharField( |
||||
|
max_length=1024, |
||||
|
blank=True, |
||||
|
verbose_name=_('Url externa')) |
||||
|
|
||||
|
data_criacao = models.DateTimeField(verbose_name=_('Data de Criação')) |
||||
|
publicacao = models.DateTimeField(verbose_name=_('Data de Publicação')) |
||||
|
efetifidade = models.DateTimeField(verbose_name=_('Data de Efeito')) |
||||
|
|
||||
|
tipo = models.ForeignKey(TipoNota, verbose_name=_('Tipo da Nota')) |
||||
|
dispositivo = models.ForeignKey( |
||||
|
Dispositivo, |
||||
|
verbose_name=_('Dispositivo da Nota')) |
||||
|
|
||||
|
owner = models.ForeignKey(User, verbose_name=_('Dono da Nota')) |
||||
|
publicidade = models.PositiveSmallIntegerField( |
||||
|
choices=PUBLICIDADE_CHOICES, |
||||
|
verbose_name=_('Nível de Publicidade')) |
||||
|
|
||||
|
class Meta: |
||||
|
verbose_name = _('Nota') |
||||
|
verbose_name_plural = _('Notas') |
||||
|
|
||||
|
def __str__(self): |
||||
|
return '%s: %s' % ( |
||||
|
self.tipo, |
||||
|
self.PUBLICIDADE_CHOICES[self.publicidade][1] |
||||
|
) |
@ -0,0 +1,64 @@ |
|||||
|
from django import template |
||||
|
from django.core.signing import Signer |
||||
|
from django.db.models import Q |
||||
|
|
||||
|
from compilacao.models import Dispositivo |
||||
|
|
||||
|
|
||||
|
register = template.Library() |
||||
|
|
||||
|
|
||||
|
@register.filter |
||||
|
def get_bloco(pk_atualizador): |
||||
|
return Dispositivo.objects.order_by('ordem_bloco_atualizador').filter( |
||||
|
Q(dispositivo_pai_id=pk_atualizador) | |
||||
|
Q(dispositivo_atualizador_id=pk_atualizador)).select_related() |
||||
|
|
||||
|
|
||||
|
@register.filter |
||||
|
def get_field(value, key): |
||||
|
return value[key] |
||||
|
|
||||
|
|
||||
|
@register.simple_tag |
||||
|
def dispositivo_desativado(dispositivo, inicio_vigencia, fim_vigencia): |
||||
|
if inicio_vigencia and fim_vigencia: |
||||
|
if dispositivo.fim_vigencia is None: |
||||
|
return '' |
||||
|
elif dispositivo.fim_vigencia >= fim_vigencia: |
||||
|
return '' |
||||
|
return 'desativado' |
||||
|
else: |
||||
|
if dispositivo.fim_vigencia is not None: |
||||
|
return 'desativado' |
||||
|
return '' |
||||
|
|
||||
|
|
||||
|
@register.simple_tag |
||||
|
def nota_automatica(dispositivo): |
||||
|
if dispositivo.norma_publicada is not None and \ |
||||
|
dispositivo.tipo_dispositivo.class_css != 'artigo': |
||||
|
d = dispositivo.dispositivo_atualizador.dispositivo_pai |
||||
|
if dispositivo.texto == Dispositivo.TEXTO_PADRAO_DISPOSITIVO_REVOGADO: |
||||
|
return 'Revogado pelo %s.' % d |
||||
|
else: |
||||
|
return 'Alteração feita pelo %s.' % d |
||||
|
return '' |
||||
|
|
||||
|
|
||||
|
@register.simple_tag |
||||
|
def set_nivel_old(view, value): |
||||
|
view.flag_nivel_old = value |
||||
|
return '' |
||||
|
|
||||
|
|
||||
|
@register.simple_tag |
||||
|
def close_div(value_max, value_min): |
||||
|
return '</div>' * (int(value_max) - int(value_min) + 1) |
||||
|
|
||||
|
|
||||
|
@register.filter |
||||
|
def get_sign_vigencia(value): |
||||
|
string = "%s,%s" % (value.inicio_vigencia, value.fim_vigencia) |
||||
|
signer = Signer() |
||||
|
return signer.sign(str(string)) |
@ -0,0 +1,16 @@ |
|||||
|
from django.conf.urls import url |
||||
|
|
||||
|
from compilacao import views |
||||
|
|
||||
|
urlpatterns = [ |
||||
|
url(r'^norma/(?P<norma_id>[0-9]+)/compilacao/$', |
||||
|
views.CompilacaoView.as_view(), name='compilacao'), |
||||
|
|
||||
|
|
||||
|
|
||||
|
url(r'^norma/(?P<norma_id>[0-9]+)/compilacao/vigencia/(?P<sign>.+)/$', |
||||
|
views.CompilacaoView.as_view(), name='vigencia'), |
||||
|
|
||||
|
url(r'^norma/(?P<norma_id>[0-9]+)/compilacao/(?P<dispositivo_id>[0-9]+)/$', |
||||
|
views.DispositivoView.as_view(), name='dispositivo'), |
||||
|
] |
@ -0,0 +1,164 @@ |
|||||
|
from collections import OrderedDict |
||||
|
from datetime import timedelta |
||||
|
|
||||
|
from django.core.signing import Signer |
||||
|
from django.utils.dateparse import parse_date |
||||
|
from django.views.generic.list import ListView |
||||
|
|
||||
|
from compilacao.models import Dispositivo |
||||
|
from norma.models import NormaJuridica |
||||
|
|
||||
|
DISPOSITIVO_SELECT_RELATED = ( |
||||
|
'tipo_dispositivo', |
||||
|
'norma_publicada', |
||||
|
'norma', |
||||
|
'dispositivo_atualizador', |
||||
|
'dispositivo_atualizador__dispositivo_pai', |
||||
|
'dispositivo_atualizador__dispositivo_pai__norma', |
||||
|
'dispositivo_atualizador__dispositivo_pai__norma__tipo', |
||||
|
'dispositivo_pai') |
||||
|
|
||||
|
|
||||
|
class CompilacaoView(ListView): |
||||
|
template_name = 'compilacao/index.html' |
||||
|
|
||||
|
flag_alteradora = -1 |
||||
|
|
||||
|
flag_nivel_ini = 0 |
||||
|
flag_nivel_old = -1 |
||||
|
|
||||
|
itens_de_vigencia = {} |
||||
|
|
||||
|
inicio_vigencia = None |
||||
|
fim_vigencia = None |
||||
|
|
||||
|
def get_queryset(self): |
||||
|
self.flag_alteradora = -1 |
||||
|
self.flag_nivel_ini = 0 |
||||
|
self.flag_nivel_old = -1 |
||||
|
|
||||
|
self.inicio_vigencia = None |
||||
|
self.fim_vigencia = None |
||||
|
if 'sign' in self.kwargs: |
||||
|
signer = Signer() |
||||
|
try: |
||||
|
string = signer.unsign(self.kwargs['sign']).split(',') |
||||
|
self.inicio_vigencia = parse_date(string[0]) |
||||
|
self.fim_vigencia = parse_date(string[1]) |
||||
|
except: |
||||
|
return{} |
||||
|
|
||||
|
return Dispositivo.objects.filter( |
||||
|
inicio_vigencia__lte=self.fim_vigencia, |
||||
|
ordem__gt=0, |
||||
|
norma_id=self.kwargs['norma_id'], |
||||
|
).select_related(*DISPOSITIVO_SELECT_RELATED) |
||||
|
else: |
||||
|
return Dispositivo.objects.filter( |
||||
|
ordem__gt=0, |
||||
|
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, ] |
||||
|
|
||||
|
if len(self.itens_de_vigencia.keys()) <= 1: |
||||
|
return {} |
||||
|
|
||||
|
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']) |
||||
|
|
||||
|
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 |
||||
|
|
||||
|
|
||||
|
class DispositivoView(CompilacaoView): |
||||
|
# template_name = 'compilacao/index.html' |
||||
|
template_name = 'compilacao/template_render_bloco.html' |
||||
|
|
||||
|
def get_queryset(self): |
||||
|
self.flag_alteradora = -1 |
||||
|
self.flag_nivel_ini = 0 |
||||
|
self.flag_nivel_old = -1 |
||||
|
|
||||
|
try: |
||||
|
bloco = Dispositivo.objects.get(pk=self.kwargs['dispositivo_id']) |
||||
|
except Dispositivo.DoesNotExist: |
||||
|
return [] |
||||
|
|
||||
|
self.flag_nivel_old = bloco.nivel - 1 |
||||
|
self.flag_nivel_ini = bloco.nivel |
||||
|
|
||||
|
proximo_bloco = Dispositivo.objects.filter( |
||||
|
ordem__gt=bloco.ordem, |
||||
|
nivel__lte=bloco.nivel, |
||||
|
norma_publicada=None, |
||||
|
norma_id=self.kwargs['norma_id'])[:1] |
||||
|
|
||||
|
if proximo_bloco.count() == 0: |
||||
|
itens = Dispositivo.objects.filter( |
||||
|
ordem__gte=bloco.ordem, |
||||
|
norma_publicada=None, |
||||
|
norma_id=self.kwargs['norma_id'] |
||||
|
).select_related(*DISPOSITIVO_SELECT_RELATED) |
||||
|
else: |
||||
|
itens = Dispositivo.objects.filter( |
||||
|
ordem__gte=bloco.ordem, |
||||
|
ordem__lt=proximo_bloco[0].ordem, |
||||
|
norma_publicada=None, |
||||
|
norma_id=self.kwargs['norma_id'] |
||||
|
).select_related(*DISPOSITIVO_SELECT_RELATED) |
||||
|
return itens |
@ -0,0 +1,18 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
from __future__ import unicode_literals |
||||
|
|
||||
|
from django.db import models, migrations |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('materia', '0004_materialegislativa_texto_original'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AlterUniqueTogether( |
||||
|
name='materialegislativa', |
||||
|
unique_together=set([('tipo', 'numero', 'ano')]), |
||||
|
), |
||||
|
] |
@ -0,0 +1,35 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
from __future__ import unicode_literals |
||||
|
|
||||
|
from django.db import models, migrations |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('norma', '0002_auto_20150729_1717'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.CreateModel( |
||||
|
name='AssuntoNormaRelationship', |
||||
|
fields=[ |
||||
|
('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)), |
||||
|
('assunto', models.ForeignKey(to='norma.AssuntoNorma')), |
||||
|
], |
||||
|
), |
||||
|
migrations.RemoveField( |
||||
|
model_name='normajuridica', |
||||
|
name='assunto', |
||||
|
), |
||||
|
migrations.AddField( |
||||
|
model_name='assuntonormarelationship', |
||||
|
name='norma', |
||||
|
field=models.ForeignKey(to='norma.NormaJuridica'), |
||||
|
), |
||||
|
migrations.AddField( |
||||
|
model_name='normajuridica', |
||||
|
name='assuntos', |
||||
|
field=models.ManyToManyField(to='norma.AssuntoNorma', through='norma.AssuntoNormaRelationship'), |
||||
|
), |
||||
|
] |
@ -0,0 +1,18 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
from __future__ import unicode_literals |
||||
|
|
||||
|
from django.db import models, migrations |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('norma', '0003_auto_20150906_0239'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AlterUniqueTogether( |
||||
|
name='assuntonormarelationship', |
||||
|
unique_together=set([('assunto', 'norma')]), |
||||
|
), |
||||
|
] |
@ -0,0 +1,18 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
from __future__ import unicode_literals |
||||
|
|
||||
|
from django.db import models, migrations |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('norma', '0004_auto_20150907_0004'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AlterModelOptions( |
||||
|
name='normajuridica', |
||||
|
options={'verbose_name_plural': 'Normas Jurídicas', 'verbose_name': 'Norma Jurídica', 'ordering': ['-data']}, |
||||
|
), |
||||
|
] |
@ -1,8 +1,16 @@ |
|||||
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, |
||||
|
tipo_norma_crud) |
||||
|
|
||||
|
norma_url_patterns = norma_temporario_para_compilacao_crud.urlpatterns |
||||
|
|
||||
urlpatterns = [ |
urlpatterns = [ |
||||
|
url(r'^norma/', include(norma_url_patterns, |
||||
|
norma_temporario_para_compilacao_crud.namespace, |
||||
|
norma_temporario_para_compilacao_crud.namespace)), |
||||
|
|
||||
url(r'^sistema/norma/tipo/', include(tipo_norma_crud.urls)), |
url(r'^sistema/norma/tipo/', include(tipo_norma_crud.urls)), |
||||
url(r'^sistema/norma/assunto/', include(assunto_norma_crud.urls)), |
url(r'^sistema/norma/assunto/', include(assunto_norma_crud.urls)), |
||||
] |
] |
||||
|
@ -0,0 +1,178 @@ |
|||||
|
|
||||
|
|
||||
|
.articulacao div { |
||||
|
background-color: #fff; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
.dispositivo { |
||||
|
background-color: #ddd !important; |
||||
|
transition: all .4s ease-in-out; |
||||
|
display:inline; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
.dispositivo .ementa { |
||||
|
padding: 4em 0em 3em 50%; |
||||
|
font-weight: bold; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
.dispositivo .anexo { |
||||
|
font-size: 1.4em; |
||||
|
text-align: center; |
||||
|
font-weight: bold; |
||||
|
margin-top: 3em; |
||||
|
} |
||||
|
|
||||
|
.dispositivo .parte { |
||||
|
font-size: 1.5em; |
||||
|
text-align: center; |
||||
|
font-weight: bold; |
||||
|
margin-top: 2em; |
||||
|
} |
||||
|
.dispositivo .livro { |
||||
|
font-size: 1.5em; |
||||
|
text-align: center; |
||||
|
font-weight: bold; |
||||
|
margin-top: 2em; |
||||
|
} |
||||
|
|
||||
|
.dispositivo .titulo { |
||||
|
font-size: 1.5em; |
||||
|
text-align: center; |
||||
|
font-weight: bold; |
||||
|
margin-top: 2em; |
||||
|
} |
||||
|
|
||||
|
.dispositivo .capitulo { |
||||
|
margin-top: 1.5em; |
||||
|
font-size: 1.3em; |
||||
|
text-align: center; |
||||
|
font-weight: bold; |
||||
|
} |
||||
|
|
||||
|
.dispositivo .secao { |
||||
|
margin-top: 0.8em; |
||||
|
font-size: 1.2em; |
||||
|
text-align: center; |
||||
|
font-weight: bold; |
||||
|
} |
||||
|
|
||||
|
.dispositivo .subsecao, .dispositivo .itemsecao { |
||||
|
margin-top: 0.8em; |
||||
|
font-size: 1.2em; |
||||
|
text-align: center; |
||||
|
font-style: italic; |
||||
|
font-weight: bold; |
||||
|
} |
||||
|
|
||||
|
.dispositivo .artigo { |
||||
|
font-size: 1.15em; |
||||
|
float:left; |
||||
|
} |
||||
|
.dispositivo .caput { |
||||
|
font-size: 1.15em; |
||||
|
margin-bottom: 0.5em; |
||||
|
display: block; |
||||
|
} |
||||
|
|
||||
|
.dispositivo .paragrafo { |
||||
|
margin-left: 1.5em; |
||||
|
font-size: 1.1em; |
||||
|
margin-top: 5px; |
||||
|
margin-bottom: 3px; |
||||
|
} |
||||
|
|
||||
|
.dispositivo .inciso { |
||||
|
font-size: 1.1em; |
||||
|
margin-left: 2.5em; |
||||
|
margin-top: 5px; |
||||
|
margin-bottom: 3px; |
||||
|
} |
||||
|
|
||||
|
.dispositivo .alinea { |
||||
|
font-size: 1.0em; |
||||
|
margin-left: 3.5em; |
||||
|
} |
||||
|
|
||||
|
.dispositivo .item { |
||||
|
font-size: 1.0em; |
||||
|
margin-left: 4.5em; |
||||
|
} |
||||
|
|
||||
|
.dispositivo .desativado, .dispositivo .desativado * { |
||||
|
text-decoration: line-through; |
||||
|
color: #777 !important; |
||||
|
} |
||||
|
.dispositivo .desativado table, .dispositivo .desativado table td { |
||||
|
border: 1px dotted #ccc; |
||||
|
text-decoration: line-through; |
||||
|
} |
||||
|
|
||||
|
.dispositivo a { |
||||
|
color: #444444 !important; |
||||
|
} |
||||
|
.dispositivo a.link_alterador { |
||||
|
color: #2980B9 !important; |
||||
|
font-size: 0.9rem; |
||||
|
} |
||||
|
|
||||
|
.dispositivo .bloco_alteracao { |
||||
|
margin-left: 5em; |
||||
|
font-style: italic; |
||||
|
} |
||||
|
|
||||
|
.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; |
||||
|
background: #2980B9; |
||||
|
z-index:1; |
||||
|
margin: 0 auto; |
||||
|
max-width: 62.5rem; |
||||
|
} |
||||
|
|
||||
|
.compilacao .top-bar-section li:not(.has-form) a:not(.button).selected, |
||||
|
.compilacao .top-bar-section li:not(.has-form) a:not(.button):hover { |
||||
|
background: #1056A0; |
||||
|
} |
||||
|
|
||||
|
.compilacao .top-bar-section li:not(.has-form) a:not(.button) { |
||||
|
padding: 0 0.43333rem; |
||||
|
} |
||||
|
|
||||
|
.compilacao ul.nav { |
||||
|
background: #2980B9; |
||||
|
display:block; |
||||
|
width: 100%; |
||||
|
z-index:1; |
||||
|
} |
||||
|
.compilacao .tipo-vigencias { |
||||
|
border-top: 1px solid #62B5B5; |
||||
|
} |
||||
|
|
||||
|
.compilacao .vigencias { |
||||
|
margin: 2.5em 0 0 0; |
||||
|
transition: all .4s ease-in-out; |
||||
|
background: #2980B9; |
||||
|
} |
||||
|
|
||||
|
.compilacao .fixed{ |
||||
|
z-index:98; |
||||
|
} |
||||
|
|
||||
|
.displaynone { |
||||
|
display: none !important; |
||||
|
} |
@ -0,0 +1,10 @@ |
|||||
|
{% load compilacao_filters %} |
||||
|
{% for ch in dispositivo.pk|get_bloco %} |
||||
|
{% 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 %} |
@ -0,0 +1,101 @@ |
|||||
|
{% extends "base.html" %} |
||||
|
{% load i18n %} |
||||
|
{% load compilacao_filters %} |
||||
|
|
||||
|
{% block title%} |
||||
|
<h1>{{ view.get_norma }}</h1> |
||||
|
{% endblock %} |
||||
|
|
||||
|
{% block base_content %} |
||||
|
|
||||
|
<script type="text/javascript"> |
||||
|
|
||||
|
$( window ).scroll(function() { |
||||
|
|
||||
|
if (window.pageYOffset <= 180) { |
||||
|
$( "section.vigencias" ).removeClass("fixed"); |
||||
|
} |
||||
|
else if (!$( "section.vigencias" ).hasClass("fixed")){ |
||||
|
$( "section.vigencias" ).addClass("fixed"); |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
function textoMultiVigente(item) { |
||||
|
|
||||
|
$(".compilacao .tipo-vigencias a").removeClass("selected") |
||||
|
$(item).addClass("selected") |
||||
|
|
||||
|
$(".desativado").removeClass("displaynone"); |
||||
|
$(".link_alterador").removeClass("displaynone"); |
||||
|
} |
||||
|
function textoVigente(item, link) { |
||||
|
|
||||
|
$(".compilacao .tipo-vigencias a").removeClass("selected") |
||||
|
$(item).addClass("selected") |
||||
|
|
||||
|
$(".desativado").addClass("displaynone"); |
||||
|
$(".link_alterador").removeClass("displaynone"); |
||||
|
|
||||
|
if (!link) |
||||
|
$(".link_alterador").addClass("displaynone"); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
</script> |
||||
|
|
||||
|
<div class="compilacao"> |
||||
|
{% for key, values in view.get_vigencias.items %} |
||||
|
{% if forloop.first %} |
||||
|
<section class="vigencias"> |
||||
|
<nav class="top-bar" data-topbar="" role="navigation"> |
||||
|
<section class="top-bar-section"> |
||||
|
<ul class="nav left"> |
||||
|
{%endif%} |
||||
|
<li class="nav__item has-dropdown"> |
||||
|
{% if forloop.first %} |
||||
|
{% for dispositivo in values %} |
||||
|
<a class="nav__link {% if view.inicio_vigencia == dispositivo.inicio_vigencia %}selected{%endif%}" href="{%url 'vigencia' dispositivo.norma.pk dispositivo|get_sign_vigencia %}" title="{% trans 'Vigência entre'%} {{dispositivo.inicio_vigencia}} {% trans 'e'%} {{dispositivo.fim_vigencia}}">{% trans 'Norma Original'%}</a> |
||||
|
{% endfor %} |
||||
|
{% elif forloop.last %} |
||||
|
{% for dispositivo in values %} |
||||
|
<a class="nav__link {% if view.inicio_vigencia == None %}selected{%endif%}" href="{%url 'compilacao' dispositivo.norma.pk %}" title="{% trans 'Compilação atual'%}.
{% trans 'Vigência a partir de'%} {{dispositivo.inicio_vigencia}}
{{dispositivo.norma_publicada}}">{% trans 'Norma Atual'%}</a> |
||||
|
{% endfor %} |
||||
|
{% else %} |
||||
|
<a class="nav__link {% if view.inicio_vigencia.year == key %}selected{%endif%}">{{ 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 not forloop.parentloop.first %} |
||||
|
<a class="nav__sub-link" href="{%url 'vigencia' dispositivo.norma.pk dispositivo|get_sign_vigencia %}" title="{{ dispositivo.norma_publicada }}">{% trans 'Vigência entre'%} {{dispositivo.inicio_vigencia}} {% trans 'e'%} {{dispositivo.fim_vigencia}}</a> |
||||
|
{%endif%} |
||||
|
</li> |
||||
|
{% endfor %} |
||||
|
</ul> |
||||
|
{%endif%} |
||||
|
</li> |
||||
|
{% if forloop.last %} |
||||
|
</ul> |
||||
|
<ul class="nav left tipo-vigencias"> |
||||
|
<li><a class="selected" onclick="textoMultiVigente(this);">{% trans 'Texto Multivigente'%}</a></li> |
||||
|
<li><a onclick="textoVigente(this, true);">{% trans 'Texto Vigente COM Links para Normas Alteradoras'%}</a></li> |
||||
|
<li><a onclick="textoVigente(this, false);">{% trans 'Texto Vigente SEM Links para Normas Alteradoras'%}</a></li> |
||||
|
</ul> |
||||
|
</section> |
||||
|
</nav> |
||||
|
</section> |
||||
|
{%endif%} |
||||
|
{% endfor %} |
||||
|
<br> |
||||
|
{% if view.inicio_vigencia != None and view.fim_vigencia != None %} |
||||
|
{% trans 'Vigência entre'%} <b>{{view.inicio_vigencia}}</b> {% trans 'e'%} <b>{{view.fim_vigencia}}</b>. |
||||
|
{%endif%} |
||||
|
|
||||
|
|
||||
|
{% include 'compilacao/template_render_bloco.html'%} |
||||
|
</div> |
||||
|
{% endblock base_content %} |
@ -0,0 +1,35 @@ |
|||||
|
{% load i18n %} |
||||
|
{% load compilacao_filters %} |
||||
|
|
||||
|
{% for dispositivo in view.get_queryset %} |
||||
|
{% if dispositivo.nivel == view.flag_nivel_old %} |
||||
|
</div> |
||||
|
{% elif dispositivo.nivel < view.flag_nivel_old %} |
||||
|
{% close_div view.flag_nivel_old dispositivo.nivel %} |
||||
|
{% endif%} |
||||
|
<div class="dispositivo" id="d{{dispositivo.id}}"> |
||||
|
<div class="{% dispositivo_desativado dispositivo view.inicio_vigencia view.fim_vigencia %} {{ dispositivo.tipo_dispositivo.class_css }}" id="id{{dispositivo.id}}"> |
||||
|
{% 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> |
||||
|
{% 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%} |
||||
|
</div> |
||||
|
{% set_nivel_old view dispositivo.nivel %} |
||||
|
{% endfor %} |
||||
|
{% close_div view.flag_nivel_old view.flag_nivel_ini %} |
@ -0,0 +1,9 @@ |
|||||
|
{% extends "crud/detail.html" %} |
||||
|
{% load i18n %} |
||||
|
|
||||
|
{% block sections_nav %} |
||||
|
<dl class="sub-nav left"> |
||||
|
<dd><a href="{% url 'normajuridica:detail' object.pk %}" class="button secondary">{% trans 'Início' %}</a></dd> |
||||
|
<dd><a href="{% url 'compilacao' object.pk %}" class="button secondary">{% trans 'Texto Integral' %}</a></dd> |
||||
|
</dl> |
||||
|
{% endblock sections_nav %} |
Loading…
Reference in new issue