loko/streetup/schools/models.py
2026-07-22 14:48:40 +02:00

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}"