import unittest import frappe from frappe.utils import add_days, getdate from erpnext.hr.doctype.employee.test_employee import make_employee from erpnext.hr.doctype.exit_interview.test_exit_interview import create_exit_interview from erpnext.hr.doctype.full_and_final_statement.test_full_and_final_statement import ( create_full_and_final_statement, ) from erpnext.hr.report.employee_exits.employee_exits import execute class TestEmployeeExits(unittest.TestCase): @classmethod def setUpClass(cls): create_company() frappe.db.sql("delete from `tabEmployee` where company='Test Company'") frappe.db.sql("delete from `tabFull and Final Statement` where company='Test Company'") frappe.db.sql("delete from `tabExit Interview` where company='Test Company'") cls.create_records() @classmethod def tearDownClass(cls): frappe.db.rollback() @classmethod def create_records(cls): cls.emp1 = make_employee( "employeeexit1@example.com", company="Test Company", date_of_joining=getdate("01-10-2021"), relieving_date=add_days(getdate(), 14), designation="Accountant", ) cls.emp2 = make_employee( "employeeexit2@example.com", company="Test Company", date_of_joining=getdate("01-12-2021"), relieving_date=add_days(getdate(), 15), designation="Accountant", ) cls.emp3 = make_employee( "employeeexit3@example.com", company="Test Company", date_of_joining=getdate("02-12-2021"), relieving_date=add_days(getdate(), 29), designation="Engineer", ) cls.emp4 = make_employee( "employeeexit4@example.com", company="Test Company", date_of_joining=getdate("01-12-2021"), relieving_date=add_days(getdate(), 30), designation="Engineer", ) # exit interview for 3 employees only cls.interview1 = create_exit_interview(cls.emp1) cls.interview2 = create_exit_interview(cls.emp2) cls.interview3 = create_exit_interview(cls.emp3) # create fnf for some records cls.fnf1 = create_full_and_final_statement(cls.emp1) cls.fnf2 = create_full_and_final_statement(cls.emp2) # link questionnaire for a few records # setting employee doctype as reference instead of creating a questionnaire # since this is just for a test frappe.db.set_value( "Exit Interview", cls.interview1.name, {"ref_doctype": "Employee", "reference_document_name": cls.emp1}, ) frappe.db.set_value( "Exit Interview", cls.interview2.name, {"ref_doctype": "Employee", "reference_document_name": cls.emp2}, ) frappe.db.set_value( "Exit Interview", cls.interview3.name, {"ref_doctype": "Employee", "reference_document_name": cls.emp3}, ) def test_employee_exits_summary(self): filters = { "company": "Test Company", "from_date": getdate(), "to_date": add_days(getdate(), 15), "designation": "Accountant", } report = execute(filters) employee1 = frappe.get_doc("Employee", self.emp1) employee2 = frappe.get_doc("Employee", self.emp2) expected_data = [ { "employee": employee1.name, "employee_name": employee1.employee_name, "date_of_joining": employee1.date_of_joining, "relieving_date": employee1.relieving_date, "department": employee1.department, "designation": employee1.designation, "reports_to": None, "exit_interview": self.interview1.name, "interview_status": self.interview1.status, "employee_status": "", "questionnaire": employee1.name, "full_and_final_statement": self.fnf1.name, }, { "employee": employee2.name, "employee_name": employee2.employee_name, "date_of_joining": employee2.date_of_joining, "relieving_date": employee2.relieving_date, "department": employee2.department, "designation": employee2.designation, "reports_to": None, "exit_interview": self.interview2.name, "interview_status": self.interview2.status, "employee_status": "", "questionnaire": employee2.name, "full_and_final_statement": self.fnf2.name, }, ] self.assertEqual(expected_data, report[1]) # rows def test_pending_exit_interviews_summary(self): filters = { "company": "Test Company", "from_date": getdate(), "to_date": add_days(getdate(), 30), "exit_interview_pending": 1, } report = execute(filters) employee4 = frappe.get_doc("Employee", self.emp4) expected_data = [ { "employee": employee4.name, "employee_name": employee4.employee_name, "date_of_joining": employee4.date_of_joining, "relieving_date": employee4.relieving_date, "department": employee4.department, "designation": employee4.designation, "reports_to": None, "exit_interview": None, "interview_status": None, "employee_status": None, "questionnaire": None, "full_and_final_statement": None, } ] self.assertEqual(expected_data, report[1]) # rows def test_pending_exit_questionnaire_summary(self): filters = { "company": "Test Company", "from_date": getdate(), "to_date": add_days(getdate(), 30), "questionnaire_pending": 1, } report = execute(filters) employee4 = frappe.get_doc("Employee", self.emp4) expected_data = [ { "employee": employee4.name, "employee_name": employee4.employee_name, "date_of_joining": employee4.date_of_joining, "relieving_date": employee4.relieving_date, "department": employee4.department, "designation": employee4.designation, "reports_to": None, "exit_interview": None, "interview_status": None, "employee_status": None, "questionnaire": None, "full_and_final_statement": None, } ] self.assertEqual(expected_data, report[1]) # rows def test_pending_fnf_summary(self): filters = {"company": "Test Company", "fnf_pending": 1} report = execute(filters) employee3 = frappe.get_doc("Employee", self.emp3) employee4 = frappe.get_doc("Employee", self.emp4) expected_data = [ { "employee": employee3.name, "employee_name": employee3.employee_name, "date_of_joining": employee3.date_of_joining, "relieving_date": employee3.relieving_date, "department": employee3.department, "designation": employee3.designation, "reports_to": None, "exit_interview": self.interview3.name, "interview_status": self.interview3.status, "employee_status": "", "questionnaire": employee3.name, "full_and_final_statement": None, }, { "employee": employee4.name, "employee_name": employee4.employee_name, "date_of_joining": employee4.date_of_joining, "relieving_date": employee4.relieving_date, "department": employee4.department, "designation": employee4.designation, "reports_to": None, "exit_interview": None, "interview_status": None, "employee_status": None, "questionnaire": None, "full_and_final_statement": None, }, ] self.assertEqual(expected_data, report[1]) # rows def create_company(): if not frappe.db.exists("Company", "Test Company"): frappe.get_doc( { "doctype": "Company", "company_name": "Test Company", "default_currency": "INR", "country": "India", } ).insert()