• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

TampereHacklab / mulysa / 13593853197

28 Feb 2025 06:05PM UTC coverage: 86.728% (-0.3%) from 87.021%
13593853197

push

github

web-flow
Merge pull request #567 from TampereHacklab/add-details-to-www-pages

Add matrix ID to www pages

2346 of 2705 relevant lines covered (86.73%)

0.87 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

96.83
/users/admin.py
1
from django.contrib import admin
1✔
2
from django.contrib.auth.admin import UserAdmin
1✔
3
from django.utils import timezone
1✔
4

5
from rangefilter.filters import DateRangeFilter
1✔
6

7
from .filters import (
1✔
8
    PredefAgeListFilter,
9
    MarkedForDeletionFilter,
10
    ServiceSubscriptionCountFilter,
11
)
12
from .forms import CustomUserChangeForm, CustomUserCreationForm
1✔
13
from .models import (
1✔
14
    BankTransaction,
15
    CustomInvoice,
16
    CustomUser,
17
    MemberService,
18
    MembershipApplication,
19
    NFCCard,
20
    ServiceSubscription,
21
    UsersLog,
22
    Statistics,
23
)
24

25

26
class ServiceSubscriptionInline(admin.TabularInline):
1✔
27
    model = ServiceSubscription
1✔
28
    exclude = ["paid_until", "last_payment", "reference_number", "reminder_sent"]
1✔
29
    readonly_fields = ("last_payment", "reference_number")
1✔
30

31

32
class CustomUserAdmin(UserAdmin):
1✔
33
    add_form = CustomUserCreationForm
1✔
34
    form = CustomUserChangeForm
1✔
35
    model = CustomUser
1✔
36

37
    ordering = (
1✔
38
        "first_name",
39
        "last_name",
40
    )
41
    list_display = (
1✔
42
        "email",
43
        "first_name",
44
        "last_name",
45
        "nick",
46
        "mxid",
47
        "marked_for_deletion_on",
48
        "is_active",
49
        "is_staff",
50
        "is_superuser",
51
    )
52
    search_fields = ("email", "first_name", "last_name", "phone", "mxid", "nick")
1✔
53
    list_filter = (
1✔
54
        "is_active",
55
        "is_staff",
56
        MarkedForDeletionFilter,
57
        "language",
58
        "municipality",
59
        PredefAgeListFilter,
60
        ("birthday", DateRangeFilter),
61
        ServiceSubscriptionCountFilter,
62
    )
63
    readonly_fields = (
1✔
64
        "age_years",
65
        "created",
66
        "last_modified",
67
        "last_login",
68
        "date_joined",
69
    )
70
    fieldsets = (
1✔
71
        (
72
            "Data",
73
            {
74
                "fields": (
75
                    "email",
76
                    "first_name",
77
                    "last_name",
78
                    "nick",
79
                    "mxid",
80
                    "language",
81
                    "municipality",
82
                    "is_active",
83
                    "is_staff",
84
                    "is_superuser",
85
                    "phone",
86
                    "bank_account",
87
                )
88
            },
89
        ),
90
        (
91
            "Dates",
92
            {"fields": ("birthday",) + readonly_fields + ("marked_for_deletion_on",)},
93
        ),
94
    )
95

96
    add_fieldsets = (
1✔
97
        (
98
            "Data",
99
            {
100
                "classes": ("wide",),
101
                "fields": (
102
                    "email",
103
                    "first_name",
104
                    "last_name",
105
                    "nick",
106
                    "mxid",
107
                    "language",
108
                    "municipality",
109
                    "is_active",
110
                    "is_staff",
111
                    "is_superuser",
112
                    "phone",
113
                    "bank_account",
114
                    "password1",
115
                    "password2",
116
                ),
117
            },
118
        ),
119
        (
120
            "Dates",
121
            {
122
                "classes": ("wide",),
123
                "fields": ("birthday",),
124
            },
125
        ),
126
    )
127

128
    inlines = [ServiceSubscriptionInline]
1✔
129

130
    actions = ["mark_for_deletion_on", "mark_for_deletion_off"]
1✔
131

132
    def mark_for_deletion_on(self, request, queryset):
1✔
133
        queryset.update(marked_for_deletion_on=timezone.now())
×
134

135
    mark_for_deletion_on.short_description = "Mark selected users for deletion"
1✔
136

137
    def mark_for_deletion_off(self, request, queryset):
1✔
138
        queryset.update(marked_for_deletion_on=None)
×
139

140
    mark_for_deletion_off.short_description = (
1✔
141
        "Remove mark for deletion from selected users"
142
    )
143

144

145
class NFCCardAdmin(admin.ModelAdmin):
1✔
146
    list_display = [
1✔
147
        "user",
148
        "cardid",
149
    ]
150

151

152
class ServiceSubscriptionAdmin(admin.ModelAdmin):
1✔
153
    list_display = ["user", "service", "state", "reference_number"]
1✔
154
    search_fields = (
1✔
155
        "user__email",
156
        "user__first_name",
157
        "user__last_name",
158
        "user__phone",
159
        "user__mxid",
160
        "user__nick",
161
    )
162
    list_filter = ("service", "state")
1✔
163

164

165
class MemberServiceAdmin(admin.ModelAdmin):
1✔
166
    list_display = ["name", "cost", "pays_also_service", "accounting_id"]
1✔
167

168

169
class BankTransactionAdmin(admin.ModelAdmin):
1✔
170
    list_display = [
1✔
171
        "id",
172
        "user",
173
        "amount",
174
        "reference_number",
175
        "archival_reference",
176
        "date",
177
        "sender",
178
        "has_been_used",
179
    ]
180
    list_filter = ("has_been_used", "date")
1✔
181
    ordering = ("-date",)
1✔
182
    search_fields = (
1✔
183
        "user__email",
184
        "user__first_name",
185
        "user__last_name",
186
        "user__phone",
187
        "user__mxid",
188
        "user__nick",
189
        "reference_number",
190
        "archival_reference",
191
    )
192

193

194
class CustomInvoiceAdmin(admin.ModelAdmin):
1✔
195
    list_display = [
1✔
196
        "user",
197
        "subscription",
198
        "payment_transaction",
199
        "reference_number",
200
        "amount",
201
    ]
202

203

204
class StatisticsAdmin(admin.ModelAdmin):
1✔
205
    """
206
    Allow only viewing statistics in admin
207
    """
208

209
    list_display = [
1✔
210
        field.name for field in Statistics._meta.fields if field.name != "id"
211
    ]
212

213
    date_hierarchy = "date"
1✔
214
    list_display_links = None
1✔
215
    actions = None
1✔
216

217
    def has_add_permission(self, request):
1✔
218
        return False
1✔
219

220
    def has_delete_permission(self, request, obj=None):
1✔
221
        return False
1✔
222

223

224
admin.site.register(CustomUser, CustomUserAdmin)
1✔
225
admin.site.register(MembershipApplication)
1✔
226
admin.site.register(MemberService, MemberServiceAdmin)
1✔
227
admin.site.register(ServiceSubscription, ServiceSubscriptionAdmin)
1✔
228
admin.site.register(BankTransaction, BankTransactionAdmin)
1✔
229
admin.site.register(CustomInvoice, CustomInvoiceAdmin)
1✔
230
admin.site.register(UsersLog)
1✔
231
admin.site.register(NFCCard, NFCCardAdmin)
1✔
232
admin.site.register(Statistics, StatisticsAdmin)
1✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc