rinogeek's picture
fix: correct transaction dates (2024 clock drift); improve validate_date; add fix_dates command
833c388
Raw
History Blame Contribute Delete
2.1 kB
"""
Commande Django pour corriger les dates de transaction erronées.
Usage: python manage.py fix_dates
Corrige toutes les transactions dont le champ `date` (envoyé par le client)
est décalé de plus de 180 jours par rapport à `created_at` (serveur).
Cela arrive quand l'horloge de l'appareil client est incorrecte.
"""
from django.core.management.base import BaseCommand
from django.utils import timezone
from datetime import timedelta
from api.models import Transaction
class Command(BaseCommand):
help = "Corrige les dates de transaction client erronées (horloge appareil décalée)"
def handle(self, *args, **options):
fixed_count = 0
now = timezone.now()
transactions = Transaction.objects.all()
for tx in transactions:
try:
created_at = tx.created_at
tx_date = tx.date
if not created_at or not tx_date:
continue
delta_days = abs((tx_date - created_at).days)
if delta_days > 180:
old_date = tx.date
tx.date = created_at
tx.save(update_fields=["date"])
fixed_count += 1
self.stdout.write(
f" CORRIGÉ Transaction #{tx.id} "
f"'({tx.name})': {old_date.strftime('%Y-%m-%d')} -> "
f"{created_at.strftime('%Y-%m-%d')}"
)
except Exception as e:
self.stdout.write(
self.style.WARNING(f" ERREUR Transaction #{tx.id}: {e}")
)
self.stdout.write("")
if fixed_count > 0:
self.stdout.write(
self.style.SUCCESS(
f"{fixed_count} transaction(s) corrigée(s). "
"Les dates client ont été remplacées par les dates serveur (created_at)."
)
)
else:
self.stdout.write(
self.style.SUCCESS("Aucune transaction à corriger.")
)