mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-24 07:29:22 +00:00
test: Employee Exits Report
This commit is contained in:
@@ -105,8 +105,9 @@ def get_data(filters):
|
|||||||
employee.department.as_('department'), employee.designation.as_('designation'),
|
employee.department.as_('department'), employee.designation.as_('designation'),
|
||||||
employee.reports_to.as_('reports_to'), interview.name.as_('exit_interview'),
|
employee.reports_to.as_('reports_to'), interview.name.as_('exit_interview'),
|
||||||
interview.status.as_('interview_status'), interview.employee_status.as_('employee_status'),
|
interview.status.as_('interview_status'), interview.employee_status.as_('employee_status'),
|
||||||
interview.reference_document_name.as_('questionnaire'), fnf.name.as_('full_and_final_statement')
|
interview.reference_document_name.as_('questionnaire'), fnf.name.as_('full_and_final_statement'))
|
||||||
).distinct()
|
.distinct()
|
||||||
|
.orderby(employee.relieving_date)
|
||||||
.where(
|
.where(
|
||||||
((employee.relieving_date.isnotnull()) | (employee.relieving_date != ''))
|
((employee.relieving_date.isnotnull()) | (employee.relieving_date != ''))
|
||||||
& ((interview.name.isnull()) | ((interview.name.isnotnull()) & (interview.docstatus != 2)))
|
& ((interview.name.isnull()) | ((interview.name.isnotnull()) & (interview.docstatus != 2)))
|
||||||
@@ -158,7 +159,7 @@ def get_conditions(filters, query, employee, interview, fnf):
|
|||||||
query = query.where((interview.reference_document_name == '') | (interview.reference_document_name.isnull()))
|
query = query.where((interview.reference_document_name == '') | (interview.reference_document_name.isnull()))
|
||||||
|
|
||||||
if filters.get('fnf_pending'):
|
if filters.get('fnf_pending'):
|
||||||
query = query.where((fnf.name == '') | (interview.name.isnull()))
|
query = query.where((fnf.name == '') | (fnf.name.isnull()))
|
||||||
|
|
||||||
return query
|
return query
|
||||||
|
|
||||||
|
|||||||
221
erpnext/hr/report/employee_exits/test_employee_exits.py
Normal file
221
erpnext/hr/report/employee_exits/test_employee_exits.py
Normal file
@@ -0,0 +1,221 @@
|
|||||||
|
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):
|
||||||
|
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
|
||||||
Reference in New Issue
Block a user