from django.db import models import PyPDF2 import json from django.core.serializers.json import DjangoJSONEncoder class PDFDocument(models.Model): title = models.CharField(max_length=255) file = models.FileField(upload_to="pdfs/") content = models.TextField(blank=True) uploaded_at = models.DateTimeField(auto_now_add=True) page_content = models.TextField(blank=True) def __str__(self): return self.title def save(self, *args, **kwargs): if self.file: pdf = PyPDF2.PdfReader(self.file) texto = [] pages_data = [] for i, pagina in enumerate(pdf.pages): page_text = pagina.extract_text() pages_data.append( { "number": i + 1, "content": page_text, } ) texto.append(pagina.extract_text()) self.content = "\n".join(texto) 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.SET_NULL, related_name="diarios", ) numero = models.CharField(max_length=20, unique=True) link = models.URLField(blank=True, null=True, unique=True) page_content = models.JSONField(encoder=DjangoJSONEncoder, blank=True, null=True) def save(self, *args, **kwargs): if self.file: pdf = PyPDF2.PdfReader(self.file) pages_data = [] for i, pagina in enumerate(pdf.pages): page_text = pagina.extract_text() pages_data.append( { "number": i + 1, "content": page_text, } ) self.page_content = json.dumps(pages_data) super().save(*args, **kwargs) @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"