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)