diff --git a/hrms/www/jobs/index.html b/hrms/www/jobs/index.html
index a1340ce3e8..230cec132a 100644
--- a/hrms/www/jobs/index.html
+++ b/hrms/www/jobs/index.html
@@ -11,10 +11,14 @@
-
{{ name }}
+
{{ name.title() | replace('_', ' ') }}
{% for value in values %}
-
+
{% endfor %}
diff --git a/hrms/www/jobs/index.js b/hrms/www/jobs/index.js
index e69de29bb2..e4f6d9850e 100644
--- a/hrms/www/jobs/index.js
+++ b/hrms/www/jobs/index.js
@@ -0,0 +1,14 @@
+$(() => {
+ const query_params = frappe.utils.get_query_params();
+ for (const filter in query_params) {
+ if (typeof query_params[filter] === "string") {
+ $("#" + query_params[filter]).prop("checked", true);
+ } else {
+ for (const d of query_params[filter]) $("#" + d).prop("checked", true);
+ }
+ }
+ $("input:checkbox").change(function () {
+ const filters = $("input:checked").serialize();
+ window.location.href = "/jobs?" + filters;
+ });
+});
diff --git a/hrms/www/jobs/index.py b/hrms/www/jobs/index.py
index dcd5fe23f5..8ed3905b59 100644
--- a/hrms/www/jobs/index.py
+++ b/hrms/www/jobs/index.py
@@ -5,11 +5,15 @@
def get_context(context):
context.parents = [{"name": _("My Account"), "route": "/"}]
- context.job_openings = get_job_openings()
- context.filters = get_filters(context.job_openings)
+ applied_filters = frappe.request.args.to_dict(flat=False)
+ context.job_openings = get_job_openings(applied_filters)
+ context.filters = get_all_filters(applied_filters)
-def get_job_openings(txt=None, filters=None, limit_start=0, limit_page_length=20, order_by=None):
+def get_job_openings(
+ applied_filters=None, txt=None, limit_start=0, limit_page_length=20, order_by=None
+):
+
jo = frappe.qb.DocType("Job Opening")
ja = frappe.qb.DocType("Job Applicant")
@@ -40,55 +44,35 @@ def get_job_openings(txt=None, filters=None, limit_start=0, limit_page_length=20
.groupby(jo.name)
)
- return query.run(as_dict=True)
+ for d in applied_filters:
+ query = query.where(frappe.qb.Field(d).isin(applied_filters[d]))
- # for filter in filters:
- # if filter == "from_date":
- # query = query.where(attendance.attendance_date >= filters.from_date)
- # elif filter == "to_date":
- # query = query.where(attendance.attendance_date <= filters.to_date)
- # elif filter == "consider_grace_period":
- # continue
- # elif filter == "late_entry" and not filters.consider_grace_period:
- # query = query.where(attendance.in_time > checkin.shift_start)
- # elif filter == "early_exit" and not filters.consider_grace_period:
- # query = query.where(attendance.out_time < checkin.shift_end)
- # else:
- # query = query.where(attendance[filter] == filters[filter])
+ return query.run(as_dict=True)
# if txt:
# filters.update(
# {"job_title": ["like", "%{0}%".format(txt)], "description": ["like", "%{0}%".format(txt)]}
# )
- # return frappe.get_all(
- # "Job Opening",
- # filters,
- # fields,
- # start=limit_start,
- # page_length=limit_page_length,
- # order_by=order_by,
- # )
+def get_all_filters(applied_filters=None):
+ job_openings = frappe.get_all(
+ "Job Opening",
+ fields=["company", "department", "location", "employment_type"],
+ )
-def get_filters(job_openings):
- companies, departments, locations, employment_types = ([] for _ in range(4))
+ companies = applied_filters["company"] if "company" in applied_filters else None
+
+ filters = {}
for d in job_openings:
- if d.company not in companies:
- companies.append(d.company)
- if d.department and d.department not in departments:
- departments.append(d.department)
- if d.location and d.location not in locations:
- locations.append(d.location)
- if d.employment_type and d.employment_type not in employment_types:
- employment_types.append(d.employment_type)
- companies.sort()
- departments.sort()
- locations.sort()
- employment_types.sort()
- return {
- "Company": companies,
- "Department": departments,
- "Location": locations,
- "Employment Type": employment_types,
- }
+ for key, value in d.items():
+ if key == "company" or not companies or (companies and d["company"] in companies):
+ if key not in filters:
+ filters[key] = [value]
+ elif value and value not in filters[key]:
+ filters[key].append(value)
+
+ for d in filters:
+ filters[d].sort()
+
+ return filters