[Tests] Shift Planning (#14570)
* Cancel shift assignment on cancellation of shift request
* [minor] Fix shift type test
* Modify test for shift request
* Add test case for shift assignment
* Fix syntax
* Fix codacy
diff --git a/erpnext/hr/doctype/shift_assignment/shift_assignment.py b/erpnext/hr/doctype/shift_assignment/shift_assignment.py
index fbbfe31..ace9cb8 100644
--- a/erpnext/hr/doctype/shift_assignment/shift_assignment.py
+++ b/erpnext/hr/doctype/shift_assignment/shift_assignment.py
@@ -12,7 +12,7 @@
class ShiftAssignment(Document):
def validate(self):
- self.validate_overlapping_dates();
+ self.validate_overlapping_dates()
def validate_overlapping_dates(self):
if not self.name:
diff --git a/erpnext/hr/doctype/shift_assignment/test_shift_assignment.py b/erpnext/hr/doctype/shift_assignment/test_shift_assignment.py
index eb51adb..7fe80a2 100644
--- a/erpnext/hr/doctype/shift_assignment/test_shift_assignment.py
+++ b/erpnext/hr/doctype/shift_assignment/test_shift_assignment.py
@@ -5,6 +5,23 @@
import frappe
import unittest
+from frappe.utils import nowdate
+
+test_dependencies = ["Shift Type"]
class TestShiftAssignment(unittest.TestCase):
- pass
+
+ def setUp(self):
+ frappe.db.sql("delete from `tabShift Assignment`")
+
+ def test_make_shift_assignment(self):
+ shift_assignment = frappe.get_doc({
+ "doctype": "Shift Assignment",
+ "shift_type": "Day Shift",
+ "company": "_Test Company",
+ "employee": "_T-Employee-00001",
+ "date": nowdate()
+ }).insert()
+ shift_assignment.submit()
+
+ self.assertEqual(shift_assignment.docstatus, 1)
diff --git a/erpnext/hr/doctype/shift_request/shift_request.py b/erpnext/hr/doctype/shift_request/shift_request.py
index 7057d20..ff5de08 100644
--- a/erpnext/hr/doctype/shift_request/shift_request.py
+++ b/erpnext/hr/doctype/shift_request/shift_request.py
@@ -12,8 +12,8 @@
class ShiftRequest(Document):
def validate(self):
- self.validate_dates();
- self.validate_shift_request_overlap_dates();
+ self.validate_dates()
+ self.validate_shift_request_overlap_dates()
def on_submit(self):
date_list = self.get_working_days(self.from_date, self.to_date)
@@ -27,6 +27,14 @@
assignment_doc.insert()
assignment_doc.submit()
+ def on_cancel(self):
+ shift_assignment_list = frappe.get_list("Shift Assignment", {'employee': self.employee, 'shift_request': self.name})
+ if shift_assignment_list:
+ for shift in shift_assignment_list:
+ shift_assignment_doc = frappe.get_doc("Shift Assignment", shift['name'])
+ shift_assignment_doc.cancel()
+
+
def validate_dates(self):
if self.from_date and self.to_date and (getdate(self.to_date) < getdate(self.from_date)):
frappe.throw(_("To date cannot be before from date"))
diff --git a/erpnext/hr/doctype/shift_request/test_shift_request.py b/erpnext/hr/doctype/shift_request/test_shift_request.py
index d32443a..1d0cf71 100644
--- a/erpnext/hr/doctype/shift_request/test_shift_request.py
+++ b/erpnext/hr/doctype/shift_request/test_shift_request.py
@@ -8,6 +8,10 @@
from frappe.utils import nowdate
class TestShiftRequest(unittest.TestCase):
+ def setUp(self):
+ for doctype in ["Shift Request", "Shift Assignment"]:
+ frappe.db.sql("delete from `tab{doctype}`".format(doctype=doctype))
+
def test_make_shift_request(self):
shift_request = frappe.get_doc({
"doctype": "Shift Request",
@@ -20,9 +24,14 @@
})
shift_request.insert()
shift_request.submit()
- shift_assignment = frappe.db.sql("""select employee
- from `tabShift Assignment`
- where shift_request = %s""", shift_request.name)
- if shift_assignment:
- employee = shift_assignment[0][0]
- self.assertEqual(shift_request.employee, employee)
\ No newline at end of file
+ shift_assignments = frappe.db.sql('''
+ SELECT shift_request, employee
+ FROM `tabShift Assignment`
+ WHERE shift_request = '{0}'
+ '''.format(shift_request.name), as_dict=1)
+ for d in shift_assignments:
+ employee = d.get('employee')
+ self.assertEqual(shift_request.employee, employee)
+ shift_request.cancel()
+ shift_assignment_doc = frappe.get_doc("Shift Assignment", {"shift_request": d.get('shift_request')})
+ self.assertEqual(shift_assignment_doc.docstatus, 2)
\ No newline at end of file
diff --git a/erpnext/hr/doctype/shift_type/test_shift_type.py b/erpnext/hr/doctype/shift_type/test_shift_type.py
index d5afdf5..535072a 100644
--- a/erpnext/hr/doctype/shift_type/test_shift_type.py
+++ b/erpnext/hr/doctype/shift_type/test_shift_type.py
@@ -8,6 +8,8 @@
class TestShiftType(unittest.TestCase):
def test_make_shift_type(self):
+ if frappe.db.exists("Shift Type", "Day Shift"):
+ return
shift_type = frappe.get_doc({
"doctype": "Shift Type",
"name": "Day Shift",
@@ -15,3 +17,4 @@
"end_time": "18:00:00"
})
shift_type.insert()
+
\ No newline at end of file