53 lines
2 KiB
Python
53 lines
2 KiB
Python
from django.db import models
|
|
from django.contrib.auth.models import User
|
|
from django.utils import timezone
|
|
from common.storages import PrivateMediaStorage
|
|
|
|
private_storage = PrivateMediaStorage()
|
|
|
|
|
|
class GeocodingTask(models.Model):
|
|
"""Model to track geocoding tasks"""
|
|
STATUS_CHOICES = [
|
|
('pending', 'En attente'),
|
|
('processing', 'En cours'),
|
|
('completed', 'Terminé'),
|
|
('failed', 'Échoué'),
|
|
]
|
|
|
|
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="Utilisateur")
|
|
uploaded_file = models.FileField(
|
|
upload_to='schools/geocoding/uploads/%Y/%m/%d/',
|
|
storage=private_storage,
|
|
verbose_name="Fichier uploadé"
|
|
)
|
|
output_file = models.FileField(
|
|
upload_to='schools/geocoding/outputs/%Y/%m/%d/',
|
|
storage=private_storage,
|
|
verbose_name="Fichier résultat",
|
|
blank=True,
|
|
null=True
|
|
)
|
|
status = models.CharField(
|
|
max_length=20,
|
|
choices=STATUS_CHOICES,
|
|
default='pending',
|
|
verbose_name="Statut"
|
|
)
|
|
created_at = models.DateTimeField(auto_now_add=True, verbose_name="Créé le")
|
|
started_at = models.DateTimeField(null=True, blank=True, verbose_name="Démarré le")
|
|
completed_at = models.DateTimeField(null=True, blank=True, verbose_name="Terminé le")
|
|
error_message = models.TextField(blank=True, null=True, verbose_name="Message d'erreur")
|
|
|
|
# Statistics
|
|
total_rows = models.IntegerField(default=0, verbose_name="Nombre total de lignes")
|
|
successful_geocodes = models.IntegerField(default=0, verbose_name="Géolocalisations réussies")
|
|
failed_geocodes = models.IntegerField(default=0, verbose_name="Géolocalisations échouées")
|
|
|
|
class Meta:
|
|
verbose_name = "Tâche de géolocalisation"
|
|
verbose_name_plural = "Tâches de géolocalisation"
|
|
ordering = ['-created_at']
|
|
|
|
def __str__(self):
|
|
return f"Tâche {self.id} - {self.user.username} - {self.status}"
|