Coverage for src/expo_notifications/admin.py: 100%
69 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-05-10 02:00 +0000
« prev ^ index » next coverage.py v7.8.0, created at 2025-05-10 02:00 +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"]
20 def get_ordering(self, request):
21 return ["-id"]
23 @admin.display(description="User")
24 @admin_anchor("user")
25 def user_link(self, instance):
26 return str(instance.user)
28 @admin.display(description="Messages")
29 @admin_anchor("messages")
30 def messages_link(self, instance):
31 return str(instance.messages.count())
34class MessageAdmin(admin.ModelAdmin):
35 list_display = [
36 "__str__",
37 "title",
38 "body",
39 "date_created",
40 "device_link",
41 "tickets_link",
42 ]
43 list_filter = [
44 "date_created",
45 "expiration",
46 "priority",
47 "channel_id",
48 "category_id",
49 "mutable_content",
50 ]
51 search_fields = ["title", "body", "subtitle"]
52 actions = ["send_messages"]
54 def get_ordering(self, request):
55 return ["-id"]
57 @admin.display(description="Device")
58 @admin_anchor("device")
59 def device_link(self, instance):
60 return str(instance.device)
62 @admin.display(description="Tickets")
63 @admin_anchor("tickets")
64 def tickets_link(self, instance):
65 return str(instance.tickets.count())
67 @admin.action(description="Send selected messages")
68 def send_messages(modeladmin, request, queryset):
69 queryset.send()
71 modeladmin.message_user(
72 request,
73 ngettext(
74 "%d message will be send.",
75 "%d messages will be send.",
76 queryset.count(),
77 )
78 % queryset.count(),
79 )
82class ReceiptAdmin(admin.ModelAdmin):
83 list_display = ["__str__", "is_success", "date_checked", "ticket_link"]
84 list_filter = ["is_success", "date_checked"]
86 def get_ordering(self, request):
87 return ["-id"]
89 @admin.display(description="Ticket")
90 @admin_anchor("ticket")
91 def ticket_link(self, instance):
92 return str(instance.ticket)
95class TicketAdmin(admin.ModelAdmin):
96 list_display = [
97 "__str__",
98 "is_success",
99 "date_received",
100 "external_id",
101 "message_link",
102 "receipts_link",
103 ]
104 list_filter = ["is_success", "date_received"]
105 search_fields = ["external_id"]
106 actions = ["check_tickets"]
108 def get_ordering(self, request):
109 return ["-id"]
111 @admin.display(description="Message")
112 @admin_anchor("message")
113 def message_link(self, instance):
114 return str(instance.message)
116 @admin.display(description="Receipts")
117 @admin_anchor("receipts")
118 def receipts_link(self, instance):
119 return str(instance.receipts.count())
121 @admin.action(description="Check selected tickets")
122 def check_tickets(modeladmin, request, queryset):
123 queryset.check_receipts()
125 modeladmin.message_user(
126 request,
127 ngettext(
128 "%d ticket receipt will be checked.",
129 "%d ticket receipts will be checked.",
130 queryset.count(),
131 )
132 % queryset.count(),
133 )
136admin.site.register(Device, DeviceAdmin)
137admin.site.register(Message, MessageAdmin)
138admin.site.register(Receipt, ReceiptAdmin)
139admin.site.register(Ticket, TicketAdmin)