fix: filters not working in Shift Assignment Calendar view (#30752)
diff --git a/erpnext/hr/doctype/shift_assignment/shift_assignment.py b/erpnext/hr/doctype/shift_assignment/shift_assignment.py
index cbf798e..51298de 100644
--- a/erpnext/hr/doctype/shift_assignment/shift_assignment.py
+++ b/erpnext/hr/doctype/shift_assignment/shift_assignment.py
@@ -121,7 +121,7 @@
@frappe.whitelist()
def get_events(start, end, filters=None):
- events = []
+ from frappe.desk.calendar import get_event_conditions
employee = frappe.db.get_value(
"Employee", {"user_id": frappe.session.user}, ["name", "company"], as_dict=True
@@ -132,20 +132,22 @@
employee = ""
company = frappe.db.get_value("Global Defaults", None, "default_company")
- from frappe.desk.reportview import get_filters_cond
-
- conditions = get_filters_cond("Shift Assignment", filters, [])
- add_assignments(events, start, end, conditions=conditions)
+ conditions = get_event_conditions("Shift Assignment", filters)
+ events = add_assignments(start, end, conditions=conditions)
return events
-def add_assignments(events, start, end, conditions=None):
+def add_assignments(start, end, conditions=None):
+ events = []
+
query = """select name, start_date, end_date, employee_name,
employee, docstatus, shift_type
from `tabShift Assignment` where
- start_date >= %(start_date)s
- or end_date <= %(end_date)s
- or (%(start_date)s between start_date and end_date and %(end_date)s between start_date and end_date)
+ (
+ start_date >= %(start_date)s
+ or end_date <= %(end_date)s
+ or (%(start_date)s between start_date and end_date and %(end_date)s between start_date and end_date)
+ )
and docstatus = 1"""
if conditions:
query += conditions
diff --git a/erpnext/hr/doctype/shift_assignment/test_shift_assignment.py b/erpnext/hr/doctype/shift_assignment/test_shift_assignment.py
index 0fe9108..de82a24 100644
--- a/erpnext/hr/doctype/shift_assignment/test_shift_assignment.py
+++ b/erpnext/hr/doctype/shift_assignment/test_shift_assignment.py
@@ -8,7 +8,7 @@
from frappe.utils import add_days, getdate, nowdate
from erpnext.hr.doctype.employee.test_employee import make_employee
-from erpnext.hr.doctype.shift_assignment.shift_assignment import OverlappingShiftError
+from erpnext.hr.doctype.shift_assignment.shift_assignment import OverlappingShiftError, get_events
from erpnext.hr.doctype.shift_type.test_shift_type import make_shift_assignment, setup_shift_type
test_dependencies = ["Shift Type"]
@@ -154,3 +154,18 @@
shift_type = setup_shift_type(shift_type="Shift 2", start_time="13:00:00", end_time="15:00:00")
date = getdate()
make_shift_assignment(shift_type.name, employee, date)
+
+ def test_shift_assignment_calendar(self):
+ employee1 = make_employee("test_shift_assignment1@example.com", company="_Test Company")
+ employee2 = make_employee("test_shift_assignment2@example.com", company="_Test Company")
+
+ shift_type = setup_shift_type(shift_type="Shift 1", start_time="08:00:00", end_time="12:00:00")
+ date = getdate()
+ shift1 = make_shift_assignment(shift_type.name, employee1, date)
+ make_shift_assignment(shift_type.name, employee2, date)
+
+ events = get_events(
+ start=date, end=date, filters=[["Shift Assignment", "employee", "=", employee1, False]]
+ )
+ self.assertEqual(len(events), 1)
+ self.assertEqual(events[0]["name"], shift1.name)