diff --git a/core/__pycache__/views.cpython-311.pyc b/core/__pycache__/views.cpython-311.pyc index 09ca623..5a85e4b 100644 Binary files a/core/__pycache__/views.cpython-311.pyc and b/core/__pycache__/views.cpython-311.pyc differ diff --git a/core/templates/core/job_list.html b/core/templates/core/job_list.html index 9327b35..e8fdeda 100644 --- a/core/templates/core/job_list.html +++ b/core/templates/core/job_list.html @@ -41,6 +41,15 @@ {% for value,label in source_status_choices %}{% endfor %} +
+ + +
diff --git a/core/templates/core/ops_dashboard.html b/core/templates/core/ops_dashboard.html index 84d8c4d..216bb49 100644 --- a/core/templates/core/ops_dashboard.html +++ b/core/templates/core/ops_dashboard.html @@ -41,6 +41,17 @@ {% for value,label in status_choices %}{% endfor %} +
+ + +
diff --git a/core/views.py b/core/views.py index 733eebb..b2fed62 100644 --- a/core/views.py +++ b/core/views.py @@ -96,6 +96,15 @@ def job_list(request): contract = request.GET.get("contract", "").strip() family = request.GET.get("family", "").strip() source_status = request.GET.get("source_status", "").strip() + sort = request.GET.get("sort", "newest").strip() + + job_sort_map = { + "newest": "-created_at", + "oldest": "created_at", + "company_az": "company", + "company_za": "-company", + } + order_by = job_sort_map.get(sort, "-created_at") jobs_qs = JobPosting.objects.select_related("source").filter(is_active=True) if query: @@ -111,6 +120,7 @@ def job_list(request): jobs_qs = jobs_qs.filter(source__family=family) if source_status: jobs_qs = jobs_qs.filter(source__status=source_status) + jobs_qs = jobs_qs.order_by(order_by) paginator = Paginator(jobs_qs, 9) page_number = request.GET.get("page") @@ -127,6 +137,7 @@ def job_list(request): "contract": contract, "family": family, "source_status": source_status, + "sort": sort, "contract_choices": JobPosting.ContractType.choices, "family_choices": JobSource.Family.choices, "source_status_choices": JobSource.Status.choices, @@ -153,8 +164,19 @@ def ops_dashboard(request): query = request.GET.get("q", "").strip() family = request.GET.get("family", "").strip() status = request.GET.get("status", "").strip() + sort = request.GET.get("sort", "family_name").strip() - sources_qs = JobSource.objects.annotate(job_total=Count("jobs")).order_by("family", "name") + source_sort_map = { + "family_name": ("family", "name"), + "name_az": ("name",), + "name_za": ("-name",), + "status": ("status", "name"), + "offers_high": ("-job_total", "name"), + "offers_low": ("job_total", "name"), + } + source_order_by = source_sort_map.get(sort, ("family", "name")) + + sources_qs = JobSource.objects.annotate(job_total=Count("jobs")).order_by(*source_order_by) if query: sources_qs = sources_qs.filter(Q(name__icontains=query) | Q(owner__icontains=query) | Q(url__icontains=query)) if family: @@ -205,6 +227,7 @@ def ops_dashboard(request): "query": query, "family": family, "status": status, + "sort": sort, "family_choices": JobSource.Family.choices, "status_choices": JobSource.Status.choices, "current_filters_qs": current_filters_qs,