diff --git a/sapl/protocoloadm/migrations/0041_auto_20220804_2239.py b/sapl/protocoloadm/migrations/0041_auto_20220804_2239.py new file mode 100644 index 000000000..0e67fbc46 --- /dev/null +++ b/sapl/protocoloadm/migrations/0041_auto_20220804_2239.py @@ -0,0 +1,35 @@ +# Generated by Django 2.2.28 on 2022-08-05 01:39 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0081_auto_20220321_0934'), + ('protocoloadm', '0040_auto_20220321_0934'), + ] + + operations = [ + migrations.CreateModel( + name='VinculoDocAdminMateria', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('data_anexacao', models.DateField(verbose_name='Data Anexação')), + ('data_desanexacao', models.DateField(blank=True, null=True, verbose_name='Data Desanexação')), + ('documento', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='materialegislativa_vinculada_set', to='protocoloadm.DocumentoAdministrativo', verbose_name='Documento Administrativo')), + ('materia', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='documentoadministrativo_vinculado_set', to='materia.MateriaLegislativa', verbose_name='Matéria Legislativa')), + ], + options={ + 'verbose_name': 'Vinculo entre Documento Administrativo e Matéria Legislativa', + 'verbose_name_plural': 'Vinculos entre Documento Administrativo e Matéria Legislativa', + 'ordering': ('id',), + }, + ), + migrations.AddField( + model_name='documentoadministrativo', + name='materiasvinculadas', + field=models.ManyToManyField(blank=True, related_name='docadmsvinculados', through='protocoloadm.VinculoDocAdminMateria', to='materia.MateriaLegislativa'), + ), + ] diff --git a/sapl/protocoloadm/models.py b/sapl/protocoloadm/models.py index 9b1a65d85..e5dd9e441 100644 --- a/sapl/protocoloadm/models.py +++ b/sapl/protocoloadm/models.py @@ -5,7 +5,8 @@ from model_utils import Choices import reversion from sapl.base.models import Autor -from sapl.materia.models import TipoMateriaLegislativa, UnidadeTramitacao +from sapl.materia.models import TipoMateriaLegislativa, UnidadeTramitacao,\ + MateriaLegislativa from sapl.utils import (RANGE_ANOS, YES_NO_CHOICES, texto_upload_path, get_settings_auth_user_model, OverwriteStorage) @@ -91,7 +92,8 @@ class Protocolo(models.Model): blank=True ) de_proposicao = models.BooleanField(default=False) - # Não foi utilizado auto_now_add=True em timestamp porque ele usa datetime.now que não é timezone aware. + # Não foi utilizado auto_now_add=True em timestamp porque ele usa + # datetime.now que não é timezone aware. timestamp = models.DateTimeField( null=True, blank=True, @@ -160,7 +162,7 @@ class DocumentoAdministrativo(models.Model): numero = models.PositiveIntegerField(verbose_name=_('Número')) complemento = models.CharField(max_length=10, blank=True, - verbose_name=_('Complemento')) + verbose_name=_('Complemento')) ano = models.PositiveSmallIntegerField(verbose_name=_('Ano'), choices=RANGE_ANOS) @@ -214,6 +216,17 @@ class DocumentoAdministrativo(models.Model): ) ) + materiasvinculadas = models.ManyToManyField( + MateriaLegislativa, + blank=True, + through='VinculoDocAdminMateria', + related_name='docadmsvinculados', + through_fields=( + 'documento', + 'materia' + ) + ) + user = models.ForeignKey( get_settings_auth_user_model(), verbose_name=_('Usuário'), @@ -436,6 +449,34 @@ class Anexado(models.Model): } +@reversion.register() +class VinculoDocAdminMateria(models.Model): + documento = models.ForeignKey( + DocumentoAdministrativo, related_name='materialegislativa_vinculada_set', + on_delete=models.CASCADE, + verbose_name=_('Documento Administrativo') + ) + materia = models.ForeignKey( + MateriaLegislativa, related_name='documentoadministrativo_vinculado_set', + on_delete=models.CASCADE, + verbose_name=_('Matéria Legislativa') + ) + data_anexacao = models.DateField(verbose_name=_('Data Anexação')) + data_desanexacao = models.DateField( + blank=True, null=True, verbose_name=_('Data Desanexação') + ) + + class Meta: + verbose_name = _( + 'Vinculo entre Documento Administrativo e Matéria Legislativa') + verbose_name_plural = _( + 'Vinculos entre Documento Administrativo e Matéria Legislativa') + ordering = ('id',) + + def __str__(self): + return _(f'Vinculo: {self.documento} - {self.materia}') + + @reversion.register() class AcompanhamentoDocumento(models.Model): usuario = models.CharField(max_length=50)