fix: filters not working in Shift Assignment Calendar view (#30822)
This commit is contained in:
@@ -84,7 +84,7 @@ class ShiftAssignment(Document):
|
|||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def get_events(start, end, filters=None):
|
def get_events(start, end, filters=None):
|
||||||
events = []
|
from frappe.desk.calendar import get_event_conditions
|
||||||
|
|
||||||
employee = frappe.db.get_value(
|
employee = frappe.db.get_value(
|
||||||
"Employee", {"user_id": frappe.session.user}, ["name", "company"], as_dict=True
|
"Employee", {"user_id": frappe.session.user}, ["name", "company"], as_dict=True
|
||||||
@@ -95,20 +95,22 @@ def get_events(start, end, filters=None):
|
|||||||
employee = ""
|
employee = ""
|
||||||
company = frappe.db.get_value("Global Defaults", None, "default_company")
|
company = frappe.db.get_value("Global Defaults", None, "default_company")
|
||||||
|
|
||||||
from frappe.desk.reportview import get_filters_cond
|
conditions = get_event_conditions("Shift Assignment", filters)
|
||||||
|
events = add_assignments(start, end, conditions=conditions)
|
||||||
conditions = get_filters_cond("Shift Assignment", filters, [])
|
|
||||||
add_assignments(events, start, end, conditions=conditions)
|
|
||||||
return events
|
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,
|
query = """select name, start_date, end_date, employee_name,
|
||||||
employee, docstatus, shift_type
|
employee, docstatus, shift_type
|
||||||
from `tabShift Assignment` where
|
from `tabShift Assignment` where
|
||||||
start_date >= %(start_date)s
|
(
|
||||||
or end_date <= %(end_date)s
|
start_date >= %(start_date)s
|
||||||
or (%(start_date)s between start_date and end_date and %(end_date)s between start_date and end_date)
|
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"""
|
and docstatus = 1"""
|
||||||
if conditions:
|
if conditions:
|
||||||
query += conditions
|
query += conditions
|
||||||
|
|||||||
@@ -4,14 +4,22 @@
|
|||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
import frappe
|
import frappe
|
||||||
|
from frappe.tests.utils import FrappeTestCase
|
||||||
from frappe.utils import add_days, nowdate
|
from frappe.utils import add_days, nowdate
|
||||||
|
|
||||||
|
from erpnext.hr.doctype.employee.test_employee import make_employee
|
||||||
|
from erpnext.hr.doctype.shift_assignment.shift_assignment import get_events
|
||||||
|
|
||||||
test_dependencies = ["Shift Type"]
|
test_dependencies = ["Shift Type"]
|
||||||
|
|
||||||
|
|
||||||
class TestShiftAssignment(unittest.TestCase):
|
class TestShiftAssignment(FrappeTestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
frappe.db.sql("delete from `tabShift Assignment`")
|
frappe.db.delete("Shift Assignment")
|
||||||
|
if not frappe.db.exists("Shift Type", "Day Shift"):
|
||||||
|
frappe.get_doc(
|
||||||
|
{"doctype": "Shift Type", "name": "Day Shift", "start_time": "9:00:00", "end_time": "18:00:00"}
|
||||||
|
).insert()
|
||||||
|
|
||||||
def test_make_shift_assignment(self):
|
def test_make_shift_assignment(self):
|
||||||
shift_assignment = frappe.get_doc(
|
shift_assignment = frappe.get_doc(
|
||||||
@@ -86,3 +94,36 @@ class TestShiftAssignment(unittest.TestCase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
self.assertRaises(frappe.ValidationError, shift_assignment_3.save)
|
self.assertRaises(frappe.ValidationError, shift_assignment_3.save)
|
||||||
|
|
||||||
|
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")
|
||||||
|
date = nowdate()
|
||||||
|
|
||||||
|
shift_1 = frappe.get_doc(
|
||||||
|
{
|
||||||
|
"doctype": "Shift Assignment",
|
||||||
|
"shift_type": "Day Shift",
|
||||||
|
"company": "_Test Company",
|
||||||
|
"employee": employee1,
|
||||||
|
"start_date": date,
|
||||||
|
"status": "Active",
|
||||||
|
}
|
||||||
|
).submit()
|
||||||
|
|
||||||
|
frappe.get_doc(
|
||||||
|
{
|
||||||
|
"doctype": "Shift Assignment",
|
||||||
|
"shift_type": "Day Shift",
|
||||||
|
"company": "_Test Company",
|
||||||
|
"employee": employee2,
|
||||||
|
"start_date": date,
|
||||||
|
"status": "Active",
|
||||||
|
}
|
||||||
|
).submit()
|
||||||
|
|
||||||
|
events = get_events(
|
||||||
|
start=date, end=date, filters=[["Shift Assignment", "employee", "=", employee1, False]]
|
||||||
|
)
|
||||||
|
self.assertEqual(len(events), 1)
|
||||||
|
self.assertEqual(events[0]["name"], shift_1.name)
|
||||||
|
|||||||
Reference in New Issue
Block a user