File size: 2,096 Bytes
833c388
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
"""
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.")
            )