Files
Diarios-Oficiais-ALEMS/diarios/models.py

74 lines
2.1 KiB
Python

from django.db import models
import PyPDF2
import json
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.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}{self.numero}, {self.data_formatada}"
class Meta:
constraints = [models.UniqueConstraint(fields=["numero"], name="unique_numero")]
verbose_name_plural = "Diários Oficiais"