diff --git a/diarios/migrations/0003_tipodiariooficial_diariooficial_and_more.py b/diarios/migrations/0003_tipodiariooficial_diariooficial_and_more.py new file mode 100644 index 0000000..f4eefb8 --- /dev/null +++ b/diarios/migrations/0003_tipodiariooficial_diariooficial_and_more.py @@ -0,0 +1,75 @@ +# Generated by Django 5.0.12 on 2025-03-07 14:58 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("diarios", "0002_pdfdocument_page_content"), + ] + + operations = [ + migrations.CreateModel( + name="TipoDiarioOficial", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("nome", models.CharField(max_length=100, unique=True)), + ], + options={ + "verbose_name_plural": "Tipos de Diários Oficiais", + }, + ), + migrations.CreateModel( + name="DiarioOficial", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("data", models.DateField()), + ( + "arquivo", + models.FileField( + blank=True, null=True, upload_to="diarios_oficiais/" + ), + ), + ("numero", models.CharField(max_length=20, unique=True)), + ("link", models.URLField(blank=True, null=True, unique=True)), + ("finalizado", models.BooleanField(default=False)), + ( + "tipo", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="diarios", + to="diarios.tipodiariooficial", + ), + ), + ], + options={ + "verbose_name_plural": "Diários Oficiais", + }, + ), + migrations.AddConstraint( + model_name="diariooficial", + constraint=models.UniqueConstraint( + fields=("numero",), name="unique_numero" + ), + ), + ] diff --git a/diarios/models.py b/diarios/models.py index 1939812..50427fc 100644 --- a/diarios/models.py +++ b/diarios/models.py @@ -32,3 +32,42 @@ class PDFDocument(models.Model): self.page_content = json.dumps(pages_data) super().save(*args, **kwargs) + +class TipoDiarioOficial(models.Model): + nome = models.CharField(max_length=100, unique=True) + + def __str__(self): + return self.nome + + class Meta: + verbose_name_plural = "Tipos de Diários Oficiais" + + +class DiarioOficial(models.Model): + data = models.DateField() + arquivo = models.FileField(upload_to="diarios_oficiais/", blank=True, null=True) + tipo = models.ForeignKey( + TipoDiarioOficial, + blank=True, + null=True, + on_delete=models.CASCADE, + related_name="diarios", + ) + numero = models.CharField(max_length=20, unique=True) + link = models.URLField(blank=True, null=True, unique=True) + finalizado = models.BooleanField(default=False) + + @property + def data_formatada(self): + return format_date(self.data, format="long", locale="pt_BR") + + @property + def is_online(self): + return True if self.link else False + + def __str__(self): + return f"Diário {self.tipo.nome} nº {self.numero}, {self.data_formatada}" + + class Meta: + constraints = [models.UniqueConstraint(fields=["numero"], name="unique_numero")] + verbose_name_plural = "Diários Oficiais"