Source code for ferrosoft.apps.ferrobase.filter

#  Copyright (c) 2025 Ferrosoft GmbH. All rights reserved.
"""Django-filter ``FilterSet`` definitions for ferrobase models."""
from django_filters import FilterSet, RangeFilter

from ferrosoft.apps.ferrobase.models import (
    Material,
    CompanySite,
    User,
    IdSequenceConfig,
    Organization,
    SubscriptionPlan,
    StoredFile,
    APIToken,
)


[docs] class APITokenFilterSet(FilterSet): """Filter API tokens by name substring or exact status."""
[docs] class Meta: model = APIToken fields = { "name": ["icontains"], "status": ["exact"], }
[docs] class CompanySiteFilterSet(FilterSet): """Filter company sites by code, name, city, street, postal code, or country."""
[docs] class Meta: model = CompanySite fields = { "code": ["istartswith"], "name": ["icontains"], "city": ["icontains"], "street": ["icontains"], "postal_code": ["istartswith"], "country": ["exact"], }
[docs] class IDSequenceFilter(FilterSet): """Filter ID sequence configurations by name or prefix."""
[docs] class Meta: model = IdSequenceConfig fields = [ "name", "prefix", ]
[docs] class MaterialFilterSet(FilterSet): """Filter materials by code prefix or name substring."""
[docs] class Meta: model = Material fields = { "code": ["istartswith"], "name": ["icontains"], }
[docs] class OrganizationFilterSet(FilterSet): """Filter organisations by name, contact email, or contact name."""
[docs] class Meta: model = Organization fields = { "name": ["istartswith"], "contact_email": ["icontains"], "contact_first_name": ["icontains"], "contact_last_name": ["icontains"], }
[docs] class StoredFileFilterSet(FilterSet): """Filter stored files by name substring."""
[docs] class Meta: model = StoredFile fields = { "name": ["icontains"], }
[docs] class SubscriptionPlanFilterSet(FilterSet): """Filter subscription plans by name or maximum tonnage range."""
[docs] class Meta: model = SubscriptionPlan fields = [ "name", "max_tonnage", ]
max_tonnage = RangeFilter()
[docs] class UserFilterSet(FilterSet): """Filter users by username, email address, or organisation."""
[docs] class Meta: model = User fields = [ "username", "email", "organization", ]