summaryrefslogtreecommitdiff
path: root/foundation/admin.py
blob: 13a604b429c80795c552c22d23d2338cc44f6418 (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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
from django.contrib import admin
from django.utils.text import slugify
from django.utils.translation import gettext as _

from . import models


@admin.register(models.Office)
class OfficeAdmin(admin.ModelAdmin):
    pass


@admin.register(models.Term)
class TermAdmin(admin.ModelAdmin):
    pass


@admin.register(models.BoardMember)
class BoardMemberAdmin(admin.ModelAdmin):
    list_display = ("full_name", "office", "term")
    list_filter = ("office", "term")
    list_select_related = True
    raw_id_fields = ("account",)

    @admin.display(ordering="account__last_name")
    def full_name(self, obj):
        return obj.account.get_full_name()


@admin.register(models.NonBoardAttendee)
class NonBoardAttendeeAdmin(admin.ModelAdmin):
    pass


class GrantInline(admin.TabularInline):
    model = models.ApprovedGrant


class IndividualMemberInline(admin.TabularInline):
    model = models.ApprovedIndividualMember


class CorporateMemberInline(admin.TabularInline):
    model = models.ApprovedCorporateMember


class BusinessInline(admin.StackedInline):
    model = models.Business


class ActionItemInline(admin.StackedInline):
    model = models.ActionItem


@admin.register(models.Banner)
class BannerAdmin(admin.ModelAdmin):
    list_display = ["title", "is_active", "created_at", "updated_at"]
    list_editable = ["is_active"]
    readonly_fields = ["created_by", "created_at", "updated_by", "updated_at"]
    fieldsets = [
        (None, {"fields": ["title", "body", "is_active"]}),
        (
            "Call to action",
            {
                "description": (
                    "Both fields should be defined for the CTA button to be displayed."
                ),
                "fields": ["cta_label", "cta_url"],
            },
        ),
        (
            "Metadata",
            {"fields": ["created_by", "created_at", "updated_by", "updated_at"]},
        ),
    ]

    def save_model(self, request, obj, form, change):
        if not change:
            obj.created_by = request.user
        obj.updated_by = request.user
        super().save_model(request, obj, form, change)


@admin.register(models.Meeting)
class MeetingAdmin(admin.ModelAdmin):
    fieldsets = (
        (
            "Metadata",
            {
                "fields": (
                    "title",
                    "slug",
                    "date",
                    "leader",
                    "board_attendees",
                    "non_board_attendees",
                ),
            },
        ),
        (
            "Treasurer report",
            {
                "fields": ("treasurer_balance", "treasurer_report"),
            },
        ),
    )
    filter_horizontal = ("board_attendees", "non_board_attendees")
    inlines = [
        GrantInline,
        IndividualMemberInline,
        CorporateMemberInline,
        BusinessInline,
        ActionItemInline,
    ]
    list_display = ("title", "date")
    list_filter = ("date",)
    prepopulated_fields = {"slug": ("title",)}

    def get_changeform_initial_data(self, request):
        title = _("DSF Board monthly meeting")
        return {
            "title": title,
            "slug": slugify(title),
        }


class CoreAwardAdmin(admin.ModelAdmin):
    list_display = ["recipient", "cohort"]


admin.site.register(models.CoreAward, CoreAwardAdmin)
admin.site.register(models.CoreAwardCohort)