From 14de6cf8242300bfeb528a81e9c8a37d48824492 Mon Sep 17 00:00:00 2001 From: Yohann D'ANELLO Date: Tue, 26 Apr 2022 13:44:16 +0200 Subject: [PATCH] [helloasso] Manage duplicate users + ignore invalid users Signed-off-by: Yohann D'ANELLO --- .../management/commands/check_hello_asso.py | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/apps/participation/management/commands/check_hello_asso.py b/apps/participation/management/commands/check_hello_asso.py index bb877d9..c03b0b8 100644 --- a/apps/participation/management/commands/check_hello_asso.py +++ b/apps/participation/management/commands/check_hello_asso.py @@ -5,6 +5,7 @@ import os from django.contrib.auth.models import User from django.core.management import BaseCommand +from django.db.models import Q import requests @@ -46,15 +47,30 @@ class Command(BaseCommand): email = payer["email"] last_name = payer["lastName"] first_name = payer["firstName"] - qs = User.objects.filter(email=email) + base_filter = Q( + registration__participantregistration__isnull=False, + registration__participantregistration__team__isnull=False, + registration__participantregistration__team__participation__valid=True, + ) + qs = User.objects.filter( + base_filter, + email=email, + ) if not qs.exists(): - qs = User.objects.filter(last_name__icontains=last_name) + qs = User.objects.filter( + base_filter, + last_name__icontains=last_name, + ) if qs.count() >= 2: qs = qs.filter(first_name__icontains=first_name) if not qs.exists(): self.stderr.write(f"Warning: a payment was found by {first_name} {last_name} ({email}), " "but this user is unknown.") continue + if qs.count() > 1: + self.stderr.write(f"Warning: a payment was found by {first_name} {last_name} ({email}), " + f"but there are {qs.count()} matching users.") + continue user = qs.get() if not user.registration.participates: self.stderr.write(f"Warning: a payment was found by the email address {email}, "