diff --git a/bds/templates/bds/home.html b/bds/templates/bds/home.html index 2188d8df..b1897e48 100644 --- a/bds/templates/bds/home.html +++ b/bds/templates/bds/home.html @@ -9,6 +9,7 @@ diff --git a/bds/urls.py b/bds/urls.py index b91389ab..6255736a 100644 --- a/bds/urls.py +++ b/bds/urls.py @@ -7,4 +7,5 @@ app_name = "bds" urlpatterns = [ path("", views.home, name="home"), path("members/emails", views.members_emails, name="members_emails"), + path("members/csv", views.members_csv, name="members_csv"), ] diff --git a/bds/views.py b/bds/views.py index b3e3dca8..87a8c80a 100644 --- a/bds/views.py +++ b/bds/views.py @@ -1,3 +1,5 @@ +import csv + from django.contrib.auth.decorators import permission_required from django.contrib.auth.mixins import PermissionRequiredMixin from django.http import HttpResponse @@ -20,3 +22,39 @@ def members_emails(request): response = HttpResponse(content_type="text/plain") response.write(", ".join(members.values_list("user__email", flat=True))) return response + + +@permission_required("bds:is_staff") +def members_csv(request): + response = HttpResponse(content_type="text/csv") + response["Content-Disposition"] = 'attachment; filename="members.csv"' + writer = csv.writer(response) + + header = [ + "nom", + "email", + "numéro de téléphone", + "occupation", + "département", + "date de naissance", + "Numéro ASPSL", + "Période de cotisation", + "Type de cotisation", + ] + writer.writerow(header) + + for profile in BDSProfile.objects.filter(is_member=True): + data = [ + profile.user.get_full_name(), + profile.user.email, + profile.phone, + profile.occupation, + profile.departement, + profile.birthdate, + profile.ASPSL_number, + profile.cotisation_period, + profile.cotisation_type, + ] + writer.writerow(map(lambda x: str(x) if x else "", data)) + + return response