Source code for pushnotifications.admin

"""The admin interfaces registered by the pushnotifications package"""
from django.contrib import admin
from django.utils.translation import gettext_lazy as _

from pushnotifications import models
from pushnotifications.models import Message
from utils.translation import TranslatedModelAdmin


[docs]class MessageSentFilter(admin.SimpleListFilter): """Filter the push notifications on whether they are sent or not""" title = _("sent") parameter_name = "is_sent"
[docs] def lookups(self, request, model_admin): queryset = model_admin.get_queryset(request) values = [] if queryset.filter(sent__isnull=False).exists(): values.append((1, _("Yes"))) if queryset.filter(sent__isnull=True).exists(): values.append((0, _("No"))) return values
[docs] def queryset(self, request, queryset): if self.value() == "1": return queryset.filter(sent__isnull=False) elif self.value() == "0": return queryset.filter(sent__isnull=True) return queryset
[docs]@admin.register(models.Device) class DeviceAdmin(admin.ModelAdmin): """Manage the devices""" list_display = ("name", "type", "active", "date_created") list_filter = ("active", "type") actions = ("enable", "disable") ordering = ("user__first_name",) search_fields = ( "registration_id", "user__username", "user__first_name", "user__last_name", )
[docs] def enable(self, request, queryset): queryset.update(active=True)
enable.short_description = _("Enable selected devices")
[docs] def disable(self, request, queryset): queryset.update(active=False)
disable.short_description = _("Disable selected devices")
[docs] def name(self, obj): return "{} ({})".format(obj.user.get_full_name(), obj.user.username)
name.short_description = _("Name") name.admin_order_field = "user__first_name"
[docs]@admin.register(models.Message) class MessageAdmin(TranslatedModelAdmin): """Manage normal messages""" list_display = ("title", "body", "category", "url", "sent", "success", "failure") filter_horizontal = ("users",) list_filter = (MessageSentFilter, "category") date_hierarchy = "sent"
[docs] def get_fields(self, request, obj=None): if obj and obj.sent: return ( "users", "title_nl", "title_en", "body_nl", "body_en", "url", "category", "sent", "success", "failure", ) return ( "users", "title_nl", "title_en", "body_nl", "body_en", "url", "category", )
[docs] def get_readonly_fields(self, request, obj=None): if obj and obj.sent: return ( "users", "title_nl", "title_en", "body_nl", "body_en", "url", "category", "sent", "success", "failure", ) return super().get_readonly_fields(request, obj)
[docs] def change_view(self, request, object_id, form_url="", **kwargs): obj = Message.objects.filter(id=object_id)[0] return super().change_view(request, object_id, form_url, {"message": obj})
[docs]@admin.register(models.ScheduledMessage) class ScheduledMessageAdmin(TranslatedModelAdmin): """Manage scheduled messages""" list_display = ("title", "body", "time", "category", "sent", "success", "failure") date_hierarchy = "time" filter_horizontal = ("users",) list_filter = (MessageSentFilter, "category")
[docs] def get_fields(self, request, obj=None): if obj and obj.sent: return ( "users", "title_nl", "title_en", "body_nl", "body_en", "url", "category", "sent", "success", "failure", "time", "executed", ) return ( "users", "title_nl", "title_en", "body_nl", "body_en", "url", "category", "time", )
[docs] def get_readonly_fields(self, request, obj=None): if obj and obj.sent: return ( "users", "title_nl", "title_en", "body_nl", "body_en", "url", "category", "sent", "success", "failure", "time", "executed", ) return ("executed",)