mirror of
				https://gitlab.com/animath/si/plateforme.git
				synced 2025-11-04 12:32:18 +01:00 
			
		
		
		
	Add script that checks payments from Hello Asso
This commit is contained in:
		
							
								
								
									
										54
									
								
								apps/participation/management/commands/check_hello_asso.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								apps/participation/management/commands/check_hello_asso.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
			
		||||
# Copyright (C) 2020 by Animath
 | 
			
		||||
# SPDX-License-Identifier: GPL-3.0-or-later
 | 
			
		||||
 | 
			
		||||
import os
 | 
			
		||||
 | 
			
		||||
import requests
 | 
			
		||||
from django.contrib.auth.models import User
 | 
			
		||||
from django.core.management import BaseCommand
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Command(BaseCommand):
 | 
			
		||||
    def handle(self, *args, **options):  # noqa: C901
 | 
			
		||||
        organization = "animath"
 | 
			
		||||
        form_slug = "tfjmm-2018"
 | 
			
		||||
        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=10000&retrieveOfflineDonations=false"
 | 
			
		||||
        headers = {
 | 
			
		||||
            "Accept": "application/json",
 | 
			
		||||
            "Authorization": f"Bearer {os.getenv('HELLO_ASSO_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:
 | 
			
		||||
            if payment["state"] != "Authorized":
 | 
			
		||||
                continue
 | 
			
		||||
 | 
			
		||||
            payer = payment["payer"]
 | 
			
		||||
            email = payer["email"]
 | 
			
		||||
            qs = User.objects.filter(email=email)
 | 
			
		||||
            if not qs.exists():
 | 
			
		||||
                self.stderr.write(f"Warning: a payment was found by the email address {email}, "
 | 
			
		||||
                                  "but this user is unknown.")
 | 
			
		||||
                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