Coverage for expo_notifications/admin.py: 79%
73 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-05-16 14:48 +0000
« prev ^ index » next coverage.py v7.8.0, created at 2025-05-16 14:48 +0000
1from admin_anchors import admin_anchor
2from django.contrib import admin
3from django.utils.translation import ngettext
5from expo_notifications.models import Device, Message, Receipt, Ticket
8class DeviceAdmin(admin.ModelAdmin):
9 list_display = [
10 "__str__",
11 "is_active",
12 "date_registered",
13 "lang",
14 "user_link",
15 "messages_link",
16 ]
17 list_filter = ["is_active", "lang", "date_registered"]
18 search_fields = ["user__username", "push_token"]
19 autocomplete_fields = ["user"]
21 def get_ordering(self, request):
22 return ["-id"]
24 @admin.display(description="User")
25 @admin_anchor("user")
26 def user_link(self, instance):
27 return str(instance.user)
29 @admin.display(description="Messages")
30 @admin_anchor("messages")
31 def messages_link(self, instance):
32 return str(instance.messages.count())
35class MessageAdmin(admin.ModelAdmin):
36 list_display = [
37 "__str__",
38 "title",
39 "body",
40 "date_created",
41 "device_link",
42 "tickets_link",
43 ]
44 list_filter = [
45 "date_created",
46 "expiration",
47 "priority",
48 "channel_id",
49 "category_id",
50 "mutable_content",
51 ]
52 search_fields = ["title", "body", "subtitle"]
53 autocomplete_fields = ["device"]
54 actions = ["send_messages"]
56 def get_ordering(self, request):
57 return ["-id"]
59 @admin.display(description="Device")
60 @admin_anchor("device")
61 def device_link(self, instance):
62 return str(instance.device)
64 @admin.display(description="Tickets")
65 @admin_anchor("tickets")
66 def tickets_link(self, instance):
67 return str(instance.tickets.count())
69 @admin.action(description="Send selected messages")
70 def send_messages(modeladmin, request, queryset):
71 queryset.send()
73 modeladmin.message_user(
74 request,
75 ngettext(
76 "%d message will be send.",
77 "%d messages will be send.",
78 queryset.count(),
79 )
80 % queryset.count(),
81 )
84class ReceiptAdmin(admin.ModelAdmin):
85 list_display = ["__str__", "is_success", "date_checked", "ticket_link"]
86 list_filter = ["is_success", "date_checked"]
87 autocomplete_fields = ["ticket"]
89 def get_ordering(self, request):
90 return ["-id"]
92 @admin.display(description="Ticket")
93 @admin_anchor("ticket")
94 def ticket_link(self, instance):
95 return str(instance.ticket)
98class TicketAdmin(admin.ModelAdmin):
99 list_display = [
100 "__str__",
101 "is_success",
102 "date_received",
103 "external_id",
104 "message_link",
105 "receipts_link",
106 ]
107 list_filter = ["is_success", "date_received"]
108 search_fields = ["external_id"]
109 autocomplete_fields = ["message"]
110 actions = ["check_tickets"]
112 def get_ordering(self, request):
113 return ["-id"]
115 @admin.display(description="Message")
116 @admin_anchor("message")
117 def message_link(self, instance):
118 return str(instance.message)
120 @admin.display(description="Receipts")
121 @admin_anchor("receipts")
122 def receipts_link(self, instance):
123 return str(instance.receipts.count())
125 @admin.action(description="Check selected tickets")
126 def check_tickets(modeladmin, request, queryset):
127 queryset.check_receipts()
129 modeladmin.message_user(
130 request,
131 ngettext(
132 "%d ticket receipt will be checked.",
133 "%d ticket receipts will be checked.",
134 queryset.count(),
135 )
136 % queryset.count(),
137 )
140admin.site.register(Device, DeviceAdmin)
141admin.site.register(Message, MessageAdmin)
142admin.site.register(Receipt, ReceiptAdmin)
143admin.site.register(Ticket, TicketAdmin)