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,