diff --git a/compilacao/insert_inicial_TipoDispositivo.sql b/compilacao/insert_inicial_TipoDispositivo.sql
new file mode 100644
index 000000000..d3444ffa6
--- /dev/null
+++ b/compilacao/insert_inicial_TipoDispositivo.sql
@@ -0,0 +1,45 @@
+
+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, '-----', '', '
', '', '
', '', '', False, 'I', '1', '1', '1', '1', '1'),
+(12, 'Parte', 'parte', '', 'Parte', 0, '-----', '', '
', '', '
', '', '', False, 'I', '1', '1', '1', '1', '1'),
+(13, 'Livro', 'livro', '', 'Livro', 0, '-----', '', '
', '', '
', '', '', False, 'I', '1', '1', '1', '1', '1'),
+(15, 'Capítulo', 'capitulo', '', 'Capítulo', 0, '-----', '', '
', '', '
', '', '', False, 'I', '1', '1', '1', '1', '1'),
+(16, 'Seção', 'secao', '', 'Seção', 0, '-----', '', '
', '', '
', '', '', False, 'I', '1', '1', '1', '1', '1'),
+(17, 'SubSeção', 'subsecao', '', 'SubSeção', 0, '-----', '', '
', '', '
', '', '', False, '1', '1', '1', '1', '1', '1'),
+(18, 'Item de Seção', 'itemsecao', '', 'Item', 0, '-----', '', '
', '', '
', '', '', False, '1', '1', '1', '1', '1', '1'),
+(19, 'Artigo', 'artigo', '', 'Art.', 9, '-----', '', ' – ', '', '', '', '', True, '1', '1', '1', '1', '1', '1'),
+(21, 'Parágrafo', 'paragrafo', '', '§;Parágrafo Único', 9, '-----', '', ' – ', '', '', '', '', False, '1', '1', '1', '1', '1', '1'),
+(22, 'Inciso', 'inciso', '', '', 0, '.....', '', ' – ', '', '', '', '', False, 'I', '1', '1', '1', '1', '1'),
+(23, 'Alinea', 'alinea', '', '', 0, '.....', '', ' – ', '', '', '', '', False, 'a', '1', '1', '1', '1', '1'),
+(24, 'Item', 'item', '', '', 0, '.....', '', ' – ', '', '', '', '', False, '1', '1', '1', '1', '1', '1'),
+(25, 'Disposições Preliminares', 'disp_preliminares', '', 'Disposições Preliminares', 0, '-----', '', '
', '', '
', '', '', False, 'N', '1', '1', '1', '1', '1'),
+(26, 'Disposições Gerais', 'disp_gerais', '', 'Disposições Gerais', 0, '-----', '', '
', '', '
', '', '', False, 'N', '1', '1', '1', '1', '1'),
+(27, 'Disposições Transitórias', 'disp_transitorias', '', 'Disposições Transitórias', 0, '-----', '', '
', '', '
', '', '', False, 'N', '1', '1', '1', '1', '1'),
+(28, 'Disposições Finais', 'disp_finais', '', 'Disposições Finais', 0, '-----', '', '
', '', '
', '', '', False, 'N', '1', '1', '1', '1', '1'),
+(14, 'Título', 'titulo', '', 'Título', 0, '-----', '', '
', '', '
', '', '', False, 'I', '1', '1', '1', '1', '1'),
+(1, 'Articulação', 'articulacao', '', '', 0, '.....', '', '', '', '', '', '', True, '1', '1', '1', '1', '1', '1'),
+(4, 'Bloco Alteração', 'bloco_alteracao', '', '', 0, '.....', '', '', '', '', '', '', True, '1', '1', '1', '1', '1', '1'),
+(5, 'Omissis', 'omissis', '', '', 0, '.....', '', '', '', '', '', '', False, '1', '1', '1', '1', '1', '1'),
+(6, 'Texto Não Estruturado', 'texto_n_estruturado', '', '', 0, '.....', '', '', '', '', '', '',False, '1', '1', '1', '1', '1', '1'),
+(2, 'Ementa', 'ementa', '', '', 0, '.....', '', '', '', '', '', '', False, 'N', '1', '1', '1', '1', '1'),
+(20, 'Caput', 'caput', '', '', 0, '', '', '', '', '', '', '', False, 'N', 'N', 'N', 'N', 'N', 'N');
diff --git a/compilacao/migrations/0001_initial.py b/compilacao/migrations/0001_initial.py
new file mode 100644
index 000000000..d8e06c220
--- /dev/null
+++ b/compilacao/migrations/0001_initial.py
@@ -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')]),
+ ),
+ ]
diff --git a/compilacao/models.py b/compilacao/models.py
index d9a98cf87..d0dac962e 100644
--- a/compilacao/models.py
+++ b/compilacao/models.py
@@ -18,7 +18,7 @@ class TipoNota(models.Model):
verbose_name_plural = _('Tipos de Nota')
def __str__(self):
- return self.sigla + ' - ' + self.nome
+ return '%s: %s' % (self.sigla, self.nome)
class TipoVide(models.Model):
@@ -31,7 +31,7 @@ class TipoVide(models.Model):
verbose_name_plural = _('Tipos de Vide')
def __str__(self):
- return self.sigla + ' - ' + self.nome
+ return '%s: %s' % (self.sigla, self.nome)
class TipoDispositivo(models.Model):
@@ -43,41 +43,58 @@ class TipoDispositivo(models.Model):
FNC8 = '*'
FNCN = 'N'
FORMATO_NUMERACAO_CHOICES = (
- (FNC1, _('Numérico')),
- (FNCI, _('Romano Maiúsculo')),
- (FNCi, _('Romano Minúsculo')),
- (FNCA, _('Alfabético Maiúsculo')),
- (FNCa, _('Alfabético Minúsculo')),
- (FNC8, _('Tópico sem contagem')),
- (FNCN, _('Sem renderização de Contagem')),
+ (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'))
+ max_length=20,
+ verbose_name=_('Classe CSS'))
rotulo_prefixo_html = models.CharField(
- max_length=100, verbose_name=_('Prefixo html do rótulo'))
+ 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(
- max_length=5, verbose_name=_('Separadores das Variações'))
+ 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(
- max_length=100, verbose_name=_('Sufixo html do rótulo'))
+ blank=True,
+ max_length=100,
+ verbose_name=_('Sufixo html do rótulo'))
texto_prefixo_html = models.CharField(
- max_length=100, verbose_name=_('Prefixo html do texto'))
+ blank=True,
+ max_length=100,
+ verbose_name=_('Prefixo html do texto'))
texto_sufixo_html = models.CharField(
- max_length=100, verbose_name=_('Sufixo html do texto'))
+ blank=True,
+ max_length=100,
+ verbose_name=_('Sufixo html do texto'))
nota_automatica_prefixo_html = models.CharField(
- max_length=100, verbose_name=_('Prefixo html da nota automática'))
+ blank=True,
+ max_length=100,
+ verbose_name=_('Prefixo html da nota automática'))
nota_automatica_sufixo_html = models.CharField(
- max_length=100, verbose_name=_('Sufixo html da nota automática'))
+ 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(
@@ -142,7 +159,7 @@ class VeiculoPublicacao(models.Model):
verbose_name_plural = _('Veículos de Publicação')
def __str__(self):
- return self.sigla + ' - ' + self.nome
+ return '%s: %s' % (self.sigla, self.nome)
class Publicacao(models.Model):
@@ -164,7 +181,7 @@ class Publicacao(models.Model):
verbose_name_plural = _('Publicações')
def __str__(self):
- return self.veiculo_publicacao.nome + ": " + str(self.publicacao)
+ return '%s: %s' % (self.veiculo_publicacao, self.publicacao)
class Dispositivo(models.Model):
@@ -304,6 +321,11 @@ class Dispositivo(models.Model):
'publicacao',),
)
+ def __str__(self):
+ return '%(rotulo)s - %(norma)s' % {
+ 'rotulo': self.rotulo,
+ 'norma': self.norma}
+
class Vide(models.Model):
data_criacao = models.DateTimeField(verbose_name=_('Data de Criação'))
@@ -324,6 +346,9 @@ class Vide(models.Model):
verbose_name = _('Vide')
verbose_name_plural = _('Vides')
+ def __str__(self):
+ return _('Vide %s') % self.texto
+
class Nota(models.Model):
NPRIV = 1
@@ -358,5 +383,15 @@ class Nota(models.Model):
owner = models.ForeignKey(User, verbose_name=_('Dono da Nota'))
publicidade = models.PositiveSmallIntegerField(
- choice=PUBLICIDADE_CHOICES,
+ 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]
+ )
diff --git a/norma/migrations/0003_auto_20150906_0239.py b/norma/migrations/0003_auto_20150906_0239.py
new file mode 100644
index 000000000..82dafbf88
--- /dev/null
+++ b/norma/migrations/0003_auto_20150906_0239.py
@@ -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'),
+ ),
+ ]
diff --git a/norma/models.py b/norma/models.py
index 153ea948e..fcc7db437 100644
--- a/norma/models.py
+++ b/norma/models.py
@@ -87,7 +87,9 @@ class NormaJuridica(models.Model):
complemento = models.NullBooleanField(
blank=True, verbose_name=_('Complementar ?'))
# XXX was a CharField (attention on migrate)
- assunto = models.ForeignKey(AssuntoNorma)
+ assuntos = models.ManyToManyField(
+ AssuntoNorma,
+ through='AssuntoNormaRelationship')
data_vigencia = models.DateField(blank=True, null=True)
timestamp = models.DateTimeField()
@@ -103,6 +105,11 @@ class NormaJuridica(models.Model):
'ano': self.ano}
+class AssuntoNormaRelationship(models.Model):
+ assunto = models.ForeignKey(AssuntoNorma)
+ norma = models.ForeignKey(NormaJuridica)
+
+
class LegislacaoCitada(models.Model):
materia = models.ForeignKey(MateriaLegislativa)
norma = models.ForeignKey(NormaJuridica)