Add sorting functionality to normal cases list with user-selected options
This commit is contained in:
+35
-1
@@ -386,13 +386,47 @@ class NormalCaseList(LoginRequiredMixin, FilterView):
|
||||
filterset_class = NormalCaseFilter
|
||||
paginate_by = 25
|
||||
|
||||
SORT_CHOICES = {
|
||||
"newest": "-added_date",
|
||||
"oldest": "added_date",
|
||||
"age_asc": "age_days",
|
||||
"age_desc": "-age_days",
|
||||
"title_asc": "case__title",
|
||||
"title_desc": "-case__title",
|
||||
}
|
||||
|
||||
def get_selected_sort(self):
|
||||
sort_key = self.request.GET.get("sort", "newest")
|
||||
if sort_key not in self.SORT_CHOICES:
|
||||
return "newest"
|
||||
return sort_key
|
||||
|
||||
def get_queryset(self):
|
||||
qs = NormalCase.objects.select_related("case", "examination", "modality")
|
||||
# Restrict similar to CaseFilter: non-editors only see authored or open_access
|
||||
if not self.request.user.groups.filter(name="atlas_editor").exists():
|
||||
qs = qs.filter((Q(case__author__id=self.request.user.id) | Q(case__open_access=True)))
|
||||
|
||||
return qs.order_by("-added_date")
|
||||
order_by = self.SORT_CHOICES[self.get_selected_sort()]
|
||||
return qs.order_by(order_by)
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
context["selected_sort"] = self.get_selected_sort()
|
||||
context["sort_choices"] = [
|
||||
("newest", "Newest added"),
|
||||
("oldest", "Oldest added"),
|
||||
("age_asc", "Age (youngest first)"),
|
||||
("age_desc", "Age (oldest first)"),
|
||||
("title_asc", "Title (A–Z)"),
|
||||
("title_desc", "Title (Z–A)"),
|
||||
]
|
||||
|
||||
params = self.request.GET.copy()
|
||||
if "page" in params:
|
||||
params.pop("page")
|
||||
context["querystring_without_page"] = params.urlencode()
|
||||
return context
|
||||
|
||||
@login_required
|
||||
@user_has_case_view_access
|
||||
|
||||
Reference in New Issue
Block a user