plateforme-tfjm2/apps/participation/management/commands/check_hello_asso.py

55 lines
2.3 KiB
Python

# 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")