summaryrefslogtreecommitdiff
path: root/members/views.py
blob: 2ed4d5c6be832b26f515749422354e8a52ff32d3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
from django.core import signing
from django.http import Http404
from django.shortcuts import render
from django.urls import reverse
from django.utils.translation import gettext as _
from django.views.generic import CreateView, ListView, TemplateView, UpdateView
from django.views.generic.dates import timezone_today

from .forms import CorporateMemberSignUpForm
from .models import (
    CORPORATE_MEMBERSHIP_AMOUNTS,
    CorporateMember,
    IndividualMember,
    Team,
)


class IndividualMemberListView(ListView):
    model = IndividualMember
    context_object_name = "members"

    def get_queryset(self):
        return super().get_queryset().filter(member_until=None)

    def get_context_data(self):
        context = super().get_context_data()
        context["former_members"] = IndividualMember.objects.filter(
            member_until__lte=timezone_today(),
        )
        return context


def corporate_member_list_view(request):
    return render(
        request,
        "members/corporatemember_list.html",
        {
            "members": CorporateMember.objects.by_membership_level(),
            "corporate_membership_amounts": CORPORATE_MEMBERSHIP_AMOUNTS,
        },
    )


class CorporateMemberSignupMixin:
    form_class = CorporateMemberSignUpForm
    model = CorporateMember

    def get_success_url(self):
        return reverse("members:corporate-members-join-thanks")


class CorporateMemberSignUpView(CorporateMemberSignupMixin, CreateView):
    pass


class CorporateMemberRenewView(CorporateMemberSignupMixin, UpdateView):
    def get_object(self):
        """
        Convert the token back to a pk and check that it's not older than
        30 days.
        """
        try:
            pk = signing.loads(self.kwargs["token"], max_age=2.592e6)
        except signing.BadSignature:
            raise Http404(_("No CorporateMember found matching the query"))
        return self.get_queryset().get(pk=pk)


class CorporateMemberBadgesView(TemplateView):
    template_name = "members/corporate_member_badges.html"

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)

        levels = ["bronze", "silver", "gold", "platinum"]
        img_variants = ["", "g", "b", "w"]

        badges = {}
        for level in levels:
            badges[level] = []
            for variant in img_variants:
                basename = f"{level}_{variant}" if variant else level
                filename = f"img/badges/corporate_members/{basename}"
                badges[level].append(
                    {
                        "svg": f"{filename}.svg",
                        "png": f"{filename}.png",
                    }
                )

        context["badges"] = badges
        return context


class TeamsListView(ListView):
    model = Team
    context_object_name = "teams"

    def get_queryset(self):
        return self.model.objects.prefetch_related("members").order_by("name")