63 lines
2.2 KiB
Python
63 lines
2.2 KiB
Python
from django.contrib.admin import SimpleListFilter
|
|
from django.utils.translation import gettext_lazy as _
|
|
from orchestra.contrib.orchestration.models import Server
|
|
from orchestra.contrib.websites.models import Website
|
|
from orchestra.settings import WEB_SERVERS
|
|
|
|
class HasMailboxListFilter(SimpleListFilter):
|
|
""" Filter addresses whether they have any mailbox or not """
|
|
title = _("has mailbox")
|
|
parameter_name = 'has_mailbox'
|
|
|
|
def lookups(self, request, model_admin):
|
|
return (
|
|
('True', _("True")),
|
|
('False', _("False")),
|
|
)
|
|
|
|
def queryset(self, request, queryset):
|
|
if self.value() == 'True':
|
|
return queryset.filter(mailboxes__isnull=False)
|
|
elif self.value() == 'False':
|
|
return queryset.filter(mailboxes__isnull=True)
|
|
return queryset
|
|
|
|
|
|
class HasForwardListFilter(HasMailboxListFilter):
|
|
""" Filter addresses whether they have any mailbox or not """
|
|
title = _("has forward")
|
|
parameter_name = 'has_forward'
|
|
|
|
def queryset(self, request, queryset):
|
|
if self.value() == 'True':
|
|
return queryset.exclude(forward='')
|
|
elif self.value() == 'False':
|
|
return queryset.filter(forward='')
|
|
return queryset
|
|
|
|
|
|
class HasAddressListFilter(HasMailboxListFilter):
|
|
""" Filter addresses whether they have any mailbox or not """
|
|
title = _("has address")
|
|
parameter_name = 'has_address'
|
|
|
|
def queryset(self, request, queryset):
|
|
if self.value() == 'True':
|
|
return queryset.filter(addresses__isnull=False)
|
|
elif self.value() == 'False':
|
|
return queryset.filter(addresses__isnull=True)
|
|
return queryset
|
|
|
|
|
|
class HasTipeServerFilter(SimpleListFilter):
|
|
title = _("has type server")
|
|
parameter_name = 'has_servers'
|
|
|
|
def lookups(self, request, model_admin):
|
|
return [ (x.id, x.name) for x in Server.objects.filter(name__in=WEB_SERVERS) ]
|
|
|
|
def queryset(self, request, queryset):
|
|
if self.value() is not None:
|
|
serverWebsites = Website.objects.filter(target_server=self.value())
|
|
return queryset.filter(account__in=[ x.account.id for x in serverWebsites ] )
|
|
return queryset |