2016-07-26 14:58:37 -04:00
|
|
|
import django_filters
|
2016-07-29 12:51:23 -04:00
|
|
|
from django.db.models import Q
|
2022-11-03 11:58:26 -07:00
|
|
|
from django.utils.translation import gettext as _
|
2016-07-29 12:51:23 -04:00
|
|
|
|
2023-08-01 21:22:14 +05:30
|
|
|
from extras.filters import TagFilter
|
2023-11-06 15:36:59 -05:00
|
|
|
from netbox.filtersets import NetBoxModelFilterSet, OrganizationalModelFilterSet
|
2021-10-18 16:20:31 -04:00
|
|
|
from utilities.filters import ContentTypeFilter, TreeNodeMultipleChoiceFilter
|
2021-10-18 11:45:05 -04:00
|
|
|
from .models import *
|
2016-07-26 14:58:37 -04:00
|
|
|
|
2020-01-08 17:20:31 -05:00
|
|
|
__all__ = (
|
2021-10-18 11:45:05 -04:00
|
|
|
'ContactAssignmentFilterSet',
|
|
|
|
|
'ContactFilterSet',
|
|
|
|
|
'ContactGroupFilterSet',
|
2022-03-18 14:58:51 +00:00
|
|
|
'ContactModelFilterSet',
|
2021-10-18 11:45:05 -04:00
|
|
|
'ContactRoleFilterSet',
|
2020-01-09 21:05:38 -05:00
|
|
|
'TenancyFilterSet',
|
2020-01-09 20:40:32 -05:00
|
|
|
'TenantFilterSet',
|
|
|
|
|
'TenantGroupFilterSet',
|
2020-01-08 17:20:31 -05:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
2021-10-18 11:45:05 -04:00
|
|
|
#
|
2022-03-09 16:35:47 +00:00
|
|
|
# Contacts
|
2021-10-18 11:45:05 -04:00
|
|
|
#
|
|
|
|
|
|
2022-03-09 16:35:47 +00:00
|
|
|
class ContactGroupFilterSet(OrganizationalModelFilterSet):
|
2020-03-11 20:20:04 -04:00
|
|
|
parent_id = django_filters.ModelMultipleChoiceFilter(
|
2022-03-09 16:35:47 +00:00
|
|
|
queryset=ContactGroup.objects.all(),
|
2024-03-11 12:32:06 -04:00
|
|
|
label=_('Parent contact group (ID)'),
|
2020-03-11 20:20:04 -04:00
|
|
|
)
|
|
|
|
|
parent = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
field_name='parent__slug',
|
2022-03-09 16:35:47 +00:00
|
|
|
queryset=ContactGroup.objects.all(),
|
2020-03-11 20:20:04 -04:00
|
|
|
to_field_name='slug',
|
2024-03-11 12:32:06 -04:00
|
|
|
label=_('Parent contact group (slug)'),
|
|
|
|
|
)
|
|
|
|
|
ancestor_id = TreeNodeMultipleChoiceFilter(
|
|
|
|
|
queryset=ContactGroup.objects.all(),
|
|
|
|
|
field_name='parent',
|
|
|
|
|
lookup_expr='in',
|
|
|
|
|
label=_('Contact group (ID)'),
|
|
|
|
|
)
|
|
|
|
|
ancestor = TreeNodeMultipleChoiceFilter(
|
|
|
|
|
queryset=ContactGroup.objects.all(),
|
|
|
|
|
field_name='parent',
|
|
|
|
|
lookup_expr='in',
|
|
|
|
|
to_field_name='slug',
|
2022-11-03 11:58:26 -07:00
|
|
|
label=_('Contact group (slug)'),
|
2020-03-11 20:20:04 -04:00
|
|
|
)
|
2017-06-19 16:10:18 -04:00
|
|
|
|
|
|
|
|
class Meta:
|
2022-03-09 16:35:47 +00:00
|
|
|
model = ContactGroup
|
2024-03-12 12:08:11 -04:00
|
|
|
fields = ('id', 'name', 'slug', 'description')
|
2017-06-19 16:10:18 -04:00
|
|
|
|
|
|
|
|
|
2022-03-09 16:35:47 +00:00
|
|
|
class ContactRoleFilterSet(OrganizationalModelFilterSet):
|
|
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = ContactRole
|
2024-03-12 12:08:11 -04:00
|
|
|
fields = ('id', 'name', 'slug', 'description')
|
2017-06-19 16:10:18 -04:00
|
|
|
|
|
|
|
|
|
2022-03-18 13:17:11 -04:00
|
|
|
class ContactFilterSet(NetBoxModelFilterSet):
|
2020-03-11 20:20:04 -04:00
|
|
|
group_id = TreeNodeMultipleChoiceFilter(
|
2022-03-09 16:35:47 +00:00
|
|
|
queryset=ContactGroup.objects.all(),
|
2020-03-11 20:20:04 -04:00
|
|
|
field_name='group',
|
|
|
|
|
lookup_expr='in',
|
2022-11-03 11:58:26 -07:00
|
|
|
label=_('Contact group (ID)'),
|
2016-07-26 14:58:37 -04:00
|
|
|
)
|
2020-03-11 20:20:04 -04:00
|
|
|
group = TreeNodeMultipleChoiceFilter(
|
2022-03-09 16:35:47 +00:00
|
|
|
queryset=ContactGroup.objects.all(),
|
2020-03-11 20:20:04 -04:00
|
|
|
field_name='group',
|
|
|
|
|
lookup_expr='in',
|
2016-07-26 14:58:37 -04:00
|
|
|
to_field_name='slug',
|
2022-11-03 11:58:26 -07:00
|
|
|
label=_('Contact group (slug)'),
|
2016-07-26 14:58:37 -04:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
class Meta:
|
2022-03-09 16:35:47 +00:00
|
|
|
model = Contact
|
2024-03-12 12:08:11 -04:00
|
|
|
fields = ('id', 'name', 'title', 'phone', 'email', 'address', 'link', 'description')
|
2016-07-26 14:58:37 -04:00
|
|
|
|
2017-03-01 13:09:19 -05:00
|
|
|
def search(self, queryset, name, value):
|
|
|
|
|
if not value.strip():
|
|
|
|
|
return queryset
|
2016-07-29 12:51:23 -04:00
|
|
|
return queryset.filter(
|
|
|
|
|
Q(name__icontains=value) |
|
2022-03-09 16:35:47 +00:00
|
|
|
Q(title__icontains=value) |
|
|
|
|
|
Q(phone__icontains=value) |
|
|
|
|
|
Q(email__icontains=value) |
|
|
|
|
|
Q(address__icontains=value) |
|
2022-03-30 16:19:12 -04:00
|
|
|
Q(link__icontains=value) |
|
2023-12-28 13:20:02 -05:00
|
|
|
Q(description__icontains=value) |
|
2016-07-29 12:51:23 -04:00
|
|
|
Q(comments__icontains=value)
|
|
|
|
|
)
|
2020-01-09 21:05:38 -05:00
|
|
|
|
|
|
|
|
|
2023-11-06 15:36:59 -05:00
|
|
|
class ContactAssignmentFilterSet(NetBoxModelFilterSet):
|
2023-02-15 12:55:25 +01:00
|
|
|
q = django_filters.CharFilter(
|
|
|
|
|
method='search',
|
|
|
|
|
label=_('Search'),
|
|
|
|
|
)
|
2024-03-01 16:54:01 -05:00
|
|
|
object_type = ContentTypeFilter()
|
2022-03-09 16:35:47 +00:00
|
|
|
contact_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
queryset=Contact.objects.all(),
|
2022-11-03 11:58:26 -07:00
|
|
|
label=_('Contact (ID)'),
|
2020-01-09 21:05:38 -05:00
|
|
|
)
|
2023-12-14 16:58:11 -05:00
|
|
|
group_id = TreeNodeMultipleChoiceFilter(
|
|
|
|
|
queryset=ContactGroup.objects.all(),
|
|
|
|
|
field_name='contact__group',
|
|
|
|
|
lookup_expr='in',
|
|
|
|
|
label=_('Contact group (ID)'),
|
|
|
|
|
)
|
|
|
|
|
group = TreeNodeMultipleChoiceFilter(
|
|
|
|
|
queryset=ContactGroup.objects.all(),
|
|
|
|
|
field_name='contact__group',
|
|
|
|
|
lookup_expr='in',
|
|
|
|
|
to_field_name='slug',
|
|
|
|
|
label=_('Contact group (slug)'),
|
|
|
|
|
)
|
2022-03-09 16:35:47 +00:00
|
|
|
role_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
queryset=ContactRole.objects.all(),
|
2022-11-03 11:58:26 -07:00
|
|
|
label=_('Contact role (ID)'),
|
2022-03-09 16:35:47 +00:00
|
|
|
)
|
|
|
|
|
role = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
field_name='role__slug',
|
|
|
|
|
queryset=ContactRole.objects.all(),
|
2020-01-09 21:05:38 -05:00
|
|
|
to_field_name='slug',
|
2022-11-03 11:58:26 -07:00
|
|
|
label=_('Contact role (slug)'),
|
2020-01-09 21:05:38 -05:00
|
|
|
)
|
2023-08-01 21:22:14 +05:30
|
|
|
tag = TagFilter()
|
2022-03-09 16:35:47 +00:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = ContactAssignment
|
2024-03-12 12:08:11 -04:00
|
|
|
fields = ('id', 'object_type_id', 'object_id', 'priority', 'tag')
|
2022-03-09 16:35:47 +00:00
|
|
|
|
2023-02-15 12:55:25 +01:00
|
|
|
def search(self, queryset, name, value):
|
|
|
|
|
if not value.strip():
|
|
|
|
|
return queryset
|
|
|
|
|
return queryset.filter(
|
|
|
|
|
Q(contact__name__icontains=value) |
|
|
|
|
|
Q(role__name__icontains=value)
|
|
|
|
|
)
|
|
|
|
|
|
2022-03-09 16:35:47 +00:00
|
|
|
|
|
|
|
|
class ContactModelFilterSet(django_filters.FilterSet):
|
|
|
|
|
contact = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
field_name='contacts__contact',
|
|
|
|
|
queryset=Contact.objects.all(),
|
2022-11-03 11:58:26 -07:00
|
|
|
label=_('Contact'),
|
2020-01-09 21:05:38 -05:00
|
|
|
)
|
2022-03-09 16:35:47 +00:00
|
|
|
contact_role = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
field_name='contacts__role',
|
|
|
|
|
queryset=ContactRole.objects.all(),
|
2022-11-03 11:58:26 -07:00
|
|
|
label=_('Contact Role')
|
2020-01-09 21:05:38 -05:00
|
|
|
)
|
2022-05-14 17:48:37 +02:00
|
|
|
contact_group = TreeNodeMultipleChoiceFilter(
|
|
|
|
|
queryset=ContactGroup.objects.all(),
|
|
|
|
|
field_name='contacts__contact__group',
|
|
|
|
|
lookup_expr='in',
|
2022-11-03 11:58:26 -07:00
|
|
|
label=_('Contact group'),
|
2022-05-14 17:48:37 +02:00
|
|
|
)
|
2021-10-18 11:45:05 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
#
|
2022-03-09 16:35:47 +00:00
|
|
|
# Tenancy
|
2021-10-18 11:45:05 -04:00
|
|
|
#
|
|
|
|
|
|
2022-03-09 16:35:47 +00:00
|
|
|
class TenantGroupFilterSet(OrganizationalModelFilterSet):
|
2021-10-18 11:45:05 -04:00
|
|
|
parent_id = django_filters.ModelMultipleChoiceFilter(
|
2022-03-09 16:35:47 +00:00
|
|
|
queryset=TenantGroup.objects.all(),
|
2024-03-11 12:32:06 -04:00
|
|
|
label=_('Parent tenant group (ID)'),
|
2021-10-18 11:45:05 -04:00
|
|
|
)
|
|
|
|
|
parent = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
field_name='parent__slug',
|
2022-03-09 16:35:47 +00:00
|
|
|
queryset=TenantGroup.objects.all(),
|
2021-10-18 11:45:05 -04:00
|
|
|
to_field_name='slug',
|
2024-03-11 12:32:06 -04:00
|
|
|
label=_('Parent tenant group (slug)'),
|
|
|
|
|
)
|
|
|
|
|
ancestor_id = TreeNodeMultipleChoiceFilter(
|
|
|
|
|
queryset=TenantGroup.objects.all(),
|
|
|
|
|
field_name='parent',
|
|
|
|
|
lookup_expr='in',
|
|
|
|
|
label=_('Tenant group (ID)'),
|
|
|
|
|
)
|
|
|
|
|
ancestor = TreeNodeMultipleChoiceFilter(
|
|
|
|
|
queryset=TenantGroup.objects.all(),
|
|
|
|
|
field_name='parent',
|
|
|
|
|
lookup_expr='in',
|
|
|
|
|
to_field_name='slug',
|
2022-11-03 11:58:26 -07:00
|
|
|
label=_('Tenant group (slug)'),
|
2021-10-18 11:45:05 -04:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
class Meta:
|
2022-03-09 16:35:47 +00:00
|
|
|
model = TenantGroup
|
2024-03-12 12:08:11 -04:00
|
|
|
fields = ('id', 'name', 'slug', 'description')
|
2021-10-18 11:45:05 -04:00
|
|
|
|
|
|
|
|
|
2022-03-18 13:17:11 -04:00
|
|
|
class TenantFilterSet(NetBoxModelFilterSet, ContactModelFilterSet):
|
2021-10-18 11:45:05 -04:00
|
|
|
group_id = TreeNodeMultipleChoiceFilter(
|
2022-03-09 16:35:47 +00:00
|
|
|
queryset=TenantGroup.objects.all(),
|
2021-10-18 11:45:05 -04:00
|
|
|
field_name='group',
|
|
|
|
|
lookup_expr='in',
|
2022-11-03 11:58:26 -07:00
|
|
|
label=_('Tenant group (ID)'),
|
2021-10-18 11:45:05 -04:00
|
|
|
)
|
|
|
|
|
group = TreeNodeMultipleChoiceFilter(
|
2022-03-09 16:35:47 +00:00
|
|
|
queryset=TenantGroup.objects.all(),
|
2021-10-18 11:45:05 -04:00
|
|
|
field_name='group',
|
|
|
|
|
lookup_expr='in',
|
|
|
|
|
to_field_name='slug',
|
2022-11-03 11:58:26 -07:00
|
|
|
label=_('Tenant group (slug)'),
|
2021-10-18 11:45:05 -04:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
class Meta:
|
2022-03-09 16:35:47 +00:00
|
|
|
model = Tenant
|
2024-03-12 12:08:11 -04:00
|
|
|
fields = ('id', 'name', 'slug', 'description')
|
2021-10-18 11:45:05 -04:00
|
|
|
|
|
|
|
|
def search(self, queryset, name, value):
|
|
|
|
|
if not value.strip():
|
|
|
|
|
return queryset
|
|
|
|
|
return queryset.filter(
|
|
|
|
|
Q(name__icontains=value) |
|
2022-03-09 16:35:47 +00:00
|
|
|
Q(slug__icontains=value) |
|
|
|
|
|
Q(description__icontains=value) |
|
2021-10-18 11:45:05 -04:00
|
|
|
Q(comments__icontains=value)
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
2022-03-09 16:35:47 +00:00
|
|
|
class TenancyFilterSet(django_filters.FilterSet):
|
|
|
|
|
"""
|
|
|
|
|
An inheritable FilterSet for models which support Tenant assignment.
|
|
|
|
|
"""
|
|
|
|
|
tenant_group_id = TreeNodeMultipleChoiceFilter(
|
|
|
|
|
queryset=TenantGroup.objects.all(),
|
|
|
|
|
field_name='tenant__group',
|
|
|
|
|
lookup_expr='in',
|
2022-11-03 11:58:26 -07:00
|
|
|
label=_('Tenant Group (ID)'),
|
2021-10-18 11:45:05 -04:00
|
|
|
)
|
2022-03-09 16:35:47 +00:00
|
|
|
tenant_group = TreeNodeMultipleChoiceFilter(
|
|
|
|
|
queryset=TenantGroup.objects.all(),
|
|
|
|
|
field_name='tenant__group',
|
|
|
|
|
to_field_name='slug',
|
|
|
|
|
lookup_expr='in',
|
2022-11-03 11:58:26 -07:00
|
|
|
label=_('Tenant Group (slug)'),
|
2021-10-18 11:45:05 -04:00
|
|
|
)
|
2022-03-09 16:35:47 +00:00
|
|
|
tenant_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
queryset=Tenant.objects.all(),
|
2022-11-03 11:58:26 -07:00
|
|
|
label=_('Tenant (ID)'),
|
2022-03-09 16:35:47 +00:00
|
|
|
)
|
|
|
|
|
tenant = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
queryset=Tenant.objects.all(),
|
|
|
|
|
field_name='tenant__slug',
|
2021-10-18 11:45:05 -04:00
|
|
|
to_field_name='slug',
|
2022-11-03 11:58:26 -07:00
|
|
|
label=_('Tenant (slug)'),
|
2021-10-18 11:45:05 -04:00
|
|
|
)
|