Spaces:
Sleeping
Sleeping
| """ | |
| 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.") | |
| ) | |