mirror of
https://github.com/cisagov/manage.get.gov.git
synced 2025-05-29 08:50:01 +02:00
sorting in domain growth report
This commit is contained in:
parent
38125ea97f
commit
59e912b69a
1 changed files with 25 additions and 3 deletions
|
@ -12,6 +12,7 @@ from registrar.models import (
|
||||||
UserDomainRole,
|
UserDomainRole,
|
||||||
)
|
)
|
||||||
from django.db.models import QuerySet, Value, CharField, Count, Q, F
|
from django.db.models import QuerySet, Value, CharField, Count, Q, F
|
||||||
|
from django.db.models import Case, When, DateField
|
||||||
from django.db.models import ManyToManyField
|
from django.db.models import ManyToManyField
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django.core.paginator import Paginator
|
from django.core.paginator import Paginator
|
||||||
|
@ -119,6 +120,13 @@ class BaseExport(ABC):
|
||||||
"""
|
"""
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_annotations_for_sort(cls):
|
||||||
|
"""
|
||||||
|
Get a dict of annotations to make available for order_by clause.
|
||||||
|
"""
|
||||||
|
return {}
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_related_table_fields(cls):
|
def get_related_table_fields(cls):
|
||||||
"""
|
"""
|
||||||
|
@ -193,6 +201,7 @@ class BaseExport(ABC):
|
||||||
select_related = cls.get_select_related()
|
select_related = cls.get_select_related()
|
||||||
prefetch_related = cls.get_prefetch_related()
|
prefetch_related = cls.get_prefetch_related()
|
||||||
exclusions = cls.get_exclusions()
|
exclusions = cls.get_exclusions()
|
||||||
|
annotations_for_sort = cls.get_annotations_for_sort()
|
||||||
filter_conditions = cls.get_filter_conditions(start_date, end_date)
|
filter_conditions = cls.get_filter_conditions(start_date, end_date)
|
||||||
computed_fields = cls.get_computed_fields()
|
computed_fields = cls.get_computed_fields()
|
||||||
related_table_fields = cls.get_related_table_fields()
|
related_table_fields = cls.get_related_table_fields()
|
||||||
|
@ -202,6 +211,7 @@ class BaseExport(ABC):
|
||||||
.prefetch_related(*prefetch_related)
|
.prefetch_related(*prefetch_related)
|
||||||
.filter(filter_conditions)
|
.filter(filter_conditions)
|
||||||
.exclude(exclusions)
|
.exclude(exclusions)
|
||||||
|
.annotate(**annotations_for_sort)
|
||||||
.order_by(*sort_fields)
|
.order_by(*sort_fields)
|
||||||
.distinct()
|
.distinct()
|
||||||
)
|
)
|
||||||
|
@ -742,7 +752,20 @@ class DomainGrowth(DomainExport):
|
||||||
"Deleted",
|
"Deleted",
|
||||||
]
|
]
|
||||||
|
|
||||||
# TODO: The below sort is not working properly
|
@classmethod
|
||||||
|
def get_annotations_for_sort(cls, delimiter=", "):
|
||||||
|
"""
|
||||||
|
Get a dict of annotations to make available for sorting.
|
||||||
|
"""
|
||||||
|
today = timezone.now().date()
|
||||||
|
return {
|
||||||
|
"custom_sort": Case(
|
||||||
|
When(domain__state=Domain.State.READY, then='domain__first_ready'),
|
||||||
|
When(domain__state=Domain.State.DELETED, then='domain__deleted'),
|
||||||
|
default=Value(today), # Default value if no conditions match
|
||||||
|
output_field=DateField()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_sort_fields(cls):
|
def get_sort_fields(cls):
|
||||||
|
@ -751,8 +774,7 @@ class DomainGrowth(DomainExport):
|
||||||
"""
|
"""
|
||||||
return [
|
return [
|
||||||
'-domain__state',
|
'-domain__state',
|
||||||
'domain__first_ready',
|
'custom_sort',
|
||||||
'domain__deleted',
|
|
||||||
'domain__name',
|
'domain__name',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue