mirror of
				https://gitlab.com/animath/si/plateforme.git
				synced 2025-11-04 03:42:11 +01:00 
			
		
		
		
	Send payment confirmation mail after payment, and send weekly reminders for people that have not paid
Signed-off-by: Emmy D'Anello <emmy.danello@animath.fr>
This commit is contained in:
		@@ -1,87 +0,0 @@
 | 
			
		||||
# Copyright (C) 2020 by Animath
 | 
			
		||||
# SPDX-License-Identifier: GPL-3.0-or-later
 | 
			
		||||
 | 
			
		||||
import os
 | 
			
		||||
 | 
			
		||||
from django.contrib.auth.models import User
 | 
			
		||||
from django.core.management import BaseCommand
 | 
			
		||||
from django.db.models import Q
 | 
			
		||||
import requests
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Command(BaseCommand):
 | 
			
		||||
    def handle(self, *args, **options):  # noqa: C901
 | 
			
		||||
        # Get access token
 | 
			
		||||
        response = requests.post('https://api.helloasso.com/oauth2/token', headers={
 | 
			
		||||
            'Content-Type': 'application/x-www-form-urlencoded',
 | 
			
		||||
        }, data={
 | 
			
		||||
            'client_id': os.getenv('HELLOASSO_CLIENT_ID', ''),
 | 
			
		||||
            'client_secret': os.getenv('HELLOASSO_CLIENT_SECRET', ''),
 | 
			
		||||
            'grant_type': 'client_credentials',
 | 
			
		||||
        }).json()
 | 
			
		||||
 | 
			
		||||
        token = response['access_token']
 | 
			
		||||
 | 
			
		||||
        organization = "animath"
 | 
			
		||||
        form_slug = "tfjm-2023-tournois-regionaux"
 | 
			
		||||
        from_date = "2000-01-01"
 | 
			
		||||
        url = f"https://api.helloasso.com/v5/organizations/{organization}/forms/Event/{form_slug}/payments" \
 | 
			
		||||
              f"?from={from_date}&pageIndex=1&pageSize=100&retrieveOfflineDonations=false"
 | 
			
		||||
        headers = {
 | 
			
		||||
            "Accept": "application/json",
 | 
			
		||||
            "Authorization": f"Bearer {token}",
 | 
			
		||||
        }
 | 
			
		||||
        http_response = requests.get(url, headers=headers)
 | 
			
		||||
        response = http_response.json()
 | 
			
		||||
 | 
			
		||||
        if http_response.status_code != 200:
 | 
			
		||||
            message = response["message"]
 | 
			
		||||
            self.stderr.write(f"Error while querying Hello Asso: {message}")
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        for payment in response["data"]:
 | 
			
		||||
            if payment["state"] != "Authorized":
 | 
			
		||||
                continue
 | 
			
		||||
 | 
			
		||||
            payer = payment["payer"]
 | 
			
		||||
            email = payer["email"]
 | 
			
		||||
            last_name = payer["lastName"]
 | 
			
		||||
            first_name = payer["firstName"]
 | 
			
		||||
            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(
 | 
			
		||||
                        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}, "
 | 
			
		||||
                                  "but this user is not a participant.")
 | 
			
		||||
                continue
 | 
			
		||||
            payment_obj = user.registration.payment
 | 
			
		||||
            payment_obj.valid = True
 | 
			
		||||
            payment_obj.type = "helloasso"
 | 
			
		||||
            payment_obj.additional_information = f"Identifiant de transation : {payment['id']}\n" \
 | 
			
		||||
                                                 f"Date : {payment['date']}\n" \
 | 
			
		||||
                                                 f"Reçu : {payment['paymentReceiptUrl']}\n" \
 | 
			
		||||
                                                 f"Montant : {payment['amount'] / 100:.2f} €"
 | 
			
		||||
            payment_obj.save()
 | 
			
		||||
            self.stdout.write(f"{payment_obj} is validated")
 | 
			
		||||
		Reference in New Issue
	
	Block a user