diff --git a/erpnext/hr/README.md b/erpnext/hr/README.md
deleted file mode 100644
index 5d1ae6e..0000000
--- a/erpnext/hr/README.md
+++ /dev/null
@@ -1,6 +0,0 @@
-Key features:
-
-- Leave and Attendance
-- Payroll
-- Appraisal
-- Expense Claim
\ No newline at end of file
diff --git a/erpnext/hr/__init__.py b/erpnext/hr/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/dashboard_chart/attendance_count/attendance_count.json b/erpnext/hr/dashboard_chart/attendance_count/attendance_count.json
deleted file mode 100644
index 4666aec..0000000
--- a/erpnext/hr/dashboard_chart/attendance_count/attendance_count.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "chart_name": "Attendance Count",
- "chart_type": "Report",
- "creation": "2020-07-22 11:56:32.730068",
- "custom_options": "{\n\t\t\"type\": \"line\",\n\t\t\"axisOptions\": {\n\t\t\t\"shortenYAxisNumbers\": 1\n\t\t},\n\t\t\"tooltipOptions\": {}\n\t}",
- "docstatus": 0,
- "doctype": "Dashboard Chart",
- "dynamic_filters_json": "{\"month\":\"frappe.datetime.str_to_obj(frappe.datetime.get_today()).getMonth() + 1\",\"year\":\"frappe.datetime.str_to_obj(frappe.datetime.get_today()).getFullYear();\",\"company\":\"frappe.defaults.get_user_default(\\\"Company\\\")\"}",
- "filters_json": "{}",
- "group_by_type": "Count",
- "idx": 0,
- "is_public": 1,
- "is_standard": 1,
- "modified": "2020-07-22 14:32:40.334424",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Attendance Count",
- "number_of_groups": 0,
- "owner": "Administrator",
- "report_name": "Monthly Attendance Sheet",
- "time_interval": "Yearly",
- "timeseries": 0,
- "timespan": "Last Year",
- "type": "Line",
- "use_report_chart": 1,
- "y_axis": []
-}
\ No newline at end of file
diff --git a/erpnext/hr/dashboard_chart/department_wise_employee_count/department_wise_employee_count.json b/erpnext/hr/dashboard_chart/department_wise_employee_count/department_wise_employee_count.json
deleted file mode 100644
index c21bfb9..0000000
--- a/erpnext/hr/dashboard_chart/department_wise_employee_count/department_wise_employee_count.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "chart_name": "Department Wise Employee Count",
- "chart_type": "Group By",
- "creation": "2020-07-22 11:56:32.760730",
- "custom_options": "",
- "docstatus": 0,
- "doctype": "Dashboard Chart",
- "document_type": "Employee",
- "dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]",
- "filters_json": "[[\"Employee\",\"status\",\"=\",\"Active\",false]]",
- "group_by_based_on": "department",
- "group_by_type": "Count",
- "idx": 0,
- "is_public": 1,
- "is_standard": 1,
- "last_synced_on": "2020-07-22 14:27:40.574194",
- "modified": "2020-07-22 14:33:38.036794",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Department Wise Employee Count",
- "number_of_groups": 0,
- "owner": "Administrator",
- "time_interval": "Yearly",
- "timeseries": 0,
- "timespan": "Last Year",
- "type": "Donut",
- "use_report_chart": 0,
- "y_axis": []
-}
\ No newline at end of file
diff --git a/erpnext/hr/dashboard_chart/department_wise_openings/department_wise_openings.json b/erpnext/hr/dashboard_chart/department_wise_openings/department_wise_openings.json
deleted file mode 100644
index b1953d4..0000000
--- a/erpnext/hr/dashboard_chart/department_wise_openings/department_wise_openings.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "aggregate_function_based_on": "planned_vacancies",
- "chart_name": "Department Wise Openings",
- "chart_type": "Group By",
- "creation": "2020-07-22 11:56:32.849775",
- "custom_options": "",
- "docstatus": 0,
- "doctype": "Dashboard Chart",
- "document_type": "Job Opening",
- "filters_json": "[]",
- "group_by_based_on": "department",
- "group_by_type": "Sum",
- "idx": 0,
- "is_public": 1,
- "is_standard": 1,
- "last_synced_on": "2020-07-22 14:33:44.834801",
- "modified": "2020-07-22 14:34:45.273591",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Department Wise Openings",
- "number_of_groups": 0,
- "owner": "Administrator",
- "time_interval": "Monthly",
- "timeseries": 0,
- "timespan": "Last Year",
- "type": "Bar",
- "use_report_chart": 0,
- "y_axis": []
-}
\ No newline at end of file
diff --git a/erpnext/hr/dashboard_chart/designation_wise_employee_count/designation_wise_employee_count.json b/erpnext/hr/dashboard_chart/designation_wise_employee_count/designation_wise_employee_count.json
deleted file mode 100644
index b10235c..0000000
--- a/erpnext/hr/dashboard_chart/designation_wise_employee_count/designation_wise_employee_count.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "chart_name": "Designation Wise Employee Count",
- "chart_type": "Group By",
- "creation": "2020-07-22 11:56:32.790337",
- "custom_options": "",
- "docstatus": 0,
- "doctype": "Dashboard Chart",
- "document_type": "Employee",
- "dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]",
- "filters_json": "[[\"Employee\",\"status\",\"=\",\"Active\",false]]",
- "group_by_based_on": "designation",
- "group_by_type": "Count",
- "idx": 0,
- "is_public": 1,
- "is_standard": 1,
- "last_synced_on": "2020-07-22 14:27:40.602783",
- "modified": "2020-07-22 14:31:49.665555",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Designation Wise Employee Count",
- "number_of_groups": 0,
- "owner": "Administrator",
- "time_interval": "Yearly",
- "timeseries": 0,
- "timespan": "Last Year",
- "type": "Donut",
- "use_report_chart": 0,
- "y_axis": []
-}
\ No newline at end of file
diff --git a/erpnext/hr/dashboard_chart/designation_wise_openings/designation_wise_openings.json b/erpnext/hr/dashboard_chart/designation_wise_openings/designation_wise_openings.json
deleted file mode 100644
index 49ea98a..0000000
--- a/erpnext/hr/dashboard_chart/designation_wise_openings/designation_wise_openings.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "aggregate_function_based_on": "planned_vacancies",
- "chart_name": "Designation Wise Openings",
- "chart_type": "Group By",
- "creation": "2020-07-22 11:56:32.820217",
- "custom_options": "",
- "docstatus": 0,
- "doctype": "Dashboard Chart",
- "document_type": "Job Opening",
- "dynamic_filters_json": "",
- "filters_json": "[]",
- "group_by_based_on": "designation",
- "group_by_type": "Sum",
- "idx": 0,
- "is_public": 1,
- "is_standard": 1,
- "last_synced_on": "2020-07-22 14:33:44.806626",
- "modified": "2020-07-22 14:34:32.711881",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Designation Wise Openings",
- "number_of_groups": 0,
- "owner": "Administrator",
- "time_interval": "Monthly",
- "timeseries": 0,
- "timespan": "Last Year",
- "type": "Bar",
- "use_report_chart": 0,
- "y_axis": []
-}
\ No newline at end of file
diff --git a/erpnext/hr/dashboard_chart/gender_diversity_ratio/gender_diversity_ratio.json b/erpnext/hr/dashboard_chart/gender_diversity_ratio/gender_diversity_ratio.json
deleted file mode 100644
index 48578c9..0000000
--- a/erpnext/hr/dashboard_chart/gender_diversity_ratio/gender_diversity_ratio.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "chart_name": "Gender Diversity Ratio",
- "chart_type": "Group By",
- "creation": "2020-07-22 11:56:32.667291",
- "custom_options": "",
- "docstatus": 0,
- "doctype": "Dashboard Chart",
- "document_type": "Employee",
- "dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]",
- "filters_json": "[[\"Employee\",\"status\",\"=\",\"Active\",false]]",
- "group_by_based_on": "gender",
- "group_by_type": "Count",
- "idx": 0,
- "is_public": 1,
- "is_standard": 1,
- "last_synced_on": "2020-07-22 14:27:40.143783",
- "modified": "2020-07-22 14:32:50.962459",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Gender Diversity Ratio",
- "number_of_groups": 0,
- "owner": "Administrator",
- "time_interval": "Yearly",
- "timeseries": 0,
- "timespan": "Last Year",
- "type": "Pie",
- "use_report_chart": 0,
- "y_axis": []
-}
\ No newline at end of file
diff --git a/erpnext/hr/dashboard_chart/job_application_status/job_application_status.json b/erpnext/hr/dashboard_chart/job_application_status/job_application_status.json
deleted file mode 100644
index 42a8309..0000000
--- a/erpnext/hr/dashboard_chart/job_application_status/job_application_status.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "chart_name": "Job Application Status",
- "chart_type": "Group By",
- "creation": "2020-07-22 11:56:32.699696",
- "custom_options": "",
- "docstatus": 0,
- "doctype": "Dashboard Chart",
- "document_type": "Job Applicant",
- "dynamic_filters_json": "",
- "filters_json": "[[\"Job Applicant\",\"creation\",\"Timespan\",\"last month\",false]]",
- "group_by_based_on": "status",
- "group_by_type": "Count",
- "idx": 0,
- "is_public": 1,
- "is_standard": 1,
- "last_synced_on": "2020-07-28 16:19:12.109979",
- "modified": "2020-07-28 16:19:45.279490",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Job Application Status",
- "number_of_groups": 0,
- "owner": "Administrator",
- "time_interval": "Yearly",
- "timeseries": 0,
- "timespan": "Last Year",
- "type": "Pie",
- "use_report_chart": 0,
- "y_axis": []
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/__init__.py b/erpnext/hr/doctype/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/appointment_letter/__init__.py b/erpnext/hr/doctype/appointment_letter/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/appointment_letter/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/appointment_letter/appointment_letter.js b/erpnext/hr/doctype/appointment_letter/appointment_letter.js
deleted file mode 100644
index a338dc6..0000000
--- a/erpnext/hr/doctype/appointment_letter/appointment_letter.js
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Appointment Letter', {
-	appointment_letter_template: function(frm){
-		if (frm.doc.appointment_letter_template){
-			frappe.call({
-				method: 'erpnext.hr.doctype.appointment_letter.appointment_letter.get_appointment_letter_details',
-				args : {
-					template : frm.doc.appointment_letter_template
-				},
-				callback: function(r){
-					if(r.message){
-						let message_body = r.message;
-						frm.set_value("introduction", message_body[0].introduction);
-						frm.set_value("closing_notes", message_body[0].closing_notes);
-						frm.doc.terms = []
-						for (var i in message_body[1].description){
-							frm.add_child("terms");
-							frm.fields_dict.terms.get_value()[i].title = message_body[1].description[i].title;
-							frm.fields_dict.terms.get_value()[i].description = message_body[1].description[i].description;
-						}
-						frm.refresh();
-					}
-				}
-
-			});
-		}
-	},
-});
diff --git a/erpnext/hr/doctype/appointment_letter/appointment_letter.json b/erpnext/hr/doctype/appointment_letter/appointment_letter.json
deleted file mode 100644
index 012f6b6..0000000
--- a/erpnext/hr/doctype/appointment_letter/appointment_letter.json
+++ /dev/null
@@ -1,128 +0,0 @@
-{
- "actions": [],
- "autoname": "HR-APP-LETTER-.#####",
- "creation": "2019-12-26 12:35:49.574828",
- "default_print_format": "Standard Appointment Letter",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "job_applicant",
-  "applicant_name",
-  "column_break_3",
-  "company",
-  "appointment_date",
-  "appointment_letter_template",
-  "body_section",
-  "introduction",
-  "terms",
-  "closing_notes"
- ],
- "fields": [
-  {
-   "fetch_from": "job_applicant.applicant_name",
-   "fieldname": "applicant_name",
-   "fieldtype": "Data",
-   "in_global_search": 1,
-   "in_list_view": 1,
-   "label": "Applicant Name",
-   "read_only": 1,
-   "reqd": 1
-  },
-  {
-   "fieldname": "appointment_date",
-   "fieldtype": "Date",
-   "label": "Appointment Date",
-   "reqd": 1
-  },
-  {
-   "fieldname": "appointment_letter_template",
-   "fieldtype": "Link",
-   "label": "Appointment Letter Template",
-   "options": "Appointment Letter Template",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "appointment_letter_template.introduction",
-   "fieldname": "introduction",
-   "fieldtype": "Long Text",
-   "label": "Introduction",
-   "reqd": 1
-  },
-  {
-   "fieldname": "body_section",
-   "fieldtype": "Section Break",
-   "label": "Body"
-  },
-  {
-   "fieldname": "column_break_3",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "job_applicant",
-   "fieldtype": "Link",
-   "label": "Job Applicant",
-   "options": "Job Applicant",
-   "reqd": 1
-  },
-  {
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "label": "Company",
-   "options": "Company",
-   "reqd": 1
-  },
-  {
-   "fieldname": "closing_notes",
-   "fieldtype": "Text",
-   "label": "Closing Notes"
-  },
-  {
-   "fieldname": "terms",
-   "fieldtype": "Table",
-   "label": "Terms",
-   "options": "Appointment Letter content",
-   "reqd": 1
-  }
- ],
- "links": [],
- "modified": "2022-01-18 19:27:35.649424",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Appointment Letter",
- "name_case": "Title Case",
- "naming_rule": "Expression (old style)",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "write": 1
-  }
- ],
- "search_fields": "applicant_name, company",
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": [],
- "title_field": "applicant_name",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/appointment_letter/appointment_letter.py b/erpnext/hr/doctype/appointment_letter/appointment_letter.py
deleted file mode 100644
index a58589a..0000000
--- a/erpnext/hr/doctype/appointment_letter/appointment_letter.py
+++ /dev/null
@@ -1,29 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe.model.document import Document
-
-
-class AppointmentLetter(Document):
-	pass
-
-
-@frappe.whitelist()
-def get_appointment_letter_details(template):
-	body = []
-	intro = frappe.get_list(
-		"Appointment Letter Template",
-		fields=["introduction", "closing_notes"],
-		filters={"name": template},
-	)[0]
-	content = frappe.get_all(
-		"Appointment Letter content",
-		fields=["title", "description"],
-		filters={"parent": template},
-		order_by="idx",
-	)
-	body.append(intro)
-	body.append({"description": content})
-	return body
diff --git a/erpnext/hr/doctype/appointment_letter/test_appointment_letter.py b/erpnext/hr/doctype/appointment_letter/test_appointment_letter.py
deleted file mode 100644
index e0f65b4..0000000
--- a/erpnext/hr/doctype/appointment_letter/test_appointment_letter.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-# import frappe
-import unittest
-
-
-class TestAppointmentLetter(unittest.TestCase):
-	pass
diff --git a/erpnext/hr/doctype/appointment_letter_content/__init__.py b/erpnext/hr/doctype/appointment_letter_content/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/appointment_letter_content/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/appointment_letter_content/appointment_letter_content.json b/erpnext/hr/doctype/appointment_letter_content/appointment_letter_content.json
deleted file mode 100644
index 17a2b91..0000000
--- a/erpnext/hr/doctype/appointment_letter_content/appointment_letter_content.json
+++ /dev/null
@@ -1,39 +0,0 @@
-{
- "actions": [],
- "creation": "2019-12-26 12:22:16.575767",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "title",
-  "description"
- ],
- "fields": [
-  {
-   "fieldname": "title",
-   "fieldtype": "Data",
-   "in_list_view": 1,
-   "label": "Title",
-   "reqd": 1
-  },
-  {
-   "fieldname": "description",
-   "fieldtype": "Long Text",
-   "in_list_view": 1,
-   "label": "Description",
-   "reqd": 1
-  }
- ],
- "istable": 1,
- "links": [],
- "modified": "2019-12-26 12:24:09.824084",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Appointment Letter content",
- "owner": "Administrator",
- "permissions": [],
- "quick_entry": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/appointment_letter_content/appointment_letter_content.py b/erpnext/hr/doctype/appointment_letter_content/appointment_letter_content.py
deleted file mode 100644
index d158013..0000000
--- a/erpnext/hr/doctype/appointment_letter_content/appointment_letter_content.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-# import frappe
-from frappe.model.document import Document
-
-
-class AppointmentLettercontent(Document):
-	pass
diff --git a/erpnext/hr/doctype/appointment_letter_template/__init__.py b/erpnext/hr/doctype/appointment_letter_template/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/appointment_letter_template/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/appointment_letter_template/appointment_letter_template.js b/erpnext/hr/doctype/appointment_letter_template/appointment_letter_template.js
deleted file mode 100644
index 8270f7a..0000000
--- a/erpnext/hr/doctype/appointment_letter_template/appointment_letter_template.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Appointment Letter Template', {
-	// refresh: function(frm) {
-
-	// }
-});
diff --git a/erpnext/hr/doctype/appointment_letter_template/appointment_letter_template.json b/erpnext/hr/doctype/appointment_letter_template/appointment_letter_template.json
deleted file mode 100644
index 5e50fe6..0000000
--- a/erpnext/hr/doctype/appointment_letter_template/appointment_letter_template.json
+++ /dev/null
@@ -1,81 +0,0 @@
-{
- "actions": [],
- "autoname": "field:template_name",
- "creation": "2019-12-26 12:20:14.219578",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "template_name",
-  "introduction",
-  "terms",
-  "closing_notes"
- ],
- "fields": [
-  {
-   "fieldname": "introduction",
-   "fieldtype": "Long Text",
-   "in_list_view": 1,
-   "label": "Introduction",
-   "reqd": 1
-  },
-  {
-   "fieldname": "closing_notes",
-   "fieldtype": "Text",
-   "label": "Closing Notes"
-  },
-  {
-   "fieldname": "terms",
-   "fieldtype": "Table",
-   "label": "Terms",
-   "options": "Appointment Letter content",
-   "reqd": 1
-  },
-  {
-   "fieldname": "template_name",
-   "fieldtype": "Data",
-   "label": "Template Name",
-   "reqd": 1,
-   "unique": 1
-  }
- ],
- "links": [],
- "modified": "2022-01-18 19:25:14.614616",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Appointment Letter Template",
- "naming_rule": "By fieldname",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "write": 1
-  }
- ],
- "search_fields": "template_name",
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": [],
- "title_field": "template_name",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/appointment_letter_template/appointment_letter_template.py b/erpnext/hr/doctype/appointment_letter_template/appointment_letter_template.py
deleted file mode 100644
index 9ac726e..0000000
--- a/erpnext/hr/doctype/appointment_letter_template/appointment_letter_template.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-# import frappe
-from frappe.model.document import Document
-
-
-class AppointmentLetterTemplate(Document):
-	pass
diff --git a/erpnext/hr/doctype/appointment_letter_template/test_appointment_letter_template.py b/erpnext/hr/doctype/appointment_letter_template/test_appointment_letter_template.py
deleted file mode 100644
index aa87da3..0000000
--- a/erpnext/hr/doctype/appointment_letter_template/test_appointment_letter_template.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-# import frappe
-import unittest
-
-
-class TestAppointmentLetterTemplate(unittest.TestCase):
-	pass
diff --git a/erpnext/hr/doctype/appraisal/README.md b/erpnext/hr/doctype/appraisal/README.md
deleted file mode 100644
index 7798f18..0000000
--- a/erpnext/hr/doctype/appraisal/README.md
+++ /dev/null
@@ -1 +0,0 @@
-Performance of an Employee in a Time Period against given goals.
\ No newline at end of file
diff --git a/erpnext/hr/doctype/appraisal/__init__.py b/erpnext/hr/doctype/appraisal/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/appraisal/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/appraisal/appraisal.js b/erpnext/hr/doctype/appraisal/appraisal.js
deleted file mode 100644
index 50612b9..0000000
--- a/erpnext/hr/doctype/appraisal/appraisal.js
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-// License: GNU General Public License v3. See license.txt
-
-frappe.ui.form.on('Appraisal', {
-	setup: function(frm) {
-		frm.add_fetch('employee', 'company', 'company');
-		frm.add_fetch('employee', 'employee_name', 'employee_name');
-		frm.fields_dict.employee.get_query = function(doc,cdt,cdn) {
-			return{	query: "erpnext.controllers.queries.employee_query" }
-		};
-	},
-
-	onload: function(frm) {
-		if(!frm.doc.status) {
-			frm.set_value('status', 'Draft');
-		}
-	},
-
-	kra_template: function(frm) {
-		frm.doc.goals = [];
-		erpnext.utils.map_current_doc({
-			method: "erpnext.hr.doctype.appraisal.appraisal.fetch_appraisal_template",
-			source_name: frm.doc.kra_template,
-			frm: frm
-		});
-	},
-
-	calculate_total: function(frm) {
-	  	let goals = frm.doc.goals || [];
-		let total = 0;
-
-		if (goals == []) {
-			frm.set_value('total_score', 0);
-			return;
-		}
-		for (let i = 0; i<goals.length; i++) {
-			total = flt(total)+flt(goals[i].score_earned)
-		}
-		if (!isNaN(total)) {
-			frm.set_value('total_score', total);
-			frm.refresh_field('calculate_total');
-		}
-	},
-
-	set_score_earned: function(frm) {
-		let goals = frm.doc.goals || [];
-		for (let i = 0; i<goals.length; i++) {
-			var d = locals[goals[i].doctype][goals[i].name];
-			if (d.score && d.per_weightage) {
-				d.score_earned = flt(d.per_weightage*d.score, precision("score_earned", d))/100;
-			}
-			else {
-				d.score_earned = 0;
-			}
-			refresh_field('score_earned', d.name, 'goals');
-		}
-		frm.trigger('calculate_total');
-	}
-});
-
-frappe.ui.form.on('Appraisal Goal', {
-	score: function(frm, cdt, cdn) {
-		var d = locals[cdt][cdn];
-		if (flt(d.score) > 5) {
-			frappe.msgprint(__("Score must be less than or equal to 5"));
-			d.score = 0;
-			refresh_field('score', d.name, 'goals');
-		}
-		else {
-			frm.trigger('set_score_earned');
-		}
-	},
-	per_weightage: function(frm) {
-		frm.trigger('set_score_earned');
-	},
-	goals_remove: function(frm) {
-		frm.trigger('set_score_earned');
-	}
-});
diff --git a/erpnext/hr/doctype/appraisal/appraisal.json b/erpnext/hr/doctype/appraisal/appraisal.json
deleted file mode 100644
index 9ca7bcc..0000000
--- a/erpnext/hr/doctype/appraisal/appraisal.json
+++ /dev/null
@@ -1,254 +0,0 @@
-{
- "actions": [],
- "autoname": "naming_series:",
- "creation": "2013-01-10 16:34:12",
- "doctype": "DocType",
- "document_type": "Setup",
- "engine": "InnoDB",
- "field_order": [
-  "employee_details",
-  "naming_series",
-  "kra_template",
-  "employee",
-  "employee_name",
-  "column_break0",
-  "status",
-  "start_date",
-  "end_date",
-  "department",
-  "section_break0",
-  "goals",
-  "total_score",
-  "section_break1",
-  "remarks",
-  "other_details",
-  "company",
-  "column_break_17",
-  "amended_from"
- ],
- "fields": [
-  {
-   "fieldname": "employee_details",
-   "fieldtype": "Section Break",
-   "oldfieldtype": "Section Break"
-  },
-  {
-   "fieldname": "naming_series",
-   "fieldtype": "Select",
-   "label": "Series",
-   "no_copy": 1,
-   "options": "HR-APR-.YY.-.MM.",
-   "print_hide": 1,
-   "reqd": 1,
-   "set_only_once": 1
-  },
-  {
-   "fieldname": "kra_template",
-   "fieldtype": "Link",
-   "in_standard_filter": 1,
-   "label": "Appraisal Template",
-   "oldfieldname": "kra_template",
-   "oldfieldtype": "Link",
-   "options": "Appraisal Template",
-   "reqd": 1
-  },
-  {
-   "depends_on": "kra_template",
-   "fieldname": "employee",
-   "fieldtype": "Link",
-   "in_global_search": 1,
-   "in_standard_filter": 1,
-   "label": "For Employee",
-   "oldfieldname": "employee",
-   "oldfieldtype": "Link",
-   "options": "Employee",
-   "reqd": 1,
-   "search_index": 1
-  },
-  {
-   "depends_on": "kra_template",
-   "fieldname": "employee_name",
-   "fieldtype": "Data",
-   "in_global_search": 1,
-   "label": "For Employee Name",
-   "oldfieldname": "employee_name",
-   "oldfieldtype": "Data",
-   "read_only": 1
-  },
-  {
-   "depends_on": "kra_template",
-   "fieldname": "column_break0",
-   "fieldtype": "Column Break",
-   "oldfieldtype": "Column Break",
-   "width": "50%"
-  },
-  {
-   "default": "Draft",
-   "depends_on": "kra_template",
-   "fieldname": "status",
-   "fieldtype": "Select",
-   "in_standard_filter": 1,
-   "label": "Status",
-   "no_copy": 1,
-   "oldfieldname": "status",
-   "oldfieldtype": "Select",
-   "options": "\nDraft\nSubmitted\nCompleted\nCancelled",
-   "read_only": 1,
-   "reqd": 1,
-   "search_index": 1
-  },
-  {
-   "depends_on": "kra_template",
-   "fieldname": "start_date",
-   "fieldtype": "Date",
-   "in_list_view": 1,
-   "label": "Start Date",
-   "oldfieldname": "start_date",
-   "oldfieldtype": "Date",
-   "reqd": 1
-  },
-  {
-   "depends_on": "kra_template",
-   "fieldname": "end_date",
-   "fieldtype": "Date",
-   "label": "End Date",
-   "oldfieldname": "end_date",
-   "oldfieldtype": "Date",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "employee.department",
-   "fieldname": "department",
-   "fieldtype": "Link",
-   "label": "Department",
-   "options": "Department",
-   "read_only": 1
-  },
-  {
-   "depends_on": "kra_template",
-   "fieldname": "section_break0",
-   "fieldtype": "Section Break",
-   "label": "Goals",
-   "oldfieldtype": "Section Break",
-   "options": "Simple"
-  },
-  {
-   "fieldname": "goals",
-   "fieldtype": "Table",
-   "label": "Goals",
-   "oldfieldname": "appraisal_details",
-   "oldfieldtype": "Table",
-   "options": "Appraisal Goal"
-  },
-  {
-   "fieldname": "total_score",
-   "fieldtype": "Float",
-   "in_list_view": 1,
-   "label": "Total Score (Out of 5)",
-   "no_copy": 1,
-   "oldfieldname": "total_score",
-   "oldfieldtype": "Currency",
-   "read_only": 1
-  },
-  {
-   "depends_on": "kra_template",
-   "fieldname": "section_break1",
-   "fieldtype": "Section Break"
-  },
-  {
-   "description": "Any other remarks, noteworthy effort that should go in the records.",
-   "fieldname": "remarks",
-   "fieldtype": "Text",
-   "label": "Remarks"
-  },
-  {
-   "depends_on": "kra_template",
-   "fieldname": "other_details",
-   "fieldtype": "Section Break"
-  },
-  {
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "label": "Company",
-   "oldfieldname": "company",
-   "oldfieldtype": "Link",
-   "options": "Company",
-   "remember_last_selected_value": 1,
-   "reqd": 1
-  },
-  {
-   "fieldname": "column_break_17",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "hidden": 1,
-   "ignore_user_permissions": 1,
-   "label": "Amended From",
-   "no_copy": 1,
-   "oldfieldname": "amended_from",
-   "oldfieldtype": "Data",
-   "options": "Appraisal",
-   "print_hide": 1,
-   "read_only": 1,
-   "report_hide": 1,
-   "width": "150px"
-  }
- ],
- "icon": "fa fa-thumbs-up",
- "idx": 1,
- "index_web_pages_for_search": 1,
- "is_submittable": 1,
- "links": [],
- "modified": "2020-10-03 21:48:33.297065",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Appraisal",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "email": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "Employee",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  }
- ],
- "search_fields": "status, employee, employee_name",
- "sort_field": "modified",
- "sort_order": "DESC",
- "timeline_field": "employee",
- "title_field": "employee_name"
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/appraisal/appraisal.py b/erpnext/hr/doctype/appraisal/appraisal.py
deleted file mode 100644
index 382c643..0000000
--- a/erpnext/hr/doctype/appraisal/appraisal.py
+++ /dev/null
@@ -1,94 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.model.mapper import get_mapped_doc
-from frappe.utils import flt, getdate
-
-from erpnext.hr.utils import set_employee_name, validate_active_employee
-
-
-class Appraisal(Document):
-	def validate(self):
-		if not self.status:
-			self.status = "Draft"
-
-		if not self.goals:
-			frappe.throw(_("Goals cannot be empty"))
-
-		validate_active_employee(self.employee)
-		set_employee_name(self)
-		self.validate_dates()
-		self.validate_existing_appraisal()
-		self.calculate_total()
-
-	def get_employee_name(self):
-		self.employee_name = frappe.db.get_value("Employee", self.employee, "employee_name")
-		return self.employee_name
-
-	def validate_dates(self):
-		if getdate(self.start_date) > getdate(self.end_date):
-			frappe.throw(_("End Date can not be less than Start Date"))
-
-	def validate_existing_appraisal(self):
-		chk = frappe.db.sql(
-			"""select name from `tabAppraisal` where employee=%s
-			and (status='Submitted' or status='Completed')
-			and ((start_date>=%s and start_date<=%s)
-			or (end_date>=%s and end_date<=%s))""",
-			(self.employee, self.start_date, self.end_date, self.start_date, self.end_date),
-		)
-		if chk:
-			frappe.throw(
-				_("Appraisal {0} created for Employee {1} in the given date range").format(
-					chk[0][0], self.employee_name
-				)
-			)
-
-	def calculate_total(self):
-		total, total_w = 0, 0
-		for d in self.get("goals"):
-			if d.score:
-				d.score_earned = flt(d.score) * flt(d.per_weightage) / 100
-				total = total + d.score_earned
-			total_w += flt(d.per_weightage)
-
-		if int(total_w) != 100:
-			frappe.throw(
-				_("Total weightage assigned should be 100%.<br>It is {0}").format(str(total_w) + "%")
-			)
-
-		if (
-			frappe.db.get_value("Employee", self.employee, "user_id") != frappe.session.user and total == 0
-		):
-			frappe.throw(_("Total cannot be zero"))
-
-		self.total_score = total
-
-	def on_submit(self):
-		frappe.db.set(self, "status", "Submitted")
-
-	def on_cancel(self):
-		frappe.db.set(self, "status", "Cancelled")
-
-
-@frappe.whitelist()
-def fetch_appraisal_template(source_name, target_doc=None):
-	target_doc = get_mapped_doc(
-		"Appraisal Template",
-		source_name,
-		{
-			"Appraisal Template": {
-				"doctype": "Appraisal",
-			},
-			"Appraisal Template Goal": {
-				"doctype": "Appraisal Goal",
-			},
-		},
-		target_doc,
-	)
-
-	return target_doc
diff --git a/erpnext/hr/doctype/appraisal/test_appraisal.py b/erpnext/hr/doctype/appraisal/test_appraisal.py
deleted file mode 100644
index 13a39f3..0000000
--- a/erpnext/hr/doctype/appraisal/test_appraisal.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and Contributors
-# See license.txt
-
-import unittest
-
-# test_records = frappe.get_test_records('Appraisal')
-
-
-class TestAppraisal(unittest.TestCase):
-	pass
diff --git a/erpnext/hr/doctype/appraisal_goal/README.md b/erpnext/hr/doctype/appraisal_goal/README.md
deleted file mode 100644
index 851a403..0000000
--- a/erpnext/hr/doctype/appraisal_goal/README.md
+++ /dev/null
@@ -1 +0,0 @@
-Goal for the parent Appraisal.
\ No newline at end of file
diff --git a/erpnext/hr/doctype/appraisal_goal/__init__.py b/erpnext/hr/doctype/appraisal_goal/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/appraisal_goal/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/appraisal_goal/appraisal_goal.json b/erpnext/hr/doctype/appraisal_goal/appraisal_goal.json
deleted file mode 100644
index b8ec5a8..0000000
--- a/erpnext/hr/doctype/appraisal_goal/appraisal_goal.json
+++ /dev/null
@@ -1,220 +0,0 @@
-{
- "allow_copy": 0, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "autoname": "hash", 
- "beta": 0, 
- "creation": "2013-02-22 01:27:44", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "editable_grid": 1, 
- "fields": [
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "description": "Key Responsibility Area", 
-   "fieldname": "kra", 
-   "fieldtype": "Small Text", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 1, 
-   "label": "Goal", 
-   "length": 0, 
-   "no_copy": 0, 
-   "oldfieldname": "kra", 
-   "oldfieldtype": "Small Text", 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "print_width": "240px", 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0, 
-   "width": "240px"
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "section_break_2", 
-   "fieldtype": "Section Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "per_weightage", 
-   "fieldtype": "Float", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 1, 
-   "label": "Weightage (%)", 
-   "length": 0, 
-   "no_copy": 0, 
-   "oldfieldname": "per_weightage", 
-   "oldfieldtype": "Currency", 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "print_width": "70px", 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0, 
-   "width": "70px"
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "column_break_4", 
-   "fieldtype": "Column Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "score", 
-   "fieldtype": "Float", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 1, 
-   "label": "Score (0-5)", 
-   "length": 0, 
-   "no_copy": 1, 
-   "oldfieldname": "score", 
-   "oldfieldtype": "Select", 
-   "options": "", 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "print_width": "70px", 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0, 
-   "width": "70px"
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "section_break_6", 
-   "fieldtype": "Section Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "score_earned", 
-   "fieldtype": "Float", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 1, 
-   "label": "Score Earned", 
-   "length": 0, 
-   "no_copy": 1, 
-   "oldfieldname": "score_earned", 
-   "oldfieldtype": "Currency", 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "print_width": "70px", 
-   "read_only": 1, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0, 
-   "width": "70px"
-  }
- ], 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 1, 
- "image_view": 0, 
- "in_create": 0, 
-
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 1, 
- "max_attachments": 0, 
- "modified": "2020-09-18 17:26:09.703215", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Appraisal Goal", 
- "owner": "Administrator", 
- "permissions": [], 
- "quick_entry": 0, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/appraisal_goal/appraisal_goal.py b/erpnext/hr/doctype/appraisal_goal/appraisal_goal.py
deleted file mode 100644
index 3cbc918..0000000
--- a/erpnext/hr/doctype/appraisal_goal/appraisal_goal.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-
-from frappe.model.document import Document
-
-
-class AppraisalGoal(Document):
-	pass
diff --git a/erpnext/hr/doctype/appraisal_template/README.md b/erpnext/hr/doctype/appraisal_template/README.md
deleted file mode 100644
index d58a744..0000000
--- a/erpnext/hr/doctype/appraisal_template/README.md
+++ /dev/null
@@ -1 +0,0 @@
-Standard set of goals for an Employee / Designation / Job Profile. New Appraisal transactions can be created from the Template.
\ No newline at end of file
diff --git a/erpnext/hr/doctype/appraisal_template/__init__.py b/erpnext/hr/doctype/appraisal_template/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/appraisal_template/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/appraisal_template/appraisal_template.js b/erpnext/hr/doctype/appraisal_template/appraisal_template.js
deleted file mode 100644
index cc77292..0000000
--- a/erpnext/hr/doctype/appraisal_template/appraisal_template.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Appraisal Template', {
-	refresh: function(frm) {
-
-	}
-});
diff --git a/erpnext/hr/doctype/appraisal_template/appraisal_template.json b/erpnext/hr/doctype/appraisal_template/appraisal_template.json
deleted file mode 100644
index 7329c35..0000000
--- a/erpnext/hr/doctype/appraisal_template/appraisal_template.json
+++ /dev/null
@@ -1,170 +0,0 @@
-{
- "allow_copy": 0, 
- "allow_import": 1, 
- "allow_rename": 1, 
- "autoname": "field:kra_title", 
- "beta": 0, 
- "creation": "2012-07-03 13:30:39", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "Setup", 
- "editable_grid": 0, 
- "fields": [
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "kra_title", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Appraisal Template Title", 
-   "length": 0, 
-   "no_copy": 0, 
-   "oldfieldname": "kra_title", 
-   "oldfieldtype": "Data", 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "description", 
-   "fieldtype": "Small Text", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Description", 
-   "length": 0, 
-   "no_copy": 0, 
-   "oldfieldname": "description", 
-   "oldfieldtype": "Small Text", 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "print_width": "300px", 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0, 
-   "width": "300px"
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "goals", 
-   "fieldtype": "Table", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Goals", 
-   "length": 0, 
-   "no_copy": 0, 
-   "oldfieldname": "kra_sheet", 
-   "oldfieldtype": "Table", 
-   "options": "Appraisal Template Goal", 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }
- ], 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "icon": "icon-file-text", 
- "idx": 1, 
- "image_view": 0, 
- "in_create": 0, 
-
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 0, 
- "max_attachments": 0, 
- "modified": "2020-09-18 17:26:09.703215", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Appraisal Template", 
- "owner": "Administrator", 
- "permissions": [
-  {
-   "amend": 0, 
-   "apply_user_permissions": 0, 
-   "cancel": 0, 
-   "create": 1, 
-   "delete": 0, 
-   "email": 1, 
-   "export": 0, 
-   "if_owner": 0, 
-   "import": 0, 
-   "is_custom": 0, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 1, 
-   "role": "HR User", 
-   "set_user_permissions": 0, 
-   "share": 1, 
-   "submit": 0, 
-   "write": 1
-  }, 
-  {
-   "amend": 0, 
-   "apply_user_permissions": 0, 
-   "cancel": 0, 
-   "create": 0, 
-   "delete": 0, 
-   "email": 0, 
-   "export": 0, 
-   "if_owner": 0, 
-   "import": 0, 
-   "is_custom": 0, 
-   "permlevel": 0, 
-   "print": 0, 
-   "read": 1, 
-   "report": 0, 
-   "role": "Employee", 
-   "set_user_permissions": 0, 
-   "share": 0, 
-   "submit": 0, 
-   "write": 0
-  }
- ], 
- "quick_entry": 0, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "sort_order": "DESC", 
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/appraisal_template/appraisal_template.py b/erpnext/hr/doctype/appraisal_template/appraisal_template.py
deleted file mode 100644
index 6b5921e..0000000
--- a/erpnext/hr/doctype/appraisal_template/appraisal_template.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.utils import cint, flt
-
-
-class AppraisalTemplate(Document):
-	def validate(self):
-		self.check_total_points()
-
-	def check_total_points(self):
-		total_points = 0
-		for d in self.get("goals"):
-			total_points += flt(d.per_weightage)
-
-		if cint(total_points) != 100:
-			frappe.throw(_("Sum of points for all goals should be 100. It is {0}").format(total_points))
diff --git a/erpnext/hr/doctype/appraisal_template/appraisal_template_dashboard.py b/erpnext/hr/doctype/appraisal_template/appraisal_template_dashboard.py
deleted file mode 100644
index 476de4f..0000000
--- a/erpnext/hr/doctype/appraisal_template/appraisal_template_dashboard.py
+++ /dev/null
@@ -1,7 +0,0 @@
-def get_data():
-	return {
-		"fieldname": "kra_template",
-		"transactions": [
-			{"items": ["Appraisal"]},
-		],
-	}
diff --git a/erpnext/hr/doctype/appraisal_template/test_appraisal_template.py b/erpnext/hr/doctype/appraisal_template/test_appraisal_template.py
deleted file mode 100644
index 560e992..0000000
--- a/erpnext/hr/doctype/appraisal_template/test_appraisal_template.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and Contributors
-# See license.txt
-
-import unittest
-
-# test_records = frappe.get_test_records('Appraisal Template')
-
-
-class TestAppraisalTemplate(unittest.TestCase):
-	pass
diff --git a/erpnext/hr/doctype/appraisal_template_goal/README.md b/erpnext/hr/doctype/appraisal_template_goal/README.md
deleted file mode 100644
index 1b81afb..0000000
--- a/erpnext/hr/doctype/appraisal_template_goal/README.md
+++ /dev/null
@@ -1 +0,0 @@
-Goal details for the parent Appraisal Template.
\ No newline at end of file
diff --git a/erpnext/hr/doctype/appraisal_template_goal/__init__.py b/erpnext/hr/doctype/appraisal_template_goal/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/appraisal_template_goal/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/appraisal_template_goal/appraisal_template_goal.json b/erpnext/hr/doctype/appraisal_template_goal/appraisal_template_goal.json
deleted file mode 100644
index 2858419..0000000
--- a/erpnext/hr/doctype/appraisal_template_goal/appraisal_template_goal.json
+++ /dev/null
@@ -1,91 +0,0 @@
-{
- "allow_copy": 0, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "autoname": "hash", 
- "beta": 0, 
- "creation": "2013-02-22 01:27:44", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "editable_grid": 1, 
- "fields": [
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "description": "Key Performance Area", 
-   "fieldname": "kra", 
-   "fieldtype": "Small Text", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 1, 
-   "label": "KRA", 
-   "length": 0, 
-   "no_copy": 0, 
-   "oldfieldname": "kra", 
-   "oldfieldtype": "Small Text", 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "print_width": "200px", 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0, 
-   "width": "200px"
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "per_weightage", 
-   "fieldtype": "Float", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 1, 
-   "label": "Weightage (%)", 
-   "length": 0, 
-   "no_copy": 0, 
-   "oldfieldname": "per_weightage", 
-   "oldfieldtype": "Currency", 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "print_width": "100px", 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0, 
-   "width": "100px"
-  }
- ], 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 1, 
- "image_view": 0, 
- "in_create": 0, 
-
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 1, 
- "max_attachments": 0, 
- "modified": "2020-09-18 17:26:09.703215", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Appraisal Template Goal", 
- "owner": "Administrator", 
- "permissions": [], 
- "quick_entry": 0, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/appraisal_template_goal/appraisal_template_goal.py b/erpnext/hr/doctype/appraisal_template_goal/appraisal_template_goal.py
deleted file mode 100644
index e6c5f64..0000000
--- a/erpnext/hr/doctype/appraisal_template_goal/appraisal_template_goal.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-
-from frappe.model.document import Document
-
-
-class AppraisalTemplateGoal(Document):
-	pass
diff --git a/erpnext/hr/doctype/attendance/README.md b/erpnext/hr/doctype/attendance/README.md
deleted file mode 100644
index f420b07..0000000
--- a/erpnext/hr/doctype/attendance/README.md
+++ /dev/null
@@ -1 +0,0 @@
-Attendance record of an Employee on a particular date.
\ No newline at end of file
diff --git a/erpnext/hr/doctype/attendance/__init__.py b/erpnext/hr/doctype/attendance/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/attendance/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/attendance/attendance.js b/erpnext/hr/doctype/attendance/attendance.js
deleted file mode 100644
index 7964078..0000000
--- a/erpnext/hr/doctype/attendance/attendance.js
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-// License: GNU General Public License v3. See license.txt
-
-cur_frm.add_fetch('employee', 'company', 'company');
-cur_frm.add_fetch('employee', 'employee_name', 'employee_name');
-
-cur_frm.cscript.onload = function(doc, cdt, cdn) {
-	if(doc.__islocal) cur_frm.set_value("attendance_date", frappe.datetime.get_today());
-}
-
-cur_frm.fields_dict.employee.get_query = function(doc,cdt,cdn) {
-	return{
-		query: "erpnext.controllers.queries.employee_query"
-	}
-}
diff --git a/erpnext/hr/doctype/attendance/attendance.json b/erpnext/hr/doctype/attendance/attendance.json
deleted file mode 100644
index 134098f..0000000
--- a/erpnext/hr/doctype/attendance/attendance.json
+++ /dev/null
@@ -1,260 +0,0 @@
-{
- "actions": [],
- "allow_import": 1,
- "autoname": "naming_series:",
- "creation": "2013-01-10 16:34:13",
- "doctype": "DocType",
- "document_type": "Setup",
- "engine": "InnoDB",
- "field_order": [
-  "attendance_details",
-  "naming_series",
-  "employee",
-  "employee_name",
-  "working_hours",
-  "status",
-  "leave_type",
-  "leave_application",
-  "column_break0",
-  "attendance_date",
-  "company",
-  "department",
-  "attendance_request",
-  "details_section",
-  "shift",
-  "in_time",
-  "out_time",
-  "column_break_18",
-  "late_entry",
-  "early_exit",
-  "amended_from"
- ],
- "fields": [
-  {
-   "fieldname": "attendance_details",
-   "fieldtype": "Section Break",
-   "oldfieldtype": "Section Break",
-   "options": "Simple"
-  },
-  {
-   "fieldname": "naming_series",
-   "fieldtype": "Select",
-   "label": "Series",
-   "no_copy": 1,
-   "oldfieldname": "naming_series",
-   "oldfieldtype": "Select",
-   "options": "HR-ATT-.YYYY.-",
-   "reqd": 1,
-   "set_only_once": 1
-  },
-  {
-   "fieldname": "employee",
-   "fieldtype": "Link",
-   "in_global_search": 1,
-   "in_standard_filter": 1,
-   "label": "Employee",
-   "oldfieldname": "employee",
-   "oldfieldtype": "Link",
-   "options": "Employee",
-   "reqd": 1,
-   "search_index": 1
-  },
-  {
-   "fetch_from": "employee.employee_name",
-   "fieldname": "employee_name",
-   "fieldtype": "Data",
-   "in_global_search": 1,
-   "label": "Employee Name",
-   "oldfieldname": "employee_name",
-   "oldfieldtype": "Data",
-   "read_only": 1
-  },
-  {
-   "depends_on": "working_hours",
-   "fieldname": "working_hours",
-   "fieldtype": "Float",
-   "label": "Working Hours",
-   "precision": "1",
-   "read_only": 1
-  },
-  {
-   "default": "Present",
-   "fieldname": "status",
-   "fieldtype": "Select",
-   "in_standard_filter": 1,
-   "label": "Status",
-   "no_copy": 1,
-   "oldfieldname": "status",
-   "oldfieldtype": "Select",
-   "options": "\nPresent\nAbsent\nOn Leave\nHalf Day\nWork From Home",
-   "reqd": 1,
-   "search_index": 1
-  },
-  {
-   "depends_on": "eval:in_list([\"On Leave\", \"Half Day\"], doc.status)",
-   "fieldname": "leave_type",
-   "fieldtype": "Link",
-   "in_standard_filter": 1,
-   "label": "Leave Type",
-   "mandatory_depends_on": "eval:in_list([\"On Leave\", \"Half Day\"], doc.status)",
-   "oldfieldname": "leave_type",
-   "oldfieldtype": "Link",
-   "options": "Leave Type"
-  },
-  {
-   "fieldname": "leave_application",
-   "fieldtype": "Link",
-   "label": "Leave Application",
-   "no_copy": 1,
-   "options": "Leave Application",
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break0",
-   "fieldtype": "Column Break",
-   "oldfieldtype": "Column Break",
-   "width": "50%"
-  },
-  {
-   "fieldname": "attendance_date",
-   "fieldtype": "Date",
-   "in_list_view": 1,
-   "label": "Attendance Date",
-   "oldfieldname": "attendance_date",
-   "oldfieldtype": "Date",
-   "reqd": 1
-  },
-  {
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "label": "Company",
-   "oldfieldname": "company",
-   "oldfieldtype": "Link",
-   "options": "Company",
-   "remember_last_selected_value": 1,
-   "reqd": 1
-  },
-  {
-   "fetch_from": "employee.department",
-   "fieldname": "department",
-   "fieldtype": "Link",
-   "label": "Department",
-   "options": "Department",
-   "read_only": 1
-  },
-  {
-   "fieldname": "shift",
-   "fieldtype": "Link",
-   "label": "Shift",
-   "options": "Shift Type"
-  },
-  {
-   "fieldname": "attendance_request",
-   "fieldtype": "Link",
-   "label": "Attendance Request",
-   "options": "Attendance Request",
-   "read_only": 1
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "ignore_user_permissions": 1,
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "Attendance",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "default": "0",
-   "fieldname": "late_entry",
-   "fieldtype": "Check",
-   "label": "Late Entry"
-  },
-  {
-   "default": "0",
-   "fieldname": "early_exit",
-   "fieldtype": "Check",
-   "label": "Early Exit"
-  },
-  {
-   "fieldname": "details_section",
-   "fieldtype": "Section Break",
-   "label": "Details"
-  },
-  {
-   "depends_on": "shift",
-   "fieldname": "in_time",
-   "fieldtype": "Datetime",
-   "label": "In Time",
-   "read_only": 1
-  },
-  {
-   "depends_on": "shift",
-   "fieldname": "out_time",
-   "fieldtype": "Datetime",
-   "label": "Out Time",
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break_18",
-   "fieldtype": "Column Break"
-  }
- ],
- "icon": "fa fa-ok",
- "idx": 1,
- "is_submittable": 1,
- "links": [],
- "modified": "2020-09-18 17:26:09.703215",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Attendance",
- "owner": "Administrator",
- "permissions": [
-  {
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "import": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  }
- ],
- "search_fields": "employee,employee_name,attendance_date,status",
- "sort_field": "modified",
- "sort_order": "DESC",
- "title_field": "employee_name"
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/attendance/attendance.py b/erpnext/hr/doctype/attendance/attendance.py
deleted file mode 100644
index f3cae80..0000000
--- a/erpnext/hr/doctype/attendance/attendance.py
+++ /dev/null
@@ -1,390 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.query_builder import Criterion
-from frappe.utils import cint, cstr, formatdate, get_datetime, get_link_to_form, getdate, nowdate
-
-from erpnext.hr.doctype.shift_assignment.shift_assignment import has_overlapping_timings
-from erpnext.hr.utils import get_holiday_dates_for_employee, validate_active_employee
-
-
-class DuplicateAttendanceError(frappe.ValidationError):
-	pass
-
-
-class OverlappingShiftAttendanceError(frappe.ValidationError):
-	pass
-
-
-class Attendance(Document):
-	def validate(self):
-		from erpnext.controllers.status_updater import validate_status
-
-		validate_status(self.status, ["Present", "Absent", "On Leave", "Half Day", "Work From Home"])
-		validate_active_employee(self.employee)
-		self.validate_attendance_date()
-		self.validate_duplicate_record()
-		self.validate_overlapping_shift_attendance()
-		self.validate_employee_status()
-		self.check_leave_record()
-
-	def on_cancel(self):
-		self.unlink_attendance_from_checkins()
-
-	def validate_attendance_date(self):
-		date_of_joining = frappe.db.get_value("Employee", self.employee, "date_of_joining")
-
-		# leaves can be marked for future dates
-		if (
-			self.status != "On Leave"
-			and not self.leave_application
-			and getdate(self.attendance_date) > getdate(nowdate())
-		):
-			frappe.throw(_("Attendance can not be marked for future dates"))
-		elif date_of_joining and getdate(self.attendance_date) < getdate(date_of_joining):
-			frappe.throw(_("Attendance date can not be less than employee's joining date"))
-
-	def validate_duplicate_record(self):
-		duplicate = get_duplicate_attendance_record(
-			self.employee, self.attendance_date, self.shift, self.name
-		)
-
-		if duplicate:
-			frappe.throw(
-				_("Attendance for employee {0} is already marked for the date {1}: {2}").format(
-					frappe.bold(self.employee),
-					frappe.bold(self.attendance_date),
-					get_link_to_form("Attendance", duplicate[0].name),
-				),
-				title=_("Duplicate Attendance"),
-				exc=DuplicateAttendanceError,
-			)
-
-	def validate_overlapping_shift_attendance(self):
-		attendance = get_overlapping_shift_attendance(
-			self.employee, self.attendance_date, self.shift, self.name
-		)
-
-		if attendance:
-			frappe.throw(
-				_("Attendance for employee {0} is already marked for an overlapping shift {1}: {2}").format(
-					frappe.bold(self.employee),
-					frappe.bold(attendance.shift),
-					get_link_to_form("Attendance", attendance.name),
-				),
-				title=_("Overlapping Shift Attendance"),
-				exc=OverlappingShiftAttendanceError,
-			)
-
-	def validate_employee_status(self):
-		if frappe.db.get_value("Employee", self.employee, "status") == "Inactive":
-			frappe.throw(_("Cannot mark attendance for an Inactive employee {0}").format(self.employee))
-
-	def check_leave_record(self):
-		leave_record = frappe.db.sql(
-			"""
-			select leave_type, half_day, half_day_date
-			from `tabLeave Application`
-			where employee = %s
-				and %s between from_date and to_date
-				and status = 'Approved'
-				and docstatus = 1
-		""",
-			(self.employee, self.attendance_date),
-			as_dict=True,
-		)
-		if leave_record:
-			for d in leave_record:
-				self.leave_type = d.leave_type
-				if d.half_day_date == getdate(self.attendance_date):
-					self.status = "Half Day"
-					frappe.msgprint(
-						_("Employee {0} on Half day on {1}").format(self.employee, formatdate(self.attendance_date))
-					)
-				else:
-					self.status = "On Leave"
-					frappe.msgprint(
-						_("Employee {0} is on Leave on {1}").format(self.employee, formatdate(self.attendance_date))
-					)
-
-		if self.status in ("On Leave", "Half Day"):
-			if not leave_record:
-				frappe.msgprint(
-					_("No leave record found for employee {0} on {1}").format(
-						self.employee, formatdate(self.attendance_date)
-					),
-					alert=1,
-				)
-		elif self.leave_type:
-			self.leave_type = None
-			self.leave_application = None
-
-	def validate_employee(self):
-		emp = frappe.db.sql(
-			"select name from `tabEmployee` where name = %s and status = 'Active'", self.employee
-		)
-		if not emp:
-			frappe.throw(_("Employee {0} is not active or does not exist").format(self.employee))
-
-	def unlink_attendance_from_checkins(self):
-		EmployeeCheckin = frappe.qb.DocType("Employee Checkin")
-		linked_logs = (
-			frappe.qb.from_(EmployeeCheckin)
-			.select(EmployeeCheckin.name)
-			.where(EmployeeCheckin.attendance == self.name)
-			.for_update()
-			.run(as_dict=True)
-		)
-
-		if linked_logs:
-			(
-				frappe.qb.update(EmployeeCheckin)
-				.set("attendance", "")
-				.where(EmployeeCheckin.attendance == self.name)
-			).run()
-
-			frappe.msgprint(
-				msg=_("Unlinked Attendance record from Employee Checkins: {}").format(
-					", ".join(get_link_to_form("Employee Checkin", log.name) for log in linked_logs)
-				),
-				title=_("Unlinked logs"),
-				indicator="blue",
-				is_minimizable=True,
-				wide=True,
-			)
-
-
-def get_duplicate_attendance_record(employee, attendance_date, shift, name=None):
-	attendance = frappe.qb.DocType("Attendance")
-	query = (
-		frappe.qb.from_(attendance)
-		.select(attendance.name)
-		.where((attendance.employee == employee) & (attendance.docstatus < 2))
-	)
-
-	if shift:
-		query = query.where(
-			Criterion.any(
-				[
-					Criterion.all(
-						[
-							((attendance.shift.isnull()) | (attendance.shift == "")),
-							(attendance.attendance_date == attendance_date),
-						]
-					),
-					Criterion.all(
-						[
-							((attendance.shift.isnotnull()) | (attendance.shift != "")),
-							(attendance.attendance_date == attendance_date),
-							(attendance.shift == shift),
-						]
-					),
-				]
-			)
-		)
-	else:
-		query = query.where((attendance.attendance_date == attendance_date))
-
-	if name:
-		query = query.where(attendance.name != name)
-
-	return query.run(as_dict=True)
-
-
-def get_overlapping_shift_attendance(employee, attendance_date, shift, name=None):
-	if not shift:
-		return {}
-
-	attendance = frappe.qb.DocType("Attendance")
-	query = (
-		frappe.qb.from_(attendance)
-		.select(attendance.name, attendance.shift)
-		.where(
-			(attendance.employee == employee)
-			& (attendance.docstatus < 2)
-			& (attendance.attendance_date == attendance_date)
-			& (attendance.shift != shift)
-		)
-	)
-
-	if name:
-		query = query.where(attendance.name != name)
-
-	overlapping_attendance = query.run(as_dict=True)
-
-	if overlapping_attendance and has_overlapping_timings(shift, overlapping_attendance[0].shift):
-		return overlapping_attendance[0]
-	return {}
-
-
-@frappe.whitelist()
-def get_events(start, end, filters=None):
-	events = []
-
-	employee = frappe.db.get_value("Employee", {"user_id": frappe.session.user})
-
-	if not employee:
-		return events
-
-	from frappe.desk.reportview import get_filters_cond
-
-	conditions = get_filters_cond("Attendance", filters, [])
-	add_attendance(events, start, end, conditions=conditions)
-	return events
-
-
-def add_attendance(events, start, end, conditions=None):
-	query = """select name, attendance_date, status
-		from `tabAttendance` where
-		attendance_date between %(from_date)s and %(to_date)s
-		and docstatus < 2"""
-	if conditions:
-		query += conditions
-
-	for d in frappe.db.sql(query, {"from_date": start, "to_date": end}, as_dict=True):
-		e = {
-			"name": d.name,
-			"doctype": "Attendance",
-			"start": d.attendance_date,
-			"end": d.attendance_date,
-			"title": cstr(d.status),
-			"docstatus": d.docstatus,
-		}
-		if e not in events:
-			events.append(e)
-
-
-def mark_attendance(
-	employee,
-	attendance_date,
-	status,
-	shift=None,
-	leave_type=None,
-	ignore_validate=False,
-	late_entry=False,
-	early_exit=False,
-):
-	if get_duplicate_attendance_record(employee, attendance_date, shift):
-		return
-
-	if get_overlapping_shift_attendance(employee, attendance_date, shift):
-		return
-
-	company = frappe.db.get_value("Employee", employee, "company")
-	attendance = frappe.get_doc(
-		{
-			"doctype": "Attendance",
-			"employee": employee,
-			"attendance_date": attendance_date,
-			"status": status,
-			"company": company,
-			"shift": shift,
-			"leave_type": leave_type,
-			"late_entry": late_entry,
-			"early_exit": early_exit,
-		}
-	)
-	attendance.flags.ignore_validate = ignore_validate
-	attendance.insert()
-	attendance.submit()
-	return attendance.name
-
-
-@frappe.whitelist()
-def mark_bulk_attendance(data):
-	import json
-
-	if isinstance(data, str):
-		data = json.loads(data)
-	data = frappe._dict(data)
-	company = frappe.get_value("Employee", data.employee, "company")
-	if not data.unmarked_days:
-		frappe.throw(_("Please select a date."))
-		return
-
-	for date in data.unmarked_days:
-		doc_dict = {
-			"doctype": "Attendance",
-			"employee": data.employee,
-			"attendance_date": get_datetime(date),
-			"status": data.status,
-			"company": company,
-		}
-		attendance = frappe.get_doc(doc_dict).insert()
-		attendance.submit()
-
-
-def get_month_map():
-	return frappe._dict(
-		{
-			"January": 1,
-			"February": 2,
-			"March": 3,
-			"April": 4,
-			"May": 5,
-			"June": 6,
-			"July": 7,
-			"August": 8,
-			"September": 9,
-			"October": 10,
-			"November": 11,
-			"December": 12,
-		}
-	)
-
-
-@frappe.whitelist()
-def get_unmarked_days(employee, month, exclude_holidays=0):
-	import calendar
-
-	month_map = get_month_map()
-	today = get_datetime()
-
-	joining_date, relieving_date = frappe.get_cached_value(
-		"Employee", employee, ["date_of_joining", "relieving_date"]
-	)
-	start_day = 1
-	end_day = calendar.monthrange(today.year, month_map[month])[1] + 1
-
-	if joining_date and joining_date.month == month_map[month]:
-		start_day = joining_date.day
-
-	if relieving_date and relieving_date.month == month_map[month]:
-		end_day = relieving_date.day + 1
-
-	dates_of_month = [
-		"{}-{}-{}".format(today.year, month_map[month], r) for r in range(start_day, end_day)
-	]
-	month_start, month_end = dates_of_month[0], dates_of_month[-1]
-
-	records = frappe.get_all(
-		"Attendance",
-		fields=["attendance_date", "employee"],
-		filters=[
-			["attendance_date", ">=", month_start],
-			["attendance_date", "<=", month_end],
-			["employee", "=", employee],
-			["docstatus", "!=", 2],
-		],
-	)
-
-	marked_days = [get_datetime(record.attendance_date) for record in records]
-	if cint(exclude_holidays):
-		holiday_dates = get_holiday_dates_for_employee(employee, month_start, month_end)
-		holidays = [get_datetime(record) for record in holiday_dates]
-		marked_days.extend(holidays)
-
-	unmarked_days = []
-
-	for date in dates_of_month:
-		date_time = get_datetime(date)
-		if today.day <= date_time.day and today.month <= date_time.month:
-			break
-		if date_time not in marked_days:
-			unmarked_days.append(date)
-
-	return unmarked_days
diff --git a/erpnext/hr/doctype/attendance/attendance_calendar.js b/erpnext/hr/doctype/attendance/attendance_calendar.js
deleted file mode 100644
index d9f6d2e..0000000
--- a/erpnext/hr/doctype/attendance/attendance_calendar.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-frappe.views.calendar["Attendance"] = {
-	options: {
-		header: {
-			left: 'prev,next today',
-			center: 'title',
-			right: 'month'
-		}
-	},
-	get_events_method: "erpnext.hr.doctype.attendance.attendance.get_events"
-};
diff --git a/erpnext/hr/doctype/attendance/attendance_dashboard.py b/erpnext/hr/doctype/attendance/attendance_dashboard.py
deleted file mode 100644
index abed78f..0000000
--- a/erpnext/hr/doctype/attendance/attendance_dashboard.py
+++ /dev/null
@@ -1,2 +0,0 @@
-def get_data():
-	return {"fieldname": "attendance", "transactions": [{"label": "", "items": ["Employee Checkin"]}]}
diff --git a/erpnext/hr/doctype/attendance/attendance_list.js b/erpnext/hr/doctype/attendance/attendance_list.js
deleted file mode 100644
index 3a5c591..0000000
--- a/erpnext/hr/doctype/attendance/attendance_list.js
+++ /dev/null
@@ -1,164 +0,0 @@
-frappe.listview_settings['Attendance'] = {
-	add_fields: ["status", "attendance_date"],
-	get_indicator: function (doc) {
-		if (["Present", "Work From Home"].includes(doc.status)) {
-			return [__(doc.status), "green", "status,=," + doc.status];
-		} else if (["Absent", "On Leave"].includes(doc.status)) {
-			return [__(doc.status), "red", "status,=," + doc.status];
-		} else if (doc.status == "Half Day") {
-			return [__(doc.status), "orange", "status,=," + doc.status];
-		}
-	},
-
-	onload: function(list_view) {
-		let me = this;
-		const months = moment.months();
-		list_view.page.add_inner_button(__("Mark Attendance"), function() {
-			let dialog = new frappe.ui.Dialog({
-				title: __("Mark Attendance"),
-				fields: [{
-					fieldname: 'employee',
-					label: __('For Employee'),
-					fieldtype: 'Link',
-					options: 'Employee',
-					get_query: () => {
-						return {query: "erpnext.controllers.queries.employee_query"};
-					},
-					reqd: 1,
-					onchange: function() {
-						dialog.set_df_property("unmarked_days", "hidden", 1);
-						dialog.set_df_property("status", "hidden", 1);
-						dialog.set_df_property("exclude_holidays", "hidden", 1);
-						dialog.set_df_property("month", "value", '');
-						dialog.set_df_property("unmarked_days", "options", []);
-						dialog.no_unmarked_days_left = false;
-					}
-				},
-				{
-					label: __("For Month"),
-					fieldtype: "Select",
-					fieldname: "month",
-					options: months,
-					reqd: 1,
-					onchange: function() {
-						if (dialog.fields_dict.employee.value && dialog.fields_dict.month.value) {
-							dialog.set_df_property("status", "hidden", 0);
-							dialog.set_df_property("exclude_holidays", "hidden", 0);
-							dialog.set_df_property("unmarked_days", "options", []);
-							dialog.no_unmarked_days_left = false;
-							me.get_multi_select_options(
-								dialog.fields_dict.employee.value,
-								dialog.fields_dict.month.value,
-								dialog.fields_dict.exclude_holidays.get_value()
-							).then(options => {
-								if (options.length > 0) {
-									dialog.set_df_property("unmarked_days", "hidden", 0);
-									dialog.set_df_property("unmarked_days", "options", options);
-								} else {
-									dialog.no_unmarked_days_left = true;
-								}
-							});
-						}
-					}
-				},
-				{
-					label: __("Status"),
-					fieldtype: "Select",
-					fieldname: "status",
-					options: ["Present", "Absent", "Half Day", "Work From Home"],
-					hidden: 1,
-					reqd: 1,
-
-				},
-				{
-					label: __("Exclude Holidays"),
-					fieldtype: "Check",
-					fieldname: "exclude_holidays",
-					hidden: 1,
-					onchange: function() {
-						if (dialog.fields_dict.employee.value && dialog.fields_dict.month.value) {
-							dialog.set_df_property("status", "hidden", 0);
-							dialog.set_df_property("unmarked_days", "options", []);
-							dialog.no_unmarked_days_left = false;
-							me.get_multi_select_options(
-								dialog.fields_dict.employee.value,
-								dialog.fields_dict.month.value,
-								dialog.fields_dict.exclude_holidays.get_value()
-							).then(options => {
-								if (options.length > 0) {
-									dialog.set_df_property("unmarked_days", "hidden", 0);
-									dialog.set_df_property("unmarked_days", "options", options);
-								} else {
-									dialog.no_unmarked_days_left = true;
-								}
-							});
-						}
-					}
-				},
-				{
-					label: __("Unmarked Attendance for days"),
-					fieldname: "unmarked_days",
-					fieldtype: "MultiCheck",
-					options: [],
-					columns: 2,
-					hidden: 1
-				}],
-				primary_action(data) {
-					if (cur_dialog.no_unmarked_days_left) {
-						frappe.msgprint(__("Attendance for the month of {0} , has already been marked for the Employee {1}",
-							[dialog.fields_dict.month.value, dialog.fields_dict.employee.value]));
-					} else {
-						frappe.confirm(__('Mark attendance as {0} for {1} on selected dates?', [data.status, data.month]), () => {
-							frappe.call({
-								method: "erpnext.hr.doctype.attendance.attendance.mark_bulk_attendance",
-								args: {
-									data: data
-								},
-								callback: function (r) {
-									if (r.message === 1) {
-										frappe.show_alert({
-											message: __("Attendance Marked"),
-											indicator: 'blue'
-										});
-										cur_dialog.hide();
-									}
-								}
-							});
-						});
-					}
-					dialog.hide();
-					list_view.refresh();
-				},
-				primary_action_label: __('Mark Attendance')
-
-			});
-			dialog.show();
-		});
-	},
-
-	get_multi_select_options: function(employee, month, exclude_holidays) {
-		return new Promise(resolve => {
-			frappe.call({
-				method: 'erpnext.hr.doctype.attendance.attendance.get_unmarked_days',
-				async: false,
-				args: {
-					employee: employee,
-					month: month,
-					exclude_holidays: exclude_holidays
-				}
-			}).then(r => {
-				var options = [];
-				for (var d in r.message) {
-					var momentObj = moment(r.message[d], 'YYYY-MM-DD');
-					var date = momentObj.format('DD-MM-YYYY');
-					options.push({
-						"label": date,
-						"value": r.message[d],
-						"checked": 1
-					});
-				}
-				resolve(options);
-			});
-		});
-	}
-};
diff --git a/erpnext/hr/doctype/attendance/test_attendance.py b/erpnext/hr/doctype/attendance/test_attendance.py
deleted file mode 100644
index c85ec65..0000000
--- a/erpnext/hr/doctype/attendance/test_attendance.py
+++ /dev/null
@@ -1,232 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and Contributors
-# See license.txt
-
-import frappe
-from frappe.tests.utils import FrappeTestCase
-from frappe.utils import (
-	add_days,
-	add_months,
-	get_last_day,
-	get_year_ending,
-	get_year_start,
-	getdate,
-	nowdate,
-)
-
-from erpnext.hr.doctype.attendance.attendance import (
-	DuplicateAttendanceError,
-	OverlappingShiftAttendanceError,
-	get_month_map,
-	get_unmarked_days,
-	mark_attendance,
-)
-from erpnext.hr.doctype.employee.test_employee import make_employee
-from erpnext.hr.doctype.leave_application.test_leave_application import get_first_sunday
-
-test_records = frappe.get_test_records("Attendance")
-
-
-class TestAttendance(FrappeTestCase):
-	def setUp(self):
-		from erpnext.payroll.doctype.salary_slip.test_salary_slip import make_holiday_list
-
-		from_date = get_year_start(getdate())
-		to_date = get_year_ending(getdate())
-		self.holiday_list = make_holiday_list(from_date=from_date, to_date=to_date)
-		frappe.db.delete("Attendance")
-
-	def test_duplicate_attendance(self):
-		employee = make_employee("test_duplicate_attendance@example.com", company="_Test Company")
-		date = nowdate()
-
-		mark_attendance(employee, date, "Present")
-		attendance = frappe.get_doc(
-			{
-				"doctype": "Attendance",
-				"employee": employee,
-				"attendance_date": date,
-				"status": "Absent",
-				"company": "_Test Company",
-			}
-		)
-
-		self.assertRaises(DuplicateAttendanceError, attendance.insert)
-
-	def test_duplicate_attendance_with_shift(self):
-		from erpnext.hr.doctype.shift_type.test_shift_type import setup_shift_type
-
-		employee = make_employee("test_duplicate_attendance@example.com", company="_Test Company")
-		date = nowdate()
-
-		shift_1 = setup_shift_type(shift_type="Shift 1", start_time="08:00:00", end_time="10:00:00")
-		mark_attendance(employee, date, "Present", shift=shift_1.name)
-
-		# attendance record with shift
-		attendance = frappe.get_doc(
-			{
-				"doctype": "Attendance",
-				"employee": employee,
-				"attendance_date": date,
-				"status": "Absent",
-				"company": "_Test Company",
-				"shift": shift_1.name,
-			}
-		)
-
-		self.assertRaises(DuplicateAttendanceError, attendance.insert)
-
-		# attendance record without any shift
-		attendance = frappe.get_doc(
-			{
-				"doctype": "Attendance",
-				"employee": employee,
-				"attendance_date": date,
-				"status": "Absent",
-				"company": "_Test Company",
-			}
-		)
-
-		self.assertRaises(DuplicateAttendanceError, attendance.insert)
-
-	def test_overlapping_shift_attendance_validation(self):
-		from erpnext.hr.doctype.shift_type.test_shift_type import setup_shift_type
-
-		employee = make_employee("test_overlap_attendance@example.com", company="_Test Company")
-		date = nowdate()
-
-		shift_1 = setup_shift_type(shift_type="Shift 1", start_time="08:00:00", end_time="10:00:00")
-		shift_2 = setup_shift_type(shift_type="Shift 2", start_time="09:30:00", end_time="11:00:00")
-
-		mark_attendance(employee, date, "Present", shift=shift_1.name)
-
-		# attendance record with overlapping shift
-		attendance = frappe.get_doc(
-			{
-				"doctype": "Attendance",
-				"employee": employee,
-				"attendance_date": date,
-				"status": "Absent",
-				"company": "_Test Company",
-				"shift": shift_2.name,
-			}
-		)
-
-		self.assertRaises(OverlappingShiftAttendanceError, attendance.insert)
-
-	def test_allow_attendance_with_different_shifts(self):
-		# allows attendance with 2 different non-overlapping shifts
-		from erpnext.hr.doctype.shift_type.test_shift_type import setup_shift_type
-
-		employee = make_employee("test_duplicate_attendance@example.com", company="_Test Company")
-		date = nowdate()
-
-		shift_1 = setup_shift_type(shift_type="Shift 1", start_time="08:00:00", end_time="10:00:00")
-		shift_2 = setup_shift_type(shift_type="Shift 2", start_time="11:00:00", end_time="12:00:00")
-
-		mark_attendance(employee, date, "Present", shift_1.name)
-		frappe.get_doc(
-			{
-				"doctype": "Attendance",
-				"employee": employee,
-				"attendance_date": date,
-				"status": "Absent",
-				"company": "_Test Company",
-				"shift": shift_2.name,
-			}
-		).insert()
-
-	def test_mark_absent(self):
-		employee = make_employee("test_mark_absent@example.com")
-		date = nowdate()
-
-		attendance = mark_attendance(employee, date, "Absent")
-		fetch_attendance = frappe.get_value(
-			"Attendance", {"employee": employee, "attendance_date": date, "status": "Absent"}
-		)
-		self.assertEqual(attendance, fetch_attendance)
-
-	def test_unmarked_days(self):
-		first_sunday = get_first_sunday(
-			self.holiday_list, for_date=get_last_day(add_months(getdate(), -1))
-		)
-		attendance_date = add_days(first_sunday, 1)
-
-		employee = make_employee(
-			"test_unmarked_days@example.com", date_of_joining=add_days(attendance_date, -1)
-		)
-		frappe.db.set_value("Employee", employee, "holiday_list", self.holiday_list)
-
-		mark_attendance(employee, attendance_date, "Present")
-		month_name = get_month_name(attendance_date)
-
-		unmarked_days = get_unmarked_days(employee, month_name)
-		unmarked_days = [getdate(date) for date in unmarked_days]
-
-		# attendance already marked for the day
-		self.assertNotIn(attendance_date, unmarked_days)
-		# attendance unmarked
-		self.assertIn(getdate(add_days(attendance_date, 1)), unmarked_days)
-		# holiday considered in unmarked days
-		self.assertIn(first_sunday, unmarked_days)
-
-	def test_unmarked_days_excluding_holidays(self):
-		first_sunday = get_first_sunday(
-			self.holiday_list, for_date=get_last_day(add_months(getdate(), -1))
-		)
-		attendance_date = add_days(first_sunday, 1)
-
-		employee = make_employee(
-			"test_unmarked_days@example.com", date_of_joining=add_days(attendance_date, -1)
-		)
-		frappe.db.set_value("Employee", employee, "holiday_list", self.holiday_list)
-
-		mark_attendance(employee, attendance_date, "Present")
-		month_name = get_month_name(attendance_date)
-
-		unmarked_days = get_unmarked_days(employee, month_name, exclude_holidays=True)
-		unmarked_days = [getdate(date) for date in unmarked_days]
-
-		# attendance already marked for the day
-		self.assertNotIn(attendance_date, unmarked_days)
-		# attendance unmarked
-		self.assertIn(getdate(add_days(attendance_date, 1)), unmarked_days)
-		# holidays not considered in unmarked days
-		self.assertNotIn(first_sunday, unmarked_days)
-
-	def test_unmarked_days_as_per_joining_and_relieving_dates(self):
-		first_sunday = get_first_sunday(
-			self.holiday_list, for_date=get_last_day(add_months(getdate(), -1))
-		)
-		date = add_days(first_sunday, 1)
-
-		doj = add_days(date, 1)
-		relieving_date = add_days(date, 5)
-		employee = make_employee(
-			"test_unmarked_days_as_per_doj@example.com", date_of_joining=doj, relieving_date=relieving_date
-		)
-
-		frappe.db.set_value("Employee", employee, "holiday_list", self.holiday_list)
-
-		attendance_date = add_days(date, 2)
-		mark_attendance(employee, attendance_date, "Present")
-		month_name = get_month_name(attendance_date)
-
-		unmarked_days = get_unmarked_days(employee, month_name)
-		unmarked_days = [getdate(date) for date in unmarked_days]
-
-		# attendance already marked for the day
-		self.assertNotIn(attendance_date, unmarked_days)
-		# date before doj not in unmarked days
-		self.assertNotIn(add_days(doj, -1), unmarked_days)
-		# date after relieving not in unmarked days
-		self.assertNotIn(add_days(relieving_date, 1), unmarked_days)
-
-	def tearDown(self):
-		frappe.db.rollback()
-
-
-def get_month_name(date):
-	month_number = date.month
-	for month, number in get_month_map().items():
-		if number == month_number:
-			return month
diff --git a/erpnext/hr/doctype/attendance/test_records.json b/erpnext/hr/doctype/attendance/test_records.json
deleted file mode 100644
index 096f95c..0000000
--- a/erpnext/hr/doctype/attendance/test_records.json
+++ /dev/null
@@ -1,10 +0,0 @@
-[
-	{
-		"doctype": "Attendance",
-		"name": "_Test Attendance 1",
-		"employee": "_T-Employee-00001",
-		"status": "Present",
-		"attendance_date": "2014-02-01",
-		"company": "_Test Company"
-	}
-]
diff --git a/erpnext/hr/doctype/attendance_request/__init__.py b/erpnext/hr/doctype/attendance_request/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/attendance_request/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/attendance_request/attendance_request.js b/erpnext/hr/doctype/attendance_request/attendance_request.js
deleted file mode 100644
index 2d25d14..0000000
--- a/erpnext/hr/doctype/attendance_request/attendance_request.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-cur_frm.add_fetch('employee', 'company', 'company');
-
-frappe.ui.form.on('Attendance Request', {
-	half_day: function(frm) {
-		if(frm.doc.half_day == 1){
-			frm.set_df_property('half_day_date', 'reqd', true);
-		}
-		else{
-			frm.set_df_property('half_day_date', 'reqd', false);
-		}
-	}
-});
diff --git a/erpnext/hr/doctype/attendance_request/attendance_request.json b/erpnext/hr/doctype/attendance_request/attendance_request.json
deleted file mode 100644
index 837a878..0000000
--- a/erpnext/hr/doctype/attendance_request/attendance_request.json
+++ /dev/null
@@ -1,190 +0,0 @@
-{
- "actions": [],
- "allow_import": 1,
- "allow_rename": 1,
- "autoname": "HR-ARQ-.YY.-.MM.-.#####",
- "creation": "2018-04-13 15:37:40.918990",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "employee",
-  "employee_name",
-  "department",
-  "column_break_5",
-  "company",
-  "from_date",
-  "to_date",
-  "half_day",
-  "half_day_date",
-  "reason_section",
-  "reason",
-  "column_break_4",
-  "explanation",
-  "amended_from"
- ],
- "fields": [
-  {
-   "fieldname": "employee",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Employee",
-   "options": "Employee",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "employee.employee_name",
-   "fieldname": "employee_name",
-   "fieldtype": "Data",
-   "label": "Employee Name",
-   "read_only": 1
-  },
-  {
-   "fetch_from": "employee.department",
-   "fieldname": "department",
-   "fieldtype": "Link",
-   "label": "Department",
-   "options": "Department",
-   "read_only": 1
-  },
-  {
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "label": "Company",
-   "options": "Company",
-   "remember_last_selected_value": 1,
-   "reqd": 1
-  },
-  {
-   "fieldname": "column_break_5",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "from_date",
-   "fieldtype": "Date",
-   "in_list_view": 1,
-   "label": "From Date",
-   "reqd": 1
-  },
-  {
-   "fieldname": "to_date",
-   "fieldtype": "Date",
-   "in_list_view": 1,
-   "label": "To Date",
-   "reqd": 1
-  },
-  {
-   "default": "0",
-   "fieldname": "half_day",
-   "fieldtype": "Check",
-   "label": "Half Day"
-  },
-  {
-   "depends_on": "half_day",
-   "fieldname": "half_day_date",
-   "fieldtype": "Date",
-   "label": "Half Day Date"
-  },
-  {
-   "fieldname": "reason_section",
-   "fieldtype": "Section Break",
-   "label": "Reason"
-  },
-  {
-   "fieldname": "reason",
-   "fieldtype": "Select",
-   "in_list_view": 1,
-   "label": "Reason",
-   "options": "Work From Home\nOn Duty",
-   "reqd": 1
-  },
-  {
-   "fieldname": "column_break_4",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "explanation",
-   "fieldtype": "Small Text",
-   "label": "Explanation"
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "Attendance Request",
-   "print_hide": 1,
-   "read_only": 1
-  }
- ],
- "is_submittable": 1,
- "links": [],
- "modified": "2019-12-16 11:49:26.943173",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Attendance Request",
- "owner": "Administrator",
- "permissions": [
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "Employee",
-   "share": 1,
-   "write": 1
-  }
- ],
- "sort_field": "modified",
- "sort_order": "DESC",
- "title_field": "employee_name",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/attendance_request/attendance_request.py b/erpnext/hr/doctype/attendance_request/attendance_request.py
deleted file mode 100644
index 78652f6..0000000
--- a/erpnext/hr/doctype/attendance_request/attendance_request.py
+++ /dev/null
@@ -1,78 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.utils import add_days, date_diff, getdate
-
-from erpnext.hr.doctype.employee.employee import is_holiday
-from erpnext.hr.utils import validate_active_employee, validate_dates
-
-
-class AttendanceRequest(Document):
-	def validate(self):
-		validate_active_employee(self.employee)
-		validate_dates(self, self.from_date, self.to_date)
-		if self.half_day:
-			if not getdate(self.from_date) <= getdate(self.half_day_date) <= getdate(self.to_date):
-				frappe.throw(_("Half day date should be in between from date and to date"))
-
-	def on_submit(self):
-		self.create_attendance()
-
-	def on_cancel(self):
-		attendance_list = frappe.get_list(
-			"Attendance", {"employee": self.employee, "attendance_request": self.name}
-		)
-		if attendance_list:
-			for attendance in attendance_list:
-				attendance_obj = frappe.get_doc("Attendance", attendance["name"])
-				attendance_obj.cancel()
-
-	def create_attendance(self):
-		request_days = date_diff(self.to_date, self.from_date) + 1
-		for number in range(request_days):
-			attendance_date = add_days(self.from_date, number)
-			skip_attendance = self.validate_if_attendance_not_applicable(attendance_date)
-			if not skip_attendance:
-				attendance = frappe.new_doc("Attendance")
-				attendance.employee = self.employee
-				attendance.employee_name = self.employee_name
-				if self.half_day and date_diff(getdate(self.half_day_date), getdate(attendance_date)) == 0:
-					attendance.status = "Half Day"
-				elif self.reason == "Work From Home":
-					attendance.status = "Work From Home"
-				else:
-					attendance.status = "Present"
-				attendance.attendance_date = attendance_date
-				attendance.company = self.company
-				attendance.attendance_request = self.name
-				attendance.save(ignore_permissions=True)
-				attendance.submit()
-
-	def validate_if_attendance_not_applicable(self, attendance_date):
-		# Check if attendance_date is a Holiday
-		if is_holiday(self.employee, attendance_date):
-			frappe.msgprint(
-				_("Attendance not submitted for {0} as it is a Holiday.").format(attendance_date), alert=1
-			)
-			return True
-
-		# Check if employee on Leave
-		leave_record = frappe.db.sql(
-			"""select half_day from `tabLeave Application`
-			where employee = %s and %s between from_date and to_date
-			and docstatus = 1""",
-			(self.employee, attendance_date),
-			as_dict=True,
-		)
-		if leave_record:
-			frappe.msgprint(
-				_("Attendance not submitted for {0} as {1} on leave.").format(attendance_date, self.employee),
-				alert=1,
-			)
-			return True
-
-		return False
diff --git a/erpnext/hr/doctype/attendance_request/attendance_request_dashboard.py b/erpnext/hr/doctype/attendance_request/attendance_request_dashboard.py
deleted file mode 100644
index 059725c..0000000
--- a/erpnext/hr/doctype/attendance_request/attendance_request_dashboard.py
+++ /dev/null
@@ -1,2 +0,0 @@
-def get_data():
-	return {"fieldname": "attendance_request", "transactions": [{"items": ["Attendance"]}]}
diff --git a/erpnext/hr/doctype/attendance_request/test_attendance_request.py b/erpnext/hr/doctype/attendance_request/test_attendance_request.py
deleted file mode 100644
index ee436f5..0000000
--- a/erpnext/hr/doctype/attendance_request/test_attendance_request.py
+++ /dev/null
@@ -1,100 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-from datetime import date
-
-import frappe
-from frappe.utils import nowdate
-
-test_dependencies = ["Employee"]
-
-
-class TestAttendanceRequest(unittest.TestCase):
-	def setUp(self):
-		for doctype in ["Attendance Request", "Attendance"]:
-			frappe.db.sql("delete from `tab{doctype}`".format(doctype=doctype))
-
-	def tearDown(self):
-		frappe.db.rollback()
-
-	def test_on_duty_attendance_request(self):
-		"Test creation/updation of Attendace from Attendance Request, on duty."
-		today = nowdate()
-		employee = get_employee()
-		attendance_request = frappe.new_doc("Attendance Request")
-		attendance_request.employee = employee.name
-		attendance_request.from_date = date(date.today().year, 1, 1)
-		attendance_request.to_date = date(date.today().year, 1, 2)
-		attendance_request.reason = "On Duty"
-		attendance_request.company = "_Test Company"
-		attendance_request.insert()
-		attendance_request.submit()
-
-		attendance = frappe.db.get_value(
-			"Attendance",
-			filters={
-				"attendance_request": attendance_request.name,
-				"attendance_date": date(date.today().year, 1, 1),
-			},
-			fieldname=["status", "docstatus"],
-			as_dict=True,
-		)
-		self.assertEqual(attendance.status, "Present")
-		self.assertEqual(attendance.docstatus, 1)
-
-		# cancelling attendance request cancels linked attendances
-		attendance_request.cancel()
-
-		# cancellation alters docname
-		# fetch attendance value again to avoid stale docname
-		attendance_docstatus = frappe.db.get_value(
-			"Attendance",
-			filters={
-				"attendance_request": attendance_request.name,
-				"attendance_date": date(date.today().year, 1, 1),
-			},
-			fieldname="docstatus",
-		)
-		self.assertEqual(attendance_docstatus, 2)
-
-	def test_work_from_home_attendance_request(self):
-		"Test creation/updation of Attendace from Attendance Request, work from home."
-		today = nowdate()
-		employee = get_employee()
-		attendance_request = frappe.new_doc("Attendance Request")
-		attendance_request.employee = employee.name
-		attendance_request.from_date = date(date.today().year, 1, 1)
-		attendance_request.to_date = date(date.today().year, 1, 2)
-		attendance_request.reason = "Work From Home"
-		attendance_request.company = "_Test Company"
-		attendance_request.insert()
-		attendance_request.submit()
-
-		attendance_status = frappe.db.get_value(
-			"Attendance",
-			filters={
-				"attendance_request": attendance_request.name,
-				"attendance_date": date(date.today().year, 1, 1),
-			},
-			fieldname="status",
-		)
-		self.assertEqual(attendance_status, "Work From Home")
-
-		attendance_request.cancel()
-
-		# cancellation alters docname
-		# fetch attendance value again to avoid stale docname
-		attendance_docstatus = frappe.db.get_value(
-			"Attendance",
-			filters={
-				"attendance_request": attendance_request.name,
-				"attendance_date": date(date.today().year, 1, 1),
-			},
-			fieldname="docstatus",
-		)
-		self.assertEqual(attendance_docstatus, 2)
-
-
-def get_employee():
-	return frappe.get_doc("Employee", "_T-Employee-00001")
diff --git a/erpnext/hr/doctype/compensatory_leave_request/__init__.py b/erpnext/hr/doctype/compensatory_leave_request/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/compensatory_leave_request/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/compensatory_leave_request/compensatory_leave_request.js b/erpnext/hr/doctype/compensatory_leave_request/compensatory_leave_request.js
deleted file mode 100644
index 1baa1e0..0000000
--- a/erpnext/hr/doctype/compensatory_leave_request/compensatory_leave_request.js
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Compensatory Leave Request', {
-	refresh: function(frm) {
-		frm.set_query("leave_type", function() {
-			return {
-				filters: {
-					"is_compensatory": true
-				}
-			};
-		});
-	},
-	half_day: function(frm) {
-		if(frm.doc.half_day == 1){
-			frm.set_df_property('half_day_date', 'reqd', true);
-		}
-		else{
-			frm.set_df_property('half_day_date', 'reqd', false);
-		}
-	}
-});
diff --git a/erpnext/hr/doctype/compensatory_leave_request/compensatory_leave_request.json b/erpnext/hr/doctype/compensatory_leave_request/compensatory_leave_request.json
deleted file mode 100644
index 3c6374f..0000000
--- a/erpnext/hr/doctype/compensatory_leave_request/compensatory_leave_request.json
+++ /dev/null
@@ -1,575 +0,0 @@
-{
- "allow_copy": 0, 
- "allow_guest_to_view": 0, 
- "allow_import": 1, 
- "allow_rename": 0, 
- "autoname": "HR-CMP-.YY.-.MM.-.#####", 
- "beta": 0, 
- "creation": "2018-04-13 14:51:39.326768", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "", 
- "editable_grid": 1, 
- "engine": "InnoDB", 
- "fields": [
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "employee", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Employee", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Employee", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fetch_from": "employee.employee_name", 
-   "fieldname": "employee_name", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Employee Name", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fetch_from": "employee.department", 
-   "fieldname": "department", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Department", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Department", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "column_break_2", 
-   "fieldtype": "Column Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "leave_type", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Leave Type", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Leave Type", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "leave_allocation", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Leave Allocation", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Leave Allocation", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "worked_on", 
-   "fieldtype": "Section Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Worked On Holiday", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "work_from_date", 
-   "fieldtype": "Date", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Work From Date", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "work_end_date", 
-   "fieldtype": "Date", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Work End Date", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "half_day", 
-   "fieldtype": "Check", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Half Day", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "depends_on": "half_day", 
-   "fieldname": "half_day_date", 
-   "fieldtype": "Date", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Half Day Date", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "column_break_4", 
-   "fieldtype": "Column Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "reason", 
-   "fieldtype": "Small Text", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Reason", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "amended_from", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Amended From", 
-   "length": 0, 
-   "no_copy": 1, 
-   "options": "Compensatory Leave Request", 
-   "permlevel": 0, 
-   "print_hide": 1, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }
- ], 
- "has_web_view": 0, 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "image_view": 0, 
- "in_create": 0, 
- "is_submittable": 1, 
- "issingle": 0, 
- "istable": 0, 
- "max_attachments": 0, 
- "modified": "2018-08-21 16:15:36.266924", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Compensatory Leave Request", 
- "name_case": "", 
- "owner": "Administrator", 
- "permissions": [
-  {
-   "amend": 0, 
-   "cancel": 0, 
-   "create": 1, 
-   "delete": 1, 
-   "email": 1, 
-   "export": 1, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 1, 
-   "role": "System Manager", 
-   "set_user_permissions": 0, 
-   "share": 1, 
-   "submit": 0, 
-   "write": 1
-  }, 
-  {
-   "amend": 0, 
-   "cancel": 1, 
-   "create": 1, 
-   "delete": 1, 
-   "email": 1, 
-   "export": 1, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 1, 
-   "role": "HR Manager", 
-   "set_user_permissions": 0, 
-   "share": 1, 
-   "submit": 1, 
-   "write": 1
-  }, 
-  {
-   "amend": 0, 
-   "cancel": 0, 
-   "create": 1, 
-   "delete": 1, 
-   "email": 1, 
-   "export": 1, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 1, 
-   "role": "HR User", 
-   "set_user_permissions": 0, 
-   "share": 1, 
-   "submit": 1, 
-   "write": 1
-  }, 
-  {
-   "amend": 0, 
-   "cancel": 0, 
-   "create": 1, 
-   "delete": 1, 
-   "email": 1, 
-   "export": 1, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 1, 
-   "role": "Employee", 
-   "set_user_permissions": 0, 
-   "share": 1, 
-   "submit": 0, 
-   "write": 1
-  }
- ], 
- "quick_entry": 0, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "show_name_in_global_search": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "title_field": "employee_name", 
- "track_changes": 1, 
- "track_seen": 0, 
- "track_views": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/compensatory_leave_request/compensatory_leave_request.py b/erpnext/hr/doctype/compensatory_leave_request/compensatory_leave_request.py
deleted file mode 100644
index d233226..0000000
--- a/erpnext/hr/doctype/compensatory_leave_request/compensatory_leave_request.py
+++ /dev/null
@@ -1,155 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.utils import add_days, cint, date_diff, format_date, getdate
-
-from erpnext.hr.utils import (
-	create_additional_leave_ledger_entry,
-	get_holiday_dates_for_employee,
-	get_leave_period,
-	validate_active_employee,
-	validate_dates,
-	validate_overlap,
-)
-
-
-class CompensatoryLeaveRequest(Document):
-	def validate(self):
-		validate_active_employee(self.employee)
-		validate_dates(self, self.work_from_date, self.work_end_date)
-		if self.half_day:
-			if not self.half_day_date:
-				frappe.throw(_("Half Day Date is mandatory"))
-			if (
-				not getdate(self.work_from_date) <= getdate(self.half_day_date) <= getdate(self.work_end_date)
-			):
-				frappe.throw(_("Half Day Date should be in between Work From Date and Work End Date"))
-		validate_overlap(self, self.work_from_date, self.work_end_date)
-		self.validate_holidays()
-		self.validate_attendance()
-		if not self.leave_type:
-			frappe.throw(_("Leave Type is madatory"))
-
-	def validate_attendance(self):
-		attendance = frappe.get_all(
-			"Attendance",
-			filters={
-				"attendance_date": ["between", (self.work_from_date, self.work_end_date)],
-				"status": "Present",
-				"docstatus": 1,
-				"employee": self.employee,
-			},
-			fields=["attendance_date", "status"],
-		)
-
-		if len(attendance) < date_diff(self.work_end_date, self.work_from_date) + 1:
-			frappe.throw(_("You are not present all day(s) between compensatory leave request days"))
-
-	def validate_holidays(self):
-		holidays = get_holiday_dates_for_employee(self.employee, self.work_from_date, self.work_end_date)
-		if len(holidays) < date_diff(self.work_end_date, self.work_from_date) + 1:
-			if date_diff(self.work_end_date, self.work_from_date):
-				msg = _("The days between {0} to {1} are not valid holidays.").format(
-					frappe.bold(format_date(self.work_from_date)), frappe.bold(format_date(self.work_end_date))
-				)
-			else:
-				msg = _("{0} is not a holiday.").format(frappe.bold(format_date(self.work_from_date)))
-
-			frappe.throw(msg)
-
-	def on_submit(self):
-		company = frappe.db.get_value("Employee", self.employee, "company")
-		date_difference = date_diff(self.work_end_date, self.work_from_date) + 1
-		if self.half_day:
-			date_difference -= 0.5
-		leave_period = get_leave_period(self.work_from_date, self.work_end_date, company)
-		if leave_period:
-			leave_allocation = self.get_existing_allocation_for_period(leave_period)
-			if leave_allocation:
-				leave_allocation.new_leaves_allocated += date_difference
-				leave_allocation.validate()
-				leave_allocation.db_set("new_leaves_allocated", leave_allocation.total_leaves_allocated)
-				leave_allocation.db_set("total_leaves_allocated", leave_allocation.total_leaves_allocated)
-
-				# generate additional ledger entry for the new compensatory leaves off
-				create_additional_leave_ledger_entry(
-					leave_allocation, date_difference, add_days(self.work_end_date, 1)
-				)
-
-			else:
-				leave_allocation = self.create_leave_allocation(leave_period, date_difference)
-			self.db_set("leave_allocation", leave_allocation.name)
-		else:
-			frappe.throw(
-				_("There is no leave period in between {0} and {1}").format(
-					format_date(self.work_from_date), format_date(self.work_end_date)
-				)
-			)
-
-	def on_cancel(self):
-		if self.leave_allocation:
-			date_difference = date_diff(self.work_end_date, self.work_from_date) + 1
-			if self.half_day:
-				date_difference -= 0.5
-			leave_allocation = frappe.get_doc("Leave Allocation", self.leave_allocation)
-			if leave_allocation:
-				leave_allocation.new_leaves_allocated -= date_difference
-				if leave_allocation.new_leaves_allocated - date_difference <= 0:
-					leave_allocation.new_leaves_allocated = 0
-				leave_allocation.validate()
-				leave_allocation.db_set("new_leaves_allocated", leave_allocation.total_leaves_allocated)
-				leave_allocation.db_set("total_leaves_allocated", leave_allocation.total_leaves_allocated)
-
-				# create reverse entry on cancelation
-				create_additional_leave_ledger_entry(
-					leave_allocation, date_difference * -1, add_days(self.work_end_date, 1)
-				)
-
-	def get_existing_allocation_for_period(self, leave_period):
-		leave_allocation = frappe.db.sql(
-			"""
-			select name
-			from `tabLeave Allocation`
-			where employee=%(employee)s and leave_type=%(leave_type)s
-				and docstatus=1
-				and (from_date between %(from_date)s and %(to_date)s
-					or to_date between %(from_date)s and %(to_date)s
-					or (from_date < %(from_date)s and to_date > %(to_date)s))
-		""",
-			{
-				"from_date": leave_period[0].from_date,
-				"to_date": leave_period[0].to_date,
-				"employee": self.employee,
-				"leave_type": self.leave_type,
-			},
-			as_dict=1,
-		)
-
-		if leave_allocation:
-			return frappe.get_doc("Leave Allocation", leave_allocation[0].name)
-		else:
-			return False
-
-	def create_leave_allocation(self, leave_period, date_difference):
-		is_carry_forward = frappe.db.get_value("Leave Type", self.leave_type, "is_carry_forward")
-		allocation = frappe.get_doc(
-			dict(
-				doctype="Leave Allocation",
-				employee=self.employee,
-				employee_name=self.employee_name,
-				leave_type=self.leave_type,
-				from_date=add_days(self.work_end_date, 1),
-				to_date=leave_period[0].to_date,
-				carry_forward=cint(is_carry_forward),
-				new_leaves_allocated=date_difference,
-				total_leaves_allocated=date_difference,
-				description=self.reason,
-			)
-		)
-		allocation.insert(ignore_permissions=True)
-		allocation.submit()
-		return allocation
diff --git a/erpnext/hr/doctype/compensatory_leave_request/test_compensatory_leave_request.py b/erpnext/hr/doctype/compensatory_leave_request/test_compensatory_leave_request.py
deleted file mode 100644
index 7bbec29..0000000
--- a/erpnext/hr/doctype/compensatory_leave_request/test_compensatory_leave_request.py
+++ /dev/null
@@ -1,157 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-import frappe
-from frappe.utils import add_days, add_months, today
-
-from erpnext.hr.doctype.attendance_request.test_attendance_request import get_employee
-from erpnext.hr.doctype.leave_application.leave_application import get_leave_balance_on
-from erpnext.hr.doctype.leave_period.test_leave_period import create_leave_period
-
-test_dependencies = ["Employee"]
-
-
-class TestCompensatoryLeaveRequest(unittest.TestCase):
-	def setUp(self):
-		frappe.db.sql(""" delete from `tabCompensatory Leave Request`""")
-		frappe.db.sql(""" delete from `tabLeave Ledger Entry`""")
-		frappe.db.sql(""" delete from `tabLeave Allocation`""")
-		frappe.db.sql(
-			""" delete from `tabAttendance` where attendance_date in {0} """.format(
-				(today(), add_days(today(), -1))
-			)
-		)  # nosec
-		create_leave_period(add_months(today(), -3), add_months(today(), 3), "_Test Company")
-		create_holiday_list()
-
-		employee = get_employee()
-		employee.holiday_list = "_Test Compensatory Leave"
-		employee.save()
-
-	def test_leave_balance_on_submit(self):
-		"""check creation of leave allocation on submission of compensatory leave request"""
-		employee = get_employee()
-		mark_attendance(employee)
-		compensatory_leave_request = get_compensatory_leave_request(employee.name)
-
-		before = get_leave_balance_on(employee.name, compensatory_leave_request.leave_type, today())
-		compensatory_leave_request.submit()
-
-		self.assertEqual(
-			get_leave_balance_on(
-				employee.name, compensatory_leave_request.leave_type, add_days(today(), 1)
-			),
-			before + 1,
-		)
-
-	def test_leave_allocation_update_on_submit(self):
-		employee = get_employee()
-		mark_attendance(employee, date=add_days(today(), -1))
-		compensatory_leave_request = get_compensatory_leave_request(
-			employee.name, leave_date=add_days(today(), -1)
-		)
-		compensatory_leave_request.submit()
-
-		# leave allocation creation on submit
-		leaves_allocated = frappe.db.get_value(
-			"Leave Allocation",
-			{"name": compensatory_leave_request.leave_allocation},
-			["total_leaves_allocated"],
-		)
-		self.assertEqual(leaves_allocated, 1)
-
-		mark_attendance(employee)
-		compensatory_leave_request = get_compensatory_leave_request(employee.name)
-		compensatory_leave_request.submit()
-
-		# leave allocation updates on submission of second compensatory leave request
-		leaves_allocated = frappe.db.get_value(
-			"Leave Allocation",
-			{"name": compensatory_leave_request.leave_allocation},
-			["total_leaves_allocated"],
-		)
-		self.assertEqual(leaves_allocated, 2)
-
-	def test_creation_of_leave_ledger_entry_on_submit(self):
-		"""check creation of leave ledger entry on submission of leave request"""
-		employee = get_employee()
-		mark_attendance(employee)
-		compensatory_leave_request = get_compensatory_leave_request(employee.name)
-		compensatory_leave_request.submit()
-
-		filters = dict(transaction_name=compensatory_leave_request.leave_allocation)
-		leave_ledger_entry = frappe.get_all("Leave Ledger Entry", fields="*", filters=filters)
-
-		self.assertEqual(len(leave_ledger_entry), 1)
-		self.assertEqual(leave_ledger_entry[0].employee, compensatory_leave_request.employee)
-		self.assertEqual(leave_ledger_entry[0].leave_type, compensatory_leave_request.leave_type)
-		self.assertEqual(leave_ledger_entry[0].leaves, 1)
-
-		# check reverse leave ledger entry on cancellation
-		compensatory_leave_request.cancel()
-		leave_ledger_entry = frappe.get_all(
-			"Leave Ledger Entry", fields="*", filters=filters, order_by="creation desc"
-		)
-
-		self.assertEqual(len(leave_ledger_entry), 2)
-		self.assertEqual(leave_ledger_entry[0].employee, compensatory_leave_request.employee)
-		self.assertEqual(leave_ledger_entry[0].leave_type, compensatory_leave_request.leave_type)
-		self.assertEqual(leave_ledger_entry[0].leaves, -1)
-
-
-def get_compensatory_leave_request(employee, leave_date=today()):
-	prev_comp_leave_req = frappe.db.get_value(
-		"Compensatory Leave Request",
-		dict(
-			leave_type="Compensatory Off",
-			work_from_date=leave_date,
-			work_end_date=leave_date,
-			employee=employee,
-		),
-		"name",
-	)
-	if prev_comp_leave_req:
-		return frappe.get_doc("Compensatory Leave Request", prev_comp_leave_req)
-
-	return frappe.get_doc(
-		dict(
-			doctype="Compensatory Leave Request",
-			employee=employee,
-			leave_type="Compensatory Off",
-			work_from_date=leave_date,
-			work_end_date=leave_date,
-			reason="test",
-		)
-	).insert()
-
-
-def mark_attendance(employee, date=today(), status="Present"):
-	if not frappe.db.exists(
-		dict(doctype="Attendance", employee=employee.name, attendance_date=date, status="Present")
-	):
-		attendance = frappe.get_doc(
-			{"doctype": "Attendance", "employee": employee.name, "attendance_date": date, "status": status}
-		)
-		attendance.save()
-		attendance.submit()
-
-
-def create_holiday_list():
-	if frappe.db.exists("Holiday List", "_Test Compensatory Leave"):
-		return
-
-	holiday_list = frappe.get_doc(
-		{
-			"doctype": "Holiday List",
-			"from_date": add_months(today(), -3),
-			"to_date": add_months(today(), 3),
-			"holidays": [
-				{"description": "Test Holiday", "holiday_date": today()},
-				{"description": "Test Holiday 1", "holiday_date": add_days(today(), -1)},
-			],
-			"holiday_list_name": "_Test Compensatory Leave",
-		}
-	)
-	holiday_list.save()
diff --git a/erpnext/hr/doctype/daily_work_summary/__init__.py b/erpnext/hr/doctype/daily_work_summary/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/daily_work_summary/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/daily_work_summary/daily_work_summary.js b/erpnext/hr/doctype/daily_work_summary/daily_work_summary.js
deleted file mode 100644
index 8236480..0000000
--- a/erpnext/hr/doctype/daily_work_summary/daily_work_summary.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Daily Work Summary', {
-	refresh: function (frm) {
-
-	}
-});
diff --git a/erpnext/hr/doctype/daily_work_summary/daily_work_summary.json b/erpnext/hr/doctype/daily_work_summary/daily_work_summary.json
deleted file mode 100644
index 259416e..0000000
--- a/erpnext/hr/doctype/daily_work_summary/daily_work_summary.json
+++ /dev/null
@@ -1,175 +0,0 @@
-{
- "allow_copy": 0, 
- "allow_guest_to_view": 0, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "beta": 0, 
- "creation": "2016-11-08 04:58:20.001780", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "Document", 
- "editable_grid": 1, 
- "engine": "InnoDB", 
- "fields": [
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "daily_work_summary_group", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Daily Work Summary Group", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Daily Work Summary Group", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "default": "Open", 
-   "fieldname": "status", 
-   "fieldtype": "Select", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Status", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Open\nSent", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "email_sent_to", 
-   "fieldtype": "Code", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Email Sent To", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }
- ], 
- "has_web_view": 0, 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "image_view": 0, 
- "in_create": 1, 
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 0, 
- "max_attachments": 0, 
- "modified": "2018-02-16 11:02:06.727749", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Daily Work Summary", 
- "name_case": "", 
- "owner": "Administrator", 
- "permissions": [
-  {
-   "amend": 0, 
-   "apply_user_permissions": 0, 
-   "cancel": 0, 
-   "create": 0, 
-   "delete": 0, 
-   "email": 0, 
-   "export": 0, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 0, 
-   "read": 1, 
-   "report": 0, 
-   "role": "Employee", 
-   "set_user_permissions": 0, 
-   "share": 0, 
-   "submit": 0, 
-   "write": 0
-  }, 
-  {
-   "amend": 0, 
-   "apply_user_permissions": 0, 
-   "cancel": 0, 
-   "create": 0, 
-   "delete": 1, 
-   "email": 1, 
-   "export": 1, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 1, 
-   "role": "HR User", 
-   "set_user_permissions": 0, 
-   "share": 1, 
-   "submit": 0, 
-   "write": 0
-  }
- ], 
- "quick_entry": 1, 
- "read_only": 1, 
- "read_only_onload": 0, 
- "show_name_in_global_search": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "track_changes": 0, 
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/daily_work_summary/daily_work_summary.py b/erpnext/hr/doctype/daily_work_summary/daily_work_summary.py
deleted file mode 100644
index bcb0161..0000000
--- a/erpnext/hr/doctype/daily_work_summary/daily_work_summary.py
+++ /dev/null
@@ -1,119 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from email_reply_parser import EmailReplyParser
-from frappe import _
-from frappe.model.document import Document
-from frappe.utils import global_date_format
-
-
-class DailyWorkSummary(Document):
-	def send_mails(self, dws_group, emails):
-		"""Send emails to get daily work summary to all users \
-			in selected daily work summary group"""
-		incoming_email_account = frappe.db.get_value(
-			"Email Account", dict(enable_incoming=1, default_incoming=1), "email_id"
-		)
-
-		self.db_set("email_sent_to", "\n".join(emails))
-		frappe.sendmail(
-			recipients=emails,
-			message=dws_group.message,
-			subject=dws_group.subject,
-			reference_doctype=self.doctype,
-			reference_name=self.name,
-			reply_to=incoming_email_account,
-		)
-
-	def send_summary(self):
-		"""Send summary of all replies. Called at midnight"""
-		args = self.get_message_details()
-		emails = get_user_emails_from_group(self.daily_work_summary_group)
-		frappe.sendmail(
-			recipients=emails,
-			template="daily_work_summary",
-			args=args,
-			subject=_(self.daily_work_summary_group),
-			reference_doctype=self.doctype,
-			reference_name=self.name,
-		)
-
-		self.db_set("status", "Sent")
-
-	def get_message_details(self):
-		"""Return args for template"""
-		dws_group = frappe.get_doc("Daily Work Summary Group", self.daily_work_summary_group)
-
-		replies = frappe.get_all(
-			"Communication",
-			fields=["content", "text_content", "sender"],
-			filters=dict(
-				reference_doctype=self.doctype,
-				reference_name=self.name,
-				communication_type="Communication",
-				sent_or_received="Received",
-			),
-			order_by="creation asc",
-		)
-
-		did_not_reply = self.email_sent_to.split()
-
-		for d in replies:
-			user = frappe.db.get_values(
-				"User", {"email": d.sender}, ["full_name", "user_image"], as_dict=True
-			)
-
-			d.sender_name = user[0].full_name if user else d.sender
-			d.image = user[0].image if user and user[0].image else None
-
-			original_image = d.image
-			# make thumbnail image
-			try:
-				if original_image:
-					file_name = frappe.get_list("File", {"file_url": original_image})
-
-					if file_name:
-						file_name = file_name[0].name
-						file_doc = frappe.get_doc("File", file_name)
-						thumbnail_image = file_doc.make_thumbnail(
-							set_as_thumbnail=False, width=100, height=100, crop=True
-						)
-						d.image = thumbnail_image
-			except Exception:
-				d.image = original_image
-
-			if d.sender in did_not_reply:
-				did_not_reply.remove(d.sender)
-			if d.text_content:
-				d.content = frappe.utils.md_to_html(EmailReplyParser.parse_reply(d.text_content))
-
-		did_not_reply = [
-			(frappe.db.get_value("User", {"email": email}, "full_name") or email) for email in did_not_reply
-		]
-
-		return dict(
-			replies=replies,
-			original_message=dws_group.message,
-			title=_("Work Summary for {0}").format(global_date_format(self.creation)),
-			did_not_reply=", ".join(did_not_reply) or "",
-			did_not_reply_title=_("No replies from"),
-		)
-
-
-def get_user_emails_from_group(group):
-	"""Returns list of email of enabled users from the given group
-
-	:param group: Daily Work Summary Group `name`"""
-	group_doc = group
-	if isinstance(group_doc, str):
-		group_doc = frappe.get_doc("Daily Work Summary Group", group)
-
-	emails = get_users_email(group_doc)
-
-	return emails
-
-
-def get_users_email(doc):
-	return [d.email for d in doc.users if frappe.db.get_value("User", d.user, "enabled")]
diff --git a/erpnext/hr/doctype/daily_work_summary/test_daily_work_summary.py b/erpnext/hr/doctype/daily_work_summary/test_daily_work_summary.py
deleted file mode 100644
index 7034365..0000000
--- a/erpnext/hr/doctype/daily_work_summary/test_daily_work_summary.py
+++ /dev/null
@@ -1,105 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import os
-import unittest
-
-import frappe
-import frappe.utils
-
-# test_records = frappe.get_test_records('Daily Work Summary')
-
-
-class TestDailyWorkSummary(unittest.TestCase):
-	def test_email_trigger(self):
-		self.setup_and_prepare_test()
-		for d in self.users:
-			# check that email is sent to users
-			if d.message:
-				self.assertTrue(
-					d.email in [d.recipient for d in self.emails if self.groups.subject in d.message]
-				)
-
-	def test_email_trigger_failed(self):
-		hour = "00:00"
-		if frappe.utils.nowtime().split(":")[0] == "00":
-			hour = "01:00"
-
-		self.setup_and_prepare_test(hour)
-
-		for d in self.users:
-			# check that email is not sent to users
-			self.assertFalse(
-				d.email in [d.recipient for d in self.emails if self.groups.subject in d.message]
-			)
-
-	def test_incoming(self):
-		# get test mail with message-id as in-reply-to
-		self.setup_and_prepare_test()
-		with open(os.path.join(os.path.dirname(__file__), "test_data", "test-reply.raw"), "r") as f:
-			if not self.emails:
-				return
-			test_mails = [
-				f.read()
-				.replace("{{ sender }}", self.users[-1].email)
-				.replace("{{ message_id }}", self.emails[-1].message_id)
-			]
-
-		# pull the mail
-		email_account = frappe.get_doc("Email Account", "_Test Email Account 1")
-		email_account.db_set("enable_incoming", 1)
-		email_account.receive(test_mails=test_mails)
-
-		daily_work_summary = frappe.get_doc(
-			"Daily Work Summary", frappe.get_all("Daily Work Summary")[0].name
-		)
-
-		args = daily_work_summary.get_message_details()
-
-		self.assertTrue("I built Daily Work Summary!" in args.get("replies")[0].content)
-
-	def setup_and_prepare_test(self, hour=None):
-		frappe.db.sql("delete from `tabDaily Work Summary`")
-		frappe.db.sql("delete from `tabEmail Queue`")
-		frappe.db.sql("delete from `tabEmail Queue Recipient`")
-		frappe.db.sql("delete from `tabCommunication`")
-		frappe.db.sql("delete from `tabDaily Work Summary Group`")
-
-		self.users = frappe.get_all(
-			"User", fields=["email"], filters=dict(email=("!=", "test@example.com"))
-		)
-		self.setup_groups(hour)
-
-		from erpnext.hr.doctype.daily_work_summary_group.daily_work_summary_group import trigger_emails
-
-		trigger_emails()
-
-		# check if emails are created
-
-		self.emails = frappe.db.sql(
-			"""select r.recipient, q.message, q.message_id \
-			from `tabEmail Queue` as q, `tabEmail Queue Recipient` as r \
-			where q.name = r.parent""",
-			as_dict=1,
-		)
-
-	def setup_groups(self, hour=None):
-		# setup email to trigger at this hour
-		if not hour:
-			hour = frappe.utils.nowtime().split(":")[0]
-			hour = hour + ":00"
-
-		groups = frappe.get_doc(
-			dict(
-				doctype="Daily Work Summary Group",
-				name="Daily Work Summary",
-				users=self.users,
-				send_emails_at=hour,
-				subject="this is a subject for testing summary emails",
-				message="this is a message for testing summary emails",
-			)
-		)
-		groups.insert()
-
-		self.groups = groups
-		self.groups.save()
diff --git a/erpnext/hr/doctype/daily_work_summary/test_data/test-reply.raw b/erpnext/hr/doctype/daily_work_summary/test_data/test-reply.raw
deleted file mode 100644
index ba01bc2..0000000
--- a/erpnext/hr/doctype/daily_work_summary/test_data/test-reply.raw
+++ /dev/null
@@ -1,75 +0,0 @@
-From: {{ sender }}
-Content-Type: multipart/alternative;
-	boundary="Apple-Mail=_29597CF7-20DD-4184-B3FA-85582C5C4361"
-Message-Id: <07D687F6-10AA-4B9F-82DE-27753096164E@gmail.com>
-Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\))
-X-Smtp-Server: 73CC8281-7E8F-4B47-8324-D5DA86EEDD4F
-Subject: Re: What did you work on today?
-Date: Thu, 10 Nov 2016 16:04:43 +0530
-X-Universally-Unique-Identifier: A4D9669F-179C-42D8-A3D3-AA6A8C49A6F2
-References: <{{ message_id }}>
-To: test_in@iwebnotes.com
-In-Reply-To: <{{ message_id }}>
-
-
---Apple-Mail=_29597CF7-20DD-4184-B3FA-85582C5C4361
-Content-Transfer-Encoding: quoted-printable
-Content-Type: text/plain;
-	charset=us-ascii
-
-I built Daily Work Summary!
-
-> On 10-Nov-2016, at 3:20 PM, Frappe <test@erpnext.com> wrote:
->=20
-> Please share what did you do today. If you reply by midnight, your =
-response will be recorded!
->=20
-> This email was sent to rmehta@gmail.com
-> Unsubscribe from this list =
-<http://demo-test.erpnext.com.dev/api/method/frappe.email.queue.unsubscrib=
-e?email=3Drmehta%40gmail.com&name=3D26cc3e5a5d&doctype=3DDaily+Work+Summar=
-y&_signature=3D2c7ab37e6d775e5a481e9b4376154a41>
-> Sent via ERPNext <https://erpnext.com/?source=3Dvia_email_footer>
-
-
---Apple-Mail=_29597CF7-20DD-4184-B3FA-85582C5C4361
-Content-Transfer-Encoding: 7bit
-Content-Type: text/html;
-	charset=us-ascii
-
-<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">I built Daily Work Summary!<div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On 10-Nov-2016, at 3:20 PM, Frappe &lt;<a href="mailto:test@erpnext.com" class="">test@erpnext.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class="">
-
-
-<meta name="viewport" content="width=device-width" class="">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" class="">
-<title class="">What did you work on today?</title>
-
-<div style="line-height: 1.5; color: #36414C;" class="">
-<!-- body -->
-<div style="font-family: -apple-system, BlinkMacSystemFont,
-	    " segoe="" ui",="" "roboto",="" "oxygen",="" "ubuntu",="" "cantarell",="" "fira="" sans",="" "droid="" "helvetica="" neue",="" sans-serif;="" font-size:="" 14px;="" padding:="" 10px;"="" class=""><p class="">Please share what did you do today. If you reply by midnight, your response will be recorded!</p>
-
-</div>
-
-<!-- footer -->
-<div style="margin-top: 30px; font-family: Helvetica, Arial, sans-serif; font-size: 11px;
-    margin-bottom: 15px; border-top: 1px solid #d1d8dd;" data-email-footer="true" class="">
-	<div style="margin: 15px auto; padding: 0px 7px; text-align: center; color: #8d99a6;" class="">
-			This email was sent to <a href="mailto:rmehta@gmail.com" class="">rmehta@gmail.com</a>
-			<p style="margin: 15px auto;" class="">
-				<a href="http://demo-test.erpnext.com.dev/api/method/frappe.email.queue.unsubscribe?email=rmehta%40gmail.com&amp;name=26cc3e5a5d&amp;doctype=Daily+Work+Summary&amp;_signature=2c7ab37e6d775e5a481e9b4376154a41" style="color: #8d99a6; text-decoration: underline;
-					target=" _blank"="" class="">Unsubscribe from this list
-				</a>
-			</p>
-		</div><div style="margin: 15px auto;" class=""><div style="text-align: center;" class="">
-	<a href="https://erpnext.com/?source=via_email_footer" target="_blank" style="color: #8d99a6;" class="">
-		Sent via ERPNext
-	</a>
-</div></div>
-</div>
-<!-- /footer -->
-
-<div class="print-html"></div>
-</div>
-</div></blockquote></div><br class=""></div></body></html>
---Apple-Mail=_29597CF7-20DD-4184-B3FA-85582C5C4361--
diff --git a/erpnext/hr/doctype/daily_work_summary_group/__init__.py b/erpnext/hr/doctype/daily_work_summary_group/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/daily_work_summary_group/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/daily_work_summary_group/daily_work_summary_group.js b/erpnext/hr/doctype/daily_work_summary_group/daily_work_summary_group.js
deleted file mode 100644
index 43206d5..0000000
--- a/erpnext/hr/doctype/daily_work_summary_group/daily_work_summary_group.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Daily Work Summary Group', {
-	refresh: function (frm) {
-		if (!frm.is_new()) {
-			frm.add_custom_button(__('Daily Work Summary'), function () {
-				frappe.set_route('List', 'Daily Work Summary');
-			});
-		}
-	}
-});
diff --git a/erpnext/hr/doctype/daily_work_summary_group/daily_work_summary_group.json b/erpnext/hr/doctype/daily_work_summary_group/daily_work_summary_group.json
deleted file mode 100644
index 562183f..0000000
--- a/erpnext/hr/doctype/daily_work_summary_group/daily_work_summary_group.json
+++ /dev/null
@@ -1,309 +0,0 @@
-{
- "allow_copy": 0, 
- "allow_guest_to_view": 0, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "autoname": "Prompt", 
- "beta": 0, 
- "creation": "2018-02-12 15:06:18.767239", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "", 
- "editable_grid": 1, 
- "engine": "InnoDB", 
- "fields": [
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "default": "1", 
-   "fieldname": "enabled", 
-   "fieldtype": "Check", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Enabled", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "select_users", 
-   "fieldtype": "Section Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Select Users", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "users", 
-   "fieldtype": "Table", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Users", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Daily Work Summary Group User", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "send_emails_at", 
-   "fieldtype": "Select", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Send Emails At", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "00:00\n01:00\n02:00\n03:00\n04:00\n05:00\n06:00\n07:00\n08:00\n09:00\n10:00\n11:00\n12:00\n13:00\n14:00\n15:00\n16:00\n17:00\n18:00\n19:00\n20:00\n21:00\n22:00\n23:00", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "holiday_list", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Holiday List", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Holiday List", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "mail_details", 
-   "fieldtype": "Section Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Reminder", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "default": "What did you work on today?", 
-   "fieldname": "subject", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Subject", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "default": "<p>Please share what did you do today. If you reply by midnight, your response will be recorded!</p>", 
-   "fieldname": "message", 
-   "fieldtype": "Text Editor", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Message", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }
- ], 
- "has_web_view": 0, 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "image_view": 0, 
- "in_create": 0, 
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 0, 
- "max_attachments": 0, 
- "modified": "2018-02-16 10:56:03.998495", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Daily Work Summary Group", 
- "name_case": "", 
- "owner": "Administrator", 
- "permissions": [
-  {
-   "amend": 0, 
-   "apply_user_permissions": 0, 
-   "cancel": 0, 
-   "create": 1, 
-   "delete": 1, 
-   "email": 1, 
-   "export": 1, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 1, 
-   "role": "HR Manager", 
-   "set_user_permissions": 0, 
-   "share": 1, 
-   "submit": 0, 
-   "write": 1
-  }
- ], 
- "quick_entry": 1, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "show_name_in_global_search": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "track_changes": 0, 
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/daily_work_summary_group/daily_work_summary_group.py b/erpnext/hr/doctype/daily_work_summary_group/daily_work_summary_group.py
deleted file mode 100644
index 4342f1c..0000000
--- a/erpnext/hr/doctype/daily_work_summary_group/daily_work_summary_group.py
+++ /dev/null
@@ -1,55 +0,0 @@
-# # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
-# # For license information, please see license.txt
-
-
-import frappe
-import frappe.utils
-from frappe import _
-from frappe.model.document import Document
-
-from erpnext.hr.doctype.daily_work_summary.daily_work_summary import get_user_emails_from_group
-from erpnext.hr.doctype.holiday_list.holiday_list import is_holiday
-
-
-class DailyWorkSummaryGroup(Document):
-	def validate(self):
-		if self.users:
-			if not frappe.flags.in_test and not is_incoming_account_enabled():
-				frappe.throw(
-					_("Please enable default incoming account before creating Daily Work Summary Group")
-				)
-
-
-def trigger_emails():
-	"""Send emails to Employees at the given hour asking
-	them what did they work on today"""
-	groups = frappe.get_all("Daily Work Summary Group")
-	for d in groups:
-		group_doc = frappe.get_doc("Daily Work Summary Group", d)
-		if (
-			is_current_hour(group_doc.send_emails_at)
-			and not is_holiday(group_doc.holiday_list)
-			and group_doc.enabled
-		):
-			emails = get_user_emails_from_group(group_doc)
-			# find emails relating to a company
-			if emails:
-				daily_work_summary = frappe.get_doc(
-					dict(doctype="Daily Work Summary", daily_work_summary_group=group_doc.name)
-				).insert()
-				daily_work_summary.send_mails(group_doc, emails)
-
-
-def is_current_hour(hour):
-	return frappe.utils.nowtime().split(":")[0] == hour.split(":")[0]
-
-
-def send_summary():
-	"""Send summary to everyone"""
-	for d in frappe.get_all("Daily Work Summary", dict(status="Open")):
-		daily_work_summary = frappe.get_doc("Daily Work Summary", d.name)
-		daily_work_summary.send_summary()
-
-
-def is_incoming_account_enabled():
-	return frappe.db.get_value("Email Account", dict(enable_incoming=1, default_incoming=1))
diff --git a/erpnext/hr/doctype/daily_work_summary_group_user/__init__.py b/erpnext/hr/doctype/daily_work_summary_group_user/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/daily_work_summary_group_user/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/daily_work_summary_group_user/daily_work_summary_group_user.json b/erpnext/hr/doctype/daily_work_summary_group_user/daily_work_summary_group_user.json
deleted file mode 100644
index b22c051..0000000
--- a/erpnext/hr/doctype/daily_work_summary_group_user/daily_work_summary_group_user.json
+++ /dev/null
@@ -1,106 +0,0 @@
-{
- "allow_copy": 0, 
- "allow_guest_to_view": 0, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "beta": 0, 
- "creation": "2018-02-12 14:57:38.332692", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "", 
- "editable_grid": 1, 
- "engine": "InnoDB", 
- "fields": [
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "user", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "User", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "User", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0,
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fetch_from": "user.email",
-   "fieldname": "email", 
-   "fieldtype": "Read Only", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "email", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0,
-   "unique": 0
-  }
- ], 
- "has_web_view": 0, 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "image_view": 0, 
- "in_create": 0, 
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 1, 
- "max_attachments": 0, 
- "modified": "2018-05-16 22:43:00.481019",
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Daily Work Summary Group User", 
- "name_case": "", 
- "owner": "Administrator", 
- "permissions": [], 
- "quick_entry": 1, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "show_name_in_global_search": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "track_changes": 1, 
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/daily_work_summary_group_user/daily_work_summary_group_user.py b/erpnext/hr/doctype/daily_work_summary_group_user/daily_work_summary_group_user.py
deleted file mode 100644
index 6e0809a..0000000
--- a/erpnext/hr/doctype/daily_work_summary_group_user/daily_work_summary_group_user.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-from frappe.model.document import Document
-
-
-class DailyWorkSummaryGroupUser(Document):
-	pass
diff --git a/erpnext/hr/doctype/department_approver/__init__.py b/erpnext/hr/doctype/department_approver/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/department_approver/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/department_approver/department_approver.json b/erpnext/hr/doctype/department_approver/department_approver.json
deleted file mode 100644
index 317ecb3..0000000
--- a/erpnext/hr/doctype/department_approver/department_approver.json
+++ /dev/null
@@ -1,76 +0,0 @@
-{
- "allow_copy": 0, 
- "allow_guest_to_view": 0, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "autoname": "hash", 
- "beta": 0, 
- "creation": "2018-04-08 16:31:02.433252", 
- "custom": 0, 
- "description": "", 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "", 
- "editable_grid": 1, 
- "engine": "InnoDB", 
- "fields": [
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "approver", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 1, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Approver", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "User", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 1, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0, 
-   "width": "200"
-  }
- ], 
- "has_web_view": 0, 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "image_view": 0, 
- "in_create": 0, 
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 1, 
- "max_attachments": 0, 
- "modified": "2018-04-17 11:05:46.294340", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Department Approver", 
- "name_case": "", 
- "owner": "Administrator", 
- "permissions": [], 
- "quick_entry": 0, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "show_name_in_global_search": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "track_changes": 0, 
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/department_approver/department_approver.py b/erpnext/hr/doctype/department_approver/department_approver.py
deleted file mode 100644
index 87bdddd..0000000
--- a/erpnext/hr/doctype/department_approver/department_approver.py
+++ /dev/null
@@ -1,93 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-
-
-class DepartmentApprover(Document):
-	pass
-
-
-@frappe.whitelist()
-@frappe.validate_and_sanitize_search_inputs
-def get_approvers(doctype, txt, searchfield, start, page_len, filters):
-
-	if not filters.get("employee"):
-		frappe.throw(_("Please select Employee first."))
-
-	approvers = []
-	department_details = {}
-	department_list = []
-	employee = frappe.get_value(
-		"Employee",
-		filters.get("employee"),
-		["employee_name", "department", "leave_approver", "expense_approver", "shift_request_approver"],
-		as_dict=True,
-	)
-
-	employee_department = filters.get("department") or employee.department
-	if employee_department:
-		department_details = frappe.db.get_value(
-			"Department", {"name": employee_department}, ["lft", "rgt"], as_dict=True
-		)
-	if department_details:
-		department_list = frappe.db.sql(
-			"""select name from `tabDepartment` where lft <= %s
-			and rgt >= %s
-			and disabled=0
-			order by lft desc""",
-			(department_details.lft, department_details.rgt),
-			as_list=True,
-		)
-
-	if filters.get("doctype") == "Leave Application" and employee.leave_approver:
-		approvers.append(
-			frappe.db.get_value("User", employee.leave_approver, ["name", "first_name", "last_name"])
-		)
-
-	if filters.get("doctype") == "Expense Claim" and employee.expense_approver:
-		approvers.append(
-			frappe.db.get_value("User", employee.expense_approver, ["name", "first_name", "last_name"])
-		)
-
-	if filters.get("doctype") == "Shift Request" and employee.shift_request_approver:
-		approvers.append(
-			frappe.db.get_value(
-				"User", employee.shift_request_approver, ["name", "first_name", "last_name"]
-			)
-		)
-
-	if filters.get("doctype") == "Leave Application":
-		parentfield = "leave_approvers"
-		field_name = "Leave Approver"
-	elif filters.get("doctype") == "Expense Claim":
-		parentfield = "expense_approvers"
-		field_name = "Expense Approver"
-	elif filters.get("doctype") == "Shift Request":
-		parentfield = "shift_request_approver"
-		field_name = "Shift Request Approver"
-	if department_list:
-		for d in department_list:
-			approvers += frappe.db.sql(
-				"""select user.name, user.first_name, user.last_name from
-				tabUser user, `tabDepartment Approver` approver where
-				approver.parent = %s
-				and user.name like %s
-				and approver.parentfield = %s
-				and approver.approver=user.name""",
-				(d, "%" + txt + "%", parentfield),
-				as_list=True,
-			)
-
-	if len(approvers) == 0:
-		error_msg = _("Please set {0} for the Employee: {1}").format(
-			field_name, frappe.bold(employee.employee_name)
-		)
-		if department_list:
-			error_msg += " " + _("or for Department: {0}").format(frappe.bold(employee_department))
-		frappe.throw(error_msg, title=_(field_name + " Missing"))
-
-	return set(tuple(approver) for approver in approvers)
diff --git a/erpnext/hr/doctype/driver/__init__.py b/erpnext/hr/doctype/driver/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/driver/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/driver/driver.js b/erpnext/hr/doctype/driver/driver.js
deleted file mode 100644
index b3c24c1..0000000
--- a/erpnext/hr/doctype/driver/driver.js
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on("Driver", {
-	setup: function(frm) {
-		frm.set_query("transporter", function() {
-			return {
-				filters: {
-					is_transporter: 1
-				}
-			};
-		});
-	},
-
-	refresh: function(frm) {
-		frm.set_query("address", function() {
-			return {
-				filters: {
-					is_your_company_address: !frm.doc.transporter ? 1 : 0
-				}
-			};
-		});
-	},
-
-	transporter: function(frm, cdt, cdn) {
-		// this assumes that supplier's address has same title as supplier's name
-		frappe.db
-			.get_doc("Address", null, { address_title: frm.doc.transporter })
-			.then(r => {
-				frappe.model.set_value(cdt, cdn, "address", r.name);
-			})
-			.catch(err => {
-				console.log(err);
-			});
-	}
-});
diff --git a/erpnext/hr/doctype/driver/driver.json b/erpnext/hr/doctype/driver/driver.json
deleted file mode 100644
index 0a670c0..0000000
--- a/erpnext/hr/doctype/driver/driver.json
+++ /dev/null
@@ -1,169 +0,0 @@
-{
- "allow_import": 1,
- "allow_rename": 1,
- "autoname": "naming_series:",
- "creation": "2017-10-17 08:21:50.489773",
- "doctype": "DocType",
- "document_type": "Setup",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "naming_series",
-  "full_name",
-  "status",
-  "transporter",
-  "column_break_2",
-  "employee",
-  "cell_number",
-  "address",
-  "license_details",
-  "license_number",
-  "column_break_8",
-  "issuing_date",
-  "column_break_10",
-  "expiry_date",
-  "driving_license_categories",
-  "driving_license_category"
- ],
- "fields": [
-  {
-   "fieldname": "naming_series",
-   "fieldtype": "Select",
-   "label": "Series",
-   "options": "HR-DRI-.YYYY.-"
-  },
-  {
-   "fieldname": "full_name",
-   "fieldtype": "Data",
-   "in_list_view": 1,
-   "label": "Full Name",
-   "reqd": 1
-  },
-  {
-   "fieldname": "status",
-   "fieldtype": "Select",
-   "in_list_view": 1,
-   "label": "Status",
-   "options": "Active\nSuspended\nLeft",
-   "reqd": 1
-  },
-  {
-   "allow_in_quick_entry": 1,
-   "description": "Applicable for external driver",
-   "fieldname": "transporter",
-   "fieldtype": "Link",
-   "label": "Transporter",
-   "options": "Supplier"
-  },
-  {
-   "fieldname": "column_break_2",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "employee",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Employee",
-   "options": "Employee"
-  },
-  {
-   "fieldname": "cell_number",
-   "fieldtype": "Data",
-   "label": "Cellphone Number"
-  },
-  {
-   "fieldname": "license_details",
-   "fieldtype": "Section Break",
-   "label": "License Details"
-  },
-  {
-   "fieldname": "license_number",
-   "fieldtype": "Data",
-   "label": "License Number"
-  },
-  {
-   "fieldname": "column_break_8",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "issuing_date",
-   "fieldtype": "Date",
-   "label": "Issuing Date"
-  },
-  {
-   "fieldname": "column_break_10",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "expiry_date",
-   "fieldtype": "Date",
-   "label": "Expiry Date"
-  },
-  {
-   "fieldname": "driving_license_categories",
-   "fieldtype": "Section Break",
-   "label": "Driving License Categories"
-  },
-  {
-   "fieldname": "driving_license_category",
-   "fieldtype": "Table",
-   "label": "Driving License Category",
-   "options": "Driving License Category"
-  },
-  {
-   "fieldname": "address",
-   "fieldtype": "Link",
-   "label": "Address",
-   "options": "Address"
-  }
- ],
- "icon": "fa fa-user",
- "modified": "2019-07-18 16:29:14.151380",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Driver",
- "name_case": "Title Case",
- "owner": "Administrator",
- "permissions": [
-  {
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "Fleet Manager",
-   "share": 1
-  },
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "write": 1
-  }
- ],
- "quick_entry": 1,
- "search_fields": "full_name",
- "show_name_in_global_search": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "title_field": "full_name",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/driver/driver.py b/erpnext/hr/doctype/driver/driver.py
deleted file mode 100644
index 2698189..0000000
--- a/erpnext/hr/doctype/driver/driver.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-from frappe.model.document import Document
-
-
-class Driver(Document):
-	pass
diff --git a/erpnext/hr/doctype/driver/test_driver.py b/erpnext/hr/doctype/driver/test_driver.py
deleted file mode 100644
index 2270729..0000000
--- a/erpnext/hr/doctype/driver/test_driver.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-
-class TestDriver(unittest.TestCase):
-	pass
diff --git a/erpnext/hr/doctype/driving_license_category/__init__.py b/erpnext/hr/doctype/driving_license_category/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/driving_license_category/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/driving_license_category/driving_license_category.json b/erpnext/hr/doctype/driving_license_category/driving_license_category.json
deleted file mode 100644
index 8bc61a8..0000000
--- a/erpnext/hr/doctype/driving_license_category/driving_license_category.json
+++ /dev/null
@@ -1,51 +0,0 @@
-{
- "actions": [],
- "creation": "2017-10-17 08:19:43.142329",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "class",
-  "description",
-  "issuing_date",
-  "expiry_date"
- ],
- "fields": [
-  {
-   "fieldname": "class",
-   "fieldtype": "Data",
-   "in_list_view": 1,
-   "label": "Driver licence class"
-  },
-  {
-   "fieldname": "description",
-   "fieldtype": "Data",
-   "in_list_view": 1,
-   "label": "Description"
-  },
-  {
-   "fieldname": "issuing_date",
-   "fieldtype": "Date",
-   "in_list_view": 1,
-   "label": "Issuing Date"
-  },
-  {
-   "fieldname": "expiry_date",
-   "fieldtype": "Date",
-   "in_list_view": 1,
-   "label": "Expiry Date"
-  }
- ],
- "istable": 1,
- "links": [],
- "modified": "2019-12-12 14:40:55.209022",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Driving License Category",
- "owner": "Administrator",
- "permissions": [],
- "quick_entry": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/driving_license_category/driving_license_category.py b/erpnext/hr/doctype/driving_license_category/driving_license_category.py
deleted file mode 100644
index a1a6d55..0000000
--- a/erpnext/hr/doctype/driving_license_category/driving_license_category.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-from frappe.model.document import Document
-
-
-class DrivingLicenseCategory(Document):
-	pass
diff --git a/erpnext/hr/doctype/employee_advance/__init__.py b/erpnext/hr/doctype/employee_advance/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/employee_advance/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/employee_advance/employee_advance.js b/erpnext/hr/doctype/employee_advance/employee_advance.js
deleted file mode 100644
index 37ae75a..0000000
--- a/erpnext/hr/doctype/employee_advance/employee_advance.js
+++ /dev/null
@@ -1,225 +0,0 @@
-// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Employee Advance', {
-	setup: function(frm) {
-		frm.add_fetch("employee", "company", "company");
-		frm.add_fetch("company", "default_employee_advance_account", "advance_account");
-
-		frm.set_query("employee", function() {
-			return {
-				filters: {
-					"status": "Active"
-				}
-			};
-		});
-
-		frm.set_query("advance_account", function() {
-			if (!frm.doc.employee) {
-				frappe.msgprint(__("Please select employee first"));
-			}
-			let company_currency = erpnext.get_currency(frm.doc.company);
-			let currencies = [company_currency];
-			if (frm.doc.currency && (frm.doc.currency != company_currency)) {
-				currencies.push(frm.doc.currency);
-			}
-
-			return {
-				filters: {
-					"root_type": "Asset",
-					"is_group": 0,
-					"company": frm.doc.company,
-					"account_currency": ["in", currencies],
-				}
-			};
-		});
-
-		frm.set_query('salary_component', function() {
-			return {
-				filters: {
-					"type": "Deduction"
-				}
-			};
-		});
-	},
-
-	refresh: function(frm) {
-		if (frm.doc.docstatus === 1 &&
-			(flt(frm.doc.paid_amount) < flt(frm.doc.advance_amount)) &&
-			frappe.model.can_create("Payment Entry")) {
-			frm.add_custom_button(__('Payment'),
-				function () {
-					frm.events.make_payment_entry(frm);
-				}, __('Create'));
-		} else if (
-			frm.doc.docstatus === 1 &&
-			flt(frm.doc.claimed_amount) < flt(frm.doc.paid_amount) - flt(frm.doc.return_amount) &&
-			frappe.model.can_create("Expense Claim")
-		) {
-			frm.add_custom_button(
-				__("Expense Claim"),
-				function () {
-					frm.events.make_expense_claim(frm);
-				},
-				__('Create')
-			);
-		}
-
-		if (
-			frm.doc.docstatus === 1
-			&& (flt(frm.doc.claimed_amount) < flt(frm.doc.paid_amount) - flt(frm.doc.return_amount))
-		) {
-			if (frm.doc.repay_unclaimed_amount_from_salary == 0 && frappe.model.can_create("Journal Entry")) {
-				frm.add_custom_button(__("Return"), function() {
-					frm.trigger('make_return_entry');
-				}, __('Create'));
-			} else if (frm.doc.repay_unclaimed_amount_from_salary == 1 && frappe.model.can_create("Additional Salary")) {
-				frm.add_custom_button(__("Deduction from Salary"), function() {
-					frm.events.make_deduction_via_additional_salary(frm);
-				}, __('Create'));
-			}
-		}
-	},
-
-	make_deduction_via_additional_salary: function(frm) {
-		frappe.call({
-			method: "erpnext.hr.doctype.employee_advance.employee_advance.create_return_through_additional_salary",
-			args: {
-				doc: frm.doc
-			},
-			callback: function(r) {
-				var doclist = frappe.model.sync(r.message);
-				frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
-			}
-		});
-	},
-
-	make_payment_entry: function(frm) {
-		var method = "erpnext.accounts.doctype.payment_entry.payment_entry.get_payment_entry";
-		if (frm.doc.__onload && frm.doc.__onload.make_payment_via_journal_entry) {
-			method = "erpnext.hr.doctype.employee_advance.employee_advance.make_bank_entry";
-		}
-		return frappe.call({
-			method: method,
-			args: {
-				"dt": frm.doc.doctype,
-				"dn": frm.doc.name
-			},
-			callback: function(r) {
-				var doclist = frappe.model.sync(r.message);
-				frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
-			}
-		});
-	},
-
-	make_expense_claim: function(frm) {
-		return frappe.call({
-			method: "erpnext.hr.doctype.expense_claim.expense_claim.get_expense_claim",
-			args: {
-				"employee_name": frm.doc.employee,
-				"company": frm.doc.company,
-				"employee_advance_name": frm.doc.name,
-				"posting_date": frm.doc.posting_date,
-				"paid_amount": frm.doc.paid_amount,
-				"claimed_amount": frm.doc.claimed_amount
-			},
-			callback: function(r) {
-				const doclist = frappe.model.sync(r.message);
-				frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
-			}
-		});
-	},
-
-	make_return_entry: function(frm) {
-		frappe.call({
-			method: 'erpnext.hr.doctype.employee_advance.employee_advance.make_return_entry',
-			args: {
-				'employee': frm.doc.employee,
-				'company': frm.doc.company,
-				'employee_advance_name': frm.doc.name,
-				'return_amount': flt(frm.doc.paid_amount - frm.doc.claimed_amount),
-				'advance_account': frm.doc.advance_account,
-				'mode_of_payment': frm.doc.mode_of_payment,
-				'currency': frm.doc.currency,
-				'exchange_rate': frm.doc.exchange_rate
-			},
-			callback: function(r) {
-				const doclist = frappe.model.sync(r.message);
-				frappe.set_route('Form', doclist[0].doctype, doclist[0].name);
-			}
-		});
-	},
-
-	employee: function(frm) {
-		if (frm.doc.employee) {
-			frappe.run_serially([
-				() => frm.trigger('get_employee_currency'),
-				() => frm.trigger('get_pending_amount')
-			]);
-		}
-	},
-
-	get_pending_amount: function(frm) {
-		frappe.call({
-			method: "erpnext.hr.doctype.employee_advance.employee_advance.get_pending_amount",
-			args: {
-				"employee": frm.doc.employee,
-				"posting_date": frm.doc.posting_date
-			},
-			callback: function(r) {
-				frm.set_value("pending_amount", r.message);
-			}
-		});
-	},
-
-	get_employee_currency: function(frm) {
-		frappe.call({
-			method: "erpnext.payroll.doctype.salary_structure_assignment.salary_structure_assignment.get_employee_currency",
-			args: {
-				employee: frm.doc.employee,
-			},
-			callback: function(r) {
-				if (r.message) {
-					frm.set_value('currency', r.message);
-					frm.refresh_fields();
-				}
-			}
-		});
-	},
-
-	currency: function(frm) {
-		if (frm.doc.currency) {
-			var from_currency = frm.doc.currency;
-			var company_currency;
-			if (!frm.doc.company) {
-				company_currency = erpnext.get_currency(frappe.defaults.get_default("Company"));
-			} else {
-				company_currency = erpnext.get_currency(frm.doc.company);
-			}
-			if (from_currency != company_currency) {
-				frm.events.set_exchange_rate(frm, from_currency, company_currency);
-			} else {
-				frm.set_value("exchange_rate", 1.0);
-				frm.set_df_property('exchange_rate', 'hidden', 1);
-				frm.set_df_property("exchange_rate", "description", "");
-			}
-			frm.refresh_fields();
-		}
-	},
-
-	set_exchange_rate: function(frm, from_currency, company_currency) {
-		frappe.call({
-			method: "erpnext.setup.utils.get_exchange_rate",
-			args: {
-				from_currency: from_currency,
-				to_currency: company_currency,
-			},
-			callback: function(r) {
-				frm.set_value("exchange_rate", flt(r.message));
-				frm.set_df_property('exchange_rate', 'hidden', 0);
-				frm.set_df_property("exchange_rate", "description", "1 " + frm.doc.currency +
-					" = [?] " + company_currency);
-			}
-		});
-	}
-});
diff --git a/erpnext/hr/doctype/employee_advance/employee_advance.json b/erpnext/hr/doctype/employee_advance/employee_advance.json
deleted file mode 100644
index b050183..0000000
--- a/erpnext/hr/doctype/employee_advance/employee_advance.json
+++ /dev/null
@@ -1,277 +0,0 @@
-{
- "actions": [],
- "allow_import": 1,
- "autoname": "naming_series:",
- "creation": "2022-01-17 18:36:51.450395",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "naming_series",
-  "employee",
-  "employee_name",
-  "department",
-  "column_break_4",
-  "posting_date",
-  "currency",
-  "exchange_rate",
-  "repay_unclaimed_amount_from_salary",
-  "section_break_8",
-  "purpose",
-  "column_break_11",
-  "advance_amount",
-  "paid_amount",
-  "pending_amount",
-  "claimed_amount",
-  "return_amount",
-  "section_break_7",
-  "status",
-  "company",
-  "amended_from",
-  "column_break_18",
-  "advance_account",
-  "mode_of_payment"
- ],
- "fields": [
-  {
-   "fieldname": "naming_series",
-   "fieldtype": "Select",
-   "label": "Series",
-   "options": "HR-EAD-.YYYY.-"
-  },
-  {
-   "fieldname": "employee",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Employee",
-   "options": "Employee",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "employee.employee_name",
-   "fieldname": "employee_name",
-   "fieldtype": "Read Only",
-   "label": "Employee Name"
-  },
-  {
-   "fieldname": "column_break_4",
-   "fieldtype": "Column Break"
-  },
-  {
-   "default": "Today",
-   "fieldname": "posting_date",
-   "fieldtype": "Date",
-   "in_list_view": 1,
-   "label": "Posting Date",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "employee.department",
-   "fieldname": "department",
-   "fieldtype": "Link",
-   "label": "Department",
-   "options": "Department",
-   "read_only": 1
-  },
-  {
-   "fieldname": "section_break_8",
-   "fieldtype": "Section Break"
-  },
-  {
-   "fieldname": "purpose",
-   "fieldtype": "Small Text",
-   "in_list_view": 1,
-   "label": "Purpose",
-   "reqd": 1
-  },
-  {
-   "fieldname": "column_break_11",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "advance_amount",
-   "fieldtype": "Currency",
-   "in_list_view": 1,
-   "label": "Advance Amount",
-   "options": "currency",
-   "reqd": 1
-  },
-  {
-   "fieldname": "paid_amount",
-   "fieldtype": "Currency",
-   "label": "Paid Amount",
-   "no_copy": 1,
-   "options": "currency",
-   "read_only": 1
-  },
-  {
-   "fieldname": "claimed_amount",
-   "fieldtype": "Currency",
-   "label": "Claimed Amount",
-   "no_copy": 1,
-   "options": "currency",
-   "read_only": 1
-  },
-  {
-   "fieldname": "section_break_7",
-   "fieldtype": "Section Break"
-  },
-  {
-   "fieldname": "status",
-   "fieldtype": "Select",
-   "label": "Status",
-   "no_copy": 1,
-   "options": "Draft\nPaid\nUnpaid\nClaimed\nReturned\nPartly Claimed and Returned\nCancelled",
-   "read_only": 1
-  },
-  {
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "label": "Company",
-   "options": "Company",
-   "reqd": 1
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "Employee Advance",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break_18",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "advance_account",
-   "fieldtype": "Link",
-   "ignore_user_permissions": 1,
-   "label": "Advance Account",
-   "options": "Account",
-   "reqd": 1
-  },
-  {
-   "fieldname": "mode_of_payment",
-   "fieldtype": "Link",
-   "label": "Mode of Payment",
-   "options": "Mode of Payment"
-  },
-  {
-   "allow_on_submit": 1,
-   "fieldname": "return_amount",
-   "fieldtype": "Currency",
-   "label": "Returned Amount",
-   "options": "currency",
-   "read_only": 1
-  },
-  {
-   "default": "0",
-   "fieldname": "repay_unclaimed_amount_from_salary",
-   "fieldtype": "Check",
-   "label": "Repay Unclaimed Amount from Salary"
-  },
-  {
-   "depends_on": "eval:cur_frm.doc.employee",
-   "fieldname": "pending_amount",
-   "fieldtype": "Currency",
-   "label": "Pending Amount",
-   "options": "currency",
-   "read_only": 1
-  },
-  {
-   "depends_on": "eval:(doc.docstatus==1 || doc.employee)",
-   "fieldname": "currency",
-   "fieldtype": "Link",
-   "label": "Currency",
-   "options": "Currency",
-   "reqd": 1
-  },
-  {
-   "depends_on": "currency",
-   "fieldname": "exchange_rate",
-   "fieldtype": "Float",
-   "label": "Exchange Rate",
-   "precision": "9",
-   "print_hide": 1,
-   "reqd": 1
-  }
- ],
- "is_submittable": 1,
- "links": [],
- "modified": "2022-01-17 19:33:52.345823",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Employee Advance",
- "naming_rule": "By \"Naming Series\" field",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "Employee",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "Expense Approver",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  }
- ],
- "search_fields": "employee,employee_name",
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": [
-  {
-   "color": "Red",
-   "custom": 1,
-   "title": "Draft"
-  },
-  {
-   "color": "Green",
-   "custom": 1,
-   "title": "Paid"
-  },
-  {
-   "color": "Orange",
-   "custom": 1,
-   "title": "Unpaid"
-  },
-  {
-   "color": "Blue",
-   "custom": 1,
-   "title": "Claimed"
-  },
-  {
-   "color": "Gray",
-   "title": "Returned"
-  },
-  {
-   "color": "Yellow",
-   "title": "Partly Claimed and Returned"
-  },
-  {
-   "color": "Red",
-   "custom": 1,
-   "title": "Cancelled"
-  }
- ],
- "title_field": "employee_name",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/employee_advance/employee_advance.py b/erpnext/hr/doctype/employee_advance/employee_advance.py
deleted file mode 100644
index c1876b1..0000000
--- a/erpnext/hr/doctype/employee_advance/employee_advance.py
+++ /dev/null
@@ -1,323 +0,0 @@
-# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.query_builder.functions import Sum
-from frappe.utils import flt, nowdate
-
-import erpnext
-from erpnext.accounts.doctype.journal_entry.journal_entry import get_default_bank_cash_account
-from erpnext.hr.utils import validate_active_employee
-
-
-class EmployeeAdvanceOverPayment(frappe.ValidationError):
-	pass
-
-
-class EmployeeAdvance(Document):
-	def onload(self):
-		self.get("__onload").make_payment_via_journal_entry = frappe.db.get_single_value(
-			"Accounts Settings", "make_payment_via_journal_entry"
-		)
-
-	def validate(self):
-		validate_active_employee(self.employee)
-		self.set_status()
-
-	def on_cancel(self):
-		self.ignore_linked_doctypes = "GL Entry"
-		self.set_status(update=True)
-
-	def set_status(self, update=False):
-		precision = self.precision("paid_amount")
-		total_amount = flt(flt(self.claimed_amount) + flt(self.return_amount), precision)
-		status = None
-
-		if self.docstatus == 0:
-			status = "Draft"
-		elif self.docstatus == 1:
-			if flt(self.claimed_amount) > 0 and flt(self.claimed_amount, precision) == flt(
-				self.paid_amount, precision
-			):
-				status = "Claimed"
-			elif flt(self.return_amount) > 0 and flt(self.return_amount, precision) == flt(
-				self.paid_amount, precision
-			):
-				status = "Returned"
-			elif (
-				flt(self.claimed_amount) > 0
-				and (flt(self.return_amount) > 0)
-				and total_amount == flt(self.paid_amount, precision)
-			):
-				status = "Partly Claimed and Returned"
-			elif flt(self.paid_amount) > 0 and flt(self.advance_amount, precision) == flt(
-				self.paid_amount, precision
-			):
-				status = "Paid"
-			else:
-				status = "Unpaid"
-		elif self.docstatus == 2:
-			status = "Cancelled"
-
-		if update:
-			self.db_set("status", status)
-		else:
-			self.status = status
-
-	def set_total_advance_paid(self):
-		gle = frappe.qb.DocType("GL Entry")
-
-		paid_amount = (
-			frappe.qb.from_(gle)
-			.select(Sum(gle.debit).as_("paid_amount"))
-			.where(
-				(gle.against_voucher_type == "Employee Advance")
-				& (gle.against_voucher == self.name)
-				& (gle.party_type == "Employee")
-				& (gle.party == self.employee)
-				& (gle.docstatus == 1)
-				& (gle.is_cancelled == 0)
-			)
-		).run(as_dict=True)[0].paid_amount or 0
-
-		return_amount = (
-			frappe.qb.from_(gle)
-			.select(Sum(gle.credit).as_("return_amount"))
-			.where(
-				(gle.against_voucher_type == "Employee Advance")
-				& (gle.voucher_type != "Expense Claim")
-				& (gle.against_voucher == self.name)
-				& (gle.party_type == "Employee")
-				& (gle.party == self.employee)
-				& (gle.docstatus == 1)
-				& (gle.is_cancelled == 0)
-			)
-		).run(as_dict=True)[0].return_amount or 0
-
-		if paid_amount != 0:
-			paid_amount = flt(paid_amount) / flt(self.exchange_rate)
-		if return_amount != 0:
-			return_amount = flt(return_amount) / flt(self.exchange_rate)
-
-		if flt(paid_amount) > self.advance_amount:
-			frappe.throw(
-				_("Row {0}# Paid Amount cannot be greater than requested advance amount"),
-				EmployeeAdvanceOverPayment,
-			)
-
-		if flt(return_amount) > self.paid_amount - self.claimed_amount:
-			frappe.throw(_("Return amount cannot be greater unclaimed amount"))
-
-		self.db_set("paid_amount", paid_amount)
-		self.db_set("return_amount", return_amount)
-		self.set_status(update=True)
-
-	def update_claimed_amount(self):
-		claimed_amount = (
-			frappe.db.sql(
-				"""
-			SELECT sum(ifnull(allocated_amount, 0))
-			FROM `tabExpense Claim Advance` eca, `tabExpense Claim` ec
-			WHERE
-				eca.employee_advance = %s
-				AND ec.approval_status="Approved"
-				AND ec.name = eca.parent
-				AND ec.docstatus=1
-				AND eca.allocated_amount > 0
-		""",
-				self.name,
-			)[0][0]
-			or 0
-		)
-
-		frappe.db.set_value("Employee Advance", self.name, "claimed_amount", flt(claimed_amount))
-		self.reload()
-		self.set_status(update=True)
-
-
-@frappe.whitelist()
-def get_pending_amount(employee, posting_date):
-	employee_due_amount = frappe.get_all(
-		"Employee Advance",
-		filters={"employee": employee, "docstatus": 1, "posting_date": ("<=", posting_date)},
-		fields=["advance_amount", "paid_amount"],
-	)
-	return sum([(emp.advance_amount - emp.paid_amount) for emp in employee_due_amount])
-
-
-@frappe.whitelist()
-def make_bank_entry(dt, dn):
-	doc = frappe.get_doc(dt, dn)
-	payment_account = get_default_bank_cash_account(
-		doc.company, account_type="Cash", mode_of_payment=doc.mode_of_payment
-	)
-	if not payment_account:
-		frappe.throw(_("Please set a Default Cash Account in Company defaults"))
-
-	advance_account_currency = frappe.db.get_value("Account", doc.advance_account, "account_currency")
-
-	advance_amount, advance_exchange_rate = get_advance_amount_advance_exchange_rate(
-		advance_account_currency, doc
-	)
-
-	paying_amount, paying_exchange_rate = get_paying_amount_paying_exchange_rate(payment_account, doc)
-
-	je = frappe.new_doc("Journal Entry")
-	je.posting_date = nowdate()
-	je.voucher_type = "Bank Entry"
-	je.company = doc.company
-	je.remark = "Payment against Employee Advance: " + dn + "\n" + doc.purpose
-	je.multi_currency = 1 if advance_account_currency != payment_account.account_currency else 0
-
-	je.append(
-		"accounts",
-		{
-			"account": doc.advance_account,
-			"account_currency": advance_account_currency,
-			"exchange_rate": flt(advance_exchange_rate),
-			"debit_in_account_currency": flt(advance_amount),
-			"reference_type": "Employee Advance",
-			"reference_name": doc.name,
-			"party_type": "Employee",
-			"cost_center": erpnext.get_default_cost_center(doc.company),
-			"party": doc.employee,
-			"is_advance": "Yes",
-		},
-	)
-
-	je.append(
-		"accounts",
-		{
-			"account": payment_account.account,
-			"cost_center": erpnext.get_default_cost_center(doc.company),
-			"credit_in_account_currency": flt(paying_amount),
-			"account_currency": payment_account.account_currency,
-			"account_type": payment_account.account_type,
-			"exchange_rate": flt(paying_exchange_rate),
-		},
-	)
-
-	return je.as_dict()
-
-
-def get_advance_amount_advance_exchange_rate(advance_account_currency, doc):
-	if advance_account_currency != doc.currency:
-		advance_amount = flt(doc.advance_amount) * flt(doc.exchange_rate)
-		advance_exchange_rate = 1
-	else:
-		advance_amount = doc.advance_amount
-		advance_exchange_rate = doc.exchange_rate
-
-	return advance_amount, advance_exchange_rate
-
-
-def get_paying_amount_paying_exchange_rate(payment_account, doc):
-	if payment_account.account_currency != doc.currency:
-		paying_amount = flt(doc.advance_amount) * flt(doc.exchange_rate)
-		paying_exchange_rate = 1
-	else:
-		paying_amount = doc.advance_amount
-		paying_exchange_rate = doc.exchange_rate
-
-	return paying_amount, paying_exchange_rate
-
-
-@frappe.whitelist()
-def create_return_through_additional_salary(doc):
-	import json
-
-	if isinstance(doc, str):
-		doc = frappe._dict(json.loads(doc))
-
-	additional_salary = frappe.new_doc("Additional Salary")
-	additional_salary.employee = doc.employee
-	additional_salary.currency = doc.currency
-	additional_salary.amount = doc.paid_amount - doc.claimed_amount
-	additional_salary.company = doc.company
-	additional_salary.ref_doctype = doc.doctype
-	additional_salary.ref_docname = doc.name
-
-	return additional_salary
-
-
-@frappe.whitelist()
-def make_return_entry(
-	employee,
-	company,
-	employee_advance_name,
-	return_amount,
-	advance_account,
-	currency,
-	exchange_rate,
-	mode_of_payment=None,
-):
-	bank_cash_account = get_default_bank_cash_account(
-		company, account_type="Cash", mode_of_payment=mode_of_payment
-	)
-	if not bank_cash_account:
-		frappe.throw(_("Please set a Default Cash Account in Company defaults"))
-
-	advance_account_currency = frappe.db.get_value("Account", advance_account, "account_currency")
-
-	je = frappe.new_doc("Journal Entry")
-	je.posting_date = nowdate()
-	je.voucher_type = get_voucher_type(mode_of_payment)
-	je.company = company
-	je.remark = "Return against Employee Advance: " + employee_advance_name
-	je.multi_currency = 1 if advance_account_currency != bank_cash_account.account_currency else 0
-
-	advance_account_amount = (
-		flt(return_amount)
-		if advance_account_currency == currency
-		else flt(return_amount) * flt(exchange_rate)
-	)
-
-	je.append(
-		"accounts",
-		{
-			"account": advance_account,
-			"credit_in_account_currency": advance_account_amount,
-			"account_currency": advance_account_currency,
-			"exchange_rate": flt(exchange_rate) if advance_account_currency == currency else 1,
-			"reference_type": "Employee Advance",
-			"reference_name": employee_advance_name,
-			"party_type": "Employee",
-			"party": employee,
-			"is_advance": "Yes",
-			"cost_center": erpnext.get_default_cost_center(company),
-		},
-	)
-
-	bank_amount = (
-		flt(return_amount)
-		if bank_cash_account.account_currency == currency
-		else flt(return_amount) * flt(exchange_rate)
-	)
-
-	je.append(
-		"accounts",
-		{
-			"account": bank_cash_account.account,
-			"debit_in_account_currency": bank_amount,
-			"account_currency": bank_cash_account.account_currency,
-			"account_type": bank_cash_account.account_type,
-			"exchange_rate": flt(exchange_rate) if bank_cash_account.account_currency == currency else 1,
-			"cost_center": erpnext.get_default_cost_center(company),
-		},
-	)
-
-	return je.as_dict()
-
-
-def get_voucher_type(mode_of_payment=None):
-	voucher_type = "Cash Entry"
-
-	if mode_of_payment:
-		mode_of_payment_type = frappe.get_cached_value("Mode of Payment", mode_of_payment, "type")
-		if mode_of_payment_type == "Bank":
-			voucher_type = "Bank Entry"
-
-	return voucher_type
diff --git a/erpnext/hr/doctype/employee_advance/employee_advance_dashboard.py b/erpnext/hr/doctype/employee_advance/employee_advance_dashboard.py
deleted file mode 100644
index 73fac51..0000000
--- a/erpnext/hr/doctype/employee_advance/employee_advance_dashboard.py
+++ /dev/null
@@ -1,9 +0,0 @@
-def get_data():
-	return {
-		"fieldname": "employee_advance",
-		"non_standard_fieldnames": {
-			"Payment Entry": "reference_name",
-			"Journal Entry": "reference_name",
-		},
-		"transactions": [{"items": ["Expense Claim"]}, {"items": ["Payment Entry", "Journal Entry"]}],
-	}
diff --git a/erpnext/hr/doctype/employee_advance/test_employee_advance.py b/erpnext/hr/doctype/employee_advance/test_employee_advance.py
deleted file mode 100644
index 44d68c9..0000000
--- a/erpnext/hr/doctype/employee_advance/test_employee_advance.py
+++ /dev/null
@@ -1,257 +0,0 @@
-# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-import frappe
-from frappe.utils import flt, nowdate
-
-import erpnext
-from erpnext.hr.doctype.employee.test_employee import make_employee
-from erpnext.hr.doctype.employee_advance.employee_advance import (
-	EmployeeAdvanceOverPayment,
-	create_return_through_additional_salary,
-	make_bank_entry,
-	make_return_entry,
-)
-from erpnext.hr.doctype.expense_claim.expense_claim import get_advances
-from erpnext.hr.doctype.expense_claim.test_expense_claim import (
-	get_payable_account,
-	make_expense_claim,
-)
-from erpnext.payroll.doctype.salary_component.test_salary_component import create_salary_component
-from erpnext.payroll.doctype.salary_structure.test_salary_structure import make_salary_structure
-
-
-class TestEmployeeAdvance(unittest.TestCase):
-	def setUp(self):
-		frappe.db.delete("Employee Advance")
-
-	def test_paid_amount_and_status(self):
-		employee_name = make_employee("_T@employe.advance")
-		advance = make_employee_advance(employee_name)
-
-		journal_entry = make_payment_entry(advance)
-		journal_entry.submit()
-
-		advance.reload()
-
-		self.assertEqual(advance.paid_amount, 1000)
-		self.assertEqual(advance.status, "Paid")
-
-		# try making over payment
-		journal_entry1 = make_payment_entry(advance)
-		self.assertRaises(EmployeeAdvanceOverPayment, journal_entry1.submit)
-
-	def test_paid_amount_on_pe_cancellation(self):
-		employee_name = make_employee("_T@employe.advance")
-		advance = make_employee_advance(employee_name)
-
-		pe = make_payment_entry(advance)
-		pe.submit()
-
-		advance.reload()
-
-		self.assertEqual(advance.paid_amount, 1000)
-		self.assertEqual(advance.status, "Paid")
-
-		pe.cancel()
-		advance.reload()
-
-		self.assertEqual(advance.paid_amount, 0)
-		self.assertEqual(advance.status, "Unpaid")
-
-		advance.cancel()
-		advance.reload()
-		self.assertEqual(advance.status, "Cancelled")
-
-	def test_claimed_status(self):
-		# CLAIMED Status check, full amount claimed
-		payable_account = get_payable_account("_Test Company")
-		claim = make_expense_claim(
-			payable_account, 1000, 1000, "_Test Company", "Travel Expenses - _TC", do_not_submit=True
-		)
-
-		advance = make_employee_advance(claim.employee)
-		pe = make_payment_entry(advance)
-		pe.submit()
-
-		claim = get_advances_for_claim(claim, advance.name)
-		claim.save()
-		claim.submit()
-
-		advance.reload()
-		self.assertEqual(advance.claimed_amount, 1000)
-		self.assertEqual(advance.status, "Claimed")
-
-		# advance should not be shown in claims
-		advances = get_advances(claim.employee)
-		advances = [entry.name for entry in advances]
-		self.assertTrue(advance.name not in advances)
-
-		# cancel claim; status should be Paid
-		claim.cancel()
-		advance.reload()
-		self.assertEqual(advance.claimed_amount, 0)
-		self.assertEqual(advance.status, "Paid")
-
-	def test_partly_claimed_and_returned_status(self):
-		payable_account = get_payable_account("_Test Company")
-		claim = make_expense_claim(
-			payable_account, 1000, 1000, "_Test Company", "Travel Expenses - _TC", do_not_submit=True
-		)
-
-		advance = make_employee_advance(claim.employee)
-		pe = make_payment_entry(advance)
-		pe.submit()
-
-		# PARTLY CLAIMED AND RETURNED status check
-		# 500 Claimed, 500 Returned
-		claim = make_expense_claim(
-			payable_account, 500, 500, "_Test Company", "Travel Expenses - _TC", do_not_submit=True
-		)
-
-		advance = make_employee_advance(claim.employee)
-		pe = make_payment_entry(advance)
-		pe.submit()
-
-		claim = get_advances_for_claim(claim, advance.name, amount=500)
-		claim.save()
-		claim.submit()
-
-		advance.reload()
-		self.assertEqual(advance.claimed_amount, 500)
-		self.assertEqual(advance.status, "Paid")
-
-		entry = make_return_entry(
-			employee=advance.employee,
-			company=advance.company,
-			employee_advance_name=advance.name,
-			return_amount=flt(advance.paid_amount - advance.claimed_amount),
-			advance_account=advance.advance_account,
-			mode_of_payment=advance.mode_of_payment,
-			currency=advance.currency,
-			exchange_rate=advance.exchange_rate,
-		)
-
-		entry = frappe.get_doc(entry)
-		entry.insert()
-		entry.submit()
-
-		advance.reload()
-		self.assertEqual(advance.return_amount, 500)
-		self.assertEqual(advance.status, "Partly Claimed and Returned")
-
-		# advance should not be shown in claims
-		advances = get_advances(claim.employee)
-		advances = [entry.name for entry in advances]
-		self.assertTrue(advance.name not in advances)
-
-		# Cancel return entry; status should change to PAID
-		entry.cancel()
-		advance.reload()
-		self.assertEqual(advance.return_amount, 0)
-		self.assertEqual(advance.status, "Paid")
-
-		# advance should be shown in claims
-		advances = get_advances(claim.employee)
-		advances = [entry.name for entry in advances]
-		self.assertTrue(advance.name in advances)
-
-	def test_repay_unclaimed_amount_from_salary(self):
-		employee_name = make_employee("_T@employe.advance")
-		advance = make_employee_advance(employee_name, {"repay_unclaimed_amount_from_salary": 1})
-		pe = make_payment_entry(advance)
-		pe.submit()
-
-		args = {"type": "Deduction"}
-		create_salary_component("Advance Salary - Deduction", **args)
-		make_salary_structure(
-			"Test Additional Salary for Advance Return", "Monthly", employee=employee_name
-		)
-
-		# additional salary for 700 first
-		advance.reload()
-		additional_salary = create_return_through_additional_salary(advance)
-		additional_salary.salary_component = "Advance Salary - Deduction"
-		additional_salary.payroll_date = nowdate()
-		additional_salary.amount = 700
-		additional_salary.insert()
-		additional_salary.submit()
-
-		advance.reload()
-		self.assertEqual(advance.return_amount, 700)
-
-		# additional salary for remaining 300
-		additional_salary = create_return_through_additional_salary(advance)
-		additional_salary.salary_component = "Advance Salary - Deduction"
-		additional_salary.payroll_date = nowdate()
-		additional_salary.amount = 300
-		additional_salary.insert()
-		additional_salary.submit()
-
-		advance.reload()
-		self.assertEqual(advance.return_amount, 1000)
-		self.assertEqual(advance.status, "Returned")
-
-		# update advance return amount on additional salary cancellation
-		additional_salary.cancel()
-		advance.reload()
-		self.assertEqual(advance.return_amount, 700)
-		self.assertEqual(advance.status, "Paid")
-
-	def tearDown(self):
-		frappe.db.rollback()
-
-
-def make_payment_entry(advance):
-	journal_entry = frappe.get_doc(make_bank_entry("Employee Advance", advance.name))
-	journal_entry.cheque_no = "123123"
-	journal_entry.cheque_date = nowdate()
-	journal_entry.save()
-
-	return journal_entry
-
-
-def make_employee_advance(employee_name, args=None):
-	doc = frappe.new_doc("Employee Advance")
-	doc.employee = employee_name
-	doc.company = "_Test company"
-	doc.purpose = "For site visit"
-	doc.currency = erpnext.get_company_currency("_Test company")
-	doc.exchange_rate = 1
-	doc.advance_amount = 1000
-	doc.posting_date = nowdate()
-	doc.advance_account = "_Test Employee Advance - _TC"
-
-	if args:
-		doc.update(args)
-
-	doc.insert()
-	doc.submit()
-
-	return doc
-
-
-def get_advances_for_claim(claim, advance_name, amount=None):
-	advances = get_advances(claim.employee, advance_name)
-
-	for entry in advances:
-		if amount:
-			allocated_amount = amount
-		else:
-			allocated_amount = flt(entry.paid_amount) - flt(entry.claimed_amount)
-
-		claim.append(
-			"advances",
-			{
-				"employee_advance": entry.name,
-				"posting_date": entry.posting_date,
-				"advance_account": entry.advance_account,
-				"advance_paid": entry.paid_amount,
-				"unclaimed_amount": allocated_amount,
-				"allocated_amount": allocated_amount,
-			},
-		)
-
-	return claim
diff --git a/erpnext/hr/doctype/employee_attendance_tool/__init__.py b/erpnext/hr/doctype/employee_attendance_tool/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/employee_attendance_tool/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.css b/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.css
deleted file mode 100644
index c8d6644..0000000
--- a/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.css
+++ /dev/null
@@ -1,21 +0,0 @@
-.top-toolbar{
-	padding-bottom: 30px;
-	margin-left: -17px;
-}
-
-.bottom-toolbar{
-	margin-left: -17px;
-	margin-top: 20px;
-}
-
-.btn{
-	margin-right: 5px;
-}
-
-.marked-employee-label{
-	font-weight: normal;
-}
-
-.checkbox{
-	margin-top: -3px;
-}
diff --git a/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.js b/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.js
deleted file mode 100644
index 5ae8c6b..0000000
--- a/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.js
+++ /dev/null
@@ -1,269 +0,0 @@
-frappe.ui.form.on("Employee Attendance Tool", {
-	refresh: function(frm) {
-		frm.disable_save();
-	},
-
-	onload: function(frm) {
-		frm.set_value("date", frappe.datetime.get_today());
-		erpnext.employee_attendance_tool.load_employees(frm);
-	},
-
-	date: function(frm) {
-		erpnext.employee_attendance_tool.load_employees(frm);
-	},
-
-	department: function(frm) {
-		erpnext.employee_attendance_tool.load_employees(frm);
-	},
-
-	branch: function(frm) {
-		erpnext.employee_attendance_tool.load_employees(frm);
-	},
-
-	company: function(frm) {
-		erpnext.employee_attendance_tool.load_employees(frm);
-	}
-
-});
-
-
-erpnext.employee_attendance_tool = {
-	load_employees: function(frm) {
-		if(frm.doc.date) {
-			frappe.call({
-				method: "erpnext.hr.doctype.employee_attendance_tool.employee_attendance_tool.get_employees",
-				args: {
-					date: frm.doc.date,
-					department: frm.doc.department,
-					branch: frm.doc.branch,
-					company: frm.doc.company
-				},
-				callback: function(r) {
-					if(r.message['unmarked'].length > 0) {
-						unhide_field('unmarked_attendance_section')
-						if(!frm.employee_area) {
-							frm.employee_area = $('<div>')
-							.appendTo(frm.fields_dict.employees_html.wrapper);
-						}
-						frm.EmployeeSelector = new erpnext.EmployeeSelector(frm, frm.employee_area, r.message['unmarked'])
-					}
-					else{
-						hide_field('unmarked_attendance_section')
-					}
-
-					if(r.message['marked'].length > 0) {
-						unhide_field('marked_attendance_section')
-						if(!frm.marked_employee_area) {
-							frm.marked_employee_area = $('<div>')
-								.appendTo(frm.fields_dict.marked_attendance_html.wrapper);
-						}
-						frm.marked_employee = new erpnext.MarkedEmployee(frm, frm.marked_employee_area, r.message['marked'])
-					}
-					else{
-						hide_field('marked_attendance_section')
-					}
-				}
-			});
-		}
-	}
-}
-
-erpnext.MarkedEmployee = class MarkedEmployee {
-	constructor(frm, wrapper, employee) {
-		this.wrapper = wrapper;
-		this.frm = frm;
-		this.make(frm, employee);
-	}
-	make(frm, employee) {
-		var me = this;
-		$(this.wrapper).empty();
-
-		var row;
-		$.each(employee, function(i, m) {
-			var attendance_icon = "fa fa-check";
-			var color_class = "";
-			if(m.status == "Absent") {
-				attendance_icon = "fa fa-check-empty"
-				color_class = "text-muted";
-			}
-			else if(m.status == "Half Day") {
-				attendance_icon = "fa fa-check-minus"
-			}
-
-			if (i===0 || i % 4===0) {
-				row = $('<div class="row"></div>').appendTo(me.wrapper);
-			}
-
-			$(repl('<div class="col-sm-3 %(color_class)s">\
-				<label class="marked-employee-label"><span class="%(icon)s"></span>\
-				%(employee)s</label>\
-				</div>', {
-					employee: m.employee_name,
-					icon: attendance_icon,
-					color_class: color_class
-				})).appendTo(row);
-		});
-	}
-};
-
-
-erpnext.EmployeeSelector = class EmployeeSelector {
-	constructor(frm, wrapper, employee) {
-		this.wrapper = wrapper;
-		this.frm = frm;
-		this.make(frm, employee);
-	}
-	make(frm, employee) {
-		var me = this;
-
-		$(this.wrapper).empty();
-		var employee_toolbar = $('<div class="col-sm-12 top-toolbar">\
-			<button class="btn btn-default btn-add btn-xs"></button>\
-			<button class="btn btn-xs btn-default btn-remove"></button>\
-			</div>').appendTo($(this.wrapper));
-
-		var mark_employee_toolbar = $('<div class="col-sm-12 bottom-toolbar">\
-			<button class="btn btn-primary btn-mark-present btn-xs"></button>\
-			<button class="btn btn-primary btn-mark-work-from-home btn-xs"></button>\
-			<button class="btn btn-warning btn-mark-half-day btn-xs"></button>\
-			<button class="btn btn-danger btn-mark-absent btn-xs"></button>\
-			</div>');
-
-		employee_toolbar.find(".btn-add")
-			.html(__('Check all'))
-			.on("click", function() {
-				$(me.wrapper).find('input[type="checkbox"]').each(function(i, check) {
-					if(!$(check).is(":checked")) {
-						check.checked = true;
-					}
-				});
-			});
-
-		employee_toolbar.find(".btn-remove")
-			.html(__('Uncheck all'))
-			.on("click", function() {
-				$(me.wrapper).find('input[type="checkbox"]').each(function(i, check) {
-					if($(check).is(":checked")) {
-						check.checked = false;
-					}
-				});
-			});
-
-		mark_employee_toolbar.find(".btn-mark-present")
-			.html(__('Mark Present'))
-			.on("click", function() {
-				var employee_present = [];
-				$(me.wrapper).find('input[type="checkbox"]').each(function(i, check) {
-					if($(check).is(":checked")) {
-						employee_present.push(employee[i]);
-					}
-				});
-				frappe.call({
-					method: "erpnext.hr.doctype.employee_attendance_tool.employee_attendance_tool.mark_employee_attendance",
-					args:{
-						"employee_list":employee_present,
-						"status":"Present",
-						"date":frm.doc.date,
-						"company":frm.doc.company
-					},
-
-					callback: function(r) {
-						erpnext.employee_attendance_tool.load_employees(frm);
-
-					}
-				});
-			});
-
-		mark_employee_toolbar.find(".btn-mark-absent")
-			.html(__('Mark Absent'))
-			.on("click", function() {
-				var employee_absent = [];
-				$(me.wrapper).find('input[type="checkbox"]').each(function(i, check) {
-					if($(check).is(":checked")) {
-						employee_absent.push(employee[i]);
-					}
-				});
-				frappe.call({
-					method: "erpnext.hr.doctype.employee_attendance_tool.employee_attendance_tool.mark_employee_attendance",
-					args:{
-						"employee_list":employee_absent,
-						"status":"Absent",
-						"date":frm.doc.date,
-						"company":frm.doc.company
-					},
-
-					callback: function(r) {
-						erpnext.employee_attendance_tool.load_employees(frm);
-
-					}
-				});
-			});
-
-
-		mark_employee_toolbar.find(".btn-mark-half-day")
-			.html(__('Mark Half Day'))
-			.on("click", function() {
-				var employee_half_day = [];
-				$(me.wrapper).find('input[type="checkbox"]').each(function(i, check) {
-					if($(check).is(":checked")) {
-						employee_half_day.push(employee[i]);
-					}
-				});
-				frappe.call({
-					method: "erpnext.hr.doctype.employee_attendance_tool.employee_attendance_tool.mark_employee_attendance",
-					args:{
-						"employee_list":employee_half_day,
-						"status":"Half Day",
-						"date":frm.doc.date,
-						"company":frm.doc.company
-					},
-
-					callback: function(r) {
-						erpnext.employee_attendance_tool.load_employees(frm);
-
-					}
-				});
-			});
-
-
-		mark_employee_toolbar.find(".btn-mark-work-from-home")
-			.html(__('Mark Work From Home'))
-			.on("click", function() {
-				var employee_work_from_home = [];
-				$(me.wrapper).find('input[type="checkbox"]').each(function(i, check) {
-					if($(check).is(":checked")) {
-						employee_work_from_home.push(employee[i]);
-					}
-				});
-				frappe.call({
-					method: "erpnext.hr.doctype.employee_attendance_tool.employee_attendance_tool.mark_employee_attendance",
-					args:{
-						"employee_list":employee_work_from_home,
-						"status":"Work From Home",
-						"date":frm.doc.date,
-						"company":frm.doc.company
-					},
-
-					callback: function(r) {
-						erpnext.employee_attendance_tool.load_employees(frm);
-
-					}
-				});
-			});
-
-		var row;
-		$.each(employee, function(i, m) {
-			if (i===0 || (i % 4) === 0) {
-				row = $('<div class="row"></div>').appendTo(me.wrapper);
-			}
-
-			$(repl('<div class="col-sm-3 unmarked-employee-checkbox">\
-				<div class="checkbox">\
-				<label><input type="checkbox" class="employee-check" employee="%(employee)s"/>\
-				%(employee)s</label>\
-				</div></div>', {employee: m.employee_name})).appendTo(row);
-		});
-
-		mark_employee_toolbar.appendTo($(this.wrapper));
-	}
-};
diff --git a/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.json b/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.json
deleted file mode 100644
index 256e056..0000000
--- a/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.json
+++ /dev/null
@@ -1,275 +0,0 @@
-{
- "allow_copy": 1, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "creation": "2016-01-27 14:59:47.849379", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "", 
- "fields": [
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "default": "Today", 
-   "fieldname": "date", 
-   "fieldtype": "Date", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Date", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "department", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Department", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Department", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "column_break_3", 
-   "fieldtype": "Column Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "branch", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Branch", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Branch", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "company", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Company", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Company", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "depends_on": "date", 
-   "fieldname": "unmarked_attendance_section", 
-   "fieldtype": "Section Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Unmarked Attendance", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "employees_html", 
-   "fieldtype": "HTML", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Employees HTML", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "depends_on": "date", 
-   "fieldname": "marked_attendance_section", 
-   "fieldtype": "Section Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Marked Attendance", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "marked_attendance_html", 
-   "fieldtype": "HTML", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Marked Attendance HTML", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }
- ], 
- "hide_heading": 1, 
- "hide_toolbar": 1, 
- "idx": 0, 
- "in_create": 0, 
-
- "is_submittable": 0, 
- "issingle": 1, 
- "istable": 0, 
- "max_attachments": 0, 
- "modified": "2016-01-29 02:14:36.034952", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Employee Attendance Tool", 
- "name_case": "", 
- "owner": "Administrator", 
- "permissions": [
-  {
-   "amend": 0, 
-   "apply_user_permissions": 0, 
-   "cancel": 0, 
-   "create": 1, 
-   "delete": 0, 
-   "email": 0, 
-   "export": 0, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 0, 
-   "read": 1, 
-   "report": 0, 
-   "role": "HR Manager", 
-   "set_user_permissions": 0, 
-   "share": 0, 
-   "submit": 0, 
-   "write": 1
-  }
- ], 
- "read_only": 0, 
- "read_only_onload": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC"
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.py b/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.py
deleted file mode 100644
index 43665cc..0000000
--- a/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.py
+++ /dev/null
@@ -1,69 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import json
-
-import frappe
-from frappe.model.document import Document
-from frappe.utils import getdate
-
-
-class EmployeeAttendanceTool(Document):
-	pass
-
-
-@frappe.whitelist()
-def get_employees(date, department=None, branch=None, company=None):
-	attendance_not_marked = []
-	attendance_marked = []
-	filters = {"status": "Active", "date_of_joining": ["<=", date]}
-
-	for field, value in {"department": department, "branch": branch, "company": company}.items():
-		if value:
-			filters[field] = value
-
-	employee_list = frappe.get_list(
-		"Employee", fields=["employee", "employee_name"], filters=filters, order_by="employee_name"
-	)
-	marked_employee = {}
-	for emp in frappe.get_list(
-		"Attendance", fields=["employee", "status"], filters={"attendance_date": date}
-	):
-		marked_employee[emp["employee"]] = emp["status"]
-
-	for employee in employee_list:
-		employee["status"] = marked_employee.get(employee["employee"])
-		if employee["employee"] not in marked_employee:
-			attendance_not_marked.append(employee)
-		else:
-			attendance_marked.append(employee)
-	return {"marked": attendance_marked, "unmarked": attendance_not_marked}
-
-
-@frappe.whitelist()
-def mark_employee_attendance(employee_list, status, date, leave_type=None, company=None):
-
-	employee_list = json.loads(employee_list)
-	for employee in employee_list:
-
-		if status == "On Leave" and leave_type:
-			leave_type = leave_type
-		else:
-			leave_type = None
-
-		company = frappe.db.get_value("Employee", employee["employee"], "Company", cache=True)
-
-		attendance = frappe.get_doc(
-			dict(
-				doctype="Attendance",
-				employee=employee.get("employee"),
-				employee_name=employee.get("employee_name"),
-				attendance_date=getdate(date),
-				status=status,
-				leave_type=leave_type,
-				company=company,
-			)
-		)
-		attendance.insert()
-		attendance.submit()
diff --git a/erpnext/hr/doctype/employee_boarding_activity/__init__.py b/erpnext/hr/doctype/employee_boarding_activity/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/employee_boarding_activity/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/employee_boarding_activity/employee_boarding_activity.json b/erpnext/hr/doctype/employee_boarding_activity/employee_boarding_activity.json
deleted file mode 100644
index 8474bd0..0000000
--- a/erpnext/hr/doctype/employee_boarding_activity/employee_boarding_activity.json
+++ /dev/null
@@ -1,108 +0,0 @@
-{
- "actions": [],
- "creation": "2018-05-09 05:37:18.439763",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "activity_name",
-  "user",
-  "role",
-  "begin_on",
-  "duration",
-  "column_break_3",
-  "task",
-  "task_weight",
-  "required_for_employee_creation",
-  "section_break_6",
-  "description"
- ],
- "fields": [
-  {
-   "columns": 3,
-   "fieldname": "activity_name",
-   "fieldtype": "Data",
-   "in_list_view": 1,
-   "label": "Activity Name",
-   "reqd": 1
-  },
-  {
-   "columns": 2,
-   "depends_on": "eval:!doc.role",
-   "fieldname": "user",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "User",
-   "options": "User"
-  },
-  {
-   "columns": 1,
-   "depends_on": "eval:!doc.user",
-   "fieldname": "role",
-   "fieldtype": "Link",
-   "label": "Role",
-   "options": "Role"
-  },
-  {
-   "fieldname": "column_break_3",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "task",
-   "fieldtype": "Link",
-   "label": "Task",
-   "no_copy": 1,
-   "options": "Task",
-   "read_only": 1
-  },
-  {
-   "fieldname": "task_weight",
-   "fieldtype": "Float",
-   "label": "Task Weight"
-  },
-  {
-   "default": "0",
-   "depends_on": "eval:['Employee Onboarding', 'Employee Onboarding Template'].includes(doc.parenttype)",
-   "description": "Applicable in the case of Employee Onboarding",
-   "fieldname": "required_for_employee_creation",
-   "fieldtype": "Check",
-   "label": "Required for Employee Creation"
-  },
-  {
-   "fieldname": "section_break_6",
-   "fieldtype": "Section Break"
-  },
-  {
-   "fieldname": "description",
-   "fieldtype": "Text Editor",
-   "label": "Description"
-  },
-  {
-   "columns": 2,
-   "fieldname": "duration",
-   "fieldtype": "Int",
-   "in_list_view": 1,
-   "label": "Duration (Days)"
-  },
-  {
-   "columns": 2,
-   "fieldname": "begin_on",
-   "fieldtype": "Int",
-   "in_list_view": 1,
-   "label": "Begin On (Days)"
-  }
- ],
- "istable": 1,
- "links": [],
- "modified": "2022-01-29 14:05:00.543122",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Employee Boarding Activity",
- "owner": "Administrator",
- "permissions": [],
- "quick_entry": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": [],
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/employee_boarding_activity/employee_boarding_activity.py b/erpnext/hr/doctype/employee_boarding_activity/employee_boarding_activity.py
deleted file mode 100644
index e824081..0000000
--- a/erpnext/hr/doctype/employee_boarding_activity/employee_boarding_activity.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-from frappe.model.document import Document
-
-
-class EmployeeBoardingActivity(Document):
-	pass
diff --git a/erpnext/hr/doctype/employee_checkin/__init__.py b/erpnext/hr/doctype/employee_checkin/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/employee_checkin/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/employee_checkin/employee_checkin.js b/erpnext/hr/doctype/employee_checkin/employee_checkin.js
deleted file mode 100644
index c2403ca..0000000
--- a/erpnext/hr/doctype/employee_checkin/employee_checkin.js
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Employee Checkin', {
-	setup: (frm) => {
-		if(!frm.doc.time) {
-			frm.set_value("time", frappe.datetime.now_datetime());
-		}
-	}
-});
diff --git a/erpnext/hr/doctype/employee_checkin/employee_checkin.json b/erpnext/hr/doctype/employee_checkin/employee_checkin.json
deleted file mode 100644
index d34316d..0000000
--- a/erpnext/hr/doctype/employee_checkin/employee_checkin.json
+++ /dev/null
@@ -1,208 +0,0 @@
-{
- "actions": [],
- "allow_import": 1,
- "autoname": "EMP-CKIN-.MM.-.YYYY.-.######",
- "creation": "2019-06-10 11:56:34.536413",
- "doctype": "DocType",
- "engine": "InnoDB",
- "field_order": [
-  "employee",
-  "employee_name",
-  "log_type",
-  "shift",
-  "column_break_4",
-  "time",
-  "device_id",
-  "skip_auto_attendance",
-  "attendance",
-  "shift_start",
-  "shift_end",
-  "shift_actual_start",
-  "shift_actual_end"
- ],
- "fields": [
-  {
-   "fieldname": "employee",
-   "fieldtype": "Link",
-   "label": "Employee",
-   "options": "Employee",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "employee.employee_name",
-   "fieldname": "employee_name",
-   "fieldtype": "Data",
-   "in_list_view": 1,
-   "label": "Employee Name",
-   "read_only": 1
-  },
-  {
-   "fieldname": "log_type",
-   "fieldtype": "Select",
-   "in_list_view": 1,
-   "label": "Log Type",
-   "options": "\nIN\nOUT"
-  },
-  {
-   "fieldname": "shift",
-   "fieldtype": "Link",
-   "label": "Shift",
-   "options": "Shift Type",
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break_4",
-   "fieldtype": "Column Break"
-  },
-  {
-   "default": "Now",
-   "fieldname": "time",
-   "fieldtype": "Datetime",
-   "in_list_view": 1,
-   "label": "Time",
-   "permlevel": 1,
-   "reqd": 1
-  },
-  {
-   "fieldname": "device_id",
-   "fieldtype": "Data",
-   "label": "Location / Device ID"
-  },
-  {
-   "default": "0",
-   "fieldname": "skip_auto_attendance",
-   "fieldtype": "Check",
-   "label": "Skip Auto Attendance"
-  },
-  {
-   "fieldname": "attendance",
-   "fieldtype": "Link",
-   "label": "Attendance Marked",
-   "options": "Attendance",
-   "read_only": 1
-  },
-  {
-   "fieldname": "shift_start",
-   "fieldtype": "Datetime",
-   "hidden": 1,
-   "label": "Shift Start"
-  },
-  {
-   "fieldname": "shift_end",
-   "fieldtype": "Datetime",
-   "hidden": 1,
-   "label": "Shift End"
-  },
-  {
-   "fieldname": "shift_actual_start",
-   "fieldtype": "Datetime",
-   "hidden": 1,
-   "label": "Shift Actual Start"
-  },
-  {
-   "fieldname": "shift_actual_end",
-   "fieldtype": "Datetime",
-   "hidden": 1,
-   "label": "Shift Actual End"
-  }
- ],
- "links": [],
- "modified": "2020-07-08 11:02:32.660986",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Employee Checkin",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "import": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "import": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "import": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "delete": 1,
-   "read": 1,
-   "role": "Employee",
-   "write": 1
-  },
-  {
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "permlevel": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "permlevel": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "permlevel": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "permlevel": 1,
-   "read": 1,
-   "role": "Employee"
-  }
- ],
- "sort_field": "modified",
- "sort_order": "ASC",
- "title_field": "employee_name",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/employee_checkin/employee_checkin.py b/erpnext/hr/doctype/employee_checkin/employee_checkin.py
deleted file mode 100644
index ecee541..0000000
--- a/erpnext/hr/doctype/employee_checkin/employee_checkin.py
+++ /dev/null
@@ -1,278 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.utils import cint, get_datetime, get_link_to_form
-
-from erpnext.hr.doctype.attendance.attendance import (
-	get_duplicate_attendance_record,
-	get_overlapping_shift_attendance,
-)
-from erpnext.hr.doctype.shift_assignment.shift_assignment import (
-	get_actual_start_end_datetime_of_shift,
-)
-from erpnext.hr.utils import validate_active_employee
-
-
-class EmployeeCheckin(Document):
-	def validate(self):
-		validate_active_employee(self.employee)
-		self.validate_duplicate_log()
-		self.fetch_shift()
-
-	def validate_duplicate_log(self):
-		doc = frappe.db.exists(
-			"Employee Checkin", {"employee": self.employee, "time": self.time, "name": ["!=", self.name]}
-		)
-		if doc:
-			doc_link = frappe.get_desk_link("Employee Checkin", doc)
-			frappe.throw(
-				_("This employee already has a log with the same timestamp.{0}").format("<Br>" + doc_link)
-			)
-
-	def fetch_shift(self):
-		shift_actual_timings = get_actual_start_end_datetime_of_shift(
-			self.employee, get_datetime(self.time), True
-		)
-		if shift_actual_timings:
-			if (
-				shift_actual_timings.shift_type.determine_check_in_and_check_out
-				== "Strictly based on Log Type in Employee Checkin"
-				and not self.log_type
-				and not self.skip_auto_attendance
-			):
-				frappe.throw(
-					_("Log Type is required for check-ins falling in the shift: {0}.").format(
-						shift_actual_timings.shift_type.name
-					)
-				)
-			if not self.attendance:
-				self.shift = shift_actual_timings.shift_type.name
-				self.shift_actual_start = shift_actual_timings.actual_start
-				self.shift_actual_end = shift_actual_timings.actual_end
-				self.shift_start = shift_actual_timings.start_datetime
-				self.shift_end = shift_actual_timings.end_datetime
-		else:
-			self.shift = None
-
-
-@frappe.whitelist()
-def add_log_based_on_employee_field(
-	employee_field_value,
-	timestamp,
-	device_id=None,
-	log_type=None,
-	skip_auto_attendance=0,
-	employee_fieldname="attendance_device_id",
-):
-	"""Finds the relevant Employee using the employee field value and creates a Employee Checkin.
-
-	:param employee_field_value: The value to look for in employee field.
-	:param timestamp: The timestamp of the Log. Currently expected in the following format as string: '2019-05-08 10:48:08.000000'
-	:param device_id: (optional)Location / Device ID. A short string is expected.
-	:param log_type: (optional)Direction of the Punch if available (IN/OUT).
-	:param skip_auto_attendance: (optional)Skip auto attendance field will be set for this log(0/1).
-	:param employee_fieldname: (Default: attendance_device_id)Name of the field in Employee DocType based on which employee lookup will happen.
-	"""
-
-	if not employee_field_value or not timestamp:
-		frappe.throw(_("'employee_field_value' and 'timestamp' are required."))
-
-	employee = frappe.db.get_values(
-		"Employee",
-		{employee_fieldname: employee_field_value},
-		["name", "employee_name", employee_fieldname],
-		as_dict=True,
-	)
-	if employee:
-		employee = employee[0]
-	else:
-		frappe.throw(
-			_("No Employee found for the given employee field value. '{}': {}").format(
-				employee_fieldname, employee_field_value
-			)
-		)
-
-	doc = frappe.new_doc("Employee Checkin")
-	doc.employee = employee.name
-	doc.employee_name = employee.employee_name
-	doc.time = timestamp
-	doc.device_id = device_id
-	doc.log_type = log_type
-	if cint(skip_auto_attendance) == 1:
-		doc.skip_auto_attendance = "1"
-	doc.insert()
-
-	return doc
-
-
-def mark_attendance_and_link_log(
-	logs,
-	attendance_status,
-	attendance_date,
-	working_hours=None,
-	late_entry=False,
-	early_exit=False,
-	in_time=None,
-	out_time=None,
-	shift=None,
-):
-	"""Creates an attendance and links the attendance to the Employee Checkin.
-	Note: If attendance is already present for the given date, the logs are marked as skipped and no exception is thrown.
-
-	:param logs: The List of 'Employee Checkin'.
-	:param attendance_status: Attendance status to be marked. One of: (Present, Absent, Half Day, Skip). Note: 'On Leave' is not supported by this function.
-	:param attendance_date: Date of the attendance to be created.
-	:param working_hours: (optional)Number of working hours for the given date.
-	"""
-	log_names = [x.name for x in logs]
-	employee = logs[0].employee
-
-	if attendance_status == "Skip":
-		skip_attendance_in_checkins(log_names)
-		return None
-
-	elif attendance_status in ("Present", "Absent", "Half Day"):
-		employee_doc = frappe.get_doc("Employee", employee)
-		duplicate = get_duplicate_attendance_record(employee, attendance_date, shift)
-		overlapping = get_overlapping_shift_attendance(employee, attendance_date, shift)
-
-		if not duplicate and not overlapping:
-			doc_dict = {
-				"doctype": "Attendance",
-				"employee": employee,
-				"attendance_date": attendance_date,
-				"status": attendance_status,
-				"working_hours": working_hours,
-				"company": employee_doc.company,
-				"shift": shift,
-				"late_entry": late_entry,
-				"early_exit": early_exit,
-				"in_time": in_time,
-				"out_time": out_time,
-			}
-			attendance = frappe.get_doc(doc_dict).insert()
-			attendance.submit()
-
-			if attendance_status == "Absent":
-				attendance.add_comment(
-					text=_("Employee was marked Absent for not meeting the working hours threshold.")
-				)
-
-			frappe.db.sql(
-				"""update `tabEmployee Checkin`
-				set attendance = %s
-				where name in %s""",
-				(attendance.name, log_names),
-			)
-			return attendance
-		else:
-			skip_attendance_in_checkins(log_names)
-			add_comment_in_checkins(log_names, duplicate, overlapping)
-			return None
-
-	else:
-		frappe.throw(_("{} is an invalid Attendance Status.").format(attendance_status))
-
-
-def calculate_working_hours(logs, check_in_out_type, working_hours_calc_type):
-	"""Given a set of logs in chronological order calculates the total working hours based on the parameters.
-	Zero is returned for all invalid cases.
-
-	:param logs: The List of 'Employee Checkin'.
-	:param check_in_out_type: One of: 'Alternating entries as IN and OUT during the same shift', 'Strictly based on Log Type in Employee Checkin'
-	:param working_hours_calc_type: One of: 'First Check-in and Last Check-out', 'Every Valid Check-in and Check-out'
-	"""
-	total_hours = 0
-	in_time = out_time = None
-	if check_in_out_type == "Alternating entries as IN and OUT during the same shift":
-		in_time = logs[0].time
-		if len(logs) >= 2:
-			out_time = logs[-1].time
-		if working_hours_calc_type == "First Check-in and Last Check-out":
-			# assumption in this case: First log always taken as IN, Last log always taken as OUT
-			total_hours = time_diff_in_hours(in_time, logs[-1].time)
-		elif working_hours_calc_type == "Every Valid Check-in and Check-out":
-			logs = logs[:]
-			while len(logs) >= 2:
-				total_hours += time_diff_in_hours(logs[0].time, logs[1].time)
-				del logs[:2]
-
-	elif check_in_out_type == "Strictly based on Log Type in Employee Checkin":
-		if working_hours_calc_type == "First Check-in and Last Check-out":
-			first_in_log_index = find_index_in_dict(logs, "log_type", "IN")
-			first_in_log = (
-				logs[first_in_log_index] if first_in_log_index or first_in_log_index == 0 else None
-			)
-			last_out_log_index = find_index_in_dict(reversed(logs), "log_type", "OUT")
-			last_out_log = (
-				logs[len(logs) - 1 - last_out_log_index]
-				if last_out_log_index or last_out_log_index == 0
-				else None
-			)
-			if first_in_log and last_out_log:
-				in_time, out_time = first_in_log.time, last_out_log.time
-				total_hours = time_diff_in_hours(in_time, out_time)
-		elif working_hours_calc_type == "Every Valid Check-in and Check-out":
-			in_log = out_log = None
-			for log in logs:
-				if in_log and out_log:
-					if not in_time:
-						in_time = in_log.time
-					out_time = out_log.time
-					total_hours += time_diff_in_hours(in_log.time, out_log.time)
-					in_log = out_log = None
-				if not in_log:
-					in_log = log if log.log_type == "IN" else None
-					if in_log and not in_time:
-						in_time = in_log.time
-				elif not out_log:
-					out_log = log if log.log_type == "OUT" else None
-
-			if in_log and out_log:
-				out_time = out_log.time
-				total_hours += time_diff_in_hours(in_log.time, out_log.time)
-
-	return total_hours, in_time, out_time
-
-
-def time_diff_in_hours(start, end):
-	return round(float((end - start).total_seconds()) / 3600, 2)
-
-
-def find_index_in_dict(dict_list, key, value):
-	return next((index for (index, d) in enumerate(dict_list) if d[key] == value), None)
-
-
-def add_comment_in_checkins(log_names, duplicate, overlapping):
-	if duplicate:
-		text = _("Auto Attendance skipped due to duplicate attendance record: {}").format(
-			get_link_to_form("Attendance", duplicate[0].name)
-		)
-	else:
-		text = _("Auto Attendance skipped due to overlapping attendance record: {}").format(
-			get_link_to_form("Attendance", overlapping.name)
-		)
-
-	for name in log_names:
-		frappe.get_doc(
-			{
-				"doctype": "Comment",
-				"comment_type": "Comment",
-				"reference_doctype": "Employee Checkin",
-				"reference_name": name,
-				"content": text,
-			}
-		).insert(ignore_permissions=True)
-
-
-def skip_attendance_in_checkins(log_names):
-	EmployeeCheckin = frappe.qb.DocType("Employee Checkin")
-	(
-		frappe.qb.update(EmployeeCheckin)
-		.set("skip_auto_attendance", 1)
-		.where(EmployeeCheckin.name.isin(log_names))
-	).run()
diff --git a/erpnext/hr/doctype/employee_checkin/test_employee_checkin.py b/erpnext/hr/doctype/employee_checkin/test_employee_checkin.py
deleted file mode 100644
index eb81f7d..0000000
--- a/erpnext/hr/doctype/employee_checkin/test_employee_checkin.py
+++ /dev/null
@@ -1,346 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-from datetime import datetime, timedelta
-
-import frappe
-from frappe.tests.utils import FrappeTestCase
-from frappe.utils import (
-	add_days,
-	get_time,
-	get_year_ending,
-	get_year_start,
-	getdate,
-	now_datetime,
-	nowdate,
-)
-
-from erpnext.hr.doctype.employee.test_employee import make_employee
-from erpnext.hr.doctype.employee_checkin.employee_checkin import (
-	add_log_based_on_employee_field,
-	calculate_working_hours,
-	mark_attendance_and_link_log,
-)
-from erpnext.hr.doctype.holiday_list.test_holiday_list import set_holiday_list
-from erpnext.hr.doctype.leave_application.test_leave_application import get_first_sunday
-from erpnext.hr.doctype.shift_type.test_shift_type import make_shift_assignment, setup_shift_type
-from erpnext.payroll.doctype.salary_slip.test_salary_slip import make_holiday_list
-
-
-class TestEmployeeCheckin(FrappeTestCase):
-	def setUp(self):
-		frappe.db.delete("Shift Type")
-		frappe.db.delete("Shift Assignment")
-		frappe.db.delete("Employee Checkin")
-
-		from_date = get_year_start(getdate())
-		to_date = get_year_ending(getdate())
-		self.holiday_list = make_holiday_list(from_date=from_date, to_date=to_date)
-
-	def test_add_log_based_on_employee_field(self):
-		employee = make_employee("test_add_log_based_on_employee_field@example.com")
-		employee = frappe.get_doc("Employee", employee)
-		employee.attendance_device_id = "3344"
-		employee.save()
-
-		time_now = now_datetime().__str__()[:-7]
-		employee_checkin = add_log_based_on_employee_field("3344", time_now, "mumbai_first_floor", "IN")
-		self.assertEqual(employee_checkin.employee, employee.name)
-		self.assertEqual(employee_checkin.time, time_now)
-		self.assertEqual(employee_checkin.device_id, "mumbai_first_floor")
-		self.assertEqual(employee_checkin.log_type, "IN")
-
-	def test_mark_attendance_and_link_log(self):
-		employee = make_employee("test_mark_attendance_and_link_log@example.com")
-		logs = make_n_checkins(employee, 3)
-		mark_attendance_and_link_log(logs, "Skip", nowdate())
-		log_names = [log.name for log in logs]
-		logs_count = frappe.db.count(
-			"Employee Checkin", {"name": ["in", log_names], "skip_auto_attendance": 1}
-		)
-		self.assertEqual(logs_count, 3)
-
-		logs = make_n_checkins(employee, 4, 2)
-		now_date = nowdate()
-		frappe.db.delete("Attendance", {"employee": employee})
-		attendance = mark_attendance_and_link_log(logs, "Present", now_date, 8.2)
-		log_names = [log.name for log in logs]
-		logs_count = frappe.db.count(
-			"Employee Checkin", {"name": ["in", log_names], "attendance": attendance.name}
-		)
-		self.assertEqual(logs_count, 4)
-		attendance_count = frappe.db.count(
-			"Attendance",
-			{"status": "Present", "working_hours": 8.2, "employee": employee, "attendance_date": now_date},
-		)
-		self.assertEqual(attendance_count, 1)
-
-	def test_unlink_attendance_on_cancellation(self):
-		employee = make_employee("test_mark_attendance_and_link_log@example.com")
-		logs = make_n_checkins(employee, 3)
-
-		frappe.db.delete("Attendance", {"employee": employee})
-		attendance = mark_attendance_and_link_log(logs, "Present", nowdate(), 8.2)
-		attendance.cancel()
-
-		linked_logs = frappe.db.get_all("Employee Checkin", {"attendance": attendance.name})
-		self.assertEquals(len(linked_logs), 0)
-
-	def test_calculate_working_hours(self):
-		check_in_out_type = [
-			"Alternating entries as IN and OUT during the same shift",
-			"Strictly based on Log Type in Employee Checkin",
-		]
-		working_hours_calc_type = [
-			"First Check-in and Last Check-out",
-			"Every Valid Check-in and Check-out",
-		]
-		logs_type_1 = [
-			{"time": now_datetime() - timedelta(minutes=390)},
-			{"time": now_datetime() - timedelta(minutes=300)},
-			{"time": now_datetime() - timedelta(minutes=270)},
-			{"time": now_datetime() - timedelta(minutes=90)},
-			{"time": now_datetime() - timedelta(minutes=0)},
-		]
-		logs_type_2 = [
-			{"time": now_datetime() - timedelta(minutes=390), "log_type": "OUT"},
-			{"time": now_datetime() - timedelta(minutes=360), "log_type": "IN"},
-			{"time": now_datetime() - timedelta(minutes=300), "log_type": "OUT"},
-			{"time": now_datetime() - timedelta(minutes=290), "log_type": "IN"},
-			{"time": now_datetime() - timedelta(minutes=260), "log_type": "OUT"},
-			{"time": now_datetime() - timedelta(minutes=240), "log_type": "IN"},
-			{"time": now_datetime() - timedelta(minutes=150), "log_type": "IN"},
-			{"time": now_datetime() - timedelta(minutes=60), "log_type": "OUT"},
-		]
-		logs_type_1 = [frappe._dict(x) for x in logs_type_1]
-		logs_type_2 = [frappe._dict(x) for x in logs_type_2]
-
-		working_hours = calculate_working_hours(
-			logs_type_1, check_in_out_type[0], working_hours_calc_type[0]
-		)
-		self.assertEqual(working_hours, (6.5, logs_type_1[0].time, logs_type_1[-1].time))
-
-		working_hours = calculate_working_hours(
-			logs_type_1, check_in_out_type[0], working_hours_calc_type[1]
-		)
-		self.assertEqual(working_hours, (4.5, logs_type_1[0].time, logs_type_1[-1].time))
-
-		working_hours = calculate_working_hours(
-			logs_type_2, check_in_out_type[1], working_hours_calc_type[0]
-		)
-		self.assertEqual(working_hours, (5, logs_type_2[1].time, logs_type_2[-1].time))
-
-		working_hours = calculate_working_hours(
-			logs_type_2, check_in_out_type[1], working_hours_calc_type[1]
-		)
-		self.assertEqual(working_hours, (4.5, logs_type_2[1].time, logs_type_2[-1].time))
-
-		working_hours = calculate_working_hours(
-			[logs_type_2[1], logs_type_2[-1]], check_in_out_type[1], working_hours_calc_type[1]
-		)
-		self.assertEqual(working_hours, (5.0, logs_type_2[1].time, logs_type_2[-1].time))
-
-	def test_fetch_shift(self):
-		employee = make_employee("test_employee_checkin@example.com", company="_Test Company")
-
-		# shift setup for 8-12
-		shift_type = setup_shift_type()
-		date = getdate()
-		make_shift_assignment(shift_type.name, employee, date)
-
-		# within shift time
-		timestamp = datetime.combine(date, get_time("08:45:00"))
-		log = make_checkin(employee, timestamp)
-		self.assertEqual(log.shift, shift_type.name)
-
-		# "begin checkin before shift time" = 60 mins, so should work for 7:00:00
-		timestamp = datetime.combine(date, get_time("07:00:00"))
-		log = make_checkin(employee, timestamp)
-		self.assertEqual(log.shift, shift_type.name)
-
-		# "allow checkout after shift end time" = 60 mins, so should work for 13:00:00
-		timestamp = datetime.combine(date, get_time("13:00:00"))
-		log = make_checkin(employee, timestamp)
-		self.assertEqual(log.shift, shift_type.name)
-
-		# should not fetch this shift beyond allowed time
-		timestamp = datetime.combine(date, get_time("13:01:00"))
-		log = make_checkin(employee, timestamp)
-		self.assertIsNone(log.shift)
-
-	def test_fetch_shift_for_assignment_with_end_date(self):
-		employee = make_employee("test_employee_checkin@example.com", company="_Test Company")
-
-		# shift setup for 8-12
-		shift1 = setup_shift_type()
-		# 12:30 - 16:30
-		shift2 = setup_shift_type(shift_type="Shift 2", start_time="12:30:00", end_time="16:30:00")
-
-		date = getdate()
-		make_shift_assignment(shift1.name, employee, date, add_days(date, 15))
-		make_shift_assignment(shift2.name, employee, date, add_days(date, 15))
-
-		timestamp = datetime.combine(date, get_time("08:45:00"))
-		log = make_checkin(employee, timestamp)
-		self.assertEqual(log.shift, shift1.name)
-
-		timestamp = datetime.combine(date, get_time("12:45:00"))
-		log = make_checkin(employee, timestamp)
-		self.assertEqual(log.shift, shift2.name)
-
-		# log after end date
-		timestamp = datetime.combine(add_days(date, 16), get_time("12:45:00"))
-		log = make_checkin(employee, timestamp)
-		self.assertIsNone(log.shift)
-
-	def test_shift_start_and_end_timings(self):
-		employee = make_employee("test_employee_checkin@example.com", company="_Test Company")
-
-		# shift setup for 8-12
-		shift_type = setup_shift_type()
-		date = getdate()
-		make_shift_assignment(shift_type.name, employee, date)
-
-		timestamp = datetime.combine(date, get_time("08:45:00"))
-		log = make_checkin(employee, timestamp)
-
-		self.assertEqual(log.shift, shift_type.name)
-		self.assertEqual(log.shift_start, datetime.combine(date, get_time("08:00:00")))
-		self.assertEqual(log.shift_end, datetime.combine(date, get_time("12:00:00")))
-		self.assertEqual(log.shift_actual_start, datetime.combine(date, get_time("07:00:00")))
-		self.assertEqual(log.shift_actual_end, datetime.combine(date, get_time("13:00:00")))
-
-	def test_fetch_shift_based_on_default_shift(self):
-		employee = make_employee("test_default_shift@example.com", company="_Test Company")
-		default_shift = setup_shift_type(
-			shift_type="Default Shift", start_time="14:00:00", end_time="16:00:00"
-		)
-
-		date = getdate()
-		frappe.db.set_value("Employee", employee, "default_shift", default_shift.name)
-
-		timestamp = datetime.combine(date, get_time("14:45:00"))
-		log = make_checkin(employee, timestamp)
-
-		# should consider default shift
-		self.assertEqual(log.shift, default_shift.name)
-
-	def test_fetch_shift_spanning_over_two_days(self):
-		employee = make_employee("test_employee_checkin@example.com", company="_Test Company")
-		shift_type = setup_shift_type(
-			shift_type="Midnight Shift", start_time="23:00:00", end_time="01:00:00"
-		)
-		date = getdate()
-		next_day = add_days(date, 1)
-		make_shift_assignment(shift_type.name, employee, date)
-
-		# log falls in the first day
-		timestamp = datetime.combine(date, get_time("23:00:00"))
-		log = make_checkin(employee, timestamp)
-
-		self.assertEqual(log.shift, shift_type.name)
-		self.assertEqual(log.shift_start, datetime.combine(date, get_time("23:00:00")))
-		self.assertEqual(log.shift_end, datetime.combine(next_day, get_time("01:00:00")))
-		self.assertEqual(log.shift_actual_start, datetime.combine(date, get_time("22:00:00")))
-		self.assertEqual(log.shift_actual_end, datetime.combine(next_day, get_time("02:00:00")))
-
-		log.delete()
-
-		# log falls in the second day
-		prev_day = add_days(date, -1)
-		timestamp = datetime.combine(date, get_time("01:30:00"))
-		log = make_checkin(employee, timestamp)
-		self.assertEqual(log.shift, shift_type.name)
-		self.assertEqual(log.shift_start, datetime.combine(prev_day, get_time("23:00:00")))
-		self.assertEqual(log.shift_end, datetime.combine(date, get_time("01:00:00")))
-		self.assertEqual(log.shift_actual_start, datetime.combine(prev_day, get_time("22:00:00")))
-		self.assertEqual(log.shift_actual_end, datetime.combine(date, get_time("02:00:00")))
-
-	def test_no_shift_fetched_on_holiday_as_per_shift_holiday_list(self):
-		date = getdate()
-		from_date = get_year_start(date)
-		to_date = get_year_ending(date)
-		holiday_list = make_holiday_list(from_date=from_date, to_date=to_date)
-
-		employee = make_employee("test_shift_with_holiday@example.com", company="_Test Company")
-		setup_shift_type(shift_type="Test Holiday Shift", holiday_list=holiday_list)
-
-		first_sunday = get_first_sunday(holiday_list, for_date=date)
-		timestamp = datetime.combine(first_sunday, get_time("08:00:00"))
-		log = make_checkin(employee, timestamp)
-
-		self.assertIsNone(log.shift)
-
-	@set_holiday_list("Salary Slip Test Holiday List", "_Test Company")
-	def test_no_shift_fetched_on_holiday_as_per_employee_holiday_list(self):
-		employee = make_employee("test_shift_with_holiday@example.com", company="_Test Company")
-		shift_type = setup_shift_type(shift_type="Test Holiday Shift")
-		shift_type.holiday_list = None
-		shift_type.save()
-
-		date = getdate()
-
-		first_sunday = get_first_sunday(self.holiday_list, for_date=date)
-		timestamp = datetime.combine(first_sunday, get_time("08:00:00"))
-		log = make_checkin(employee, timestamp)
-
-		self.assertIsNone(log.shift)
-
-	def test_consecutive_shift_assignments_overlapping_within_grace_period(self):
-		# test adjustment for start and end times if they are overlapping
-		# within "begin_check_in_before_shift_start_time" and "allow_check_out_after_shift_end_time" periods
-		employee = make_employee("test_shift@example.com", company="_Test Company")
-
-		# 8 - 12
-		shift1 = setup_shift_type()
-		# 12:30 - 16:30
-		shift2 = setup_shift_type(
-			shift_type="Consecutive Shift", start_time="12:30:00", end_time="16:30:00"
-		)
-
-		# the actual start and end times (with grace) for these shifts are 7 - 13 and 11:30 - 17:30
-		date = getdate()
-		make_shift_assignment(shift1.name, employee, date)
-		make_shift_assignment(shift2.name, employee, date)
-
-		# log at 12:30 should set shift2 and actual start as 12 and not 11:30
-		timestamp = datetime.combine(date, get_time("12:30:00"))
-		log = make_checkin(employee, timestamp)
-		self.assertEqual(log.shift, shift2.name)
-		self.assertEqual(log.shift_start, datetime.combine(date, get_time("12:30:00")))
-		self.assertEqual(log.shift_actual_start, datetime.combine(date, get_time("12:00:00")))
-
-		# log at 12:00 should set shift1 and actual end as 12 and not 1 since the next shift's grace starts
-		timestamp = datetime.combine(date, get_time("12:00:00"))
-		log = make_checkin(employee, timestamp)
-		self.assertEqual(log.shift, shift1.name)
-		self.assertEqual(log.shift_end, datetime.combine(date, get_time("12:00:00")))
-		self.assertEqual(log.shift_actual_end, datetime.combine(date, get_time("12:00:00")))
-
-		# log at 12:01 should set shift2
-		timestamp = datetime.combine(date, get_time("12:01:00"))
-		log = make_checkin(employee, timestamp)
-		self.assertEqual(log.shift, shift2.name)
-
-
-def make_n_checkins(employee, n, hours_to_reverse=1):
-	logs = [make_checkin(employee, now_datetime() - timedelta(hours=hours_to_reverse, minutes=n + 1))]
-	for i in range(n - 1):
-		logs.append(
-			make_checkin(employee, now_datetime() - timedelta(hours=hours_to_reverse, minutes=n - i))
-		)
-	return logs
-
-
-def make_checkin(employee, time=now_datetime()):
-	log = frappe.get_doc(
-		{
-			"doctype": "Employee Checkin",
-			"employee": employee,
-			"time": time,
-			"device_id": "device1",
-			"log_type": "IN",
-		}
-	).insert()
-	return log
diff --git a/erpnext/hr/doctype/employee_grade/__init__.py b/erpnext/hr/doctype/employee_grade/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/employee_grade/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/employee_grade/employee_grade.js b/erpnext/hr/doctype/employee_grade/employee_grade.js
deleted file mode 100644
index 6c67f54..0000000
--- a/erpnext/hr/doctype/employee_grade/employee_grade.js
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Employee Grade', {
-    refresh: function (frm) {
-
-    },
-    setup: function (frm) {
-        frm.set_query("default_salary_structure", function () {
-            return {
-                "filters": {
-                    "docstatus": 1,
-                    "is_active": "Yes"
-                }
-            };
-        });
-
-        frm.set_query("default_leave_policy", function () {
-            return {
-                "filters": {
-                    "docstatus": 1
-                }
-            };
-        });
-
-
-    }
-
-});
diff --git a/erpnext/hr/doctype/employee_grade/employee_grade.json b/erpnext/hr/doctype/employee_grade/employee_grade.json
deleted file mode 100644
index 4967137..0000000
--- a/erpnext/hr/doctype/employee_grade/employee_grade.json
+++ /dev/null
@@ -1,89 +0,0 @@
-{
- "actions": [],
- "allow_import": 1,
- "allow_rename": 1,
- "autoname": "Prompt",
- "creation": "2018-04-13 16:14:24.174138",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "default_salary_structure",
-  "currency",
-  "default_base_pay"
- ],
- "fields": [
-  {
-   "fieldname": "default_salary_structure",
-   "fieldtype": "Link",
-   "label": "Default Salary Structure",
-   "options": "Salary Structure"
-  },
-  {
-   "depends_on": "default_salary_structure",
-   "fieldname": "default_base_pay",
-   "fieldtype": "Currency",
-   "label": "Default Base Pay",
-   "options": "currency"
-  },
-  {
-   "fetch_from": "default_salary_structure.currency",
-   "fieldname": "currency",
-   "fieldtype": "Link",
-   "hidden": 1,
-   "label": "Currency",
-   "options": "Currency",
-   "read_only": 1
-  }
- ],
- "index_web_pages_for_search": 1,
- "links": [],
- "modified": "2022-05-06 15:42:10.395508",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Employee Grade",
- "naming_rule": "Set by user",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "write": 1
-  }
- ],
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": [],
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/employee_grade/employee_grade.py b/erpnext/hr/doctype/employee_grade/employee_grade.py
deleted file mode 100644
index 41b7915..0000000
--- a/erpnext/hr/doctype/employee_grade/employee_grade.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-from frappe.model.document import Document
-
-
-class EmployeeGrade(Document):
-	pass
diff --git a/erpnext/hr/doctype/employee_grade/employee_grade_dashboard.py b/erpnext/hr/doctype/employee_grade/employee_grade_dashboard.py
deleted file mode 100644
index efc68ce..0000000
--- a/erpnext/hr/doctype/employee_grade/employee_grade_dashboard.py
+++ /dev/null
@@ -1,9 +0,0 @@
-def get_data():
-	return {
-		"transactions": [
-			{
-				"items": ["Employee", "Leave Period"],
-			},
-			{"items": ["Employee Onboarding Template", "Employee Separation Template"]},
-		]
-	}
diff --git a/erpnext/hr/doctype/employee_grade/test_employee_grade.py b/erpnext/hr/doctype/employee_grade/test_employee_grade.py
deleted file mode 100644
index a70d685..0000000
--- a/erpnext/hr/doctype/employee_grade/test_employee_grade.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-
-class TestEmployeeGrade(unittest.TestCase):
-	pass
diff --git a/erpnext/hr/doctype/employee_grievance/__init__.py b/erpnext/hr/doctype/employee_grievance/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/employee_grievance/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/employee_grievance/employee_grievance.js b/erpnext/hr/doctype/employee_grievance/employee_grievance.js
deleted file mode 100644
index 25c5bad..0000000
--- a/erpnext/hr/doctype/employee_grievance/employee_grievance.js
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Employee Grievance', {
-	setup: function(frm) {
-		frm.set_query('grievance_against_party', function() {
-			return {
-				filters: {
-					name: ['in', [
-						'Company', 'Department', 'Employee Group', 'Employee Grade', 'Employee']
-					]
-				}
-			};
-		});
-		frm.set_query('associated_document_type', function() {
-			let ignore_modules = ["Setup", "Core", "Integrations", "Automation", "Website",
-				"Utilities", "Event Streaming", "Social", "Chat", "Data Migration", "Printing", "Desk", "Custom"];
-			return {
-				filters: {
-					istable: 0,
-					issingle: 0,
-					module: ["Not In", ignore_modules]
-				}
-			};
-		});
-	},
-
-	grievance_against_party: function(frm) {
-		let filters = {};
-		if (frm.doc.grievance_against_party == 'Employee' && frm.doc.raised_by) {
-			filters.name =  ["!=", frm.doc.raised_by];
-		}
-		frm.set_query('grievance_against', function() {
-			return {
-				filters: filters
-			};
-		});
-	},
-});
diff --git a/erpnext/hr/doctype/employee_grievance/employee_grievance.json b/erpnext/hr/doctype/employee_grievance/employee_grievance.json
deleted file mode 100644
index 5a91856..0000000
--- a/erpnext/hr/doctype/employee_grievance/employee_grievance.json
+++ /dev/null
@@ -1,261 +0,0 @@
-{
- "actions": [],
- "autoname": "HR-GRIEV-.YYYY.-.#####",
- "creation": "2021-05-11 13:41:51.485295",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "subject",
-  "raised_by",
-  "employee_name",
-  "designation",
-  "column_break_3",
-  "date",
-  "status",
-  "reports_to",
-  "grievance_details_section",
-  "grievance_against_party",
-  "grievance_against",
-  "grievance_type",
-  "column_break_11",
-  "associated_document_type",
-  "associated_document",
-  "section_break_14",
-  "description",
-  "investigation_details_section",
-  "cause_of_grievance",
-  "resolution_details_section",
-  "resolved_by",
-  "resolution_date",
-  "employee_responsible",
-  "column_break_16",
-  "resolution_detail",
-  "amended_from"
- ],
- "fields": [
-  {
-   "fieldname": "grievance_type",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Grievance Type",
-   "options": "Grievance Type",
-   "reqd": 1
-  },
-  {
-   "fieldname": "column_break_3",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "date",
-   "fieldtype": "Date",
-   "in_list_view": 1,
-   "label": "Date ",
-   "reqd": 1
-  },
-  {
-   "default": "Open",
-   "fieldname": "status",
-   "fieldtype": "Select",
-   "in_list_view": 1,
-   "label": "Status",
-   "options": "Open\nInvestigated\nResolved\nInvalid",
-   "reqd": 1
-  },
-  {
-   "fieldname": "description",
-   "fieldtype": "Text",
-   "label": "Description",
-   "reqd": 1
-  },
-  {
-   "fieldname": "cause_of_grievance",
-   "fieldtype": "Text",
-   "label": "Cause of Grievance",
-   "mandatory_depends_on": "eval: doc.status == \"Investigated\" || doc.status ==  \"Resolved\""
-  },
-  {
-   "fieldname": "resolution_details_section",
-   "fieldtype": "Section Break",
-   "label": "Resolution Details"
-  },
-  {
-   "fieldname": "resolved_by",
-   "fieldtype": "Link",
-   "label": "Resolved By",
-   "mandatory_depends_on": "eval: doc.status == \"Resolved\"",
-   "options": "User"
-  },
-  {
-   "fieldname": "employee_responsible",
-   "fieldtype": "Link",
-   "label": "Employee Responsible ",
-   "options": "Employee"
-  },
-  {
-   "fieldname": "resolution_detail",
-   "fieldtype": "Small Text",
-   "label": "Resolution Details",
-   "mandatory_depends_on": "eval: doc.status == \"Resolved\""
-  },
-  {
-   "fieldname": "column_break_16",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "resolution_date",
-   "fieldtype": "Date",
-   "label": "Resolution Date",
-   "mandatory_depends_on": "eval: doc.status == \"Resolved\""
-  },
-  {
-   "fieldname": "grievance_against",
-   "fieldtype": "Dynamic Link",
-   "label": "Grievance Against",
-   "options": "grievance_against_party",
-   "reqd": 1
-  },
-  {
-   "fieldname": "raised_by",
-   "fieldtype": "Link",
-   "label": "Raised By",
-   "options": "Employee",
-   "reqd": 1
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "Employee Grievance",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "fetch_from": "raised_by.designation",
-   "fieldname": "designation",
-   "fieldtype": "Link",
-   "label": "Designation",
-   "options": "Designation",
-   "read_only": 1
-  },
-  {
-   "fetch_from": "raised_by.reports_to",
-   "fieldname": "reports_to",
-   "fieldtype": "Link",
-   "label": "Reports To",
-   "options": "Employee",
-   "read_only": 1
-  },
-  {
-   "fieldname": "grievance_details_section",
-   "fieldtype": "Section Break",
-   "label": "Grievance Details"
-  },
-  {
-   "fieldname": "column_break_11",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "section_break_14",
-   "fieldtype": "Section Break"
-  },
-  {
-   "fieldname": "grievance_against_party",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Grievance Against Party",
-   "options": "DocType",
-   "reqd": 1
-  },
-  {
-   "fieldname": "associated_document_type",
-   "fieldtype": "Link",
-   "label": "Associated Document Type",
-   "options": "DocType"
-  },
-  {
-   "fieldname": "associated_document",
-   "fieldtype": "Dynamic Link",
-   "label": "Associated Document",
-   "options": "associated_document_type"
-  },
-  {
-   "fieldname": "investigation_details_section",
-   "fieldtype": "Section Break",
-   "label": "Investigation Details"
-  },
-  {
-   "fetch_from": "raised_by.employee_name",
-   "fieldname": "employee_name",
-   "fieldtype": "Data",
-   "label": "Employee Name",
-   "read_only": 1
-  },
-  {
-   "fieldname": "subject",
-   "fieldtype": "Data",
-   "label": "Subject",
-   "reqd": 1
-  }
- ],
- "index_web_pages_for_search": 1,
- "is_submittable": 1,
- "links": [],
- "modified": "2021-06-21 12:51:01.499486",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Employee Grievance",
- "owner": "Administrator",
- "permissions": [
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "select": 1,
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "select": 1,
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "write": 1
-  }
- ],
- "search_fields": "subject,raised_by,grievance_against_party",
- "sort_field": "modified",
- "sort_order": "DESC",
- "title_field": "subject",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/employee_grievance/employee_grievance.py b/erpnext/hr/doctype/employee_grievance/employee_grievance.py
deleted file mode 100644
index 45de79f..0000000
--- a/erpnext/hr/doctype/employee_grievance/employee_grievance.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-import frappe
-from frappe import _, bold
-from frappe.model.document import Document
-
-
-class EmployeeGrievance(Document):
-	def on_submit(self):
-		if self.status not in ["Invalid", "Resolved"]:
-			frappe.throw(
-				_("Only Employee Grievance with status {0} or {1} can be submitted").format(
-					bold("Invalid"), bold("Resolved")
-				)
-			)
diff --git a/erpnext/hr/doctype/employee_grievance/employee_grievance_list.js b/erpnext/hr/doctype/employee_grievance/employee_grievance_list.js
deleted file mode 100644
index 11672ca..0000000
--- a/erpnext/hr/doctype/employee_grievance/employee_grievance_list.js
+++ /dev/null
@@ -1,12 +0,0 @@
-frappe.listview_settings["Employee Grievance"] = {
-	has_indicator_for_draft: 1,
-	get_indicator: function(doc) {
-		var colors = {
-			"Open": "red",
-			"Investigated": "orange",
-			"Resolved": "green",
-			"Invalid": "grey"
-		};
-		return [__(doc.status), colors[doc.status], "status,=," + doc.status];
-	}
-};
diff --git a/erpnext/hr/doctype/employee_grievance/test_employee_grievance.py b/erpnext/hr/doctype/employee_grievance/test_employee_grievance.py
deleted file mode 100644
index 910d882..0000000
--- a/erpnext/hr/doctype/employee_grievance/test_employee_grievance.py
+++ /dev/null
@@ -1,55 +0,0 @@
-# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-import frappe
-from frappe.utils import today
-
-from erpnext.hr.doctype.employee.test_employee import make_employee
-
-
-class TestEmployeeGrievance(unittest.TestCase):
-	def test_create_employee_grievance(self):
-		create_employee_grievance()
-
-
-def create_employee_grievance():
-	grievance_type = create_grievance_type()
-	emp_1 = make_employee("test_emp_grievance_@example.com", company="_Test Company")
-	emp_2 = make_employee("testculprit@example.com", company="_Test Company")
-
-	grievance = frappe.new_doc("Employee Grievance")
-	grievance.subject = "Test Employee Grievance"
-	grievance.raised_by = emp_1
-	grievance.date = today()
-	grievance.grievance_type = grievance_type
-	grievance.grievance_against_party = "Employee"
-	grievance.grievance_against = emp_2
-	grievance.description = "test descrip"
-
-	# set cause
-	grievance.cause_of_grievance = "test cause"
-
-	# resolution details
-	grievance.resolution_date = today()
-	grievance.resolution_detail = "test resolution detail"
-	grievance.resolved_by = "test_emp_grievance_@example.com"
-	grievance.employee_responsible = emp_2
-	grievance.status = "Resolved"
-
-	grievance.save()
-	grievance.submit()
-
-	return grievance
-
-
-def create_grievance_type():
-	if frappe.db.exists("Grievance Type", "Employee Abuse"):
-		return frappe.get_doc("Grievance Type", "Employee Abuse")
-	grievance_type = frappe.new_doc("Grievance Type")
-	grievance_type.name = "Employee Abuse"
-	grievance_type.description = "Test"
-	grievance_type.save()
-
-	return grievance_type.name
diff --git a/erpnext/hr/doctype/employee_health_insurance/__init__.py b/erpnext/hr/doctype/employee_health_insurance/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/employee_health_insurance/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/employee_health_insurance/employee_health_insurance.js b/erpnext/hr/doctype/employee_health_insurance/employee_health_insurance.js
deleted file mode 100644
index 69d46e2..0000000
--- a/erpnext/hr/doctype/employee_health_insurance/employee_health_insurance.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Employee Health Insurance', {
-	refresh: function(frm) {
-
-	}
-});
diff --git a/erpnext/hr/doctype/employee_health_insurance/employee_health_insurance.json b/erpnext/hr/doctype/employee_health_insurance/employee_health_insurance.json
deleted file mode 100644
index e63da39..0000000
--- a/erpnext/hr/doctype/employee_health_insurance/employee_health_insurance.json
+++ /dev/null
@@ -1,113 +0,0 @@
-{
- "allow_copy": 0, 
- "allow_guest_to_view": 0, 
- "allow_import": 0, 
- "allow_rename": 1, 
- "autoname": "field:health_insurance_name", 
- "beta": 0, 
- "creation": "2017-03-27 14:32:51.628588", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "Document", 
- "editable_grid": 1, 
- "engine": "InnoDB", 
- "fields": [
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "health_insurance_name", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Health Insurance Name", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }
- ], 
- "has_web_view": 0, 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "image_view": 0, 
- "in_create": 0, 
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 0, 
- "max_attachments": 0, 
- "modified": "2018-04-15 14:56:46.924890", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Employee Health Insurance", 
- "name_case": "", 
- "owner": "Administrator", 
- "permissions": [
-  {
-   "amend": 0, 
-   "cancel": 0, 
-   "create": 1, 
-   "delete": 1, 
-   "email": 1, 
-   "export": 1, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 1, 
-   "role": "HR Manager", 
-   "set_user_permissions": 0, 
-   "share": 1, 
-   "submit": 0, 
-   "write": 1
-  }, 
-  {
-   "amend": 0, 
-   "cancel": 0, 
-   "create": 0, 
-   "delete": 0, 
-   "email": 1, 
-   "export": 1, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 1, 
-   "role": "HR User", 
-   "set_user_permissions": 0, 
-   "share": 1, 
-   "submit": 0, 
-   "write": 0
-  }
- ], 
- "quick_entry": 1, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "show_name_in_global_search": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "title_field": "health_insurance_name", 
- "track_changes": 1, 
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/employee_health_insurance/employee_health_insurance.py b/erpnext/hr/doctype/employee_health_insurance/employee_health_insurance.py
deleted file mode 100644
index 4a8c437..0000000
--- a/erpnext/hr/doctype/employee_health_insurance/employee_health_insurance.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-from frappe.model.document import Document
-
-
-class EmployeeHealthInsurance(Document):
-	pass
diff --git a/erpnext/hr/doctype/employee_health_insurance/test_employee_health_insurance.py b/erpnext/hr/doctype/employee_health_insurance/test_employee_health_insurance.py
deleted file mode 100644
index 4f042b7..0000000
--- a/erpnext/hr/doctype/employee_health_insurance/test_employee_health_insurance.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-
-class TestEmployeeHealthInsurance(unittest.TestCase):
-	pass
diff --git a/erpnext/hr/doctype/employee_loan/employee_loan.js b/erpnext/hr/doctype/employee_loan/employee_loan.js
deleted file mode 100644
index c948be1..0000000
--- a/erpnext/hr/doctype/employee_loan/employee_loan.js
+++ /dev/null
@@ -1,121 +0,0 @@
-// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Employee Loan', {
-	onload: function (frm) {
-		frm.set_query("employee_loan_application", function () {
-			return {
-				"filters": {
-					"employee": frm.doc.employee,
-					"docstatus": 1,
-					"status": "Approved"
-				}
-			};
-		});
-
-		frm.set_query("interest_income_account", function () {
-			return {
-				"filters": {
-					"company": frm.doc.company,
-					"root_type": "Income",
-					"is_group": 0
-				}
-			};
-		});
-
-		frm.set_query("employee", function() {
-			return {
-				"filters": {
-					"company": frm.doc.company,
-				}
-			};
-		});
-
-		$.each(["payment_account", "employee_loan_account"], function (i, field) {
-			frm.set_query(field, function () {
-				return {
-					"filters": {
-						"company": frm.doc.company,
-						"root_type": "Asset",
-						"is_group": 0
-					}
-				};
-			});
-		})
-	},
-
-	refresh: function (frm) {
-		if (frm.doc.docstatus == 1 && (frm.doc.status == "Sanctioned" || frm.doc.status == "Partially Disbursed")) {
-			frm.add_custom_button(__('Create Disbursement Entry'), function () {
-				frm.trigger("make_jv");
-			})
-		}
-		frm.trigger("toggle_fields");
-	},
-
-	make_jv: function (frm) {
-		frappe.call({
-			args: {
-				"employee_loan": frm.doc.name,
-				"company": frm.doc.company,
-				"employee_loan_account": frm.doc.employee_loan_account,
-				"employee": frm.doc.employee,
-				"loan_amount": frm.doc.loan_amount,
-				"payment_account": frm.doc.payment_account
-			},
-			method: "erpnext.hr.doctype.employee_loan.employee_loan.make_jv_entry",
-			callback: function (r) {
-				if (r.message)
-					var doc = frappe.model.sync(r.message)[0];
-				frappe.set_route("Form", doc.doctype, doc.name);
-			}
-		})
-	},
-
-	mode_of_payment: function (frm) {
-		if (frm.doc.mode_of_payment && frm.doc.company) {
-			frappe.call({
-				method: "erpnext.accounts.doctype.sales_invoice.sales_invoice.get_bank_cash_account",
-				args: {
-					"mode_of_payment": frm.doc.mode_of_payment,
-					"company": frm.doc.company
-				},
-				callback: function (r, rt) {
-					if (r.message) {
-						frm.set_value("payment_account", r.message.account);
-					}
-				}
-			});
-		}
-	},
-
-	employee_loan_application: function (frm) {
-	    if(frm.doc.employee_loan_application){
-            return frappe.call({
-                method: "erpnext.hr.doctype.employee_loan.employee_loan.get_employee_loan_application",
-                args: {
-                    "employee_loan_application": frm.doc.employee_loan_application
-                },
-                callback: function (r) {
-                    if (!r.exc && r.message) {
-                        frm.set_value("loan_type", r.message.loan_type);
-                        frm.set_value("loan_amount", r.message.loan_amount);
-                        frm.set_value("repayment_method", r.message.repayment_method);
-                        frm.set_value("monthly_repayment_amount", r.message.repayment_amount);
-                        frm.set_value("repayment_periods", r.message.repayment_periods);
-                        frm.set_value("rate_of_interest", r.message.rate_of_interest);
-                    }
-                }
-            });
-        }
-	},
-
-	repayment_method: function (frm) {
-		frm.trigger("toggle_fields")
-	},
-
-	toggle_fields: function (frm) {
-		frm.toggle_enable("monthly_repayment_amount", frm.doc.repayment_method == "Repay Fixed Amount per Period")
-		frm.toggle_enable("repayment_periods", frm.doc.repayment_method == "Repay Over Number of Periods")
-	}
-});
diff --git a/erpnext/hr/doctype/employee_onboarding/__init__.py b/erpnext/hr/doctype/employee_onboarding/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/employee_onboarding/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/employee_onboarding/employee_onboarding.js b/erpnext/hr/doctype/employee_onboarding/employee_onboarding.js
deleted file mode 100644
index 6fbb54d..0000000
--- a/erpnext/hr/doctype/employee_onboarding/employee_onboarding.js
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Employee Onboarding', {
-	setup: function(frm) {
-		frm.set_query("job_applicant", function () {
-			return {
-				filters:{
-					"status": "Accepted",
-				}
-			};
-		});
-
-		frm.set_query('job_offer', function () {
-			return {
-				filters: {
-					'job_applicant': frm.doc.job_applicant,
-					'docstatus': 1
-				}
-			};
-		});
-	},
-
-	refresh: function(frm) {
-		if (frm.doc.employee) {
-			frm.add_custom_button(__('Employee'), function() {
-				frappe.set_route("Form", "Employee", frm.doc.employee);
-			},__("View"));
-		}
-		if (frm.doc.project) {
-			frm.add_custom_button(__('Project'), function() {
-				frappe.set_route("Form", "Project", frm.doc.project);
-			},__("View"));
-			frm.add_custom_button(__('Task'), function() {
-				frappe.set_route('List', 'Task', {project: frm.doc.project});
-			},__("View"));
-		}
-		if ((!frm.doc.employee) && (frm.doc.docstatus === 1)) {
-			frm.add_custom_button(__('Employee'), function () {
-				frappe.model.open_mapped_doc({
-					method: "erpnext.hr.doctype.employee_onboarding.employee_onboarding.make_employee",
-					frm: frm
-				});
-			}, __('Create'));
-			frm.page.set_inner_btn_group_as_primary(__('Create'));
-		}
-	},
-
-	employee_onboarding_template: function(frm) {
-		frm.set_value("activities" ,"");
-		if (frm.doc.employee_onboarding_template) {
-			frappe.call({
-				method: "erpnext.controllers.employee_boarding_controller.get_onboarding_details",
-				args: {
-					"parent": frm.doc.employee_onboarding_template,
-					"parenttype": "Employee Onboarding Template"
-				},
-				callback: function(r) {
-					if (r.message) {
-						r.message.forEach((d) => {
-							frm.add_child("activities", d);
-						});
-						refresh_field("activities");
-					}
-				}
-			});
-		}
-	},
-
-	job_applicant: function(frm) {
-		if (frm.doc.job_applicant) {
-			frappe.db.get_value('Employee', {'job_applicant': frm.doc.job_applicant}, 'name', (r) => {
-				if (r.name) {
-					frm.set_value('employee', r.name);
-				} else {
-					frm.set_value('employee', '');
-				}
-			});
-		} else {
-			frm.set_value('employee', '');
-		}
-	}
-});
diff --git a/erpnext/hr/doctype/employee_onboarding/employee_onboarding.json b/erpnext/hr/doctype/employee_onboarding/employee_onboarding.json
deleted file mode 100644
index 1d2ea0c..0000000
--- a/erpnext/hr/doctype/employee_onboarding/employee_onboarding.json
+++ /dev/null
@@ -1,205 +0,0 @@
-{
- "actions": [],
- "autoname": "HR-EMP-ONB-.YYYY.-.#####",
- "creation": "2018-05-09 04:57:20.016220",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "job_applicant",
-  "job_offer",
-  "employee_onboarding_template",
-  "column_break_7",
-  "company",
-  "boarding_status",
-  "project",
-  "details_section",
-  "employee",
-  "employee_name",
-  "department",
-  "designation",
-  "employee_grade",
-  "holiday_list",
-  "column_break_13",
-  "date_of_joining",
-  "boarding_begins_on",
-  "table_for_activity",
-  "activities",
-  "notify_users_by_email",
-  "amended_from"
- ],
- "fields": [
-  {
-   "fieldname": "job_applicant",
-   "fieldtype": "Link",
-   "label": "Job Applicant",
-   "options": "Job Applicant",
-   "reqd": 1
-  },
-  {
-   "fieldname": "job_offer",
-   "fieldtype": "Link",
-   "label": "Job Offer",
-   "options": "Job Offer",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "job_applicant.applicant_name",
-   "fieldname": "employee_name",
-   "fieldtype": "Data",
-   "in_list_view": 1,
-   "label": "Employee Name",
-   "reqd": 1
-  },
-  {
-   "fieldname": "employee",
-   "fieldtype": "Link",
-   "label": "Employee",
-   "options": "Employee",
-   "read_only": 1
-  },
-  {
-   "fieldname": "date_of_joining",
-   "fieldtype": "Date",
-   "in_list_view": 1,
-   "label": "Date of Joining",
-   "reqd": 1
-  },
-  {
-   "allow_on_submit": 1,
-   "default": "Pending",
-   "fieldname": "boarding_status",
-   "fieldtype": "Select",
-   "label": "Status",
-   "options": "Pending\nIn Process\nCompleted",
-   "read_only": 1
-  },
-  {
-   "allow_on_submit": 1,
-   "default": "0",
-   "fieldname": "notify_users_by_email",
-   "fieldtype": "Check",
-   "label": "Notify users by email"
-  },
-  {
-   "fieldname": "column_break_7",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "employee_onboarding_template",
-   "fieldtype": "Link",
-   "label": "Employee Onboarding Template",
-   "options": "Employee Onboarding Template"
-  },
-  {
-   "fetch_from": "employee_onboarding_template.company",
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "label": "Company",
-   "options": "Company",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "employee_onboarding_template.department",
-   "fieldname": "department",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Department",
-   "options": "Department"
-  },
-  {
-   "fetch_from": "employee_onboarding_template.designation",
-   "fieldname": "designation",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Designation",
-   "options": "Designation"
-  },
-  {
-   "fetch_from": "employee_onboarding_template.employee_grade",
-   "fieldname": "employee_grade",
-   "fieldtype": "Link",
-   "label": "Employee Grade",
-   "options": "Employee Grade"
-  },
-  {
-   "fieldname": "project",
-   "fieldtype": "Link",
-   "label": "Project",
-   "options": "Project",
-   "read_only": 1
-  },
-  {
-   "fieldname": "table_for_activity",
-   "fieldtype": "Section Break",
-   "label": "Onboarding Activities"
-  },
-  {
-   "allow_on_submit": 1,
-   "fieldname": "activities",
-   "fieldtype": "Table",
-   "label": "Activities",
-   "options": "Employee Boarding Activity"
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "Employee Onboarding",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "fieldname": "details_section",
-   "fieldtype": "Section Break",
-   "label": "Employee Details"
-  },
-  {
-   "fieldname": "column_break_13",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "boarding_begins_on",
-   "fieldtype": "Date",
-   "label": "Onboarding Begins On",
-   "reqd": 1
-  },
-  {
-   "fieldname": "holiday_list",
-   "fieldtype": "Link",
-   "label": "Holiday List",
-   "options": "Holiday List"
-  }
- ],
- "is_submittable": 1,
- "links": [],
- "modified": "2022-01-29 12:33:57.120384",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Employee Onboarding",
- "naming_rule": "Expression (old style)",
- "owner": "Administrator",
- "permissions": [
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  }
- ],
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": [],
- "title_field": "employee_name",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/employee_onboarding/employee_onboarding.py b/erpnext/hr/doctype/employee_onboarding/employee_onboarding.py
deleted file mode 100644
index 059f83a..0000000
--- a/erpnext/hr/doctype/employee_onboarding/employee_onboarding.py
+++ /dev/null
@@ -1,86 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.mapper import get_mapped_doc
-
-from erpnext.controllers.employee_boarding_controller import EmployeeBoardingController
-
-
-class IncompleteTaskError(frappe.ValidationError):
-	pass
-
-
-class EmployeeOnboarding(EmployeeBoardingController):
-	def validate(self):
-		super(EmployeeOnboarding, self).validate()
-		self.set_employee()
-		self.validate_duplicate_employee_onboarding()
-
-	def set_employee(self):
-		if not self.employee:
-			self.employee = frappe.db.get_value("Employee", {"job_applicant": self.job_applicant}, "name")
-
-	def validate_duplicate_employee_onboarding(self):
-		emp_onboarding = frappe.db.exists(
-			"Employee Onboarding", {"job_applicant": self.job_applicant, "docstatus": ("!=", 2)}
-		)
-		if emp_onboarding and emp_onboarding != self.name:
-			frappe.throw(
-				_("Employee Onboarding: {0} already exists for Job Applicant: {1}").format(
-					frappe.bold(emp_onboarding), frappe.bold(self.job_applicant)
-				)
-			)
-
-	def validate_employee_creation(self):
-		if self.docstatus != 1:
-			frappe.throw(_("Submit this to create the Employee record"))
-		else:
-			for activity in self.activities:
-				if not activity.required_for_employee_creation:
-					continue
-				else:
-					task_status = frappe.db.get_value("Task", activity.task, "status")
-					if task_status not in ["Completed", "Cancelled"]:
-						frappe.throw(
-							_("All the mandatory tasks for employee creation are not completed yet."),
-							IncompleteTaskError,
-						)
-
-	def on_submit(self):
-		super(EmployeeOnboarding, self).on_submit()
-
-	def on_update_after_submit(self):
-		self.create_task_and_notify_user()
-
-	def on_cancel(self):
-		super(EmployeeOnboarding, self).on_cancel()
-
-
-@frappe.whitelist()
-def make_employee(source_name, target_doc=None):
-	doc = frappe.get_doc("Employee Onboarding", source_name)
-	doc.validate_employee_creation()
-
-	def set_missing_values(source, target):
-		target.personal_email = frappe.db.get_value("Job Applicant", source.job_applicant, "email_id")
-		target.status = "Active"
-
-	doc = get_mapped_doc(
-		"Employee Onboarding",
-		source_name,
-		{
-			"Employee Onboarding": {
-				"doctype": "Employee",
-				"field_map": {
-					"first_name": "employee_name",
-					"employee_grade": "grade",
-				},
-			}
-		},
-		target_doc,
-		set_missing_values,
-	)
-	return doc
diff --git a/erpnext/hr/doctype/employee_onboarding/employee_onboarding_list.js b/erpnext/hr/doctype/employee_onboarding/employee_onboarding_list.js
deleted file mode 100644
index a33619b..0000000
--- a/erpnext/hr/doctype/employee_onboarding/employee_onboarding_list.js
+++ /dev/null
@@ -1,7 +0,0 @@
-frappe.listview_settings['Employee Onboarding'] = {
-	add_fields: ["boarding_status", "employee_name", "date_of_joining", "department"],
-	filters:[["boarding_status","=", "Pending"]],
-	get_indicator: function(doc) {
-		return [__(doc.boarding_status), frappe.utils.guess_colour(doc.boarding_status), "status,=," + doc.boarding_status];
-	}
-};
diff --git a/erpnext/hr/doctype/employee_onboarding/test_employee_onboarding.py b/erpnext/hr/doctype/employee_onboarding/test_employee_onboarding.py
deleted file mode 100644
index 9d91e4b..0000000
--- a/erpnext/hr/doctype/employee_onboarding/test_employee_onboarding.py
+++ /dev/null
@@ -1,135 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-import frappe
-from frappe.utils import add_days, getdate
-
-from erpnext.hr.doctype.employee_onboarding.employee_onboarding import (
-	IncompleteTaskError,
-	make_employee,
-)
-from erpnext.hr.doctype.job_offer.test_job_offer import create_job_offer
-from erpnext.payroll.doctype.salary_slip.test_salary_slip import make_holiday_list
-
-
-class TestEmployeeOnboarding(unittest.TestCase):
-	def setUp(self):
-		if frappe.db.exists("Employee Onboarding", {"employee_name": "Test Researcher"}):
-			frappe.delete_doc("Employee Onboarding", {"employee_name": "Test Researcher"})
-
-		project = "Employee Onboarding : test@researcher.com"
-		frappe.db.sql("delete from tabProject where name=%s", project)
-		frappe.db.sql("delete from tabTask where project=%s", project)
-
-	def test_employee_onboarding_incomplete_task(self):
-		onboarding = create_employee_onboarding()
-
-		project_name = frappe.db.get_value("Project", onboarding.project, "project_name")
-		self.assertEqual(project_name, "Employee Onboarding : test@researcher.com")
-
-		# don't allow making employee if onboarding is not complete
-		self.assertRaises(IncompleteTaskError, make_employee, onboarding.name)
-
-		# boarding status
-		self.assertEqual(onboarding.boarding_status, "Pending")
-
-		# start and end dates
-		start_date, end_date = frappe.db.get_value(
-			"Task", onboarding.activities[0].task, ["exp_start_date", "exp_end_date"]
-		)
-		self.assertEqual(getdate(start_date), getdate(onboarding.boarding_begins_on))
-		self.assertEqual(getdate(end_date), add_days(start_date, onboarding.activities[0].duration))
-
-		start_date, end_date = frappe.db.get_value(
-			"Task", onboarding.activities[1].task, ["exp_start_date", "exp_end_date"]
-		)
-		self.assertEqual(
-			getdate(start_date), add_days(onboarding.boarding_begins_on, onboarding.activities[0].duration)
-		)
-		self.assertEqual(getdate(end_date), add_days(start_date, onboarding.activities[1].duration))
-
-		# complete the task
-		project = frappe.get_doc("Project", onboarding.project)
-		for task in frappe.get_all("Task", dict(project=project.name)):
-			task = frappe.get_doc("Task", task.name)
-			task.status = "Completed"
-			task.save()
-
-		# boarding status
-		onboarding.reload()
-		self.assertEqual(onboarding.boarding_status, "Completed")
-
-		# make employee
-		onboarding.reload()
-		employee = make_employee(onboarding.name)
-		employee.first_name = employee.employee_name
-		employee.date_of_joining = getdate()
-		employee.date_of_birth = "1990-05-08"
-		employee.gender = "Female"
-		employee.insert()
-		self.assertEqual(employee.employee_name, "Test Researcher")
-
-	def tearDown(self):
-		frappe.db.rollback()
-
-
-def get_job_applicant():
-	if frappe.db.exists("Job Applicant", "test@researcher.com"):
-		return frappe.get_doc("Job Applicant", "test@researcher.com")
-	applicant = frappe.new_doc("Job Applicant")
-	applicant.applicant_name = "Test Researcher"
-	applicant.email_id = "test@researcher.com"
-	applicant.designation = "Researcher"
-	applicant.status = "Open"
-	applicant.cover_letter = "I am a great Researcher."
-	applicant.insert()
-	return applicant
-
-
-def get_job_offer(applicant_name):
-	job_offer = frappe.db.exists("Job Offer", {"job_applicant": applicant_name})
-	if job_offer:
-		return frappe.get_doc("Job Offer", job_offer)
-
-	job_offer = create_job_offer(job_applicant=applicant_name)
-	job_offer.submit()
-	return job_offer
-
-
-def create_employee_onboarding():
-	applicant = get_job_applicant()
-	job_offer = get_job_offer(applicant.name)
-
-	holiday_list = make_holiday_list("_Test Employee Boarding")
-	holiday_list = frappe.get_doc("Holiday List", holiday_list)
-	holiday_list.holidays = []
-	holiday_list.save()
-
-	onboarding = frappe.new_doc("Employee Onboarding")
-	onboarding.job_applicant = applicant.name
-	onboarding.job_offer = job_offer.name
-	onboarding.date_of_joining = onboarding.boarding_begins_on = getdate()
-	onboarding.company = "_Test Company"
-	onboarding.holiday_list = holiday_list.name
-	onboarding.designation = "Researcher"
-	onboarding.append(
-		"activities",
-		{
-			"activity_name": "Assign ID Card",
-			"role": "HR User",
-			"required_for_employee_creation": 1,
-			"begin_on": 0,
-			"duration": 1,
-		},
-	)
-	onboarding.append(
-		"activities",
-		{"activity_name": "Assign a laptop", "role": "HR User", "begin_on": 1, "duration": 1},
-	)
-	onboarding.status = "Pending"
-	onboarding.insert()
-	onboarding.submit()
-
-	return onboarding
diff --git a/erpnext/hr/doctype/employee_onboarding_template/__init__.py b/erpnext/hr/doctype/employee_onboarding_template/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/employee_onboarding_template/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/employee_onboarding_template/employee_onboarding_template.js b/erpnext/hr/doctype/employee_onboarding_template/employee_onboarding_template.js
deleted file mode 100644
index 5e1b6e9..0000000
--- a/erpnext/hr/doctype/employee_onboarding_template/employee_onboarding_template.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Employee Onboarding Template', {
-	setup: function(frm) {
-		frm.set_query("department", function() {
-			return {
-				filters: {
-					company: frm.doc.company
-				}
-			};
-		});
-	}
-});
diff --git a/erpnext/hr/doctype/employee_onboarding_template/employee_onboarding_template.json b/erpnext/hr/doctype/employee_onboarding_template/employee_onboarding_template.json
deleted file mode 100644
index 04de08e..0000000
--- a/erpnext/hr/doctype/employee_onboarding_template/employee_onboarding_template.json
+++ /dev/null
@@ -1,292 +0,0 @@
-{
- "allow_copy": 0, 
- "allow_guest_to_view": 0, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "autoname": "HR-EMP-ONT-.#####", 
- "beta": 0, 
- "creation": "2018-05-09 05:27:02.393377", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "", 
- "editable_grid": 1, 
- "engine": "InnoDB", 
- "fields": [
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "company", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Company", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Company", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "department", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Department", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Department", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "column_break_7", 
-   "fieldtype": "Column Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "designation", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Designation", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Designation", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "employee_grade", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Employee Grade", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Employee Grade", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "section_break_7", 
-   "fieldtype": "Section Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Activities", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "activities", 
-   "fieldtype": "Table", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Activities", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Employee Boarding Activity", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }
- ], 
- "has_web_view": 0, 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "image_view": 0, 
- "in_create": 0, 
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 0, 
- "max_attachments": 0, 
- "modified": "2018-08-21 16:15:55.720946", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Employee Onboarding Template", 
- "name_case": "", 
- "owner": "Administrator", 
- "permissions": [
-  {
-   "amend": 0, 
-   "cancel": 0, 
-   "create": 1, 
-   "delete": 1, 
-   "email": 1, 
-   "export": 1, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 1, 
-   "role": "System Manager", 
-   "set_user_permissions": 0, 
-   "share": 1, 
-   "submit": 0, 
-   "write": 1
-  }
- ], 
- "quick_entry": 0, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "show_name_in_global_search": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "title_field": "designation", 
- "track_changes": 1, 
- "track_seen": 0, 
- "track_views": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/employee_onboarding_template/employee_onboarding_template.py b/erpnext/hr/doctype/employee_onboarding_template/employee_onboarding_template.py
deleted file mode 100644
index 199013a..0000000
--- a/erpnext/hr/doctype/employee_onboarding_template/employee_onboarding_template.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-from frappe.model.document import Document
-
-
-class EmployeeOnboardingTemplate(Document):
-	pass
diff --git a/erpnext/hr/doctype/employee_onboarding_template/employee_onboarding_template_dashboard.py b/erpnext/hr/doctype/employee_onboarding_template/employee_onboarding_template_dashboard.py
deleted file mode 100644
index 93237ee..0000000
--- a/erpnext/hr/doctype/employee_onboarding_template/employee_onboarding_template_dashboard.py
+++ /dev/null
@@ -1,7 +0,0 @@
-def get_data():
-	return {
-		"fieldname": "employee_onboarding_template",
-		"transactions": [
-			{"items": ["Employee Onboarding"]},
-		],
-	}
diff --git a/erpnext/hr/doctype/employee_onboarding_template/test_employee_onboarding_template.py b/erpnext/hr/doctype/employee_onboarding_template/test_employee_onboarding_template.py
deleted file mode 100644
index db09011..0000000
--- a/erpnext/hr/doctype/employee_onboarding_template/test_employee_onboarding_template.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-
-class TestEmployeeOnboardingTemplate(unittest.TestCase):
-	pass
diff --git a/erpnext/hr/doctype/employee_promotion/__init__.py b/erpnext/hr/doctype/employee_promotion/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/employee_promotion/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/employee_promotion/employee_promotion.js b/erpnext/hr/doctype/employee_promotion/employee_promotion.js
deleted file mode 100644
index 54e06f4..0000000
--- a/erpnext/hr/doctype/employee_promotion/employee_promotion.js
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-{% include 'erpnext/hr/employee_property_update.js' %}
-
-frappe.ui.form.on('Employee Promotion', {
-	refresh: function(frm) {
-
-	}
-});
diff --git a/erpnext/hr/doctype/employee_promotion/employee_promotion.json b/erpnext/hr/doctype/employee_promotion/employee_promotion.json
deleted file mode 100644
index 173573e..0000000
--- a/erpnext/hr/doctype/employee_promotion/employee_promotion.json
+++ /dev/null
@@ -1,172 +0,0 @@
-{
- "actions": [],
- "autoname": "HR-EMP-PRO-.YYYY.-.#####",
- "creation": "2018-04-13 18:33:59.476562",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "employee",
-  "employee_name",
-  "department",
-  "salary_currency",
-  "column_break_3",
-  "promotion_date",
-  "company",
-  "details_section",
-  "promotion_details",
-  "salary_details_section",
-  "current_ctc",
-  "column_break_12",
-  "revised_ctc",
-  "amended_from"
- ],
- "fields": [
-  {
-   "fieldname": "employee",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Employee",
-   "options": "Employee",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "employee.employee_name",
-   "fieldname": "employee_name",
-   "fieldtype": "Data",
-   "label": "Employee Name",
-   "read_only": 1
-  },
-  {
-   "fetch_from": "employee.department",
-   "fieldname": "department",
-   "fieldtype": "Link",
-   "label": "Department",
-   "options": "Department",
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break_3",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "promotion_date",
-   "fieldtype": "Date",
-   "label": "Promotion Date",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "employee.company",
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "label": "Company",
-   "options": "Company"
-  },
-  {
-   "description": "Set the properties that should be updated in the Employee master on promotion submission",
-   "fieldname": "details_section",
-   "fieldtype": "Section Break",
-   "label": "Employee Promotion Details"
-  },
-  {
-   "fieldname": "promotion_details",
-   "fieldtype": "Table",
-   "options": "Employee Property History",
-   "reqd": 1
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "Employee Promotion",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "fieldname": "salary_details_section",
-   "fieldtype": "Section Break",
-   "label": "Salary Details"
-  },
-  {
-   "fieldname": "column_break_12",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fetch_from": "employee.salary_currency",
-   "fieldname": "salary_currency",
-   "fieldtype": "Link",
-   "label": "Salary Currency",
-   "options": "Currency",
-   "read_only": 1
-  },
-  {
-   "fetch_from": "employee.ctc",
-   "fetch_if_empty": 1,
-   "fieldname": "current_ctc",
-   "fieldtype": "Currency",
-   "label": "Current CTC",
-   "mandatory_depends_on": "revised_ctc",
-   "options": "salary_currency"
-  },
-  {
-   "depends_on": "current_ctc",
-   "fieldname": "revised_ctc",
-   "fieldtype": "Currency",
-   "label": "Revised CTC",
-   "options": "salary_currency"
-  }
- ],
- "is_submittable": 1,
- "links": [],
- "modified": "2022-04-22 18:47:10.168744",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Employee Promotion",
- "naming_rule": "Expression (old style)",
- "owner": "Administrator",
- "permissions": [
-  {
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "Employee",
-   "share": 1
-  },
-  {
-   "create": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  }
- ],
- "quick_entry": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": [],
- "title_field": "employee_name",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/employee_promotion/employee_promotion.py b/erpnext/hr/doctype/employee_promotion/employee_promotion.py
deleted file mode 100644
index 8c802e9..0000000
--- a/erpnext/hr/doctype/employee_promotion/employee_promotion.py
+++ /dev/null
@@ -1,42 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.utils import getdate
-
-from erpnext.hr.utils import update_employee_work_history, validate_active_employee
-
-
-class EmployeePromotion(Document):
-	def validate(self):
-		validate_active_employee(self.employee)
-
-	def before_submit(self):
-		if getdate(self.promotion_date) > getdate():
-			frappe.throw(
-				_("Employee Promotion cannot be submitted before Promotion Date"),
-				frappe.DocstatusTransitionError,
-			)
-
-	def on_submit(self):
-		employee = frappe.get_doc("Employee", self.employee)
-		employee = update_employee_work_history(
-			employee, self.promotion_details, date=self.promotion_date
-		)
-
-		if self.revised_ctc:
-			employee.ctc = self.revised_ctc
-
-		employee.save()
-
-	def on_cancel(self):
-		employee = frappe.get_doc("Employee", self.employee)
-		employee = update_employee_work_history(employee, self.promotion_details, cancel=True)
-
-		if self.revised_ctc:
-			employee.ctc = self.current_ctc
-
-		employee.save()
diff --git a/erpnext/hr/doctype/employee_promotion/test_employee_promotion.py b/erpnext/hr/doctype/employee_promotion/test_employee_promotion.py
deleted file mode 100644
index 71bb1a6..0000000
--- a/erpnext/hr/doctype/employee_promotion/test_employee_promotion.py
+++ /dev/null
@@ -1,97 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-import frappe
-from frappe.tests.utils import FrappeTestCase
-from frappe.utils import add_days, getdate
-
-from erpnext.payroll.doctype.salary_structure.test_salary_structure import make_employee
-
-
-class TestEmployeePromotion(FrappeTestCase):
-	def setUp(self):
-		frappe.db.delete("Employee Promotion")
-
-	def test_submit_before_promotion_date(self):
-		employee = make_employee("employee@promotions.com")
-		promotion = frappe.get_doc(
-			{
-				"doctype": "Employee Promotion",
-				"employee": employee,
-				"promotion_details": [
-					{
-						"property": "Designation",
-						"current": "Software Developer",
-						"new": "Project Manager",
-						"fieldname": "designation",
-					}
-				],
-			}
-		)
-		promotion.promotion_date = add_days(getdate(), 1)
-		self.assertRaises(frappe.DocstatusTransitionError, promotion.submit)
-
-		promotion.promotion_date = getdate()
-		promotion.submit()
-		self.assertEqual(promotion.docstatus, 1)
-
-	def test_employee_history(self):
-		for grade in ["L1", "L2"]:
-			frappe.get_doc({"doctype": "Employee Grade", "__newname": grade}).insert()
-
-		employee = make_employee(
-			"test_employee_promotion@example.com",
-			company="_Test Company",
-			date_of_birth=getdate("30-09-1980"),
-			date_of_joining=getdate("01-10-2021"),
-			designation="Software Developer",
-			grade="L1",
-			salary_currency="INR",
-			ctc="500000",
-		)
-
-		promotion = frappe.get_doc(
-			{
-				"doctype": "Employee Promotion",
-				"employee": employee,
-				"promotion_date": getdate(),
-				"revised_ctc": "1000000",
-				"promotion_details": [
-					{
-						"property": "Designation",
-						"current": "Software Developer",
-						"new": "Project Manager",
-						"fieldname": "designation",
-					},
-					{"property": "Grade", "current": "L1", "new": "L2", "fieldname": "grade"},
-				],
-			}
-		).submit()
-
-		# employee fields updated
-		employee = frappe.get_doc("Employee", employee)
-		self.assertEqual(employee.grade, "L2")
-		self.assertEqual(employee.designation, "Project Manager")
-		self.assertEqual(employee.ctc, 1000000)
-
-		# internal work history updated
-		self.assertEqual(employee.internal_work_history[0].designation, "Software Developer")
-		self.assertEqual(employee.internal_work_history[0].from_date, getdate("01-10-2021"))
-
-		self.assertEqual(employee.internal_work_history[1].designation, "Project Manager")
-		self.assertEqual(employee.internal_work_history[1].from_date, getdate())
-
-		promotion.cancel()
-		employee.reload()
-
-		# fields restored
-		self.assertEqual(employee.grade, "L1")
-		self.assertEqual(employee.designation, "Software Developer")
-		self.assertEqual(employee.ctc, 500000)
-
-		# internal work history updated on cancellation
-		self.assertEqual(len(employee.internal_work_history), 1)
-		self.assertEqual(employee.internal_work_history[0].designation, "Software Developer")
-		self.assertEqual(employee.internal_work_history[0].from_date, getdate("01-10-2021"))
diff --git a/erpnext/hr/doctype/employee_property_history/__init__.py b/erpnext/hr/doctype/employee_property_history/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/employee_property_history/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/employee_property_history/employee_property_history.json b/erpnext/hr/doctype/employee_property_history/employee_property_history.json
deleted file mode 100644
index 0a51579..0000000
--- a/erpnext/hr/doctype/employee_property_history/employee_property_history.json
+++ /dev/null
@@ -1,161 +0,0 @@
-{
- "allow_copy": 0, 
- "allow_guest_to_view": 0, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "beta": 0, 
- "creation": "2018-04-13 18:24:30.579965", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "", 
- "editable_grid": 1, 
- "engine": "InnoDB", 
- "fields": [
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 4, 
-   "fieldname": "property", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Property", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 3, 
-   "fieldname": "current", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Current", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 3, 
-   "fieldname": "new", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "New", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "fieldname", 
-   "fieldtype": "Data", 
-   "hidden": 1, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Field Name", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }
- ], 
- "has_web_view": 0, 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "image_view": 0, 
- "in_create": 0, 
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 1, 
- "max_attachments": 0, 
- "modified": "2018-05-02 18:19:54.436391", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Employee Property History", 
- "name_case": "", 
- "owner": "Administrator", 
- "permissions": [], 
- "quick_entry": 1, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "show_name_in_global_search": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "track_changes": 1, 
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/employee_property_history/employee_property_history.py b/erpnext/hr/doctype/employee_property_history/employee_property_history.py
deleted file mode 100644
index 345899e..0000000
--- a/erpnext/hr/doctype/employee_property_history/employee_property_history.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-from frappe.model.document import Document
-
-
-class EmployeePropertyHistory(Document):
-	pass
diff --git a/erpnext/hr/doctype/employee_referral/__init__.py b/erpnext/hr/doctype/employee_referral/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/employee_referral/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/employee_referral/employee_referral.js b/erpnext/hr/doctype/employee_referral/employee_referral.js
deleted file mode 100644
index 8722019..0000000
--- a/erpnext/hr/doctype/employee_referral/employee_referral.js
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on("Employee Referral", {
-	refresh: function(frm) {
-		if (frm.doc.docstatus === 1 && frm.doc.status === "Pending") {
-			frm.add_custom_button(__("Reject Employee Referral"), function() {
-				frappe.confirm(
-					__("Are you sure you want to reject the Employee Referral?"),
-					function() {
-						frm.doc.status = "Rejected";
-						frm.dirty();
-						frm.save_or_update();
-					},
-					function() {
-						window.close();
-					}
-				);
-			});
-
-			frm.add_custom_button(__("Create Job Applicant"), function() {
-				frm.events.create_job_applicant(frm);
-			}).addClass("btn-primary");
-		}
-
-		// To check whether Payment is done or not
-		if (frm.doc.docstatus === 1 && frm.doc.status === "Accepted") {
-			frappe.db.get_list("Additional Salary", {
-				filters: {
-					ref_docname: cur_frm.doc.name,
-					docstatus: 1
-				},
-				fields: ["count(name) as additional_salary_count"]
-			}).then((data) => {
-
-				let additional_salary_count = data[0].additional_salary_count;
-
-				if (frm.doc.is_applicable_for_referral_bonus && !additional_salary_count) {
-					frm.add_custom_button(__("Create Additional Salary"), function() {
-						frm.events.create_additional_salary(frm);
-					}).addClass("btn-primary");
-				}
-			});
-		}
-
-	},
-	create_job_applicant: function(frm) {
-		frappe.model.open_mapped_doc({
-			method: "erpnext.hr.doctype.employee_referral.employee_referral.create_job_applicant",
-			frm: frm
-		});
-	},
-
-	create_additional_salary: function(frm) {
-		frappe.call({
-			method: "erpnext.hr.doctype.employee_referral.employee_referral.create_additional_salary",
-			args: {
-				doc: frm.doc
-			},
-			callback: function (r) {
-				var doclist = frappe.model.sync(r.message);
-				frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
-			}
-		});
-	},
-});
diff --git a/erpnext/hr/doctype/employee_referral/employee_referral.json b/erpnext/hr/doctype/employee_referral/employee_referral.json
deleted file mode 100644
index 3ae73a9..0000000
--- a/erpnext/hr/doctype/employee_referral/employee_referral.json
+++ /dev/null
@@ -1,305 +0,0 @@
-{
- "actions": [],
- "autoname": "format:HR-REF-{####}",
- "creation": "2021-03-23 14:54:45.047051",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "first_name",
-  "last_name",
-  "full_name",
-  "column_break_6",
-  "date",
-  "status",
-  "for_designation",
-  "referral_details_section",
-  "email",
-  "contact_no",
-  "resume_link",
-  "column_break_12",
-  "current_employer",
-  "current_job_title",
-  "resume",
-  "referrer_details_section",
-  "referrer",
-  "referrer_name",
-  "column_break_14",
-  "is_applicable_for_referral_bonus",
-  "referral_payment_status",
-  "department",
-  "additional_information_section",
-  "qualification_reason",
-  "work_references",
-  "amended_from"
- ],
- "fields": [
-  {
-   "fieldname": "first_name",
-   "fieldtype": "Data",
-   "label": "First Name ",
-   "reqd": 1
-  },
-  {
-   "fieldname": "last_name",
-   "fieldtype": "Data",
-   "label": "Last Name",
-   "reqd": 1
-  },
-  {
-   "fieldname": "full_name",
-   "fieldtype": "Data",
-   "in_list_view": 1,
-   "label": "Full Name",
-   "read_only": 1
-  },
-  {
-   "fieldname": "contact_no",
-   "fieldtype": "Data",
-   "in_standard_filter": 1,
-   "label": "Contact No.",
-   "options": "Phone"
-  },
-  {
-   "fieldname": "current_employer",
-   "fieldtype": "Data",
-   "label": "Current Employer "
-  },
-  {
-   "fieldname": "column_break_6",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "date",
-   "fieldtype": "Date",
-   "in_standard_filter": 1,
-   "label": "Date",
-   "reqd": 1
-  },
-  {
-   "allow_on_submit": 1,
-   "fieldname": "status",
-   "fieldtype": "Select",
-   "in_standard_filter": 1,
-   "label": "Status",
-   "no_copy": 1,
-   "options": "Pending\nIn Process\nAccepted\nRejected",
-   "permlevel": 1,
-   "read_only": 1,
-   "reqd": 1
-  },
-  {
-   "fieldname": "current_job_title",
-   "fieldtype": "Data",
-   "label": "Current Job Title"
-  },
-  {
-   "fieldname": "resume",
-   "fieldtype": "Attach",
-   "label": "Resume"
-  },
-  {
-   "fieldname": "referrer_details_section",
-   "fieldtype": "Section Break",
-   "label": "Referrer Details"
-  },
-  {
-   "fetch_from": "employee.department",
-   "fieldname": "department",
-   "fieldtype": "Link",
-   "label": "Department",
-   "options": "Department",
-   "read_only": 1
-  },
-  {
-   "fieldname": "additional_information_section",
-   "fieldtype": "Section Break",
-   "label": "Additional Information "
-  },
-  {
-   "fieldname": "work_references",
-   "fieldtype": "Text Editor",
-   "label": "Work References"
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "Employee Referral",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break_14",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "for_designation",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "For Designation ",
-   "options": "Designation",
-   "reqd": 1
-  },
-  {
-   "fieldname": "email",
-   "fieldtype": "Data",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Email",
-   "options": "Email",
-   "reqd": 1,
-   "unique": 1
-  },
-  {
-   "default": "1",
-   "fieldname": "is_applicable_for_referral_bonus",
-   "fieldtype": "Check",
-   "label": "Is Applicable for Referral Bonus"
-  },
-  {
-   "fieldname": "qualification_reason",
-   "fieldtype": "Text Editor",
-   "label": "Why is this Candidate Qualified for this Position?"
-  },
-  {
-   "fieldname": "referrer",
-   "fieldtype": "Link",
-   "in_standard_filter": 1,
-   "label": "Referrer",
-   "options": "Employee",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "referrer.employee_name",
-   "fieldname": "referrer_name",
-   "fieldtype": "Data",
-   "in_list_view": 1,
-   "label": "Referrer Name",
-   "read_only": 1
-  },
-  {
-   "fieldname": "resume_link",
-   "fieldtype": "Data",
-   "label": "Resume Link"
-  },
-  {
-   "fieldname": "referral_payment_status",
-   "fieldtype": "Select",
-   "label": "Referral Bonus Payment Status",
-   "options": "\nUnpaid\nPaid",
-   "read_only": 1
-  },
-  {
-   "fieldname": "referral_details_section",
-   "fieldtype": "Section Break",
-   "label": "Referral Details"
-  },
-  {
-   "fieldname": "column_break_12",
-   "fieldtype": "Column Break"
-  }
- ],
- "index_web_pages_for_search": 1,
- "is_submittable": 1,
- "links": [],
- "modified": "2021-05-04 17:03:26.134560",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Employee Referral",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "amend": 1,
-   "create": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "Employee",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "amend": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "amend": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "permlevel": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "permlevel": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "email": 1,
-   "export": 1,
-   "permlevel": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "Employee",
-   "share": 1
-  }
- ],
- "sort_field": "modified",
- "sort_order": "DESC",
- "title_field": "full_name"
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/employee_referral/employee_referral.py b/erpnext/hr/doctype/employee_referral/employee_referral.py
deleted file mode 100644
index 47cbfbc..0000000
--- a/erpnext/hr/doctype/employee_referral/employee_referral.py
+++ /dev/null
@@ -1,78 +0,0 @@
-# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.utils import get_link_to_form
-
-from erpnext.hr.utils import validate_active_employee
-
-
-class EmployeeReferral(Document):
-	def validate(self):
-		validate_active_employee(self.referrer)
-		self.set_full_name()
-		self.set_referral_bonus_payment_status()
-
-	def set_full_name(self):
-		self.full_name = " ".join(filter(None, [self.first_name, self.last_name]))
-
-	def set_referral_bonus_payment_status(self):
-		if not self.is_applicable_for_referral_bonus:
-			self.referral_payment_status = ""
-		else:
-			if not self.referral_payment_status:
-				self.referral_payment_status = "Unpaid"
-
-
-@frappe.whitelist()
-def create_job_applicant(source_name, target_doc=None):
-	emp_ref = frappe.get_doc("Employee Referral", source_name)
-	# just for Api call if some set status apart from default Status
-	status = emp_ref.status
-	if emp_ref.status in ["Pending", "In process"]:
-		status = "Open"
-
-	job_applicant = frappe.new_doc("Job Applicant")
-	job_applicant.source = "Employee Referral"
-	job_applicant.employee_referral = emp_ref.name
-	job_applicant.status = status
-	job_applicant.designation = emp_ref.for_designation
-	job_applicant.applicant_name = emp_ref.full_name
-	job_applicant.email_id = emp_ref.email
-	job_applicant.phone_number = emp_ref.contact_no
-	job_applicant.resume_attachment = emp_ref.resume
-	job_applicant.resume_link = emp_ref.resume_link
-	job_applicant.save()
-
-	frappe.msgprint(
-		_("Job Applicant {0} created successfully.").format(
-			get_link_to_form("Job Applicant", job_applicant.name)
-		),
-		title=_("Success"),
-		indicator="green",
-	)
-
-	emp_ref.db_set("status", "In Process")
-
-	return job_applicant
-
-
-@frappe.whitelist()
-def create_additional_salary(doc):
-	import json
-
-	if isinstance(doc, str):
-		doc = frappe._dict(json.loads(doc))
-
-	if not frappe.db.exists("Additional Salary", {"ref_docname": doc.name}):
-		additional_salary = frappe.new_doc("Additional Salary")
-		additional_salary.employee = doc.referrer
-		additional_salary.company = frappe.db.get_value("Employee", doc.referrer, "company")
-		additional_salary.overwrite_salary_structure_amount = 0
-		additional_salary.ref_doctype = doc.doctype
-		additional_salary.ref_docname = doc.name
-
-	return additional_salary
diff --git a/erpnext/hr/doctype/employee_referral/employee_referral_dashboard.py b/erpnext/hr/doctype/employee_referral/employee_referral_dashboard.py
deleted file mode 100644
index 4d683fb..0000000
--- a/erpnext/hr/doctype/employee_referral/employee_referral_dashboard.py
+++ /dev/null
@@ -1,8 +0,0 @@
-def get_data():
-	return {
-		"fieldname": "employee_referral",
-		"non_standard_fieldnames": {"Additional Salary": "ref_docname"},
-		"transactions": [
-			{"items": ["Job Applicant", "Additional Salary"]},
-		],
-	}
diff --git a/erpnext/hr/doctype/employee_referral/employee_referral_list.js b/erpnext/hr/doctype/employee_referral/employee_referral_list.js
deleted file mode 100644
index 38dfc4d..0000000
--- a/erpnext/hr/doctype/employee_referral/employee_referral_list.js
+++ /dev/null
@@ -1,14 +0,0 @@
-frappe.listview_settings['Employee Referral'] = {
-	add_fields: ["status"],
-	get_indicator: function (doc) {
-		if (doc.status == "Pending") {
-			return [__(doc.status), "grey", "status,=," + doc.status];
-		} else if (doc.status == "In Process") {
-			return [__(doc.status), "orange", "status,=," + doc.status];
-		} else if (doc.status == "Accepted") {
-			return [__(doc.status), "green", "status,=," + doc.status];
-		} else if (doc.status == "Rejected") {
-			return [__(doc.status), "red", "status,=," + doc.status];
-		}
-	},
-};
diff --git a/erpnext/hr/doctype/employee_referral/test_employee_referral.py b/erpnext/hr/doctype/employee_referral/test_employee_referral.py
deleted file mode 100644
index 475a935..0000000
--- a/erpnext/hr/doctype/employee_referral/test_employee_referral.py
+++ /dev/null
@@ -1,70 +0,0 @@
-# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-import frappe
-from frappe.utils import today
-
-from erpnext.hr.doctype.designation.test_designation import create_designation
-from erpnext.hr.doctype.employee.test_employee import make_employee
-from erpnext.hr.doctype.employee_referral.employee_referral import (
-	create_additional_salary,
-	create_job_applicant,
-)
-
-
-class TestEmployeeReferral(unittest.TestCase):
-	def setUp(self):
-		frappe.db.sql("DELETE FROM `tabJob Applicant`")
-		frappe.db.sql("DELETE FROM `tabEmployee Referral`")
-
-	def test_workflow_and_status_sync(self):
-		emp_ref = create_employee_referral()
-
-		# Check Initial status
-		self.assertTrue(emp_ref.status, "Pending")
-
-		job_applicant = create_job_applicant(emp_ref.name)
-
-		# Check status sync
-		emp_ref.reload()
-		self.assertTrue(emp_ref.status, "In Process")
-
-		job_applicant.reload()
-		job_applicant.status = "Rejected"
-		job_applicant.save()
-
-		emp_ref.reload()
-		self.assertTrue(emp_ref.status, "Rejected")
-
-		job_applicant.reload()
-		job_applicant.status = "Accepted"
-		job_applicant.save()
-
-		emp_ref.reload()
-		self.assertTrue(emp_ref.status, "Accepted")
-
-		# Check for Referral reference in additional salary
-
-		add_sal = create_additional_salary(emp_ref)
-		self.assertTrue(add_sal.ref_docname, emp_ref.name)
-
-	def tearDown(self):
-		frappe.db.sql("DELETE FROM `tabJob Applicant`")
-		frappe.db.sql("DELETE FROM `tabEmployee Referral`")
-
-
-def create_employee_referral():
-	emp_ref = frappe.new_doc("Employee Referral")
-	emp_ref.first_name = "Mahesh"
-	emp_ref.last_name = "Singh"
-	emp_ref.email = "a@b.c"
-	emp_ref.date = today()
-	emp_ref.for_designation = create_designation().name
-	emp_ref.referrer = make_employee("testassetmovemp@example.com", company="_Test Company")
-	emp_ref.is_applicable_for_employee_referral_compensation = 1
-	emp_ref.save()
-	emp_ref.submit()
-
-	return emp_ref
diff --git a/erpnext/hr/doctype/employee_separation/__init__.py b/erpnext/hr/doctype/employee_separation/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/employee_separation/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/employee_separation/employee_separation.js b/erpnext/hr/doctype/employee_separation/employee_separation.js
deleted file mode 100644
index d9011b2..0000000
--- a/erpnext/hr/doctype/employee_separation/employee_separation.js
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Employee Separation', {
-	setup: function(frm) {
-		frm.add_fetch("employee_separation_template", "company", "company");
-		frm.add_fetch("employee_separation_template", "department", "department");
-		frm.add_fetch("employee_separation_template", "designation", "designation");
-		frm.add_fetch("employee_separation_template", "employee_grade", "employee_grade");
-	},
-
-	refresh: function(frm) {
-		if (frm.doc.employee) {
-			frm.add_custom_button(__('Employee'), function() {
-				frappe.set_route("Form", "Employee", frm.doc.employee);
-			},__("View"));
-		}
-		if (frm.doc.project) {
-			frm.add_custom_button(__('Project'), function() {
-				frappe.set_route("Form", "Project", frm.doc.project);
-			},__("View"));
-			frm.add_custom_button(__('Task'), function() {
-				frappe.set_route('List', 'Task', {project: frm.doc.project});
-			},__("View"));
-		}
-	},
-
-	employee_separation_template: function(frm) {
-		frm.set_value("activities" ,"");
-		if (frm.doc.employee_separation_template) {
-			frappe.call({
-				method: "erpnext.controllers.employee_boarding_controller.get_onboarding_details",
-				args: {
-					"parent": frm.doc.employee_separation_template,
-					"parenttype": "Employee Separation Template"
-				},
-				callback: function(r) {
-					if (r.message) {
-						$.each(r.message, function(i, d) {
-							var row = frappe.model.add_child(frm.doc, "Employee Boarding Activity", "activities");
-							$.extend(row, d);
-						});
-					}
-					refresh_field("activities");
-				}
-			});
-		}
-	}
-});
diff --git a/erpnext/hr/doctype/employee_separation/employee_separation.json b/erpnext/hr/doctype/employee_separation/employee_separation.json
deleted file mode 100644
index c240493..0000000
--- a/erpnext/hr/doctype/employee_separation/employee_separation.json
+++ /dev/null
@@ -1,185 +0,0 @@
-{
- "actions": [],
- "autoname": "HR-EMP-SEP-.YYYY.-.#####",
- "creation": "2018-05-10 02:29:16.740490",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "employee",
-  "employee_name",
-  "department",
-  "designation",
-  "employee_grade",
-  "column_break_7",
-  "company",
-  "boarding_status",
-  "resignation_letter_date",
-  "boarding_begins_on",
-  "project",
-  "table_for_activity",
-  "employee_separation_template",
-  "activities",
-  "notify_users_by_email",
-  "section_break_14",
-  "exit_interview",
-  "amended_from"
- ],
- "fields": [
-  {
-   "fieldname": "employee",
-   "fieldtype": "Link",
-   "label": "Employee",
-   "options": "Employee",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "employee.employee_name",
-   "fieldname": "employee_name",
-   "fieldtype": "Data",
-   "in_list_view": 1,
-   "label": "Employee Name",
-   "read_only": 1
-  },
-  {
-   "fetch_from": "employee.resignation_letter_date",
-   "fieldname": "resignation_letter_date",
-   "fieldtype": "Date",
-   "in_list_view": 1,
-   "label": "Resignation Letter Date",
-   "read_only": 1
-  },
-  {
-   "allow_on_submit": 1,
-   "default": "Pending",
-   "fieldname": "boarding_status",
-   "fieldtype": "Select",
-   "label": "Status",
-   "options": "Pending\nIn Process\nCompleted",
-   "read_only": 1
-  },
-  {
-   "allow_on_submit": 1,
-   "default": "0",
-   "fieldname": "notify_users_by_email",
-   "fieldtype": "Check",
-   "label": "Notify users by email"
-  },
-  {
-   "fieldname": "column_break_7",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "employee_separation_template",
-   "fieldtype": "Link",
-   "label": "Employee Separation Template",
-   "options": "Employee Separation Template"
-  },
-  {
-   "fetch_from": "employee.company",
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "label": "Company",
-   "options": "Company",
-   "reqd": 1
-  },
-  {
-   "fieldname": "project",
-   "fieldtype": "Link",
-   "label": "Project",
-   "options": "Project",
-   "read_only": 1
-  },
-  {
-   "fetch_from": "employee.department",
-   "fieldname": "department",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Department",
-   "options": "Department",
-   "read_only": 1
-  },
-  {
-   "fetch_from": "employee.designation",
-   "fieldname": "designation",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Designation",
-   "options": "Designation",
-   "read_only": 1
-  },
-  {
-   "fetch_from": "employee.grade",
-   "fieldname": "employee_grade",
-   "fieldtype": "Link",
-   "label": "Employee Grade",
-   "options": "Employee Grade",
-   "read_only": 1
-  },
-  {
-   "fieldname": "table_for_activity",
-   "fieldtype": "Section Break",
-   "label": "Separation Activities"
-  },
-  {
-   "allow_on_submit": 1,
-   "fieldname": "activities",
-   "fieldtype": "Table",
-   "label": "Activities",
-   "options": "Employee Boarding Activity"
-  },
-  {
-   "fieldname": "section_break_14",
-   "fieldtype": "Section Break"
-  },
-  {
-   "fieldname": "exit_interview",
-   "fieldtype": "Text Editor",
-   "label": "Exit Interview Summary"
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "Employee Separation",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "fieldname": "boarding_begins_on",
-   "fieldtype": "Date",
-   "label": "Separation Begins On",
-   "reqd": 1
-  }
- ],
- "is_submittable": 1,
- "links": [],
- "modified": "2021-07-30 14:03:51.218791",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Employee Separation",
- "owner": "Administrator",
- "permissions": [
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  }
- ],
- "quick_entry": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "title_field": "employee_name",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/employee_separation/employee_separation.py b/erpnext/hr/doctype/employee_separation/employee_separation.py
deleted file mode 100644
index 915e9a8..0000000
--- a/erpnext/hr/doctype/employee_separation/employee_separation.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-from erpnext.controllers.employee_boarding_controller import EmployeeBoardingController
-
-
-class EmployeeSeparation(EmployeeBoardingController):
-	def validate(self):
-		super(EmployeeSeparation, self).validate()
-
-	def on_submit(self):
-		super(EmployeeSeparation, self).on_submit()
-
-	def on_update_after_submit(self):
-		self.create_task_and_notify_user()
-
-	def on_cancel(self):
-		super(EmployeeSeparation, self).on_cancel()
diff --git a/erpnext/hr/doctype/employee_separation/employee_separation_list.js b/erpnext/hr/doctype/employee_separation/employee_separation_list.js
deleted file mode 100644
index 76c58f5..0000000
--- a/erpnext/hr/doctype/employee_separation/employee_separation_list.js
+++ /dev/null
@@ -1,7 +0,0 @@
-frappe.listview_settings['Employee Separation'] = {
-	add_fields: ["boarding_status", "employee_name", "department"],
-	filters:[["boarding_status","=", "Pending"]],
-	get_indicator: function(doc) {
-		return [__(doc.boarding_status), frappe.utils.guess_colour(doc.boarding_status), "status,=," + doc.boarding_status];
-	}
-};
diff --git a/erpnext/hr/doctype/employee_separation/test_employee_separation.py b/erpnext/hr/doctype/employee_separation/test_employee_separation.py
deleted file mode 100644
index df31d09..0000000
--- a/erpnext/hr/doctype/employee_separation/test_employee_separation.py
+++ /dev/null
@@ -1,48 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-import frappe
-from frappe.utils import getdate
-
-test_dependencies = ["Employee Onboarding"]
-
-
-class TestEmployeeSeparation(unittest.TestCase):
-	def test_employee_separation(self):
-		separation = create_employee_separation()
-
-		self.assertEqual(separation.docstatus, 1)
-		self.assertEqual(separation.boarding_status, "Pending")
-
-		project = frappe.get_doc("Project", separation.project)
-		project.percent_complete_method = "Manual"
-		project.status = "Completed"
-		project.save()
-
-		separation.reload()
-		self.assertEqual(separation.boarding_status, "Completed")
-
-		separation.cancel()
-		self.assertEqual(separation.project, "")
-
-	def tearDown(self):
-		for entry in frappe.get_all("Employee Separation"):
-			doc = frappe.get_doc("Employee Separation", entry.name)
-			if doc.docstatus == 1:
-				doc.cancel()
-			doc.delete()
-
-
-def create_employee_separation():
-	employee = frappe.db.get_value("Employee", {"status": "Active", "company": "_Test Company"})
-	separation = frappe.new_doc("Employee Separation")
-	separation.employee = employee
-	separation.boarding_begins_on = getdate()
-	separation.company = "_Test Company"
-	separation.append("activities", {"activity_name": "Deactivate Employee", "role": "HR User"})
-	separation.boarding_status = "Pending"
-	separation.insert()
-	separation.submit()
-	return separation
diff --git a/erpnext/hr/doctype/employee_separation_template/__init__.py b/erpnext/hr/doctype/employee_separation_template/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/employee_separation_template/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/employee_separation_template/employee_separation_template.js b/erpnext/hr/doctype/employee_separation_template/employee_separation_template.js
deleted file mode 100644
index 172ff9f..0000000
--- a/erpnext/hr/doctype/employee_separation_template/employee_separation_template.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Employee Separation Template', {
-	refresh: function(frm) {
-
-	}
-});
diff --git a/erpnext/hr/doctype/employee_separation_template/employee_separation_template.json b/erpnext/hr/doctype/employee_separation_template/employee_separation_template.json
deleted file mode 100644
index e583231..0000000
--- a/erpnext/hr/doctype/employee_separation_template/employee_separation_template.json
+++ /dev/null
@@ -1,292 +0,0 @@
-{
- "allow_copy": 0, 
- "allow_guest_to_view": 0, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "autoname": "HR-EMP-STP-.#####", 
- "beta": 0, 
- "creation": "2018-05-09 06:31:44.498557", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "", 
- "editable_grid": 1, 
- "engine": "InnoDB", 
- "fields": [
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "company", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Company", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Company", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "department", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Department", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Department", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "column_break_7", 
-   "fieldtype": "Column Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "designation", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Designation", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Designation", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "employee_grade", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Employee Grade", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Employee Grade", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "section_break_7", 
-   "fieldtype": "Section Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Activities", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "activities", 
-   "fieldtype": "Table", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Activities", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Employee Boarding Activity", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }
- ], 
- "has_web_view": 0, 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "image_view": 0, 
- "in_create": 0, 
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 0, 
- "max_attachments": 0, 
- "modified": "2018-08-21 16:15:57.469756", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Employee Separation Template", 
- "name_case": "", 
- "owner": "Administrator", 
- "permissions": [
-  {
-   "amend": 0, 
-   "cancel": 0, 
-   "create": 1, 
-   "delete": 1, 
-   "email": 1, 
-   "export": 1, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 1, 
-   "role": "System Manager", 
-   "set_user_permissions": 0, 
-   "share": 1, 
-   "submit": 0, 
-   "write": 1
-  }
- ], 
- "quick_entry": 0, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "show_name_in_global_search": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "title_field": "designation", 
- "track_changes": 1, 
- "track_seen": 0, 
- "track_views": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/employee_separation_template/employee_separation_template.py b/erpnext/hr/doctype/employee_separation_template/employee_separation_template.py
deleted file mode 100644
index 70b84b1..0000000
--- a/erpnext/hr/doctype/employee_separation_template/employee_separation_template.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-from frappe.model.document import Document
-
-
-class EmployeeSeparationTemplate(Document):
-	pass
diff --git a/erpnext/hr/doctype/employee_separation_template/employee_separation_template_dashboard.py b/erpnext/hr/doctype/employee_separation_template/employee_separation_template_dashboard.py
deleted file mode 100644
index 3ffd8dd..0000000
--- a/erpnext/hr/doctype/employee_separation_template/employee_separation_template_dashboard.py
+++ /dev/null
@@ -1,7 +0,0 @@
-def get_data():
-	return {
-		"fieldname": "employee_separation_template",
-		"transactions": [
-			{"items": ["Employee Separation"]},
-		],
-	}
diff --git a/erpnext/hr/doctype/employee_separation_template/test_employee_separation_template.py b/erpnext/hr/doctype/employee_separation_template/test_employee_separation_template.py
deleted file mode 100644
index 6a0c947..0000000
--- a/erpnext/hr/doctype/employee_separation_template/test_employee_separation_template.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-
-class TestEmployeeSeparationTemplate(unittest.TestCase):
-	pass
diff --git a/erpnext/hr/doctype/employee_skill/__init__.py b/erpnext/hr/doctype/employee_skill/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/employee_skill/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/employee_skill/employee_skill.json b/erpnext/hr/doctype/employee_skill/employee_skill.json
deleted file mode 100644
index 4b1419e..0000000
--- a/erpnext/hr/doctype/employee_skill/employee_skill.json
+++ /dev/null
@@ -1,141 +0,0 @@
-{
- "allow_copy": 0,
- "allow_events_in_timeline": 0,
- "allow_guest_to_view": 0,
- "allow_import": 0,
- "allow_rename": 0,
- "beta": 0,
- "creation": "2019-04-16 09:57:52.751635",
- "custom": 0,
- "docstatus": 0,
- "doctype": "DocType",
- "document_type": "",
- "editable_grid": 1,
- "engine": "InnoDB",
- "fields": [
-  {
-   "allow_bulk_edit": 0,
-   "allow_in_quick_entry": 0,
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
-   "fetch_if_empty": 0,
-   "fieldname": "skill",
-   "fieldtype": "Link",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_global_search": 0,
-   "in_list_view": 1,
-   "in_standard_filter": 0,
-   "label": "Skill",
-   "length": 0,
-   "no_copy": 0,
-   "options": "Skill",
-   "permlevel": 0,
-   "precision": "",
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 0,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 1,
-   "search_index": 0,
-   "set_only_once": 0,
-   "translatable": 0,
-   "unique": 0
-  },
-  {
-   "allow_bulk_edit": 0,
-   "allow_in_quick_entry": 0,
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
-   "fetch_if_empty": 0,
-   "fieldname": "proficiency",
-   "fieldtype": "Rating",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_global_search": 0,
-   "in_list_view": 1,
-   "in_standard_filter": 0,
-   "label": "Proficiency",
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "precision": "",
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 0,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 1,
-   "search_index": 0,
-   "set_only_once": 0,
-   "translatable": 0,
-   "unique": 0
-  },
-  {
-   "allow_bulk_edit": 0,
-   "allow_in_quick_entry": 0,
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
-   "default": "Today",
-   "fetch_if_empty": 0,
-   "fieldname": "evaluation_date",
-   "fieldtype": "Date",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_global_search": 0,
-   "in_list_view": 1,
-   "in_standard_filter": 0,
-   "label": "Evaluation Date",
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "precision": "",
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 0,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
-   "translatable": 0,
-   "unique": 0
-  }
- ],
- "has_web_view": 0,
- "hide_toolbar": 0,
- "idx": 0,
- "in_create": 0,
- "is_submittable": 0,
- "issingle": 0,
- "istable": 1,
- "max_attachments": 0,
- "modified": "2019-04-16 14:13:17.111035",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Employee Skill",
- "name_case": "",
- "owner": "Administrator",
- "permissions": [],
- "quick_entry": 1,
- "read_only": 0,
- "show_name_in_global_search": 0,
- "sort_field": "modified",
- "sort_order": "ASC",
- "track_changes": 1,
- "track_seen": 0,
- "track_views": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/employee_skill/employee_skill.py b/erpnext/hr/doctype/employee_skill/employee_skill.py
deleted file mode 100644
index 13bee34..0000000
--- a/erpnext/hr/doctype/employee_skill/employee_skill.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-# import frappe
-from frappe.model.document import Document
-
-
-class EmployeeSkill(Document):
-	pass
diff --git a/erpnext/hr/doctype/employee_skill_map/__init__.py b/erpnext/hr/doctype/employee_skill_map/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/employee_skill_map/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/employee_skill_map/employee_skill_map.js b/erpnext/hr/doctype/employee_skill_map/employee_skill_map.js
deleted file mode 100644
index b82b18d..0000000
--- a/erpnext/hr/doctype/employee_skill_map/employee_skill_map.js
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Employee Skill Map', {
-	// refresh: function(frm) {
-
-	// }
-	designation: (frm) => {
-		frm.set_value('employee_skills', null);
-		if (frm.doc.designation) {
-			frappe.db.get_doc('Designation', frm.doc.designation).then((designation) => {
-				designation.skills.forEach(designation_skill => {
-					let row = frappe.model.add_child(frm.doc, 'Employee Skill', 'employee_skills');
-					row.skill = designation_skill.skill;
-					row.proficiency = 1;
-				});
-				refresh_field('employee_skills');
-			});
-		}
-	}
-});
diff --git a/erpnext/hr/doctype/employee_skill_map/employee_skill_map.json b/erpnext/hr/doctype/employee_skill_map/employee_skill_map.json
deleted file mode 100644
index 21e2513..0000000
--- a/erpnext/hr/doctype/employee_skill_map/employee_skill_map.json
+++ /dev/null
@@ -1,88 +0,0 @@
-{
- "actions": [],
- "autoname": "field:employee",
- "creation": "2019-04-16 10:07:48.303426",
- "doctype": "DocType",
- "engine": "InnoDB",
- "field_order": [
-  "employee",
-  "employee_name",
-  "column_break_3",
-  "designation",
-  "skills_section",
-  "employee_skills",
-  "trainings_section",
-  "trainings"
- ],
- "fields": [
-  {
-   "fieldname": "employee",
-   "fieldtype": "Link",
-   "label": "Employee",
-   "options": "Employee",
-   "unique": 1
-  },
-  {
-   "fetch_from": "employee.employee_name",
-   "fieldname": "employee_name",
-   "fieldtype": "Read Only",
-   "label": "Employee Name"
-  },
-  {
-   "fetch_from": "employee.designation",
-   "fieldname": "designation",
-   "fieldtype": "Read Only",
-   "label": "Designation"
-  },
-  {
-   "fieldname": "skills_section",
-   "fieldtype": "Section Break",
-   "label": "Skills"
-  },
-  {
-   "fieldname": "employee_skills",
-   "fieldtype": "Table",
-   "label": "Employee Skills",
-   "options": "Employee Skill"
-  },
-  {
-   "fieldname": "trainings_section",
-   "fieldtype": "Section Break",
-   "label": "Trainings"
-  },
-  {
-   "fieldname": "trainings",
-   "fieldtype": "Table",
-   "label": "Trainings",
-   "options": "Employee Training"
-  },
-  {
-   "fieldname": "column_break_3",
-   "fieldtype": "Column Break"
-  }
- ],
- "links": [],
- "modified": "2019-12-16 11:31:09.916893",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Employee Skill Map",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "share": 1,
-   "write": 1
-  }
- ],
- "quick_entry": 1,
- "sort_field": "modified",
- "sort_order": "ASC",
- "title_field": "employee_name"
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/employee_skill_map/employee_skill_map.py b/erpnext/hr/doctype/employee_skill_map/employee_skill_map.py
deleted file mode 100644
index ea7da9e..0000000
--- a/erpnext/hr/doctype/employee_skill_map/employee_skill_map.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-# import frappe
-from frappe.model.document import Document
-
-
-class EmployeeSkillMap(Document):
-	pass
diff --git a/erpnext/hr/doctype/employee_training/__init__.py b/erpnext/hr/doctype/employee_training/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/employee_training/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/employee_training/employee_training.json b/erpnext/hr/doctype/employee_training/employee_training.json
deleted file mode 100644
index 0e0dc15..0000000
--- a/erpnext/hr/doctype/employee_training/employee_training.json
+++ /dev/null
@@ -1,108 +0,0 @@
-{
- "allow_copy": 0,
- "allow_events_in_timeline": 0,
- "allow_guest_to_view": 0,
- "allow_import": 0,
- "allow_rename": 0,
- "beta": 0,
- "creation": "2019-04-16 16:15:50.931545",
- "custom": 0,
- "docstatus": 0,
- "doctype": "DocType",
- "document_type": "",
- "editable_grid": 1,
- "engine": "InnoDB",
- "fields": [
-  {
-   "allow_bulk_edit": 0,
-   "allow_in_quick_entry": 0,
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
-   "fetch_if_empty": 0,
-   "fieldname": "training",
-   "fieldtype": "Link",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_global_search": 0,
-   "in_list_view": 1,
-   "in_standard_filter": 0,
-   "label": "Training",
-   "length": 0,
-   "no_copy": 0,
-   "options": "Training Event",
-   "permlevel": 0,
-   "precision": "",
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 0,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
-   "translatable": 0,
-   "unique": 0
-  },
-  {
-   "allow_bulk_edit": 0,
-   "allow_in_quick_entry": 0,
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
-   "fetch_from": "training.end_time",
-   "fetch_if_empty": 0,
-   "fieldname": "training_date",
-   "fieldtype": "Date",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_global_search": 0,
-   "in_list_view": 1,
-   "in_standard_filter": 0,
-   "label": "Training Date",
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "precision": "",
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 0,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
-   "translatable": 0,
-   "unique": 0
-  }
- ],
- "has_web_view": 0,
- "hide_toolbar": 0,
- "idx": 0,
- "in_create": 0,
- "is_submittable": 0,
- "issingle": 0,
- "istable": 1,
- "max_attachments": 0,
- "modified": "2019-04-22 12:48:56.925419",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Employee Training",
- "name_case": "",
- "owner": "Administrator",
- "permissions": [],
- "quick_entry": 1,
- "read_only": 0,
- "show_name_in_global_search": 0,
- "sort_field": "modified",
- "sort_order": "ASC",
- "track_changes": 1,
- "track_seen": 0,
- "track_views": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/employee_training/employee_training.py b/erpnext/hr/doctype/employee_training/employee_training.py
deleted file mode 100644
index cd92dd6..0000000
--- a/erpnext/hr/doctype/employee_training/employee_training.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-# import frappe
-from frappe.model.document import Document
-
-
-class EmployeeTraining(Document):
-	pass
diff --git a/erpnext/hr/doctype/employee_transfer/__init__.py b/erpnext/hr/doctype/employee_transfer/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/employee_transfer/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/employee_transfer/employee_transfer.js b/erpnext/hr/doctype/employee_transfer/employee_transfer.js
deleted file mode 100644
index af751a7..0000000
--- a/erpnext/hr/doctype/employee_transfer/employee_transfer.js
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-{% include 'erpnext/hr/employee_property_update.js' %}
-
-frappe.ui.form.on('Employee Transfer', {
-	refresh: function(frm) {
-
-	}
-});
diff --git a/erpnext/hr/doctype/employee_transfer/employee_transfer.json b/erpnext/hr/doctype/employee_transfer/employee_transfer.json
deleted file mode 100644
index d66ef64..0000000
--- a/erpnext/hr/doctype/employee_transfer/employee_transfer.json
+++ /dev/null
@@ -1,528 +0,0 @@
-{
- "allow_copy": 0, 
- "allow_guest_to_view": 0, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "autoname": "HR-EMP-TRN-.YYYY.-.#####", 
- "beta": 0, 
- "creation": "2018-04-13 18:20:01.603830", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "", 
- "editable_grid": 1, 
- "engine": "InnoDB", 
- "fields": [
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "employee", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Employee", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Employee", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fetch_from": "employee.employee_name", 
-   "fieldname": "employee_name", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Employee Name", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "transfer_date", 
-   "fieldtype": "Date", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Transfer Date", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "column_break_3", 
-   "fieldtype": "Column Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fetch_from": "employee.company", 
-   "fieldname": "company", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Company", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Company", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "new_company", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "New Company", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Company", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 1, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "default": "", 
-   "fetch_from": "employee.department", 
-   "fieldname": "department", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Department", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Department", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "details_section", 
-   "fieldtype": "Section Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Employee Transfer Details", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "transfer_details", 
-   "fieldtype": "Table", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Employee Transfer Detail", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Employee Property History", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "reallocate_leaves", 
-   "fieldtype": "Check", 
-   "hidden": 1, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Re-allocate Leaves", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "create_new_employee_id", 
-   "fieldtype": "Check", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Create New Employee Id", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 1, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "new_employee_id", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "New Employee ID", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Employee", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "amended_from", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Amended From", 
-   "length": 0, 
-   "no_copy": 1, 
-   "options": "Employee Transfer", 
-   "permlevel": 0, 
-   "print_hide": 1, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }
- ], 
- "has_web_view": 0, 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "image_view": 0, 
- "in_create": 0, 
- "is_submittable": 1, 
- "issingle": 0, 
- "istable": 0, 
- "max_attachments": 0, 
- "modified": "2018-08-21 16:15:36.876312", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Employee Transfer", 
- "name_case": "", 
- "owner": "Administrator", 
- "permissions": [
-  {
-   "amend": 0, 
-   "cancel": 0, 
-   "create": 0, 
-   "delete": 0, 
-   "email": 1, 
-   "export": 1, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 1, 
-   "role": "Employee", 
-   "set_user_permissions": 0, 
-   "share": 1, 
-   "submit": 0, 
-   "write": 0
-  }, 
-  {
-   "amend": 0, 
-   "cancel": 0, 
-   "create": 1, 
-   "delete": 0, 
-   "email": 1, 
-   "export": 1, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 1, 
-   "role": "HR User", 
-   "set_user_permissions": 0, 
-   "share": 1, 
-   "submit": 1, 
-   "write": 1
-  }, 
-  {
-   "amend": 1, 
-   "cancel": 1, 
-   "create": 1, 
-   "delete": 1, 
-   "email": 1, 
-   "export": 1, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 1, 
-   "role": "HR Manager", 
-   "set_user_permissions": 0, 
-   "share": 1, 
-   "submit": 1, 
-   "write": 1
-  }
- ], 
- "quick_entry": 1, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "show_name_in_global_search": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "title_field": "employee_name", 
- "track_changes": 1, 
- "track_seen": 0, 
- "track_views": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/employee_transfer/employee_transfer.py b/erpnext/hr/doctype/employee_transfer/employee_transfer.py
deleted file mode 100644
index 6dbefe5..0000000
--- a/erpnext/hr/doctype/employee_transfer/employee_transfer.py
+++ /dev/null
@@ -1,76 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.utils import getdate
-
-from erpnext.hr.utils import update_employee_work_history
-
-
-class EmployeeTransfer(Document):
-	def before_submit(self):
-		if getdate(self.transfer_date) > getdate():
-			frappe.throw(
-				_("Employee Transfer cannot be submitted before Transfer Date"),
-				frappe.DocstatusTransitionError,
-			)
-
-	def on_submit(self):
-		employee = frappe.get_doc("Employee", self.employee)
-		if self.create_new_employee_id:
-			new_employee = frappe.copy_doc(employee)
-			new_employee.name = None
-			new_employee.employee_number = None
-			new_employee = update_employee_work_history(
-				new_employee, self.transfer_details, date=self.transfer_date
-			)
-			if self.new_company and self.company != self.new_company:
-				new_employee.internal_work_history = []
-				new_employee.date_of_joining = self.transfer_date
-				new_employee.company = self.new_company
-			# move user_id to new employee before insert
-			if employee.user_id and not self.validate_user_in_details():
-				new_employee.user_id = employee.user_id
-				employee.db_set("user_id", "")
-			new_employee.insert()
-			self.db_set("new_employee_id", new_employee.name)
-			# relieve the old employee
-			employee.db_set("relieving_date", self.transfer_date)
-			employee.db_set("status", "Left")
-		else:
-			employee = update_employee_work_history(
-				employee, self.transfer_details, date=self.transfer_date
-			)
-			if self.new_company and self.company != self.new_company:
-				employee.company = self.new_company
-				employee.date_of_joining = self.transfer_date
-			employee.save()
-
-	def on_cancel(self):
-		employee = frappe.get_doc("Employee", self.employee)
-		if self.create_new_employee_id:
-			if self.new_employee_id:
-				frappe.throw(
-					_("Please delete the Employee {0} to cancel this document").format(
-						"<a href='/app/Form/Employee/{0}'>{0}</a>".format(self.new_employee_id)
-					)
-				)
-			# mark the employee as active
-			employee.status = "Active"
-			employee.relieving_date = ""
-		else:
-			employee = update_employee_work_history(
-				employee, self.transfer_details, date=self.transfer_date, cancel=True
-			)
-		if self.new_company != self.company:
-			employee.company = self.company
-		employee.save()
-
-	def validate_user_in_details(self):
-		for item in self.transfer_details:
-			if item.fieldname == "user_id" and item.new != item.current:
-				return True
-		return False
diff --git a/erpnext/hr/doctype/employee_transfer/test_employee_transfer.py b/erpnext/hr/doctype/employee_transfer/test_employee_transfer.py
deleted file mode 100644
index 37a190a..0000000
--- a/erpnext/hr/doctype/employee_transfer/test_employee_transfer.py
+++ /dev/null
@@ -1,138 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-import frappe
-from frappe.utils import add_days, getdate
-
-from erpnext.hr.doctype.employee.test_employee import make_employee
-
-
-class TestEmployeeTransfer(unittest.TestCase):
-	def setUp(self):
-		create_company()
-
-	def tearDown(self):
-		frappe.db.rollback()
-
-	def test_submit_before_transfer_date(self):
-		make_employee("employee2@transfers.com")
-
-		transfer_obj = frappe.get_doc(
-			{
-				"doctype": "Employee Transfer",
-				"employee": frappe.get_value("Employee", {"user_id": "employee2@transfers.com"}, "name"),
-				"transfer_details": [
-					{
-						"property": "Designation",
-						"current": "Software Developer",
-						"new": "Project Manager",
-						"fieldname": "designation",
-					}
-				],
-			}
-		)
-		transfer_obj.transfer_date = add_days(getdate(), 1)
-		transfer_obj.save()
-		self.assertRaises(frappe.DocstatusTransitionError, transfer_obj.submit)
-		transfer = frappe.get_doc("Employee Transfer", transfer_obj.name)
-		transfer.transfer_date = getdate()
-		transfer.submit()
-		self.assertEqual(transfer.docstatus, 1)
-
-	def test_new_employee_creation(self):
-		make_employee("employee3@transfers.com")
-
-		transfer = frappe.get_doc(
-			{
-				"doctype": "Employee Transfer",
-				"employee": frappe.get_value("Employee", {"user_id": "employee3@transfers.com"}, "name"),
-				"create_new_employee_id": 1,
-				"transfer_date": getdate(),
-				"transfer_details": [
-					{
-						"property": "Designation",
-						"current": "Software Developer",
-						"new": "Project Manager",
-						"fieldname": "designation",
-					}
-				],
-			}
-		).insert()
-		transfer.submit()
-		self.assertTrue(transfer.new_employee_id)
-		self.assertEqual(frappe.get_value("Employee", transfer.new_employee_id, "status"), "Active")
-		self.assertEqual(frappe.get_value("Employee", transfer.employee, "status"), "Left")
-
-	def test_employee_history(self):
-		employee = make_employee(
-			"employee4@transfers.com",
-			company="Test Company",
-			date_of_birth=getdate("30-09-1980"),
-			date_of_joining=getdate("01-10-2021"),
-			department="Accounts - TC",
-			designation="Accountant",
-		)
-		transfer = create_employee_transfer(employee)
-
-		count = 0
-		department = ["Accounts - TC", "Management - TC"]
-		designation = ["Accountant", "Manager"]
-		dt = [getdate("01-10-2021"), getdate()]
-
-		employee = frappe.get_doc("Employee", employee)
-		for data in employee.internal_work_history:
-			self.assertEqual(data.department, department[count])
-			self.assertEqual(data.designation, designation[count])
-			self.assertEqual(data.from_date, dt[count])
-			count = count + 1
-
-		transfer.cancel()
-		employee.reload()
-
-		for data in employee.internal_work_history:
-			self.assertEqual(data.designation, designation[0])
-			self.assertEqual(data.department, department[0])
-			self.assertEqual(data.from_date, dt[0])
-
-
-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()
-
-
-def create_employee_transfer(employee):
-	doc = frappe.get_doc(
-		{
-			"doctype": "Employee Transfer",
-			"employee": employee,
-			"transfer_date": getdate(),
-			"transfer_details": [
-				{
-					"property": "Designation",
-					"current": "Accountant",
-					"new": "Manager",
-					"fieldname": "designation",
-				},
-				{
-					"property": "Department",
-					"current": "Accounts - TC",
-					"new": "Management - TC",
-					"fieldname": "department",
-				},
-			],
-		}
-	)
-
-	doc.save()
-	doc.submit()
-
-	return doc
diff --git a/erpnext/hr/doctype/employment_type/README.md b/erpnext/hr/doctype/employment_type/README.md
deleted file mode 100644
index 19de703..0000000
--- a/erpnext/hr/doctype/employment_type/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-Type of employment.
-
-e.g. Permanent, Probation, Intern etc.
\ No newline at end of file
diff --git a/erpnext/hr/doctype/employment_type/__init__.py b/erpnext/hr/doctype/employment_type/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/employment_type/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/employment_type/employment_type.json b/erpnext/hr/doctype/employment_type/employment_type.json
deleted file mode 100644
index 6b0b505..0000000
--- a/erpnext/hr/doctype/employment_type/employment_type.json
+++ /dev/null
@@ -1,113 +0,0 @@
-{
- "allow_copy": 0,
- "allow_guest_to_view": 0,
- "allow_import": 1,
- "allow_rename": 1,
- "autoname": "field:employee_type_name",
- "beta": 0,
- "creation": "2013-01-10 16:34:14",
- "custom": 0,
- "docstatus": 0,
- "doctype": "DocType",
- "document_type": "Setup",
- "editable_grid": 0,
- "fields": [
-  {
-   "allow_bulk_edit": 0,
-   "allow_in_quick_entry": 0,
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
-   "fieldname": "employee_type_name",
-   "fieldtype": "Data",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_global_search": 0,
-   "in_list_view": 1,
-   "in_standard_filter": 0,
-   "label": "Employment Type",
-   "length": 0,
-   "no_copy": 0,
-   "oldfieldname": "employee_type_name",
-   "oldfieldtype": "Data",
-   "permlevel": 0,
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 0,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 1,
-   "search_index": 0,
-   "set_only_once": 0,
-   "translatable": 0,
-   "unique": 1
-  }
- ],
- "has_web_view": 0,
- "hide_heading": 0,
- "hide_toolbar": 0,
- "icon": "fa fa-flag",
- "idx": 1,
- "image_view": 0,
- "in_create": 0,
- "is_submittable": 0,
- "issingle": 0,
- "istable": 0,
- "max_attachments": 0,
- "modified": "2018-08-29 06:37:02.041245",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Employment Type",
- "owner": "Administrator",
- "permissions": [
-  {
-   "amend": 0,
-   "cancel": 0,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 0,
-   "if_owner": 0,
-   "import": 0,
-   "permlevel": 0,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "set_user_permissions": 0,
-   "share": 1,
-   "submit": 0,
-   "write": 1
-  },
-  {
-   "amend": 0,
-   "cancel": 0,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "if_owner": 0,
-   "import": 1,
-   "permlevel": 0,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "set_user_permissions": 0,
-   "share": 1,
-   "submit": 0,
-   "write": 1
-  }
- ],
- "quick_entry": 1,
- "read_only": 0,
- "read_only_onload": 0,
- "show_name_in_global_search": 1,
- "sort_order": "DESC",
- "track_changes": 0,
- "track_seen": 0,
- "track_views": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/employment_type/employment_type.py b/erpnext/hr/doctype/employment_type/employment_type.py
deleted file mode 100644
index b2262c0..0000000
--- a/erpnext/hr/doctype/employment_type/employment_type.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-
-from frappe.model.document import Document
-
-
-class EmploymentType(Document):
-	pass
diff --git a/erpnext/hr/doctype/employment_type/test_employment_type.py b/erpnext/hr/doctype/employment_type/test_employment_type.py
deleted file mode 100644
index fdf6965..0000000
--- a/erpnext/hr/doctype/employment_type/test_employment_type.py
+++ /dev/null
@@ -1,6 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-import frappe
-
-test_records = frappe.get_test_records("Employment Type")
diff --git a/erpnext/hr/doctype/employment_type/test_records.json b/erpnext/hr/doctype/employment_type/test_records.json
deleted file mode 100644
index fa57179..0000000
--- a/erpnext/hr/doctype/employment_type/test_records.json
+++ /dev/null
@@ -1,6 +0,0 @@
-[
- {
-  "doctype": "Employment Type", 
-  "employee_type_name": "_Test Employment Type"
- }
-]
\ No newline at end of file
diff --git a/erpnext/hr/doctype/exit_interview/__init__.py b/erpnext/hr/doctype/exit_interview/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/exit_interview/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/exit_interview/exit_interview.js b/erpnext/hr/doctype/exit_interview/exit_interview.js
deleted file mode 100644
index 502af42..0000000
--- a/erpnext/hr/doctype/exit_interview/exit_interview.js
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Exit Interview', {
-	refresh: function(frm) {
-		if (!frm.doc.__islocal && !frm.doc.questionnaire_email_sent && frappe.boot.user.can_write.includes('Exit Interview')) {
-			frm.add_custom_button(__('Send Exit Questionnaire'), function () {
-				frm.trigger('send_exit_questionnaire');
-			});
-		}
-	},
-
-	employee: function(frm) {
-		frappe.db.get_value('Employee', frm.doc.employee, 'relieving_date', (message) => {
-			if (!message.relieving_date) {
-				frappe.throw({
-					message: __('Please set the relieving date for employee {0}',
-						['<a href="/app/employee/' + frm.doc.employee +'">' + frm.doc.employee + '</a>']),
-					title: __('Relieving Date Missing')
-				});
-			}
-		});
-	},
-
-	send_exit_questionnaire: function(frm) {
-		frappe.call({
-			method: 'erpnext.hr.doctype.exit_interview.exit_interview.send_exit_questionnaire',
-			args: {
-				'interviews': [frm.doc]
-			},
-			callback: function(r) {
-				if (!r.exc) {
-					frm.refresh_field('questionnaire_email_sent');
-				}
-			}
-		});
-	}
-});
diff --git a/erpnext/hr/doctype/exit_interview/exit_interview.json b/erpnext/hr/doctype/exit_interview/exit_interview.json
deleted file mode 100644
index 989a1b8..0000000
--- a/erpnext/hr/doctype/exit_interview/exit_interview.json
+++ /dev/null
@@ -1,246 +0,0 @@
-{
- "actions": [],
- "allow_rename": 1,
- "autoname": "naming_series:",
- "creation": "2021-12-05 13:56:36.241690",
- "doctype": "DocType",
- "editable_grid": 1,
- "email_append_to": 1,
- "engine": "InnoDB",
- "field_order": [
-  "naming_series",
-  "employee",
-  "employee_name",
-  "email",
-  "column_break_5",
-  "company",
-  "status",
-  "date",
-  "employee_details_section",
-  "department",
-  "designation",
-  "reports_to",
-  "column_break_9",
-  "date_of_joining",
-  "relieving_date",
-  "exit_questionnaire_section",
-  "ref_doctype",
-  "questionnaire_email_sent",
-  "column_break_10",
-  "reference_document_name",
-  "interview_summary_section",
-  "interviewers",
-  "interview_summary",
-  "employee_status_section",
-  "employee_status",
-  "amended_from"
- ],
- "fields": [
-  {
-   "fieldname": "employee",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Employee",
-   "options": "Employee",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "employee.employee_name",
-   "fieldname": "employee_name",
-   "fieldtype": "Data",
-   "label": "Employee Name",
-   "read_only": 1
-  },
-  {
-   "fetch_from": "employee.department",
-   "fieldname": "department",
-   "fieldtype": "Link",
-   "label": "Department",
-   "options": "Department",
-   "read_only": 1
-  },
-  {
-   "fetch_from": "employee.relieving_date",
-   "fieldname": "relieving_date",
-   "fieldtype": "Date",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Relieving Date",
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break_5",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "in_standard_filter": 1,
-   "label": "Company",
-   "options": "Company",
-   "reqd": 1
-  },
-  {
-   "fieldname": "date",
-   "fieldtype": "Date",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Date",
-   "mandatory_depends_on": "eval:doc.status==='Scheduled';"
-  },
-  {
-   "fieldname": "exit_questionnaire_section",
-   "fieldtype": "Section Break",
-   "label": "Exit Questionnaire"
-  },
-  {
-   "fieldname": "ref_doctype",
-   "fieldtype": "Link",
-   "label": "Reference Document Type",
-   "options": "DocType"
-  },
-  {
-   "fieldname": "reference_document_name",
-   "fieldtype": "Dynamic Link",
-   "in_list_view": 1,
-   "label": "Reference Document Name",
-   "options": "ref_doctype"
-  },
-  {
-   "fieldname": "interview_summary_section",
-   "fieldtype": "Section Break",
-   "label": "Interview Details"
-  },
-  {
-   "fieldname": "column_break_10",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "interviewers",
-   "fieldtype": "Table MultiSelect",
-   "label": "Interviewers",
-   "mandatory_depends_on": "eval:doc.status==='Scheduled';",
-   "options": "Interviewer"
-  },
-  {
-   "fetch_from": "employee.date_of_joining",
-   "fieldname": "date_of_joining",
-   "fieldtype": "Date",
-   "label": "Date of Joining",
-   "read_only": 1
-  },
-  {
-   "fetch_from": "employee.reports_to",
-   "fieldname": "reports_to",
-   "fieldtype": "Link",
-   "in_standard_filter": 1,
-   "label": "Reports To",
-   "options": "Employee",
-   "read_only": 1
-  },
-  {
-   "fieldname": "employee_details_section",
-   "fieldtype": "Section Break",
-   "label": "Employee Details"
-  },
-  {
-   "fetch_from": "employee.designation",
-   "fieldname": "designation",
-   "fieldtype": "Link",
-   "label": "Designation",
-   "options": "Designation",
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break_9",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "naming_series",
-   "fieldtype": "Select",
-   "label": "Naming Series",
-   "options": "HR-EXIT-INT-"
-  },
-  {
-   "default": "0",
-   "fieldname": "questionnaire_email_sent",
-   "fieldtype": "Check",
-   "in_standard_filter": 1,
-   "label": "Questionnaire Email Sent",
-   "no_copy": 1,
-   "read_only": 1
-  },
-  {
-   "fieldname": "email",
-   "fieldtype": "Data",
-   "label": "Email ID",
-   "options": "Email",
-   "read_only": 1
-  },
-  {
-   "fieldname": "status",
-   "fieldtype": "Select",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Status",
-   "options": "Pending\nScheduled\nCompleted\nCancelled",
-   "reqd": 1
-  },
-  {
-   "fieldname": "employee_status_section",
-   "fieldtype": "Section Break"
-  },
-  {
-   "fieldname": "employee_status",
-   "fieldtype": "Select",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Final Decision",
-   "mandatory_depends_on": "eval:doc.status==='Completed';",
-   "options": "\nEmployee Retained\nExit Confirmed"
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "Exit Interview",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "fieldname": "interview_summary",
-   "fieldtype": "Text Editor",
-   "label": "Interview Summary"
-  }
- ],
- "index_web_pages_for_search": 1,
- "is_submittable": 1,
- "links": [],
- "modified": "2021-12-07 23:39:22.645401",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Exit Interview",
- "naming_rule": "By \"Naming Series\" field",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "share": 1,
-   "write": 1
-  }
- ],
- "sender_field": "email",
- "sort_field": "modified",
- "sort_order": "DESC",
- "title_field": "employee_name",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/exit_interview/exit_interview.py b/erpnext/hr/doctype/exit_interview/exit_interview.py
deleted file mode 100644
index 8317310..0000000
--- a/erpnext/hr/doctype/exit_interview/exit_interview.py
+++ /dev/null
@@ -1,146 +0,0 @@
-# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.utils import get_link_to_form
-
-from erpnext.hr.doctype.employee.employee import get_employee_email
-
-
-class ExitInterview(Document):
-	def validate(self):
-		self.validate_relieving_date()
-		self.validate_duplicate_interview()
-		self.set_employee_email()
-
-	def validate_relieving_date(self):
-		if not frappe.db.get_value("Employee", self.employee, "relieving_date"):
-			frappe.throw(
-				_("Please set the relieving date for employee {0}").format(
-					get_link_to_form("Employee", self.employee)
-				),
-				title=_("Relieving Date Missing"),
-			)
-
-	def validate_duplicate_interview(self):
-		doc = frappe.db.exists(
-			"Exit Interview", {"employee": self.employee, "name": ("!=", self.name), "docstatus": ("!=", 2)}
-		)
-		if doc:
-			frappe.throw(
-				_("Exit Interview {0} already exists for Employee: {1}").format(
-					get_link_to_form("Exit Interview", doc), frappe.bold(self.employee)
-				),
-				frappe.DuplicateEntryError,
-			)
-
-	def set_employee_email(self):
-		employee = frappe.get_doc("Employee", self.employee)
-		self.email = get_employee_email(employee)
-
-	def on_submit(self):
-		if self.status != "Completed":
-			frappe.throw(_("Only Completed documents can be submitted"))
-
-		self.update_interview_date_in_employee()
-
-	def on_cancel(self):
-		self.update_interview_date_in_employee()
-		self.db_set("status", "Cancelled")
-
-	def update_interview_date_in_employee(self):
-		if self.docstatus == 1:
-			frappe.db.set_value("Employee", self.employee, "held_on", self.date)
-		elif self.docstatus == 2:
-			frappe.db.set_value("Employee", self.employee, "held_on", None)
-
-
-@frappe.whitelist()
-def send_exit_questionnaire(interviews):
-	interviews = get_interviews(interviews)
-	validate_questionnaire_settings()
-
-	email_success = []
-	email_failure = []
-
-	for exit_interview in interviews:
-		interview = frappe.get_doc("Exit Interview", exit_interview.get("name"))
-		if interview.get("questionnaire_email_sent"):
-			continue
-
-		employee = frappe.get_doc("Employee", interview.employee)
-		email = get_employee_email(employee)
-
-		context = interview.as_dict()
-		context.update(employee.as_dict())
-		template_name = frappe.db.get_single_value(
-			"HR Settings", "exit_questionnaire_notification_template"
-		)
-		template = frappe.get_doc("Email Template", template_name)
-
-		if email:
-			frappe.sendmail(
-				recipients=email,
-				subject=template.subject,
-				message=frappe.render_template(template.response, context),
-				reference_doctype=interview.doctype,
-				reference_name=interview.name,
-			)
-			interview.db_set("questionnaire_email_sent", True)
-			interview.notify_update()
-			email_success.append(email)
-		else:
-			email_failure.append(get_link_to_form("Employee", employee.name))
-
-	show_email_summary(email_success, email_failure)
-
-
-def get_interviews(interviews):
-	import json
-
-	if isinstance(interviews, str):
-		interviews = json.loads(interviews)
-
-	if not len(interviews):
-		frappe.throw(_("Atleast one interview has to be selected."))
-
-	return interviews
-
-
-def validate_questionnaire_settings():
-	settings = frappe.db.get_value(
-		"HR Settings",
-		"HR Settings",
-		["exit_questionnaire_web_form", "exit_questionnaire_notification_template"],
-		as_dict=True,
-	)
-
-	if (
-		not settings.exit_questionnaire_web_form or not settings.exit_questionnaire_notification_template
-	):
-		frappe.throw(
-			_("Please set {0} and {1} in {2}.").format(
-				frappe.bold("Exit Questionnaire Web Form"),
-				frappe.bold("Notification Template"),
-				get_link_to_form("HR Settings", "HR Settings"),
-			),
-			title=_("Settings Missing"),
-		)
-
-
-def show_email_summary(email_success, email_failure):
-	message = ""
-	if email_success:
-		message += _("{0}: {1}").format(frappe.bold("Sent Successfully"), ", ".join(email_success))
-	if message and email_failure:
-		message += "<br><br>"
-	if email_failure:
-		message += _("{0} due to missing email information for employee(s): {1}").format(
-			frappe.bold("Sending Failed"), ", ".join(email_failure)
-		)
-
-	frappe.msgprint(
-		message, title=_("Exit Questionnaire"), indicator="blue", is_minimizable=True, wide=True
-	)
diff --git a/erpnext/hr/doctype/exit_interview/exit_interview_list.js b/erpnext/hr/doctype/exit_interview/exit_interview_list.js
deleted file mode 100644
index 93d7b21..0000000
--- a/erpnext/hr/doctype/exit_interview/exit_interview_list.js
+++ /dev/null
@@ -1,27 +0,0 @@
-frappe.listview_settings['Exit Interview'] = {
-	has_indicator_for_draft: 1,
-	get_indicator: function(doc) {
-		let status_color = {
-			'Pending': 'orange',
-			'Scheduled': 'yellow',
-			'Completed': 'green',
-			'Cancelled': 'red',
-		};
-		return [__(doc.status), status_color[doc.status], 'status,=,'+doc.status];
-	},
-
-	onload: function(listview) {
-		if (frappe.boot.user.can_write.includes('Exit Interview')) {
-			listview.page.add_action_item(__('Send Exit Questionnaires'), function() {
-				const interviews = listview.get_checked_items();
-				frappe.call({
-					method: 'erpnext.hr.doctype.exit_interview.exit_interview.send_exit_questionnaire',
-					freeze: true,
-					args: {
-						'interviews': interviews
-					}
-				});
-			});
-		}
-	}
-};
diff --git a/erpnext/hr/doctype/exit_interview/exit_questionnaire_notification_template.html b/erpnext/hr/doctype/exit_interview/exit_questionnaire_notification_template.html
deleted file mode 100644
index 0317b1a..0000000
--- a/erpnext/hr/doctype/exit_interview/exit_questionnaire_notification_template.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<h2>Exit Questionnaire</h2>
-<br>
-
-<p>
-	Dear {{ employee_name }},
-	<br><br>
-
-	Thank you for the contribution you have made during your time at {{ company }}. We value your opinion and welcome the feedback on your experience working with us.
-	Request you to take out a few minutes to fill up this Exit Questionnaire.
-
-	{% set web_form = frappe.db.get_value('HR Settings', 'HR Settings', 'exit_questionnaire_web_form') %}
-	{% set web_form_link = frappe.utils.get_url(uri=frappe.db.get_value('Web Form', web_form, 'route')) %}
-
-	<br><br>
-	<a class="btn btn-primary" href="{{ web_form_link }}" target="_blank">{{ _('Submit Now') }}</a>
-</p>
diff --git a/erpnext/hr/doctype/exit_interview/test_exit_interview.py b/erpnext/hr/doctype/exit_interview/test_exit_interview.py
deleted file mode 100644
index 9c2c644..0000000
--- a/erpnext/hr/doctype/exit_interview/test_exit_interview.py
+++ /dev/null
@@ -1,126 +0,0 @@
-# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import os
-import unittest
-
-import frappe
-from frappe import _
-from frappe.core.doctype.user_permission.test_user_permission import create_user
-from frappe.tests.test_webform import create_custom_doctype, create_webform
-from frappe.utils import getdate
-
-from erpnext.hr.doctype.employee.test_employee import make_employee
-from erpnext.hr.doctype.exit_interview.exit_interview import send_exit_questionnaire
-
-
-class TestExitInterview(unittest.TestCase):
-	def setUp(self):
-		frappe.db.sql("delete from `tabExit Interview`")
-
-	def test_duplicate_interview(self):
-		employee = make_employee("employeeexitint1@example.com")
-		frappe.db.set_value("Employee", employee, "relieving_date", getdate())
-		interview = create_exit_interview(employee)
-
-		doc = frappe.copy_doc(interview)
-		self.assertRaises(frappe.DuplicateEntryError, doc.save)
-
-	def test_relieving_date_validation(self):
-		employee = make_employee("employeeexitint2@example.com")
-		# unset relieving date
-		frappe.db.set_value("Employee", employee, "relieving_date", None)
-
-		interview = create_exit_interview(employee, save=False)
-		self.assertRaises(frappe.ValidationError, interview.save)
-
-		# set relieving date
-		frappe.db.set_value("Employee", employee, "relieving_date", getdate())
-		interview = create_exit_interview(employee)
-		self.assertTrue(interview.name)
-
-	def test_interview_date_updated_in_employee_master(self):
-		employee = make_employee("employeeexit3@example.com")
-		frappe.db.set_value("Employee", employee, "relieving_date", getdate())
-
-		interview = create_exit_interview(employee)
-		interview.status = "Completed"
-		interview.employee_status = "Exit Confirmed"
-
-		# exit interview date updated on submit
-		interview.submit()
-		self.assertEqual(frappe.db.get_value("Employee", employee, "held_on"), interview.date)
-
-		# exit interview reset on cancel
-		interview.reload()
-		interview.cancel()
-		self.assertEqual(frappe.db.get_value("Employee", employee, "held_on"), None)
-
-	def test_send_exit_questionnaire(self):
-		create_custom_doctype()
-		create_webform()
-		template = create_notification_template()
-
-		webform = frappe.db.get_all("Web Form", limit=1)
-		frappe.db.set_value(
-			"HR Settings",
-			"HR Settings",
-			{
-				"exit_questionnaire_web_form": webform[0].name,
-				"exit_questionnaire_notification_template": template,
-			},
-		)
-
-		employee = make_employee("employeeexit3@example.com")
-		frappe.db.set_value("Employee", employee, "relieving_date", getdate())
-
-		interview = create_exit_interview(employee)
-		send_exit_questionnaire([interview])
-
-		email_queue = frappe.db.get_all("Email Queue", ["name", "message"], limit=1)
-		self.assertTrue("Subject: Exit Questionnaire Notification" in email_queue[0].message)
-
-	def tearDown(self):
-		frappe.db.rollback()
-
-
-def create_exit_interview(employee, save=True):
-	interviewer = create_user("test_exit_interviewer@example.com")
-
-	doc = frappe.get_doc(
-		{
-			"doctype": "Exit Interview",
-			"employee": employee,
-			"company": "_Test Company",
-			"status": "Pending",
-			"date": getdate(),
-			"interviewers": [{"interviewer": interviewer.name}],
-			"interview_summary": "Test",
-		}
-	)
-
-	if save:
-		return doc.insert()
-	return doc
-
-
-def create_notification_template():
-	template = frappe.db.exists("Email Template", _("Exit Questionnaire Notification"))
-	if not template:
-		base_path = frappe.get_app_path("erpnext", "hr", "doctype")
-		response = frappe.read_file(
-			os.path.join(base_path, "exit_interview/exit_questionnaire_notification_template.html")
-		)
-
-		template = frappe.get_doc(
-			{
-				"doctype": "Email Template",
-				"name": _("Exit Questionnaire Notification"),
-				"response": response,
-				"subject": _("Exit Questionnaire Notification"),
-				"owner": frappe.session.user,
-			}
-		).insert(ignore_permissions=True)
-		template = template.name
-
-	return template
diff --git a/erpnext/hr/doctype/expected_skill_set/__init__.py b/erpnext/hr/doctype/expected_skill_set/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/expected_skill_set/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/expected_skill_set/expected_skill_set.json b/erpnext/hr/doctype/expected_skill_set/expected_skill_set.json
deleted file mode 100644
index 899f5bd..0000000
--- a/erpnext/hr/doctype/expected_skill_set/expected_skill_set.json
+++ /dev/null
@@ -1,40 +0,0 @@
-{
- "actions": [],
- "creation": "2021-04-12 13:05:06.741330",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "skill",
-  "description"
- ],
- "fields": [
-  {
-   "fieldname": "skill",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Skill",
-   "options": "Skill",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "skill.description",
-   "fieldname": "description",
-   "fieldtype": "Small Text",
-   "in_list_view": 1,
-   "label": "Description"
-  }
- ],
- "index_web_pages_for_search": 1,
- "istable": 1,
- "links": [],
- "modified": "2021-04-12 14:26:33.062549",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Expected Skill Set",
- "owner": "Administrator",
- "permissions": [],
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/expected_skill_set/expected_skill_set.py b/erpnext/hr/doctype/expected_skill_set/expected_skill_set.py
deleted file mode 100644
index 0062ba9..0000000
--- a/erpnext/hr/doctype/expected_skill_set/expected_skill_set.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-# import frappe
-from frappe.model.document import Document
-
-
-class ExpectedSkillSet(Document):
-	pass
diff --git a/erpnext/hr/doctype/expense_claim/README.md b/erpnext/hr/doctype/expense_claim/README.md
deleted file mode 100644
index 489029c..0000000
--- a/erpnext/hr/doctype/expense_claim/README.md
+++ /dev/null
@@ -1 +0,0 @@
-Amount claimed by Employee for expense made by the Employee on organization's behalf.
\ No newline at end of file
diff --git a/erpnext/hr/doctype/expense_claim/__init__.py b/erpnext/hr/doctype/expense_claim/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/expense_claim/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/expense_claim/expense_claim.js b/erpnext/hr/doctype/expense_claim/expense_claim.js
deleted file mode 100644
index af80b63..0000000
--- a/erpnext/hr/doctype/expense_claim/expense_claim.js
+++ /dev/null
@@ -1,467 +0,0 @@
-// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-// License: GNU General Public License v3. See license.txt
-
-frappe.provide("erpnext.hr");
-frappe.provide("erpnext.accounts.dimensions");
-
-frappe.ui.form.on('Expense Claim', {
-	onload: function(frm) {
-		erpnext.accounts.dimensions.setup_dimension_filters(frm, frm.doctype);
-	},
-	company: function(frm) {
-		erpnext.accounts.dimensions.update_dimension(frm, frm.doctype);
-		var expenses = frm.doc.expenses;
-		for (var i = 0; i < expenses.length; i++) {
-			var expense = expenses[i];
-			if (!expense.expense_type) {
-				continue;
-			}
-			frappe.call({
-				method: "erpnext.hr.doctype.expense_claim.expense_claim.get_expense_claim_account_and_cost_center",
-				args: {
-					"expense_claim_type": expense.expense_type,
-					"company": frm.doc.company
-				},
-				callback: function(r) {
-					if (r.message) {
-						expense.default_account = r.message.account;
-						expense.cost_center = r.message.cost_center;
-					}
-				}
-			});
-		}
-	},
-});
-
-frappe.ui.form.on('Expense Claim Detail', {
-	expense_type: function(frm, cdt, cdn) {
-		var d = locals[cdt][cdn];
-		if (!frm.doc.company) {
-			d.expense_type = "";
-			frappe.msgprint(__("Please set the Company"));
-			this.frm.refresh_fields();
-			return;
-		}
-
-		if(!d.expense_type) {
-			return;
-		}
-		return frappe.call({
-			method: "erpnext.hr.doctype.expense_claim.expense_claim.get_expense_claim_account_and_cost_center",
-			args: {
-				"expense_claim_type": d.expense_type,
-				"company": frm.doc.company
-			},
-			callback: function(r) {
-				if (r.message) {
-					d.default_account = r.message.account;
-					d.cost_center = r.message.cost_center;
-				}
-			}
-		});
-	}
-});
-
-cur_frm.add_fetch('employee', 'company', 'company');
-cur_frm.add_fetch('employee','employee_name','employee_name');
-cur_frm.add_fetch('expense_type','description','description');
-
-cur_frm.cscript.onload = function(doc) {
-	if (doc.__islocal) {
-		cur_frm.set_value("posting_date", frappe.datetime.get_today());
-		cur_frm.cscript.clear_sanctioned(doc);
-	}
-};
-
-cur_frm.cscript.clear_sanctioned = function(doc) {
-	var val = doc.expenses || [];
-	for(var i = 0; i<val.length; i++){
-		val[i].sanctioned_amount ='';
-	}
-
-	doc.total_sanctioned_amount = '';
-	refresh_many(['sanctioned_amount', 'total_sanctioned_amount']);
-};
-
-cur_frm.cscript.refresh = function(doc) {
-	cur_frm.cscript.set_help(doc);
-
-	if(!doc.__islocal) {
-
-		if (doc.docstatus===1) {
-			/* eslint-disable */
-			// no idea how `me` works here
-			var entry_doctype, entry_reference_doctype, entry_reference_name;
-			if(doc.__onload.make_payment_via_journal_entry){
-				entry_doctype = "Journal Entry";
-				entry_reference_doctype = "Journal Entry Account.reference_type";
-				entry_reference_name = "Journal Entry.reference_name";
-			} else {
-				entry_doctype = "Payment Entry";
-				entry_reference_doctype = "Payment Entry Reference.reference_doctype";
-				entry_reference_name = "Payment Entry Reference.reference_name";
-			}
-
-			if (cint(doc.total_amount_reimbursed) > 0 && frappe.model.can_read(entry_doctype)) {
-				cur_frm.add_custom_button(__('Bank Entries'), function() {
-					frappe.route_options = {
-						party_type: "Employee",
-						party: doc.employee,
-						company: doc.company
-					};
-					frappe.set_route("List", entry_doctype);
-				}, __("View"));
-			}
-			/* eslint-enable */
-		}
-	}
-};
-
-cur_frm.cscript.set_help = function(doc) {
-	cur_frm.set_intro("");
-	if(doc.__islocal && !in_list(frappe.user_roles, "HR User")) {
-		cur_frm.set_intro(__("Fill the form and save it"));
-	}
-};
-
-cur_frm.cscript.validate = function(doc) {
-	cur_frm.cscript.calculate_total(doc);
-};
-
-cur_frm.cscript.calculate_total = function(doc){
-	doc.total_claimed_amount = 0;
-	doc.total_sanctioned_amount = 0;
-	$.each((doc.expenses || []), function(i, d) {
-		doc.total_claimed_amount += d.amount;
-		doc.total_sanctioned_amount += d.sanctioned_amount;
-	});
-};
-
-cur_frm.cscript.calculate_total_amount = function(doc,cdt,cdn){
-	cur_frm.cscript.calculate_total(doc,cdt,cdn);
-};
-
-cur_frm.fields_dict['cost_center'].get_query = function(doc) {
-	return {
-		filters: {
-			"company": doc.company
-		}
-	}
-};
-
-erpnext.expense_claim = {
-	set_title: function(frm) {
-		if (!frm.doc.task) {
-			frm.set_value("title", frm.doc.employee_name);
-		}
-		else {
-			frm.set_value("title", frm.doc.employee_name + " for "+ frm.doc.task);
-		}
-	}
-};
-
-frappe.ui.form.on("Expense Claim", {
-	setup: function(frm) {
-		frm.add_fetch("company", "cost_center", "cost_center");
-		frm.add_fetch("company", "default_expense_claim_payable_account", "payable_account");
-
-		frm.set_query("employee_advance", "advances", function() {
-			return {
-				filters: [
-					['docstatus', '=', 1],
-					['employee', '=', frm.doc.employee],
-					['paid_amount', '>', 0],
-					['status', 'not in', ['Claimed', 'Returned', 'Partly Claimed and Returned']]
-				]
-			};
-		});
-
-		frm.set_query("expense_approver", function() {
-			return {
-				query: "erpnext.hr.doctype.department_approver.department_approver.get_approvers",
-				filters: {
-					employee: frm.doc.employee,
-					doctype: frm.doc.doctype
-				}
-			};
-		});
-
-		frm.set_query("account_head", "taxes", function() {
-			return {
-				filters: [
-					['company', '=', frm.doc.company],
-					['account_type', 'in', ["Tax", "Chargeable", "Income Account", "Expenses Included In Valuation"]]
-				]
-			};
-		});
-
-		frm.set_query("payable_account", function() {
-			return {
-				filters: {
-					"report_type": "Balance Sheet",
-					"account_type": "Payable",
-					"company": frm.doc.company,
-					"is_group": 0
-				}
-			};
-		});
-
-		frm.set_query("task", function() {
-			return {
-				filters: {
-					'project': frm.doc.project
-				}
-			};
-		});
-
-		frm.set_query("employee", function() {
-			return {
-				query: "erpnext.controllers.queries.employee_query"
-			};
-		});
-	},
-
-	onload: function(frm) {
-		if (frm.doc.docstatus == 0) {
-			return frappe.call({
-				method: "erpnext.hr.doctype.leave_application.leave_application.get_mandatory_approval",
-				args: {
-					doctype: frm.doc.doctype,
-				},
-				callback: function(r) {
-					if (!r.exc && r.message) {
-						frm.toggle_reqd("expense_approver", true);
-					}
-				}
-			});
-		}
-	},
-
-	refresh: function(frm) {
-		frm.trigger("toggle_fields");
-
-		if(frm.doc.docstatus > 0 && frm.doc.approval_status !== "Rejected") {
-			frm.add_custom_button(__('Accounting Ledger'), function() {
-				frappe.route_options = {
-					voucher_no: frm.doc.name,
-					company: frm.doc.company,
-					from_date: frm.doc.posting_date,
-					to_date: moment(frm.doc.modified).format('YYYY-MM-DD'),
-					group_by: '',
-					show_cancelled_entries: frm.doc.docstatus === 2
-				};
-				frappe.set_route("query-report", "General Ledger");
-			}, __("View"));
-		}
-
-		if (frm.doc.docstatus===1 && !cint(frm.doc.is_paid) && cint(frm.doc.grand_total) > 0
-				&& (cint(frm.doc.total_amount_reimbursed) < cint(frm.doc.total_sanctioned_amount))
-				&& frappe.model.can_create("Payment Entry")) {
-			frm.add_custom_button(__('Payment'),
-				function() { frm.events.make_payment_entry(frm); }, __('Create'));
-		}
-	},
-
-	calculate_grand_total: function(frm) {
-		var grand_total = flt(frm.doc.total_sanctioned_amount) + flt(frm.doc.total_taxes_and_charges) - flt(frm.doc.total_advance_amount);
-		frm.set_value("grand_total", grand_total);
-		frm.refresh_fields();
-	},
-
-	grand_total: function(frm) {
-		frm.trigger("update_employee_advance_claimed_amount");
-	},
-
-	update_employee_advance_claimed_amount: function(frm) {
-		let amount_to_be_allocated = frm.doc.grand_total;
-		$.each(frm.doc.advances || [], function(i, advance){
-			if (amount_to_be_allocated >= advance.unclaimed_amount){
-				advance.allocated_amount = frm.doc.advances[i].unclaimed_amount;
-				amount_to_be_allocated -= advance.allocated_amount;
-			} else {
-				advance.allocated_amount = amount_to_be_allocated;
-				amount_to_be_allocated = 0;
-			}
-			frm.refresh_field("advances");
-		});
-	},
-
-	make_payment_entry: function(frm) {
-		var method = "erpnext.accounts.doctype.payment_entry.payment_entry.get_payment_entry";
-		if(frm.doc.__onload && frm.doc.__onload.make_payment_via_journal_entry) {
-			method = "erpnext.hr.doctype.expense_claim.expense_claim.make_bank_entry";
-		}
-		return frappe.call({
-			method: method,
-			args: {
-				"dt": frm.doc.doctype,
-				"dn": frm.doc.name
-			},
-			callback: function(r) {
-				var doclist = frappe.model.sync(r.message);
-				frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
-			}
-		});
-	},
-
-	is_paid: function(frm) {
-		frm.trigger("toggle_fields");
-	},
-
-	toggle_fields: function(frm) {
-		frm.toggle_reqd("mode_of_payment", frm.doc.is_paid);
-	},
-
-	employee_name: function(frm) {
-		erpnext.expense_claim.set_title(frm);
-	},
-
-	task: function(frm) {
-		erpnext.expense_claim.set_title(frm);
-	},
-
-	employee: function(frm) {
-		frm.events.get_advances(frm);
-	},
-
-	cost_center: function(frm) {
-		frm.events.set_child_cost_center(frm);
-	},
-
-	validate: function(frm) {
-		frm.events.set_child_cost_center(frm);
-	},
-
-	set_child_cost_center: function(frm){
-		(frm.doc.expenses || []).forEach(function(d) {
-			if (!d.cost_center){
-				d.cost_center = frm.doc.cost_center;
-			}
-		});
-	},
-	get_taxes: function(frm) {
-		if(frm.doc.taxes) {
-			frappe.call({
-				method: "calculate_taxes",
-				doc: frm.doc,
-				callback: () => {
-					refresh_field("taxes");
-					frm.trigger("update_employee_advance_claimed_amount");
-				}
-			});
-		}
-	},
-
-	get_advances: function(frm) {
-		frappe.model.clear_table(frm.doc, "advances");
-		if (frm.doc.employee) {
-			return frappe.call({
-				method: "erpnext.hr.doctype.expense_claim.expense_claim.get_advances",
-				args: {
-					employee: frm.doc.employee
-				},
-				callback: function(r, rt) {
-
-					if(r.message) {
-						$.each(r.message, function(i, d) {
-							var row = frappe.model.add_child(frm.doc, "Expense Claim Advance", "advances");
-							row.employee_advance = d.name;
-							row.posting_date = d.posting_date;
-							row.advance_account = d.advance_account;
-							row.advance_paid = d.paid_amount;
-							row.unclaimed_amount = flt(d.paid_amount) - flt(d.claimed_amount);
-							row.allocated_amount = 0;
-						});
-						refresh_field("advances");
-					}
-				}
-			});
-		}
-	}
-});
-
-frappe.ui.form.on("Expense Claim Detail", {
-	amount: function(frm, cdt, cdn) {
-		var child = locals[cdt][cdn];
-		frappe.model.set_value(cdt, cdn, 'sanctioned_amount', child.amount);
-	},
-
-	sanctioned_amount: function(frm, cdt, cdn) {
-		cur_frm.cscript.calculate_total(frm.doc, cdt, cdn);
-		frm.trigger("get_taxes");
-		frm.trigger("calculate_grand_total");
-	},
-
-	cost_center: function(frm, cdt, cdn) {
-		erpnext.utils.copy_value_in_all_rows(frm.doc, cdt, cdn, "expenses", "cost_center");
-	}
-});
-
-frappe.ui.form.on("Expense Claim Advance", {
-	employee_advance: function(frm, cdt, cdn) {
-		var child = locals[cdt][cdn];
-		if(!frm.doc.employee){
-			frappe.msgprint(__('Select an employee to get the employee advance.'));
-			frm.doc.advances = [];
-			refresh_field("advances");
-		}
-		else {
-			return frappe.call({
-				method: "erpnext.hr.doctype.expense_claim.expense_claim.get_advances",
-				args: {
-					employee: frm.doc.employee,
-					advance_id: child.employee_advance
-				},
-				callback: function(r, rt) {
-					if(r.message) {
-						child.employee_advance = r.message[0].name;
-						child.posting_date = r.message[0].posting_date;
-						child.advance_account = r.message[0].advance_account;
-						child.advance_paid = r.message[0].paid_amount;
-						child.unclaimed_amount = flt(r.message[0].paid_amount) - flt(r.message[0].claimed_amount);
-						child.allocated_amount = flt(r.message[0].paid_amount) - flt(r.message[0].claimed_amount);
-						frm.trigger('calculate_grand_total');
-						refresh_field("advances");
-					}
-				}
-			});
-		}
-	}
-});
-
-frappe.ui.form.on("Expense Taxes and Charges", {
-	account_head: function(frm, cdt, cdn) {
-		var child = locals[cdt][cdn];
-		if(child.account_head && !child.description) {
-			// set description from account head
-			child.description = child.account_head.split(' - ').slice(0, -1).join(' - ');
-			refresh_field("taxes");
-		}
-	},
-
-	calculate_total_tax: function(frm, cdt, cdn) {
-		var child = locals[cdt][cdn];
-		child.total = flt(frm.doc.total_sanctioned_amount) + flt(child.tax_amount);
-		frm.trigger("calculate_tax_amount", cdt, cdn);
-	},
-
-	calculate_tax_amount: function(frm) {
-		frm.doc.total_taxes_and_charges = 0;
-		(frm.doc.taxes || []).forEach(function(d) {
-			frm.doc.total_taxes_and_charges += d.tax_amount;
-		});
-		frm.trigger("calculate_grand_total");
-	},
-
-	rate: function(frm, cdt, cdn) {
-		var child = locals[cdt][cdn];
-		if(!child.amount) {
-			child.tax_amount = flt(frm.doc.total_sanctioned_amount) * (flt(child.rate)/100);
-		}
-		frm.trigger("calculate_total_tax", cdt, cdn);
-	},
-
-	tax_amount: function(frm, cdt, cdn) {
-		frm.trigger("calculate_total_tax", cdt, cdn);
-	}
-});
diff --git a/erpnext/hr/doctype/expense_claim/expense_claim.json b/erpnext/hr/doctype/expense_claim/expense_claim.json
deleted file mode 100644
index 45b78bf..0000000
--- a/erpnext/hr/doctype/expense_claim/expense_claim.json
+++ /dev/null
@@ -1,450 +0,0 @@
-{
- "actions": [],
- "allow_import": 1,
- "autoname": "naming_series:",
- "creation": "2013-01-10 16:34:14",
- "doctype": "DocType",
- "document_type": "Setup",
- "engine": "InnoDB",
- "field_order": [
-  "naming_series",
-  "employee",
-  "employee_name",
-  "department",
-  "column_break_5",
-  "expense_approver",
-  "approval_status",
-  "delivery_trip",
-  "is_paid",
-  "expense_details",
-  "expenses",
-  "sb1",
-  "taxes",
-  "transactions_section",
-  "total_sanctioned_amount",
-  "total_taxes_and_charges",
-  "total_advance_amount",
-  "column_break_17",
-  "grand_total",
-  "total_claimed_amount",
-  "total_amount_reimbursed",
-  "section_break_16",
-  "posting_date",
-  "vehicle_log",
-  "task",
-  "cb1",
-  "remark",
-  "title",
-  "email_id",
-  "accounting_details",
-  "company",
-  "mode_of_payment",
-  "clearance_date",
-  "column_break_24",
-  "payable_account",
-  "accounting_dimensions_section",
-  "project",
-  "dimension_col_break",
-  "cost_center",
-  "more_details",
-  "status",
-  "amended_from",
-  "advance_payments",
-  "advances"
- ],
- "fields": [
-  {
-   "fieldname": "naming_series",
-   "fieldtype": "Select",
-   "label": "Series",
-   "no_copy": 1,
-   "options": "HR-EXP-.YYYY.-",
-   "print_hide": 1,
-   "reqd": 1,
-   "set_only_once": 1
-  },
-  {
-   "fieldname": "employee",
-   "fieldtype": "Link",
-   "in_global_search": 1,
-   "in_standard_filter": 1,
-   "label": "From Employee",
-   "oldfieldname": "employee",
-   "oldfieldtype": "Link",
-   "options": "Employee",
-   "reqd": 1,
-   "search_index": 1
-  },
-  {
-   "fetch_from": "employee.employee_name",
-   "fieldname": "employee_name",
-   "fieldtype": "Data",
-   "in_global_search": 1,
-   "label": "Employee Name",
-   "oldfieldname": "employee_name",
-   "oldfieldtype": "Data",
-   "read_only": 1,
-   "width": "150px"
-  },
-  {
-   "fetch_from": "employee.department",
-   "fieldname": "department",
-   "fieldtype": "Link",
-   "label": "Department",
-   "options": "Department",
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break_5",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "expense_approver",
-   "fieldtype": "Link",
-   "label": "Expense Approver",
-   "options": "User"
-  },
-  {
-   "default": "Draft",
-   "fieldname": "approval_status",
-   "fieldtype": "Select",
-   "label": "Approval Status",
-   "no_copy": 1,
-   "options": "Draft\nApproved\nRejected",
-   "search_index": 1
-  },
-  {
-   "fieldname": "total_claimed_amount",
-   "fieldtype": "Currency",
-   "in_list_view": 1,
-   "label": "Total Claimed Amount",
-   "no_copy": 1,
-   "oldfieldname": "total_claimed_amount",
-   "oldfieldtype": "Currency",
-   "options": "Company:company:default_currency",
-   "read_only": 1,
-   "width": "160px"
-  },
-  {
-   "fieldname": "total_sanctioned_amount",
-   "fieldtype": "Currency",
-   "label": "Total Sanctioned Amount",
-   "no_copy": 1,
-   "oldfieldname": "total_sanctioned_amount",
-   "oldfieldtype": "Currency",
-   "options": "Company:company:default_currency",
-   "read_only": 1,
-   "width": "160px"
-  },
-  {
-   "default": "0",
-   "depends_on": "eval:(doc.docstatus==0 || doc.is_paid)",
-   "fieldname": "is_paid",
-   "fieldtype": "Check",
-   "label": "Is Paid"
-  },
-  {
-   "fieldname": "expense_details",
-   "fieldtype": "Section Break",
-   "oldfieldtype": "Section Break"
-  },
-  {
-   "fieldname": "expenses",
-   "fieldtype": "Table",
-   "label": "Expenses",
-   "oldfieldname": "expense_voucher_details",
-   "oldfieldtype": "Table",
-   "options": "Expense Claim Detail",
-   "reqd": 1
-  },
-  {
-   "fieldname": "sb1",
-   "fieldtype": "Section Break",
-   "options": "Simple"
-  },
-  {
-   "default": "Today",
-   "fieldname": "posting_date",
-   "fieldtype": "Date",
-   "in_standard_filter": 1,
-   "label": "Posting Date",
-   "oldfieldname": "posting_date",
-   "oldfieldtype": "Date",
-   "reqd": 1
-  },
-  {
-   "fieldname": "vehicle_log",
-   "fieldtype": "Link",
-   "label": "Vehicle Log",
-   "options": "Vehicle Log",
-   "read_only": 1
-  },
-  {
-   "fieldname": "project",
-   "fieldtype": "Link",
-   "label": "Project",
-   "options": "Project"
-  },
-  {
-   "fieldname": "task",
-   "fieldtype": "Link",
-   "label": "Task",
-   "options": "Task",
-   "remember_last_selected_value": 1
-  },
-  {
-   "fieldname": "cb1",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "total_amount_reimbursed",
-   "fieldtype": "Currency",
-   "in_list_view": 1,
-   "label": "Total Amount Reimbursed",
-   "no_copy": 1,
-   "options": "Company:company:default_currency",
-   "read_only": 1
-  },
-  {
-   "fieldname": "remark",
-   "fieldtype": "Small Text",
-   "label": "Remark",
-   "no_copy": 1,
-   "oldfieldname": "remark",
-   "oldfieldtype": "Small Text"
-  },
-  {
-   "allow_on_submit": 1,
-   "default": "{employee_name}",
-   "fieldname": "title",
-   "fieldtype": "Data",
-   "hidden": 1,
-   "label": "Title",
-   "no_copy": 1
-  },
-  {
-   "fieldname": "email_id",
-   "fieldtype": "Data",
-   "hidden": 1,
-   "label": "Employees Email Id",
-   "oldfieldname": "email_id",
-   "oldfieldtype": "Data",
-   "print_hide": 1
-  },
-  {
-   "fieldname": "accounting_details",
-   "fieldtype": "Section Break",
-   "label": "Accounting Details"
-  },
-  {
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "in_standard_filter": 1,
-   "label": "Company",
-   "oldfieldname": "company",
-   "oldfieldtype": "Link",
-   "options": "Company",
-   "remember_last_selected_value": 1,
-   "reqd": 1
-  },
-  {
-   "depends_on": "is_paid",
-   "fieldname": "mode_of_payment",
-   "fieldtype": "Link",
-   "label": "Mode of Payment",
-   "options": "Mode of Payment"
-  },
-  {
-   "fieldname": "clearance_date",
-   "fieldtype": "Date",
-   "label": "Clearance Date"
-  },
-  {
-   "fieldname": "column_break_24",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "payable_account",
-   "fieldtype": "Link",
-   "label": "Payable Account",
-   "options": "Account",
-   "reqd": 1
-  },
-  {
-   "fieldname": "cost_center",
-   "fieldtype": "Link",
-   "label": "Cost Center",
-   "options": "Cost Center"
-  },
-  {
-   "collapsible": 1,
-   "fieldname": "more_details",
-   "fieldtype": "Section Break",
-   "label": "More Details"
-  },
-  {
-   "default": "Draft",
-   "fieldname": "status",
-   "fieldtype": "Select",
-   "in_list_view": 1,
-   "label": "Status",
-   "no_copy": 1,
-   "options": "Draft\nPaid\nUnpaid\nRejected\nSubmitted\nCancelled",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "ignore_user_permissions": 1,
-   "label": "Amended From",
-   "no_copy": 1,
-   "oldfieldname": "amended_from",
-   "oldfieldtype": "Data",
-   "options": "Expense Claim",
-   "print_hide": 1,
-   "read_only": 1,
-   "report_hide": 1,
-   "width": "160px"
-  },
-  {
-   "fieldname": "advance_payments",
-   "fieldtype": "Section Break",
-   "label": "Advance Payments"
-  },
-  {
-   "fieldname": "advances",
-   "fieldtype": "Table",
-   "label": "Advances",
-   "options": "Expense Claim Advance"
-  },
-  {
-   "fieldname": "total_advance_amount",
-   "fieldtype": "Currency",
-   "label": "Total Advance Amount",
-   "options": "Company:company:default_currency",
-   "read_only": 1
-  },
-  {
-   "fieldname": "accounting_dimensions_section",
-   "fieldtype": "Section Break",
-   "label": "Accounting Dimensions"
-  },
-  {
-   "fieldname": "dimension_col_break",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "taxes",
-   "fieldtype": "Table",
-   "label": "Expense Taxes and Charges",
-   "options": "Expense Taxes and Charges"
-  },
-  {
-   "fieldname": "section_break_16",
-   "fieldtype": "Section Break"
-  },
-  {
-   "fieldname": "transactions_section",
-   "fieldtype": "Section Break"
-  },
-  {
-   "fieldname": "grand_total",
-   "fieldtype": "Currency",
-   "in_list_view": 1,
-   "label": "Grand Total",
-   "options": "Company:company:default_currency",
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break_17",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "total_taxes_and_charges",
-   "fieldtype": "Currency",
-   "label": "Total Taxes and Charges",
-   "options": "Company:company:default_currency",
-   "read_only": 1
-  },
-  {
-   "depends_on": "eval: doc.delivery_trip",
-   "fieldname": "delivery_trip",
-   "fieldtype": "Link",
-   "label": "Delivery Trip",
-   "options": "Delivery Trip"
-  }
- ],
- "icon": "fa fa-money",
- "idx": 1,
- "is_submittable": 1,
- "links": [],
- "modified": "2021-11-22 16:26:57.787838",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Expense Claim",
- "name_case": "Title Case",
- "naming_rule": "By \"Naming Series\" field",
- "owner": "Administrator",
- "permissions": [
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "email": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "Employee",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "Expense Approver",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  }
- ],
- "search_fields": "employee,employee_name",
- "show_name_in_global_search": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "timeline_field": "employee",
- "title_field": "title"
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/expense_claim/expense_claim.py b/erpnext/hr/doctype/expense_claim/expense_claim.py
deleted file mode 100644
index 589763c..0000000
--- a/erpnext/hr/doctype/expense_claim/expense_claim.py
+++ /dev/null
@@ -1,464 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-
-import frappe
-from frappe import _
-from frappe.utils import cstr, flt, get_link_to_form
-
-import erpnext
-from erpnext.accounts.doctype.sales_invoice.sales_invoice import get_bank_cash_account
-from erpnext.accounts.general_ledger import make_gl_entries
-from erpnext.controllers.accounts_controller import AccountsController
-from erpnext.hr.utils import set_employee_name, share_doc_with_approver, validate_active_employee
-
-
-class InvalidExpenseApproverError(frappe.ValidationError):
-	pass
-
-
-class ExpenseApproverIdentityError(frappe.ValidationError):
-	pass
-
-
-class ExpenseClaim(AccountsController):
-	def onload(self):
-		self.get("__onload").make_payment_via_journal_entry = frappe.db.get_single_value(
-			"Accounts Settings", "make_payment_via_journal_entry"
-		)
-
-	def validate(self):
-		validate_active_employee(self.employee)
-		set_employee_name(self)
-		self.validate_sanctioned_amount()
-		self.calculate_total_amount()
-		self.validate_advances()
-		self.set_expense_account(validate=True)
-		self.set_payable_account()
-		self.set_cost_center()
-		self.calculate_taxes()
-		self.set_status()
-		if self.task and not self.project:
-			self.project = frappe.db.get_value("Task", self.task, "project")
-
-	def set_status(self, update=False):
-		status = {"0": "Draft", "1": "Submitted", "2": "Cancelled"}[cstr(self.docstatus or 0)]
-
-		precision = self.precision("grand_total")
-
-		if (
-			# set as paid
-			self.is_paid
-			or (
-				flt(self.total_sanctioned_amount > 0)
-				and (
-					# grand total is reimbursed
-					(
-						self.docstatus == 1
-						and flt(self.grand_total, precision) == flt(self.total_amount_reimbursed, precision)
-					)
-					# grand total (to be paid) is 0 since linked advances already cover the claimed amount
-					or (flt(self.grand_total, precision) == 0)
-				)
-			)
-		) and self.approval_status == "Approved":
-			status = "Paid"
-		elif (
-			flt(self.total_sanctioned_amount) > 0
-			and self.docstatus == 1
-			and self.approval_status == "Approved"
-		):
-			status = "Unpaid"
-		elif self.docstatus == 1 and self.approval_status == "Rejected":
-			status = "Rejected"
-
-		if update:
-			self.db_set("status", status)
-		else:
-			self.status = status
-
-	def on_update(self):
-		share_doc_with_approver(self, self.expense_approver)
-
-	def set_payable_account(self):
-		if not self.payable_account and not self.is_paid:
-			self.payable_account = frappe.get_cached_value(
-				"Company", self.company, "default_expense_claim_payable_account"
-			)
-
-	def set_cost_center(self):
-		if not self.cost_center:
-			self.cost_center = frappe.get_cached_value("Company", self.company, "cost_center")
-
-	def on_submit(self):
-		if self.approval_status == "Draft":
-			frappe.throw(_("""Approval Status must be 'Approved' or 'Rejected'"""))
-
-		self.update_task_and_project()
-		self.make_gl_entries()
-
-		if self.is_paid:
-			update_reimbursed_amount(self, self.grand_total)
-
-		self.set_status(update=True)
-		self.update_claimed_amount_in_employee_advance()
-
-	def on_cancel(self):
-		self.update_task_and_project()
-		self.ignore_linked_doctypes = ("GL Entry", "Stock Ledger Entry", "Payment Ledger Entry")
-		if self.payable_account:
-			self.make_gl_entries(cancel=True)
-
-		if self.is_paid:
-			update_reimbursed_amount(self, -1 * self.grand_total)
-
-		self.update_claimed_amount_in_employee_advance()
-
-	def update_claimed_amount_in_employee_advance(self):
-		for d in self.get("advances"):
-			frappe.get_doc("Employee Advance", d.employee_advance).update_claimed_amount()
-
-	def update_task_and_project(self):
-		if self.task:
-			self.update_task()
-		elif self.project:
-			frappe.get_doc("Project", self.project).update_project()
-
-	def make_gl_entries(self, cancel=False):
-		if flt(self.total_sanctioned_amount) > 0:
-			gl_entries = self.get_gl_entries()
-			make_gl_entries(gl_entries, cancel)
-
-	def get_gl_entries(self):
-		gl_entry = []
-		self.validate_account_details()
-
-		# payable entry
-		if self.grand_total:
-			gl_entry.append(
-				self.get_gl_dict(
-					{
-						"account": self.payable_account,
-						"credit": self.grand_total,
-						"credit_in_account_currency": self.grand_total,
-						"against": ",".join([d.default_account for d in self.expenses]),
-						"party_type": "Employee",
-						"party": self.employee,
-						"against_voucher_type": self.doctype,
-						"against_voucher": self.name,
-						"cost_center": self.cost_center,
-					},
-					item=self,
-				)
-			)
-
-		# expense entries
-		for data in self.expenses:
-			gl_entry.append(
-				self.get_gl_dict(
-					{
-						"account": data.default_account,
-						"debit": data.sanctioned_amount,
-						"debit_in_account_currency": data.sanctioned_amount,
-						"against": self.employee,
-						"cost_center": data.cost_center or self.cost_center,
-					},
-					item=data,
-				)
-			)
-
-		for data in self.advances:
-			gl_entry.append(
-				self.get_gl_dict(
-					{
-						"account": data.advance_account,
-						"credit": data.allocated_amount,
-						"credit_in_account_currency": data.allocated_amount,
-						"against": ",".join([d.default_account for d in self.expenses]),
-						"party_type": "Employee",
-						"party": self.employee,
-						"against_voucher_type": "Employee Advance",
-						"against_voucher": data.employee_advance,
-					}
-				)
-			)
-
-		self.add_tax_gl_entries(gl_entry)
-
-		if self.is_paid and self.grand_total:
-			# payment entry
-			payment_account = get_bank_cash_account(self.mode_of_payment, self.company).get("account")
-			gl_entry.append(
-				self.get_gl_dict(
-					{
-						"account": payment_account,
-						"credit": self.grand_total,
-						"credit_in_account_currency": self.grand_total,
-						"against": self.employee,
-					},
-					item=self,
-				)
-			)
-
-			gl_entry.append(
-				self.get_gl_dict(
-					{
-						"account": self.payable_account,
-						"party_type": "Employee",
-						"party": self.employee,
-						"against": payment_account,
-						"debit": self.grand_total,
-						"debit_in_account_currency": self.grand_total,
-						"against_voucher": self.name,
-						"against_voucher_type": self.doctype,
-					},
-					item=self,
-				)
-			)
-
-		return gl_entry
-
-	def add_tax_gl_entries(self, gl_entries):
-		# tax table gl entries
-		for tax in self.get("taxes"):
-			gl_entries.append(
-				self.get_gl_dict(
-					{
-						"account": tax.account_head,
-						"debit": tax.tax_amount,
-						"debit_in_account_currency": tax.tax_amount,
-						"against": self.employee,
-						"cost_center": self.cost_center,
-						"against_voucher_type": self.doctype,
-						"against_voucher": self.name,
-					},
-					item=tax,
-				)
-			)
-
-	def validate_account_details(self):
-		for data in self.expenses:
-			if not data.cost_center:
-				frappe.throw(
-					_("Row {0}: {1} is required in the expenses table to book an expense claim.").format(
-						data.idx, frappe.bold("Cost Center")
-					)
-				)
-
-		if self.is_paid:
-			if not self.mode_of_payment:
-				frappe.throw(_("Mode of payment is required to make a payment").format(self.employee))
-
-	def calculate_total_amount(self):
-		self.total_claimed_amount = 0
-		self.total_sanctioned_amount = 0
-		for d in self.get("expenses"):
-			if self.approval_status == "Rejected":
-				d.sanctioned_amount = 0.0
-
-			self.total_claimed_amount += flt(d.amount)
-			self.total_sanctioned_amount += flt(d.sanctioned_amount)
-
-	@frappe.whitelist()
-	def calculate_taxes(self):
-		self.total_taxes_and_charges = 0
-		for tax in self.taxes:
-			if tax.rate:
-				tax.tax_amount = flt(self.total_sanctioned_amount) * flt(tax.rate / 100)
-
-			tax.total = flt(tax.tax_amount) + flt(self.total_sanctioned_amount)
-			self.total_taxes_and_charges += flt(tax.tax_amount)
-
-		self.grand_total = (
-			flt(self.total_sanctioned_amount)
-			+ flt(self.total_taxes_and_charges)
-			- flt(self.total_advance_amount)
-		)
-
-	def update_task(self):
-		task = frappe.get_doc("Task", self.task)
-		task.update_total_expense_claim()
-		task.save()
-
-	def validate_advances(self):
-		self.total_advance_amount = 0
-		for d in self.get("advances"):
-			ref_doc = frappe.db.get_value(
-				"Employee Advance",
-				d.employee_advance,
-				["posting_date", "paid_amount", "claimed_amount", "advance_account"],
-				as_dict=1,
-			)
-			d.posting_date = ref_doc.posting_date
-			d.advance_account = ref_doc.advance_account
-			d.advance_paid = ref_doc.paid_amount
-			d.unclaimed_amount = flt(ref_doc.paid_amount) - flt(ref_doc.claimed_amount)
-
-			if d.allocated_amount and flt(d.allocated_amount) > flt(d.unclaimed_amount):
-				frappe.throw(
-					_("Row {0}# Allocated amount {1} cannot be greater than unclaimed amount {2}").format(
-						d.idx, d.allocated_amount, d.unclaimed_amount
-					)
-				)
-
-			self.total_advance_amount += flt(d.allocated_amount)
-
-		if self.total_advance_amount:
-			precision = self.precision("total_advance_amount")
-			if flt(self.total_advance_amount, precision) > flt(self.total_claimed_amount, precision):
-				frappe.throw(_("Total advance amount cannot be greater than total claimed amount"))
-
-			if self.total_sanctioned_amount and flt(self.total_advance_amount, precision) > flt(
-				self.total_sanctioned_amount, precision
-			):
-				frappe.throw(_("Total advance amount cannot be greater than total sanctioned amount"))
-
-	def validate_sanctioned_amount(self):
-		for d in self.get("expenses"):
-			if flt(d.sanctioned_amount) > flt(d.amount):
-				frappe.throw(
-					_("Sanctioned Amount cannot be greater than Claim Amount in Row {0}.").format(d.idx)
-				)
-
-	def set_expense_account(self, validate=False):
-		for expense in self.expenses:
-			if not expense.default_account or not validate:
-				expense.default_account = get_expense_claim_account(expense.expense_type, self.company)[
-					"account"
-				]
-
-
-def update_reimbursed_amount(doc, amount):
-
-	doc.total_amount_reimbursed += amount
-	frappe.db.set_value(
-		"Expense Claim", doc.name, "total_amount_reimbursed", doc.total_amount_reimbursed
-	)
-
-	doc.set_status()
-	frappe.db.set_value("Expense Claim", doc.name, "status", doc.status)
-
-
-@frappe.whitelist()
-def make_bank_entry(dt, dn):
-	from erpnext.accounts.doctype.journal_entry.journal_entry import get_default_bank_cash_account
-
-	expense_claim = frappe.get_doc(dt, dn)
-	default_bank_cash_account = get_default_bank_cash_account(expense_claim.company, "Bank")
-	if not default_bank_cash_account:
-		default_bank_cash_account = get_default_bank_cash_account(expense_claim.company, "Cash")
-
-	payable_amount = (
-		flt(expense_claim.total_sanctioned_amount)
-		- flt(expense_claim.total_amount_reimbursed)
-		- flt(expense_claim.total_advance_amount)
-	)
-
-	je = frappe.new_doc("Journal Entry")
-	je.voucher_type = "Bank Entry"
-	je.company = expense_claim.company
-	je.remark = "Payment against Expense Claim: " + dn
-
-	je.append(
-		"accounts",
-		{
-			"account": expense_claim.payable_account,
-			"debit_in_account_currency": payable_amount,
-			"reference_type": "Expense Claim",
-			"party_type": "Employee",
-			"party": expense_claim.employee,
-			"cost_center": erpnext.get_default_cost_center(expense_claim.company),
-			"reference_name": expense_claim.name,
-		},
-	)
-
-	je.append(
-		"accounts",
-		{
-			"account": default_bank_cash_account.account,
-			"credit_in_account_currency": payable_amount,
-			"reference_type": "Expense Claim",
-			"reference_name": expense_claim.name,
-			"balance": default_bank_cash_account.balance,
-			"account_currency": default_bank_cash_account.account_currency,
-			"cost_center": erpnext.get_default_cost_center(expense_claim.company),
-			"account_type": default_bank_cash_account.account_type,
-		},
-	)
-
-	return je.as_dict()
-
-
-@frappe.whitelist()
-def get_expense_claim_account_and_cost_center(expense_claim_type, company):
-	data = get_expense_claim_account(expense_claim_type, company)
-	cost_center = erpnext.get_default_cost_center(company)
-
-	return {"account": data.get("account"), "cost_center": cost_center}
-
-
-@frappe.whitelist()
-def get_expense_claim_account(expense_claim_type, company):
-	account = frappe.db.get_value(
-		"Expense Claim Account", {"parent": expense_claim_type, "company": company}, "default_account"
-	)
-	if not account:
-		frappe.throw(
-			_("Set the default account for the {0} {1}").format(
-				frappe.bold("Expense Claim Type"), get_link_to_form("Expense Claim Type", expense_claim_type)
-			)
-		)
-
-	return {"account": account}
-
-
-@frappe.whitelist()
-def get_advances(employee, advance_id=None):
-	advance = frappe.qb.DocType("Employee Advance")
-
-	query = frappe.qb.from_(advance).select(
-		advance.name,
-		advance.posting_date,
-		advance.paid_amount,
-		advance.claimed_amount,
-		advance.advance_account,
-	)
-
-	if not advance_id:
-		query = query.where(
-			(advance.docstatus == 1)
-			& (advance.employee == employee)
-			& (advance.paid_amount > 0)
-			& (advance.status.notin(["Claimed", "Returned", "Partly Claimed and Returned"]))
-		)
-	else:
-		query = query.where(advance.name == advance_id)
-
-	return query.run(as_dict=True)
-
-
-@frappe.whitelist()
-def get_expense_claim(
-	employee_name, company, employee_advance_name, posting_date, paid_amount, claimed_amount
-):
-	default_payable_account = frappe.get_cached_value("Company", company, "default_payable_account")
-	default_cost_center = frappe.get_cached_value("Company", company, "cost_center")
-
-	expense_claim = frappe.new_doc("Expense Claim")
-	expense_claim.company = company
-	expense_claim.employee = employee_name
-	expense_claim.payable_account = default_payable_account
-	expense_claim.cost_center = default_cost_center
-	expense_claim.is_paid = 1 if flt(paid_amount) else 0
-	expense_claim.append(
-		"advances",
-		{
-			"employee_advance": employee_advance_name,
-			"posting_date": posting_date,
-			"advance_paid": flt(paid_amount),
-			"unclaimed_amount": flt(paid_amount) - flt(claimed_amount),
-			"allocated_amount": flt(paid_amount) - flt(claimed_amount),
-		},
-	)
-
-	return expense_claim
diff --git a/erpnext/hr/doctype/expense_claim/expense_claim_dashboard.py b/erpnext/hr/doctype/expense_claim/expense_claim_dashboard.py
deleted file mode 100644
index 8b1acc6..0000000
--- a/erpnext/hr/doctype/expense_claim/expense_claim_dashboard.py
+++ /dev/null
@@ -1,12 +0,0 @@
-from frappe import _
-
-
-def get_data():
-	return {
-		"fieldname": "reference_name",
-		"internal_links": {"Employee Advance": ["advances", "employee_advance"]},
-		"transactions": [
-			{"label": _("Payment"), "items": ["Payment Entry", "Journal Entry"]},
-			{"label": _("Reference"), "items": ["Employee Advance"]},
-		],
-	}
diff --git a/erpnext/hr/doctype/expense_claim/expense_claim_list.js b/erpnext/hr/doctype/expense_claim/expense_claim_list.js
deleted file mode 100644
index 9bafc18..0000000
--- a/erpnext/hr/doctype/expense_claim/expense_claim_list.js
+++ /dev/null
@@ -1,12 +0,0 @@
-frappe.listview_settings['Expense Claim'] = {
-	add_fields: ["total_claimed_amount", "docstatus", "company"],
-	get_indicator: function(doc) {
-		if(doc.status == "Paid") {
-			return [__("Paid"), "green", "status,=,Paid"];
-		}else if(doc.status == "Unpaid") {
-			return [__("Unpaid"), "orange", "status,=,Unpaid"];
-		} else if(doc.status == "Rejected") {
-			return [__("Rejected"), "grey", "status,=,Rejected"];
-		}
-	}
-};
diff --git a/erpnext/hr/doctype/expense_claim/test_expense_claim.py b/erpnext/hr/doctype/expense_claim/test_expense_claim.py
deleted file mode 100644
index 9b3d53a..0000000
--- a/erpnext/hr/doctype/expense_claim/test_expense_claim.py
+++ /dev/null
@@ -1,372 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and Contributors
-# See license.txt
-
-import unittest
-
-import frappe
-from frappe.utils import flt, nowdate, random_string
-
-from erpnext.accounts.doctype.account.test_account import create_account
-from erpnext.hr.doctype.employee.test_employee import make_employee
-from erpnext.hr.doctype.expense_claim.expense_claim import make_bank_entry
-
-test_dependencies = ["Employee"]
-company_name = "_Test Company 3"
-
-
-class TestExpenseClaim(unittest.TestCase):
-	def tearDown(self):
-		frappe.db.rollback()
-
-	def test_total_expense_claim_for_project(self):
-		frappe.db.sql("""delete from `tabTask`""")
-		frappe.db.sql("""delete from `tabProject`""")
-		frappe.db.sql("update `tabExpense Claim` set project = '', task = ''")
-
-		project = frappe.get_doc({"project_name": "_Test Project 1", "doctype": "Project"})
-		project.save()
-
-		task = frappe.get_doc(
-			dict(doctype="Task", subject="_Test Project Task 1", status="Open", project=project.name)
-		).insert()
-
-		task_name = task.name
-		payable_account = get_payable_account(company_name)
-
-		make_expense_claim(
-			payable_account, 300, 200, company_name, "Travel Expenses - _TC3", project.name, task_name
-		)
-
-		self.assertEqual(frappe.db.get_value("Task", task_name, "total_expense_claim"), 200)
-		self.assertEqual(frappe.db.get_value("Project", project.name, "total_expense_claim"), 200)
-
-		expense_claim2 = make_expense_claim(
-			payable_account, 600, 500, company_name, "Travel Expenses - _TC3", project.name, task_name
-		)
-
-		self.assertEqual(frappe.db.get_value("Task", task_name, "total_expense_claim"), 700)
-		self.assertEqual(frappe.db.get_value("Project", project.name, "total_expense_claim"), 700)
-
-		expense_claim2.cancel()
-
-		self.assertEqual(frappe.db.get_value("Task", task_name, "total_expense_claim"), 200)
-		self.assertEqual(frappe.db.get_value("Project", project.name, "total_expense_claim"), 200)
-
-	def test_expense_claim_status(self):
-		payable_account = get_payable_account(company_name)
-		expense_claim = make_expense_claim(
-			payable_account, 300, 200, company_name, "Travel Expenses - _TC3"
-		)
-
-		je_dict = make_bank_entry("Expense Claim", expense_claim.name)
-		je = frappe.get_doc(je_dict)
-		je.posting_date = nowdate()
-		je.cheque_no = random_string(5)
-		je.cheque_date = nowdate()
-		je.submit()
-
-		expense_claim = frappe.get_doc("Expense Claim", expense_claim.name)
-		self.assertEqual(expense_claim.status, "Paid")
-
-		je.cancel()
-		expense_claim = frappe.get_doc("Expense Claim", expense_claim.name)
-		self.assertEqual(expense_claim.status, "Unpaid")
-
-		# expense claim without any sanctioned amount should not have status as Paid
-		claim = make_expense_claim(payable_account, 1000, 0, "_Test Company", "Travel Expenses - _TC")
-		self.assertEqual(claim.total_sanctioned_amount, 0)
-		self.assertEqual(claim.status, "Submitted")
-
-		# no gl entries created
-		gl_entry = frappe.get_all(
-			"GL Entry", {"voucher_type": "Expense Claim", "voucher_no": claim.name}
-		)
-		self.assertEqual(len(gl_entry), 0)
-
-	def test_expense_claim_against_fully_paid_advances(self):
-		from erpnext.hr.doctype.employee_advance.test_employee_advance import (
-			get_advances_for_claim,
-			make_employee_advance,
-			make_payment_entry,
-		)
-
-		frappe.db.delete("Employee Advance")
-
-		payable_account = get_payable_account("_Test Company")
-		claim = make_expense_claim(
-			payable_account, 1000, 1000, "_Test Company", "Travel Expenses - _TC", do_not_submit=True
-		)
-
-		advance = make_employee_advance(claim.employee)
-		pe = make_payment_entry(advance)
-		pe.submit()
-
-		# claim for already paid out advances
-		claim = get_advances_for_claim(claim, advance.name)
-		claim.save()
-		claim.submit()
-
-		self.assertEqual(claim.grand_total, 0)
-		self.assertEqual(claim.status, "Paid")
-
-	def test_expense_claim_partially_paid_via_advance(self):
-		from erpnext.hr.doctype.employee_advance.test_employee_advance import (
-			get_advances_for_claim,
-			make_employee_advance,
-		)
-		from erpnext.hr.doctype.employee_advance.test_employee_advance import (
-			make_payment_entry as make_advance_payment,
-		)
-
-		frappe.db.delete("Employee Advance")
-
-		payable_account = get_payable_account("_Test Company")
-		claim = make_expense_claim(
-			payable_account, 1000, 1000, "_Test Company", "Travel Expenses - _TC", do_not_submit=True
-		)
-
-		# link advance for partial amount
-		advance = make_employee_advance(claim.employee, {"advance_amount": 500})
-		pe = make_advance_payment(advance)
-		pe.submit()
-
-		claim = get_advances_for_claim(claim, advance.name)
-		claim.save()
-		claim.submit()
-
-		self.assertEqual(claim.grand_total, 500)
-		self.assertEqual(claim.status, "Unpaid")
-
-		# reimburse remaning amount
-		make_payment_entry(claim, payable_account, 500)
-		claim.reload()
-
-		self.assertEqual(claim.total_amount_reimbursed, 500)
-		self.assertEqual(claim.status, "Paid")
-
-	def test_expense_claim_gl_entry(self):
-		payable_account = get_payable_account(company_name)
-		taxes = generate_taxes()
-		expense_claim = make_expense_claim(
-			payable_account,
-			300,
-			200,
-			company_name,
-			"Travel Expenses - _TC3",
-			do_not_submit=True,
-			taxes=taxes,
-		)
-		expense_claim.submit()
-
-		gl_entries = frappe.db.sql(
-			"""select account, debit, credit
-			from `tabGL Entry` where voucher_type='Expense Claim' and voucher_no=%s
-			order by account asc""",
-			expense_claim.name,
-			as_dict=1,
-		)
-
-		self.assertTrue(gl_entries)
-
-		expected_values = dict(
-			(d[0], d)
-			for d in [
-				["Output Tax CGST - _TC3", 18.0, 0.0],
-				[payable_account, 0.0, 218.0],
-				["Travel Expenses - _TC3", 200.0, 0.0],
-			]
-		)
-
-		for gle in gl_entries:
-			self.assertEqual(expected_values[gle.account][0], gle.account)
-			self.assertEqual(expected_values[gle.account][1], gle.debit)
-			self.assertEqual(expected_values[gle.account][2], gle.credit)
-
-	def test_rejected_expense_claim(self):
-		payable_account = get_payable_account(company_name)
-		expense_claim = frappe.get_doc(
-			{
-				"doctype": "Expense Claim",
-				"employee": "_T-Employee-00001",
-				"payable_account": payable_account,
-				"approval_status": "Rejected",
-				"expenses": [
-					{
-						"expense_type": "Travel",
-						"default_account": "Travel Expenses - _TC3",
-						"amount": 300,
-						"sanctioned_amount": 200,
-					}
-				],
-			}
-		)
-		expense_claim.submit()
-
-		self.assertEqual(expense_claim.status, "Rejected")
-		self.assertEqual(expense_claim.total_sanctioned_amount, 0.0)
-
-		gl_entry = frappe.get_all(
-			"GL Entry", {"voucher_type": "Expense Claim", "voucher_no": expense_claim.name}
-		)
-		self.assertEqual(len(gl_entry), 0)
-
-	def test_expense_approver_perms(self):
-		user = "test_approver_perm_emp@example.com"
-		make_employee(user, "_Test Company")
-
-		# check doc shared
-		payable_account = get_payable_account("_Test Company")
-		expense_claim = make_expense_claim(
-			payable_account, 300, 200, "_Test Company", "Travel Expenses - _TC", do_not_submit=True
-		)
-		expense_claim.expense_approver = user
-		expense_claim.save()
-		self.assertTrue(expense_claim.name in frappe.share.get_shared("Expense Claim", user))
-
-		# check shared doc revoked
-		expense_claim.reload()
-		expense_claim.expense_approver = "test@example.com"
-		expense_claim.save()
-		self.assertTrue(expense_claim.name not in frappe.share.get_shared("Expense Claim", user))
-
-		expense_claim.reload()
-		expense_claim.expense_approver = user
-		expense_claim.save()
-
-		frappe.set_user(user)
-		expense_claim.reload()
-		expense_claim.status = "Approved"
-		expense_claim.submit()
-		frappe.set_user("Administrator")
-
-	def test_multiple_payment_entries_against_expense(self):
-		# Creating expense claim
-		payable_account = get_payable_account("_Test Company")
-		expense_claim = make_expense_claim(
-			payable_account, 5500, 5500, "_Test Company", "Travel Expenses - _TC"
-		)
-		expense_claim.save()
-		expense_claim.submit()
-
-		# Payment entry 1: paying 500
-		make_payment_entry(expense_claim, payable_account, 500)
-		outstanding_amount, total_amount_reimbursed = get_outstanding_and_total_reimbursed_amounts(
-			expense_claim
-		)
-		self.assertEqual(outstanding_amount, 5000)
-		self.assertEqual(total_amount_reimbursed, 500)
-
-		# Payment entry 1: paying 2000
-		make_payment_entry(expense_claim, payable_account, 2000)
-		outstanding_amount, total_amount_reimbursed = get_outstanding_and_total_reimbursed_amounts(
-			expense_claim
-		)
-		self.assertEqual(outstanding_amount, 3000)
-		self.assertEqual(total_amount_reimbursed, 2500)
-
-		# Payment entry 1: paying 3000
-		make_payment_entry(expense_claim, payable_account, 3000)
-		outstanding_amount, total_amount_reimbursed = get_outstanding_and_total_reimbursed_amounts(
-			expense_claim
-		)
-		self.assertEqual(outstanding_amount, 0)
-		self.assertEqual(total_amount_reimbursed, 5500)
-
-
-def get_payable_account(company):
-	return frappe.get_cached_value("Company", company, "default_payable_account")
-
-
-def generate_taxes():
-	parent_account = frappe.db.get_value(
-		"Account", {"company": company_name, "is_group": 1, "account_type": "Tax"}, "name"
-	)
-	account = create_account(
-		company=company_name,
-		account_name="Output Tax CGST",
-		account_type="Tax",
-		parent_account=parent_account,
-	)
-	return {
-		"taxes": [
-			{"account_head": account, "rate": 9, "description": "CGST", "tax_amount": 10, "total": 210}
-		]
-	}
-
-
-def make_expense_claim(
-	payable_account,
-	amount,
-	sanctioned_amount,
-	company,
-	account,
-	project=None,
-	task_name=None,
-	do_not_submit=False,
-	taxes=None,
-):
-	employee = frappe.db.get_value("Employee", {"status": "Active"})
-	if not employee:
-		employee = make_employee("test_employee@expense_claim.com", company=company)
-
-	currency, cost_center = frappe.db.get_value(
-		"Company", company, ["default_currency", "cost_center"]
-	)
-	expense_claim = {
-		"doctype": "Expense Claim",
-		"employee": employee,
-		"payable_account": payable_account,
-		"approval_status": "Approved",
-		"company": company,
-		"currency": currency,
-		"expenses": [
-			{
-				"expense_type": "Travel",
-				"default_account": account,
-				"currency": currency,
-				"amount": amount,
-				"sanctioned_amount": sanctioned_amount,
-				"cost_center": cost_center,
-			}
-		],
-	}
-	if taxes:
-		expense_claim.update(taxes)
-
-	expense_claim = frappe.get_doc(expense_claim)
-
-	if project:
-		expense_claim.project = project
-	if task_name:
-		expense_claim.task = task_name
-
-	if do_not_submit:
-		return expense_claim
-	expense_claim.submit()
-	return expense_claim
-
-
-def get_outstanding_and_total_reimbursed_amounts(expense_claim):
-	outstanding_amount = flt(
-		frappe.db.get_value("Expense Claim", expense_claim.name, "total_sanctioned_amount")
-	) - flt(frappe.db.get_value("Expense Claim", expense_claim.name, "total_amount_reimbursed"))
-	total_amount_reimbursed = flt(
-		frappe.db.get_value("Expense Claim", expense_claim.name, "total_amount_reimbursed")
-	)
-
-	return outstanding_amount, total_amount_reimbursed
-
-
-def make_payment_entry(expense_claim, payable_account, amt):
-	from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry
-
-	pe = get_payment_entry(
-		"Expense Claim", expense_claim.name, bank_account="_Test Bank USD - _TC", bank_amount=amt
-	)
-	pe.reference_no = "1"
-	pe.reference_date = nowdate()
-	pe.source_exchange_rate = 1
-	pe.paid_to = payable_account
-	pe.references[0].allocated_amount = amt
-	pe.insert()
-	pe.submit()
diff --git a/erpnext/hr/doctype/expense_claim_account/__init__.py b/erpnext/hr/doctype/expense_claim_account/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/expense_claim_account/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/expense_claim_account/expense_claim_account.json b/erpnext/hr/doctype/expense_claim_account/expense_claim_account.json
deleted file mode 100644
index c7d71d3..0000000
--- a/erpnext/hr/doctype/expense_claim_account/expense_claim_account.json
+++ /dev/null
@@ -1,89 +0,0 @@
-{
- "allow_copy": 0, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "beta": 0, 
- "creation": "2016-07-18 12:24:16.507860", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "", 
- "editable_grid": 1, 
- "fields": [
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "company", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 1, 
-   "label": "Company", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Company", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "default_account", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 1, 
-   "label": "Default Account", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Account", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }
- ], 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "image_view": 0, 
- "in_create": 0, 
-
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 1, 
- "max_attachments": 0, 
- "modified": "2016-07-18 12:39:29.709848", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Expense Claim Account", 
- "name_case": "", 
- "owner": "Administrator", 
- "permissions": [], 
- "quick_entry": 1, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/expense_claim_account/expense_claim_account.py b/erpnext/hr/doctype/expense_claim_account/expense_claim_account.py
deleted file mode 100644
index 0d46a22..0000000
--- a/erpnext/hr/doctype/expense_claim_account/expense_claim_account.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-from frappe.model.document import Document
-
-
-class ExpenseClaimAccount(Document):
-	pass
diff --git a/erpnext/hr/doctype/expense_claim_advance/__init__.py b/erpnext/hr/doctype/expense_claim_advance/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/expense_claim_advance/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/expense_claim_advance/expense_claim_advance.json b/erpnext/hr/doctype/expense_claim_advance/expense_claim_advance.json
deleted file mode 100644
index aa479c8..0000000
--- a/erpnext/hr/doctype/expense_claim_advance/expense_claim_advance.json
+++ /dev/null
@@ -1,100 +0,0 @@
-{
- "actions": [],
- "creation": "2017-10-09 16:53:26.410762",
- "doctype": "DocType",
- "document_type": "Document",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "employee_advance",
-  "posting_date",
-  "advance_paid",
-  "column_break_4",
-  "unclaimed_amount",
-  "allocated_amount",
-  "advance_account"
- ],
- "fields": [
-  {
-   "columns": 2,
-   "fieldname": "employee_advance",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Employee Advance",
-   "no_copy": 1,
-   "oldfieldname": "journal_voucher",
-   "oldfieldtype": "Link",
-   "options": "Employee Advance",
-   "print_width": "250px",
-   "reqd": 1,
-   "width": "250px"
-  },
-  {
-   "columns": 2,
-   "fieldname": "posting_date",
-   "fieldtype": "Date",
-   "in_list_view": 1,
-   "label": "Posting Date",
-   "read_only": 1
-  },
-  {
-   "columns": 2,
-   "fieldname": "advance_paid",
-   "fieldtype": "Currency",
-   "in_list_view": 1,
-   "label": "Advance Paid",
-   "options": "Company:company:default_currency",
-   "read_only": 1
-  },
-  {
-   "columns": 2,
-   "fieldname": "unclaimed_amount",
-   "fieldtype": "Currency",
-   "in_list_view": 1,
-   "label": "Unclaimed Amount",
-   "no_copy": 1,
-   "oldfieldname": "advance_amount",
-   "oldfieldtype": "Currency",
-   "options": "Company:company:default_currency",
-   "print_width": "120px",
-   "read_only": 1,
-   "reqd": 1,
-   "width": "120px"
-  },
-  {
-   "columns": 2,
-   "fieldname": "allocated_amount",
-   "fieldtype": "Currency",
-   "in_list_view": 1,
-   "label": "Allocated Amount",
-   "no_copy": 1,
-   "oldfieldname": "allocated_amount",
-   "oldfieldtype": "Currency",
-   "options": "Company:company:default_currency",
-   "print_width": "120px",
-   "width": "120px"
-  },
-  {
-   "fieldname": "advance_account",
-   "fieldtype": "Link",
-   "hidden": 1,
-   "label": "Advance Account",
-   "options": "Account"
-  },
-  {
-   "fieldname": "column_break_4",
-   "fieldtype": "Column Break"
-  }
- ],
- "istable": 1,
- "links": [],
- "modified": "2021-11-22 16:33:58.515819",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Expense Claim Advance",
- "owner": "Administrator",
- "permissions": [],
- "quick_entry": 1,
- "sort_field": "modified",
- "sort_order": "DESC"
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/expense_claim_advance/expense_claim_advance.py b/erpnext/hr/doctype/expense_claim_advance/expense_claim_advance.py
deleted file mode 100644
index 68b2963..0000000
--- a/erpnext/hr/doctype/expense_claim_advance/expense_claim_advance.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-from frappe.model.document import Document
-
-
-class ExpenseClaimAdvance(Document):
-	pass
diff --git a/erpnext/hr/doctype/expense_claim_detail/README.md b/erpnext/hr/doctype/expense_claim_detail/README.md
deleted file mode 100644
index 4a747e2..0000000
--- a/erpnext/hr/doctype/expense_claim_detail/README.md
+++ /dev/null
@@ -1 +0,0 @@
-Detail of expense in parent Expense Claim.
\ No newline at end of file
diff --git a/erpnext/hr/doctype/expense_claim_detail/__init__.py b/erpnext/hr/doctype/expense_claim_detail/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/expense_claim_detail/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/expense_claim_detail/expense_claim_detail.json b/erpnext/hr/doctype/expense_claim_detail/expense_claim_detail.json
deleted file mode 100644
index 6edbcb5c..0000000
--- a/erpnext/hr/doctype/expense_claim_detail/expense_claim_detail.json
+++ /dev/null
@@ -1,130 +0,0 @@
-{
- "actions": [],
- "creation": "2013-02-22 01:27:46",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "expense_date",
-  "column_break_2",
-  "expense_type",
-  "default_account",
-  "section_break_4",
-  "description",
-  "section_break_6",
-  "amount",
-  "column_break_8",
-  "sanctioned_amount",
-  "accounting_dimensions_section",
-  "cost_center",
-  "dimension_col_break"
- ],
- "fields": [
-  {
-   "fieldname": "expense_date",
-   "fieldtype": "Date",
-   "in_list_view": 1,
-   "label": "Expense Date",
-   "oldfieldname": "expense_date",
-   "oldfieldtype": "Date",
-   "print_width": "150px",
-   "width": "150px"
-  },
-  {
-   "fieldname": "column_break_2",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "expense_type",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Expense Claim Type",
-   "oldfieldname": "expense_type",
-   "oldfieldtype": "Link",
-   "options": "Expense Claim Type",
-   "print_width": "150px",
-   "reqd": 1,
-   "width": "150px"
-  },
-  {
-   "depends_on": "expense_type",
-   "fieldname": "default_account",
-   "fieldtype": "Link",
-   "hidden": 1,
-   "label": "Default Account",
-   "options": "Account",
-   "read_only": 1
-  },
-  {
-   "fieldname": "section_break_4",
-   "fieldtype": "Section Break"
-  },
-  {
-   "fieldname": "description",
-   "fieldtype": "Text Editor",
-   "in_list_view": 1,
-   "label": "Description",
-   "oldfieldname": "description",
-   "oldfieldtype": "Small Text",
-   "print_width": "300px",
-   "width": "300px"
-  },
-  {
-   "fieldname": "section_break_6",
-   "fieldtype": "Section Break"
-  },
-  {
-   "fieldname": "amount",
-   "fieldtype": "Currency",
-   "in_list_view": 1,
-   "label": "Amount",
-   "oldfieldname": "claim_amount",
-   "oldfieldtype": "Currency",
-   "options": "Company:company:default_currency",
-   "print_width": "150px",
-   "reqd": 1,
-   "width": "150px"
-  },
-  {
-   "fieldname": "column_break_8",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "sanctioned_amount",
-   "fieldtype": "Currency",
-   "in_list_view": 1,
-   "label": "Sanctioned Amount",
-   "oldfieldname": "sanctioned_amount",
-   "oldfieldtype": "Currency",
-   "options": "Company:company:default_currency",
-   "print_width": "150px",
-   "width": "150px"
-  },
-  {
-   "fieldname": "cost_center",
-   "fieldtype": "Link",
-   "label": "Cost Center",
-   "options": "Cost Center"
-  },
-  {
-   "fieldname": "accounting_dimensions_section",
-   "fieldtype": "Section Break",
-   "label": "Accounting Dimensions"
-  },
-  {
-   "fieldname": "dimension_col_break",
-   "fieldtype": "Column Break"
-  }
- ],
- "idx": 1,
- "istable": 1,
- "links": [],
- "modified": "2021-11-26 14:23:45.539922",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Expense Claim Detail",
- "owner": "Administrator",
- "permissions": [],
- "sort_field": "modified",
- "sort_order": "DESC"
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/expense_claim_detail/expense_claim_detail.py b/erpnext/hr/doctype/expense_claim_detail/expense_claim_detail.py
deleted file mode 100644
index f58f128..0000000
--- a/erpnext/hr/doctype/expense_claim_detail/expense_claim_detail.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-
-from frappe.model.document import Document
-
-
-class ExpenseClaimDetail(Document):
-	pass
diff --git a/erpnext/hr/doctype/expense_claim_type/README.md b/erpnext/hr/doctype/expense_claim_type/README.md
deleted file mode 100644
index 13a654e..0000000
--- a/erpnext/hr/doctype/expense_claim_type/README.md
+++ /dev/null
@@ -1 +0,0 @@
-Type of expense for Expense Claim.
\ No newline at end of file
diff --git a/erpnext/hr/doctype/expense_claim_type/__init__.py b/erpnext/hr/doctype/expense_claim_type/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/expense_claim_type/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/expense_claim_type/expense_claim_type.js b/erpnext/hr/doctype/expense_claim_type/expense_claim_type.js
deleted file mode 100644
index d007e1a..0000000
--- a/erpnext/hr/doctype/expense_claim_type/expense_claim_type.js
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-// License: GNU General Public License v3. See license.txt
-
-frappe.ui.form.on("Expense Claim Type", {
-	refresh: function(frm) {
-		frm.fields_dict["accounts"].grid.get_field("default_account").get_query = function(doc, cdt, cdn) {
-			var d = locals[cdt][cdn];
-			return {
-				filters: {
-					"is_group": 0,
-					"root_type": frm.doc.deferred_expense_account ? "Asset" : "Expense",
-					'company': d.company
-				}
-			}
-		}
-	}
-})
diff --git a/erpnext/hr/doctype/expense_claim_type/expense_claim_type.json b/erpnext/hr/doctype/expense_claim_type/expense_claim_type.json
deleted file mode 100644
index 02ab4cb..0000000
--- a/erpnext/hr/doctype/expense_claim_type/expense_claim_type.json
+++ /dev/null
@@ -1,74 +0,0 @@
-{
- "actions": [],
- "allow_import": 1,
- "allow_rename": 1,
- "autoname": "field:expense_type",
- "creation": "2012-03-27 14:35:55",
- "doctype": "DocType",
- "document_type": "Setup",
- "engine": "InnoDB",
- "field_order": [
-  "deferred_expense_account",
-  "expense_type",
-  "accounts",
-  "description"
- ],
- "fields": [
-  {
-   "fieldname": "expense_type",
-   "fieldtype": "Data",
-   "in_list_view": 1,
-   "label": "Expense Claim Type",
-   "oldfieldname": "expense_type",
-   "oldfieldtype": "Data",
-   "reqd": 1,
-   "unique": 1
-  },
-  {
-   "fieldname": "description",
-   "fieldtype": "Small Text",
-   "label": "Description",
-   "oldfieldname": "description",
-   "oldfieldtype": "Small Text",
-   "width": "300px"
-  },
-  {
-   "fieldname": "accounts",
-   "fieldtype": "Table",
-   "label": "Accounts",
-   "options": "Expense Claim Account"
-  },
-  {
-   "default": "0",
-   "fieldname": "deferred_expense_account",
-   "fieldtype": "Check",
-   "label": "Deferred Expense Account"
-  }
- ],
- "icon": "fa fa-flag",
- "idx": 1,
- "links": [],
- "modified": "2020-09-18 17:26:09.703215",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Expense Claim Type",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "email": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "read": 1,
-   "role": "Employee"
-  }
- ],
- "sort_field": "modified",
- "sort_order": "ASC"
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/expense_claim_type/expense_claim_type.py b/erpnext/hr/doctype/expense_claim_type/expense_claim_type.py
deleted file mode 100644
index 6d29f7d..0000000
--- a/erpnext/hr/doctype/expense_claim_type/expense_claim_type.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-
-
-class ExpenseClaimType(Document):
-	def validate(self):
-		self.validate_accounts()
-		self.validate_repeating_companies()
-
-	def validate_repeating_companies(self):
-		"""Error when Same Company is entered multiple times in accounts"""
-		accounts_list = []
-		for entry in self.accounts:
-			accounts_list.append(entry.company)
-
-		if len(accounts_list) != len(set(accounts_list)):
-			frappe.throw(_("Same Company is entered more than once"))
-
-	def validate_accounts(self):
-		for entry in self.accounts:
-			"""Error when Company of Ledger account doesn't match with Company Selected"""
-			if frappe.db.get_value("Account", entry.default_account, "company") != entry.company:
-				frappe.throw(
-					_("Account {0} does not match with Company {1}").format(entry.default_account, entry.company)
-				)
diff --git a/erpnext/hr/doctype/expense_claim_type/test_expense_claim_type.py b/erpnext/hr/doctype/expense_claim_type/test_expense_claim_type.py
deleted file mode 100644
index 62348e2..0000000
--- a/erpnext/hr/doctype/expense_claim_type/test_expense_claim_type.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and Contributors
-# See license.txt
-
-import unittest
-
-# test_records = frappe.get_test_records('Expense Claim Type')
-
-
-class TestExpenseClaimType(unittest.TestCase):
-	pass
diff --git a/erpnext/hr/doctype/expense_taxes_and_charges/__init__.py b/erpnext/hr/doctype/expense_taxes_and_charges/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/expense_taxes_and_charges/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/expense_taxes_and_charges/expense_taxes_and_charges.json b/erpnext/hr/doctype/expense_taxes_and_charges/expense_taxes_and_charges.json
deleted file mode 100644
index 2f7b8fc..0000000
--- a/erpnext/hr/doctype/expense_taxes_and_charges/expense_taxes_and_charges.json
+++ /dev/null
@@ -1,112 +0,0 @@
-{
- "actions": [],
- "autoname": "hash",
- "creation": "2019-06-03 11:42:33.123976",
- "doctype": "DocType",
- "document_type": "Setup",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "account_head",
-  "rate",
-  "col_break1",
-  "description",
-  "section_break_6",
-  "tax_amount",
-  "column_break_8",
-  "total",
-  "accounting_dimensions_section",
-  "cost_center",
-  "dimension_col_break"
- ],
- "fields": [
-  {
-   "fieldname": "col_break1",
-   "fieldtype": "Column Break"
-  },
-  {
-   "columns": 2,
-   "fieldname": "account_head",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Account Head",
-   "oldfieldname": "account_head",
-   "oldfieldtype": "Link",
-   "options": "Account",
-   "reqd": 1
-  },
-  {
-   "default": ":Company",
-   "fieldname": "cost_center",
-   "fieldtype": "Link",
-   "label": "Cost Center",
-   "oldfieldname": "cost_center",
-   "oldfieldtype": "Link",
-   "options": "Cost Center"
-  },
-  {
-   "fieldname": "description",
-   "fieldtype": "Small Text",
-   "label": "Description",
-   "oldfieldname": "description",
-   "oldfieldtype": "Small Text",
-   "print_width": "300px",
-   "reqd": 1,
-   "width": "300px"
-  },
-  {
-   "columns": 2,
-   "fieldname": "rate",
-   "fieldtype": "Float",
-   "in_list_view": 1,
-   "label": "Rate",
-   "oldfieldname": "rate",
-   "oldfieldtype": "Currency"
-  },
-  {
-   "columns": 2,
-   "fieldname": "tax_amount",
-   "fieldtype": "Currency",
-   "in_list_view": 1,
-   "label": "Amount",
-   "options": "currency"
-  },
-  {
-   "columns": 2,
-   "fieldname": "total",
-   "fieldtype": "Currency",
-   "in_list_view": 1,
-   "label": "Total",
-   "options": "currency",
-   "read_only": 1
-  },
-  {
-   "fieldname": "section_break_6",
-   "fieldtype": "Section Break"
-  },
-  {
-   "fieldname": "column_break_8",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "accounting_dimensions_section",
-   "fieldtype": "Section Break",
-   "label": "Accounting Dimensions"
-  },
-  {
-   "fieldname": "dimension_col_break",
-   "fieldtype": "Column Break"
-  }
- ],
- "istable": 1,
- "links": [],
- "modified": "2021-10-26 20:27:36.027728",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Expense Taxes and Charges",
- "owner": "Administrator",
- "permissions": [],
- "sort_field": "modified",
- "sort_order": "ASC",
- "track_changes": 1
-}
diff --git a/erpnext/hr/doctype/expense_taxes_and_charges/expense_taxes_and_charges.py b/erpnext/hr/doctype/expense_taxes_and_charges/expense_taxes_and_charges.py
deleted file mode 100644
index a28ef57..0000000
--- a/erpnext/hr/doctype/expense_taxes_and_charges/expense_taxes_and_charges.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-# import frappe
-from frappe.model.document import Document
-
-
-class ExpenseTaxesandCharges(Document):
-	pass
diff --git a/erpnext/hr/doctype/full_and_final_asset/__init__.py b/erpnext/hr/doctype/full_and_final_asset/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/full_and_final_asset/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/full_and_final_asset/full_and_final_asset.js b/erpnext/hr/doctype/full_and_final_asset/full_and_final_asset.js
deleted file mode 100644
index 1965b46..0000000
--- a/erpnext/hr/doctype/full_and_final_asset/full_and_final_asset.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Full and Final Asset', {
-	// refresh: function(frm) {
-
-	// }
-});
diff --git a/erpnext/hr/doctype/full_and_final_asset/full_and_final_asset.json b/erpnext/hr/doctype/full_and_final_asset/full_and_final_asset.json
deleted file mode 100644
index 3ad8335..0000000
--- a/erpnext/hr/doctype/full_and_final_asset/full_and_final_asset.json
+++ /dev/null
@@ -1,64 +0,0 @@
-{
- "actions": [],
- "creation": "2021-06-28 13:36:58.658985",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "reference",
-  "asset_name",
-  "date",
-  "status",
-  "description"
- ],
- "fields": [
-  {
-   "fieldname": "reference",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Reference",
-   "options": "Asset Movement",
-   "read_only": 1,
-   "reqd": 1
-  },
-  {
-   "fieldname": "status",
-   "fieldtype": "Select",
-   "in_list_view": 1,
-   "label": "Status",
-   "options": "Owned\nReturned",
-   "reqd": 1
-  },
-  {
-   "fieldname": "description",
-   "fieldtype": "Small Text",
-   "label": "Description"
-  },
-  {
-   "fieldname": "asset_name",
-   "fieldtype": "Data",
-   "in_list_view": 1,
-   "label": "Asset Name",
-   "read_only": 1
-  },
-  {
-   "fieldname": "date",
-   "fieldtype": "Datetime",
-   "in_list_view": 1,
-   "label": "Date",
-   "read_only": 1
-  }
- ],
- "index_web_pages_for_search": 1,
- "istable": 1,
- "links": [],
- "modified": "2021-07-15 15:17:31.309834",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Full and Final Asset",
- "owner": "Administrator",
- "permissions": [],
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/full_and_final_asset/full_and_final_asset.py b/erpnext/hr/doctype/full_and_final_asset/full_and_final_asset.py
deleted file mode 100644
index 661af7d..0000000
--- a/erpnext/hr/doctype/full_and_final_asset/full_and_final_asset.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-# import frappe
-from frappe.model.document import Document
-
-
-class FullandFinalAsset(Document):
-	pass
diff --git a/erpnext/hr/doctype/full_and_final_asset/test_full_and_final_asset.py b/erpnext/hr/doctype/full_and_final_asset/test_full_and_final_asset.py
deleted file mode 100644
index 9afe0f2..0000000
--- a/erpnext/hr/doctype/full_and_final_asset/test_full_and_final_asset.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-# import frappe
-import unittest
-
-
-class TestFullandFinalAsset(unittest.TestCase):
-	pass
diff --git a/erpnext/hr/doctype/full_and_final_outstanding_statement/__init__.py b/erpnext/hr/doctype/full_and_final_outstanding_statement/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/full_and_final_outstanding_statement/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/full_and_final_outstanding_statement/full_and_final_outstanding_statement.json b/erpnext/hr/doctype/full_and_final_outstanding_statement/full_and_final_outstanding_statement.json
deleted file mode 100644
index be242e2..0000000
--- a/erpnext/hr/doctype/full_and_final_outstanding_statement/full_and_final_outstanding_statement.json
+++ /dev/null
@@ -1,96 +0,0 @@
-{
- "actions": [],
- "creation": "2021-06-28 13:32:02.167317",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "component",
-  "reference_document_type",
-  "reference_document",
-  "account",
-  "paid_via_salary_slip",
-  "column_break_4",
-  "amount",
-  "status",
-  "remark"
- ],
- "fields": [
-  {
-   "fieldname": "column_break_4",
-   "fieldtype": "Column Break"
-  },
-  {
-   "columns": 2,
-   "default": "Unsettled",
-   "fieldname": "status",
-   "fieldtype": "Select",
-   "in_list_view": 1,
-   "label": "Status",
-   "options": "Settled\nUnsettled"
-  },
-  {
-   "fieldname": "remark",
-   "fieldtype": "Small Text",
-   "label": "Remark"
-  },
-  {
-   "columns": 2,
-   "depends_on": "reference_document_type",
-   "fieldname": "reference_document",
-   "fieldtype": "Dynamic Link",
-   "in_list_view": 1,
-   "label": "Reference Document",
-   "mandatory_depends_on": "reference_document_type",
-   "options": "reference_document_type",
-   "search_index": 1
-  },
-  {
-   "columns": 2,
-   "fieldname": "component",
-   "fieldtype": "Data",
-   "in_list_view": 1,
-   "label": "Component",
-   "reqd": 1
-  },
-  {
-   "fieldname": "account",
-   "fieldtype": "Link",
-   "label": "Account",
-   "options": "Account"
-  },
-  {
-   "columns": 2,
-   "fieldname": "amount",
-   "fieldtype": "Currency",
-   "in_list_view": 1,
-   "label": "Amount"
-  },
-  {
-   "columns": 2,
-   "fieldname": "reference_document_type",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Reference Document Type",
-   "options": "DocType"
-  },
-  {
-   "default": "0",
-   "fieldname": "paid_via_salary_slip",
-   "fieldtype": "Check",
-   "label": "Paid via Salary Slip"
-  }
- ],
- "index_web_pages_for_search": 1,
- "istable": 1,
- "links": [],
- "modified": "2021-07-20 16:59:34.447934",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Full and Final Outstanding Statement",
- "owner": "Administrator",
- "permissions": [],
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/full_and_final_outstanding_statement/full_and_final_outstanding_statement.py b/erpnext/hr/doctype/full_and_final_outstanding_statement/full_and_final_outstanding_statement.py
deleted file mode 100644
index 4b239ab..0000000
--- a/erpnext/hr/doctype/full_and_final_outstanding_statement/full_and_final_outstanding_statement.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-# import frappe
-from frappe.model.document import Document
-
-
-class FullandFinalOutstandingStatement(Document):
-	pass
diff --git a/erpnext/hr/doctype/full_and_final_statement/__init__.py b/erpnext/hr/doctype/full_and_final_statement/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/full_and_final_statement/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/full_and_final_statement/full_and_final_statement.js b/erpnext/hr/doctype/full_and_final_statement/full_and_final_statement.js
deleted file mode 100644
index 074d85b..0000000
--- a/erpnext/hr/doctype/full_and_final_statement/full_and_final_statement.js
+++ /dev/null
@@ -1,115 +0,0 @@
-// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Full and Final Statement', {
-	refresh: function(frm) {
-		frm.events.set_queries(frm, "payables");
-		frm.events.set_queries(frm, "receivables");
-
-		if (frm.doc.docstatus == 1 && frm.doc.status == "Unpaid") {
-			frm.add_custom_button(__("Create Journal Entry"), function () {
-				frm.events.create_journal_entry(frm);
-			});
-		}
-	},
-
-	set_queries: function(frm, type) {
-		frm.set_query("reference_document_type", type, function () {
-			let modules = ["HR", "Payroll", "Loan Management"];
-			return {
-				filters: {
-					istable: 0,
-					issingle: 0,
-					module: ["In", modules]
-				}
-			};
-		});
-
-		let filters = {};
-
-		frm.set_query('reference_document', type, function(doc, cdt, cdn) {
-			let fnf_doc = frappe.get_doc(cdt, cdn);
-
-			frappe.model.with_doctype(fnf_doc.reference_document_type, function() {
-				if (frappe.model.is_tree(fnf_doc.reference_document_type)) {
-					filters['is_group'] = 0;
-				}
-
-				if (frappe.meta.has_field(fnf_doc.reference_document_type, 'company')) {
-					filters['company'] = frm.doc.company;
-				}
-
-				if (frappe.meta.has_field(fnf_doc.reference_document_type, 'employee')) {
-					filters['employee'] = frm.doc.employee;
-				}
-			});
-
-			return {
-				filters: filters
-			};
-		});
-	},
-
-	employee: function(frm) {
-		frm.events.get_outstanding_statements(frm);
-	},
-
-	get_outstanding_statements: function(frm) {
-		if (frm.doc.employee) {
-			frappe.call({
-				method: "get_outstanding_statements",
-				doc: frm.doc,
-				callback: function() {
-					frm.refresh();
-				}
-			});
-		}
-	},
-
-	create_journal_entry: function(frm) {
-		frappe.call({
-			method: "create_journal_entry",
-			doc: frm.doc,
-			callback: function(r) {
-				var doclist = frappe.model.sync(r.message);
-				frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
-			}
-		});
-	}
-});
-
-frappe.ui.form.on("Full and Final Outstanding Statement", {
-	reference_document: function(frm, cdt, cdn) {
-		var child = locals[cdt][cdn];
-		if (child.reference_document_type && child.reference_document) {
-			frappe.call({
-				method: "erpnext.hr.doctype.full_and_final_statement.full_and_final_statement.get_account_and_amount",
-				args: {
-					ref_doctype: child.reference_document_type,
-					ref_document: child.reference_document
-				},
-				callback: function(r) {
-					if (r.message) {
-						frappe.model.set_value(cdt, cdn, "account", r.message[0]);
-						frappe.model.set_value(cdt, cdn, "amount", r.message[1]);
-					}
-				}
-			});
-		}
-	},
-
-	amount: function(frm) {
-		var total_payable_amount = 0;
-		var total_receivable_amount = 0;
-
-		frm.doc.payables.forEach(element => {
-			total_payable_amount = total_payable_amount + element.amount;
-		});
-
-		frm.doc.receivables.forEach(element => {
-			total_receivable_amount = total_receivable_amount + element.amount;
-		});
-		frm.set_value("total_payable_amount", flt(total_payable_amount));
-		frm.set_value("total_receivable_amount", flt(total_receivable_amount));
-	}
-});
diff --git a/erpnext/hr/doctype/full_and_final_statement/full_and_final_statement.json b/erpnext/hr/doctype/full_and_final_statement/full_and_final_statement.json
deleted file mode 100644
index ebcf36d..0000000
--- a/erpnext/hr/doctype/full_and_final_statement/full_and_final_statement.json
+++ /dev/null
@@ -1,231 +0,0 @@
-{
- "actions": [],
- "autoname": "HR-FNF-.YYYY.-.#####",
- "creation": "2021-06-28 13:17:36.050459",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "employee",
-  "employee_name",
-  "transaction_date",
-  "column_break_12",
-  "company",
-  "status",
-  "amended_from",
-  "employee_details_section",
-  "date_of_joining",
-  "relieving_date",
-  "column_break_4",
-  "designation",
-  "department",
-  "section_break_8",
-  "payables",
-  "section_break_10",
-  "receivables",
-  "totals_section",
-  "total_payable_amount",
-  "column_break_21",
-  "total_receivable_amount",
-  "section_break_15",
-  "assets_allocated"
- ],
- "fields": [
-  {
-   "fieldname": "employee",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Employee",
-   "options": "Employee",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "employee.employee_name",
-   "fieldname": "employee_name",
-   "fieldtype": "Data",
-   "label": "Employee Name",
-   "read_only": 1
-  },
-  {
-   "fetch_from": "employee.designation",
-   "fieldname": "designation",
-   "fieldtype": "Link",
-   "label": "Designation",
-   "options": "Designation",
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break_4",
-   "fieldtype": "Column Break"
-  },
-  {
-   "default": "Unpaid",
-   "fieldname": "status",
-   "fieldtype": "Select",
-   "label": "Status",
-   "options": "Paid\nUnpaid",
-   "read_only": 1
-  },
-  {
-   "fetch_from": "employee.department",
-   "fieldname": "department",
-   "fieldtype": "Link",
-   "label": "Department",
-   "options": "Department",
-   "read_only": 1
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "Full and Final Statement",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "fieldname": "section_break_8",
-   "fieldtype": "Section Break",
-   "label": "Payables"
-  },
-  {
-   "fieldname": "section_break_10",
-   "fieldtype": "Section Break",
-   "label": "Receivables"
-  },
-  {
-   "fieldname": "assets_allocated",
-   "fieldtype": "Table",
-   "options": "Full and Final Asset"
-  },
-  {
-   "fetch_from": "employee.relieving_date",
-   "fieldname": "relieving_date",
-   "fieldtype": "Date",
-   "label": "Relieving Date ",
-   "read_only": 1,
-   "reqd": 1
-  },
-  {
-   "fetch_from": "employee.date_of_joining",
-   "fieldname": "date_of_joining",
-   "fieldtype": "Date",
-   "label": "Date of Joining",
-   "read_only": 1
-  },
-  {
-   "fieldname": "section_break_15",
-   "fieldtype": "Section Break",
-   "label": "Assets Allocated"
-  },
-  {
-   "fetch_from": "employee.company",
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Company",
-   "options": "Company",
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break_12",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "payables",
-   "fieldtype": "Table",
-   "options": "Full and Final Outstanding Statement"
-  },
-  {
-   "fieldname": "receivables",
-   "fieldtype": "Table",
-   "options": "Full and Final Outstanding Statement"
-  },
-  {
-   "fieldname": "employee_details_section",
-   "fieldtype": "Section Break",
-   "label": "Employee Details"
-  },
-  {
-   "fieldname": "transaction_date",
-   "fieldtype": "Date",
-   "in_standard_filter": 1,
-   "label": "Transaction Date",
-   "reqd": 1
-  },
-  {
-   "fieldname": "totals_section",
-   "fieldtype": "Section Break",
-   "label": "Totals"
-  },
-  {
-   "fieldname": "total_payable_amount",
-   "fieldtype": "Currency",
-   "in_list_view": 1,
-   "label": "Total Payable Amount",
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break_21",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "total_receivable_amount",
-   "fieldtype": "Currency",
-   "in_list_view": 1,
-   "label": "Total Receivable Amount",
-   "read_only": 1
-  }
- ],
- "index_web_pages_for_search": 1,
- "is_submittable": 1,
- "links": [],
- "modified": "2021-08-30 21:11:09.892560",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Full and Final Statement",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "write": 1
-  }
- ],
- "sort_field": "modified",
- "sort_order": "DESC",
- "title_field": "employee_name",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/full_and_final_statement/full_and_final_statement.py b/erpnext/hr/doctype/full_and_final_statement/full_and_final_statement.py
deleted file mode 100644
index 8137a0d..0000000
--- a/erpnext/hr/doctype/full_and_final_statement/full_and_final_statement.py
+++ /dev/null
@@ -1,202 +0,0 @@
-# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.utils import flt, get_link_to_form, today
-
-
-class FullandFinalStatement(Document):
-	def validate(self):
-		self.get_outstanding_statements()
-		if self.docstatus == 1:
-			self.validate_settlement("payables")
-			self.validate_settlement("receivables")
-			self.validate_asset()
-
-	def validate_settlement(self, component_type):
-		for data in self.get(component_type, []):
-			if data.status == "Unsettled":
-				frappe.throw(_("Settle all Payables and Receivables before submission"))
-
-	def validate_asset(self):
-		for data in self.assets_allocated:
-			if data.status == "Owned":
-				frappe.throw(_("All allocated assets should be returned before submission"))
-
-	@frappe.whitelist()
-	def get_outstanding_statements(self):
-		if self.relieving_date:
-			if not len(self.get("payables", [])):
-				components = self.get_payable_component()
-				self.create_component_row(components, "payables")
-			if not len(self.get("receivables", [])):
-				components = self.get_receivable_component()
-				self.create_component_row(components, "receivables")
-
-			if not len(self.get("assets_allocated", [])):
-				for data in self.get_assets_movement():
-					self.append("assets_allocated", data)
-		else:
-			frappe.throw(
-				_("Set Relieving Date for Employee: {0}").format(get_link_to_form("Employee", self.employee))
-			)
-
-	def create_component_row(self, components, component_type):
-		for component in components:
-			self.append(
-				component_type,
-				{
-					"status": "Unsettled",
-					"reference_document_type": component if component != "Bonus" else "Additional Salary",
-					"component": component,
-				},
-			)
-
-	def get_payable_component(self):
-		return [
-			"Salary Slip",
-			"Gratuity",
-			"Expense Claim",
-			"Bonus",
-			"Leave Encashment",
-		]
-
-	def get_receivable_component(self):
-		return [
-			"Loan",
-			"Employee Advance",
-		]
-
-	def get_assets_movement(self):
-		asset_movements = frappe.get_all(
-			"Asset Movement Item",
-			filters={"docstatus": 1},
-			fields=["asset", "from_employee", "to_employee", "parent", "asset_name"],
-			or_filters={"from_employee": self.employee, "to_employee": self.employee},
-		)
-
-		data = []
-		inward_movements = []
-		outward_movements = []
-		for movement in asset_movements:
-			if movement.to_employee and movement.to_employee == self.employee:
-				inward_movements.append(movement)
-
-			if movement.from_employee and movement.from_employee == self.employee:
-				outward_movements.append(movement)
-
-		for movement in inward_movements:
-			outwards_count = [movement.asset for movement in outward_movements].count(movement.asset)
-			inwards_counts = [movement.asset for movement in inward_movements].count(movement.asset)
-
-			if inwards_counts > outwards_count:
-				data.append(
-					{
-						"reference": movement.parent,
-						"asset_name": movement.asset_name,
-						"date": frappe.db.get_value("Asset Movement", movement.parent, "transaction_date"),
-						"status": "Owned",
-					}
-				)
-		return data
-
-	@frappe.whitelist()
-	def create_journal_entry(self):
-		precision = frappe.get_precision("Journal Entry Account", "debit_in_account_currency")
-		jv = frappe.new_doc("Journal Entry")
-		jv.company = self.company
-		jv.voucher_type = "Bank Entry"
-		jv.posting_date = today()
-
-		difference = self.total_payable_amount - self.total_receivable_amount
-
-		for data in self.payables:
-			if data.amount > 0 and not data.paid_via_salary_slip:
-				account_dict = {
-					"account": data.account,
-					"debit_in_account_currency": flt(data.amount, precision),
-				}
-				if data.reference_document_type == "Expense Claim":
-					account_dict["party_type"] = "Employee"
-					account_dict["party"] = self.employee
-
-				jv.append("accounts", account_dict)
-
-		for data in self.receivables:
-			if data.amount > 0:
-				account_dict = {
-					"account": data.account,
-					"credit_in_account_currency": flt(data.amount, precision),
-				}
-				if data.reference_document_type == "Employee Advance":
-					account_dict["party_type"] = "Employee"
-					account_dict["party"] = self.employee
-
-				jv.append("accounts", account_dict)
-
-		jv.append(
-			"accounts",
-			{
-				"credit_in_account_currency": difference if difference > 0 else 0,
-				"debit_in_account_currency": -(difference) if difference < 0 else 0,
-				"reference_type": self.doctype,
-				"reference_name": self.name,
-			},
-		)
-		return jv
-
-
-@frappe.whitelist()
-def get_account_and_amount(ref_doctype, ref_document):
-	if not ref_doctype or not ref_document:
-		return None
-
-	if ref_doctype == "Salary Slip":
-		salary_details = frappe.db.get_value(
-			"Salary Slip", ref_document, ["payroll_entry", "net_pay"], as_dict=1
-		)
-		amount = salary_details.net_pay
-		payable_account = (
-			frappe.db.get_value("Payroll Entry", salary_details.payroll_entry, "payroll_payable_account")
-			if salary_details.payroll_entry
-			else None
-		)
-		return [payable_account, amount]
-
-	if ref_doctype == "Gratuity":
-		payable_account, amount = frappe.db.get_value(
-			"Gratuity", ref_document, ["payable_account", "amount"]
-		)
-		return [payable_account, amount]
-
-	if ref_doctype == "Expense Claim":
-		details = frappe.db.get_value(
-			"Expense Claim",
-			ref_document,
-			["payable_account", "grand_total", "total_amount_reimbursed", "total_advance_amount"],
-			as_dict=True,
-		)
-		payable_account = details.payable_account
-		amount = details.grand_total - (details.total_amount_reimbursed + details.total_advance_amount)
-		return [payable_account, amount]
-
-	if ref_doctype == "Loan":
-		details = frappe.db.get_value(
-			"Loan", ref_document, ["payment_account", "total_payment", "total_amount_paid"], as_dict=1
-		)
-		payment_account = details.payment_account
-		amount = details.total_payment - details.total_amount_paid
-		return [payment_account, amount]
-
-	if ref_doctype == "Employee Advance":
-		details = frappe.db.get_value(
-			"Employee Advance",
-			ref_document,
-			["advance_account", "paid_amount", "claimed_amount", "return_amount"],
-			as_dict=1,
-		)
-		payment_account = details.advance_account
-		amount = details.paid_amount - (details.claimed_amount + details.return_amount)
-		return [payment_account, amount]
diff --git a/erpnext/hr/doctype/full_and_final_statement/full_and_final_statement_list.js b/erpnext/hr/doctype/full_and_final_statement/full_and_final_statement_list.js
deleted file mode 100644
index 4aedec7..0000000
--- a/erpnext/hr/doctype/full_and_final_statement/full_and_final_statement_list.js
+++ /dev/null
@@ -1,11 +0,0 @@
-frappe.listview_settings["Full and Final Statement"] = {
-	get_indicator: function(doc) {
-		var colors = {
-			"Draft": "red",
-			"Unpaid": "orange",
-			"Paid": "green",
-			"Cancelled": "red"
-		};
-		return [__(doc.status), colors[doc.status], "status,=," + doc.status];
-	}
-};
diff --git a/erpnext/hr/doctype/full_and_final_statement/test_full_and_final_statement.py b/erpnext/hr/doctype/full_and_final_statement/test_full_and_final_statement.py
deleted file mode 100644
index 8c6723f..0000000
--- a/erpnext/hr/doctype/full_and_final_statement/test_full_and_final_statement.py
+++ /dev/null
@@ -1,81 +0,0 @@
-# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-import frappe
-from frappe.utils import add_days, today
-
-from erpnext.assets.doctype.asset.test_asset import create_asset_data
-from erpnext.hr.doctype.employee.test_employee import make_employee
-from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import make_purchase_receipt
-
-
-class TestFullandFinalStatement(unittest.TestCase):
-	def setUp(self):
-		create_asset_data()
-
-	def tearDown(self):
-		frappe.db.sql("Delete from `tabFull and Final Statement`")
-		frappe.db.sql("Delete from `tabAsset`")
-		frappe.db.sql("Delete from `tabAsset Movement`")
-
-	def test_check_bootstraped_data_asset_movement_and_jv_creation(self):
-		employee = make_employee("test_fnf@example.com", company="_Test Company")
-		movement = create_asset_movement(employee)
-		frappe.db.set_value("Employee", employee, "relieving_date", add_days(today(), 30))
-		fnf = create_full_and_final_statement(employee)
-
-		payables_bootstraped_component = [
-			"Salary Slip",
-			"Gratuity",
-			"Expense Claim",
-			"Bonus",
-			"Leave Encashment",
-		]
-
-		receivable_bootstraped_component = ["Loan", "Employee Advance"]
-
-		# checking payable s and receivables bootstraped value
-		self.assertEqual([payable.component for payable in fnf.payables], payables_bootstraped_component)
-		self.assertEqual(
-			[receivable.component for receivable in fnf.receivables], receivable_bootstraped_component
-		)
-
-		# checking allocated asset
-		self.assertIn(movement, [asset.reference for asset in fnf.assets_allocated])
-
-
-def create_full_and_final_statement(employee):
-	fnf = frappe.new_doc("Full and Final Statement")
-	fnf.employee = employee
-	fnf.transaction_date = today()
-	fnf.save()
-	return fnf
-
-
-def create_asset_movement(employee):
-	asset_name = create_asset()
-	movement = frappe.new_doc("Asset Movement")
-	movement.company = "_Test Company"
-	movement.purpose = "Issue"
-	movement.transaction_date = today()
-
-	movement.append("assets", {"asset": asset_name, "to_employee": employee})
-
-	movement.save()
-	movement.submit()
-	return movement.name
-
-
-def create_asset():
-	pr = make_purchase_receipt(
-		item_code="Macbook Pro", qty=1, rate=100000.0, location="Test Location"
-	)
-
-	asset_name = frappe.db.get_value("Asset", {"purchase_receipt": pr.name}, "name")
-	asset = frappe.get_doc("Asset", asset_name)
-	asset.calculate_depreciation = 0
-	asset.available_for_use_date = today()
-	asset.submit()
-	return asset_name
diff --git a/erpnext/hr/doctype/grievance_type/__init__.py b/erpnext/hr/doctype/grievance_type/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/grievance_type/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/grievance_type/grievance_type.js b/erpnext/hr/doctype/grievance_type/grievance_type.js
deleted file mode 100644
index 425f2fd..0000000
--- a/erpnext/hr/doctype/grievance_type/grievance_type.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Grievance Type', {
-	// refresh: function(frm) {
-
-	// }
-});
diff --git a/erpnext/hr/doctype/grievance_type/grievance_type.json b/erpnext/hr/doctype/grievance_type/grievance_type.json
deleted file mode 100644
index 1dce00a..0000000
--- a/erpnext/hr/doctype/grievance_type/grievance_type.json
+++ /dev/null
@@ -1,70 +0,0 @@
-{
- "actions": [],
- "autoname": "Prompt",
- "creation": "2021-05-11 12:41:50.256071",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "section_break_5",
-  "description"
- ],
- "fields": [
-  {
-   "fieldname": "section_break_5",
-   "fieldtype": "Section Break"
-  },
-  {
-   "fieldname": "description",
-   "fieldtype": "Text",
-   "label": "Description"
-  }
- ],
- "index_web_pages_for_search": 1,
- "links": [],
- "modified": "2021-06-21 12:54:37.764712",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Grievance Type",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "write": 1
-  }
- ],
- "sort_field": "modified",
- "sort_order": "DESC"
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/grievance_type/grievance_type.py b/erpnext/hr/doctype/grievance_type/grievance_type.py
deleted file mode 100644
index 5d8d41c..0000000
--- a/erpnext/hr/doctype/grievance_type/grievance_type.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-# import frappe
-from frappe.model.document import Document
-
-
-class GrievanceType(Document):
-	pass
diff --git a/erpnext/hr/doctype/grievance_type/test_grievance_type.py b/erpnext/hr/doctype/grievance_type/test_grievance_type.py
deleted file mode 100644
index 481f4e5..0000000
--- a/erpnext/hr/doctype/grievance_type/test_grievance_type.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-# import frappe
-import unittest
-
-
-class TestGrievanceType(unittest.TestCase):
-	pass
diff --git a/erpnext/hr/doctype/hr_settings/__init__.py b/erpnext/hr/doctype/hr_settings/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/hr_settings/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/hr_settings/hr_settings.js b/erpnext/hr/doctype/hr_settings/hr_settings.js
deleted file mode 100644
index 6e26a1f..0000000
--- a/erpnext/hr/doctype/hr_settings/hr_settings.js
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('HR Settings', {
-});
-
-frappe.tour['HR Settings'] = [
-	{
-		fieldname: 'emp_created_by',
-		title: 'Employee Naming By',
-		description: __('Employee can be named by Employee ID if you assign one, or via Naming Series. Select your preference here.'),
-	},
-	{
-		fieldname: 'standard_working_hours',
-		title: 'Standard Working Hours',
-		description: __('Enter the Standard Working Hours for a normal work day. These hours will be used in calculations of reports such as Employee Hours Utilization and Project Profitability analysis.'),
-	},
-	{
-		fieldname: 'leave_and_expense_claim_settings',
-		title: 'Leave and Expense Clain Settings',
-		description: __('Review various other settings related to Employee Leaves and Expense Claim')
-	}
-];
diff --git a/erpnext/hr/doctype/hr_settings/hr_settings.json b/erpnext/hr/doctype/hr_settings/hr_settings.json
deleted file mode 100644
index f9a3e05..0000000
--- a/erpnext/hr/doctype/hr_settings/hr_settings.json
+++ /dev/null
@@ -1,279 +0,0 @@
-{
- "actions": [],
- "creation": "2013-08-02 13:45:23",
- "doctype": "DocType",
- "document_type": "Other",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "employee_settings",
-  "emp_created_by",
-  "standard_working_hours",
-  "column_break_9",
-  "retirement_age",
-  "reminders_section",
-  "send_birthday_reminders",
-  "column_break_11",
-  "send_work_anniversary_reminders",
-  "column_break_18",
-  "send_holiday_reminders",
-  "frequency",
-  "leave_and_expense_claim_settings",
-  "send_leave_notification",
-  "leave_approval_notification_template",
-  "leave_status_notification_template",
-  "leave_approver_mandatory_in_leave_application",
-  "restrict_backdated_leave_application",
-  "role_allowed_to_create_backdated_leave_application",
-  "column_break_29",
-  "expense_approver_mandatory_in_expense_claim",
-  "show_leaves_of_all_department_members_in_calendar",
-  "auto_leave_encashment",
-  "hiring_settings_section",
-  "check_vacancies",
-  "send_interview_reminder",
-  "interview_reminder_template",
-  "remind_before",
-  "column_break_4",
-  "send_interview_feedback_reminder",
-  "feedback_reminder_notification_template",
-  "employee_exit_section",
-  "exit_questionnaire_web_form",
-  "column_break_34",
-  "exit_questionnaire_notification_template"
- ],
- "fields": [
-  {
-   "fieldname": "employee_settings",
-   "fieldtype": "Section Break",
-   "label": "Employee Settings"
-  },
-  {
-   "fieldname": "retirement_age",
-   "fieldtype": "Data",
-   "label": "Retirement Age (In Years)"
-  },
-  {
-   "default": "Naming Series",
-   "description": "Employee records are created using the selected option",
-   "fieldname": "emp_created_by",
-   "fieldtype": "Select",
-   "label": "Employee Naming By",
-   "options": "Naming Series\nEmployee Number\nFull Name"
-  },
-  {
-   "fieldname": "column_break_4",
-   "fieldtype": "Column Break"
-  },
-  {
-   "default": "1",
-   "fieldname": "expense_approver_mandatory_in_expense_claim",
-   "fieldtype": "Check",
-   "label": "Expense Approver Mandatory In Expense Claim"
-  },
-  {
-   "fieldname": "column_break_18",
-   "fieldtype": "Column Break"
-  },
-  {
-   "default": "1",
-   "fieldname": "leave_approver_mandatory_in_leave_application",
-   "fieldtype": "Check",
-   "label": "Leave Approver Mandatory In Leave Application"
-  },
-  {
-   "default": "0",
-   "fieldname": "show_leaves_of_all_department_members_in_calendar",
-   "fieldtype": "Check",
-   "label": "Show Leaves Of All Department Members In Calendar"
-  },
-  {
-   "default": "0",
-   "fieldname": "auto_leave_encashment",
-   "fieldtype": "Check",
-   "label": "Auto Leave Encashment"
-  },
-  {
-   "depends_on": "eval:doc.restrict_backdated_leave_application == 1",
-   "fieldname": "role_allowed_to_create_backdated_leave_application",
-   "fieldtype": "Link",
-   "label": "Role Allowed to Create Backdated Leave Application",
-   "mandatory_depends_on": "eval:doc.restrict_backdated_leave_application == 1",
-   "options": "Role"
-  },
-  {
-   "default": "1",
-   "fieldname": "send_leave_notification",
-   "fieldtype": "Check",
-   "label": "Send Leave Notification"
-  },
-  {
-   "depends_on": "eval: doc.send_leave_notification == 1",
-   "fieldname": "leave_approval_notification_template",
-   "fieldtype": "Link",
-   "label": "Leave Approval Notification Template",
-   "mandatory_depends_on": "eval: doc.send_leave_notification == 1",
-   "options": "Email Template"
-  },
-  {
-   "depends_on": "eval: doc.send_leave_notification == 1",
-   "fieldname": "leave_status_notification_template",
-   "fieldtype": "Link",
-   "label": "Leave Status Notification Template",
-   "mandatory_depends_on": "eval: doc.send_leave_notification == 1",
-   "options": "Email Template"
-  },
-  {
-   "fieldname": "standard_working_hours",
-   "fieldtype": "Int",
-   "label": "Standard Working Hours"
-  },
-  {
-   "collapsible": 1,
-   "fieldname": "leave_and_expense_claim_settings",
-   "fieldtype": "Section Break",
-   "label": "Leave and Expense Claim Settings"
-  },
-  {
-   "default": "00:15:00",
-   "depends_on": "send_interview_reminder",
-   "fieldname": "remind_before",
-   "fieldtype": "Time",
-   "label": "Remind Before"
-  },
-  {
-   "collapsible": 1,
-   "fieldname": "reminders_section",
-   "fieldtype": "Section Break",
-   "label": "Reminders"
-  },
-  {
-   "default": "1",
-   "fieldname": "send_holiday_reminders",
-   "fieldtype": "Check",
-   "label": "Holidays"
-  },
-  {
-   "default": "1",
-   "fieldname": "send_work_anniversary_reminders",
-   "fieldtype": "Check",
-   "label": "Work Anniversaries "
-  },
-  {
-   "default": "Weekly",
-   "depends_on": "eval:doc.send_holiday_reminders",
-   "fieldname": "frequency",
-   "fieldtype": "Select",
-   "label": "Set the frequency for holiday reminders",
-   "mandatory_depends_on": "send_holiday_reminders",
-   "options": "Weekly\nMonthly"
-  },
-  {
-   "default": "1",
-   "fieldname": "send_birthday_reminders",
-   "fieldtype": "Check",
-   "label": "Birthdays"
-  },
-  {
-   "fieldname": "column_break_9",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "column_break_11",
-   "fieldtype": "Column Break"
-  },
-  {
-   "default": "0",
-   "fieldname": "send_interview_reminder",
-   "fieldtype": "Check",
-   "label": "Send Interview Reminder"
-  },
-  {
-   "default": "0",
-   "fieldname": "send_interview_feedback_reminder",
-   "fieldtype": "Check",
-   "label": "Send Interview Feedback Reminder"
-  },
-  {
-   "fieldname": "column_break_29",
-   "fieldtype": "Column Break"
-  },
-  {
-   "depends_on": "send_interview_feedback_reminder",
-   "fieldname": "feedback_reminder_notification_template",
-   "fieldtype": "Link",
-   "label": "Feedback Reminder Notification Template",
-   "mandatory_depends_on": "send_interview_feedback_reminder",
-   "options": "Email Template"
-  },
-  {
-   "depends_on": "send_interview_reminder",
-   "fieldname": "interview_reminder_template",
-   "fieldtype": "Link",
-   "label": "Interview Reminder Notification Template",
-   "mandatory_depends_on": "send_interview_reminder",
-   "options": "Email Template"
-  },
-  {
-   "default": "0",
-   "fieldname": "restrict_backdated_leave_application",
-   "fieldtype": "Check",
-   "label": "Restrict Backdated Leave Application"
-  },
-  {
-   "fieldname": "hiring_settings_section",
-   "fieldtype": "Section Break",
-   "label": "Hiring Settings"
-  },
-  {
-   "default": "0",
-   "fieldname": "check_vacancies",
-   "fieldtype": "Check",
-   "label": "Check Vacancies On Job Offer Creation"
-  },
-  {
-   "fieldname": "employee_exit_section",
-   "fieldtype": "Section Break",
-   "label": "Employee Exit Settings"
-  },
-  {
-   "fieldname": "exit_questionnaire_web_form",
-   "fieldtype": "Link",
-   "label": "Exit Questionnaire Web Form",
-   "options": "Web Form"
-  },
-  {
-   "fieldname": "exit_questionnaire_notification_template",
-   "fieldtype": "Link",
-   "label": "Exit Questionnaire Notification Template",
-   "options": "Email Template"
-  },
-  {
-   "fieldname": "column_break_34",
-   "fieldtype": "Column Break"
-  }
- ],
- "icon": "fa fa-cog",
- "idx": 1,
- "issingle": 1,
- "links": [],
- "modified": "2021-12-05 14:48:10.884253",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "HR Settings",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "email": 1,
-   "print": 1,
-   "read": 1,
-   "role": "System Manager",
-   "share": 1,
-   "write": 1
-  }
- ],
- "sort_field": "modified",
- "sort_order": "ASC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/hr_settings/hr_settings.py b/erpnext/hr/doctype/hr_settings/hr_settings.py
deleted file mode 100644
index b56f3db..0000000
--- a/erpnext/hr/doctype/hr_settings/hr_settings.py
+++ /dev/null
@@ -1,85 +0,0 @@
-# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-# For license information, please see license.txt
-
-import frappe
-from frappe.model.document import Document
-from frappe.utils import format_date
-
-# Wether to proceed with frequency change
-PROCEED_WITH_FREQUENCY_CHANGE = False
-
-
-class HRSettings(Document):
-	def validate(self):
-		self.set_naming_series()
-
-		# Based on proceed flag
-		global PROCEED_WITH_FREQUENCY_CHANGE
-		if not PROCEED_WITH_FREQUENCY_CHANGE:
-			self.validate_frequency_change()
-		PROCEED_WITH_FREQUENCY_CHANGE = False
-
-	def set_naming_series(self):
-		from erpnext.utilities.naming import set_by_naming_series
-
-		set_by_naming_series(
-			"Employee",
-			"employee_number",
-			self.get("emp_created_by") == "Naming Series",
-			hide_name_field=True,
-		)
-
-	def validate_frequency_change(self):
-		weekly_job, monthly_job = None, None
-
-		try:
-			weekly_job = frappe.get_doc(
-				"Scheduled Job Type", "employee_reminders.send_reminders_in_advance_weekly"
-			)
-
-			monthly_job = frappe.get_doc(
-				"Scheduled Job Type", "employee_reminders.send_reminders_in_advance_monthly"
-			)
-		except frappe.DoesNotExistError:
-			return
-
-		next_weekly_trigger = weekly_job.get_next_execution()
-		next_monthly_trigger = monthly_job.get_next_execution()
-
-		if self.freq_changed_from_monthly_to_weekly():
-			if next_monthly_trigger < next_weekly_trigger:
-				self.show_freq_change_warning(next_monthly_trigger, next_weekly_trigger)
-
-		elif self.freq_changed_from_weekly_to_monthly():
-			if next_monthly_trigger > next_weekly_trigger:
-				self.show_freq_change_warning(next_weekly_trigger, next_monthly_trigger)
-
-	def freq_changed_from_weekly_to_monthly(self):
-		return self.has_value_changed("frequency") and self.frequency == "Monthly"
-
-	def freq_changed_from_monthly_to_weekly(self):
-		return self.has_value_changed("frequency") and self.frequency == "Weekly"
-
-	def show_freq_change_warning(self, from_date, to_date):
-		from_date = frappe.bold(format_date(from_date))
-		to_date = frappe.bold(format_date(to_date))
-		frappe.msgprint(
-			msg=frappe._(
-				"Employees will miss holiday reminders from {} until {}. <br> Do you want to proceed with this change?"
-			).format(from_date, to_date),
-			title="Confirm change in Frequency",
-			primary_action={
-				"label": frappe._("Yes, Proceed"),
-				"client_action": "erpnext.proceed_save_with_reminders_frequency_change",
-			},
-			raise_exception=frappe.ValidationError,
-		)
-
-
-@frappe.whitelist()
-def set_proceed_with_frequency_change():
-	"""Enables proceed with frequency change"""
-	global PROCEED_WITH_FREQUENCY_CHANGE
-	PROCEED_WITH_FREQUENCY_CHANGE = True
diff --git a/erpnext/hr/doctype/hr_settings/test_hr_settings.py b/erpnext/hr/doctype/hr_settings/test_hr_settings.py
deleted file mode 100644
index 7e13213..0000000
--- a/erpnext/hr/doctype/hr_settings/test_hr_settings.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-
-class TestHRSettings(unittest.TestCase):
-	pass
diff --git a/erpnext/hr/doctype/identification_document_type/__init__.py b/erpnext/hr/doctype/identification_document_type/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/identification_document_type/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/identification_document_type/identification_document_type.js b/erpnext/hr/doctype/identification_document_type/identification_document_type.js
deleted file mode 100644
index 351cf9d..0000000
--- a/erpnext/hr/doctype/identification_document_type/identification_document_type.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Identification Document Type', {
-	refresh: function(frm) {
-
-	}
-});
diff --git a/erpnext/hr/doctype/identification_document_type/identification_document_type.json b/erpnext/hr/doctype/identification_document_type/identification_document_type.json
deleted file mode 100644
index 33cbde7..0000000
--- a/erpnext/hr/doctype/identification_document_type/identification_document_type.json
+++ /dev/null
@@ -1,93 +0,0 @@
-{
- "allow_copy": 0, 
- "allow_guest_to_view": 0, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "autoname": "field:identification_document_type", 
- "beta": 0, 
- "creation": "2018-05-15 07:13:28.620570", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "", 
- "editable_grid": 1, 
- "engine": "InnoDB", 
- "fields": [
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "identification_document_type", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Identification Document Type", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }
- ], 
- "has_web_view": 0, 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "image_view": 0, 
- "in_create": 0, 
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 0, 
- "max_attachments": 0, 
- "modified": "2018-05-16 04:34:00.448680", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Identification Document Type", 
- "name_case": "", 
- "owner": "Administrator", 
- "permissions": [
-  {
-   "amend": 0, 
-   "cancel": 0, 
-   "create": 1, 
-   "delete": 1, 
-   "email": 1, 
-   "export": 1, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 1, 
-   "role": "System Manager", 
-   "set_user_permissions": 0, 
-   "share": 1, 
-   "submit": 0, 
-   "write": 1
-  }
- ], 
- "quick_entry": 1, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "show_name_in_global_search": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "track_changes": 0, 
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/identification_document_type/identification_document_type.py b/erpnext/hr/doctype/identification_document_type/identification_document_type.py
deleted file mode 100644
index 3bfcfaa..0000000
--- a/erpnext/hr/doctype/identification_document_type/identification_document_type.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-from frappe.model.document import Document
-
-
-class IdentificationDocumentType(Document):
-	pass
diff --git a/erpnext/hr/doctype/identification_document_type/test_identification_document_type.py b/erpnext/hr/doctype/identification_document_type/test_identification_document_type.py
deleted file mode 100644
index 3e8f7ab..0000000
--- a/erpnext/hr/doctype/identification_document_type/test_identification_document_type.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-
-class TestIdentificationDocumentType(unittest.TestCase):
-	pass
diff --git a/erpnext/hr/doctype/interest/__init__.py b/erpnext/hr/doctype/interest/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/interest/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/interest/interest.js b/erpnext/hr/doctype/interest/interest.js
deleted file mode 100644
index 70e1b6a..0000000
--- a/erpnext/hr/doctype/interest/interest.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Interest', {
-	refresh: function(frm) {
-
-	}
-});
diff --git a/erpnext/hr/doctype/interest/interest.json b/erpnext/hr/doctype/interest/interest.json
deleted file mode 100644
index d6d2342..0000000
--- a/erpnext/hr/doctype/interest/interest.json
+++ /dev/null
@@ -1,144 +0,0 @@
-{
- "allow_copy": 0, 
- "allow_import": 1, 
- "allow_rename": 0, 
- "autoname": "field:interest", 
- "beta": 0, 
- "creation": "2016-07-25 07:12:33.600702", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "Setup", 
- "editable_grid": 1, 
- "fields": [
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "interest", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Interest", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }
- ], 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "image_view": 0, 
- "in_create": 0, 
-
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 0, 
- "max_attachments": 0, 
- "modified": "2016-08-01 05:47:29.479141", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Interest", 
- "name_case": "", 
- "owner": "Administrator", 
- "permissions": [
-  {
-   "amend": 0, 
-   "apply_user_permissions": 0, 
-   "cancel": 0, 
-   "create": 1, 
-   "delete": 1, 
-   "email": 1, 
-   "export": 1, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 1, 
-   "role": "Academics User", 
-   "set_user_permissions": 0, 
-   "share": 1, 
-   "submit": 0, 
-   "write": 1
-  }, 
-  {
-   "amend": 0, 
-   "apply_user_permissions": 0, 
-   "cancel": 0, 
-   "create": 1, 
-   "delete": 1, 
-   "email": 1, 
-   "export": 1, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 1, 
-   "role": "HR Manager", 
-   "set_user_permissions": 0, 
-   "share": 1, 
-   "submit": 0, 
-   "write": 1
-  }, 
-  {
-   "amend": 0, 
-   "apply_user_permissions": 0, 
-   "cancel": 0, 
-   "create": 1, 
-   "delete": 1, 
-   "email": 1, 
-   "export": 1, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 1, 
-   "role": "HR User", 
-   "set_user_permissions": 0, 
-   "share": 1, 
-   "submit": 0, 
-   "write": 1
-  }, 
-  {
-   "amend": 0, 
-   "apply_user_permissions": 0, 
-   "cancel": 0, 
-   "create": 0, 
-   "delete": 0, 
-   "email": 1, 
-   "export": 1, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 1, 
-   "role": "Employee", 
-   "set_user_permissions": 0, 
-   "share": 1, 
-   "submit": 0, 
-   "write": 0
-  }
- ], 
- "quick_entry": 1, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/interest/interest.py b/erpnext/hr/doctype/interest/interest.py
deleted file mode 100644
index 3563f7f..0000000
--- a/erpnext/hr/doctype/interest/interest.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-from frappe.model.document import Document
-
-
-class Interest(Document):
-	pass
diff --git a/erpnext/hr/doctype/interest/test_interest.py b/erpnext/hr/doctype/interest/test_interest.py
deleted file mode 100644
index eacb57f..0000000
--- a/erpnext/hr/doctype/interest/test_interest.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-# test_records = frappe.get_test_records('Interest')
-
-
-class TestInterest(unittest.TestCase):
-	pass
diff --git a/erpnext/hr/doctype/interview/__init__.py b/erpnext/hr/doctype/interview/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/interview/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/interview/interview.js b/erpnext/hr/doctype/interview/interview.js
deleted file mode 100644
index 6341e3a..0000000
--- a/erpnext/hr/doctype/interview/interview.js
+++ /dev/null
@@ -1,237 +0,0 @@
-// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Interview', {
-	onload: function (frm) {
-		frm.events.set_job_applicant_query(frm);
-
-		frm.set_query('interviewer', 'interview_details', function () {
-			return {
-				query: 'erpnext.hr.doctype.interview.interview.get_interviewer_list'
-			};
-		});
-	},
-
-	refresh: function (frm) {
-		if (frm.doc.docstatus != 2 && !frm.doc.__islocal) {
-			if (frm.doc.status === 'Pending') {
-				frm.add_custom_button(__('Reschedule Interview'), function() {
-					frm.events.show_reschedule_dialog(frm);
-					frm.refresh();
-				});
-			}
-
-			let allowed_interviewers = [];
-			frm.doc.interview_details.forEach(values => {
-				allowed_interviewers.push(values.interviewer);
-			});
-
-			if ((allowed_interviewers.includes(frappe.session.user))) {
-				frappe.db.get_value('Interview Feedback', {'interviewer': frappe.session.user, 'interview': frm.doc.name, 'docstatus': 1}, 'name', (r) => {
-					if (Object.keys(r).length === 0) {
-						frm.add_custom_button(__('Submit Feedback'), function () {
-							frappe.call({
-								method: 'erpnext.hr.doctype.interview.interview.get_expected_skill_set',
-								args: {
-									interview_round: frm.doc.interview_round
-								},
-								callback: function (r) {
-									frm.events.show_feedback_dialog(frm, r.message);
-									frm.refresh();
-								}
-							});
-						}).addClass('btn-primary');
-					}
-				});
-			}
-		}
-	},
-
-	show_reschedule_dialog: function (frm) {
-		let d = new frappe.ui.Dialog({
-			title: 'Reschedule Interview',
-			fields: [
-				{
-					label: 'Schedule On',
-					fieldname: 'scheduled_on',
-					fieldtype: 'Date',
-					reqd: 1
-				},
-				{
-					label: 'From Time',
-					fieldname: 'from_time',
-					fieldtype: 'Time',
-					reqd: 1
-				},
-				{
-					label: 'To Time',
-					fieldname: 'to_time',
-					fieldtype: 'Time',
-					reqd: 1
-				}
-			],
-			primary_action_label: 'Reschedule',
-			primary_action(values) {
-				frm.call({
-					method: 'reschedule_interview',
-					doc: frm.doc,
-					args: {
-						scheduled_on: values.scheduled_on,
-						from_time: values.from_time,
-						to_time: values.to_time
-					}
-				}).then(() => {
-					frm.refresh();
-					d.hide();
-				});
-			}
-		});
-		d.show();
-	},
-
-	show_feedback_dialog: function (frm, data) {
-		let fields = frm.events.get_fields_for_feedback();
-
-		let d = new frappe.ui.Dialog({
-			title: __('Submit Feedback'),
-			fields: [
-				{
-					fieldname: 'skill_set',
-					fieldtype: 'Table',
-					label: __('Skill Assessment'),
-					cannot_add_rows: false,
-					in_editable_grid: true,
-					reqd: 1,
-					fields: fields,
-					data: data
-				},
-				{
-					fieldname: 'result',
-					fieldtype: 'Select',
-					options: ['', 'Cleared', 'Rejected'],
-					label: __('Result')
-				},
-				{
-					fieldname: 'feedback',
-					fieldtype: 'Small Text',
-					label: __('Feedback')
-				}
-			],
-			size: 'large',
-			minimizable: true,
-			primary_action: function(values) {
-				frappe.call({
-					method: 'erpnext.hr.doctype.interview.interview.create_interview_feedback',
-					args: {
-						data: values,
-						interview_name: frm.doc.name,
-						interviewer: frappe.session.user,
-						job_applicant: frm.doc.job_applicant
-					}
-				}).then(() => {
-					frm.refresh();
-				});
-				d.hide();
-			}
-		});
-		d.show();
-	},
-
-	get_fields_for_feedback: function () {
-		return [{
-			fieldtype: 'Link',
-			fieldname: 'skill',
-			options: 'Skill',
-			in_list_view: 1,
-			label: __('Skill')
-		}, {
-			fieldtype: 'Rating',
-			fieldname: 'rating',
-			label: __('Rating'),
-			in_list_view: 1,
-			reqd: 1,
-		}];
-	},
-
-	set_job_applicant_query: function (frm) {
-		frm.set_query('job_applicant', function () {
-			let job_applicant_filters = {
-				status: ['!=', 'Rejected']
-			};
-			if (frm.doc.designation) {
-				job_applicant_filters.designation = frm.doc.designation;
-			}
-			return {
-				filters: job_applicant_filters
-			};
-		});
-	},
-
-	interview_round: async function (frm) {
-		frm.events.reset_values(frm);
-		frm.set_value('job_applicant', '');
-
-		let round_data = (await frappe.db.get_value('Interview Round', frm.doc.interview_round, 'designation')).message;
-		frm.set_value('designation', round_data.designation);
-		frm.events.set_job_applicant_query(frm);
-
-		if (frm.doc.interview_round) {
-			frm.events.set_interview_details(frm);
-		} else {
-			frm.set_value('interview_details', []);
-		}
-	},
-
-	set_interview_details: function (frm) {
-		frappe.call({
-			method: 'erpnext.hr.doctype.interview.interview.get_interviewers',
-			args: {
-				interview_round: frm.doc.interview_round
-			},
-			callback: function (data) {
-				let interview_details = data.message;
-				frm.set_value('interview_details', []);
-				if (data.message.length) {
-					frm.set_value('interview_details', interview_details);
-				}
-			}
-		});
-	},
-
-	job_applicant: function (frm) {
-		if (!frm.doc.interview_round) {
-			frm.doc.job_applicant = '';
-			frm.refresh();
-			frappe.throw(__('Select Interview Round First'));
-		}
-
-		if (frm.doc.job_applicant) {
-			frm.events.set_designation_and_job_opening(frm);
-		} else {
-			frm.events.reset_values(frm);
-		}
-	},
-
-	set_designation_and_job_opening: async function (frm) {
-		let round_data = (await frappe.db.get_value('Interview Round', frm.doc.interview_round, 'designation')).message;
-		frm.set_value('designation', round_data.designation);
-		frm.events.set_job_applicant_query(frm);
-
-		let job_applicant_data = (await frappe.db.get_value(
-			'Job Applicant', frm.doc.job_applicant, ['designation', 'job_title', 'resume_link'],
-		)).message;
-
-		if (!round_data.designation) {
-			frm.set_value('designation', job_applicant_data.designation);
-		}
-
-		frm.set_value('job_opening', job_applicant_data.job_title);
-		frm.set_value('resume_link', job_applicant_data.resume_link);
-	},
-
-	reset_values: function (frm) {
-		frm.set_value('designation', '');
-		frm.set_value('job_opening', '');
-		frm.set_value('resume_link', '');
-	}
-});
diff --git a/erpnext/hr/doctype/interview/interview.json b/erpnext/hr/doctype/interview/interview.json
deleted file mode 100644
index 0d393e7..0000000
--- a/erpnext/hr/doctype/interview/interview.json
+++ /dev/null
@@ -1,254 +0,0 @@
-{
- "actions": [],
- "autoname": "HR-INT-.YYYY.-.####",
- "creation": "2021-04-12 15:03:11.524090",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "interview_details_section",
-  "interview_round",
-  "job_applicant",
-  "job_opening",
-  "designation",
-  "resume_link",
-  "column_break_4",
-  "status",
-  "scheduled_on",
-  "from_time",
-  "to_time",
-  "interview_feedback_section",
-  "interview_details",
-  "ratings_section",
-  "expected_average_rating",
-  "column_break_12",
-  "average_rating",
-  "section_break_13",
-  "interview_summary",
-  "reminded",
-  "amended_from"
- ],
- "fields": [
-  {
-   "fieldname": "job_applicant",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Job Applicant",
-   "options": "Job Applicant",
-   "reqd": 1
-  },
-  {
-   "fieldname": "job_opening",
-   "fieldtype": "Link",
-   "label": "Job Opening",
-   "options": "Job Opening",
-   "read_only": 1
-  },
-  {
-   "fieldname": "interview_round",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Interview Round",
-   "options": "Interview Round",
-   "reqd": 1
-  },
-  {
-   "default": "Pending",
-   "fieldname": "status",
-   "fieldtype": "Select",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Status",
-   "options": "Pending\nUnder Review\nCleared\nRejected",
-   "reqd": 1
-  },
-  {
-   "fieldname": "ratings_section",
-   "fieldtype": "Section Break",
-   "label": "Ratings"
-  },
-  {
-   "allow_on_submit": 1,
-   "fieldname": "average_rating",
-   "fieldtype": "Rating",
-   "in_list_view": 1,
-   "label": "Obtained Average Rating",
-   "read_only": 1
-  },
-  {
-   "allow_on_submit": 1,
-   "fieldname": "interview_summary",
-   "fieldtype": "Text"
-  },
-  {
-   "fieldname": "column_break_4",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "resume_link",
-   "fieldtype": "Data",
-   "label": "Resume link"
-  },
-  {
-   "fieldname": "interview_details_section",
-   "fieldtype": "Section Break",
-   "label": "Details"
-  },
-  {
-   "fetch_from": "interview_round.expected_average_rating",
-   "fieldname": "expected_average_rating",
-   "fieldtype": "Rating",
-   "label": "Expected Average Rating",
-   "read_only": 1
-  },
-  {
-   "collapsible": 1,
-   "fieldname": "section_break_13",
-   "fieldtype": "Section Break",
-   "label": "Interview Summary"
-  },
-  {
-   "fieldname": "column_break_12",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fetch_from": "interview_round.designation",
-   "fieldname": "designation",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Designation",
-   "options": "Designation",
-   "read_only": 1
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "Interview",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "fieldname": "scheduled_on",
-   "fieldtype": "Date",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Scheduled On",
-   "reqd": 1,
-   "set_only_once": 1
-  },
-  {
-   "default": "0",
-   "fieldname": "reminded",
-   "fieldtype": "Check",
-   "hidden": 1,
-   "label": "Reminded"
-  },
-  {
-   "allow_on_submit": 1,
-   "fieldname": "interview_details",
-   "fieldtype": "Table",
-   "options": "Interview Detail"
-  },
-  {
-   "fieldname": "interview_feedback_section",
-   "fieldtype": "Section Break",
-   "label": "Feedback"
-  },
-  {
-   "fieldname": "from_time",
-   "fieldtype": "Time",
-   "in_list_view": 1,
-   "label": "From Time",
-   "reqd": 1,
-   "set_only_once": 1
-  },
-  {
-   "fieldname": "to_time",
-   "fieldtype": "Time",
-   "in_list_view": 1,
-   "label": "To Time",
-   "reqd": 1,
-   "set_only_once": 1
-  }
- ],
- "index_web_pages_for_search": 1,
- "is_submittable": 1,
- "links": [
-  {
-   "link_doctype": "Interview Feedback",
-   "link_fieldname": "interview"
-  }
- ],
- "modified": "2021-09-30 13:30:05.421035",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Interview",
- "owner": "Administrator",
- "permissions": [
-  {
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "Interviewer",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  }
- ],
- "sort_field": "modified",
- "sort_order": "DESC",
- "title_field": "job_applicant",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/interview/interview.py b/erpnext/hr/doctype/interview/interview.py
deleted file mode 100644
index a6e9af2..0000000
--- a/erpnext/hr/doctype/interview/interview.py
+++ /dev/null
@@ -1,355 +0,0 @@
-# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import datetime
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.utils import cstr, flt, get_datetime, get_link_to_form
-
-
-class DuplicateInterviewRoundError(frappe.ValidationError):
-	pass
-
-
-class Interview(Document):
-	def validate(self):
-		self.validate_duplicate_interview()
-		self.validate_designation()
-		self.validate_overlap()
-		self.set_average_rating()
-
-	def on_submit(self):
-		if self.status not in ["Cleared", "Rejected"]:
-			frappe.throw(
-				_("Only Interviews with Cleared or Rejected status can be submitted."), title=_("Not Allowed")
-			)
-
-	def validate_duplicate_interview(self):
-		duplicate_interview = frappe.db.exists(
-			"Interview",
-			{"job_applicant": self.job_applicant, "interview_round": self.interview_round, "docstatus": 1},
-		)
-
-		if duplicate_interview:
-			frappe.throw(
-				_(
-					"Job Applicants are not allowed to appear twice for the same Interview round. Interview {0} already scheduled for Job Applicant {1}"
-				).format(
-					frappe.bold(get_link_to_form("Interview", duplicate_interview)),
-					frappe.bold(self.job_applicant),
-				)
-			)
-
-	def validate_designation(self):
-		applicant_designation = frappe.db.get_value("Job Applicant", self.job_applicant, "designation")
-		if self.designation:
-			if self.designation != applicant_designation:
-				frappe.throw(
-					_(
-						"Interview Round {0} is only for Designation {1}. Job Applicant has applied for the role {2}"
-					).format(
-						self.interview_round, frappe.bold(self.designation), applicant_designation
-					),
-					exc=DuplicateInterviewRoundError,
-				)
-		else:
-			self.designation = applicant_designation
-
-	def validate_overlap(self):
-		interviewers = [entry.interviewer for entry in self.interview_details] or [""]
-
-		overlaps = frappe.db.sql(
-			"""
-			SELECT interview.name
-			FROM `tabInterview` as interview
-			INNER JOIN `tabInterview Detail` as detail
-			WHERE
-				interview.scheduled_on = %s and interview.name != %s and interview.docstatus != 2
-				and (interview.job_applicant = %s or detail.interviewer IN %s) and
-				((from_time < %s and to_time > %s) or
-				(from_time > %s and to_time < %s) or
-				(from_time = %s))
-			""",
-			(
-				self.scheduled_on,
-				self.name,
-				self.job_applicant,
-				interviewers,
-				self.from_time,
-				self.to_time,
-				self.from_time,
-				self.to_time,
-				self.from_time,
-			),
-		)
-
-		if overlaps:
-			overlapping_details = _("Interview overlaps with {0}").format(
-				get_link_to_form("Interview", overlaps[0][0])
-			)
-			frappe.throw(overlapping_details, title=_("Overlap"))
-
-	def set_average_rating(self):
-		total_rating = 0
-		for entry in self.interview_details:
-			if entry.average_rating:
-				total_rating += entry.average_rating
-
-		self.average_rating = flt(
-			total_rating / len(self.interview_details) if len(self.interview_details) else 0
-		)
-
-	@frappe.whitelist()
-	def reschedule_interview(self, scheduled_on, from_time, to_time):
-		original_date = self.scheduled_on
-		from_time = self.from_time
-		to_time = self.to_time
-
-		self.db_set({"scheduled_on": scheduled_on, "from_time": from_time, "to_time": to_time})
-		self.notify_update()
-
-		recipients = get_recipients(self.name)
-
-		try:
-			frappe.sendmail(
-				recipients=recipients,
-				subject=_("Interview: {0} Rescheduled").format(self.name),
-				message=_("Your Interview session is rescheduled from {0} {1} - {2} to {3} {4} - {5}").format(
-					original_date, from_time, to_time, self.scheduled_on, self.from_time, self.to_time
-				),
-				reference_doctype=self.doctype,
-				reference_name=self.name,
-			)
-		except Exception:
-			frappe.msgprint(
-				_("Failed to send the Interview Reschedule notification. Please configure your email account.")
-			)
-
-		frappe.msgprint(_("Interview Rescheduled successfully"), indicator="green")
-
-
-def get_recipients(name, for_feedback=0):
-	interview = frappe.get_doc("Interview", name)
-
-	if for_feedback:
-		recipients = [d.interviewer for d in interview.interview_details if not d.interview_feedback]
-	else:
-		recipients = [d.interviewer for d in interview.interview_details]
-		recipients.append(frappe.db.get_value("Job Applicant", interview.job_applicant, "email_id"))
-
-	return recipients
-
-
-@frappe.whitelist()
-def get_interviewers(interview_round):
-	return frappe.get_all(
-		"Interviewer", filters={"parent": interview_round}, fields=["user as interviewer"]
-	)
-
-
-def send_interview_reminder():
-	reminder_settings = frappe.db.get_value(
-		"HR Settings",
-		"HR Settings",
-		["send_interview_reminder", "interview_reminder_template"],
-		as_dict=True,
-	)
-
-	if not reminder_settings.send_interview_reminder:
-		return
-
-	remind_before = cstr(frappe.db.get_single_value("HR Settings", "remind_before")) or "01:00:00"
-	remind_before = datetime.datetime.strptime(remind_before, "%H:%M:%S")
-	reminder_date_time = datetime.datetime.now() + datetime.timedelta(
-		hours=remind_before.hour, minutes=remind_before.minute, seconds=remind_before.second
-	)
-
-	interviews = frappe.get_all(
-		"Interview",
-		filters={
-			"scheduled_on": ["between", (datetime.datetime.now(), reminder_date_time)],
-			"status": "Pending",
-			"reminded": 0,
-			"docstatus": ["!=", 2],
-		},
-	)
-
-	interview_template = frappe.get_doc(
-		"Email Template", reminder_settings.interview_reminder_template
-	)
-
-	for d in interviews:
-		doc = frappe.get_doc("Interview", d.name)
-		context = doc.as_dict()
-		message = frappe.render_template(interview_template.response, context)
-		recipients = get_recipients(doc.name)
-
-		frappe.sendmail(
-			recipients=recipients,
-			subject=interview_template.subject,
-			message=message,
-			reference_doctype=doc.doctype,
-			reference_name=doc.name,
-		)
-
-		doc.db_set("reminded", 1)
-
-
-def send_daily_feedback_reminder():
-	reminder_settings = frappe.db.get_value(
-		"HR Settings",
-		"HR Settings",
-		["send_interview_feedback_reminder", "feedback_reminder_notification_template"],
-		as_dict=True,
-	)
-
-	if not reminder_settings.send_interview_feedback_reminder:
-		return
-
-	interview_feedback_template = frappe.get_doc(
-		"Email Template", reminder_settings.feedback_reminder_notification_template
-	)
-	interviews = frappe.get_all(
-		"Interview", filters={"status": ["in", ["Under Review", "Pending"]], "docstatus": ["!=", 2]}
-	)
-
-	for entry in interviews:
-		recipients = get_recipients(entry.name, for_feedback=1)
-
-		doc = frappe.get_doc("Interview", entry.name)
-		context = doc.as_dict()
-
-		message = frappe.render_template(interview_feedback_template.response, context)
-
-		if len(recipients):
-			frappe.sendmail(
-				recipients=recipients,
-				subject=interview_feedback_template.subject,
-				message=message,
-				reference_doctype="Interview",
-				reference_name=entry.name,
-			)
-
-
-@frappe.whitelist()
-def get_expected_skill_set(interview_round):
-	return frappe.get_all("Expected Skill Set", filters={"parent": interview_round}, fields=["skill"])
-
-
-@frappe.whitelist()
-def create_interview_feedback(data, interview_name, interviewer, job_applicant):
-	import json
-
-	if isinstance(data, str):
-		data = frappe._dict(json.loads(data))
-
-	if frappe.session.user != interviewer:
-		frappe.throw(_("Only Interviewer Are allowed to submit Interview Feedback"))
-
-	interview_feedback = frappe.new_doc("Interview Feedback")
-	interview_feedback.interview = interview_name
-	interview_feedback.interviewer = interviewer
-	interview_feedback.job_applicant = job_applicant
-
-	for d in data.skill_set:
-		d = frappe._dict(d)
-		interview_feedback.append("skill_assessment", {"skill": d.skill, "rating": d.rating})
-
-	interview_feedback.feedback = data.feedback
-	interview_feedback.result = data.result
-
-	interview_feedback.save()
-	interview_feedback.submit()
-
-	frappe.msgprint(
-		_("Interview Feedback {0} submitted successfully").format(
-			get_link_to_form("Interview Feedback", interview_feedback.name)
-		)
-	)
-
-
-@frappe.whitelist()
-@frappe.validate_and_sanitize_search_inputs
-def get_interviewer_list(doctype, txt, searchfield, start, page_len, filters):
-	filters = [
-		["Has Role", "parent", "like", "%{}%".format(txt)],
-		["Has Role", "role", "=", "interviewer"],
-		["Has Role", "parenttype", "=", "User"],
-	]
-
-	if filters and isinstance(filters, list):
-		filters.extend(filters)
-
-	return frappe.get_all(
-		"Has Role",
-		limit_start=start,
-		limit_page_length=page_len,
-		filters=filters,
-		fields=["parent"],
-		as_list=1,
-	)
-
-
-@frappe.whitelist()
-def get_events(start, end, filters=None):
-	"""Returns events for Gantt / Calendar view rendering.
-
-	:param start: Start date-time.
-	:param end: End date-time.
-	:param filters: Filters (JSON).
-	"""
-	from frappe.desk.calendar import get_event_conditions
-
-	events = []
-
-	event_color = {
-		"Pending": "#fff4f0",
-		"Under Review": "#d3e8fc",
-		"Cleared": "#eaf5ed",
-		"Rejected": "#fce7e7",
-	}
-
-	conditions = get_event_conditions("Interview", filters)
-
-	interviews = frappe.db.sql(
-		"""
-			SELECT DISTINCT
-				`tabInterview`.name, `tabInterview`.job_applicant, `tabInterview`.interview_round,
-				`tabInterview`.scheduled_on, `tabInterview`.status, `tabInterview`.from_time as from_time,
-				`tabInterview`.to_time as to_time
-			from
-				`tabInterview`
-			where
-				(`tabInterview`.scheduled_on between %(start)s and %(end)s)
-				and docstatus != 2
-				{conditions}
-			""".format(
-			conditions=conditions
-		),
-		{"start": start, "end": end},
-		as_dict=True,
-		update={"allDay": 0},
-	)
-
-	for d in interviews:
-		subject_data = []
-		for field in ["name", "job_applicant", "interview_round"]:
-			if not d.get(field):
-				continue
-			subject_data.append(d.get(field))
-
-		color = event_color.get(d.status)
-		interview_data = {
-			"from": get_datetime("%s %s" % (d.scheduled_on, d.from_time or "00:00:00")),
-			"to": get_datetime("%s %s" % (d.scheduled_on, d.to_time or "00:00:00")),
-			"name": d.name,
-			"subject": "\n".join(subject_data),
-			"color": color if color else "#89bcde",
-		}
-
-		events.append(interview_data)
-
-	return events
diff --git a/erpnext/hr/doctype/interview/interview_calendar.js b/erpnext/hr/doctype/interview/interview_calendar.js
deleted file mode 100644
index b46b72e..0000000
--- a/erpnext/hr/doctype/interview/interview_calendar.js
+++ /dev/null
@@ -1,14 +0,0 @@
-
-frappe.views.calendar['Interview'] = {
-	field_map: {
-		'start': 'from',
-		'end': 'to',
-		'id': 'name',
-		'title': 'subject',
-		'allDay': 'allDay',
-		'color': 'color'
-	},
-	order_by: 'scheduled_on',
-	gantt: true,
-	get_events_method: 'erpnext.hr.doctype.interview.interview.get_events'
-};
diff --git a/erpnext/hr/doctype/interview/interview_feedback_reminder_template.html b/erpnext/hr/doctype/interview/interview_feedback_reminder_template.html
deleted file mode 100644
index 8d39fb5..0000000
--- a/erpnext/hr/doctype/interview/interview_feedback_reminder_template.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<h1>Interview Feedback Reminder</h1>
-
-<p>
-	Interview Feedback for Interview {{ name }} is not submitted yet. Please submit your feedback. Thank you, good day!
-</p>
diff --git a/erpnext/hr/doctype/interview/interview_list.js b/erpnext/hr/doctype/interview/interview_list.js
deleted file mode 100644
index b1f072f..0000000
--- a/erpnext/hr/doctype/interview/interview_list.js
+++ /dev/null
@@ -1,12 +0,0 @@
-frappe.listview_settings['Interview'] = {
-	has_indicator_for_draft: 1,
-	get_indicator: function(doc) {
-		let status_color = {
-			'Pending': 'orange',
-			'Under Review': 'blue',
-			'Cleared': 'green',
-			'Rejected': 'red',
-		};
-		return [__(doc.status), status_color[doc.status], 'status,=,'+doc.status];
-	}
-};
diff --git a/erpnext/hr/doctype/interview/interview_reminder_notification_template.html b/erpnext/hr/doctype/interview/interview_reminder_notification_template.html
deleted file mode 100644
index 76de46e..0000000
--- a/erpnext/hr/doctype/interview/interview_reminder_notification_template.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<h1>Interview Reminder</h1>
-
-<p>
-	Interview: {{name}} is scheduled on {{scheduled_on}} from {{from_time}} to {{to_time}}
-</p>
diff --git a/erpnext/hr/doctype/interview/test_interview.py b/erpnext/hr/doctype/interview/test_interview.py
deleted file mode 100644
index ae8493a..0000000
--- a/erpnext/hr/doctype/interview/test_interview.py
+++ /dev/null
@@ -1,209 +0,0 @@
-# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import datetime
-import os
-import unittest
-
-import frappe
-from frappe import _
-from frappe.core.doctype.user_permission.test_user_permission import create_user
-from frappe.utils import add_days, getdate, nowtime
-
-from erpnext.hr.doctype.designation.test_designation import create_designation
-from erpnext.hr.doctype.interview.interview import DuplicateInterviewRoundError
-from erpnext.hr.doctype.job_applicant.job_applicant import get_interview_details
-from erpnext.hr.doctype.job_applicant.test_job_applicant import create_job_applicant
-
-
-class TestInterview(unittest.TestCase):
-	def test_validations_for_designation(self):
-		job_applicant = create_job_applicant()
-		interview = create_interview_and_dependencies(
-			job_applicant.name, designation="_Test_Sales_manager", save=0
-		)
-		self.assertRaises(DuplicateInterviewRoundError, interview.save)
-
-	def test_notification_on_rescheduling(self):
-		job_applicant = create_job_applicant()
-		interview = create_interview_and_dependencies(
-			job_applicant.name, scheduled_on=add_days(getdate(), -4)
-		)
-
-		previous_scheduled_date = interview.scheduled_on
-		frappe.db.sql("DELETE FROM `tabEmail Queue`")
-
-		interview.reschedule_interview(
-			add_days(getdate(previous_scheduled_date), 2), from_time=nowtime(), to_time=nowtime()
-		)
-		interview.reload()
-
-		self.assertEqual(interview.scheduled_on, add_days(getdate(previous_scheduled_date), 2))
-
-		notification = frappe.get_all(
-			"Email Queue", filters={"message": ("like", "%Your Interview session is rescheduled from%")}
-		)
-		self.assertIsNotNone(notification)
-
-	def test_notification_for_scheduling(self):
-		from erpnext.hr.doctype.interview.interview import send_interview_reminder
-
-		setup_reminder_settings()
-
-		job_applicant = create_job_applicant()
-		scheduled_on = datetime.datetime.now() + datetime.timedelta(minutes=10)
-
-		interview = create_interview_and_dependencies(job_applicant.name, scheduled_on=scheduled_on)
-
-		frappe.db.sql("DELETE FROM `tabEmail Queue`")
-		send_interview_reminder()
-
-		interview.reload()
-
-		email_queue = frappe.db.sql("""select * from `tabEmail Queue`""", as_dict=True)
-		self.assertTrue("Subject: Interview Reminder" in email_queue[0].message)
-
-	def test_notification_for_feedback_submission(self):
-		from erpnext.hr.doctype.interview.interview import send_daily_feedback_reminder
-
-		setup_reminder_settings()
-
-		job_applicant = create_job_applicant()
-		scheduled_on = add_days(getdate(), -4)
-		create_interview_and_dependencies(job_applicant.name, scheduled_on=scheduled_on)
-
-		frappe.db.sql("DELETE FROM `tabEmail Queue`")
-		send_daily_feedback_reminder()
-
-		email_queue = frappe.db.sql("""select * from `tabEmail Queue`""", as_dict=True)
-		self.assertTrue("Subject: Interview Feedback Reminder" in email_queue[0].message)
-
-	def test_get_interview_details_for_applicant_dashboard(self):
-		job_applicant = create_job_applicant()
-		interview = create_interview_and_dependencies(job_applicant.name)
-
-		details = get_interview_details(job_applicant.name)
-		self.assertEqual(details.get("stars"), 5)
-		self.assertEqual(
-			details.get("interviews").get(interview.name),
-			{
-				"name": interview.name,
-				"interview_round": interview.interview_round,
-				"expected_average_rating": interview.expected_average_rating * 5,
-				"average_rating": interview.average_rating * 5,
-				"status": "Pending",
-			},
-		)
-
-	def tearDown(self):
-		frappe.db.rollback()
-
-
-def create_interview_and_dependencies(
-	job_applicant, scheduled_on=None, from_time=None, to_time=None, designation=None, save=1
-):
-	if designation:
-		designation = create_designation(designation_name="_Test_Sales_manager").name
-
-	interviewer_1 = create_user("test_interviewer1@example.com", "Interviewer")
-	interviewer_2 = create_user("test_interviewer2@example.com", "Interviewer")
-
-	interview_round = create_interview_round(
-		"Technical Round", ["Python", "JS"], designation=designation, save=True
-	)
-
-	interview = frappe.new_doc("Interview")
-	interview.interview_round = interview_round.name
-	interview.job_applicant = job_applicant
-	interview.scheduled_on = scheduled_on or getdate()
-	interview.from_time = from_time or nowtime()
-	interview.to_time = to_time or nowtime()
-
-	interview.append("interview_details", {"interviewer": interviewer_1.name})
-	interview.append("interview_details", {"interviewer": interviewer_2.name})
-
-	if save:
-		interview.save()
-
-	return interview
-
-
-def create_interview_round(name, skill_set, interviewers=[], designation=None, save=True):
-	create_skill_set(skill_set)
-	interview_round = frappe.new_doc("Interview Round")
-	interview_round.round_name = name
-	interview_round.interview_type = create_interview_type()
-	# average rating = 4
-	interview_round.expected_average_rating = 0.8
-	if designation:
-		interview_round.designation = designation
-
-	for skill in skill_set:
-		interview_round.append("expected_skill_set", {"skill": skill})
-
-	for interviewer in interviewers:
-		interview_round.append("interviewer", {"user": interviewer})
-
-	if save:
-		interview_round.save()
-
-	return interview_round
-
-
-def create_skill_set(skill_set):
-	for skill in skill_set:
-		if not frappe.db.exists("Skill", skill):
-			doc = frappe.new_doc("Skill")
-			doc.skill_name = skill
-			doc.save()
-
-
-def create_interview_type(name="test_interview_type"):
-	if frappe.db.exists("Interview Type", name):
-		return frappe.get_doc("Interview Type", name).name
-	else:
-		doc = frappe.new_doc("Interview Type")
-		doc.name = name
-		doc.description = "_Test_Description"
-		doc.save()
-
-		return doc.name
-
-
-def setup_reminder_settings():
-	if not frappe.db.exists("Email Template", _("Interview Reminder")):
-		base_path = frappe.get_app_path("erpnext", "hr", "doctype")
-		response = frappe.read_file(
-			os.path.join(base_path, "interview/interview_reminder_notification_template.html")
-		)
-
-		frappe.get_doc(
-			{
-				"doctype": "Email Template",
-				"name": _("Interview Reminder"),
-				"response": response,
-				"subject": _("Interview Reminder"),
-				"owner": frappe.session.user,
-			}
-		).insert(ignore_permissions=True)
-
-	if not frappe.db.exists("Email Template", _("Interview Feedback Reminder")):
-		base_path = frappe.get_app_path("erpnext", "hr", "doctype")
-		response = frappe.read_file(
-			os.path.join(base_path, "interview/interview_feedback_reminder_template.html")
-		)
-
-		frappe.get_doc(
-			{
-				"doctype": "Email Template",
-				"name": _("Interview Feedback Reminder"),
-				"response": response,
-				"subject": _("Interview Feedback Reminder"),
-				"owner": frappe.session.user,
-			}
-		).insert(ignore_permissions=True)
-
-	hr_settings = frappe.get_doc("HR Settings")
-	hr_settings.interview_reminder_template = _("Interview Reminder")
-	hr_settings.feedback_reminder_notification_template = _("Interview Feedback Reminder")
-	hr_settings.save()
diff --git a/erpnext/hr/doctype/interview_detail/__init__.py b/erpnext/hr/doctype/interview_detail/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/interview_detail/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/interview_detail/interview_detail.js b/erpnext/hr/doctype/interview_detail/interview_detail.js
deleted file mode 100644
index 88518ca..0000000
--- a/erpnext/hr/doctype/interview_detail/interview_detail.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Interview Detail', {
-	// refresh: function(frm) {
-
-	// }
-});
diff --git a/erpnext/hr/doctype/interview_detail/interview_detail.json b/erpnext/hr/doctype/interview_detail/interview_detail.json
deleted file mode 100644
index b5b49c0..0000000
--- a/erpnext/hr/doctype/interview_detail/interview_detail.json
+++ /dev/null
@@ -1,74 +0,0 @@
-{
- "actions": [],
- "creation": "2021-04-12 16:24:10.382863",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "interviewer",
-  "interview_feedback",
-  "average_rating",
-  "result",
-  "column_break_4",
-  "comments"
- ],
- "fields": [
-  {
-   "fieldname": "interviewer",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Interviewer",
-   "options": "User"
-  },
-  {
-   "allow_on_submit": 1,
-   "fieldname": "interview_feedback",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Interview Feedback",
-   "options": "Interview Feedback",
-   "read_only": 1
-  },
-  {
-   "allow_on_submit": 1,
-   "fieldname": "average_rating",
-   "fieldtype": "Rating",
-   "in_list_view": 1,
-   "label": "Average Rating",
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break_4",
-   "fieldtype": "Column Break"
-  },
-  {
-   "allow_on_submit": 1,
-   "fetch_from": "interview_feedback.feedback",
-   "fieldname": "comments",
-   "fieldtype": "Text",
-   "label": "Comments",
-   "read_only": 1
-  },
-  {
-   "allow_on_submit": 1,
-   "fieldname": "result",
-   "fieldtype": "Select",
-   "in_list_view": 1,
-   "label": "Result",
-   "options": "\nCleared\nRejected",
-   "read_only": 1
-  }
- ],
- "index_web_pages_for_search": 1,
- "istable": 1,
- "links": [],
- "modified": "2021-09-29 13:13:25.865063",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Interview Detail",
- "owner": "Administrator",
- "permissions": [],
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/interview_detail/interview_detail.py b/erpnext/hr/doctype/interview_detail/interview_detail.py
deleted file mode 100644
index d44e29a..0000000
--- a/erpnext/hr/doctype/interview_detail/interview_detail.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-# import frappe
-from frappe.model.document import Document
-
-
-class InterviewDetail(Document):
-	pass
diff --git a/erpnext/hr/doctype/interview_detail/test_interview_detail.py b/erpnext/hr/doctype/interview_detail/test_interview_detail.py
deleted file mode 100644
index 68a1f72..0000000
--- a/erpnext/hr/doctype/interview_detail/test_interview_detail.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-# import frappe
-import unittest
-
-
-class TestInterviewDetail(unittest.TestCase):
-	pass
diff --git a/erpnext/hr/doctype/interview_feedback/__init__.py b/erpnext/hr/doctype/interview_feedback/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/interview_feedback/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/interview_feedback/interview_feedback.js b/erpnext/hr/doctype/interview_feedback/interview_feedback.js
deleted file mode 100644
index dec559f..0000000
--- a/erpnext/hr/doctype/interview_feedback/interview_feedback.js
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Interview Feedback', {
-	onload: function(frm) {
-		frm.ignore_doctypes_on_cancel_all = ['Interview'];
-
-		frm.set_query('interview', function() {
-			return {
-				filters: {
-					docstatus: ['!=', 2]
-				}
-			};
-		});
-	},
-
-	interview_round: function(frm) {
-		frappe.call({
-			method: 'erpnext.hr.doctype.interview.interview.get_expected_skill_set',
-			args: {
-				interview_round: frm.doc.interview_round
-			},
-			callback: function(r) {
-				frm.set_value('skill_assessment', r.message);
-			}
-		});
-	},
-
-	interview: function(frm) {
-		frappe.call({
-			method: 'erpnext.hr.doctype.interview_feedback.interview_feedback.get_applicable_interviewers',
-			args: {
-				interview: frm.doc.interview || ''
-			},
-			callback: function(r) {
-				frm.set_query('interviewer', function() {
-					return {
-						filters: {
-							name: ['in', r.message]
-						}
-					};
-				});
-			}
-		});
-
-	},
-
-	interviewer: function(frm) {
-		if (!frm.doc.interview) {
-			frappe.throw(__('Select Interview first'));
-			frm.set_value('interviewer', '');
-		}
-	}
-});
diff --git a/erpnext/hr/doctype/interview_feedback/interview_feedback.json b/erpnext/hr/doctype/interview_feedback/interview_feedback.json
deleted file mode 100644
index 6a2f7e8..0000000
--- a/erpnext/hr/doctype/interview_feedback/interview_feedback.json
+++ /dev/null
@@ -1,171 +0,0 @@
-{
- "actions": [],
- "autoname": "HR-INT-FEED-.####",
- "creation": "2021-04-12 17:03:13.833285",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "details_section",
-  "interview",
-  "interview_round",
-  "job_applicant",
-  "column_break_3",
-  "interviewer",
-  "result",
-  "section_break_4",
-  "skill_assessment",
-  "average_rating",
-  "section_break_7",
-  "feedback",
-  "amended_from"
- ],
- "fields": [
-  {
-   "allow_in_quick_entry": 1,
-   "fieldname": "interview",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Interview",
-   "options": "Interview",
-   "reqd": 1
-  },
-  {
-   "allow_in_quick_entry": 1,
-   "fetch_from": "interview.interview_round",
-   "fieldname": "interview_round",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Interview Round",
-   "options": "Interview Round",
-   "read_only": 1,
-   "reqd": 1
-  },
-  {
-   "allow_in_quick_entry": 1,
-   "fieldname": "interviewer",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Interviewer",
-   "options": "User",
-   "reqd": 1
-  },
-  {
-   "fieldname": "section_break_4",
-   "fieldtype": "Section Break",
-   "label": "Skill Assessment"
-  },
-  {
-   "allow_in_quick_entry": 1,
-   "fieldname": "skill_assessment",
-   "fieldtype": "Table",
-   "options": "Skill Assessment",
-   "reqd": 1
-  },
-  {
-   "allow_in_quick_entry": 1,
-   "fieldname": "average_rating",
-   "fieldtype": "Rating",
-   "in_list_view": 1,
-   "label": "Average Rating",
-   "read_only": 1
-  },
-  {
-   "fieldname": "section_break_7",
-   "fieldtype": "Section Break",
-   "label": "Feedback"
-  },
-  {
-   "fieldname": "column_break_3",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "Interview Feedback",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "allow_in_quick_entry": 1,
-   "fieldname": "feedback",
-   "fieldtype": "Text"
-  },
-  {
-   "fieldname": "result",
-   "fieldtype": "Select",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Result",
-   "options": "\nCleared\nRejected",
-   "reqd": 1
-  },
-  {
-   "fieldname": "details_section",
-   "fieldtype": "Section Break",
-   "label": "Details"
-  },
-  {
-   "fetch_from": "interview.job_applicant",
-   "fieldname": "job_applicant",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Job Applicant",
-   "options": "Job Applicant",
-   "read_only": 1
-  }
- ],
- "index_web_pages_for_search": 1,
- "is_submittable": 1,
- "links": [],
- "modified": "2021-09-30 13:30:49.955352",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Interview Feedback",
- "owner": "Administrator",
- "permissions": [
-  {
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1
-  },
-  {
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "Interviewer",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1
-  }
- ],
- "quick_entry": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "title_field": "interviewer",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/interview_feedback/interview_feedback.py b/erpnext/hr/doctype/interview_feedback/interview_feedback.py
deleted file mode 100644
index 5bb498f..0000000
--- a/erpnext/hr/doctype/interview_feedback/interview_feedback.py
+++ /dev/null
@@ -1,91 +0,0 @@
-# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.utils import flt, get_link_to_form, getdate
-
-
-class InterviewFeedback(Document):
-	def validate(self):
-		self.validate_interviewer()
-		self.validate_interview_date()
-		self.validate_duplicate()
-		self.calculate_average_rating()
-
-	def on_submit(self):
-		self.update_interview_details()
-
-	def on_cancel(self):
-		self.update_interview_details()
-
-	def validate_interviewer(self):
-		applicable_interviewers = get_applicable_interviewers(self.interview)
-		if self.interviewer not in applicable_interviewers:
-			frappe.throw(
-				_("{0} is not allowed to submit Interview Feedback for the Interview: {1}").format(
-					frappe.bold(self.interviewer), frappe.bold(self.interview)
-				)
-			)
-
-	def validate_interview_date(self):
-		scheduled_date = frappe.db.get_value("Interview", self.interview, "scheduled_on")
-
-		if getdate() < getdate(scheduled_date) and self.docstatus == 1:
-			frappe.throw(
-				_("{0} submission before {1} is not allowed").format(
-					frappe.bold("Interview Feedback"), frappe.bold("Interview Scheduled Date")
-				)
-			)
-
-	def validate_duplicate(self):
-		duplicate_feedback = frappe.db.exists(
-			"Interview Feedback",
-			{"interviewer": self.interviewer, "interview": self.interview, "docstatus": 1},
-		)
-
-		if duplicate_feedback:
-			frappe.throw(
-				_(
-					"Feedback already submitted for the Interview {0}. Please cancel the previous Interview Feedback {1} to continue."
-				).format(
-					self.interview, get_link_to_form("Interview Feedback", duplicate_feedback)
-				)
-			)
-
-	def calculate_average_rating(self):
-		total_rating = 0
-		for d in self.skill_assessment:
-			if d.rating:
-				total_rating += d.rating
-
-		self.average_rating = flt(
-			total_rating / len(self.skill_assessment) if len(self.skill_assessment) else 0
-		)
-
-	def update_interview_details(self):
-		doc = frappe.get_doc("Interview", self.interview)
-
-		if self.docstatus == 2:
-			for entry in doc.interview_details:
-				if entry.interview_feedback == self.name:
-					entry.average_rating = entry.interview_feedback = entry.comments = entry.result = None
-					break
-		else:
-			for entry in doc.interview_details:
-				if entry.interviewer == self.interviewer:
-					entry.average_rating = self.average_rating
-					entry.interview_feedback = self.name
-					entry.comments = self.feedback
-					entry.result = self.result
-
-		doc.save()
-		doc.notify_update()
-
-
-@frappe.whitelist()
-def get_applicable_interviewers(interview):
-	data = frappe.get_all("Interview Detail", filters={"parent": interview}, fields=["interviewer"])
-	return [d.interviewer for d in data]
diff --git a/erpnext/hr/doctype/interview_feedback/test_interview_feedback.py b/erpnext/hr/doctype/interview_feedback/test_interview_feedback.py
deleted file mode 100644
index 63d4775..0000000
--- a/erpnext/hr/doctype/interview_feedback/test_interview_feedback.py
+++ /dev/null
@@ -1,113 +0,0 @@
-# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-import frappe
-from frappe.utils import add_days, flt, getdate
-
-from erpnext.hr.doctype.interview.test_interview import (
-	create_interview_and_dependencies,
-	create_skill_set,
-)
-from erpnext.hr.doctype.job_applicant.test_job_applicant import create_job_applicant
-
-
-class TestInterviewFeedback(unittest.TestCase):
-	def test_validation_for_skill_set(self):
-		frappe.set_user("Administrator")
-		job_applicant = create_job_applicant()
-		interview = create_interview_and_dependencies(
-			job_applicant.name, scheduled_on=add_days(getdate(), -1)
-		)
-		skill_ratings = get_skills_rating(interview.interview_round)
-
-		interviewer = interview.interview_details[0].interviewer
-		create_skill_set(["Leadership"])
-
-		interview_feedback = create_interview_feedback(interview.name, interviewer, skill_ratings)
-		interview_feedback.append("skill_assessment", {"skill": "Leadership", "rating": 0.8})
-		frappe.set_user(interviewer)
-
-		self.assertRaises(frappe.ValidationError, interview_feedback.save)
-
-		frappe.set_user("Administrator")
-
-	def test_average_ratings_on_feedback_submission_and_cancellation(self):
-		job_applicant = create_job_applicant()
-		interview = create_interview_and_dependencies(
-			job_applicant.name, scheduled_on=add_days(getdate(), -1)
-		)
-		skill_ratings = get_skills_rating(interview.interview_round)
-
-		# For First Interviewer Feedback
-		interviewer = interview.interview_details[0].interviewer
-		frappe.set_user(interviewer)
-
-		# calculating Average
-		feedback_1 = create_interview_feedback(interview.name, interviewer, skill_ratings)
-
-		total_rating = 0
-		for d in feedback_1.skill_assessment:
-			if d.rating:
-				total_rating += d.rating
-
-		avg_rating = flt(
-			total_rating / len(feedback_1.skill_assessment) if len(feedback_1.skill_assessment) else 0
-		)
-
-		self.assertEqual(flt(avg_rating, 2), flt(feedback_1.average_rating, 2))
-
-		avg_on_interview_detail = frappe.db.get_value(
-			"Interview Detail",
-			{
-				"parent": feedback_1.interview,
-				"interviewer": feedback_1.interviewer,
-				"interview_feedback": feedback_1.name,
-			},
-			"average_rating",
-		)
-
-		# 1. average should be reflected in Interview Detail.
-		self.assertEqual(flt(avg_on_interview_detail, 2), flt(feedback_1.average_rating, 2))
-
-		"""For Second Interviewer Feedback"""
-		interviewer = interview.interview_details[1].interviewer
-		frappe.set_user(interviewer)
-
-		feedback_2 = create_interview_feedback(interview.name, interviewer, skill_ratings)
-		interview.reload()
-
-		feedback_2.cancel()
-		interview.reload()
-
-		frappe.set_user("Administrator")
-
-	def tearDown(self):
-		frappe.db.rollback()
-
-
-def create_interview_feedback(interview, interviewer, skills_ratings):
-	interview_feedback = frappe.new_doc("Interview Feedback")
-	interview_feedback.interview = interview
-	interview_feedback.interviewer = interviewer
-	interview_feedback.result = "Cleared"
-
-	for rating in skills_ratings:
-		interview_feedback.append("skill_assessment", rating)
-
-	interview_feedback.save()
-	interview_feedback.submit()
-
-	return interview_feedback
-
-
-def get_skills_rating(interview_round):
-	import random
-
-	skills = frappe.get_all(
-		"Expected Skill Set", filters={"parent": interview_round}, fields=["skill"]
-	)
-	for d in skills:
-		d["rating"] = random.random()
-	return skills
diff --git a/erpnext/hr/doctype/interview_round/__init__.py b/erpnext/hr/doctype/interview_round/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/interview_round/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/interview_round/interview_round.js b/erpnext/hr/doctype/interview_round/interview_round.js
deleted file mode 100644
index 6a608b0..0000000
--- a/erpnext/hr/doctype/interview_round/interview_round.js
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on("Interview Round", {
-	refresh: function(frm) {
-		if (!frm.doc.__islocal) {
-			frm.add_custom_button(__("Create Interview"), function() {
-				frm.events.create_interview(frm);
-			});
-		}
-	},
-	create_interview: function(frm) {
-		frappe.call({
-			method: "erpnext.hr.doctype.interview_round.interview_round.create_interview",
-			args: {
-				doc: frm.doc
-			},
-			callback: function (r) {
-				var doclist = frappe.model.sync(r.message);
-				frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
-			}
-		});
-	}
-});
diff --git a/erpnext/hr/doctype/interview_round/interview_round.json b/erpnext/hr/doctype/interview_round/interview_round.json
deleted file mode 100644
index 9c95185..0000000
--- a/erpnext/hr/doctype/interview_round/interview_round.json
+++ /dev/null
@@ -1,118 +0,0 @@
-{
- "actions": [],
- "allow_rename": 1,
- "autoname": "field:round_name",
- "creation": "2021-04-12 12:57:19.902866",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "round_name",
-  "interview_type",
-  "interviewers",
-  "column_break_3",
-  "designation",
-  "expected_average_rating",
-  "expected_skills_section",
-  "expected_skill_set"
- ],
- "fields": [
-  {
-   "fieldname": "round_name",
-   "fieldtype": "Data",
-   "in_list_view": 1,
-   "label": "Round Name",
-   "reqd": 1,
-   "unique": 1
-  },
-  {
-   "fieldname": "designation",
-   "fieldtype": "Link",
-   "label": "Designation",
-   "options": "Designation"
-  },
-  {
-   "fieldname": "expected_skills_section",
-   "fieldtype": "Section Break",
-   "label": "Expected Skillset"
-  },
-  {
-   "fieldname": "expected_skill_set",
-   "fieldtype": "Table",
-   "options": "Expected Skill Set",
-   "reqd": 1
-  },
-  {
-   "fieldname": "expected_average_rating",
-   "fieldtype": "Rating",
-   "label": "Expected Average Rating",
-   "reqd": 1
-  },
-  {
-   "fieldname": "column_break_3",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "interview_type",
-   "fieldtype": "Link",
-   "label": "Interview Type",
-   "options": "Interview Type",
-   "reqd": 1
-  },
-  {
-   "fieldname": "interviewers",
-   "fieldtype": "Table MultiSelect",
-   "label": "Interviewers",
-   "options": "Interviewer"
-  }
- ],
- "index_web_pages_for_search": 1,
- "links": [],
- "modified": "2021-09-30 13:01:25.666660",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Interview Round",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "Interviewer",
-   "select": 1,
-   "share": 1,
-   "write": 1
-  }
- ],
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/interview_round/interview_round.py b/erpnext/hr/doctype/interview_round/interview_round.py
deleted file mode 100644
index 83dbf0e..0000000
--- a/erpnext/hr/doctype/interview_round/interview_round.py
+++ /dev/null
@@ -1,29 +0,0 @@
-# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import json
-
-import frappe
-from frappe.model.document import Document
-
-
-class InterviewRound(Document):
-	pass
-
-
-@frappe.whitelist()
-def create_interview(doc):
-	if isinstance(doc, str):
-		doc = json.loads(doc)
-		doc = frappe.get_doc(doc)
-
-	interview = frappe.new_doc("Interview")
-	interview.interview_round = doc.name
-	interview.designation = doc.designation
-
-	if doc.interviewers:
-		interview.interview_details = []
-		for data in doc.interviewers:
-			interview.append("interview_details", {"interviewer": data.user})
-	return interview
diff --git a/erpnext/hr/doctype/interview_round/test_interview_round.py b/erpnext/hr/doctype/interview_round/test_interview_round.py
deleted file mode 100644
index 9568165..0000000
--- a/erpnext/hr/doctype/interview_round/test_interview_round.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-# import frappe
-
-
-class TestInterviewRound(unittest.TestCase):
-	pass
diff --git a/erpnext/hr/doctype/interview_type/__init__.py b/erpnext/hr/doctype/interview_type/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/interview_type/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/interview_type/interview_type.js b/erpnext/hr/doctype/interview_type/interview_type.js
deleted file mode 100644
index af77b52..0000000
--- a/erpnext/hr/doctype/interview_type/interview_type.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Interview Type', {
-	// refresh: function(frm) {
-
-	// }
-});
diff --git a/erpnext/hr/doctype/interview_type/interview_type.json b/erpnext/hr/doctype/interview_type/interview_type.json
deleted file mode 100644
index 14636a1..0000000
--- a/erpnext/hr/doctype/interview_type/interview_type.json
+++ /dev/null
@@ -1,73 +0,0 @@
-{
- "actions": [],
- "allow_rename": 1,
- "autoname": "Prompt",
- "creation": "2021-04-12 14:44:40.664034",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "description"
- ],
- "fields": [
-  {
-   "fieldname": "description",
-   "fieldtype": "Text",
-   "in_list_view": 1,
-   "label": "Description"
-  }
- ],
- "index_web_pages_for_search": 1,
- "links": [
-  {
-   "link_doctype": "Interview Round",
-   "link_fieldname": "interview_type"
-  }
- ],
- "modified": "2021-09-30 13:00:16.471518",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Interview Type",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "write": 1
-  }
- ],
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/interview_type/interview_type.py b/erpnext/hr/doctype/interview_type/interview_type.py
deleted file mode 100644
index f5ebda4..0000000
--- a/erpnext/hr/doctype/interview_type/interview_type.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-# import frappe
-from frappe.model.document import Document
-
-
-class InterviewType(Document):
-	pass
diff --git a/erpnext/hr/doctype/interview_type/test_interview_type.py b/erpnext/hr/doctype/interview_type/test_interview_type.py
deleted file mode 100644
index 96fdfca..0000000
--- a/erpnext/hr/doctype/interview_type/test_interview_type.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-# import frappe
-import unittest
-
-
-class TestInterviewType(unittest.TestCase):
-	pass
diff --git a/erpnext/hr/doctype/interviewer/__init__.py b/erpnext/hr/doctype/interviewer/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/interviewer/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/interviewer/interviewer.json b/erpnext/hr/doctype/interviewer/interviewer.json
deleted file mode 100644
index a37b8b0..0000000
--- a/erpnext/hr/doctype/interviewer/interviewer.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "actions": [],
- "creation": "2021-04-12 17:38:19.354734",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "user"
- ],
- "fields": [
-  {
-   "fieldname": "user",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "User",
-   "options": "User"
-  }
- ],
- "index_web_pages_for_search": 1,
- "istable": 1,
- "links": [],
- "modified": "2021-04-13 13:41:35.817568",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Interviewer",
- "owner": "Administrator",
- "permissions": [],
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/interviewer/interviewer.py b/erpnext/hr/doctype/interviewer/interviewer.py
deleted file mode 100644
index 2dc4a14..0000000
--- a/erpnext/hr/doctype/interviewer/interviewer.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-# import frappe
-from frappe.model.document import Document
-
-
-class Interviewer(Document):
-	pass
diff --git a/erpnext/hr/doctype/job_applicant/README.md b/erpnext/hr/doctype/job_applicant/README.md
deleted file mode 100644
index 8eb2edb..0000000
--- a/erpnext/hr/doctype/job_applicant/README.md
+++ /dev/null
@@ -1 +0,0 @@
-Applicant for Job.
\ No newline at end of file
diff --git a/erpnext/hr/doctype/job_applicant/__init__.py b/erpnext/hr/doctype/job_applicant/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/job_applicant/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/job_applicant/job_applicant.js b/erpnext/hr/doctype/job_applicant/job_applicant.js
deleted file mode 100644
index c1e8257..0000000
--- a/erpnext/hr/doctype/job_applicant/job_applicant.js
+++ /dev/null
@@ -1,105 +0,0 @@
-// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-// License: GNU General Public License v3. See license.txt
-
-// For license information, please see license.txt
-
-// for communication
-cur_frm.email_field = "email_id";
-
-frappe.ui.form.on("Job Applicant", {
-	refresh: function(frm) {
-		frm.set_query("job_title", function() {
-			return {
-				filters: {
-					'status': 'Open'
-				}
-			};
-		});
-		frm.events.create_custom_buttons(frm);
-		frm.events.make_dashboard(frm);
-	},
-
-	create_custom_buttons: function(frm) {
-		if (!frm.doc.__islocal && frm.doc.status !== "Rejected" && frm.doc.status !== "Accepted") {
-			frm.add_custom_button(__("Interview"), function() {
-				frm.events.create_dialog(frm);
-			}, __("Create"));
-		}
-
-		if (!frm.doc.__islocal) {
-			if (frm.doc.__onload && frm.doc.__onload.job_offer) {
-				$('[data-doctype="Employee Onboarding"]').find("button").show();
-				$('[data-doctype="Job Offer"]').find("button").hide();
-				frm.add_custom_button(__("Job Offer"), function() {
-					frappe.set_route("Form", "Job Offer", frm.doc.__onload.job_offer);
-				}, __("View"));
-			} else {
-				$('[data-doctype="Employee Onboarding"]').find("button").hide();
-				$('[data-doctype="Job Offer"]').find("button").show();
-				frm.add_custom_button(__("Job Offer"), function() {
-					frappe.route_options = {
-						"job_applicant": frm.doc.name,
-						"applicant_name": frm.doc.applicant_name,
-						"designation": frm.doc.job_opening || frm.doc.designation,
-					};
-					frappe.new_doc("Job Offer");
-				}, __("Create"));
-			}
-		}
-	},
-
-	make_dashboard: function(frm) {
-		frappe.call({
-			method: "erpnext.hr.doctype.job_applicant.job_applicant.get_interview_details",
-			args: {
-				job_applicant: frm.doc.name
-			},
-			callback: function(r) {
-				if (r.message) {
-					$("div").remove(".form-dashboard-section.custom");
-					frm.dashboard.add_section(
-						frappe.render_template("job_applicant_dashboard", {
-							data: r.message.interviews,
-							number_of_stars: r.message.stars
-						}),
-						__("Interview Summary")
-					);
-				}
-			}
-		});
-	},
-
-	create_dialog: function(frm) {
-		let d = new frappe.ui.Dialog({
-			title: 'Enter Interview Round',
-			fields: [
-				{
-					label: 'Interview Round',
-					fieldname: 'interview_round',
-					fieldtype: 'Link',
-					options: 'Interview Round'
-				},
-			],
-			primary_action_label: 'Create Interview',
-			primary_action(values) {
-				frm.events.create_interview(frm, values);
-				d.hide();
-			}
-		});
-		d.show();
-	},
-
-	create_interview: function (frm, values) {
-		frappe.call({
-			method: "erpnext.hr.doctype.job_applicant.job_applicant.create_interview",
-			args: {
-				doc: frm.doc,
-				interview_round: values.interview_round
-			},
-			callback: function (r) {
-				var doclist = frappe.model.sync(r.message);
-				frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
-			}
-		});
-	}
-});
diff --git a/erpnext/hr/doctype/job_applicant/job_applicant.json b/erpnext/hr/doctype/job_applicant/job_applicant.json
deleted file mode 100644
index 66b609c..0000000
--- a/erpnext/hr/doctype/job_applicant/job_applicant.json
+++ /dev/null
@@ -1,221 +0,0 @@
-{
- "actions": [],
- "allow_rename": 1,
- "autoname": "HR-APP-.YYYY.-.#####",
- "creation": "2013-01-29 19:25:37",
- "description": "Applicant for a Job",
- "doctype": "DocType",
- "document_type": "Document",
- "email_append_to": 1,
- "engine": "InnoDB",
- "field_order": [
-  "details_section",
-  "applicant_name",
-  "email_id",
-  "phone_number",
-  "country",
-  "column_break_3",
-  "job_title",
-  "designation",
-  "status",
-  "source_and_rating_section",
-  "source",
-  "source_name",
-  "employee_referral",
-  "column_break_13",
-  "applicant_rating",
-  "section_break_6",
-  "notes",
-  "cover_letter",
-  "resume_attachment",
-  "resume_link",
-  "section_break_16",
-  "currency",
-  "column_break_18",
-  "lower_range",
-  "upper_range"
- ],
- "fields": [
-  {
-   "bold": 1,
-   "fieldname": "applicant_name",
-   "fieldtype": "Data",
-   "in_global_search": 1,
-   "label": "Applicant Name",
-   "reqd": 1
-  },
-  {
-   "bold": 1,
-   "fieldname": "email_id",
-   "fieldtype": "Data",
-   "label": "Email Address",
-   "options": "Email",
-   "reqd": 1
-  },
-  {
-   "fieldname": "status",
-   "fieldtype": "Select",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Status",
-   "options": "Open\nReplied\nRejected\nHold\nAccepted",
-   "reqd": 1
-  },
-  {
-   "fieldname": "column_break_3",
-   "fieldtype": "Column Break",
-   "width": "50%"
-  },
-  {
-   "fieldname": "job_title",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Job Opening",
-   "options": "Job Opening"
-  },
-  {
-   "fieldname": "source",
-   "fieldtype": "Link",
-   "label": "Source",
-   "options": "Job Applicant Source"
-  },
-  {
-   "depends_on": "eval: doc.source==\"Employee Referral\" ",
-   "fieldname": "source_name",
-   "fieldtype": "Link",
-   "label": "Source Name",
-   "options": "Employee"
-  },
-  {
-   "fieldname": "section_break_6",
-   "fieldtype": "Section Break",
-   "label": "Resume"
-  },
-  {
-   "fieldname": "cover_letter",
-   "fieldtype": "Text",
-   "label": "Cover Letter"
-  },
-  {
-   "fieldname": "resume_attachment",
-   "fieldtype": "Attach",
-   "label": "Resume Attachment"
-  },
-  {
-   "fieldname": "notes",
-   "fieldtype": "Data",
-   "label": "Notes",
-   "read_only": 1
-  },
-  {
-   "fieldname": "phone_number",
-   "fieldtype": "Data",
-   "label": "Phone Number",
-   "options": "Phone"
-  },
-  {
-   "fieldname": "country",
-   "fieldtype": "Link",
-   "label": "Country",
-   "options": "Country"
-  },
-  {
-   "fieldname": "resume_link",
-   "fieldtype": "Data",
-   "label": "Resume Link"
-  },
-  {
-   "fieldname": "applicant_rating",
-   "fieldtype": "Rating",
-   "in_list_view": 1,
-   "label": "Applicant Rating"
-  },
-  {
-   "fieldname": "section_break_16",
-   "fieldtype": "Section Break",
-   "label": "Salary Expectation"
-  },
-  {
-   "fieldname": "lower_range",
-   "fieldtype": "Currency",
-   "label": "Lower Range",
-   "options": "currency",
-   "precision": "0"
-  },
-  {
-   "fieldname": "upper_range",
-   "fieldtype": "Currency",
-   "label": "Upper Range",
-   "options": "currency",
-   "precision": "0"
-  },
-  {
-   "fieldname": "column_break_18",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "currency",
-   "fieldtype": "Link",
-   "label": "Currency",
-   "options": "Currency"
-  },
-  {
-   "fieldname": "employee_referral",
-   "fieldtype": "Link",
-   "label": "Employee Referral",
-   "options": "Employee Referral",
-   "read_only": 1
-  },
-  {
-   "fieldname": "details_section",
-   "fieldtype": "Section Break",
-   "label": "Details"
-  },
-  {
-   "fieldname": "source_and_rating_section",
-   "fieldtype": "Section Break",
-   "label": "Source and Rating"
-  },
-  {
-   "fieldname": "column_break_13",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fetch_from": "job_opening.designation",
-   "fieldname": "designation",
-   "fieldtype": "Link",
-   "label": "Designation",
-   "options": "Designation"
-  }
- ],
- "icon": "fa fa-user",
- "idx": 1,
- "index_web_pages_for_search": 1,
- "links": [],
- "modified": "2022-01-12 16:28:53.196881",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Job Applicant",
- "naming_rule": "Expression (old style)",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "write": 1
-  }
- ],
- "search_fields": "applicant_name, email_id, job_title, phone_number",
- "sender_field": "email_id",
- "sort_field": "modified",
- "sort_order": "ASC",
- "states": [],
- "subject_field": "notes",
- "title_field": "applicant_name"
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/job_applicant/job_applicant.py b/erpnext/hr/doctype/job_applicant/job_applicant.py
deleted file mode 100644
index 5b0a4ca..0000000
--- a/erpnext/hr/doctype/job_applicant/job_applicant.py
+++ /dev/null
@@ -1,101 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.model.naming import append_number_if_name_exists
-from frappe.utils import validate_email_address
-
-from erpnext.hr.doctype.interview.interview import get_interviewers
-
-
-class DuplicationError(frappe.ValidationError):
-	pass
-
-
-class JobApplicant(Document):
-	def onload(self):
-		job_offer = frappe.get_all("Job Offer", filters={"job_applicant": self.name})
-		if job_offer:
-			self.get("__onload").job_offer = job_offer[0].name
-
-	def autoname(self):
-		self.name = self.email_id
-
-		# applicant can apply more than once for a different job title or reapply
-		if frappe.db.exists("Job Applicant", self.name):
-			self.name = append_number_if_name_exists("Job Applicant", self.name)
-
-	def validate(self):
-		if self.email_id:
-			validate_email_address(self.email_id, True)
-
-		if self.employee_referral:
-			self.set_status_for_employee_referral()
-
-		if not self.applicant_name and self.email_id:
-			guess = self.email_id.split("@")[0]
-			self.applicant_name = " ".join([p.capitalize() for p in guess.split(".")])
-
-	def set_status_for_employee_referral(self):
-		emp_ref = frappe.get_doc("Employee Referral", self.employee_referral)
-		if self.status in ["Open", "Replied", "Hold"]:
-			emp_ref.db_set("status", "In Process")
-		elif self.status in ["Accepted", "Rejected"]:
-			emp_ref.db_set("status", self.status)
-
-
-@frappe.whitelist()
-def create_interview(doc, interview_round):
-	import json
-
-	if isinstance(doc, str):
-		doc = json.loads(doc)
-		doc = frappe.get_doc(doc)
-
-	round_designation = frappe.db.get_value("Interview Round", interview_round, "designation")
-
-	if round_designation and doc.designation and round_designation != doc.designation:
-		frappe.throw(
-			_("Interview Round {0} is only applicable for the Designation {1}").format(
-				interview_round, round_designation
-			)
-		)
-
-	interview = frappe.new_doc("Interview")
-	interview.interview_round = interview_round
-	interview.job_applicant = doc.name
-	interview.designation = doc.designation
-	interview.resume_link = doc.resume_link
-	interview.job_opening = doc.job_title
-	interviewer_detail = get_interviewers(interview_round)
-
-	for d in interviewer_detail:
-		interview.append("interview_details", {"interviewer": d.interviewer})
-	return interview
-
-
-@frappe.whitelist()
-def get_interview_details(job_applicant):
-	interview_details = frappe.db.get_all(
-		"Interview",
-		filters={"job_applicant": job_applicant, "docstatus": ["!=", 2]},
-		fields=["name", "interview_round", "expected_average_rating", "average_rating", "status"],
-	)
-	interview_detail_map = {}
-	meta = frappe.get_meta("Interview")
-	number_of_stars = meta.get_options("expected_average_rating") or 5
-
-	for detail in interview_details:
-		detail.expected_average_rating = (
-			detail.expected_average_rating * number_of_stars if detail.expected_average_rating else 0
-		)
-		detail.average_rating = detail.average_rating * number_of_stars if detail.average_rating else 0
-
-		interview_detail_map[detail.name] = detail
-
-	return {"interviews": interview_detail_map, "stars": number_of_stars}
diff --git a/erpnext/hr/doctype/job_applicant/job_applicant_dashboard.html b/erpnext/hr/doctype/job_applicant/job_applicant_dashboard.html
deleted file mode 100644
index 734b2fe..0000000
--- a/erpnext/hr/doctype/job_applicant/job_applicant_dashboard.html
+++ /dev/null
@@ -1,53 +0,0 @@
-
-{% if not jQuery.isEmptyObject(data) %}
-
-<table class="table table-bordered small">
-	<thead>
-		<tr>
-			<th style="width: 16%" class="text-left">{{ __("Interview") }}</th>
-			<th style="width: 16%" class="text-left">{{ __("Interview Round") }}</th>
-			<th style="width: 12%" class="text-left">{{ __("Status") }}</th>
-			<th style="width: 14%" class="text-left">{{ __("Expected Rating") }}</th>
-			<th style="width: 10%" class="text-left">{{ __("Rating") }}</th>
-		</tr>
-	</thead>
-	<tbody>
-		{% for(const [key, value] of Object.entries(data)) { %}
-			<tr>
-				<td class="text-left"> {%= key %} </td>
-				<td class="text-left"> {%= value["interview_round"] %} </td>
-				<td class="text-left"> {%= value["status"] %} </td>
-				{% let right_class = ''; %}
-				{% let left_class = ''; %}
-
-				{% $.each([value["expected_average_rating"], value["average_rating"]], (_, val) => { %}
-					<td class="text-left">
-						<div class="rating">
-							{% for (let i = 1; i <= number_of_stars; i++) { %}
-								{% if (i <= val) { %}
-									{% right_class = 'star-click'; %}
-								{% } else { %}
-									{% right_class = ''; %}
-								{% } %}
-
-								{% if ((i <= val) || ((i - 0.5) == val)) { %}
-									{% left_class = 'star-click'; %}
-								{% } else { %}
-									{% left_class = ''; %}
-								{% } %}
-
-								<svg class="icon icon-md" data-rating={{i}} viewBox="0 0 24 24" fill="none">
-									<path class="right-half {{ right_class }}" d="M11.9987 3.00011C12.177 3.00011 12.3554 3.09303 12.4471 3.27888L14.8213 8.09112C14.8941 8.23872 15.0349 8.34102 15.1978 8.3647L20.5069 9.13641C20.917 9.19602 21.0807 9.69992 20.7841 9.9892L16.9421 13.7354C16.8243 13.8503 16.7706 14.0157 16.7984 14.1779L17.7053 19.4674C17.7753 19.8759 17.3466 20.1874 16.9798 19.9945L12.2314 17.4973C12.1586 17.459 12.0786 17.4398 11.9987 17.4398V3.00011Z" fill="var(--star-fill)" stroke="var(--star-fill)"/>
-									<path class="left-half {{ left_class }}" d="M11.9987 3.00011C11.8207 3.00011 11.6428 3.09261 11.5509 3.27762L9.15562 8.09836C9.08253 8.24546 8.94185 8.34728 8.77927 8.37075L3.42887 9.14298C3.01771 9.20233 2.85405 9.70811 3.1525 9.99707L7.01978 13.7414C7.13858 13.8564 7.19283 14.0228 7.16469 14.1857L6.25116 19.4762C6.18071 19.8842 6.6083 20.1961 6.97531 20.0045L11.7672 17.5022C11.8397 17.4643 11.9192 17.4454 11.9987 17.4454V3.00011Z" fill="var(--star-fill)" stroke="var(--star-fill)"/>
-								</svg>
-							{% } %}
-						</div>
-					</td>
-				{% }); %}
-			</tr>
-		{% } %}
-	</tbody>
-</table>
-{% else %}
-<p style="margin-top: 30px;"> No Interview has been scheduled.</p>
-{% endif %}
diff --git a/erpnext/hr/doctype/job_applicant/job_applicant_dashboard.py b/erpnext/hr/doctype/job_applicant/job_applicant_dashboard.py
deleted file mode 100644
index 14b944a..0000000
--- a/erpnext/hr/doctype/job_applicant/job_applicant_dashboard.py
+++ /dev/null
@@ -1,9 +0,0 @@
-def get_data():
-	return {
-		"fieldname": "job_applicant",
-		"transactions": [
-			{"items": ["Employee", "Employee Onboarding"]},
-			{"items": ["Job Offer", "Appointment Letter"]},
-			{"items": ["Interview"]},
-		],
-	}
diff --git a/erpnext/hr/doctype/job_applicant/job_applicant_list.js b/erpnext/hr/doctype/job_applicant/job_applicant_list.js
deleted file mode 100644
index 2ad0d59..0000000
--- a/erpnext/hr/doctype/job_applicant/job_applicant_list.js
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors
-// MIT License. See license.txt
-
-frappe.listview_settings['Job Applicant'] = {
-	add_fields: ["status"],
-	get_indicator: function (doc) {
-		if (doc.status == "Accepted") {
-			return [__(doc.status), "green", "status,=," + doc.status];
-		} else if (["Open", "Replied"].includes(doc.status)) {
-			return [__(doc.status), "orange", "status,=," + doc.status];
-		} else if (["Hold", "Rejected"].includes(doc.status)) {
-			return [__(doc.status), "red", "status,=," + doc.status];
-		}
-	}
-};
diff --git a/erpnext/hr/doctype/job_applicant/test_job_applicant.py b/erpnext/hr/doctype/job_applicant/test_job_applicant.py
deleted file mode 100644
index 99d1161..0000000
--- a/erpnext/hr/doctype/job_applicant/test_job_applicant.py
+++ /dev/null
@@ -1,59 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and Contributors
-# See license.txt
-
-import unittest
-
-import frappe
-
-from erpnext.hr.doctype.designation.test_designation import create_designation
-
-
-class TestJobApplicant(unittest.TestCase):
-	def test_job_applicant_naming(self):
-		applicant = frappe.get_doc(
-			{
-				"doctype": "Job Applicant",
-				"status": "Open",
-				"applicant_name": "_Test Applicant",
-				"email_id": "job_applicant_naming@example.com",
-			}
-		).insert()
-		self.assertEqual(applicant.name, "job_applicant_naming@example.com")
-
-		applicant = frappe.get_doc(
-			{
-				"doctype": "Job Applicant",
-				"status": "Open",
-				"applicant_name": "_Test Applicant",
-				"email_id": "job_applicant_naming@example.com",
-			}
-		).insert()
-		self.assertEqual(applicant.name, "job_applicant_naming@example.com-1")
-
-	def tearDown(self):
-		frappe.db.rollback()
-
-
-def create_job_applicant(**args):
-	args = frappe._dict(args)
-
-	filters = {
-		"applicant_name": args.applicant_name or "_Test Applicant",
-		"email_id": args.email_id or "test_applicant@example.com",
-	}
-
-	if frappe.db.exists("Job Applicant", filters):
-		return frappe.get_doc("Job Applicant", filters)
-
-	job_applicant = frappe.get_doc(
-		{
-			"doctype": "Job Applicant",
-			"status": args.status or "Open",
-			"designation": create_designation().name,
-		}
-	)
-
-	job_applicant.update(filters)
-	job_applicant.save()
-
-	return job_applicant
diff --git a/erpnext/hr/doctype/job_applicant_source/__init__.py b/erpnext/hr/doctype/job_applicant_source/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/job_applicant_source/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/job_applicant_source/job_applicant_source.js b/erpnext/hr/doctype/job_applicant_source/job_applicant_source.js
deleted file mode 100644
index 8725f23..0000000
--- a/erpnext/hr/doctype/job_applicant_source/job_applicant_source.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Job Applicant Source', {
-	refresh: function() {
-
-	}
-});
diff --git a/erpnext/hr/doctype/job_applicant_source/job_applicant_source.json b/erpnext/hr/doctype/job_applicant_source/job_applicant_source.json
deleted file mode 100644
index c3bb1eb..0000000
--- a/erpnext/hr/doctype/job_applicant_source/job_applicant_source.json
+++ /dev/null
@@ -1,124 +0,0 @@
-{
- "allow_copy": 0, 
- "allow_guest_to_view": 0, 
- "allow_import": 1, 
- "allow_rename": 1, 
- "autoname": "field:source_name", 
- "beta": 0, 
- "creation": "2018-06-16 12:28:26.432651", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "", 
- "editable_grid": 1, 
- "engine": "InnoDB", 
- "fields": [
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "source_name", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Source Name", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "details", 
-   "fieldtype": "Text Editor", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Details", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }
- ], 
- "has_web_view": 0, 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "image_view": 0, 
- "in_create": 0, 
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 0, 
- "max_attachments": 0, 
- "modified": "2018-06-16 14:53:52.918474", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Job Applicant Source", 
- "name_case": "", 
- "owner": "Administrator", 
- "permissions": [
-  {
-   "amend": 0, 
-   "cancel": 0, 
-   "create": 1, 
-   "delete": 1, 
-   "email": 1, 
-   "export": 1, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 1, 
-   "role": "HR User", 
-   "set_user_permissions": 0, 
-   "share": 1, 
-   "submit": 0, 
-   "write": 1
-  }
- ], 
- "quick_entry": 1, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "show_name_in_global_search": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "track_changes": 0, 
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/job_applicant_source/job_applicant_source.py b/erpnext/hr/doctype/job_applicant_source/job_applicant_source.py
deleted file mode 100644
index 1f208c1..0000000
--- a/erpnext/hr/doctype/job_applicant_source/job_applicant_source.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-from frappe.model.document import Document
-
-
-class JobApplicantSource(Document):
-	pass
diff --git a/erpnext/hr/doctype/job_applicant_source/test_job_applicant_source.py b/erpnext/hr/doctype/job_applicant_source/test_job_applicant_source.py
deleted file mode 100644
index cee5daf..0000000
--- a/erpnext/hr/doctype/job_applicant_source/test_job_applicant_source.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-
-class TestJobApplicantSource(unittest.TestCase):
-	pass
diff --git a/erpnext/hr/doctype/job_offer/__init__.py b/erpnext/hr/doctype/job_offer/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/job_offer/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/job_offer/job_offer.js b/erpnext/hr/doctype/job_offer/job_offer.js
deleted file mode 100755
index 558f495..0000000
--- a/erpnext/hr/doctype/job_offer/job_offer.js
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-// License: GNU General Public License v3. See license.txt
-
-frappe.provide("erpnext.job_offer");
-
-frappe.ui.form.on("Job Offer", {
-	onload: function (frm) {
-		frm.set_query("select_terms", function() {
-			return { filters: { hr: 1 } };
-		});
-	},
-
-	setup: function (frm) {
-		frm.email_field = "applicant_email";
-	},
-
-	select_terms: function (frm) {
-		erpnext.utils.get_terms(frm.doc.select_terms, frm.doc, function (r) {
-			if (!r.exc) {
-				frm.set_value("terms", r.message);
-			}
-		});
-	},
-
-	refresh: function (frm) {
-		if ((!frm.doc.__islocal) && (frm.doc.status == 'Accepted')
-			&& (frm.doc.docstatus === 1) && (!frm.doc.__onload || !frm.doc.__onload.employee)) {
-			frm.add_custom_button(__('Create Employee'),
-				function () {
-					erpnext.job_offer.make_employee(frm);
-				}
-			);
-		}
-
-		if(frm.doc.__onload && frm.doc.__onload.employee) {
-			frm.add_custom_button(__('Show Employee'),
-				function () {
-					frappe.set_route("Form", "Employee", frm.doc.__onload.employee);
-				}
-			);
-		}
-	}
-
-});
-
-erpnext.job_offer.make_employee = function (frm) {
-	frappe.model.open_mapped_doc({
-		method: "erpnext.hr.doctype.job_offer.job_offer.make_employee",
-		frm: frm
-	});
-};
diff --git a/erpnext/hr/doctype/job_offer/job_offer.json b/erpnext/hr/doctype/job_offer/job_offer.json
deleted file mode 100644
index c0b7f69..0000000
--- a/erpnext/hr/doctype/job_offer/job_offer.json
+++ /dev/null
@@ -1,190 +0,0 @@
-{
- "actions": [],
- "allow_import": 1,
- "autoname": "HR-OFF-.YYYY.-.#####",
- "creation": "2015-03-04 14:20:17.662207",
- "doctype": "DocType",
- "document_type": "Document",
- "engine": "InnoDB",
- "field_order": [
-  "job_applicant",
-  "applicant_name",
-  "applicant_email",
-  "column_break_3",
-  "status",
-  "offer_date",
-  "designation",
-  "company",
-  "section_break_4",
-  "offer_terms",
-  "section_break_14",
-  "select_terms",
-  "terms",
-  "printing_details",
-  "letter_head",
-  "column_break_16",
-  "select_print_heading",
-  "amended_from"
- ],
- "fields": [
-  {
-   "fieldname": "job_applicant",
-   "fieldtype": "Link",
-   "label": "Job Applicant",
-   "options": "Job Applicant",
-   "print_hide": 1,
-   "reqd": 1
-  },
-  {
-   "fetch_from": "job_applicant.applicant_name",
-   "fieldname": "applicant_name",
-   "fieldtype": "Data",
-   "in_global_search": 1,
-   "in_list_view": 1,
-   "label": "Applicant Name",
-   "read_only": 1,
-   "reqd": 1
-  },
-  {
-   "fetch_from": "job_applicant.email_id",
-   "fieldname": "applicant_email",
-   "fieldtype": "Data",
-   "in_global_search": 1,
-   "label": "Applicant Email Address",
-   "options": "Email",
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break_3",
-   "fieldtype": "Column Break"
-  },
-  {
-   "allow_on_submit": 1,
-   "fieldname": "status",
-   "fieldtype": "Select",
-   "in_standard_filter": 1,
-   "label": "Status",
-   "no_copy": 1,
-   "options": "Awaiting Response\nAccepted\nRejected",
-   "print_hide": 1
-  },
-  {
-   "fieldname": "offer_date",
-   "fieldtype": "Date",
-   "label": "Offer Date",
-   "reqd": 1
-  },
-  {
-   "fieldname": "designation",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Designation",
-   "options": "Designation",
-   "reqd": 1
-  },
-  {
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Company",
-   "options": "Company",
-   "print_hide": 1,
-   "remember_last_selected_value": 1,
-   "reqd": 1
-  },
-  {
-   "fieldname": "section_break_4",
-   "fieldtype": "Section Break"
-  },
-  {
-   "fieldname": "offer_terms",
-   "fieldtype": "Table",
-   "label": "Job Offer Terms",
-   "options": "Job Offer Term"
-  },
-  {
-   "fieldname": "section_break_14",
-   "fieldtype": "Section Break"
-  },
-  {
-   "fieldname": "select_terms",
-   "fieldtype": "Link",
-   "label": "Select Terms and Conditions",
-   "options": "Terms and Conditions",
-   "print_hide": 1
-  },
-  {
-   "fieldname": "terms",
-   "fieldtype": "Text Editor",
-   "label": "Terms and Conditions"
-  },
-  {
-   "collapsible": 1,
-   "fieldname": "printing_details",
-   "fieldtype": "Section Break",
-   "label": "Printing Details"
-  },
-  {
-   "allow_on_submit": 1,
-   "fetch_from": "company.default_letter_head",
-   "fieldname": "letter_head",
-   "fieldtype": "Link",
-   "label": "Letter Head",
-   "options": "Letter Head",
-   "print_hide": 1
-  },
-  {
-   "fieldname": "column_break_16",
-   "fieldtype": "Column Break",
-   "print_hide": 1,
-   "width": "50%"
-  },
-  {
-   "allow_on_submit": 1,
-   "fieldname": "select_print_heading",
-   "fieldtype": "Link",
-   "label": "Print Heading",
-   "options": "Print Heading",
-   "print_hide": 1,
-   "report_hide": 1
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "Job Offer",
-   "print_hide": 1,
-   "read_only": 1
-  }
- ],
- "is_submittable": 1,
- "links": [],
- "modified": "2020-06-25 00:56:24.756395",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Job Offer",
- "owner": "Administrator",
- "permissions": [
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "import": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  }
- ],
- "show_name_in_global_search": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "title_field": "applicant_name"
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/job_offer/job_offer.py b/erpnext/hr/doctype/job_offer/job_offer.py
deleted file mode 100644
index b46930a..0000000
--- a/erpnext/hr/doctype/job_offer/job_offer.py
+++ /dev/null
@@ -1,107 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.model.mapper import get_mapped_doc
-from frappe.utils import cint
-from frappe.utils.data import get_link_to_form
-
-
-class JobOffer(Document):
-	def onload(self):
-		employee = frappe.db.get_value("Employee", {"job_applicant": self.job_applicant}, "name") or ""
-		self.set_onload("employee", employee)
-
-	def validate(self):
-		self.validate_vacancies()
-		job_offer = frappe.db.exists(
-			"Job Offer", {"job_applicant": self.job_applicant, "docstatus": ["!=", 2]}
-		)
-		if job_offer and job_offer != self.name:
-			frappe.throw(
-				_("Job Offer: {0} is already for Job Applicant: {1}").format(
-					frappe.bold(job_offer), frappe.bold(self.job_applicant)
-				)
-			)
-
-	def validate_vacancies(self):
-		staffing_plan = get_staffing_plan_detail(self.designation, self.company, self.offer_date)
-		check_vacancies = frappe.get_single("HR Settings").check_vacancies
-		if staffing_plan and check_vacancies:
-			job_offers = self.get_job_offer(staffing_plan.from_date, staffing_plan.to_date)
-			if not staffing_plan.get("vacancies") or cint(staffing_plan.vacancies) - len(job_offers) <= 0:
-				error_variable = "for " + frappe.bold(self.designation)
-				if staffing_plan.get("parent"):
-					error_variable = frappe.bold(get_link_to_form("Staffing Plan", staffing_plan.parent))
-
-				frappe.throw(_("There are no vacancies under staffing plan {0}").format(error_variable))
-
-	def on_change(self):
-		update_job_applicant(self.status, self.job_applicant)
-
-	def get_job_offer(self, from_date, to_date):
-		"""Returns job offer created during a time period"""
-		return frappe.get_all(
-			"Job Offer",
-			filters={
-				"offer_date": ["between", (from_date, to_date)],
-				"designation": self.designation,
-				"company": self.company,
-				"docstatus": 1,
-			},
-			fields=["name"],
-		)
-
-
-def update_job_applicant(status, job_applicant):
-	if status in ("Accepted", "Rejected"):
-		frappe.set_value("Job Applicant", job_applicant, "status", status)
-
-
-def get_staffing_plan_detail(designation, company, offer_date):
-	detail = frappe.db.sql(
-		"""
-		SELECT DISTINCT spd.parent,
-			sp.from_date as from_date,
-			sp.to_date as to_date,
-			sp.name,
-			sum(spd.vacancies) as vacancies,
-			spd.designation
-		FROM `tabStaffing Plan Detail` spd, `tabStaffing Plan` sp
-		WHERE
-			sp.docstatus=1
-			AND spd.designation=%s
-			AND sp.company=%s
-			AND spd.parent = sp.name
-			AND %s between sp.from_date and sp.to_date
-	""",
-		(designation, company, offer_date),
-		as_dict=1,
-	)
-
-	return frappe._dict(detail[0]) if (detail and detail[0].parent) else None
-
-
-@frappe.whitelist()
-def make_employee(source_name, target_doc=None):
-	def set_missing_values(source, target):
-		target.personal_email, target.first_name = frappe.db.get_value(
-			"Job Applicant", source.job_applicant, ["email_id", "applicant_name"]
-		)
-
-	doc = get_mapped_doc(
-		"Job Offer",
-		source_name,
-		{
-			"Job Offer": {
-				"doctype": "Employee",
-				"field_map": {"applicant_name": "employee_name", "offer_date": "scheduled_confirmation_date"},
-			}
-		},
-		target_doc,
-		set_missing_values,
-	)
-	return doc
diff --git a/erpnext/hr/doctype/job_offer/job_offer_list.js b/erpnext/hr/doctype/job_offer/job_offer_list.js
deleted file mode 100644
index 4fa5be7..0000000
--- a/erpnext/hr/doctype/job_offer/job_offer_list.js
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors
-// MIT License. See license.txt
-
-frappe.listview_settings['Job Offer'] = {
-	add_fields: ["company", "designation", "job_applicant", "status"],
-	get_indicator: function (doc) {
-		if (doc.status == "Accepted") {
-			return [__(doc.status), "green", "status,=," + doc.status];
-		} else if (doc.status == "Awaiting Response") {
-			return [__(doc.status), "orange", "status,=," + doc.status];
-		} else if (doc.status == "Rejected") {
-			return [__(doc.status), "red", "status,=," + doc.status];
-		}
-	}
-};
diff --git a/erpnext/hr/doctype/job_offer/test_job_offer.py b/erpnext/hr/doctype/job_offer/test_job_offer.py
deleted file mode 100644
index 7d8ef11..0000000
--- a/erpnext/hr/doctype/job_offer/test_job_offer.py
+++ /dev/null
@@ -1,93 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and Contributors
-# See license.txt
-
-import unittest
-
-import frappe
-from frappe.utils import add_days, nowdate
-
-from erpnext.hr.doctype.designation.test_designation import create_designation
-from erpnext.hr.doctype.job_applicant.test_job_applicant import create_job_applicant
-from erpnext.hr.doctype.staffing_plan.test_staffing_plan import make_company
-
-# test_records = frappe.get_test_records('Job Offer')
-
-
-class TestJobOffer(unittest.TestCase):
-	def test_job_offer_creation_against_vacancies(self):
-		frappe.db.set_value("HR Settings", None, "check_vacancies", 1)
-		job_applicant = create_job_applicant(email_id="test_job_offer@example.com")
-		job_offer = create_job_offer(job_applicant=job_applicant.name, designation="UX Designer")
-
-		create_staffing_plan(
-			name="Test No Vacancies",
-			staffing_details=[
-				{"designation": "UX Designer", "vacancies": 0, "estimated_cost_per_position": 5000}
-			],
-		)
-		self.assertRaises(frappe.ValidationError, job_offer.submit)
-
-		# test creation of job offer when vacancies are not present
-		frappe.db.set_value("HR Settings", None, "check_vacancies", 0)
-		job_offer.submit()
-		self.assertTrue(frappe.db.exists("Job Offer", job_offer.name))
-
-	def test_job_applicant_update(self):
-		frappe.db.set_value("HR Settings", None, "check_vacancies", 0)
-		create_staffing_plan()
-		job_applicant = create_job_applicant(email_id="test_job_applicants@example.com")
-		job_offer = create_job_offer(job_applicant=job_applicant.name)
-		job_offer.submit()
-		job_applicant.reload()
-		self.assertEqual(job_applicant.status, "Accepted")
-
-		# status update after rejection
-		job_offer.status = "Rejected"
-		job_offer.submit()
-		job_applicant.reload()
-		self.assertEquals(job_applicant.status, "Rejected")
-		frappe.db.set_value("HR Settings", None, "check_vacancies", 1)
-
-	def tearDown(self):
-		frappe.db.sql("DELETE FROM `tabJob Offer` WHERE 1")
-
-
-def create_job_offer(**args):
-	args = frappe._dict(args)
-	if not args.job_applicant:
-		job_applicant = create_job_applicant()
-
-	if not frappe.db.exists("Designation", args.designation):
-		designation = create_designation(designation_name=args.designation)
-
-	job_offer = frappe.get_doc(
-		{
-			"doctype": "Job Offer",
-			"job_applicant": args.job_applicant or job_applicant.name,
-			"offer_date": args.offer_date or nowdate(),
-			"designation": args.designation or "Researcher",
-			"status": args.status or "Accepted",
-		}
-	)
-	return job_offer
-
-
-def create_staffing_plan(**args):
-	args = frappe._dict(args)
-	make_company()
-	frappe.db.set_value("Company", "_Test Company", "is_group", 1)
-	if frappe.db.exists("Staffing Plan", args.name or "Test"):
-		return
-	staffing_plan = frappe.get_doc(
-		{
-			"doctype": "Staffing Plan",
-			"name": args.name or "Test",
-			"from_date": args.from_date or nowdate(),
-			"to_date": args.to_date or add_days(nowdate(), 10),
-			"staffing_details": args.staffing_details
-			or [{"designation": "Researcher", "vacancies": 1, "estimated_cost_per_position": 50000}],
-		}
-	)
-	staffing_plan.insert()
-	staffing_plan.submit()
-	return staffing_plan
diff --git a/erpnext/hr/doctype/job_offer_term/__init__.py b/erpnext/hr/doctype/job_offer_term/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/job_offer_term/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/job_offer_term/job_offer_term.json b/erpnext/hr/doctype/job_offer_term/job_offer_term.json
deleted file mode 100644
index dcd723e..0000000
--- a/erpnext/hr/doctype/job_offer_term/job_offer_term.json
+++ /dev/null
@@ -1,130 +0,0 @@
-{
- "allow_copy": 0, 
- "allow_guest_to_view": 0, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "beta": 0, 
- "creation": "2015-03-05 12:53:45.342292", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "", 
- "editable_grid": 1, 
- "fields": [
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "offer_term", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Offer Term", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Offer Term", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "column_break_2", 
-   "fieldtype": "Column Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "value", 
-   "fieldtype": "Small Text", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Value / Description", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }
- ], 
- "has_web_view": 0, 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "image_view": 0, 
- "in_create": 0, 
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 1, 
- "max_attachments": 0, 
- "modified": "2018-02-15 03:30:56.020668", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Job Offer Term", 
- "name_case": "", 
- "owner": "Administrator", 
- "permissions": [], 
- "quick_entry": 0, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "show_name_in_global_search": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "track_changes": 0, 
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/job_offer_term/job_offer_term.py b/erpnext/hr/doctype/job_offer_term/job_offer_term.py
deleted file mode 100644
index d2eae46..0000000
--- a/erpnext/hr/doctype/job_offer_term/job_offer_term.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and contributors
-# For license information, please see license.txt
-
-
-from frappe.model.document import Document
-
-
-class JobOfferTerm(Document):
-	pass
diff --git a/erpnext/hr/doctype/job_opening/README.md b/erpnext/hr/doctype/job_opening/README.md
deleted file mode 100644
index 5a19f33..0000000
--- a/erpnext/hr/doctype/job_opening/README.md
+++ /dev/null
@@ -1 +0,0 @@
-Open position for Job.
\ No newline at end of file
diff --git a/erpnext/hr/doctype/job_opening/__init__.py b/erpnext/hr/doctype/job_opening/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/job_opening/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/job_opening/job_opening.js b/erpnext/hr/doctype/job_opening/job_opening.js
deleted file mode 100644
index 04aab7e..0000000
--- a/erpnext/hr/doctype/job_opening/job_opening.js
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Job Opening', {
-	onload: function(frm) {
-		frm.set_query("department", function() {
-			return {
-				"filters": {
-					"company": frm.doc.company,
-				}
-			};
-		});
-	},
-	designation: function(frm) {
-		if(frm.doc.designation && frm.doc.company){
-			frappe.call({
-				"method": "erpnext.hr.doctype.staffing_plan.staffing_plan.get_active_staffing_plan_details",
-				args: {
-					company: frm.doc.company,
-					designation: frm.doc.designation,
-					date: frappe.datetime.now_date() // ToDo - Date in Job Opening?
-				},
-				callback: function (data) {
-					if(data.message){
-						frm.set_value('staffing_plan', data.message[0].name);
-						frm.set_value('planned_vacancies', data.message[0].vacancies);
-					} else {
-						frm.set_value('staffing_plan', "");
-						frm.set_value('planned_vacancies', 0);
-						frappe.show_alert({
-							indicator: 'orange',
-							message: __('No Staffing Plans found for this Designation')
-						});
-					}
-				}
-			});
-		}
-		else{
-			frm.set_value('staffing_plan', "");
-			frm.set_value('planned_vacancies', 0);
-		}
-	},
-	company: function(frm) {
-		frm.set_value('designation', "");
-	}
-});
diff --git a/erpnext/hr/doctype/job_opening/job_opening.json b/erpnext/hr/doctype/job_opening/job_opening.json
deleted file mode 100644
index b8f6df6..0000000
--- a/erpnext/hr/doctype/job_opening/job_opening.json
+++ /dev/null
@@ -1,188 +0,0 @@
-{
- "actions": [],
- "autoname": "field:route",
- "creation": "2013-01-15 16:13:36",
- "description": "Description of a Job Opening",
- "doctype": "DocType",
- "document_type": "Document",
- "engine": "InnoDB",
- "field_order": [
-  "job_title",
-  "company",
-  "status",
-  "column_break_5",
-  "designation",
-  "department",
-  "staffing_plan",
-  "planned_vacancies",
-  "section_break_6",
-  "publish",
-  "route",
-  "column_break_12",
-  "job_application_route",
-  "section_break_14",
-  "description",
-  "section_break_16",
-  "currency",
-  "lower_range",
-  "upper_range",
-  "column_break_20",
-  "publish_salary_range"
- ],
- "fields": [
-  {
-   "fieldname": "job_title",
-   "fieldtype": "Data",
-   "in_list_view": 1,
-   "label": "Job Title",
-   "reqd": 1
-  },
-  {
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "label": "Company",
-   "options": "Company",
-   "reqd": 1
-  },
-  {
-   "fieldname": "status",
-   "fieldtype": "Select",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Status",
-   "options": "Open\nClosed"
-  },
-  {
-   "fieldname": "column_break_5",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "designation",
-   "fieldtype": "Link",
-   "label": "Designation",
-   "options": "Designation",
-   "reqd": 1
-  },
-  {
-   "fieldname": "department",
-   "fieldtype": "Link",
-   "label": "Department",
-   "options": "Department"
-  },
-  {
-   "fieldname": "staffing_plan",
-   "fieldtype": "Link",
-   "label": "Staffing Plan",
-   "options": "Staffing Plan",
-   "read_only": 1
-  },
-  {
-   "depends_on": "staffing_plan",
-   "fieldname": "planned_vacancies",
-   "fieldtype": "Int",
-   "label": "Planned number of Positions",
-   "read_only": 1
-  },
-  {
-   "fieldname": "section_break_6",
-   "fieldtype": "Section Break"
-  },
-  {
-   "default": "0",
-   "fieldname": "publish",
-   "fieldtype": "Check",
-   "label": "Publish on website"
-  },
-  {
-   "depends_on": "publish",
-   "fieldname": "route",
-   "fieldtype": "Data",
-   "label": "Route",
-   "unique": 1
-  },
-  {
-   "description": "Job profile, qualifications required etc.",
-   "fieldname": "description",
-   "fieldtype": "Text Editor",
-   "in_list_view": 1,
-   "label": "Description"
-  },
-  {
-   "fieldname": "column_break_12",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "section_break_14",
-   "fieldtype": "Section Break"
-  },
-  {
-   "collapsible": 1,
-   "fieldname": "section_break_16",
-   "fieldtype": "Section Break"
-  },
-  {
-   "fieldname": "currency",
-   "fieldtype": "Link",
-   "label": "Currency",
-   "options": "Currency"
-  },
-  {
-   "fieldname": "lower_range",
-   "fieldtype": "Currency",
-   "label": "Lower Range",
-   "options": "currency",
-   "precision": "0"
-  },
-  {
-   "fieldname": "upper_range",
-   "fieldtype": "Currency",
-   "label": "Upper Range",
-   "options": "currency",
-   "precision": "0"
-  },
-  {
-   "fieldname": "column_break_20",
-   "fieldtype": "Column Break"
-  },
-  {
-   "depends_on": "publish",
-   "description": "Route to the custom Job Application Webform",
-   "fieldname": "job_application_route",
-   "fieldtype": "Data",
-   "label": "Job Application Route"
-  },
-  {
-   "default": "0",
-   "fieldname": "publish_salary_range",
-   "fieldtype": "Check",
-   "label": "Publish Salary Range"
-  }
- ],
- "icon": "fa fa-bookmark",
- "idx": 1,
- "links": [],
- "modified": "2020-09-18 11:23:29.488923",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Job Opening",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "read": 1,
-   "role": "Guest"
-  }
- ],
- "sort_field": "modified",
- "sort_order": "ASC"
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/job_opening/job_opening.py b/erpnext/hr/doctype/job_opening/job_opening.py
deleted file mode 100644
index ce7caa3..0000000
--- a/erpnext/hr/doctype/job_opening/job_opening.py
+++ /dev/null
@@ -1,100 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.utils import get_link_to_form
-from frappe.website.website_generator import WebsiteGenerator
-
-from erpnext.hr.doctype.staffing_plan.staffing_plan import (
-	get_active_staffing_plan_details,
-	get_designation_counts,
-)
-
-
-class JobOpening(WebsiteGenerator):
-	website = frappe._dict(
-		template="templates/generators/job_opening.html",
-		condition_field="publish",
-		page_title_field="job_title",
-	)
-
-	def validate(self):
-		if not self.route:
-			self.route = frappe.scrub(self.job_title).replace("_", "-")
-		self.validate_current_vacancies()
-
-	def validate_current_vacancies(self):
-		if not self.staffing_plan:
-			staffing_plan = get_active_staffing_plan_details(self.company, self.designation)
-			if staffing_plan:
-				self.staffing_plan = staffing_plan[0].name
-				self.planned_vacancies = staffing_plan[0].vacancies
-		elif not self.planned_vacancies:
-			self.planned_vacancies = frappe.db.get_value(
-				"Staffing Plan Detail",
-				{"parent": self.staffing_plan, "designation": self.designation},
-				"vacancies",
-			)
-
-		if self.staffing_plan and self.planned_vacancies:
-			staffing_plan_company = frappe.db.get_value("Staffing Plan", self.staffing_plan, "company")
-
-			designation_counts = get_designation_counts(self.designation, self.company, self.name)
-			current_count = designation_counts["employee_count"] + designation_counts["job_openings"]
-
-			number_of_positions = frappe.db.get_value(
-				"Staffing Plan Detail",
-				{"parent": self.staffing_plan, "designation": self.designation},
-				"number_of_positions",
-			)
-
-			if number_of_positions <= current_count:
-				frappe.throw(
-					_(
-						"Job Openings for the designation {0} are already open or the hiring is complete as per the Staffing Plan {1}"
-					).format(
-						frappe.bold(self.designation), get_link_to_form("Staffing Plan", self.staffing_plan)
-					),
-					title=_("Vacancies fulfilled"),
-				)
-
-	def get_context(self, context):
-		context.parents = [{"route": "jobs", "title": _("All Jobs")}]
-
-
-def get_list_context(context):
-	context.title = _("Jobs")
-	context.introduction = _("Current Job Openings")
-	context.get_list = get_job_openings
-
-
-def get_job_openings(
-	doctype, txt=None, filters=None, limit_start=0, limit_page_length=20, order_by=None
-):
-	fields = [
-		"name",
-		"status",
-		"job_title",
-		"description",
-		"publish_salary_range",
-		"lower_range",
-		"upper_range",
-		"currency",
-		"job_application_route",
-	]
-
-	filters = filters or {}
-	filters.update({"status": "Open"})
-
-	if txt:
-		filters.update(
-			{"job_title": ["like", "%{0}%".format(txt)], "description": ["like", "%{0}%".format(txt)]}
-		)
-
-	return frappe.get_all(
-		doctype, filters, fields, start=limit_start, page_length=limit_page_length, order_by=order_by
-	)
diff --git a/erpnext/hr/doctype/job_opening/job_opening_dashboard.py b/erpnext/hr/doctype/job_opening/job_opening_dashboard.py
deleted file mode 100644
index a309328..0000000
--- a/erpnext/hr/doctype/job_opening/job_opening_dashboard.py
+++ /dev/null
@@ -1,5 +0,0 @@
-def get_data():
-	return {
-		"fieldname": "job_title",
-		"transactions": [{"items": ["Job Applicant"]}],
-	}
diff --git a/erpnext/hr/doctype/job_opening/templates/job_opening_row.html b/erpnext/hr/doctype/job_opening/templates/job_opening_row.html
deleted file mode 100644
index 69bf49b..0000000
--- a/erpnext/hr/doctype/job_opening/templates/job_opening_row.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<div class="my-5">
-	<h3>{{ doc.job_title }}</h3>
-	<p>{{ doc.description }}</p>
-	{%- if doc.publish_salary_range -%}
-	<p><b>{{_("Salary range per month")}}: </b>{{ frappe.format_value(frappe.utils.flt(doc.lower_range), currency=doc.currency) }} - {{ frappe.format_value(frappe.utils.flt(doc.upper_range), currency=doc.currency) }}</p>
-	{% endif %}
-	<div>
-		{%- if doc.job_application_route -%}
-		<a class='btn btn-primary'
-		href='/{{doc.job_application_route}}?new=1&job_title={{ doc.name }}'>
-		{{ _("Apply Now") }}</a>
-		{% else %}
-		<a class='btn btn-primary'
-		href='/job_application?new=1&job_title={{ doc.name }}'>
-		{{ _("Apply Now") }}</a>
-		{% endif %}
-	</div>
-</div>
diff --git a/erpnext/hr/doctype/job_opening/test_job_opening.py b/erpnext/hr/doctype/job_opening/test_job_opening.py
deleted file mode 100644
index e991054..0000000
--- a/erpnext/hr/doctype/job_opening/test_job_opening.py
+++ /dev/null
@@ -1,79 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-import frappe
-from frappe.tests.utils import FrappeTestCase
-from frappe.utils import add_days, getdate
-
-from erpnext.hr.doctype.employee.test_employee import make_employee
-from erpnext.hr.doctype.staffing_plan.test_staffing_plan import make_company
-
-
-class TestJobOpening(FrappeTestCase):
-	def setUp(self):
-		frappe.db.delete("Staffing Plan")
-		frappe.db.delete("Staffing Plan Detail")
-		frappe.db.delete("Job Opening")
-
-		make_company("_Test Opening Company", "_TOC")
-		frappe.db.delete("Employee", {"company": "_Test Opening Company"})
-
-	def test_vacancies_fulfilled(self):
-		make_employee(
-			"test_job_opening@example.com", company="_Test Opening Company", designation="Designer"
-		)
-
-		staffing_plan = frappe.get_doc(
-			{
-				"doctype": "Staffing Plan",
-				"company": "_Test Opening Company",
-				"name": "Test",
-				"from_date": getdate(),
-				"to_date": add_days(getdate(), 10),
-			}
-		)
-
-		staffing_plan.append(
-			"staffing_details",
-			{"designation": "Designer", "vacancies": 1, "estimated_cost_per_position": 50000},
-		)
-		staffing_plan.insert()
-		staffing_plan.submit()
-
-		self.assertEqual(staffing_plan.staffing_details[0].number_of_positions, 2)
-
-		# allows creating 1 job opening as per vacancy
-		opening_1 = get_job_opening()
-		opening_1.insert()
-
-		# vacancies as per staffing plan already fulfilled via job opening and existing employee count
-		opening_2 = get_job_opening(job_title="Designer New")
-		self.assertRaises(frappe.ValidationError, opening_2.insert)
-
-		# allows updating existing job opening
-		opening_1.status = "Closed"
-		opening_1.save()
-
-
-def get_job_opening(**args):
-	args = frappe._dict(args)
-
-	opening = frappe.db.exists("Job Opening", {"job_title": args.job_title or "Designer"})
-	if opening:
-		return frappe.get_doc("Job Opening", opening)
-
-	opening = frappe.get_doc(
-		{
-			"doctype": "Job Opening",
-			"job_title": "Designer",
-			"designation": "Designer",
-			"company": "_Test Opening Company",
-			"status": "Open",
-		}
-	)
-
-	opening.update(args)
-
-	return opening
diff --git a/erpnext/hr/doctype/leave_allocation/README.md b/erpnext/hr/doctype/leave_allocation/README.md
deleted file mode 100644
index 870f9a5..0000000
--- a/erpnext/hr/doctype/leave_allocation/README.md
+++ /dev/null
@@ -1 +0,0 @@
-Leave Allocated to an Employee at the beginning of the period.
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_allocation/__init__.py b/erpnext/hr/doctype/leave_allocation/__init__.py
deleted file mode 100755
index e69de29..0000000
--- a/erpnext/hr/doctype/leave_allocation/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/leave_allocation/leave_allocation.js b/erpnext/hr/doctype/leave_allocation/leave_allocation.js
deleted file mode 100755
index 9742387..0000000
--- a/erpnext/hr/doctype/leave_allocation/leave_allocation.js
+++ /dev/null
@@ -1,131 +0,0 @@
-// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-// License: GNU General Public License v3. See license.txt
-
-cur_frm.add_fetch('employee', 'employee_name', 'employee_name');
-
-frappe.ui.form.on("Leave Allocation", {
-	onload: function(frm) {
-		// Ignore cancellation of doctype on cancel all.
-		frm.ignore_doctypes_on_cancel_all = ["Leave Ledger Entry"];
-
-		if (!frm.doc.from_date) frm.set_value("from_date", frappe.datetime.get_today());
-
-		frm.set_query("employee", function() {
-			return {
-				query: "erpnext.controllers.queries.employee_query"
-			};
-		});
-		frm.set_query("leave_type", function() {
-			return {
-				filters: {
-					is_lwp: 0
-				}
-			};
-		});
-	},
-
-	refresh: function(frm) {
-		if (frm.doc.docstatus === 1 && frm.doc.expired) {
-			var valid_expiry = moment(frappe.datetime.get_today()).isBetween(frm.doc.from_date, frm.doc.to_date);
-			if (valid_expiry) {
-				// expire current allocation
-				frm.add_custom_button(__('Expire Allocation'), function() {
-					frm.trigger("expire_allocation");
-				});
-			}
-		}
-	},
-
-	expire_allocation: function(frm) {
-		frappe.call({
-			method: 'erpnext.hr.doctype.leave_ledger_entry.leave_ledger_entry.expire_allocation',
-			args: {
-				'allocation': frm.doc,
-				'expiry_date': frappe.datetime.get_today()
-			},
-			freeze: true,
-			callback: function(r) {
-				if (!r.exc) {
-					frappe.msgprint(__("Allocation Expired!"));
-				}
-				frm.refresh();
-			}
-		});
-	},
-
-	employee: function(frm) {
-		frm.trigger("calculate_total_leaves_allocated");
-	},
-
-	leave_type: function(frm) {
-		frm.trigger("leave_policy");
-		frm.trigger("calculate_total_leaves_allocated");
-	},
-
-	carry_forward: function(frm) {
-		frm.trigger("calculate_total_leaves_allocated");
-	},
-
-	unused_leaves: function(frm) {
-		frm.set_value("total_leaves_allocated",
-			flt(frm.doc.unused_leaves) + flt(frm.doc.new_leaves_allocated));
-	},
-
-	new_leaves_allocated: function(frm) {
-		frm.set_value("total_leaves_allocated",
-			flt(frm.doc.unused_leaves) + flt(frm.doc.new_leaves_allocated));
-	},
-
-	leave_policy: function(frm) {
-		if (frm.doc.leave_policy && frm.doc.leave_type) {
-			frappe.db.get_value("Leave Policy Detail", {
-				'parent': frm.doc.leave_policy,
-				'leave_type': frm.doc.leave_type
-			}, 'annual_allocation', (r) => {
-				if (r && !r.exc) frm.set_value("new_leaves_allocated", flt(r.annual_allocation));
-			}, "Leave Policy");
-		}
-	},
-	calculate_total_leaves_allocated: function(frm) {
-		if (cint(frm.doc.carry_forward) == 1 && frm.doc.leave_type && frm.doc.employee) {
-			return frappe.call({
-				method: "set_total_leaves_allocated",
-				doc: frm.doc,
-				callback: function() {
-					frm.refresh_fields();
-				}
-			});
-		} else if (cint(frm.doc.carry_forward) == 0) {
-			frm.set_value("unused_leaves", 0);
-			frm.set_value("total_leaves_allocated", flt(frm.doc.new_leaves_allocated));
-		}
-	}
-});
-
-frappe.tour["Leave Allocation"] = [
-	{
-		fieldname: "employee",
-		title: "Employee",
-		description: __("Select the Employee for which you want to allocate leaves.")
-	},
-	{
-		fieldname: "leave_type",
-		title: "Leave Type",
-		description: __("Select the Leave Type like Sick leave, Privilege Leave, Casual Leave, etc.")
-	},
-	{
-		fieldname: "from_date",
-		title: "From Date",
-		description: __("Select the date from which this Leave Allocation will be valid.")
-	},
-	{
-		fieldname: "to_date",
-		title: "To Date",
-		description: __("Select the date after which this Leave Allocation will expire.")
-	},
-	{
-		fieldname: "new_leaves_allocated",
-		title: "New Leaves Allocated",
-		description: __("Enter the number of leaves you want to allocate for the period.")
-	}
-];
diff --git a/erpnext/hr/doctype/leave_allocation/leave_allocation.json b/erpnext/hr/doctype/leave_allocation/leave_allocation.json
deleted file mode 100644
index 9d1db9b..0000000
--- a/erpnext/hr/doctype/leave_allocation/leave_allocation.json
+++ /dev/null
@@ -1,286 +0,0 @@
-{
- "actions": [],
- "allow_import": 1,
- "autoname": "naming_series:",
- "creation": "2013-02-20 19:10:38",
- "doctype": "DocType",
- "document_type": "Setup",
- "engine": "InnoDB",
- "field_order": [
-  "naming_series",
-  "employee",
-  "employee_name",
-  "department",
-  "company",
-  "column_break1",
-  "leave_type",
-  "from_date",
-  "to_date",
-  "section_break_6",
-  "new_leaves_allocated",
-  "carry_forward",
-  "unused_leaves",
-  "total_leaves_allocated",
-  "total_leaves_encashed",
-  "column_break_10",
-  "compensatory_request",
-  "leave_period",
-  "leave_policy",
-  "leave_policy_assignment",
-  "carry_forwarded_leaves_count",
-  "expired",
-  "amended_from",
-  "notes",
-  "description"
- ],
- "fields": [
-  {
-   "fieldname": "naming_series",
-   "fieldtype": "Select",
-   "label": "Series",
-   "no_copy": 1,
-   "options": "HR-LAL-.YYYY.-",
-   "print_hide": 1,
-   "reqd": 1,
-   "set_only_once": 1
-  },
-  {
-   "fieldname": "employee",
-   "fieldtype": "Link",
-   "in_global_search": 1,
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Employee",
-   "oldfieldname": "employee",
-   "oldfieldtype": "Link",
-   "options": "Employee",
-   "reqd": 1,
-   "search_index": 1
-  },
-  {
-   "fetch_from": "employee.employee_name",
-   "fieldname": "employee_name",
-   "fieldtype": "Data",
-   "in_global_search": 1,
-   "in_list_view": 1,
-   "label": "Employee Name",
-   "read_only": 1,
-   "search_index": 1
-  },
-  {
-   "fetch_from": "employee.department",
-   "fieldname": "department",
-   "fieldtype": "Link",
-   "label": "Department",
-   "options": "Department",
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break1",
-   "fieldtype": "Column Break",
-   "width": "50%"
-  },
-  {
-   "fieldname": "leave_type",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Leave Type",
-   "oldfieldname": "leave_type",
-   "oldfieldtype": "Link",
-   "options": "Leave Type",
-   "reqd": 1,
-   "search_index": 1
-  },
-  {
-   "fieldname": "from_date",
-   "fieldtype": "Date",
-   "label": "From Date",
-   "reqd": 1
-  },
-  {
-   "fieldname": "to_date",
-   "fieldtype": "Date",
-   "label": "To Date",
-   "reqd": 1
-  },
-  {
-   "fieldname": "section_break_6",
-   "fieldtype": "Section Break",
-   "label": "Allocation"
-  },
-  {
-   "allow_on_submit": 1,
-   "bold": 1,
-   "fieldname": "new_leaves_allocated",
-   "fieldtype": "Float",
-   "label": "New Leaves Allocated"
-  },
-  {
-   "default": "0",
-   "fieldname": "carry_forward",
-   "fieldtype": "Check",
-   "label": "Add unused leaves from previous allocations"
-  },
-  {
-   "depends_on": "carry_forward",
-   "fieldname": "unused_leaves",
-   "fieldtype": "Float",
-   "label": "Unused leaves",
-   "read_only": 1
-  },
-  {
-   "allow_on_submit": 1,
-   "fieldname": "total_leaves_allocated",
-   "fieldtype": "Float",
-   "label": "Total Leaves Allocated",
-   "read_only": 1,
-   "reqd": 1
-  },
-  {
-   "depends_on": "eval:doc.total_leaves_encashed>0",
-   "fieldname": "total_leaves_encashed",
-   "fieldtype": "Float",
-   "label": "Total Leaves Encashed",
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break_10",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "compensatory_request",
-   "fieldtype": "Link",
-   "label": "Compensatory Leave Request",
-   "options": "Compensatory Leave Request",
-   "read_only": 1
-  },
-  {
-   "fieldname": "leave_period",
-   "fieldtype": "Link",
-   "in_standard_filter": 1,
-   "label": "Leave Period",
-   "options": "Leave Period",
-   "read_only": 1
-  },
-  {
-   "fetch_from": "leave_policy_assignment.leave_policy",
-   "fieldname": "leave_policy",
-   "fieldtype": "Link",
-   "hidden": 1,
-   "in_standard_filter": 1,
-   "label": "Leave Policy",
-   "options": "Leave Policy",
-   "read_only": 1
-  },
-  {
-   "default": "0",
-   "fieldname": "expired",
-   "fieldtype": "Check",
-   "hidden": 1,
-   "in_standard_filter": 1,
-   "label": "Expired",
-   "read_only": 1
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "ignore_user_permissions": 1,
-   "label": "Amended From",
-   "no_copy": 1,
-   "oldfieldname": "amended_from",
-   "oldfieldtype": "Data",
-   "options": "Leave Allocation",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "collapsible": 1,
-   "fieldname": "notes",
-   "fieldtype": "Section Break",
-   "label": "Notes"
-  },
-  {
-   "fieldname": "description",
-   "fieldtype": "Small Text",
-   "label": "Description",
-   "oldfieldname": "reason",
-   "oldfieldtype": "Small Text",
-   "width": "300px"
-  },
-  {
-   "depends_on": "carry_forwarded_leaves_count",
-   "fieldname": "carry_forwarded_leaves_count",
-   "fieldtype": "Float",
-   "label": "Carry Forwarded Leaves",
-   "read_only": 1
-  },
-  {
-   "fieldname": "leave_policy_assignment",
-   "fieldtype": "Link",
-   "label": "Leave Policy Assignment",
-   "options": "Leave Policy Assignment",
-   "read_only": 1
-  },
-  {
-   "fetch_from": "employee.company",
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "label": "Company",
-   "options": "Company",
-   "read_only": 1,
-   "reqd": 1
-  }
- ],
- "icon": "fa fa-ok",
- "idx": 1,
- "index_web_pages_for_search": 1,
- "is_submittable": 1,
- "links": [],
- "modified": "2022-04-07 09:50:33.145825",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Leave Allocation",
- "naming_rule": "By \"Naming Series\" field",
- "owner": "Administrator",
- "permissions": [
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "import": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  }
- ],
- "search_fields": "employee,employee_name,leave_type,total_leaves_allocated",
- "show_name_in_global_search": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": [],
- "timeline_field": "employee",
- "title_field": "employee_name",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_allocation/leave_allocation.py b/erpnext/hr/doctype/leave_allocation/leave_allocation.py
deleted file mode 100755
index 8fae2a9..0000000
--- a/erpnext/hr/doctype/leave_allocation/leave_allocation.py
+++ /dev/null
@@ -1,370 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.utils import add_days, date_diff, flt, formatdate, getdate
-
-from erpnext.hr.doctype.leave_application.leave_application import get_approved_leaves_for_period
-from erpnext.hr.doctype.leave_ledger_entry.leave_ledger_entry import (
-	create_leave_ledger_entry,
-	expire_allocation,
-)
-from erpnext.hr.utils import get_leave_period, set_employee_name
-
-
-class OverlapError(frappe.ValidationError):
-	pass
-
-
-class BackDatedAllocationError(frappe.ValidationError):
-	pass
-
-
-class OverAllocationError(frappe.ValidationError):
-	pass
-
-
-class LessAllocationError(frappe.ValidationError):
-	pass
-
-
-class ValueMultiplierError(frappe.ValidationError):
-	pass
-
-
-class LeaveAllocation(Document):
-	def validate(self):
-		self.validate_period()
-		self.validate_allocation_overlap()
-		self.validate_lwp()
-		set_employee_name(self)
-		self.set_total_leaves_allocated()
-		self.validate_leave_days_and_dates()
-
-	def validate_leave_days_and_dates(self):
-		# all validations that should run on save as well as on update after submit
-		self.validate_back_dated_allocation()
-		self.validate_total_leaves_allocated()
-		self.validate_leave_allocation_days()
-
-	def validate_leave_allocation_days(self):
-		company = frappe.db.get_value("Employee", self.employee, "company")
-		leave_period = get_leave_period(self.from_date, self.to_date, company)
-		max_leaves_allowed = flt(
-			frappe.db.get_value("Leave Type", self.leave_type, "max_leaves_allowed")
-		)
-		if max_leaves_allowed > 0:
-			leave_allocated = 0
-			if leave_period:
-				leave_allocated = get_leave_allocation_for_period(
-					self.employee,
-					self.leave_type,
-					leave_period[0].from_date,
-					leave_period[0].to_date,
-					exclude_allocation=self.name,
-				)
-			leave_allocated += flt(self.new_leaves_allocated)
-			if leave_allocated > max_leaves_allowed:
-				frappe.throw(
-					_(
-						"Total allocated leaves are more than maximum allocation allowed for {0} leave type for employee {1} in the period"
-					).format(self.leave_type, self.employee),
-					OverAllocationError,
-				)
-
-	def on_submit(self):
-		self.create_leave_ledger_entry()
-
-		# expire all unused leaves in the ledger on creation of carry forward allocation
-		allocation = get_previous_allocation(self.from_date, self.leave_type, self.employee)
-		if self.carry_forward and allocation:
-			expire_allocation(allocation)
-
-	def on_cancel(self):
-		self.create_leave_ledger_entry(submit=False)
-		if self.leave_policy_assignment:
-			self.update_leave_policy_assignments_when_no_allocations_left()
-		if self.carry_forward:
-			self.set_carry_forwarded_leaves_in_previous_allocation(on_cancel=True)
-
-	def on_update_after_submit(self):
-		if self.has_value_changed("new_leaves_allocated"):
-			self.validate_against_leave_applications()
-
-			# recalculate total leaves allocated
-			self.total_leaves_allocated = flt(self.unused_leaves) + flt(self.new_leaves_allocated)
-			# run required validations again since total leaves are being updated
-			self.validate_leave_days_and_dates()
-
-			leaves_to_be_added = self.new_leaves_allocated - self.get_existing_leave_count()
-			args = {
-				"leaves": leaves_to_be_added,
-				"from_date": self.from_date,
-				"to_date": self.to_date,
-				"is_carry_forward": 0,
-			}
-			create_leave_ledger_entry(self, args, True)
-			self.db_update()
-
-	def get_existing_leave_count(self):
-		ledger_entries = frappe.get_all(
-			"Leave Ledger Entry",
-			filters={
-				"transaction_type": "Leave Allocation",
-				"transaction_name": self.name,
-				"employee": self.employee,
-				"company": self.company,
-				"leave_type": self.leave_type,
-			},
-			pluck="leaves",
-		)
-		total_existing_leaves = 0
-		for entry in ledger_entries:
-			total_existing_leaves += entry
-
-		return total_existing_leaves
-
-	def validate_against_leave_applications(self):
-		leaves_taken = get_approved_leaves_for_period(
-			self.employee, self.leave_type, self.from_date, self.to_date
-		)
-		if flt(leaves_taken) > flt(self.total_leaves_allocated):
-			if frappe.db.get_value("Leave Type", self.leave_type, "allow_negative"):
-				frappe.msgprint(
-					_(
-						"Note: Total allocated leaves {0} shouldn't be less than already approved leaves {1} for the period"
-					).format(self.total_leaves_allocated, leaves_taken)
-				)
-			else:
-				frappe.throw(
-					_(
-						"Total allocated leaves {0} cannot be less than already approved leaves {1} for the period"
-					).format(self.total_leaves_allocated, leaves_taken),
-					LessAllocationError,
-				)
-
-	def update_leave_policy_assignments_when_no_allocations_left(self):
-		allocations = frappe.db.get_list(
-			"Leave Allocation",
-			filters={"docstatus": 1, "leave_policy_assignment": self.leave_policy_assignment},
-		)
-		if len(allocations) == 0:
-			frappe.db.set_value(
-				"Leave Policy Assignment", self.leave_policy_assignment, "leaves_allocated", 0
-			)
-
-	def validate_period(self):
-		if date_diff(self.to_date, self.from_date) <= 0:
-			frappe.throw(_("To date cannot be before from date"))
-
-	def validate_lwp(self):
-		if frappe.db.get_value("Leave Type", self.leave_type, "is_lwp"):
-			frappe.throw(
-				_("Leave Type {0} cannot be allocated since it is leave without pay").format(self.leave_type)
-			)
-
-	def validate_allocation_overlap(self):
-		leave_allocation = frappe.db.sql(
-			"""
-			SELECT
-				name
-			FROM `tabLeave Allocation`
-			WHERE
-				employee=%s AND leave_type=%s
-				AND name <> %s AND docstatus=1
-				AND to_date >= %s AND from_date <= %s""",
-			(self.employee, self.leave_type, self.name, self.from_date, self.to_date),
-		)
-
-		if leave_allocation:
-			frappe.msgprint(
-				_("{0} already allocated for Employee {1} for period {2} to {3}").format(
-					self.leave_type, self.employee, formatdate(self.from_date), formatdate(self.to_date)
-				)
-			)
-
-			frappe.throw(
-				_("Reference")
-				+ ': <a href="/app/Form/Leave Allocation/{0}">{0}</a>'.format(leave_allocation[0][0]),
-				OverlapError,
-			)
-
-	def validate_back_dated_allocation(self):
-		future_allocation = frappe.db.sql(
-			"""select name, from_date from `tabLeave Allocation`
-			where employee=%s and leave_type=%s and docstatus=1 and from_date > %s
-			and carry_forward=1""",
-			(self.employee, self.leave_type, self.to_date),
-			as_dict=1,
-		)
-
-		if future_allocation:
-			frappe.throw(
-				_(
-					"Leave cannot be allocated before {0}, as leave balance has already been carry-forwarded in the future leave allocation record {1}"
-				).format(formatdate(future_allocation[0].from_date), future_allocation[0].name),
-				BackDatedAllocationError,
-			)
-
-	@frappe.whitelist()
-	def set_total_leaves_allocated(self):
-		self.unused_leaves = get_carry_forwarded_leaves(
-			self.employee, self.leave_type, self.from_date, self.carry_forward
-		)
-
-		self.total_leaves_allocated = flt(self.unused_leaves) + flt(self.new_leaves_allocated)
-
-		self.limit_carry_forward_based_on_max_allowed_leaves()
-
-		if self.carry_forward:
-			self.set_carry_forwarded_leaves_in_previous_allocation()
-
-		if (
-			not self.total_leaves_allocated
-			and not frappe.db.get_value("Leave Type", self.leave_type, "is_earned_leave")
-			and not frappe.db.get_value("Leave Type", self.leave_type, "is_compensatory")
-		):
-			frappe.throw(
-				_("Total leaves allocated is mandatory for Leave Type {0}").format(self.leave_type)
-			)
-
-	def limit_carry_forward_based_on_max_allowed_leaves(self):
-		max_leaves_allowed = frappe.db.get_value("Leave Type", self.leave_type, "max_leaves_allowed")
-		if max_leaves_allowed and self.total_leaves_allocated > flt(max_leaves_allowed):
-			self.total_leaves_allocated = flt(max_leaves_allowed)
-			self.unused_leaves = max_leaves_allowed - flt(self.new_leaves_allocated)
-
-	def set_carry_forwarded_leaves_in_previous_allocation(self, on_cancel=False):
-		"""Set carry forwarded leaves in previous allocation"""
-		previous_allocation = get_previous_allocation(self.from_date, self.leave_type, self.employee)
-		if on_cancel:
-			self.unused_leaves = 0.0
-		if previous_allocation:
-			frappe.db.set_value(
-				"Leave Allocation",
-				previous_allocation.name,
-				"carry_forwarded_leaves_count",
-				self.unused_leaves,
-			)
-
-	def validate_total_leaves_allocated(self):
-		# Adding a day to include To Date in the difference
-		date_difference = date_diff(self.to_date, self.from_date) + 1
-		if date_difference < self.total_leaves_allocated:
-			if frappe.db.get_value("Leave Type", self.leave_type, "allow_over_allocation"):
-				frappe.msgprint(
-					_("<b>Total Leaves Allocated</b> are more than the number of days in the allocation period"),
-					indicator="orange",
-					alert=True,
-				)
-			else:
-				frappe.throw(
-					_("<b>Total Leaves Allocated</b> are more than the number of days in the allocation period"),
-					exc=OverAllocationError,
-					title=_("Over Allocation"),
-				)
-
-	def create_leave_ledger_entry(self, submit=True):
-		if self.unused_leaves:
-			expiry_days = frappe.db.get_value(
-				"Leave Type", self.leave_type, "expire_carry_forwarded_leaves_after_days"
-			)
-			end_date = add_days(self.from_date, expiry_days - 1) if expiry_days else self.to_date
-			args = dict(
-				leaves=self.unused_leaves,
-				from_date=self.from_date,
-				to_date=min(getdate(end_date), getdate(self.to_date)),
-				is_carry_forward=1,
-			)
-			create_leave_ledger_entry(self, args, submit)
-
-		args = dict(
-			leaves=self.new_leaves_allocated,
-			from_date=self.from_date,
-			to_date=self.to_date,
-			is_carry_forward=0,
-		)
-		create_leave_ledger_entry(self, args, submit)
-
-
-def get_previous_allocation(from_date, leave_type, employee):
-	"""Returns document properties of previous allocation"""
-	return frappe.db.get_value(
-		"Leave Allocation",
-		filters={
-			"to_date": ("<", from_date),
-			"leave_type": leave_type,
-			"employee": employee,
-			"docstatus": 1,
-		},
-		order_by="to_date DESC",
-		fieldname=["name", "from_date", "to_date", "employee", "leave_type"],
-		as_dict=1,
-	)
-
-
-def get_leave_allocation_for_period(
-	employee, leave_type, from_date, to_date, exclude_allocation=None
-):
-	from frappe.query_builder.functions import Sum
-
-	Allocation = frappe.qb.DocType("Leave Allocation")
-	return (
-		frappe.qb.from_(Allocation)
-		.select(Sum(Allocation.total_leaves_allocated).as_("total_allocated_leaves"))
-		.where(
-			(Allocation.employee == employee)
-			& (Allocation.leave_type == leave_type)
-			& (Allocation.docstatus == 1)
-			& (Allocation.name != exclude_allocation)
-			& (
-				(Allocation.from_date.between(from_date, to_date))
-				| (Allocation.to_date.between(from_date, to_date))
-				| ((Allocation.from_date < from_date) & (Allocation.to_date > to_date))
-			)
-		)
-	).run()[0][0] or 0.0
-
-
-@frappe.whitelist()
-def get_carry_forwarded_leaves(employee, leave_type, date, carry_forward=None):
-	"""Returns carry forwarded leaves for the given employee"""
-	unused_leaves = 0.0
-	previous_allocation = get_previous_allocation(date, leave_type, employee)
-	if carry_forward and previous_allocation:
-		validate_carry_forward(leave_type)
-		unused_leaves = get_unused_leaves(
-			employee, leave_type, previous_allocation.from_date, previous_allocation.to_date
-		)
-		if unused_leaves:
-			max_carry_forwarded_leaves = frappe.db.get_value(
-				"Leave Type", leave_type, "maximum_carry_forwarded_leaves"
-			)
-			if max_carry_forwarded_leaves and unused_leaves > flt(max_carry_forwarded_leaves):
-				unused_leaves = flt(max_carry_forwarded_leaves)
-
-	return unused_leaves
-
-
-def get_unused_leaves(employee, leave_type, from_date, to_date):
-	"""Returns unused leaves between the given period while skipping leave allocation expiry"""
-	leaves = frappe.get_all(
-		"Leave Ledger Entry",
-		filters={
-			"employee": employee,
-			"leave_type": leave_type,
-			"from_date": (">=", from_date),
-			"to_date": ("<=", to_date),
-		},
-		or_filters={"is_expired": 0, "is_carry_forward": 1},
-		fields=["sum(leaves) as leaves"],
-	)
-	return flt(leaves[0]["leaves"])
-
-
-def validate_carry_forward(leave_type):
-	if not frappe.db.get_value("Leave Type", leave_type, "is_carry_forward"):
-		frappe.throw(_("Leave Type {0} cannot be carry-forwarded").format(leave_type))
diff --git a/erpnext/hr/doctype/leave_allocation/leave_allocation_dashboard.py b/erpnext/hr/doctype/leave_allocation/leave_allocation_dashboard.py
deleted file mode 100644
index 96e81db..0000000
--- a/erpnext/hr/doctype/leave_allocation/leave_allocation_dashboard.py
+++ /dev/null
@@ -1,6 +0,0 @@
-def get_data():
-	return {
-		"fieldname": "leave_allocation",
-		"transactions": [{"items": ["Compensatory Leave Request"]}, {"items": ["Leave Encashment"]}],
-		"reports": [{"items": ["Employee Leave Balance"]}],
-	}
diff --git a/erpnext/hr/doctype/leave_allocation/leave_allocation_list.js b/erpnext/hr/doctype/leave_allocation/leave_allocation_list.js
deleted file mode 100644
index 3ab176f..0000000
--- a/erpnext/hr/doctype/leave_allocation/leave_allocation_list.js
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors
-// License: GNU General Public License v3. See license.txt
-
-// render
-frappe.listview_settings['Leave Allocation'] = {
-	get_indicator: function(doc) {
-		if(doc.status==="Expired") {
-			return [__("Expired"), "gray", "expired, =, 1"];
-		}
-	},
-};
diff --git a/erpnext/hr/doctype/leave_allocation/test_leave_allocation.py b/erpnext/hr/doctype/leave_allocation/test_leave_allocation.py
deleted file mode 100644
index b4a42d3..0000000
--- a/erpnext/hr/doctype/leave_allocation/test_leave_allocation.py
+++ /dev/null
@@ -1,433 +0,0 @@
-import unittest
-
-import frappe
-from frappe.tests.utils import FrappeTestCase
-from frappe.utils import add_days, add_months, getdate, nowdate
-
-import erpnext
-from erpnext.hr.doctype.employee.test_employee import make_employee
-from erpnext.hr.doctype.leave_allocation.leave_allocation import (
-	BackDatedAllocationError,
-	OverAllocationError,
-)
-from erpnext.hr.doctype.leave_ledger_entry.leave_ledger_entry import process_expired_allocation
-from erpnext.hr.doctype.leave_type.test_leave_type import create_leave_type
-
-
-class TestLeaveAllocation(FrappeTestCase):
-	def setUp(self):
-		frappe.db.delete("Leave Period")
-		frappe.db.delete("Leave Allocation")
-		frappe.db.delete("Leave Ledger Entry")
-
-		emp_id = make_employee("test_emp_leave_allocation@salary.com", company="_Test Company")
-		self.employee = frappe.get_doc("Employee", emp_id)
-
-	def test_overlapping_allocation(self):
-		leaves = [
-			{
-				"doctype": "Leave Allocation",
-				"__islocal": 1,
-				"employee": self.employee.name,
-				"employee_name": self.employee.employee_name,
-				"leave_type": "_Test Leave Type",
-				"from_date": getdate("2015-10-01"),
-				"to_date": getdate("2015-10-31"),
-				"new_leaves_allocated": 5,
-				"docstatus": 1,
-			},
-			{
-				"doctype": "Leave Allocation",
-				"__islocal": 1,
-				"employee": self.employee.name,
-				"employee_name": self.employee.employee_name,
-				"leave_type": "_Test Leave Type",
-				"from_date": getdate("2015-09-01"),
-				"to_date": getdate("2015-11-30"),
-				"new_leaves_allocated": 5,
-			},
-		]
-
-		frappe.get_doc(leaves[0]).save()
-		self.assertRaises(frappe.ValidationError, frappe.get_doc(leaves[1]).save)
-
-	def test_invalid_period(self):
-		doc = frappe.get_doc(
-			{
-				"doctype": "Leave Allocation",
-				"__islocal": 1,
-				"employee": self.employee.name,
-				"employee_name": self.employee.employee_name,
-				"leave_type": "_Test Leave Type",
-				"from_date": getdate("2015-09-30"),
-				"to_date": getdate("2015-09-1"),
-				"new_leaves_allocated": 5,
-			}
-		)
-
-		# invalid period
-		self.assertRaises(frappe.ValidationError, doc.save)
-
-	def test_validation_for_over_allocation(self):
-		leave_type = create_leave_type(leave_type_name="Test Over Allocation", is_carry_forward=1)
-		leave_type.save()
-
-		doc = frappe.get_doc(
-			{
-				"doctype": "Leave Allocation",
-				"__islocal": 1,
-				"employee": self.employee.name,
-				"employee_name": self.employee.employee_name,
-				"leave_type": leave_type.name,
-				"from_date": getdate("2015-09-1"),
-				"to_date": getdate("2015-09-30"),
-				"new_leaves_allocated": 35,
-				"carry_forward": 1,
-			}
-		)
-
-		# allocated leave more than period
-		self.assertRaises(OverAllocationError, doc.save)
-
-		leave_type.allow_over_allocation = 1
-		leave_type.save()
-
-		# allows creating a leave allocation with more leave days than period days
-		doc = frappe.get_doc(
-			{
-				"doctype": "Leave Allocation",
-				"__islocal": 1,
-				"employee": self.employee.name,
-				"employee_name": self.employee.employee_name,
-				"leave_type": leave_type.name,
-				"from_date": getdate("2015-09-1"),
-				"to_date": getdate("2015-09-30"),
-				"new_leaves_allocated": 35,
-				"carry_forward": 1,
-			}
-		).insert()
-
-	def test_validation_for_over_allocation_post_submission(self):
-		allocation = frappe.get_doc(
-			{
-				"doctype": "Leave Allocation",
-				"__islocal": 1,
-				"employee": self.employee.name,
-				"employee_name": self.employee.employee_name,
-				"leave_type": "_Test Leave Type",
-				"from_date": getdate("2015-09-1"),
-				"to_date": getdate("2015-09-30"),
-				"new_leaves_allocated": 15,
-			}
-		).submit()
-		allocation.reload()
-		# allocated leaves more than period after submission
-		allocation.new_leaves_allocated = 35
-		self.assertRaises(OverAllocationError, allocation.save)
-
-	def test_validation_for_over_allocation_based_on_leave_setup(self):
-		frappe.delete_doc_if_exists("Leave Period", "Test Allocation Period")
-		leave_period = frappe.get_doc(
-			dict(
-				name="Test Allocation Period",
-				doctype="Leave Period",
-				from_date=add_months(nowdate(), -6),
-				to_date=add_months(nowdate(), 6),
-				company="_Test Company",
-				is_active=1,
-			)
-		).insert()
-
-		leave_type = create_leave_type(leave_type_name="_Test Allocation Validation", is_carry_forward=1)
-		leave_type.max_leaves_allowed = 25
-		leave_type.save()
-
-		# 15 leaves allocated in this period
-		allocation = create_leave_allocation(
-			leave_type=leave_type.name,
-			employee=self.employee.name,
-			employee_name=self.employee.employee_name,
-			from_date=leave_period.from_date,
-			to_date=nowdate(),
-		)
-		allocation.submit()
-
-		# trying to allocate additional 15 leaves
-		allocation = create_leave_allocation(
-			leave_type=leave_type.name,
-			employee=self.employee.name,
-			employee_name=self.employee.employee_name,
-			from_date=add_days(nowdate(), 1),
-			to_date=leave_period.to_date,
-		)
-		self.assertRaises(OverAllocationError, allocation.save)
-
-	def test_validation_for_over_allocation_based_on_leave_setup_post_submission(self):
-		frappe.delete_doc_if_exists("Leave Period", "Test Allocation Period")
-		leave_period = frappe.get_doc(
-			dict(
-				name="Test Allocation Period",
-				doctype="Leave Period",
-				from_date=add_months(nowdate(), -6),
-				to_date=add_months(nowdate(), 6),
-				company="_Test Company",
-				is_active=1,
-			)
-		).insert()
-
-		leave_type = create_leave_type(leave_type_name="_Test Allocation Validation", is_carry_forward=1)
-		leave_type.max_leaves_allowed = 30
-		leave_type.save()
-
-		# 15 leaves allocated
-		allocation = create_leave_allocation(
-			leave_type=leave_type.name,
-			employee=self.employee.name,
-			employee_name=self.employee.employee_name,
-			from_date=leave_period.from_date,
-			to_date=nowdate(),
-		)
-		allocation.submit()
-		allocation.reload()
-
-		# allocate additional 15 leaves
-		allocation = create_leave_allocation(
-			leave_type=leave_type.name,
-			employee=self.employee.name,
-			employee_name=self.employee.employee_name,
-			from_date=add_days(nowdate(), 1),
-			to_date=leave_period.to_date,
-		)
-		allocation.submit()
-		allocation.reload()
-
-		# trying to allocate 25 leaves in 2nd alloc within leave period
-		# total leaves = 40 which is more than `max_leaves_allowed` setting i.e. 30
-		allocation.new_leaves_allocated = 25
-		self.assertRaises(OverAllocationError, allocation.save)
-
-	def test_validate_back_dated_allocation_update(self):
-		leave_type = create_leave_type(leave_type_name="_Test_CF_leave", is_carry_forward=1)
-		leave_type.save()
-
-		# initial leave allocation = 15
-		leave_allocation = create_leave_allocation(
-			employee=self.employee.name,
-			employee_name=self.employee.employee_name,
-			leave_type="_Test_CF_leave",
-			from_date=add_months(nowdate(), -12),
-			to_date=add_months(nowdate(), -1),
-			carry_forward=0,
-		)
-		leave_allocation.submit()
-
-		# new_leaves = 15, carry_forwarded = 10
-		leave_allocation_1 = create_leave_allocation(
-			employee=self.employee.name,
-			employee_name=self.employee.employee_name,
-			leave_type="_Test_CF_leave",
-			carry_forward=1,
-		)
-		leave_allocation_1.submit()
-
-		# try updating initial leave allocation
-		leave_allocation.reload()
-		leave_allocation.new_leaves_allocated = 20
-		self.assertRaises(BackDatedAllocationError, leave_allocation.save)
-
-	def test_carry_forward_calculation(self):
-		leave_type = create_leave_type(leave_type_name="_Test_CF_leave", is_carry_forward=1)
-		leave_type.maximum_carry_forwarded_leaves = 10
-		leave_type.max_leaves_allowed = 30
-		leave_type.save()
-
-		# initial leave allocation = 15
-		leave_allocation = create_leave_allocation(
-			employee=self.employee.name,
-			employee_name=self.employee.employee_name,
-			leave_type="_Test_CF_leave",
-			from_date=add_months(nowdate(), -12),
-			to_date=add_months(nowdate(), -1),
-			carry_forward=0,
-		)
-		leave_allocation.submit()
-
-		# carry forwarded leaves considering maximum_carry_forwarded_leaves
-		# new_leaves = 15, carry_forwarded = 10
-		leave_allocation_1 = create_leave_allocation(
-			employee=self.employee.name,
-			employee_name=self.employee.employee_name,
-			leave_type="_Test_CF_leave",
-			carry_forward=1,
-		)
-		leave_allocation_1.submit()
-		leave_allocation_1.reload()
-
-		self.assertEqual(leave_allocation_1.unused_leaves, 10)
-		self.assertEqual(leave_allocation_1.total_leaves_allocated, 25)
-
-		leave_allocation_1.cancel()
-
-		# carry forwarded leaves considering max_leave_allowed
-		# max_leave_allowed = 30, new_leaves = 25, carry_forwarded = 5
-		leave_allocation_2 = create_leave_allocation(
-			employee=self.employee.name,
-			employee_name=self.employee.employee_name,
-			leave_type="_Test_CF_leave",
-			carry_forward=1,
-			new_leaves_allocated=25,
-		)
-		leave_allocation_2.submit()
-
-		self.assertEqual(leave_allocation_2.unused_leaves, 5)
-
-	def test_carry_forward_leaves_expiry(self):
-		leave_type = create_leave_type(
-			leave_type_name="_Test_CF_leave_expiry",
-			is_carry_forward=1,
-			expire_carry_forwarded_leaves_after_days=90,
-		)
-		leave_type.save()
-
-		# initial leave allocation
-		leave_allocation = create_leave_allocation(
-			employee=self.employee.name,
-			employee_name=self.employee.employee_name,
-			leave_type="_Test_CF_leave_expiry",
-			from_date=add_months(nowdate(), -24),
-			to_date=add_months(nowdate(), -12),
-			carry_forward=0,
-		)
-		leave_allocation.submit()
-
-		leave_allocation = create_leave_allocation(
-			employee=self.employee.name,
-			employee_name=self.employee.employee_name,
-			leave_type="_Test_CF_leave_expiry",
-			from_date=add_days(nowdate(), -90),
-			to_date=add_days(nowdate(), 100),
-			carry_forward=1,
-		)
-		leave_allocation.submit()
-
-		# expires all the carry forwarded leaves after 90 days
-		process_expired_allocation()
-
-		# leave allocation with carry forward of only new leaves allocated
-		leave_allocation_1 = create_leave_allocation(
-			employee=self.employee.name,
-			employee_name=self.employee.employee_name,
-			leave_type="_Test_CF_leave_expiry",
-			carry_forward=1,
-			from_date=add_months(nowdate(), 6),
-			to_date=add_months(nowdate(), 12),
-		)
-		leave_allocation_1.submit()
-
-		self.assertEqual(leave_allocation_1.unused_leaves, leave_allocation.new_leaves_allocated)
-
-	def test_creation_of_leave_ledger_entry_on_submit(self):
-		leave_allocation = create_leave_allocation(
-			employee=self.employee.name, employee_name=self.employee.employee_name
-		)
-		leave_allocation.submit()
-
-		leave_ledger_entry = frappe.get_all(
-			"Leave Ledger Entry", fields="*", filters=dict(transaction_name=leave_allocation.name)
-		)
-
-		self.assertEqual(len(leave_ledger_entry), 1)
-		self.assertEqual(leave_ledger_entry[0].employee, leave_allocation.employee)
-		self.assertEqual(leave_ledger_entry[0].leave_type, leave_allocation.leave_type)
-		self.assertEqual(leave_ledger_entry[0].leaves, leave_allocation.new_leaves_allocated)
-
-		# check if leave ledger entry is deleted on cancellation
-		leave_allocation.cancel()
-		self.assertFalse(
-			frappe.db.exists("Leave Ledger Entry", {"transaction_name": leave_allocation.name})
-		)
-
-	def test_leave_addition_after_submit(self):
-		leave_allocation = create_leave_allocation(
-			employee=self.employee.name, employee_name=self.employee.employee_name
-		)
-		leave_allocation.submit()
-		leave_allocation.reload()
-		self.assertTrue(leave_allocation.total_leaves_allocated, 15)
-
-		leave_allocation.new_leaves_allocated = 40
-		leave_allocation.submit()
-		leave_allocation.reload()
-		self.assertTrue(leave_allocation.total_leaves_allocated, 40)
-
-	def test_leave_subtraction_after_submit(self):
-		leave_allocation = create_leave_allocation(
-			employee=self.employee.name, employee_name=self.employee.employee_name
-		)
-		leave_allocation.submit()
-		leave_allocation.reload()
-		self.assertTrue(leave_allocation.total_leaves_allocated, 15)
-
-		leave_allocation.new_leaves_allocated = 10
-		leave_allocation.submit()
-		leave_allocation.reload()
-		self.assertTrue(leave_allocation.total_leaves_allocated, 10)
-
-	def test_validation_against_leave_application_after_submit(self):
-		from erpnext.payroll.doctype.salary_slip.test_salary_slip import make_holiday_list
-
-		make_holiday_list()
-		frappe.db.set_value(
-			"Company", self.employee.company, "default_holiday_list", "Salary Slip Test Holiday List"
-		)
-
-		leave_allocation = create_leave_allocation(
-			employee=self.employee.name, employee_name=self.employee.employee_name
-		)
-		leave_allocation.submit()
-		self.assertTrue(leave_allocation.total_leaves_allocated, 15)
-
-		leave_application = frappe.get_doc(
-			{
-				"doctype": "Leave Application",
-				"employee": self.employee.name,
-				"leave_type": "_Test Leave Type",
-				"from_date": add_months(nowdate(), 2),
-				"to_date": add_months(add_days(nowdate(), 10), 2),
-				"company": self.employee.company,
-				"docstatus": 1,
-				"status": "Approved",
-				"leave_approver": "test@example.com",
-			}
-		)
-		leave_application.submit()
-		leave_application.reload()
-
-		# allocate less leaves than the ones which are already approved
-		leave_allocation.new_leaves_allocated = leave_application.total_leave_days - 1
-		leave_allocation.total_leaves_allocated = leave_application.total_leave_days - 1
-		self.assertRaises(frappe.ValidationError, leave_allocation.submit)
-
-
-def create_leave_allocation(**args):
-	args = frappe._dict(args)
-
-	emp_id = make_employee("test_emp_leave_allocation@salary.com")
-	employee = frappe.get_doc("Employee", emp_id)
-
-	return frappe.get_doc(
-		{
-			"doctype": "Leave Allocation",
-			"__islocal": 1,
-			"employee": args.employee or employee.name,
-			"employee_name": args.employee_name or employee.employee_name,
-			"leave_type": args.leave_type or "_Test Leave Type",
-			"from_date": args.from_date or nowdate(),
-			"new_leaves_allocated": args.new_leaves_allocated or 15,
-			"carry_forward": args.carry_forward or 0,
-			"to_date": args.to_date or add_months(nowdate(), 12),
-		}
-	)
-
-
-test_dependencies = ["Employee", "Leave Type"]
diff --git a/erpnext/hr/doctype/leave_allocation/test_records.json b/erpnext/hr/doctype/leave_allocation/test_records.json
deleted file mode 100644
index 23acbb0..0000000
--- a/erpnext/hr/doctype/leave_allocation/test_records.json
+++ /dev/null
@@ -1,20 +0,0 @@
-[
-	{
-		"docstatus": 1,
-		"doctype": "Leave Allocation",
-		"employee": "_T-Employee-00001",
-		"from_date": "2013-01-01",
-		"to_date": "2013-12-31",
-		"leave_type": "_Test Leave Type",
-		"new_leaves_allocated": 15
-	},
-	{
-		"docstatus": 1,
-		"doctype": "Leave Allocation",
-		"employee": "_T-Employee-00002",
-		"from_date": "2013-01-01",
-		"to_date": "2013-12-31",
-		"leave_type": "_Test Leave Type",
-		"new_leaves_allocated": 15
-	}
-]
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_application/README.md b/erpnext/hr/doctype/leave_application/README.md
deleted file mode 100644
index e78e37a..0000000
--- a/erpnext/hr/doctype/leave_application/README.md
+++ /dev/null
@@ -1 +0,0 @@
-Application for Leave by an Employee.
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_application/__init__.py b/erpnext/hr/doctype/leave_application/__init__.py
deleted file mode 100755
index e69de29..0000000
--- a/erpnext/hr/doctype/leave_application/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/leave_application/leave_application.js b/erpnext/hr/doctype/leave_application/leave_application.js
deleted file mode 100755
index ee00e67..0000000
--- a/erpnext/hr/doctype/leave_application/leave_application.js
+++ /dev/null
@@ -1,270 +0,0 @@
-// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-// License: GNU General Public License v3. See license.txt
-
-cur_frm.add_fetch('employee', 'employee_name', 'employee_name');
-cur_frm.add_fetch('employee', 'company', 'company');
-
-frappe.ui.form.on("Leave Application", {
-	setup: function(frm) {
-		frm.set_query("leave_approver", function() {
-			return {
-				query: "erpnext.hr.doctype.department_approver.department_approver.get_approvers",
-				filters: {
-					employee: frm.doc.employee,
-					doctype: frm.doc.doctype
-				}
-			};
-		});
-
-		frm.set_query("employee", erpnext.queries.employee);
-	},
-	onload: function(frm) {
-		// Ignore cancellation of doctype on cancel all.
-		frm.ignore_doctypes_on_cancel_all = ["Leave Ledger Entry"];
-
-		if (!frm.doc.posting_date) {
-			frm.set_value("posting_date", frappe.datetime.get_today());
-		}
-		if (frm.doc.docstatus == 0) {
-			return frappe.call({
-				method: "erpnext.hr.doctype.leave_application.leave_application.get_mandatory_approval",
-				args: {
-					doctype: frm.doc.doctype,
-				},
-				callback: function(r) {
-					if (!r.exc && r.message) {
-						frm.toggle_reqd("leave_approver", true);
-					}
-				}
-			});
-		}
-	},
-
-	validate: function(frm) {
-		if (frm.doc.from_date == frm.doc.to_date && frm.doc.half_day == 1) {
-			frm.doc.half_day_date = frm.doc.from_date;
-		} else if (frm.doc.half_day == 0) {
-			frm.doc.half_day_date = "";
-		}
-		frm.toggle_reqd("half_day_date", frm.doc.half_day == 1);
-	},
-
-	make_dashboard: function(frm) {
-		var leave_details;
-		let lwps;
-		if (frm.doc.employee && frm.doc.from_date) {
-			frappe.call({
-				method: "erpnext.hr.doctype.leave_application.leave_application.get_leave_details",
-				async: false,
-				args: {
-					employee: frm.doc.employee,
-					date: frm.doc.from_date || frm.doc.posting_date
-				},
-				callback: function(r) {
-					if (!r.exc && r.message['leave_allocation']) {
-						leave_details = r.message['leave_allocation'];
-					}
-					if (!r.exc && r.message['leave_approver']) {
-						frm.set_value('leave_approver', r.message['leave_approver']);
-					}
-					lwps = r.message["lwps"];
-				}
-			});
-			$("div").remove(".form-dashboard-section.custom");
-			frm.dashboard.add_section(
-				frappe.render_template('leave_application_dashboard', {
-					data: leave_details
-				}),
-				__("Allocated Leaves")
-			);
-			frm.dashboard.show();
-			let allowed_leave_types = Object.keys(leave_details);
-
-			// lwps should be allowed, lwps don't have any allocation
-			allowed_leave_types = allowed_leave_types.concat(lwps);
-
-			frm.set_query('leave_type', function() {
-				return {
-					filters: [
-						['leave_type_name', 'in', allowed_leave_types]
-					]
-				};
-			});
-		}
-	},
-
-	refresh: function(frm) {
-		if (frm.is_new()) {
-			frm.trigger("calculate_total_days");
-		}
-		cur_frm.set_intro("");
-		if (frm.doc.__islocal && !in_list(frappe.user_roles, "Employee")) {
-			frm.set_intro(__("Fill the form and save it"));
-		}
-
-		if (!frm.doc.employee && frappe.defaults.get_user_permissions()) {
-			const perm = frappe.defaults.get_user_permissions();
-			if (perm && perm['Employee']) {
-				frm.set_value('employee', perm['Employee'].map(perm_doc => perm_doc.doc)[0]);
-			}
-		}
-	},
-
-	employee: function(frm) {
-		frm.trigger("make_dashboard");
-		frm.trigger("get_leave_balance");
-		frm.trigger("set_leave_approver");
-	},
-
-	leave_approver: function(frm) {
-		if (frm.doc.leave_approver) {
-			frm.set_value("leave_approver_name", frappe.user.full_name(frm.doc.leave_approver));
-		}
-	},
-
-	leave_type: function(frm) {
-		frm.trigger("get_leave_balance");
-	},
-
-	half_day: function(frm) {
-		if (frm.doc.half_day) {
-			if (frm.doc.from_date == frm.doc.to_date) {
-				frm.set_value("half_day_date", frm.doc.from_date);
-			} else {
-				frm.trigger("half_day_datepicker");
-			}
-		} else {
-			frm.set_value("half_day_date", "");
-		}
-		frm.trigger("calculate_total_days");
-	},
-
-	from_date: function(frm) {
-		frm.trigger("make_dashboard");
-		frm.trigger("half_day_datepicker");
-		frm.trigger("calculate_total_days");
-	},
-
-	to_date: function(frm) {
-		frm.trigger("make_dashboard");
-		frm.trigger("half_day_datepicker");
-		frm.trigger("calculate_total_days");
-	},
-
-	half_day_date(frm) {
-		frm.trigger("calculate_total_days");
-	},
-
-	half_day_datepicker: function(frm) {
-		frm.set_value('half_day_date', '');
-		var half_day_datepicker = frm.fields_dict.half_day_date.datepicker;
-		half_day_datepicker.update({
-			minDate: frappe.datetime.str_to_obj(frm.doc.from_date),
-			maxDate: frappe.datetime.str_to_obj(frm.doc.to_date)
-		});
-	},
-
-	get_leave_balance: function(frm) {
-		if (frm.doc.docstatus === 0 && frm.doc.employee && frm.doc.leave_type && frm.doc.from_date && frm.doc.to_date) {
-			return frappe.call({
-				method: "erpnext.hr.doctype.leave_application.leave_application.get_leave_balance_on",
-				args: {
-					employee: frm.doc.employee,
-					date: frm.doc.from_date,
-					to_date: frm.doc.to_date,
-					leave_type: frm.doc.leave_type,
-					consider_all_leaves_in_the_allocation_period: 1
-				},
-				callback: function (r) {
-					if (!r.exc && r.message) {
-						frm.set_value('leave_balance', r.message);
-					} else {
-						frm.set_value('leave_balance', "0");
-					}
-				}
-			});
-		}
-	},
-
-	calculate_total_days: function(frm) {
-		if (frm.doc.from_date && frm.doc.to_date && frm.doc.employee && frm.doc.leave_type) {
-
-			var from_date = Date.parse(frm.doc.from_date);
-			var to_date = Date.parse(frm.doc.to_date);
-
-			if (to_date < from_date) {
-				frappe.msgprint(__("To Date cannot be less than From Date"));
-				frm.set_value('to_date', '');
-				return;
-			}
-			// server call is done to include holidays in leave days calculations
-			return frappe.call({
-				method: 'erpnext.hr.doctype.leave_application.leave_application.get_number_of_leave_days',
-				args: {
-					"employee": frm.doc.employee,
-					"leave_type": frm.doc.leave_type,
-					"from_date": frm.doc.from_date,
-					"to_date": frm.doc.to_date,
-					"half_day": frm.doc.half_day,
-					"half_day_date": frm.doc.half_day_date,
-				},
-				callback: function(r) {
-					if (r && r.message) {
-						frm.set_value('total_leave_days', r.message);
-						frm.trigger("get_leave_balance");
-					}
-				}
-			});
-		}
-	},
-
-	set_leave_approver: function(frm) {
-		if (frm.doc.employee) {
-			// server call is done to include holidays in leave days calculations
-			return frappe.call({
-				method: 'erpnext.hr.doctype.leave_application.leave_application.get_leave_approver',
-				args: {
-					"employee": frm.doc.employee,
-				},
-				callback: function(r) {
-					if (r && r.message) {
-						frm.set_value('leave_approver', r.message);
-					}
-				}
-			});
-		}
-	}
-});
-
-frappe.tour["Leave Application"] = [
-	{
-		fieldname: "employee",
-		title: "Employee",
-		description: __("Select the Employee.")
-	},
-	{
-		fieldname: "leave_type",
-		title: "Leave Type",
-		description: __("Select type of leave the employee wants to apply for, like Sick Leave, Privilege Leave, Casual Leave, etc.")
-	},
-	{
-		fieldname: "from_date",
-		title: "From Date",
-		description: __("Select the start date for your Leave Application.")
-	},
-	{
-		fieldname: "to_date",
-		title: "To Date",
-		description: __("Select the end date for your Leave Application.")
-	},
-	{
-		fieldname: "half_day",
-		title: "Half Day",
-		description: __("To apply for a Half Day check 'Half Day' and select the Half Day Date")
-	},
-	{
-		fieldname: "leave_approver",
-		title: "Leave Approver",
-		description: __("Select your Leave Approver i.e. the person who approves or rejects your leaves.")
-	}
-];
diff --git a/erpnext/hr/doctype/leave_application/leave_application.json b/erpnext/hr/doctype/leave_application/leave_application.json
deleted file mode 100644
index 7f50ace..0000000
--- a/erpnext/hr/doctype/leave_application/leave_application.json
+++ /dev/null
@@ -1,338 +0,0 @@
-{
- "actions": [],
- "allow_import": 1,
- "autoname": "naming_series:",
- "creation": "2013-02-20 11:18:11",
- "description": "Apply / Approve Leaves",
- "doctype": "DocType",
- "document_type": "Document",
- "engine": "InnoDB",
- "field_order": [
-  "naming_series",
-  "employee",
-  "employee_name",
-  "column_break_4",
-  "leave_type",
-  "department",
-  "leave_balance",
-  "section_break_5",
-  "from_date",
-  "to_date",
-  "half_day",
-  "half_day_date",
-  "total_leave_days",
-  "column_break1",
-  "description",
-  "section_break_7",
-  "leave_approver",
-  "leave_approver_name",
-  "column_break_18",
-  "status",
-  "salary_slip",
-  "sb10",
-  "posting_date",
-  "follow_via_email",
-  "color",
-  "column_break_17",
-  "company",
-  "letter_head",
-  "amended_from"
- ],
- "fields": [
-  {
-   "fieldname": "naming_series",
-   "fieldtype": "Select",
-   "label": "Series",
-   "no_copy": 1,
-   "options": "HR-LAP-.YYYY.-",
-   "print_hide": 1,
-   "reqd": 1,
-   "set_only_once": 1
-  },
-  {
-   "fieldname": "employee",
-   "fieldtype": "Link",
-   "in_global_search": 1,
-   "in_standard_filter": 1,
-   "label": "Employee",
-   "options": "Employee",
-   "reqd": 1,
-   "search_index": 1
-  },
-  {
-   "fieldname": "employee_name",
-   "fieldtype": "Data",
-   "in_global_search": 1,
-   "label": "Employee Name",
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break_4",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "leave_type",
-   "fieldtype": "Link",
-   "ignore_user_permissions": 1,
-   "in_standard_filter": 1,
-   "label": "Leave Type",
-   "options": "Leave Type",
-   "reqd": 1,
-   "search_index": 1
-  },
-  {
-   "fetch_from": "employee.department",
-   "fieldname": "department",
-   "fieldtype": "Link",
-   "label": "Department",
-   "options": "Department",
-   "read_only": 1
-  },
-  {
-   "fieldname": "leave_balance",
-   "fieldtype": "Float",
-   "label": "Leave Balance Before Application",
-   "no_copy": 1,
-   "read_only": 1
-  },
-  {
-   "fieldname": "section_break_5",
-   "fieldtype": "Section Break"
-  },
-  {
-   "fieldname": "from_date",
-   "fieldtype": "Date",
-   "in_list_view": 1,
-   "label": "From Date",
-   "reqd": 1,
-   "search_index": 1
-  },
-  {
-   "fieldname": "to_date",
-   "fieldtype": "Date",
-   "label": "To Date",
-   "reqd": 1,
-   "search_index": 1
-  },
-  {
-   "default": "0",
-   "fieldname": "half_day",
-   "fieldtype": "Check",
-   "label": "Half Day"
-  },
-  {
-   "depends_on": "eval:doc.half_day && (doc.from_date != doc.to_date)",
-   "fieldname": "half_day_date",
-   "fieldtype": "Date",
-   "label": "Half Day Date"
-  },
-  {
-   "fieldname": "total_leave_days",
-   "fieldtype": "Float",
-   "in_list_view": 1,
-   "label": "Total Leave Days",
-   "no_copy": 1,
-   "precision": "1",
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break1",
-   "fieldtype": "Column Break",
-   "print_width": "50%",
-   "width": "50%"
-  },
-  {
-   "fieldname": "description",
-   "fieldtype": "Small Text",
-   "label": "Reason"
-  },
-  {
-   "fieldname": "section_break_7",
-   "fieldtype": "Section Break"
-  },
-  {
-   "fieldname": "leave_approver",
-   "fieldtype": "Link",
-   "label": "Leave Approver",
-   "options": "User"
-  },
-  {
-   "fieldname": "leave_approver_name",
-   "fieldtype": "Data",
-   "label": "Leave Approver Name",
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break_18",
-   "fieldtype": "Column Break"
-  },
-  {
-   "default": "Open",
-   "fieldname": "status",
-   "fieldtype": "Select",
-   "in_standard_filter": 1,
-   "label": "Status",
-   "no_copy": 1,
-   "options": "Open\nApproved\nRejected\nCancelled",
-   "permlevel": 1,
-   "reqd": 1
-  },
-  {
-   "fieldname": "sb10",
-   "fieldtype": "Section Break"
-  },
-  {
-   "default": "Today",
-   "fieldname": "posting_date",
-   "fieldtype": "Date",
-   "label": "Posting Date",
-   "no_copy": 1,
-   "reqd": 1
-  },
-  {
-   "fetch_from": "employee.company",
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "label": "Company",
-   "options": "Company",
-   "read_only": 1,
-   "remember_last_selected_value": 1,
-   "reqd": 1
-  },
-  {
-   "allow_on_submit": 1,
-   "default": "1",
-   "fieldname": "follow_via_email",
-   "fieldtype": "Check",
-   "label": "Follow via Email",
-   "print_hide": 1
-  },
-  {
-   "fieldname": "column_break_17",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "salary_slip",
-   "fieldtype": "Link",
-   "label": "Salary Slip",
-   "options": "Salary Slip",
-   "print_hide": 1
-  },
-  {
-   "allow_on_submit": 1,
-   "fieldname": "letter_head",
-   "fieldtype": "Link",
-   "ignore_user_permissions": 1,
-   "label": "Letter Head",
-   "options": "Letter Head",
-   "print_hide": 1
-  },
-  {
-   "allow_on_submit": 1,
-   "fieldname": "color",
-   "fieldtype": "Color",
-   "label": "Color",
-   "print_hide": 1
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "ignore_user_permissions": 1,
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "Leave Application",
-   "print_hide": 1,
-   "read_only": 1
-  }
- ],
- "icon": "fa fa-calendar",
- "idx": 1,
- "is_submittable": 1,
- "links": [],
- "max_attachments": 3,
- "modified": "2020-05-18 13:00:41.577327",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Leave Application",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "email": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "Employee",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "set_user_permissions": 1,
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "permlevel": 1,
-   "read": 1,
-   "role": "All"
-  },
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "set_user_permissions": 1,
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "amend": 1,
-   "cancel": 1,
-   "delete": 1,
-   "email": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "Leave Approver",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "permlevel": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "write": 1
-  },
-  {
-   "permlevel": 1,
-   "read": 1,
-   "report": 1,
-   "role": "Leave Approver",
-   "write": 1
-  }
- ],
- "search_fields": "employee,employee_name,leave_type,from_date,to_date,total_leave_days",
- "sort_field": "modified",
- "sort_order": "DESC",
- "timeline_field": "employee",
- "title_field": "employee_name"
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_application/leave_application.py b/erpnext/hr/doctype/leave_application/leave_application.py
deleted file mode 100755
index 43c2bb3..0000000
--- a/erpnext/hr/doctype/leave_application/leave_application.py
+++ /dev/null
@@ -1,1246 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from typing import Dict, Optional, Tuple
-
-import frappe
-from frappe import _
-from frappe.query_builder.functions import Max, Min, Sum
-from frappe.utils import (
-	add_days,
-	cint,
-	cstr,
-	date_diff,
-	flt,
-	formatdate,
-	get_fullname,
-	get_link_to_form,
-	getdate,
-	nowdate,
-)
-
-from erpnext.buying.doctype.supplier_scorecard.supplier_scorecard import daterange
-from erpnext.hr.doctype.employee.employee import get_holiday_list_for_employee
-from erpnext.hr.doctype.leave_block_list.leave_block_list import get_applicable_block_dates
-from erpnext.hr.doctype.leave_ledger_entry.leave_ledger_entry import create_leave_ledger_entry
-from erpnext.hr.utils import (
-	get_holiday_dates_for_employee,
-	get_leave_period,
-	set_employee_name,
-	share_doc_with_approver,
-	validate_active_employee,
-)
-
-
-class LeaveDayBlockedError(frappe.ValidationError):
-	pass
-
-
-class OverlapError(frappe.ValidationError):
-	pass
-
-
-class AttendanceAlreadyMarkedError(frappe.ValidationError):
-	pass
-
-
-class NotAnOptionalHoliday(frappe.ValidationError):
-	pass
-
-
-class InsufficientLeaveBalanceError(frappe.ValidationError):
-	pass
-
-
-class LeaveAcrossAllocationsError(frappe.ValidationError):
-	pass
-
-
-from frappe.model.document import Document
-
-
-class LeaveApplication(Document):
-	def get_feed(self):
-		return _("{0}: From {0} of type {1}").format(self.employee_name, self.leave_type)
-
-	def validate(self):
-		validate_active_employee(self.employee)
-		set_employee_name(self)
-		self.validate_dates()
-		self.validate_balance_leaves()
-		self.validate_leave_overlap()
-		self.validate_max_days()
-		self.show_block_day_warning()
-		self.validate_block_days()
-		self.validate_salary_processed_days()
-		self.validate_attendance()
-		self.set_half_day_date()
-		if frappe.db.get_value("Leave Type", self.leave_type, "is_optional_leave"):
-			self.validate_optional_leave()
-		self.validate_applicable_after()
-
-	def on_update(self):
-		if self.status == "Open" and self.docstatus < 1:
-			# notify leave approver about creation
-			if frappe.db.get_single_value("HR Settings", "send_leave_notification"):
-				self.notify_leave_approver()
-
-		share_doc_with_approver(self, self.leave_approver)
-
-	def on_submit(self):
-		if self.status in ["Open", "Cancelled"]:
-			frappe.throw(
-				_("Only Leave Applications with status 'Approved' and 'Rejected' can be submitted")
-			)
-
-		self.validate_back_dated_application()
-		self.update_attendance()
-
-		# notify leave applier about approval
-		if frappe.db.get_single_value("HR Settings", "send_leave_notification"):
-			self.notify_employee()
-
-		self.create_leave_ledger_entry()
-		self.reload()
-
-	def before_cancel(self):
-		self.status = "Cancelled"
-
-	def on_cancel(self):
-		self.create_leave_ledger_entry(submit=False)
-		# notify leave applier about cancellation
-		if frappe.db.get_single_value("HR Settings", "send_leave_notification"):
-			self.notify_employee()
-		self.cancel_attendance()
-
-	def validate_applicable_after(self):
-		if self.leave_type:
-			leave_type = frappe.get_doc("Leave Type", self.leave_type)
-			if leave_type.applicable_after > 0:
-				date_of_joining = frappe.db.get_value("Employee", self.employee, "date_of_joining")
-				leave_days = get_approved_leaves_for_period(
-					self.employee, False, date_of_joining, self.from_date
-				)
-				number_of_days = date_diff(getdate(self.from_date), date_of_joining)
-				if number_of_days >= 0:
-					holidays = 0
-					if not frappe.db.get_value("Leave Type", self.leave_type, "include_holiday"):
-						holidays = get_holidays(self.employee, date_of_joining, self.from_date)
-					number_of_days = number_of_days - leave_days - holidays
-					if number_of_days < leave_type.applicable_after:
-						frappe.throw(
-							_("{0} applicable after {1} working days").format(
-								self.leave_type, leave_type.applicable_after
-							)
-						)
-
-	def validate_dates(self):
-		if frappe.db.get_single_value("HR Settings", "restrict_backdated_leave_application"):
-			if self.from_date and getdate(self.from_date) < getdate():
-				allowed_role = frappe.db.get_single_value(
-					"HR Settings", "role_allowed_to_create_backdated_leave_application"
-				)
-				user = frappe.get_doc("User", frappe.session.user)
-				user_roles = [d.role for d in user.roles]
-				if not allowed_role:
-					frappe.throw(
-						_("Backdated Leave Application is restricted. Please set the {} in {}").format(
-							frappe.bold("Role Allowed to Create Backdated Leave Application"),
-							get_link_to_form("HR Settings", "HR Settings"),
-						)
-					)
-
-				if allowed_role and allowed_role not in user_roles:
-					frappe.throw(
-						_("Only users with the {0} role can create backdated leave applications").format(
-							allowed_role
-						)
-					)
-
-		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"))
-
-		if (
-			self.half_day
-			and self.half_day_date
-			and (
-				getdate(self.half_day_date) < getdate(self.from_date)
-				or getdate(self.half_day_date) > getdate(self.to_date)
-			)
-		):
-
-			frappe.throw(_("Half Day Date should be between From Date and To Date"))
-
-		if not is_lwp(self.leave_type):
-			self.validate_dates_across_allocation()
-			self.validate_back_dated_application()
-
-	def validate_dates_across_allocation(self):
-		if frappe.db.get_value("Leave Type", self.leave_type, "allow_negative"):
-			return
-
-		alloc_on_from_date, alloc_on_to_date = self.get_allocation_based_on_application_dates()
-
-		if not (alloc_on_from_date or alloc_on_to_date):
-			frappe.throw(_("Application period cannot be outside leave allocation period"))
-		elif self.is_separate_ledger_entry_required(alloc_on_from_date, alloc_on_to_date):
-			frappe.throw(
-				_("Application period cannot be across two allocation records"),
-				exc=LeaveAcrossAllocationsError,
-			)
-
-	def get_allocation_based_on_application_dates(self) -> Tuple[Dict, Dict]:
-		"""Returns allocation name, from and to dates for application dates"""
-
-		def _get_leave_allocation_record(date):
-			LeaveAllocation = frappe.qb.DocType("Leave Allocation")
-			allocation = (
-				frappe.qb.from_(LeaveAllocation)
-				.select(LeaveAllocation.name, LeaveAllocation.from_date, LeaveAllocation.to_date)
-				.where(
-					(LeaveAllocation.employee == self.employee)
-					& (LeaveAllocation.leave_type == self.leave_type)
-					& (LeaveAllocation.docstatus == 1)
-					& ((date >= LeaveAllocation.from_date) & (date <= LeaveAllocation.to_date))
-				)
-			).run(as_dict=True)
-
-			return allocation and allocation[0]
-
-		allocation_based_on_from_date = _get_leave_allocation_record(self.from_date)
-		allocation_based_on_to_date = _get_leave_allocation_record(self.to_date)
-
-		return allocation_based_on_from_date, allocation_based_on_to_date
-
-	def validate_back_dated_application(self):
-		future_allocation = frappe.db.sql(
-			"""select name, from_date from `tabLeave Allocation`
-			where employee=%s and leave_type=%s and docstatus=1 and from_date > %s
-			and carry_forward=1""",
-			(self.employee, self.leave_type, self.to_date),
-			as_dict=1,
-		)
-
-		if future_allocation:
-			frappe.throw(
-				_(
-					"Leave cannot be applied/cancelled before {0}, as leave balance has already been carry-forwarded in the future leave allocation record {1}"
-				).format(formatdate(future_allocation[0].from_date), future_allocation[0].name)
-			)
-
-	def update_attendance(self):
-		if self.status != "Approved":
-			return
-
-		holiday_dates = []
-		if not frappe.db.get_value("Leave Type", self.leave_type, "include_holiday"):
-			holiday_dates = get_holiday_dates_for_employee(self.employee, self.from_date, self.to_date)
-
-		for dt in daterange(getdate(self.from_date), getdate(self.to_date)):
-			date = dt.strftime("%Y-%m-%d")
-			attendance_name = frappe.db.exists(
-				"Attendance", dict(employee=self.employee, attendance_date=date, docstatus=("!=", 2))
-			)
-
-			# don't mark attendance for holidays
-			# if leave type does not include holidays within leaves as leaves
-			if date in holiday_dates:
-				if attendance_name:
-					# cancel and delete existing attendance for holidays
-					attendance = frappe.get_doc("Attendance", attendance_name)
-					attendance.flags.ignore_permissions = True
-					if attendance.docstatus == 1:
-						attendance.cancel()
-					frappe.delete_doc("Attendance", attendance_name, force=1)
-				continue
-
-			self.create_or_update_attendance(attendance_name, date)
-
-	def create_or_update_attendance(self, attendance_name, date):
-		status = (
-			"Half Day"
-			if self.half_day_date and getdate(date) == getdate(self.half_day_date)
-			else "On Leave"
-		)
-
-		if attendance_name:
-			# update existing attendance, change absent to on leave
-			doc = frappe.get_doc("Attendance", attendance_name)
-			if doc.status != status:
-				doc.db_set({"status": status, "leave_type": self.leave_type, "leave_application": self.name})
-		else:
-			# make new attendance and submit it
-			doc = frappe.new_doc("Attendance")
-			doc.employee = self.employee
-			doc.employee_name = self.employee_name
-			doc.attendance_date = date
-			doc.company = self.company
-			doc.leave_type = self.leave_type
-			doc.leave_application = self.name
-			doc.status = status
-			doc.flags.ignore_validate = True
-			doc.insert(ignore_permissions=True)
-			doc.submit()
-
-	def cancel_attendance(self):
-		if self.docstatus == 2:
-			attendance = frappe.db.sql(
-				"""select name from `tabAttendance` where employee = %s\
-				and (attendance_date between %s and %s) and docstatus < 2 and status in ('On Leave', 'Half Day')""",
-				(self.employee, self.from_date, self.to_date),
-				as_dict=1,
-			)
-			for name in attendance:
-				frappe.db.set_value("Attendance", name, "docstatus", 2)
-
-	def validate_salary_processed_days(self):
-		if not frappe.db.get_value("Leave Type", self.leave_type, "is_lwp"):
-			return
-
-		last_processed_pay_slip = frappe.db.sql(
-			"""
-			select start_date, end_date from `tabSalary Slip`
-			where docstatus = 1 and employee = %s
-			and ((%s between start_date and end_date) or (%s between start_date and end_date))
-			order by modified desc limit 1
-		""",
-			(self.employee, self.to_date, self.from_date),
-		)
-
-		if last_processed_pay_slip:
-			frappe.throw(
-				_(
-					"Salary already processed for period between {0} and {1}, Leave application period cannot be between this date range."
-				).format(
-					formatdate(last_processed_pay_slip[0][0]), formatdate(last_processed_pay_slip[0][1])
-				)
-			)
-
-	def show_block_day_warning(self):
-		block_dates = get_applicable_block_dates(
-			self.from_date, self.to_date, self.employee, self.company, all_lists=True
-		)
-
-		if block_dates:
-			frappe.msgprint(_("Warning: Leave application contains following block dates") + ":")
-			for d in block_dates:
-				frappe.msgprint(formatdate(d.block_date) + ": " + d.reason)
-
-	def validate_block_days(self):
-		block_dates = get_applicable_block_dates(
-			self.from_date, self.to_date, self.employee, self.company
-		)
-
-		if block_dates and self.status == "Approved":
-			frappe.throw(_("You are not authorized to approve leaves on Block Dates"), LeaveDayBlockedError)
-
-	def validate_balance_leaves(self):
-		if self.from_date and self.to_date:
-			self.total_leave_days = get_number_of_leave_days(
-				self.employee, self.leave_type, self.from_date, self.to_date, self.half_day, self.half_day_date
-			)
-
-			if self.total_leave_days <= 0:
-				frappe.throw(
-					_(
-						"The day(s) on which you are applying for leave are holidays. You need not apply for leave."
-					)
-				)
-
-			if not is_lwp(self.leave_type):
-				leave_balance = get_leave_balance_on(
-					self.employee,
-					self.leave_type,
-					self.from_date,
-					self.to_date,
-					consider_all_leaves_in_the_allocation_period=True,
-					for_consumption=True,
-				)
-				self.leave_balance = leave_balance.get("leave_balance")
-				leave_balance_for_consumption = leave_balance.get("leave_balance_for_consumption")
-
-				if self.status != "Rejected" and (
-					leave_balance_for_consumption < self.total_leave_days or not leave_balance_for_consumption
-				):
-					self.show_insufficient_balance_message(leave_balance_for_consumption)
-
-	def show_insufficient_balance_message(self, leave_balance_for_consumption: float) -> None:
-		alloc_on_from_date, alloc_on_to_date = self.get_allocation_based_on_application_dates()
-
-		if frappe.db.get_value("Leave Type", self.leave_type, "allow_negative"):
-			if leave_balance_for_consumption != self.leave_balance:
-				msg = _("Warning: Insufficient leave balance for Leave Type {0} in this allocation.").format(
-					frappe.bold(self.leave_type)
-				)
-				msg += "<br><br>"
-				msg += _(
-					"Actual balances aren't available because the leave application spans over different leave allocations. You can still apply for leaves which would be compensated during the next allocation."
-				)
-			else:
-				msg = _("Warning: Insufficient leave balance for Leave Type {0}.").format(
-					frappe.bold(self.leave_type)
-				)
-
-			frappe.msgprint(msg, title=_("Warning"), indicator="orange")
-		else:
-			frappe.throw(
-				_("Insufficient leave balance for Leave Type {0}").format(frappe.bold(self.leave_type)),
-				exc=InsufficientLeaveBalanceError,
-				title=_("Insufficient Balance"),
-			)
-
-	def validate_leave_overlap(self):
-		if not self.name:
-			# hack! if name is null, it could cause problems with !=
-			self.name = "New Leave Application"
-
-		for d in frappe.db.sql(
-			"""
-			select
-				name, leave_type, posting_date, from_date, to_date, total_leave_days, half_day_date
-			from `tabLeave Application`
-			where employee = %(employee)s and docstatus < 2 and status in ("Open", "Approved")
-			and to_date >= %(from_date)s and from_date <= %(to_date)s
-			and name != %(name)s""",
-			{
-				"employee": self.employee,
-				"from_date": self.from_date,
-				"to_date": self.to_date,
-				"name": self.name,
-			},
-			as_dict=1,
-		):
-
-			if (
-				cint(self.half_day) == 1
-				and getdate(self.half_day_date) == getdate(d.half_day_date)
-				and (
-					flt(self.total_leave_days) == 0.5
-					or getdate(self.from_date) == getdate(d.to_date)
-					or getdate(self.to_date) == getdate(d.from_date)
-				)
-			):
-
-				total_leaves_on_half_day = self.get_total_leaves_on_half_day()
-				if total_leaves_on_half_day >= 1:
-					self.throw_overlap_error(d)
-			else:
-				self.throw_overlap_error(d)
-
-	def throw_overlap_error(self, d):
-		form_link = get_link_to_form("Leave Application", d.name)
-		msg = _("Employee {0} has already applied for {1} between {2} and {3} : {4}").format(
-			self.employee, d["leave_type"], formatdate(d["from_date"]), formatdate(d["to_date"]), form_link
-		)
-		frappe.throw(msg, OverlapError)
-
-	def get_total_leaves_on_half_day(self):
-		leave_count_on_half_day_date = frappe.db.sql(
-			"""select count(name) from `tabLeave Application`
-			where employee = %(employee)s
-			and docstatus < 2
-			and status in ("Open", "Approved")
-			and half_day = 1
-			and half_day_date = %(half_day_date)s
-			and name != %(name)s""",
-			{"employee": self.employee, "half_day_date": self.half_day_date, "name": self.name},
-		)[0][0]
-
-		return leave_count_on_half_day_date * 0.5
-
-	def validate_max_days(self):
-		max_days = frappe.db.get_value("Leave Type", self.leave_type, "max_continuous_days_allowed")
-		if max_days and self.total_leave_days > cint(max_days):
-			frappe.throw(_("Leave of type {0} cannot be longer than {1}").format(self.leave_type, max_days))
-
-	def validate_attendance(self):
-		attendance = frappe.db.sql(
-			"""select name from `tabAttendance` where employee = %s and (attendance_date between %s and %s)
-					and status = "Present" and docstatus = 1""",
-			(self.employee, self.from_date, self.to_date),
-		)
-		if attendance:
-			frappe.throw(
-				_("Attendance for employee {0} is already marked for this day").format(self.employee),
-				AttendanceAlreadyMarkedError,
-			)
-
-	def validate_optional_leave(self):
-		leave_period = get_leave_period(self.from_date, self.to_date, self.company)
-		if not leave_period:
-			frappe.throw(_("Cannot find active Leave Period"))
-		optional_holiday_list = frappe.db.get_value(
-			"Leave Period", leave_period[0]["name"], "optional_holiday_list"
-		)
-		if not optional_holiday_list:
-			frappe.throw(
-				_("Optional Holiday List not set for leave period {0}").format(leave_period[0]["name"])
-			)
-		day = getdate(self.from_date)
-		while day <= getdate(self.to_date):
-			if not frappe.db.exists(
-				{"doctype": "Holiday", "parent": optional_holiday_list, "holiday_date": day}
-			):
-				frappe.throw(
-					_("{0} is not in Optional Holiday List").format(formatdate(day)), NotAnOptionalHoliday
-				)
-			day = add_days(day, 1)
-
-	def set_half_day_date(self):
-		if self.from_date == self.to_date and self.half_day == 1:
-			self.half_day_date = self.from_date
-
-		if self.half_day == 0:
-			self.half_day_date = None
-
-	def notify_employee(self):
-		employee = frappe.get_doc("Employee", self.employee)
-		if not employee.user_id:
-			return
-
-		parent_doc = frappe.get_doc("Leave Application", self.name)
-		args = parent_doc.as_dict()
-
-		template = frappe.db.get_single_value("HR Settings", "leave_status_notification_template")
-		if not template:
-			frappe.msgprint(_("Please set default template for Leave Status Notification in HR Settings."))
-			return
-		email_template = frappe.get_doc("Email Template", template)
-		message = frappe.render_template(email_template.response, args)
-
-		self.notify(
-			{
-				# for post in messages
-				"message": message,
-				"message_to": employee.user_id,
-				# for email
-				"subject": email_template.subject,
-				"notify": "employee",
-			}
-		)
-
-	def notify_leave_approver(self):
-		if self.leave_approver:
-			parent_doc = frappe.get_doc("Leave Application", self.name)
-			args = parent_doc.as_dict()
-
-			template = frappe.db.get_single_value("HR Settings", "leave_approval_notification_template")
-			if not template:
-				frappe.msgprint(
-					_("Please set default template for Leave Approval Notification in HR Settings.")
-				)
-				return
-			email_template = frappe.get_doc("Email Template", template)
-			message = frappe.render_template(email_template.response, args)
-
-			self.notify(
-				{
-					# for post in messages
-					"message": message,
-					"message_to": self.leave_approver,
-					# for email
-					"subject": email_template.subject,
-				}
-			)
-
-	def notify(self, args):
-		args = frappe._dict(args)
-		# args -> message, message_to, subject
-		if cint(self.follow_via_email):
-			contact = args.message_to
-			if not isinstance(contact, list):
-				if not args.notify == "employee":
-					contact = frappe.get_doc("User", contact).email or contact
-
-			sender = dict()
-			sender["email"] = frappe.get_doc("User", frappe.session.user).email
-			sender["full_name"] = get_fullname(sender["email"])
-
-			try:
-				frappe.sendmail(
-					recipients=contact,
-					sender=sender["email"],
-					subject=args.subject,
-					message=args.message,
-				)
-				frappe.msgprint(_("Email sent to {0}").format(contact))
-			except frappe.OutgoingEmailError:
-				pass
-
-	def create_leave_ledger_entry(self, submit=True):
-		if self.status != "Approved" and submit:
-			return
-
-		expiry_date = get_allocation_expiry_for_cf_leaves(
-			self.employee, self.leave_type, self.to_date, self.from_date
-		)
-		lwp = frappe.db.get_value("Leave Type", self.leave_type, "is_lwp")
-
-		if expiry_date:
-			self.create_ledger_entry_for_intermediate_allocation_expiry(expiry_date, submit, lwp)
-		else:
-			alloc_on_from_date, alloc_on_to_date = self.get_allocation_based_on_application_dates()
-			if self.is_separate_ledger_entry_required(alloc_on_from_date, alloc_on_to_date):
-				# required only if negative balance is allowed for leave type
-				# else will be stopped in validation itself
-				self.create_separate_ledger_entries(alloc_on_from_date, alloc_on_to_date, submit, lwp)
-			else:
-				raise_exception = False if frappe.flags.in_patch else True
-				args = dict(
-					leaves=self.total_leave_days * -1,
-					from_date=self.from_date,
-					to_date=self.to_date,
-					is_lwp=lwp,
-					holiday_list=get_holiday_list_for_employee(self.employee, raise_exception=raise_exception)
-					or "",
-				)
-				create_leave_ledger_entry(self, args, submit)
-
-	def is_separate_ledger_entry_required(
-		self, alloc_on_from_date: Optional[Dict] = None, alloc_on_to_date: Optional[Dict] = None
-	) -> bool:
-		"""Checks if application dates fall in separate allocations"""
-		if (
-			(alloc_on_from_date and not alloc_on_to_date)
-			or (not alloc_on_from_date and alloc_on_to_date)
-			or (
-				alloc_on_from_date and alloc_on_to_date and alloc_on_from_date.name != alloc_on_to_date.name
-			)
-		):
-			return True
-		return False
-
-	def create_separate_ledger_entries(self, alloc_on_from_date, alloc_on_to_date, submit, lwp):
-		"""Creates separate ledger entries for application period falling into separate allocations"""
-		# for creating separate ledger entries existing allocation periods should be consecutive
-		if (
-			submit
-			and alloc_on_from_date
-			and alloc_on_to_date
-			and add_days(alloc_on_from_date.to_date, 1) != alloc_on_to_date.from_date
-		):
-			frappe.throw(
-				_(
-					"Leave Application period cannot be across two non-consecutive leave allocations {0} and {1}."
-				).format(
-					get_link_to_form("Leave Allocation", alloc_on_from_date.name),
-					get_link_to_form("Leave Allocation", alloc_on_to_date),
-				)
-			)
-
-		raise_exception = False if frappe.flags.in_patch else True
-
-		if alloc_on_from_date:
-			first_alloc_end = alloc_on_from_date.to_date
-			second_alloc_start = add_days(alloc_on_from_date.to_date, 1)
-		else:
-			first_alloc_end = add_days(alloc_on_to_date.from_date, -1)
-			second_alloc_start = alloc_on_to_date.from_date
-
-		leaves_in_first_alloc = get_number_of_leave_days(
-			self.employee,
-			self.leave_type,
-			self.from_date,
-			first_alloc_end,
-			self.half_day,
-			self.half_day_date,
-		)
-		leaves_in_second_alloc = get_number_of_leave_days(
-			self.employee,
-			self.leave_type,
-			second_alloc_start,
-			self.to_date,
-			self.half_day,
-			self.half_day_date,
-		)
-
-		args = dict(
-			is_lwp=lwp,
-			holiday_list=get_holiday_list_for_employee(self.employee, raise_exception=raise_exception)
-			or "",
-		)
-
-		if leaves_in_first_alloc:
-			args.update(
-				dict(from_date=self.from_date, to_date=first_alloc_end, leaves=leaves_in_first_alloc * -1)
-			)
-			create_leave_ledger_entry(self, args, submit)
-
-		if leaves_in_second_alloc:
-			args.update(
-				dict(from_date=second_alloc_start, to_date=self.to_date, leaves=leaves_in_second_alloc * -1)
-			)
-			create_leave_ledger_entry(self, args, submit)
-
-	def create_ledger_entry_for_intermediate_allocation_expiry(self, expiry_date, submit, lwp):
-		"""Splits leave application into two ledger entries to consider expiry of allocation"""
-		raise_exception = False if frappe.flags.in_patch else True
-
-		leaves = get_number_of_leave_days(
-			self.employee, self.leave_type, self.from_date, expiry_date, self.half_day, self.half_day_date
-		)
-
-		if leaves:
-			args = dict(
-				from_date=self.from_date,
-				to_date=expiry_date,
-				leaves=leaves * -1,
-				is_lwp=lwp,
-				holiday_list=get_holiday_list_for_employee(self.employee, raise_exception=raise_exception)
-				or "",
-			)
-			create_leave_ledger_entry(self, args, submit)
-
-		if getdate(expiry_date) != getdate(self.to_date):
-			start_date = add_days(expiry_date, 1)
-			leaves = get_number_of_leave_days(
-				self.employee, self.leave_type, start_date, self.to_date, self.half_day, self.half_day_date
-			)
-
-			if leaves:
-				args.update(dict(from_date=start_date, to_date=self.to_date, leaves=leaves * -1))
-				create_leave_ledger_entry(self, args, submit)
-
-
-def get_allocation_expiry_for_cf_leaves(
-	employee: str, leave_type: str, to_date: str, from_date: str
-) -> str:
-	"""Returns expiry of carry forward allocation in leave ledger entry"""
-	expiry = frappe.get_all(
-		"Leave Ledger Entry",
-		filters={
-			"employee": employee,
-			"leave_type": leave_type,
-			"is_carry_forward": 1,
-			"transaction_type": "Leave Allocation",
-			"to_date": ["between", (from_date, to_date)],
-			"docstatus": 1,
-		},
-		fields=["to_date"],
-	)
-	return expiry[0]["to_date"] if expiry else ""
-
-
-@frappe.whitelist()
-def get_number_of_leave_days(
-	employee: str,
-	leave_type: str,
-	from_date: str,
-	to_date: str,
-	half_day: Optional[int] = None,
-	half_day_date: Optional[str] = None,
-	holiday_list: Optional[str] = None,
-) -> float:
-	"""Returns number of leave days between 2 dates after considering half day and holidays
-	(Based on the include_holiday setting in Leave Type)"""
-	number_of_days = 0
-	if cint(half_day) == 1:
-		if getdate(from_date) == getdate(to_date):
-			number_of_days = 0.5
-		elif half_day_date and getdate(from_date) <= getdate(half_day_date) <= getdate(to_date):
-			number_of_days = date_diff(to_date, from_date) + 0.5
-		else:
-			number_of_days = date_diff(to_date, from_date) + 1
-	else:
-		number_of_days = date_diff(to_date, from_date) + 1
-
-	if not frappe.db.get_value("Leave Type", leave_type, "include_holiday"):
-		number_of_days = flt(number_of_days) - flt(
-			get_holidays(employee, from_date, to_date, holiday_list=holiday_list)
-		)
-	return number_of_days
-
-
-@frappe.whitelist()
-def get_leave_details(employee, date):
-	allocation_records = get_leave_allocation_records(employee, date)
-	leave_allocation = {}
-	for d in allocation_records:
-		allocation = allocation_records.get(d, frappe._dict())
-		remaining_leaves = get_leave_balance_on(
-			employee, d, date, to_date=allocation.to_date, consider_all_leaves_in_the_allocation_period=True
-		)
-
-		end_date = allocation.to_date
-		leaves_taken = get_leaves_for_period(employee, d, allocation.from_date, end_date) * -1
-		leaves_pending = get_leaves_pending_approval_for_period(
-			employee, d, allocation.from_date, end_date
-		)
-		expired_leaves = allocation.total_leaves_allocated - (remaining_leaves + leaves_taken)
-
-		leave_allocation[d] = {
-			"total_leaves": allocation.total_leaves_allocated,
-			"expired_leaves": expired_leaves if expired_leaves > 0 else 0,
-			"leaves_taken": leaves_taken,
-			"leaves_pending_approval": leaves_pending,
-			"remaining_leaves": remaining_leaves,
-		}
-
-	# is used in set query
-	lwp = frappe.get_list("Leave Type", filters={"is_lwp": 1}, pluck="name")
-
-	return {
-		"leave_allocation": leave_allocation,
-		"leave_approver": get_leave_approver(employee),
-		"lwps": lwp,
-	}
-
-
-@frappe.whitelist()
-def get_leave_balance_on(
-	employee: str,
-	leave_type: str,
-	date: str,
-	to_date: str = None,
-	consider_all_leaves_in_the_allocation_period: bool = False,
-	for_consumption: bool = False,
-):
-	"""
-	Returns leave balance till date
-	:param employee: employee name
-	:param leave_type: leave type
-	:param date: date to check balance on
-	:param to_date: future date to check for allocation expiry
-	:param consider_all_leaves_in_the_allocation_period: consider all leaves taken till the allocation end date
-	:param for_consumption: flag to check if leave balance is required for consumption or display
-	        eg: employee has leave balance = 10 but allocation is expiring in 1 day so employee can only consume 1 leave
-	        in this case leave_balance = 10 but leave_balance_for_consumption = 1
-	        if True, returns a dict eg: {'leave_balance': 10, 'leave_balance_for_consumption': 1}
-	        else, returns leave_balance (in this case 10)
-	"""
-
-	if not to_date:
-		to_date = nowdate()
-
-	allocation_records = get_leave_allocation_records(employee, date, leave_type)
-	allocation = allocation_records.get(leave_type, frappe._dict())
-
-	end_date = allocation.to_date if cint(consider_all_leaves_in_the_allocation_period) else date
-	cf_expiry = get_allocation_expiry_for_cf_leaves(employee, leave_type, to_date, date)
-
-	leaves_taken = get_leaves_for_period(employee, leave_type, allocation.from_date, end_date)
-
-	remaining_leaves = get_remaining_leaves(allocation, leaves_taken, date, cf_expiry)
-
-	if for_consumption:
-		return remaining_leaves
-	else:
-		return remaining_leaves.get("leave_balance")
-
-
-def get_leave_allocation_records(employee, date, leave_type=None):
-	"""Returns the total allocated leaves and carry forwarded leaves based on ledger entries"""
-	Ledger = frappe.qb.DocType("Leave Ledger Entry")
-
-	cf_leave_case = (
-		frappe.qb.terms.Case().when(Ledger.is_carry_forward == "1", Ledger.leaves).else_(0)
-	)
-	sum_cf_leaves = Sum(cf_leave_case).as_("cf_leaves")
-
-	new_leaves_case = (
-		frappe.qb.terms.Case().when(Ledger.is_carry_forward == "0", Ledger.leaves).else_(0)
-	)
-	sum_new_leaves = Sum(new_leaves_case).as_("new_leaves")
-
-	query = (
-		frappe.qb.from_(Ledger)
-		.select(
-			sum_cf_leaves,
-			sum_new_leaves,
-			Min(Ledger.from_date).as_("from_date"),
-			Max(Ledger.to_date).as_("to_date"),
-			Ledger.leave_type,
-		)
-		.where(
-			(Ledger.from_date <= date)
-			& (Ledger.to_date >= date)
-			& (Ledger.docstatus == 1)
-			& (Ledger.transaction_type == "Leave Allocation")
-			& (Ledger.employee == employee)
-			& (Ledger.is_expired == 0)
-			& (Ledger.is_lwp == 0)
-		)
-	)
-
-	if leave_type:
-		query = query.where((Ledger.leave_type == leave_type))
-	query = query.groupby(Ledger.employee, Ledger.leave_type)
-
-	allocation_details = query.run(as_dict=True)
-
-	allocated_leaves = frappe._dict()
-	for d in allocation_details:
-		allocated_leaves.setdefault(
-			d.leave_type,
-			frappe._dict(
-				{
-					"from_date": d.from_date,
-					"to_date": d.to_date,
-					"total_leaves_allocated": flt(d.cf_leaves) + flt(d.new_leaves),
-					"unused_leaves": d.cf_leaves,
-					"new_leaves_allocated": d.new_leaves,
-					"leave_type": d.leave_type,
-				}
-			),
-		)
-	return allocated_leaves
-
-
-def get_leaves_pending_approval_for_period(
-	employee: str, leave_type: str, from_date: str, to_date: str
-) -> float:
-	"""Returns leaves that are pending for approval"""
-	leaves = frappe.get_all(
-		"Leave Application",
-		filters={"employee": employee, "leave_type": leave_type, "status": "Open"},
-		or_filters={
-			"from_date": ["between", (from_date, to_date)],
-			"to_date": ["between", (from_date, to_date)],
-		},
-		fields=["SUM(total_leave_days) as leaves"],
-	)[0]
-	return leaves["leaves"] if leaves["leaves"] else 0.0
-
-
-def get_remaining_leaves(
-	allocation: Dict, leaves_taken: float, date: str, cf_expiry: str
-) -> Dict[str, float]:
-	"""Returns a dict of leave_balance and leave_balance_for_consumption
-	leave_balance returns the available leave balance
-	leave_balance_for_consumption returns the minimum leaves remaining after comparing with remaining days for allocation expiry
-	"""
-
-	def _get_remaining_leaves(remaining_leaves, end_date):
-		"""Returns minimum leaves remaining after comparing with remaining days for allocation expiry"""
-		if remaining_leaves > 0:
-			remaining_days = date_diff(end_date, date) + 1
-			remaining_leaves = min(remaining_days, remaining_leaves)
-
-		return remaining_leaves
-
-	leave_balance = leave_balance_for_consumption = flt(allocation.total_leaves_allocated) + flt(
-		leaves_taken
-	)
-
-	# balance for carry forwarded leaves
-	if cf_expiry and allocation.unused_leaves:
-		cf_leaves = flt(allocation.unused_leaves) + flt(leaves_taken)
-		remaining_cf_leaves = _get_remaining_leaves(cf_leaves, cf_expiry)
-
-		leave_balance = flt(allocation.new_leaves_allocated) + flt(cf_leaves)
-		leave_balance_for_consumption = flt(allocation.new_leaves_allocated) + flt(remaining_cf_leaves)
-
-	remaining_leaves = _get_remaining_leaves(leave_balance_for_consumption, allocation.to_date)
-	return frappe._dict(leave_balance=leave_balance, leave_balance_for_consumption=remaining_leaves)
-
-
-def get_leaves_for_period(
-	employee: str, leave_type: str, from_date: str, to_date: str, skip_expired_leaves: bool = True
-) -> float:
-	leave_entries = get_leave_entries(employee, leave_type, from_date, to_date)
-	leave_days = 0
-
-	for leave_entry in leave_entries:
-		inclusive_period = leave_entry.from_date >= getdate(
-			from_date
-		) and leave_entry.to_date <= getdate(to_date)
-
-		if inclusive_period and leave_entry.transaction_type == "Leave Encashment":
-			leave_days += leave_entry.leaves
-
-		elif (
-			inclusive_period
-			and leave_entry.transaction_type == "Leave Allocation"
-			and leave_entry.is_expired
-			and not skip_expired_leaves
-		):
-			leave_days += leave_entry.leaves
-
-		elif leave_entry.transaction_type == "Leave Application":
-			if leave_entry.from_date < getdate(from_date):
-				leave_entry.from_date = from_date
-			if leave_entry.to_date > getdate(to_date):
-				leave_entry.to_date = to_date
-
-			half_day = 0
-			half_day_date = None
-			# fetch half day date for leaves with half days
-			if leave_entry.leaves % 1:
-				half_day = 1
-				half_day_date = frappe.db.get_value(
-					"Leave Application", {"name": leave_entry.transaction_name}, ["half_day_date"]
-				)
-
-			leave_days += (
-				get_number_of_leave_days(
-					employee,
-					leave_type,
-					leave_entry.from_date,
-					leave_entry.to_date,
-					half_day,
-					half_day_date,
-					holiday_list=leave_entry.holiday_list,
-				)
-				* -1
-			)
-
-	return leave_days
-
-
-def get_leave_entries(employee, leave_type, from_date, to_date):
-	"""Returns leave entries between from_date and to_date."""
-	return frappe.db.sql(
-		"""
-		SELECT
-			employee, leave_type, from_date, to_date, leaves, transaction_name, transaction_type, holiday_list,
-			is_carry_forward, is_expired
-		FROM `tabLeave Ledger Entry`
-		WHERE employee=%(employee)s AND leave_type=%(leave_type)s
-			AND docstatus=1
-			AND (leaves<0
-				OR is_expired=1)
-			AND (from_date between %(from_date)s AND %(to_date)s
-				OR to_date between %(from_date)s AND %(to_date)s
-				OR (from_date < %(from_date)s AND to_date > %(to_date)s))
-	""",
-		{"from_date": from_date, "to_date": to_date, "employee": employee, "leave_type": leave_type},
-		as_dict=1,
-	)
-
-
-@frappe.whitelist()
-def get_holidays(employee, from_date, to_date, holiday_list=None):
-	"""get holidays between two dates for the given employee"""
-	if not holiday_list:
-		holiday_list = get_holiday_list_for_employee(employee)
-
-	holidays = frappe.db.sql(
-		"""select count(distinct holiday_date) from `tabHoliday` h1, `tabHoliday List` h2
-		where h1.parent = h2.name and h1.holiday_date between %s and %s
-		and h2.name = %s""",
-		(from_date, to_date, holiday_list),
-	)[0][0]
-
-	return holidays
-
-
-def is_lwp(leave_type):
-	lwp = frappe.db.sql("select is_lwp from `tabLeave Type` where name = %s", leave_type)
-	return lwp and cint(lwp[0][0]) or 0
-
-
-@frappe.whitelist()
-def get_events(start, end, filters=None):
-	from frappe.desk.reportview import get_filters_cond
-
-	events = []
-
-	employee = frappe.db.get_value(
-		"Employee", filters={"user_id": frappe.session.user}, fieldname=["name", "company"], as_dict=True
-	)
-
-	if employee:
-		employee, company = employee.name, employee.company
-	else:
-		employee = ""
-		company = frappe.db.get_value("Global Defaults", None, "default_company")
-
-	conditions = get_filters_cond("Leave Application", filters, [])
-	# show department leaves for employee
-	if "Employee" in frappe.get_roles():
-		add_department_leaves(events, start, end, employee, company)
-
-	add_leaves(events, start, end, conditions)
-	add_block_dates(events, start, end, employee, company)
-	add_holidays(events, start, end, employee, company)
-
-	return events
-
-
-def add_department_leaves(events, start, end, employee, company):
-	department = frappe.db.get_value("Employee", employee, "department")
-
-	if not department:
-		return
-
-	# department leaves
-	department_employees = frappe.db.sql_list(
-		"""select name from tabEmployee where department=%s
-		and company=%s""",
-		(department, company),
-	)
-
-	filter_conditions = ' and employee in ("%s")' % '", "'.join(department_employees)
-	add_leaves(events, start, end, filter_conditions=filter_conditions)
-
-
-def add_leaves(events, start, end, filter_conditions=None):
-	from frappe.desk.reportview import build_match_conditions
-
-	conditions = []
-
-	if not cint(
-		frappe.db.get_value("HR Settings", None, "show_leaves_of_all_department_members_in_calendar")
-	):
-		match_conditions = build_match_conditions("Leave Application")
-
-		if match_conditions:
-			conditions.append(match_conditions)
-
-	query = """SELECT
-		docstatus,
-		name,
-		employee,
-		employee_name,
-		leave_type,
-		from_date,
-		to_date,
-		half_day,
-		status,
-		color
-	FROM `tabLeave Application`
-	WHERE
-		from_date <= %(end)s AND to_date >= %(start)s <= to_date
-		AND docstatus < 2
-		AND status in ('Approved', 'Open')
-	"""
-
-	if conditions:
-		query += " AND " + " AND ".join(conditions)
-
-	if filter_conditions:
-		query += filter_conditions
-
-	for d in frappe.db.sql(query, {"start": start, "end": end}, as_dict=True):
-		e = {
-			"name": d.name,
-			"doctype": "Leave Application",
-			"from_date": d.from_date,
-			"to_date": d.to_date,
-			"docstatus": d.docstatus,
-			"color": d.color,
-			"all_day": int(not d.half_day),
-			"title": cstr(d.employee_name)
-			+ f" ({cstr(d.leave_type)})"
-			+ (" " + _("(Half Day)") if d.half_day else ""),
-		}
-		if e not in events:
-			events.append(e)
-
-
-def add_block_dates(events, start, end, employee, company):
-	# block days
-	from erpnext.hr.doctype.leave_block_list.leave_block_list import get_applicable_block_dates
-
-	cnt = 0
-	block_dates = get_applicable_block_dates(start, end, employee, company, all_lists=True)
-
-	for block_date in block_dates:
-		events.append(
-			{
-				"doctype": "Leave Block List Date",
-				"from_date": block_date.block_date,
-				"to_date": block_date.block_date,
-				"title": _("Leave Blocked") + ": " + block_date.reason,
-				"name": "_" + str(cnt),
-			}
-		)
-		cnt += 1
-
-
-def add_holidays(events, start, end, employee, company):
-	applicable_holiday_list = get_holiday_list_for_employee(employee, company)
-	if not applicable_holiday_list:
-		return
-
-	for holiday in frappe.db.sql(
-		"""select name, holiday_date, description
-		from `tabHoliday` where parent=%s and holiday_date between %s and %s""",
-		(applicable_holiday_list, start, end),
-		as_dict=True,
-	):
-		events.append(
-			{
-				"doctype": "Holiday",
-				"from_date": holiday.holiday_date,
-				"to_date": holiday.holiday_date,
-				"title": _("Holiday") + ": " + cstr(holiday.description),
-				"name": holiday.name,
-			}
-		)
-
-
-@frappe.whitelist()
-def get_mandatory_approval(doctype):
-	mandatory = ""
-	if doctype == "Leave Application":
-		mandatory = frappe.db.get_single_value(
-			"HR Settings", "leave_approver_mandatory_in_leave_application"
-		)
-	else:
-		mandatory = frappe.db.get_single_value(
-			"HR Settings", "expense_approver_mandatory_in_expense_claim"
-		)
-
-	return mandatory
-
-
-def get_approved_leaves_for_period(employee, leave_type, from_date, to_date):
-	LeaveApplication = frappe.qb.DocType("Leave Application")
-	query = (
-		frappe.qb.from_(LeaveApplication)
-		.select(
-			LeaveApplication.employee,
-			LeaveApplication.leave_type,
-			LeaveApplication.from_date,
-			LeaveApplication.to_date,
-			LeaveApplication.total_leave_days,
-		)
-		.where(
-			(LeaveApplication.employee == employee)
-			& (LeaveApplication.docstatus == 1)
-			& (LeaveApplication.status == "Approved")
-			& (
-				(LeaveApplication.from_date.between(from_date, to_date))
-				| (LeaveApplication.to_date.between(from_date, to_date))
-				| ((LeaveApplication.from_date < from_date) & (LeaveApplication.to_date > to_date))
-			)
-		)
-	)
-
-	if leave_type:
-		query = query.where(LeaveApplication.leave_type == leave_type)
-
-	leave_applications = query.run(as_dict=True)
-
-	leave_days = 0
-	for leave_app in leave_applications:
-		if leave_app.from_date >= getdate(from_date) and leave_app.to_date <= getdate(to_date):
-			leave_days += leave_app.total_leave_days
-		else:
-			if leave_app.from_date < getdate(from_date):
-				leave_app.from_date = from_date
-			if leave_app.to_date > getdate(to_date):
-				leave_app.to_date = to_date
-
-			leave_days += get_number_of_leave_days(
-				employee, leave_type, leave_app.from_date, leave_app.to_date
-			)
-
-	return leave_days
-
-
-@frappe.whitelist()
-def get_leave_approver(employee):
-	leave_approver, department = frappe.db.get_value(
-		"Employee", employee, ["leave_approver", "department"]
-	)
-
-	if not leave_approver and department:
-		leave_approver = frappe.db.get_value(
-			"Department Approver",
-			{"parent": department, "parentfield": "leave_approvers", "idx": 1},
-			"approver",
-		)
-
-	return leave_approver
diff --git a/erpnext/hr/doctype/leave_application/leave_application_calendar.js b/erpnext/hr/doctype/leave_application/leave_application_calendar.js
deleted file mode 100644
index 0ba0285..0000000
--- a/erpnext/hr/doctype/leave_application/leave_application_calendar.js
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-// License: GNU General Public License v3. See license.txt
-
-frappe.views.calendar["Leave Application"] = {
-	field_map: {
-		"start": "from_date",
-		"end": "to_date",
-		"id": "name",
-		"title": "title",
-		"docstatus": 1,
-		"color": "color",
-		"allDay": "all_day"
-	},
-	options: {
-		header: {
-			left: 'prev,next today',
-			center: 'title',
-			right: 'month'
-		}
-	},
-	get_events_method: "erpnext.hr.doctype.leave_application.leave_application.get_events"
-}
diff --git a/erpnext/hr/doctype/leave_application/leave_application_dashboard.html b/erpnext/hr/doctype/leave_application/leave_application_dashboard.html
deleted file mode 100644
index e755322..0000000
--- a/erpnext/hr/doctype/leave_application/leave_application_dashboard.html
+++ /dev/null
@@ -1,29 +0,0 @@
-
-{% if not jQuery.isEmptyObject(data) %}
-<table class="table table-bordered small">
-	<thead>
-		<tr>
-			<th style="width: 16%">{{ __("Leave Type") }}</th>
-			<th style="width: 16%" class="text-right">{{ __("Total Allocated Leave(s)") }}</th>
-			<th style="width: 16%" class="text-right">{{ __("Expired Leave(s)") }}</th>
-			<th style="width: 16%" class="text-right">{{ __("Used Leave(s)") }}</th>
-			<th style="width: 16%" class="text-right">{{ __("Leave(s) Pending Approval") }}</th>
-			<th style="width: 16%" class="text-right">{{ __("Available Leave(s)") }}</th>
-		</tr>
-	</thead>
-	<tbody>
-		{% for(const [key, value] of Object.entries(data)) { %}
-			<tr>
-				<td> {%= key %} </td>
-				<td class="text-right"> {%= value["total_leaves"] %} </td>
-				<td class="text-right"> {%= value["expired_leaves"] %} </td>
-				<td class="text-right"> {%= value["leaves_taken"] %} </td>
-				<td class="text-right"> {%= value["leaves_pending_approval"] %} </td>
-				<td class="text-right"> {%= value["remaining_leaves"] %} </td>
-			</tr>
-		{% } %}
-	</tbody>
-</table>
-{% else %}
-<p style="margin-top: 30px;"> No Leave has been allocated. </p>
-{% endif %}
diff --git a/erpnext/hr/doctype/leave_application/leave_application_dashboard.py b/erpnext/hr/doctype/leave_application/leave_application_dashboard.py
deleted file mode 100644
index ee5cbe9..0000000
--- a/erpnext/hr/doctype/leave_application/leave_application_dashboard.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from frappe import _
-
-
-def get_data():
-	return {
-		"fieldname": "leave_application",
-		"transactions": [{"items": ["Attendance"]}],
-		"reports": [{"label": _("Reports"), "items": ["Employee Leave Balance"]}],
-	}
diff --git a/erpnext/hr/doctype/leave_application/leave_application_email_template.html b/erpnext/hr/doctype/leave_application/leave_application_email_template.html
deleted file mode 100644
index dae9084..0000000
--- a/erpnext/hr/doctype/leave_application/leave_application_email_template.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<h1>Leave Application Notification</h1>
-<h3>Details:</h3>
-
-	<table class="table table-bordered small" style="max-width: 500px;">
-		<tr>
-			<td>Employee</td>
-			<td>{{employee_name}}</td>
-		</tr>
-		<tr>
-			<td>Leave Type</td>
-			<td>{{leave_type}}</td>
-		</tr>
-		<tr>
-			<td>From Date</td>
-			<td>{{from_date}}</td>
-		</tr>
-		<tr>
-			<td>To Date</td>
-			<td>{{to_date}}</td>
-		</tr>
-		<tr>
-			<td>Status</td>
-			<td>{{status}}</td>
-		</tr>
-	</table>
-
-	{% set doc_link = frappe.utils.get_url_to_form('Leave Application', name) %}
-
-	<br><br>
-	<a class="btn btn-primary" href="{{ doc_link }}" target="_blank">{{ _('Open Now') }}</a>
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_application/leave_application_list.js b/erpnext/hr/doctype/leave_application/leave_application_list.js
deleted file mode 100644
index 157271a..0000000
--- a/erpnext/hr/doctype/leave_application/leave_application_list.js
+++ /dev/null
@@ -1,14 +0,0 @@
-frappe.listview_settings["Leave Application"] = {
-	add_fields: ["leave_type", "employee", "employee_name", "total_leave_days", "from_date", "to_date"],
-	has_indicator_for_draft: 1,
-	get_indicator: function (doc) {
-		let status_color = {
-			"Approved": "green",
-			"Rejected": "red",
-			"Open": "orange",
-			"Cancelled": "red",
-			"Submitted": "blue"
-		};
-		return [__(doc.status), status_color[doc.status], "status,=," + doc.status];
-	}
-};
diff --git a/erpnext/hr/doctype/leave_application/test_leave_application.py b/erpnext/hr/doctype/leave_application/test_leave_application.py
deleted file mode 100644
index 27c5410..0000000
--- a/erpnext/hr/doctype/leave_application/test_leave_application.py
+++ /dev/null
@@ -1,1155 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-import unittest
-
-import frappe
-from frappe.permissions import clear_user_permissions_for_doctype
-from frappe.utils import (
-	add_days,
-	add_months,
-	get_first_day,
-	get_last_day,
-	get_year_ending,
-	get_year_start,
-	getdate,
-	nowdate,
-)
-
-from erpnext.hr.doctype.employee.test_employee import make_employee
-from erpnext.hr.doctype.holiday_list.test_holiday_list import set_holiday_list
-from erpnext.hr.doctype.leave_allocation.test_leave_allocation import create_leave_allocation
-from erpnext.hr.doctype.leave_application.leave_application import (
-	InsufficientLeaveBalanceError,
-	LeaveAcrossAllocationsError,
-	LeaveDayBlockedError,
-	NotAnOptionalHoliday,
-	OverlapError,
-	get_leave_allocation_records,
-	get_leave_balance_on,
-	get_leave_details,
-)
-from erpnext.hr.doctype.leave_policy_assignment.leave_policy_assignment import (
-	create_assignment_for_multiple_employees,
-)
-from erpnext.hr.doctype.leave_type.test_leave_type import create_leave_type
-from erpnext.payroll.doctype.salary_slip.test_salary_slip import (
-	make_holiday_list,
-	make_leave_application,
-)
-
-test_dependencies = ["Leave Type", "Leave Allocation", "Leave Block List", "Employee"]
-
-_test_records = [
-	{
-		"company": "_Test Company",
-		"doctype": "Leave Application",
-		"employee": "_T-Employee-00001",
-		"from_date": "2013-05-01",
-		"description": "_Test Reason",
-		"leave_type": "_Test Leave Type",
-		"posting_date": "2013-01-02",
-		"to_date": "2013-05-05",
-	},
-	{
-		"company": "_Test Company",
-		"doctype": "Leave Application",
-		"employee": "_T-Employee-00002",
-		"from_date": "2013-05-01",
-		"description": "_Test Reason",
-		"leave_type": "_Test Leave Type",
-		"posting_date": "2013-01-02",
-		"to_date": "2013-05-05",
-	},
-	{
-		"company": "_Test Company",
-		"doctype": "Leave Application",
-		"employee": "_T-Employee-00001",
-		"from_date": "2013-01-15",
-		"description": "_Test Reason",
-		"leave_type": "_Test Leave Type LWP",
-		"posting_date": "2013-01-02",
-		"to_date": "2013-01-15",
-	},
-]
-
-
-class TestLeaveApplication(unittest.TestCase):
-	def setUp(self):
-		for dt in [
-			"Leave Application",
-			"Leave Allocation",
-			"Salary Slip",
-			"Leave Ledger Entry",
-			"Leave Period",
-			"Leave Policy Assignment",
-		]:
-			frappe.db.delete(dt)
-
-		frappe.set_user("Administrator")
-		set_leave_approver()
-
-		frappe.db.delete("Attendance", {"employee": "_T-Employee-00001"})
-		frappe.db.set_value("Employee", "_T-Employee-00001", "holiday_list", "")
-
-		from_date = get_year_start(getdate())
-		to_date = get_year_ending(getdate())
-		self.holiday_list = make_holiday_list(from_date=from_date, to_date=to_date)
-
-		if not frappe.db.exists("Leave Type", "_Test Leave Type"):
-			frappe.get_doc(
-				dict(leave_type_name="_Test Leave Type", doctype="Leave Type", include_holiday=True)
-			).insert()
-
-	def tearDown(self):
-		frappe.db.rollback()
-		frappe.set_user("Administrator")
-
-	def _clear_roles(self):
-		frappe.db.sql(
-			"""delete from `tabHas Role` where parent in
-			("test@example.com", "test1@example.com", "test2@example.com")"""
-		)
-
-	def _clear_applications(self):
-		frappe.db.sql("""delete from `tabLeave Application`""")
-
-	def get_application(self, doc):
-		application = frappe.copy_doc(doc)
-		application.from_date = "2013-01-01"
-		application.to_date = "2013-01-05"
-		return application
-
-	@set_holiday_list("Salary Slip Test Holiday List", "_Test Company")
-	def test_validate_application_across_allocations(self):
-		# Test validation for application dates when negative balance is disabled
-		frappe.delete_doc_if_exists("Leave Type", "Test Leave Validation", force=1)
-		leave_type = frappe.get_doc(
-			dict(leave_type_name="Test Leave Validation", doctype="Leave Type", allow_negative=False)
-		).insert()
-
-		employee = get_employee()
-		date = getdate()
-		first_sunday = get_first_sunday(self.holiday_list, for_date=get_year_start(date))
-
-		leave_application = frappe.get_doc(
-			dict(
-				doctype="Leave Application",
-				employee=employee.name,
-				leave_type=leave_type.name,
-				from_date=add_days(first_sunday, 1),
-				to_date=add_days(first_sunday, 4),
-				company="_Test Company",
-				status="Approved",
-				leave_approver="test@example.com",
-			)
-		)
-		# Application period cannot be outside leave allocation period
-		self.assertRaises(frappe.ValidationError, leave_application.insert)
-
-		make_allocation_record(
-			leave_type=leave_type.name, from_date=get_year_start(date), to_date=get_year_ending(date)
-		)
-
-		leave_application = frappe.get_doc(
-			dict(
-				doctype="Leave Application",
-				employee=employee.name,
-				leave_type=leave_type.name,
-				from_date=add_days(first_sunday, -10),
-				to_date=add_days(first_sunday, 1),
-				company="_Test Company",
-				status="Approved",
-				leave_approver="test@example.com",
-			)
-		)
-
-		# Application period cannot be across two allocation records
-		self.assertRaises(LeaveAcrossAllocationsError, leave_application.insert)
-
-	@set_holiday_list("Salary Slip Test Holiday List", "_Test Company")
-	def test_insufficient_leave_balance_validation(self):
-		# CASE 1: Validation when allow negative is disabled
-		frappe.delete_doc_if_exists("Leave Type", "Test Leave Validation", force=1)
-		leave_type = frappe.get_doc(
-			dict(leave_type_name="Test Leave Validation", doctype="Leave Type", allow_negative=False)
-		).insert()
-
-		employee = get_employee()
-		date = getdate()
-		first_sunday = get_first_sunday(self.holiday_list, for_date=get_year_start(date))
-
-		# allocate 2 leaves, apply for more
-		make_allocation_record(
-			leave_type=leave_type.name,
-			from_date=get_year_start(date),
-			to_date=get_year_ending(date),
-			leaves=2,
-		)
-		leave_application = frappe.get_doc(
-			dict(
-				doctype="Leave Application",
-				employee=employee.name,
-				leave_type=leave_type.name,
-				from_date=add_days(first_sunday, 1),
-				to_date=add_days(first_sunday, 3),
-				company="_Test Company",
-				status="Approved",
-				leave_approver="test@example.com",
-			)
-		)
-		self.assertRaises(InsufficientLeaveBalanceError, leave_application.insert)
-
-		# CASE 2: Allows creating application with a warning message when allow negative is enabled
-		frappe.db.set_value("Leave Type", "Test Leave Validation", "allow_negative", True)
-		make_leave_application(
-			employee.name, add_days(first_sunday, 1), add_days(first_sunday, 3), leave_type.name
-		)
-
-	@set_holiday_list("Salary Slip Test Holiday List", "_Test Company")
-	def test_separate_leave_ledger_entry_for_boundary_applications(self):
-		# When application falls in 2 different allocations and Allow Negative is enabled
-		# creates separate leave ledger entries
-		frappe.delete_doc_if_exists("Leave Type", "Test Leave Validation", force=1)
-		leave_type = frappe.get_doc(
-			dict(
-				leave_type_name="Test Leave Validation",
-				doctype="Leave Type",
-				allow_negative=True,
-				include_holiday=True,
-			)
-		).insert()
-
-		employee = get_employee()
-		date = getdate()
-		year_start = getdate(get_year_start(date))
-		year_end = getdate(get_year_ending(date))
-
-		make_allocation_record(leave_type=leave_type.name, from_date=year_start, to_date=year_end)
-		# application across allocations
-
-		# CASE 1: from date has no allocation, to date has an allocation / both dates have allocation
-		start_date = add_days(year_start, -10)
-		application = make_leave_application(
-			employee.name,
-			start_date,
-			add_days(year_start, 3),
-			leave_type.name,
-			half_day=1,
-			half_day_date=start_date,
-		)
-
-		# 2 separate leave ledger entries
-		ledgers = frappe.db.get_all(
-			"Leave Ledger Entry",
-			{"transaction_type": "Leave Application", "transaction_name": application.name},
-			["leaves", "from_date", "to_date"],
-			order_by="from_date",
-		)
-		self.assertEqual(len(ledgers), 2)
-
-		self.assertEqual(ledgers[0].from_date, application.from_date)
-		self.assertEqual(ledgers[0].to_date, add_days(year_start, -1))
-
-		self.assertEqual(ledgers[1].from_date, year_start)
-		self.assertEqual(ledgers[1].to_date, application.to_date)
-
-		# CASE 2: from date has an allocation, to date has no allocation
-		application = make_leave_application(
-			employee.name, add_days(year_end, -3), add_days(year_end, 5), leave_type.name
-		)
-
-		# 2 separate leave ledger entries
-		ledgers = frappe.db.get_all(
-			"Leave Ledger Entry",
-			{"transaction_type": "Leave Application", "transaction_name": application.name},
-			["leaves", "from_date", "to_date"],
-			order_by="from_date",
-		)
-		self.assertEqual(len(ledgers), 2)
-
-		self.assertEqual(ledgers[0].from_date, application.from_date)
-		self.assertEqual(ledgers[0].to_date, year_end)
-
-		self.assertEqual(ledgers[1].from_date, add_days(year_end, 1))
-		self.assertEqual(ledgers[1].to_date, application.to_date)
-
-	def test_overwrite_attendance(self):
-		"""check attendance is automatically created on leave approval"""
-		make_allocation_record()
-		application = self.get_application(_test_records[0])
-		application.status = "Approved"
-		application.from_date = "2018-01-01"
-		application.to_date = "2018-01-03"
-		application.insert()
-		application.submit()
-
-		attendance = frappe.get_all(
-			"Attendance",
-			["name", "status", "attendance_date"],
-			dict(attendance_date=("between", ["2018-01-01", "2018-01-03"]), docstatus=("!=", 2)),
-		)
-
-		# attendance created for all 3 days
-		self.assertEqual(len(attendance), 3)
-
-		# all on leave
-		self.assertTrue(all([d.status == "On Leave" for d in attendance]))
-
-		# dates
-		dates = [d.attendance_date for d in attendance]
-		for d in ("2018-01-01", "2018-01-02", "2018-01-03"):
-			self.assertTrue(getdate(d) in dates)
-
-	@set_holiday_list("Salary Slip Test Holiday List", "_Test Company")
-	def test_attendance_for_include_holidays(self):
-		# Case 1: leave type with 'Include holidays within leaves as leaves' enabled
-		frappe.delete_doc_if_exists("Leave Type", "Test Include Holidays", force=1)
-		leave_type = frappe.get_doc(
-			dict(leave_type_name="Test Include Holidays", doctype="Leave Type", include_holiday=True)
-		).insert()
-
-		date = getdate()
-		make_allocation_record(
-			leave_type=leave_type.name, from_date=get_year_start(date), to_date=get_year_ending(date)
-		)
-
-		employee = get_employee()
-		first_sunday = get_first_sunday(self.holiday_list)
-
-		leave_application = make_leave_application(
-			employee.name, first_sunday, add_days(first_sunday, 3), leave_type.name
-		)
-		leave_application.reload()
-		self.assertEqual(leave_application.total_leave_days, 4)
-		self.assertEqual(frappe.db.count("Attendance", {"leave_application": leave_application.name}), 4)
-
-		leave_application.cancel()
-
-	@set_holiday_list("Salary Slip Test Holiday List", "_Test Company")
-	def test_attendance_update_for_exclude_holidays(self):
-		# Case 2: leave type with 'Include holidays within leaves as leaves' disabled
-		frappe.delete_doc_if_exists("Leave Type", "Test Do Not Include Holidays", force=1)
-		leave_type = frappe.get_doc(
-			dict(
-				leave_type_name="Test Do Not Include Holidays", doctype="Leave Type", include_holiday=False
-			)
-		).insert()
-
-		date = getdate()
-		make_allocation_record(
-			leave_type=leave_type.name, from_date=get_year_start(date), to_date=get_year_ending(date)
-		)
-
-		employee = get_employee()
-		first_sunday = get_first_sunday(self.holiday_list)
-
-		# already marked attendance on a holiday should be deleted in this case
-		config = {"doctype": "Attendance", "employee": employee.name, "status": "Present"}
-		attendance_on_holiday = frappe.get_doc(config)
-		attendance_on_holiday.attendance_date = first_sunday
-		attendance_on_holiday.flags.ignore_validate = True
-		attendance_on_holiday.save()
-
-		# already marked attendance on a non-holiday should be updated
-		attendance = frappe.get_doc(config)
-		attendance.attendance_date = add_days(first_sunday, 3)
-		attendance.flags.ignore_validate = True
-		attendance.save()
-
-		leave_application = make_leave_application(
-			employee.name, first_sunday, add_days(first_sunday, 3), leave_type.name, employee.company
-		)
-		leave_application.reload()
-
-		# holiday should be excluded while marking attendance
-		self.assertEqual(leave_application.total_leave_days, 3)
-		self.assertEqual(frappe.db.count("Attendance", {"leave_application": leave_application.name}), 3)
-
-		# attendance on holiday deleted
-		self.assertFalse(frappe.db.exists("Attendance", attendance_on_holiday.name))
-
-		# attendance on non-holiday updated
-		self.assertEqual(frappe.db.get_value("Attendance", attendance.name, "status"), "On Leave")
-
-	def test_block_list(self):
-		self._clear_roles()
-
-		from frappe.utils.user import add_role
-
-		add_role("test@example.com", "HR User")
-		clear_user_permissions_for_doctype("Employee")
-
-		frappe.db.set_value(
-			"Department", "_Test Department - _TC", "leave_block_list", "_Test Leave Block List"
-		)
-
-		make_allocation_record()
-
-		application = self.get_application(_test_records[0])
-		application.insert()
-		application.reload()
-		application.status = "Approved"
-		self.assertRaises(LeaveDayBlockedError, application.submit)
-
-		frappe.set_user("test@example.com")
-
-		# clear other applications
-		frappe.db.sql("delete from `tabLeave Application`")
-
-		application = self.get_application(_test_records[0])
-		self.assertTrue(application.insert())
-
-	def test_overlap(self):
-		self._clear_roles()
-		self._clear_applications()
-
-		from frappe.utils.user import add_role
-
-		add_role("test@example.com", "Employee")
-		frappe.set_user("test@example.com")
-
-		make_allocation_record()
-
-		application = self.get_application(_test_records[0])
-		application.insert()
-
-		application = self.get_application(_test_records[0])
-		self.assertRaises(OverlapError, application.insert)
-
-	def test_overlap_with_half_day_1(self):
-		self._clear_roles()
-		self._clear_applications()
-
-		from frappe.utils.user import add_role
-
-		add_role("test@example.com", "Employee")
-		frappe.set_user("test@example.com")
-
-		make_allocation_record()
-
-		# leave from 1-5, half day on 3rd
-		application = self.get_application(_test_records[0])
-		application.half_day = 1
-		application.half_day_date = "2013-01-03"
-		application.insert()
-
-		# Apply again for a half day leave on 3rd
-		application = self.get_application(_test_records[0])
-		application.from_date = "2013-01-03"
-		application.to_date = "2013-01-03"
-		application.half_day = 1
-		application.half_day_date = "2013-01-03"
-		application.insert()
-
-		# Apply again for a half day leave on 3rd
-		application = self.get_application(_test_records[0])
-		application.from_date = "2013-01-03"
-		application.to_date = "2013-01-03"
-		application.half_day = 1
-		application.half_day_date = "2013-01-03"
-
-		self.assertRaises(OverlapError, application.insert)
-
-	def test_overlap_with_half_day_2(self):
-		self._clear_roles()
-		self._clear_applications()
-
-		from frappe.utils.user import add_role
-
-		add_role("test@example.com", "Employee")
-
-		frappe.set_user("test@example.com")
-
-		make_allocation_record()
-
-		# leave from 1-5, no half day
-		application = self.get_application(_test_records[0])
-		application.insert()
-
-		# Apply again for a half day leave on 1st
-		application = self.get_application(_test_records[0])
-		application.half_day = 1
-		application.half_day_date = application.from_date
-
-		self.assertRaises(OverlapError, application.insert)
-
-	def test_overlap_with_half_day_3(self):
-		self._clear_roles()
-		self._clear_applications()
-
-		from frappe.utils.user import add_role
-
-		add_role("test@example.com", "Employee")
-
-		frappe.set_user("test@example.com")
-
-		make_allocation_record()
-
-		# leave from 1-5, half day on 5th
-		application = self.get_application(_test_records[0])
-		application.half_day = 1
-		application.half_day_date = "2013-01-05"
-		application.insert()
-
-		# Apply leave from 4-7, half day on 5th
-		application = self.get_application(_test_records[0])
-		application.from_date = "2013-01-04"
-		application.to_date = "2013-01-07"
-		application.half_day = 1
-		application.half_day_date = "2013-01-05"
-
-		self.assertRaises(OverlapError, application.insert)
-
-		# Apply leave from 5-7, half day on 5th
-		application = self.get_application(_test_records[0])
-		application.from_date = "2013-01-05"
-		application.to_date = "2013-01-07"
-		application.half_day = 1
-		application.half_day_date = "2013-01-05"
-		application.insert()
-
-	@set_holiday_list("Salary Slip Test Holiday List", "_Test Company")
-	def test_optional_leave(self):
-		leave_period = get_leave_period()
-		today = nowdate()
-		holiday_list = "Test Holiday List for Optional Holiday"
-		employee = get_employee()
-
-		first_sunday = get_first_sunday(self.holiday_list)
-		optional_leave_date = add_days(first_sunday, 1)
-
-		if not frappe.db.exists("Holiday List", holiday_list):
-			frappe.get_doc(
-				dict(
-					doctype="Holiday List",
-					holiday_list_name=holiday_list,
-					from_date=add_months(today, -6),
-					to_date=add_months(today, 6),
-					holidays=[dict(holiday_date=optional_leave_date, description="Test")],
-				)
-			).insert()
-
-		frappe.db.set_value("Leave Period", leave_period.name, "optional_holiday_list", holiday_list)
-		leave_type = "Test Optional Type"
-		if not frappe.db.exists("Leave Type", leave_type):
-			frappe.get_doc(
-				dict(leave_type_name=leave_type, doctype="Leave Type", is_optional_leave=1)
-			).insert()
-
-		allocate_leaves(employee, leave_period, leave_type, 10)
-
-		date = add_days(first_sunday, 2)
-
-		leave_application = frappe.get_doc(
-			dict(
-				doctype="Leave Application",
-				employee=employee.name,
-				company="_Test Company",
-				description="_Test Reason",
-				leave_type=leave_type,
-				from_date=date,
-				to_date=date,
-			)
-		)
-
-		# can only apply on optional holidays
-		self.assertRaises(NotAnOptionalHoliday, leave_application.insert)
-
-		leave_application.from_date = optional_leave_date
-		leave_application.to_date = optional_leave_date
-		leave_application.status = "Approved"
-		leave_application.insert()
-		leave_application.submit()
-
-		# check leave balance is reduced
-		self.assertEqual(get_leave_balance_on(employee.name, leave_type, optional_leave_date), 9)
-
-	def test_leaves_allowed(self):
-		employee = get_employee()
-		leave_period = get_leave_period()
-		frappe.delete_doc_if_exists("Leave Type", "Test Leave Type", force=1)
-		leave_type = frappe.get_doc(
-			dict(leave_type_name="Test Leave Type", doctype="Leave Type", max_leaves_allowed=5)
-		).insert()
-
-		date = add_days(nowdate(), -7)
-
-		allocate_leaves(employee, leave_period, leave_type.name, 5)
-
-		leave_application = frappe.get_doc(
-			dict(
-				doctype="Leave Application",
-				employee=employee.name,
-				leave_type=leave_type.name,
-				description="_Test Reason",
-				from_date=date,
-				to_date=add_days(date, 2),
-				company="_Test Company",
-				docstatus=1,
-				status="Approved",
-			)
-		)
-		leave_application.submit()
-
-		leave_application = frappe.get_doc(
-			dict(
-				doctype="Leave Application",
-				employee=employee.name,
-				leave_type=leave_type.name,
-				description="_Test Reason",
-				from_date=add_days(date, 4),
-				to_date=add_days(date, 8),
-				company="_Test Company",
-				docstatus=1,
-				status="Approved",
-			)
-		)
-		self.assertRaises(frappe.ValidationError, leave_application.insert)
-
-	def test_applicable_after(self):
-		employee = get_employee()
-		leave_period = get_leave_period()
-		frappe.delete_doc_if_exists("Leave Type", "Test Leave Type", force=1)
-		leave_type = frappe.get_doc(
-			dict(leave_type_name="Test Leave Type", doctype="Leave Type", applicable_after=15)
-		).insert()
-		date = add_days(nowdate(), -7)
-		frappe.db.set_value("Employee", employee.name, "date_of_joining", date)
-		allocate_leaves(employee, leave_period, leave_type.name, 10)
-
-		leave_application = frappe.get_doc(
-			dict(
-				doctype="Leave Application",
-				employee=employee.name,
-				leave_type=leave_type.name,
-				description="_Test Reason",
-				from_date=date,
-				to_date=add_days(date, 4),
-				company="_Test Company",
-				docstatus=1,
-				status="Approved",
-			)
-		)
-
-		self.assertRaises(frappe.ValidationError, leave_application.insert)
-
-		frappe.delete_doc_if_exists("Leave Type", "Test Leave Type 1", force=1)
-		leave_type_1 = frappe.get_doc(
-			dict(leave_type_name="Test Leave Type 1", doctype="Leave Type")
-		).insert()
-
-		allocate_leaves(employee, leave_period, leave_type_1.name, 10)
-
-		leave_application = frappe.get_doc(
-			dict(
-				doctype="Leave Application",
-				employee=employee.name,
-				leave_type=leave_type_1.name,
-				description="_Test Reason",
-				from_date=date,
-				to_date=add_days(date, 4),
-				company="_Test Company",
-				docstatus=1,
-				status="Approved",
-			)
-		)
-
-		self.assertTrue(leave_application.insert())
-		frappe.db.set_value("Employee", employee.name, "date_of_joining", "2010-01-01")
-
-	def test_max_continuous_leaves(self):
-		employee = get_employee()
-		leave_period = get_leave_period()
-		frappe.delete_doc_if_exists("Leave Type", "Test Leave Type", force=1)
-		leave_type = frappe.get_doc(
-			dict(
-				leave_type_name="Test Leave Type",
-				doctype="Leave Type",
-				max_leaves_allowed=15,
-				max_continuous_days_allowed=3,
-			)
-		).insert()
-
-		date = add_days(nowdate(), -7)
-
-		allocate_leaves(employee, leave_period, leave_type.name, 10)
-
-		leave_application = frappe.get_doc(
-			dict(
-				doctype="Leave Application",
-				employee=employee.name,
-				leave_type=leave_type.name,
-				description="_Test Reason",
-				from_date=date,
-				to_date=add_days(date, 4),
-				company="_Test Company",
-				docstatus=1,
-				status="Approved",
-			)
-		)
-
-		self.assertRaises(frappe.ValidationError, leave_application.insert)
-
-	def test_leave_balance_near_allocaton_expiry(self):
-		employee = get_employee()
-		leave_type = create_leave_type(
-			leave_type_name="_Test_CF_leave_expiry",
-			is_carry_forward=1,
-			expire_carry_forwarded_leaves_after_days=90,
-		)
-		leave_type.insert()
-
-		create_carry_forwarded_allocation(employee, leave_type)
-		details = get_leave_balance_on(
-			employee.name, leave_type.name, nowdate(), add_days(nowdate(), 8), for_consumption=True
-		)
-
-		self.assertEqual(details.leave_balance_for_consumption, 21)
-		self.assertEqual(details.leave_balance, 30)
-
-	def test_earned_leaves_creation(self):
-		from erpnext.hr.utils import allocate_earned_leaves
-
-		leave_period = get_leave_period()
-		employee = get_employee()
-		leave_type = "Test Earned Leave Type"
-		make_policy_assignment(employee, leave_type, leave_period)
-
-		for i in range(0, 14):
-			allocate_earned_leaves()
-
-		self.assertEqual(get_leave_balance_on(employee.name, leave_type, nowdate()), 6)
-
-		# validate earned leaves creation without maximum leaves
-		frappe.db.set_value("Leave Type", leave_type, "max_leaves_allowed", 0)
-
-		for i in range(0, 6):
-			allocate_earned_leaves()
-
-		self.assertEqual(get_leave_balance_on(employee.name, leave_type, nowdate()), 9)
-
-	# test to not consider current leave in leave balance while submitting
-	def test_current_leave_on_submit(self):
-		employee = get_employee()
-
-		leave_type = "Sick Leave"
-		if not frappe.db.exists("Leave Type", leave_type):
-			frappe.get_doc(dict(leave_type_name=leave_type, doctype="Leave Type")).insert()
-
-		allocation = frappe.get_doc(
-			dict(
-				doctype="Leave Allocation",
-				employee=employee.name,
-				leave_type=leave_type,
-				from_date="2018-10-01",
-				to_date="2018-10-10",
-				new_leaves_allocated=1,
-			)
-		)
-		allocation.insert(ignore_permissions=True)
-		allocation.submit()
-		leave_application = frappe.get_doc(
-			dict(
-				doctype="Leave Application",
-				employee=employee.name,
-				leave_type=leave_type,
-				description="_Test Reason",
-				from_date="2018-10-02",
-				to_date="2018-10-02",
-				company="_Test Company",
-				status="Approved",
-				leave_approver="test@example.com",
-			)
-		)
-		self.assertTrue(leave_application.insert())
-		leave_application.submit()
-		self.assertEqual(leave_application.docstatus, 1)
-
-	def test_creation_of_leave_ledger_entry_on_submit(self):
-		employee = get_employee()
-
-		leave_type = create_leave_type(leave_type_name="Test Leave Type 1")
-		leave_type.save()
-
-		leave_allocation = create_leave_allocation(
-			employee=employee.name, employee_name=employee.employee_name, leave_type=leave_type.name
-		)
-		leave_allocation.submit()
-
-		leave_application = frappe.get_doc(
-			dict(
-				doctype="Leave Application",
-				employee=employee.name,
-				leave_type=leave_type.name,
-				from_date=add_days(nowdate(), 1),
-				to_date=add_days(nowdate(), 4),
-				description="_Test Reason",
-				company="_Test Company",
-				docstatus=1,
-				status="Approved",
-			)
-		)
-		leave_application.submit()
-		leave_ledger_entry = frappe.get_all(
-			"Leave Ledger Entry", fields="*", filters=dict(transaction_name=leave_application.name)
-		)
-
-		self.assertEqual(leave_ledger_entry[0].employee, leave_application.employee)
-		self.assertEqual(leave_ledger_entry[0].leave_type, leave_application.leave_type)
-		self.assertEqual(leave_ledger_entry[0].leaves, leave_application.total_leave_days * -1)
-
-		# check if leave ledger entry is deleted on cancellation
-		leave_application.cancel()
-		self.assertFalse(
-			frappe.db.exists("Leave Ledger Entry", {"transaction_name": leave_application.name})
-		)
-
-	def test_ledger_entry_creation_on_intermediate_allocation_expiry(self):
-		employee = get_employee()
-		leave_type = create_leave_type(
-			leave_type_name="_Test_CF_leave_expiry",
-			is_carry_forward=1,
-			expire_carry_forwarded_leaves_after_days=90,
-			include_holiday=True,
-		)
-		leave_type.submit()
-
-		create_carry_forwarded_allocation(employee, leave_type)
-
-		leave_application = frappe.get_doc(
-			dict(
-				doctype="Leave Application",
-				employee=employee.name,
-				leave_type=leave_type.name,
-				from_date=add_days(nowdate(), -3),
-				to_date=add_days(nowdate(), 7),
-				half_day=1,
-				half_day_date=add_days(nowdate(), -3),
-				description="_Test Reason",
-				company="_Test Company",
-				docstatus=1,
-				status="Approved",
-			)
-		)
-		leave_application.submit()
-
-		leave_ledger_entry = frappe.get_all(
-			"Leave Ledger Entry", "*", filters=dict(transaction_name=leave_application.name)
-		)
-
-		self.assertEqual(len(leave_ledger_entry), 2)
-		self.assertEqual(leave_ledger_entry[0].employee, leave_application.employee)
-		self.assertEqual(leave_ledger_entry[0].leave_type, leave_application.leave_type)
-		self.assertEqual(leave_ledger_entry[0].leaves, -8.5)
-		self.assertEqual(leave_ledger_entry[1].leaves, -2)
-
-	def test_leave_application_creation_after_expiry(self):
-		# test leave balance for carry forwarded allocation
-		employee = get_employee()
-		leave_type = create_leave_type(
-			leave_type_name="_Test_CF_leave_expiry",
-			is_carry_forward=1,
-			expire_carry_forwarded_leaves_after_days=90,
-		)
-		leave_type.submit()
-
-		create_carry_forwarded_allocation(employee, leave_type)
-
-		self.assertEqual(
-			get_leave_balance_on(
-				employee.name, leave_type.name, add_days(nowdate(), -85), add_days(nowdate(), -84)
-			),
-			0,
-		)
-
-	def test_leave_approver_perms(self):
-		employee = get_employee()
-		user = "test_approver_perm_emp@example.com"
-		make_employee(user, "_Test Company")
-
-		# set approver for employee
-		employee.reload()
-		employee.leave_approver = user
-		employee.save()
-		self.assertTrue("Leave Approver" in frappe.get_roles(user))
-
-		make_allocation_record(employee.name)
-
-		application = self.get_application(_test_records[0])
-		application.from_date = "2018-01-01"
-		application.to_date = "2018-01-03"
-		application.leave_approver = user
-		application.insert()
-		self.assertTrue(application.name in frappe.share.get_shared("Leave Application", user))
-
-		# check shared doc revoked
-		application.reload()
-		application.leave_approver = "test@example.com"
-		application.save()
-		self.assertTrue(application.name not in frappe.share.get_shared("Leave Application", user))
-
-		application.reload()
-		application.leave_approver = user
-		application.save()
-
-		frappe.set_user(user)
-		application.reload()
-		application.status = "Approved"
-		application.submit()
-
-		# unset leave approver
-		frappe.set_user("Administrator")
-		employee.reload()
-		employee.leave_approver = ""
-		employee.save()
-
-	@set_holiday_list("Salary Slip Test Holiday List", "_Test Company")
-	def test_get_leave_details_for_dashboard(self):
-		employee = get_employee()
-		date = getdate()
-		year_start = getdate(get_year_start(date))
-		year_end = getdate(get_year_ending(date))
-
-		# ALLOCATION = 30
-		allocation = make_allocation_record(
-			employee=employee.name, from_date=year_start, to_date=year_end
-		)
-
-		# USED LEAVES = 4
-		first_sunday = get_first_sunday(self.holiday_list)
-		leave_application = make_leave_application(
-			employee.name, add_days(first_sunday, 1), add_days(first_sunday, 4), "_Test Leave Type"
-		)
-		leave_application.reload()
-
-		# LEAVES PENDING APPROVAL = 1
-		leave_application = make_leave_application(
-			employee.name,
-			add_days(first_sunday, 5),
-			add_days(first_sunday, 5),
-			"_Test Leave Type",
-			submit=False,
-		)
-		leave_application.status = "Open"
-		leave_application.save()
-
-		details = get_leave_details(employee.name, allocation.from_date)
-		leave_allocation = details["leave_allocation"]["_Test Leave Type"]
-		self.assertEqual(leave_allocation["total_leaves"], 30)
-		self.assertEqual(leave_allocation["leaves_taken"], 4)
-		self.assertEqual(leave_allocation["expired_leaves"], 0)
-		self.assertEqual(leave_allocation["leaves_pending_approval"], 1)
-		self.assertEqual(leave_allocation["remaining_leaves"], 26)
-
-	@set_holiday_list("Salary Slip Test Holiday List", "_Test Company")
-	def test_get_earned_leave_details_for_dashboard(self):
-		from erpnext.hr.utils import allocate_earned_leaves
-
-		leave_period = get_leave_period()
-		employee = get_employee()
-		leave_type = "Test Earned Leave Type"
-		leave_policy_assignments = make_policy_assignment(employee, leave_type, leave_period)
-		allocation = frappe.db.get_value(
-			"Leave Allocation",
-			{"leave_policy_assignment": leave_policy_assignments[0]},
-			"name",
-		)
-		allocation = frappe.get_doc("Leave Allocation", allocation)
-		allocation.new_leaves_allocated = 2
-		allocation.save()
-
-		for i in range(0, 6):
-			allocate_earned_leaves()
-
-		first_sunday = get_first_sunday(self.holiday_list)
-		make_leave_application(
-			employee.name, add_days(first_sunday, 1), add_days(first_sunday, 1), leave_type
-		)
-
-		details = get_leave_details(employee.name, allocation.from_date)
-		leave_allocation = details["leave_allocation"][leave_type]
-		expected = {
-			"total_leaves": 2.0,
-			"expired_leaves": 0.0,
-			"leaves_taken": 1.0,
-			"leaves_pending_approval": 0.0,
-			"remaining_leaves": 1.0,
-		}
-		self.assertEqual(leave_allocation, expected)
-
-		details = get_leave_details(employee.name, getdate())
-		leave_allocation = details["leave_allocation"][leave_type]
-
-		expected = {
-			"total_leaves": 5.0,
-			"expired_leaves": 0.0,
-			"leaves_taken": 1.0,
-			"leaves_pending_approval": 0.0,
-			"remaining_leaves": 4.0,
-		}
-		self.assertEqual(leave_allocation, expected)
-
-	@set_holiday_list("Salary Slip Test Holiday List", "_Test Company")
-	def test_get_leave_allocation_records(self):
-		employee = get_employee()
-		leave_type = create_leave_type(
-			leave_type_name="_Test_CF_leave_expiry",
-			is_carry_forward=1,
-			expire_carry_forwarded_leaves_after_days=90,
-		)
-		leave_type.insert()
-
-		leave_alloc = create_carry_forwarded_allocation(employee, leave_type)
-		details = get_leave_allocation_records(employee.name, getdate(), leave_type.name)
-		expected_data = {
-			"from_date": getdate(leave_alloc.from_date),
-			"to_date": getdate(leave_alloc.to_date),
-			"total_leaves_allocated": 30.0,
-			"unused_leaves": 15.0,
-			"new_leaves_allocated": 15.0,
-			"leave_type": leave_type.name,
-		}
-		self.assertEqual(details.get(leave_type.name), expected_data)
-
-
-def create_carry_forwarded_allocation(employee, leave_type):
-	# initial leave allocation
-	leave_allocation = create_leave_allocation(
-		leave_type="_Test_CF_leave_expiry",
-		employee=employee.name,
-		employee_name=employee.employee_name,
-		from_date=add_months(nowdate(), -24),
-		to_date=add_months(nowdate(), -12),
-		carry_forward=0,
-	)
-	leave_allocation.submit()
-
-	leave_allocation = create_leave_allocation(
-		leave_type="_Test_CF_leave_expiry",
-		employee=employee.name,
-		employee_name=employee.employee_name,
-		from_date=add_days(nowdate(), -84),
-		to_date=add_days(nowdate(), 100),
-		carry_forward=1,
-	)
-	leave_allocation.submit()
-
-	return leave_allocation
-
-
-def make_allocation_record(
-	employee=None, leave_type=None, from_date=None, to_date=None, carry_forward=False, leaves=None
-):
-	allocation = frappe.get_doc(
-		{
-			"doctype": "Leave Allocation",
-			"employee": employee or "_T-Employee-00001",
-			"leave_type": leave_type or "_Test Leave Type",
-			"from_date": from_date or "2013-01-01",
-			"to_date": to_date or "2019-12-31",
-			"new_leaves_allocated": leaves or 30,
-			"carry_forward": carry_forward,
-		}
-	)
-
-	allocation.insert(ignore_permissions=True)
-	allocation.submit()
-
-	return allocation
-
-
-def get_employee():
-	return frappe.get_doc("Employee", "_T-Employee-00001")
-
-
-def set_leave_approver():
-	employee = get_employee()
-	dept_doc = frappe.get_doc("Department", employee.department)
-	dept_doc.append("leave_approvers", {"approver": "test@example.com"})
-	dept_doc.save(ignore_permissions=True)
-
-
-def get_leave_period():
-	leave_period_name = frappe.db.get_value("Leave Period", {"company": "_Test Company"})
-	if leave_period_name:
-		return frappe.get_doc("Leave Period", leave_period_name)
-	else:
-		return frappe.get_doc(
-			dict(
-				name="Test Leave Period",
-				doctype="Leave Period",
-				from_date=add_months(nowdate(), -6),
-				to_date=add_months(nowdate(), 6),
-				company="_Test Company",
-				is_active=1,
-			)
-		).insert()
-
-
-def allocate_leaves(employee, leave_period, leave_type, new_leaves_allocated, eligible_leaves=0):
-	allocate_leave = frappe.get_doc(
-		{
-			"doctype": "Leave Allocation",
-			"__islocal": 1,
-			"employee": employee.name,
-			"employee_name": employee.employee_name,
-			"leave_type": leave_type,
-			"from_date": leave_period.from_date,
-			"to_date": leave_period.to_date,
-			"new_leaves_allocated": new_leaves_allocated,
-			"docstatus": 1,
-		}
-	).insert()
-
-	allocate_leave.submit()
-
-
-def get_first_sunday(holiday_list, for_date=None):
-	date = for_date or getdate()
-	month_start_date = get_first_day(date)
-	month_end_date = get_last_day(date)
-	first_sunday = frappe.db.sql(
-		"""
-		select holiday_date from `tabHoliday`
-		where parent = %s
-			and holiday_date between %s and %s
-		order by holiday_date
-	""",
-		(holiday_list, month_start_date, month_end_date),
-	)[0][0]
-
-	return first_sunday
-
-
-def make_policy_assignment(employee, leave_type, leave_period):
-	frappe.delete_doc_if_exists("Leave Type", leave_type, force=1)
-	frappe.get_doc(
-		dict(
-			leave_type_name=leave_type,
-			doctype="Leave Type",
-			is_earned_leave=1,
-			earned_leave_frequency="Monthly",
-			rounding=0.5,
-			max_leaves_allowed=6,
-		)
-	).insert()
-
-	leave_policy = frappe.get_doc(
-		{
-			"doctype": "Leave Policy",
-			"title": "Test Leave Policy",
-			"leave_policy_details": [{"leave_type": leave_type, "annual_allocation": 6}],
-		}
-	).insert()
-
-	data = {
-		"assignment_based_on": "Leave Period",
-		"leave_policy": leave_policy.name,
-		"leave_period": leave_period.name,
-	}
-
-	leave_policy_assignments = create_assignment_for_multiple_employees(
-		[employee.name], frappe._dict(data)
-	)
-	return leave_policy_assignments
diff --git a/erpnext/hr/doctype/leave_application/test_records.json b/erpnext/hr/doctype/leave_application/test_records.json
deleted file mode 100644
index fe51488..0000000
--- a/erpnext/hr/doctype/leave_application/test_records.json
+++ /dev/null
@@ -1 +0,0 @@
-[]
diff --git a/erpnext/hr/doctype/leave_block_list/README.md b/erpnext/hr/doctype/leave_block_list/README.md
deleted file mode 100644
index b23396c..0000000
--- a/erpnext/hr/doctype/leave_block_list/README.md
+++ /dev/null
@@ -1 +0,0 @@
-List of days on which leaves can only be approved by special users.
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_block_list/__init__.py b/erpnext/hr/doctype/leave_block_list/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/leave_block_list/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/leave_block_list/leave_block_list.js b/erpnext/hr/doctype/leave_block_list/leave_block_list.js
deleted file mode 100644
index 7ccf59d..0000000
--- a/erpnext/hr/doctype/leave_block_list/leave_block_list.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Leave Block List', {
-	refresh: function(frm) {
-
-	}
-});
diff --git a/erpnext/hr/doctype/leave_block_list/leave_block_list.json b/erpnext/hr/doctype/leave_block_list/leave_block_list.json
deleted file mode 100644
index fdb975b..0000000
--- a/erpnext/hr/doctype/leave_block_list/leave_block_list.json
+++ /dev/null
@@ -1,248 +0,0 @@
-{
- "allow_copy": 0, 
- "allow_import": 1, 
- "allow_rename": 0, 
- "autoname": "field:leave_block_list_name", 
- "beta": 0, 
- "creation": "2013-02-18 17:43:12", 
- "custom": 0, 
- "description": "Block Holidays on important days.", 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "Setup", 
- "editable_grid": 0, 
- "fields": [
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "leave_block_list_name", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 1, 
-   "label": "Leave Block List Name", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "company", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 1, 
-   "label": "Company", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Company", 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 1, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "description": "If not checked, the list will have to be added to each Department where it has to be applied.", 
-   "fieldname": "applies_to_all_departments", 
-   "fieldtype": "Check", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 1, 
-   "label": "Applies to Company", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "description": "Stop users from making Leave Applications on following days.", 
-   "fieldname": "block_days", 
-   "fieldtype": "Section Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Block Days", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "leave_block_list_dates", 
-   "fieldtype": "Table", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Leave Block List Dates", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Leave Block List Date", 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "description": "Allow the following users to approve Leave Applications for block days.", 
-   "fieldname": "allow_list", 
-   "fieldtype": "Section Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Allow Users", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "leave_block_list_allowed", 
-   "fieldtype": "Table", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Leave Block List Allowed", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Leave Block List Allow", 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }
- ], 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "icon": "fa fa-calendar", 
- "idx": 1, 
- "image_view": 0, 
- "in_create": 0, 
-
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 0, 
- "max_attachments": 0, 
- "modified": "2016-11-03 16:01:42.171113", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Leave Block List", 
- "owner": "Administrator", 
- "permissions": [
-  {
-   "amend": 0, 
-   "apply_user_permissions": 0, 
-   "cancel": 0, 
-   "create": 1, 
-   "delete": 0, 
-   "email": 1, 
-   "export": 0, 
-   "if_owner": 0, 
-   "import": 0, 
-   "is_custom": 0, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 0, 
-   "role": "HR User", 
-   "set_user_permissions": 0, 
-   "share": 1, 
-   "submit": 0, 
-   "write": 1
-  }
- ], 
- "quick_entry": 0, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "sort_order": "ASC", 
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_block_list/leave_block_list.py b/erpnext/hr/doctype/leave_block_list/leave_block_list.py
deleted file mode 100644
index a57ba84..0000000
--- a/erpnext/hr/doctype/leave_block_list/leave_block_list.py
+++ /dev/null
@@ -1,78 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-
-
-class LeaveBlockList(Document):
-	def validate(self):
-		dates = []
-		for d in self.get("leave_block_list_dates"):
-
-			# date is not repeated
-			if d.block_date in dates:
-				frappe.msgprint(_("Date is repeated") + ":" + d.block_date, raise_exception=1)
-			dates.append(d.block_date)
-
-
-@frappe.whitelist()
-def get_applicable_block_dates(from_date, to_date, employee=None, company=None, all_lists=False):
-	block_dates = []
-	for block_list in get_applicable_block_lists(employee, company, all_lists):
-		block_dates.extend(
-			frappe.db.sql(
-				"""select block_date, reason
-			from `tabLeave Block List Date` where parent=%s
-			and block_date between %s and %s""",
-				(block_list, from_date, to_date),
-				as_dict=1,
-			)
-		)
-
-	return block_dates
-
-
-def get_applicable_block_lists(employee=None, company=None, all_lists=False):
-	block_lists = []
-
-	if not employee:
-		employee = frappe.db.get_value("Employee", {"user_id": frappe.session.user})
-		if not employee:
-			return []
-
-	if not company:
-		company = frappe.db.get_value("Employee", employee, "company")
-
-	def add_block_list(block_list):
-		if block_list:
-			if all_lists or not is_user_in_allow_list(block_list):
-				block_lists.append(block_list)
-
-	# per department
-	department = frappe.db.get_value("Employee", employee, "department")
-	if department:
-		block_list = frappe.db.get_value("Department", department, "leave_block_list")
-		add_block_list(block_list)
-
-	# global
-	for block_list in frappe.db.sql_list(
-		"""select name from `tabLeave Block List`
-		where applies_to_all_departments=1 and company=%s""",
-		company,
-	):
-		add_block_list(block_list)
-
-	return list(set(block_lists))
-
-
-def is_user_in_allow_list(block_list):
-	return frappe.session.user in frappe.db.sql_list(
-		"""select allow_user
-		from `tabLeave Block List Allow` where parent=%s""",
-		block_list,
-	)
diff --git a/erpnext/hr/doctype/leave_block_list/leave_block_list_dashboard.py b/erpnext/hr/doctype/leave_block_list/leave_block_list_dashboard.py
deleted file mode 100644
index afeb5de..0000000
--- a/erpnext/hr/doctype/leave_block_list/leave_block_list_dashboard.py
+++ /dev/null
@@ -1,2 +0,0 @@
-def get_data():
-	return {"fieldname": "leave_block_list", "transactions": [{"items": ["Department"]}]}
diff --git a/erpnext/hr/doctype/leave_block_list/test_leave_block_list.py b/erpnext/hr/doctype/leave_block_list/test_leave_block_list.py
deleted file mode 100644
index be85a35..0000000
--- a/erpnext/hr/doctype/leave_block_list/test_leave_block_list.py
+++ /dev/null
@@ -1,50 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-import unittest
-
-import frappe
-from frappe.utils import getdate
-
-from erpnext.hr.doctype.leave_block_list.leave_block_list import get_applicable_block_dates
-
-
-class TestLeaveBlockList(unittest.TestCase):
-	def tearDown(self):
-		frappe.set_user("Administrator")
-
-	def test_get_applicable_block_dates(self):
-		frappe.set_user("test@example.com")
-		frappe.db.set_value(
-			"Department", "_Test Department - _TC", "leave_block_list", "_Test Leave Block List"
-		)
-		self.assertTrue(
-			getdate("2013-01-02")
-			in [d.block_date for d in get_applicable_block_dates("2013-01-01", "2013-01-03")]
-		)
-
-	def test_get_applicable_block_dates_for_allowed_user(self):
-		frappe.set_user("test1@example.com")
-		frappe.db.set_value(
-			"Department", "_Test Department 1 - _TC", "leave_block_list", "_Test Leave Block List"
-		)
-		self.assertEqual(
-			[], [d.block_date for d in get_applicable_block_dates("2013-01-01", "2013-01-03")]
-		)
-
-	def test_get_applicable_block_dates_all_lists(self):
-		frappe.set_user("test1@example.com")
-		frappe.db.set_value(
-			"Department", "_Test Department 1 - _TC", "leave_block_list", "_Test Leave Block List"
-		)
-		self.assertTrue(
-			getdate("2013-01-02")
-			in [
-				d.block_date for d in get_applicable_block_dates("2013-01-01", "2013-01-03", all_lists=True)
-			]
-		)
-
-
-test_dependencies = ["Employee"]
-
-test_records = frappe.get_test_records("Leave Block List")
diff --git a/erpnext/hr/doctype/leave_block_list/test_records.json b/erpnext/hr/doctype/leave_block_list/test_records.json
deleted file mode 100644
index 0456511..0000000
--- a/erpnext/hr/doctype/leave_block_list/test_records.json
+++ /dev/null
@@ -1,27 +0,0 @@
-[
- {
-  "company": "_Test Company", 
-  "doctype": "Leave Block List", 
-  "leave_block_list_allowed": [
-   {
-    "allow_user": "test1@example.com", 
-    "doctype": "Leave Block List Allow", 
-    "parent": "_Test Leave Block List", 
-    "parentfield": "leave_block_list_allowed", 
-    "parenttype": "Leave Block List"
-   }
-  ], 
-  "leave_block_list_dates": [
-   {
-    "block_date": "2013-01-02", 
-    "doctype": "Leave Block List Date", 
-    "parent": "_Test Leave Block List", 
-    "parentfield": "leave_block_list_dates", 
-    "parenttype": "Leave Block List", 
-    "reason": "First work day"
-   }
-  ], 
-  "leave_block_list_name": "_Test Leave Block List", 
-  "year": "_Test Fiscal Year 2013"
- }
-]
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_block_list_allow/README.md b/erpnext/hr/doctype/leave_block_list_allow/README.md
deleted file mode 100644
index a735039..0000000
--- a/erpnext/hr/doctype/leave_block_list_allow/README.md
+++ /dev/null
@@ -1 +0,0 @@
-User allowed to approve leave on blocked date.
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_block_list_allow/__init__.py b/erpnext/hr/doctype/leave_block_list_allow/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/leave_block_list_allow/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/leave_block_list_allow/leave_block_list_allow.json b/erpnext/hr/doctype/leave_block_list_allow/leave_block_list_allow.json
deleted file mode 100644
index fe10c78..0000000
--- a/erpnext/hr/doctype/leave_block_list_allow/leave_block_list_allow.json
+++ /dev/null
@@ -1,60 +0,0 @@
-{
- "allow_copy": 0, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "beta": 0, 
- "creation": "2013-02-22 01:27:47", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "editable_grid": 1, 
- "fields": [
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "allow_user", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 1, 
-   "label": "Allow User", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "User", 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "print_width": "200px", 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0, 
-   "width": "200px"
-  }
- ], 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 1, 
- "image_view": 0, 
- "in_create": 0, 
-
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 1, 
- "max_attachments": 0, 
- "modified": "2016-07-11 03:28:02.032277", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Leave Block List Allow", 
- "owner": "Administrator", 
- "permissions": [], 
- "quick_entry": 0, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_block_list_allow/leave_block_list_allow.py b/erpnext/hr/doctype/leave_block_list_allow/leave_block_list_allow.py
deleted file mode 100644
index 50dc125..0000000
--- a/erpnext/hr/doctype/leave_block_list_allow/leave_block_list_allow.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-# For license information, please see license.txt
-
-
-from frappe.model.document import Document
-
-
-class LeaveBlockListAllow(Document):
-	pass
diff --git a/erpnext/hr/doctype/leave_block_list_date/README.md b/erpnext/hr/doctype/leave_block_list_date/README.md
deleted file mode 100644
index 658f359..0000000
--- a/erpnext/hr/doctype/leave_block_list_date/README.md
+++ /dev/null
@@ -1 +0,0 @@
-Date blocked on parent Leave Block List.
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_block_list_date/__init__.py b/erpnext/hr/doctype/leave_block_list_date/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/leave_block_list_date/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/leave_block_list_date/leave_block_list_date.json b/erpnext/hr/doctype/leave_block_list_date/leave_block_list_date.json
deleted file mode 100644
index dbb9039..0000000
--- a/erpnext/hr/doctype/leave_block_list_date/leave_block_list_date.json
+++ /dev/null
@@ -1,85 +0,0 @@
-{
- "allow_copy": 0, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "beta": 0, 
- "creation": "2013-02-22 01:27:47", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "editable_grid": 1, 
- "fields": [
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "block_date", 
-   "fieldtype": "Date", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 1, 
-   "label": "Block Date", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "print_width": "200px", 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0, 
-   "width": "200px"
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "reason", 
-   "fieldtype": "Text", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 1, 
-   "label": "Reason", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "print_width": "200px", 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0, 
-   "width": "200px"
-  }
- ], 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 1, 
- "image_view": 0, 
- "in_create": 0, 
-
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 1, 
- "max_attachments": 0, 
- "modified": "2016-07-11 03:28:02.099296", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Leave Block List Date", 
- "owner": "Administrator", 
- "permissions": [], 
- "quick_entry": 0, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_block_list_date/leave_block_list_date.py b/erpnext/hr/doctype/leave_block_list_date/leave_block_list_date.py
deleted file mode 100644
index 36550cc..0000000
--- a/erpnext/hr/doctype/leave_block_list_date/leave_block_list_date.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-# For license information, please see license.txt
-
-
-from frappe.model.document import Document
-
-
-class LeaveBlockListDate(Document):
-	pass
diff --git a/erpnext/hr/doctype/leave_control_panel/README.md b/erpnext/hr/doctype/leave_control_panel/README.md
deleted file mode 100644
index f7d3357..0000000
--- a/erpnext/hr/doctype/leave_control_panel/README.md
+++ /dev/null
@@ -1 +0,0 @@
-Tool to allocate leaves in bulk.
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_control_panel/__init__.py b/erpnext/hr/doctype/leave_control_panel/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/leave_control_panel/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/leave_control_panel/leave_control_panel.js b/erpnext/hr/doctype/leave_control_panel/leave_control_panel.js
deleted file mode 100644
index 4a45080..0000000
--- a/erpnext/hr/doctype/leave_control_panel/leave_control_panel.js
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-// License: GNU General Public License v3. See license.txt
-
-frappe.ui.form.on("Leave Control Panel", {
-	onload: function(frm) {
-		if (!frm.doc.from_date) {
-			frm.set_value('from_date', frappe.datetime.get_today());
-		}
-	},
-	refresh: function(frm) {
-		frm.disable_save();
-	},
-	company: function(frm) {
-		if(frm.doc.company) {
-			frm.set_query("department", function() {
-				return {
-					"filters": {
-						"company": frm.doc.company,
-					}
-				};
-			});
-		}
-	}
-});
diff --git a/erpnext/hr/doctype/leave_control_panel/leave_control_panel.json b/erpnext/hr/doctype/leave_control_panel/leave_control_panel.json
deleted file mode 100644
index d9c592a..0000000
--- a/erpnext/hr/doctype/leave_control_panel/leave_control_panel.json
+++ /dev/null
@@ -1,158 +0,0 @@
-{
- "actions": [],
- "allow_copy": 1,
- "creation": "2013-01-10 16:34:15",
- "doctype": "DocType",
- "engine": "InnoDB",
- "field_order": [
-  "select_employees_section",
-  "company",
-  "employment_type",
-  "branch",
-  "department",
-  "column_break1",
-  "designation",
-  "employee_grade",
-  "employee",
-  "allocate_leaves_section",
-  "from_date",
-  "to_date",
-  "carry_forward",
-  "no_of_days",
-  "allocate",
-  "column_break_16",
-  "leave_policy",
-  "leave_type"
- ],
- "fields": [
-  {
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "label": "Company",
-   "options": "Company"
-  },
-  {
-   "fieldname": "employment_type",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Employment Type (optional)",
-   "options": "Employment Type"
-  },
-  {
-   "fieldname": "branch",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Branch (optional)",
-   "options": "Branch"
-  },
-  {
-   "fieldname": "department",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Department (optional)",
-   "options": "Department"
-  },
-  {
-   "fieldname": "designation",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Designation (optional)",
-   "options": "Designation"
-  },
-  {
-   "fieldname": "employee_grade",
-   "fieldtype": "Link",
-   "label": "Employee Grade (optional)",
-   "options": "Employee Grade"
-  },
-  {
-   "fieldname": "employee",
-   "fieldtype": "Link",
-   "label": "Employee (optional)",
-   "options": "Employee"
-  },
-  {
-   "fieldname": "column_break1",
-   "fieldtype": "Column Break",
-   "width": "50%"
-  },
-  {
-   "fieldname": "from_date",
-   "fieldtype": "Date",
-   "label": "From Date",
-   "reqd": 1
-  },
-  {
-   "fieldname": "to_date",
-   "fieldtype": "Date",
-   "label": "To Date",
-   "reqd": 1
-  },
-  {
-   "fieldname": "leave_policy",
-   "fieldtype": "Link",
-   "label": "Leave Policy",
-   "options": "Leave Policy"
-  },
-  {
-   "fieldname": "leave_type",
-   "fieldtype": "Link",
-   "label": "Leave Type",
-   "options": "Leave Type"
-  },
-  {
-   "default": "0",
-   "description": "Please select Carry Forward if you also want to include previous fiscal year's balance leaves to this fiscal year",
-   "fieldname": "carry_forward",
-   "fieldtype": "Check",
-   "label": "Carry Forward"
-  },
-  {
-   "fieldname": "no_of_days",
-   "fieldtype": "Float",
-   "label": "New Leaves Allocated (In Days)",
-   "reqd": 1
-  },
-  {
-   "fieldname": "allocate",
-   "fieldtype": "Button",
-   "label": "Allocate",
-   "options": "allocate_leave"
-  },
-  {
-   "fieldname": "select_employees_section",
-   "fieldtype": "Section Break",
-   "label": "Select Employees"
-  },
-  {
-   "fieldname": "allocate_leaves_section",
-   "fieldtype": "Section Break",
-   "label": "Allocate Leaves"
-  },
-  {
-   "fieldname": "column_break_16",
-   "fieldtype": "Column Break"
-  }
- ],
- "hide_toolbar": 1,
- "icon": "fa fa-cog",
- "idx": 1,
- "issingle": 1,
- "links": [],
- "modified": "2019-12-12 18:51:41.573349",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Leave Control Panel",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "read": 1,
-   "role": "HR User",
-   "write": 1
-  }
- ],
- "read_only": 1,
- "sort_field": "modified",
- "sort_order": "DESC"
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py b/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py
deleted file mode 100644
index c57f8ae..0000000
--- a/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py
+++ /dev/null
@@ -1,61 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-
-import frappe
-from frappe import _, msgprint
-from frappe.model.document import Document
-from frappe.utils import cint, comma_and, cstr, flt
-
-
-class LeaveControlPanel(Document):
-	def get_employees(self):
-		conditions, values = [], []
-		for field in ["company", "employment_type", "branch", "designation", "department"]:
-			if self.get(field):
-				conditions.append("{0}=%s".format(field))
-				values.append(self.get(field))
-
-		condition_str = " and " + " and ".join(conditions) if len(conditions) else ""
-
-		e = frappe.db.sql(
-			"select name from tabEmployee where status='Active' {condition}".format(
-				condition=condition_str
-			),
-			tuple(values),
-		)
-
-		return e
-
-	def validate_values(self):
-		for f in ["from_date", "to_date", "leave_type", "no_of_days"]:
-			if not self.get(f):
-				frappe.throw(_("{0} is required").format(self.meta.get_label(f)))
-		self.validate_from_to_dates("from_date", "to_date")
-
-	@frappe.whitelist()
-	def allocate_leave(self):
-		self.validate_values()
-		leave_allocated_for = []
-		employees = self.get_employees()
-		if not employees:
-			frappe.throw(_("No employee found"))
-
-		for d in self.get_employees():
-			try:
-				la = frappe.new_doc("Leave Allocation")
-				la.set("__islocal", 1)
-				la.employee = cstr(d[0])
-				la.employee_name = frappe.db.get_value("Employee", cstr(d[0]), "employee_name")
-				la.leave_type = self.leave_type
-				la.from_date = self.from_date
-				la.to_date = self.to_date
-				la.carry_forward = cint(self.carry_forward)
-				la.new_leaves_allocated = flt(self.no_of_days)
-				la.docstatus = 1
-				la.save()
-				leave_allocated_for.append(d[0])
-			except Exception:
-				pass
-		if leave_allocated_for:
-			msgprint(_("Leaves Allocated Successfully for {0}").format(comma_and(leave_allocated_for)))
diff --git a/erpnext/hr/doctype/leave_control_panel/test_leave_control_panel.py b/erpnext/hr/doctype/leave_control_panel/test_leave_control_panel.py
deleted file mode 100644
index d5a9bc0..0000000
--- a/erpnext/hr/doctype/leave_control_panel/test_leave_control_panel.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-
-class TestLeaveControlPanel(unittest.TestCase):
-	pass
diff --git a/erpnext/hr/doctype/leave_encashment/__init__.py b/erpnext/hr/doctype/leave_encashment/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/leave_encashment/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/leave_encashment/leave_encashment.js b/erpnext/hr/doctype/leave_encashment/leave_encashment.js
deleted file mode 100644
index 81936a4..0000000
--- a/erpnext/hr/doctype/leave_encashment/leave_encashment.js
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Leave Encashment', {
-	onload: function(frm) {
-		// Ignore cancellation of doctype on cancel all.
-		frm.ignore_doctypes_on_cancel_all = ["Leave Ledger Entry"];
-	},
-	setup: function(frm) {
-		frm.set_query("leave_type", function() {
-			return {
-				filters: {
-					allow_encashment: 1
-				}
-			}
-		})
-	},
-	refresh: function(frm) {
-		cur_frm.set_intro("");
-		if(frm.doc.__islocal && !in_list(frappe.user_roles, "Employee")) {
-			frm.set_intro(__("Fill the form and save it"));
-		}
-	},
-	employee: function(frm) {
-		if (frm.doc.employee) {
-			frappe.run_serially([
-				() => 	frm.trigger('get_employee_currency'),
-				() => 	frm.trigger('get_leave_details_for_encashment')
-			]);
-		}
-	},
-	leave_type: function(frm) {
-		frm.trigger("get_leave_details_for_encashment");
-	},
-	encashment_date: function(frm) {
-		frm.trigger("get_leave_details_for_encashment");
-	},
-	get_leave_details_for_encashment: function(frm) {
-		if(frm.doc.docstatus==0 && frm.doc.employee && frm.doc.leave_type) {
-			return frappe.call({
-				method: "get_leave_details_for_encashment",
-				doc: frm.doc,
-				callback: function(r) {
-					frm.refresh_fields();
-				}
-			});
-		}
-	},
-
-	get_employee_currency: function(frm) {
-		frappe.call({
-			method: "erpnext.payroll.doctype.salary_structure_assignment.salary_structure_assignment.get_employee_currency",
-			args: {
-				employee: frm.doc.employee,
-			},
-			callback: function(r) {
-				if (r.message) {
-					frm.set_value('currency', r.message);
-					frm.refresh_fields();
-				}
-			}
-		});
-	},
-});
diff --git a/erpnext/hr/doctype/leave_encashment/leave_encashment.json b/erpnext/hr/doctype/leave_encashment/leave_encashment.json
deleted file mode 100644
index cc4e53e..0000000
--- a/erpnext/hr/doctype/leave_encashment/leave_encashment.json
+++ /dev/null
@@ -1,228 +0,0 @@
-{
- "actions": [],
- "allow_import": 1,
- "allow_rename": 1,
- "autoname": "HR-ENC-.YYYY.-.#####",
- "creation": "2018-04-13 15:31:51.197046",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "leave_period",
-  "employee",
-  "employee_name",
-  "department",
-  "company",
-  "column_break_4",
-  "leave_type",
-  "leave_allocation",
-  "leave_balance",
-  "encashable_days",
-  "amended_from",
-  "payroll",
-  "encashment_date",
-  "additional_salary",
-  "column_break_14",
-  "currency",
-  "encashment_amount"
- ],
- "fields": [
-  {
-   "fieldname": "leave_period",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Leave Period",
-   "options": "Leave Period",
-   "reqd": 1
-  },
-  {
-   "fieldname": "employee",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Employee",
-   "options": "Employee",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "employee.employee_name",
-   "fieldname": "employee_name",
-   "fieldtype": "Data",
-   "label": "Employee Name",
-   "read_only": 1
-  },
-  {
-   "fetch_from": "employee.department",
-   "fieldname": "department",
-   "fieldtype": "Link",
-   "label": "Department",
-   "options": "Department",
-   "read_only": 1
-  },
-  {
-   "fieldname": "leave_type",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Leave Type",
-   "options": "Leave Type",
-   "reqd": 1
-  },
-  {
-   "fieldname": "column_break_4",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "leave_allocation",
-   "fieldtype": "Link",
-   "label": "Leave Allocation",
-   "no_copy": 1,
-   "options": "Leave Allocation",
-   "read_only": 1
-  },
-  {
-   "fieldname": "leave_balance",
-   "fieldtype": "Float",
-   "label": "Leave Balance",
-   "no_copy": 1,
-   "read_only": 1
-  },
-  {
-   "fieldname": "encashable_days",
-   "fieldtype": "Float",
-   "label": "Encashable days",
-   "no_copy": 1,
-   "read_only": 1
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "Leave Encashment",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "fieldname": "payroll",
-   "fieldtype": "Section Break",
-   "label": "Payroll"
-  },
-  {
-   "fieldname": "encashment_amount",
-   "fieldtype": "Currency",
-   "in_list_view": 1,
-   "label": "Encashment Amount",
-   "no_copy": 1,
-   "options": "currency",
-   "read_only": 1
-  },
-  {
-   "default": "Today",
-   "fieldname": "encashment_date",
-   "fieldtype": "Date",
-   "label": "Encashment Date"
-  },
-  {
-   "fieldname": "additional_salary",
-   "fieldtype": "Link",
-   "label": "Additional Salary",
-   "no_copy": 1,
-   "options": "Additional Salary",
-   "read_only": 1
-  },
-  {
-   "depends_on": "eval:(doc.docstatus==1 || doc.employee)",
-   "fieldname": "currency",
-   "fieldtype": "Link",
-   "label": "Currency",
-   "options": "Currency",
-   "print_hide": 1,
-   "read_only": 1,
-   "reqd": 1
-  },
-  {
-   "fieldname": "column_break_14",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fetch_from": "employee.company",
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "label": "Company",
-   "options": "Company",
-   "reqd": 1
-  }
- ],
- "is_submittable": 1,
- "links": [],
- "modified": "2022-01-18 19:16:52.414356",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Leave Encashment",
- "naming_rule": "Expression (old style)",
- "owner": "Administrator",
- "permissions": [
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "Employee",
-   "share": 1,
-   "write": 1
-  }
- ],
- "search_fields": "employee,employee_name",
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": [],
- "title_field": "employee_name",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_encashment/leave_encashment.py b/erpnext/hr/doctype/leave_encashment/leave_encashment.py
deleted file mode 100644
index 7c0f0db..0000000
--- a/erpnext/hr/doctype/leave_encashment/leave_encashment.py
+++ /dev/null
@@ -1,190 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.utils import getdate, nowdate
-
-from erpnext.hr.doctype.leave_application.leave_application import get_leaves_for_period
-from erpnext.hr.doctype.leave_ledger_entry.leave_ledger_entry import create_leave_ledger_entry
-from erpnext.hr.utils import set_employee_name, validate_active_employee
-from erpnext.payroll.doctype.salary_structure_assignment.salary_structure_assignment import (
-	get_assigned_salary_structure,
-)
-
-
-class LeaveEncashment(Document):
-	def validate(self):
-		set_employee_name(self)
-		validate_active_employee(self.employee)
-		self.get_leave_details_for_encashment()
-		self.validate_salary_structure()
-
-		if not self.encashment_date:
-			self.encashment_date = getdate(nowdate())
-
-	def validate_salary_structure(self):
-		if not frappe.db.exists("Salary Structure Assignment", {"employee": self.employee}):
-			frappe.throw(
-				_("There is no Salary Structure assigned to {0}. First assign a Salary Stucture.").format(
-					self.employee
-				)
-			)
-
-	def before_submit(self):
-		if self.encashment_amount <= 0:
-			frappe.throw(_("You can only submit Leave Encashment for a valid encashment amount"))
-
-	def on_submit(self):
-		if not self.leave_allocation:
-			self.leave_allocation = self.get_leave_allocation().get("name")
-		additional_salary = frappe.new_doc("Additional Salary")
-		additional_salary.company = frappe.get_value("Employee", self.employee, "company")
-		additional_salary.employee = self.employee
-		additional_salary.currency = self.currency
-		earning_component = frappe.get_value("Leave Type", self.leave_type, "earning_component")
-		if not earning_component:
-			frappe.throw(_("Please set Earning Component for Leave type: {0}.").format(self.leave_type))
-		additional_salary.salary_component = earning_component
-		additional_salary.payroll_date = self.encashment_date
-		additional_salary.amount = self.encashment_amount
-		additional_salary.ref_doctype = self.doctype
-		additional_salary.ref_docname = self.name
-		additional_salary.submit()
-
-		# Set encashed leaves in Allocation
-		frappe.db.set_value(
-			"Leave Allocation",
-			self.leave_allocation,
-			"total_leaves_encashed",
-			frappe.db.get_value("Leave Allocation", self.leave_allocation, "total_leaves_encashed")
-			+ self.encashable_days,
-		)
-
-		self.create_leave_ledger_entry()
-
-	def on_cancel(self):
-		if self.additional_salary:
-			frappe.get_doc("Additional Salary", self.additional_salary).cancel()
-			self.db_set("additional_salary", "")
-
-		if self.leave_allocation:
-			frappe.db.set_value(
-				"Leave Allocation",
-				self.leave_allocation,
-				"total_leaves_encashed",
-				frappe.db.get_value("Leave Allocation", self.leave_allocation, "total_leaves_encashed")
-				- self.encashable_days,
-			)
-		self.create_leave_ledger_entry(submit=False)
-
-	@frappe.whitelist()
-	def get_leave_details_for_encashment(self):
-		salary_structure = get_assigned_salary_structure(
-			self.employee, self.encashment_date or getdate(nowdate())
-		)
-		if not salary_structure:
-			frappe.throw(
-				_("No Salary Structure assigned for Employee {0} on given date {1}").format(
-					self.employee, self.encashment_date
-				)
-			)
-
-		if not frappe.db.get_value("Leave Type", self.leave_type, "allow_encashment"):
-			frappe.throw(_("Leave Type {0} is not encashable").format(self.leave_type))
-
-		allocation = self.get_leave_allocation()
-
-		if not allocation:
-			frappe.throw(
-				_("No Leaves Allocated to Employee: {0} for Leave Type: {1}").format(
-					self.employee, self.leave_type
-				)
-			)
-
-		self.leave_balance = (
-			allocation.total_leaves_allocated
-			- allocation.carry_forwarded_leaves_count
-			# adding this because the function returns a -ve number
-			+ get_leaves_for_period(
-				self.employee, self.leave_type, allocation.from_date, self.encashment_date
-			)
-		)
-
-		encashable_days = self.leave_balance - frappe.db.get_value(
-			"Leave Type", self.leave_type, "encashment_threshold_days"
-		)
-		self.encashable_days = encashable_days if encashable_days > 0 else 0
-
-		per_day_encashment = frappe.db.get_value(
-			"Salary Structure", salary_structure, "leave_encashment_amount_per_day"
-		)
-		self.encashment_amount = (
-			self.encashable_days * per_day_encashment if per_day_encashment > 0 else 0
-		)
-
-		self.leave_allocation = allocation.name
-		return True
-
-	def get_leave_allocation(self):
-		date = self.encashment_date or getdate()
-
-		LeaveAllocation = frappe.qb.DocType("Leave Allocation")
-		leave_allocation = (
-			frappe.qb.from_(LeaveAllocation)
-			.select(
-				LeaveAllocation.name,
-				LeaveAllocation.from_date,
-				LeaveAllocation.to_date,
-				LeaveAllocation.total_leaves_allocated,
-				LeaveAllocation.carry_forwarded_leaves_count,
-			)
-			.where(
-				((LeaveAllocation.from_date <= date) & (date <= LeaveAllocation.to_date))
-				& (LeaveAllocation.docstatus == 1)
-				& (LeaveAllocation.leave_type == self.leave_type)
-				& (LeaveAllocation.employee == self.employee)
-			)
-		).run(as_dict=True)
-
-		return leave_allocation[0] if leave_allocation else None
-
-	def create_leave_ledger_entry(self, submit=True):
-		args = frappe._dict(
-			leaves=self.encashable_days * -1,
-			from_date=self.encashment_date,
-			to_date=self.encashment_date,
-			is_carry_forward=0,
-		)
-		create_leave_ledger_entry(self, args, submit)
-
-		# create reverse entry for expired leaves
-		leave_allocation = self.get_leave_allocation()
-		if not leave_allocation:
-			return
-
-		to_date = leave_allocation.get("to_date")
-		if to_date < getdate(nowdate()):
-			args = frappe._dict(
-				leaves=self.encashable_days, from_date=to_date, to_date=to_date, is_carry_forward=0
-			)
-			create_leave_ledger_entry(self, args, submit)
-
-
-def create_leave_encashment(leave_allocation):
-	"""Creates leave encashment for the given allocations"""
-	for allocation in leave_allocation:
-		if not get_assigned_salary_structure(allocation.employee, allocation.to_date):
-			continue
-		leave_encashment = frappe.get_doc(
-			dict(
-				doctype="Leave Encashment",
-				leave_period=allocation.leave_period,
-				employee=allocation.employee,
-				leave_type=allocation.leave_type,
-				encashment_date=allocation.to_date,
-			)
-		)
-		leave_encashment.insert(ignore_permissions=True)
diff --git a/erpnext/hr/doctype/leave_encashment/test_leave_encashment.py b/erpnext/hr/doctype/leave_encashment/test_leave_encashment.py
deleted file mode 100644
index d06b6a3..0000000
--- a/erpnext/hr/doctype/leave_encashment/test_leave_encashment.py
+++ /dev/null
@@ -1,159 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-import frappe
-from frappe.tests.utils import FrappeTestCase
-from frappe.utils import add_days, get_year_ending, get_year_start, getdate
-
-from erpnext.hr.doctype.employee.test_employee import make_employee
-from erpnext.hr.doctype.holiday_list.test_holiday_list import set_holiday_list
-from erpnext.hr.doctype.leave_period.test_leave_period import create_leave_period
-from erpnext.hr.doctype.leave_policy.test_leave_policy import create_leave_policy
-from erpnext.hr.doctype.leave_policy_assignment.leave_policy_assignment import (
-	create_assignment_for_multiple_employees,
-)
-from erpnext.payroll.doctype.salary_slip.test_salary_slip import (
-	make_holiday_list,
-	make_leave_application,
-)
-from erpnext.payroll.doctype.salary_structure.test_salary_structure import make_salary_structure
-
-test_records = frappe.get_test_records("Leave Type")
-
-
-class TestLeaveEncashment(FrappeTestCase):
-	def setUp(self):
-		frappe.db.delete("Leave Period")
-		frappe.db.delete("Leave Policy Assignment")
-		frappe.db.delete("Leave Allocation")
-		frappe.db.delete("Leave Ledger Entry")
-		frappe.db.delete("Additional Salary")
-		frappe.db.delete("Leave Encashment")
-
-		if not frappe.db.exists("Leave Type", "_Test Leave Type Encashment"):
-			frappe.get_doc(test_records[2]).insert()
-
-		date = getdate()
-		year_start = getdate(get_year_start(date))
-		year_end = getdate(get_year_ending(date))
-
-		make_holiday_list("_Test Leave Encashment", year_start, year_end)
-
-		# create the leave policy
-		leave_policy = create_leave_policy(
-			leave_type="_Test Leave Type Encashment", annual_allocation=10
-		)
-		leave_policy.submit()
-
-		# create employee, salary structure and assignment
-		self.employee = make_employee("test_employee_encashment@example.com", company="_Test Company")
-
-		self.leave_period = create_leave_period(year_start, year_end, "_Test Company")
-
-		data = {
-			"assignment_based_on": "Leave Period",
-			"leave_policy": leave_policy.name,
-			"leave_period": self.leave_period.name,
-		}
-
-		leave_policy_assignments = create_assignment_for_multiple_employees(
-			[self.employee], frappe._dict(data)
-		)
-
-		salary_structure = make_salary_structure(
-			"Salary Structure for Encashment",
-			"Monthly",
-			self.employee,
-			other_details={"leave_encashment_amount_per_day": 50},
-		)
-
-	@set_holiday_list("_Test Leave Encashment", "_Test Company")
-	def test_leave_balance_value_and_amount(self):
-		leave_encashment = frappe.get_doc(
-			dict(
-				doctype="Leave Encashment",
-				employee=self.employee,
-				leave_type="_Test Leave Type Encashment",
-				leave_period=self.leave_period.name,
-				encashment_date=self.leave_period.to_date,
-				currency="INR",
-			)
-		).insert()
-
-		self.assertEqual(leave_encashment.leave_balance, 10)
-		self.assertEqual(leave_encashment.encashable_days, 5)
-		self.assertEqual(leave_encashment.encashment_amount, 250)
-
-		leave_encashment.submit()
-
-		# assert links
-		add_sal = frappe.get_all("Additional Salary", filters={"ref_docname": leave_encashment.name})[0]
-		self.assertTrue(add_sal)
-
-	@set_holiday_list("_Test Leave Encashment", "_Test Company")
-	def test_leave_balance_value_with_leaves_and_amount(self):
-		date = self.leave_period.from_date
-		leave_application = make_leave_application(
-			self.employee, date, add_days(date, 3), "_Test Leave Type Encashment"
-		)
-		leave_application.reload()
-
-		leave_encashment = frappe.get_doc(
-			dict(
-				doctype="Leave Encashment",
-				employee=self.employee,
-				leave_type="_Test Leave Type Encashment",
-				leave_period=self.leave_period.name,
-				encashment_date=self.leave_period.to_date,
-				currency="INR",
-			)
-		).insert()
-
-		self.assertEqual(leave_encashment.leave_balance, 10 - leave_application.total_leave_days)
-		# encashable days threshold is 5, total leaves are 6, so encashable days = 6-5 = 1
-		# with charge of 50 per day
-		self.assertEqual(leave_encashment.encashable_days, leave_encashment.leave_balance - 5)
-		self.assertEqual(leave_encashment.encashment_amount, 50)
-
-		leave_encashment.submit()
-
-		# assert links
-		add_sal = frappe.get_all("Additional Salary", filters={"ref_docname": leave_encashment.name})[0]
-		self.assertTrue(add_sal)
-
-	@set_holiday_list("_Test Leave Encashment", "_Test Company")
-	def test_creation_of_leave_ledger_entry_on_submit(self):
-		leave_encashment = frappe.get_doc(
-			dict(
-				doctype="Leave Encashment",
-				employee=self.employee,
-				leave_type="_Test Leave Type Encashment",
-				leave_period=self.leave_period.name,
-				encashment_date=self.leave_period.to_date,
-				currency="INR",
-			)
-		).insert()
-
-		leave_encashment.submit()
-
-		leave_ledger_entry = frappe.get_all(
-			"Leave Ledger Entry", fields="*", filters=dict(transaction_name=leave_encashment.name)
-		)
-
-		self.assertEqual(len(leave_ledger_entry), 1)
-		self.assertEqual(leave_ledger_entry[0].employee, leave_encashment.employee)
-		self.assertEqual(leave_ledger_entry[0].leave_type, leave_encashment.leave_type)
-		self.assertEqual(leave_ledger_entry[0].leaves, leave_encashment.encashable_days * -1)
-
-		# check if leave ledger entry is deleted on cancellation
-
-		frappe.db.sql(
-			"Delete from `tabAdditional Salary` WHERE ref_docname = %s", (leave_encashment.name)
-		)
-
-		leave_encashment.cancel()
-		self.assertFalse(
-			frappe.db.exists("Leave Ledger Entry", {"transaction_name": leave_encashment.name})
-		)
diff --git a/erpnext/hr/doctype/leave_ledger_entry/__init__.py b/erpnext/hr/doctype/leave_ledger_entry/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/leave_ledger_entry/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/leave_ledger_entry/leave_ledger_entry.js b/erpnext/hr/doctype/leave_ledger_entry/leave_ledger_entry.js
deleted file mode 100644
index c68d518..0000000
--- a/erpnext/hr/doctype/leave_ledger_entry/leave_ledger_entry.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Leave Ledger Entry', {
-	// refresh: function(frm) {
-
-	// }
-});
diff --git a/erpnext/hr/doctype/leave_ledger_entry/leave_ledger_entry.json b/erpnext/hr/doctype/leave_ledger_entry/leave_ledger_entry.json
deleted file mode 100644
index d74760a..0000000
--- a/erpnext/hr/doctype/leave_ledger_entry/leave_ledger_entry.json
+++ /dev/null
@@ -1,190 +0,0 @@
-{
- "actions": [],
- "creation": "2019-05-09 15:47:39.760406",
- "doctype": "DocType",
- "engine": "InnoDB",
- "field_order": [
-  "employee",
-  "employee_name",
-  "leave_type",
-  "transaction_type",
-  "transaction_name",
-  "company",
-  "leaves",
-  "column_break_7",
-  "from_date",
-  "to_date",
-  "holiday_list",
-  "is_carry_forward",
-  "is_expired",
-  "is_lwp",
-  "amended_from"
- ],
- "fields": [
-  {
-   "fieldname": "employee",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Employee",
-   "options": "Employee"
-  },
-  {
-   "fetch_from": "employee.employee_name",
-   "fieldname": "employee_name",
-   "fieldtype": "Data",
-   "label": "Employee Name"
-  },
-  {
-   "fieldname": "leave_type",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Leave Type",
-   "options": "Leave Type"
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "Leave Ledger Entry",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "fieldname": "transaction_type",
-   "fieldtype": "Link",
-   "in_standard_filter": 1,
-   "label": "Transaction Type",
-   "options": "DocType"
-  },
-  {
-   "fieldname": "transaction_name",
-   "fieldtype": "Dynamic Link",
-   "label": "Transaction Name",
-   "options": "transaction_type"
-  },
-  {
-   "fieldname": "leaves",
-   "fieldtype": "Float",
-   "in_list_view": 1,
-   "label": "Leaves"
-  },
-  {
-   "fieldname": "from_date",
-   "fieldtype": "Date",
-   "label": "From Date"
-  },
-  {
-   "fieldname": "to_date",
-   "fieldtype": "Date",
-   "label": "To Date"
-  },
-  {
-   "default": "0",
-   "fieldname": "is_carry_forward",
-   "fieldtype": "Check",
-   "label": "Is Carry Forward"
-  },
-  {
-   "default": "0",
-   "fieldname": "is_expired",
-   "fieldtype": "Check",
-   "label": "Is Expired"
-  },
-  {
-   "fieldname": "column_break_7",
-   "fieldtype": "Column Break"
-  },
-  {
-   "default": "0",
-   "fieldname": "is_lwp",
-   "fieldtype": "Check",
-   "label": "Is Leave Without Pay"
-  },
-  {
-   "fieldname": "holiday_list",
-   "fieldtype": "Link",
-   "label": "Holiday List",
-   "options": "Holiday List"
-  },
-  {
-   "fetch_from": "employee.company",
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "label": "Company",
-   "options": "Company",
-   "read_only": 1,
-   "reqd": 1
-  }
- ],
- "in_create": 1,
- "index_web_pages_for_search": 1,
- "is_submittable": 1,
- "links": [],
- "modified": "2021-01-04 18:47:45.146652",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Leave Ledger Entry",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "if_owner": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "All",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  }
- ],
- "sort_field": "modified",
- "sort_order": "ASC",
- "title_field": "employee"
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_ledger_entry/leave_ledger_entry.py b/erpnext/hr/doctype/leave_ledger_entry/leave_ledger_entry.py
deleted file mode 100644
index fed9f77..0000000
--- a/erpnext/hr/doctype/leave_ledger_entry/leave_ledger_entry.py
+++ /dev/null
@@ -1,227 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.utils import DATE_FORMAT, flt, getdate, today
-
-
-class LeaveLedgerEntry(Document):
-	def validate(self):
-		if getdate(self.from_date) > getdate(self.to_date):
-			frappe.throw(_("To date needs to be before from date"))
-
-	def on_cancel(self):
-		# allow cancellation of expiry leaves
-		if self.is_expired:
-			frappe.db.set_value("Leave Allocation", self.transaction_name, "expired", 0)
-		else:
-			frappe.throw(_("Only expired allocation can be cancelled"))
-
-
-def validate_leave_allocation_against_leave_application(ledger):
-	"""Checks that leave allocation has no leave application against it"""
-	leave_application_records = frappe.db.sql_list(
-		"""
-		SELECT transaction_name
-		FROM `tabLeave Ledger Entry`
-		WHERE
-			employee=%s
-			AND leave_type=%s
-			AND transaction_type='Leave Application'
-			AND from_date>=%s
-			AND to_date<=%s
-	""",
-		(ledger.employee, ledger.leave_type, ledger.from_date, ledger.to_date),
-	)
-
-	if leave_application_records:
-		frappe.throw(
-			_("Leave allocation {0} is linked with the Leave Application {1}").format(
-				ledger.transaction_name, ", ".join(leave_application_records)
-			)
-		)
-
-
-def create_leave_ledger_entry(ref_doc, args, submit=True):
-	ledger = frappe._dict(
-		doctype="Leave Ledger Entry",
-		employee=ref_doc.employee,
-		employee_name=ref_doc.employee_name,
-		leave_type=ref_doc.leave_type,
-		transaction_type=ref_doc.doctype,
-		transaction_name=ref_doc.name,
-		is_carry_forward=0,
-		is_expired=0,
-		is_lwp=0,
-	)
-	ledger.update(args)
-
-	if submit:
-		doc = frappe.get_doc(ledger)
-		doc.flags.ignore_permissions = 1
-		doc.submit()
-	else:
-		delete_ledger_entry(ledger)
-
-
-def delete_ledger_entry(ledger):
-	"""Delete ledger entry on cancel of leave application/allocation/encashment"""
-	if ledger.transaction_type == "Leave Allocation":
-		validate_leave_allocation_against_leave_application(ledger)
-
-	expired_entry = get_previous_expiry_ledger_entry(ledger)
-	frappe.db.sql(
-		"""DELETE
-		FROM `tabLeave Ledger Entry`
-		WHERE
-			`transaction_name`=%s
-			OR `name`=%s""",
-		(ledger.transaction_name, expired_entry),
-	)
-
-
-def get_previous_expiry_ledger_entry(ledger):
-	"""Returns the expiry ledger entry having same creation date as the ledger entry to be cancelled"""
-	creation_date = frappe.db.get_value(
-		"Leave Ledger Entry",
-		filters={
-			"transaction_name": ledger.transaction_name,
-			"is_expired": 0,
-			"transaction_type": "Leave Allocation",
-		},
-		fieldname=["creation"],
-	)
-
-	creation_date = creation_date.strftime(DATE_FORMAT) if creation_date else ""
-
-	return frappe.db.get_value(
-		"Leave Ledger Entry",
-		filters={
-			"creation": ("like", creation_date + "%"),
-			"employee": ledger.employee,
-			"leave_type": ledger.leave_type,
-			"is_expired": 1,
-			"docstatus": 1,
-			"is_carry_forward": 0,
-		},
-		fieldname=["name"],
-	)
-
-
-def process_expired_allocation():
-	"""Check if a carry forwarded allocation has expired and create a expiry ledger entry
-	Case 1: carry forwarded expiry period is set for the leave type,
-	        create a separate leave expiry entry against each entry of carry forwarded and non carry forwarded leaves
-	Case 2: leave type has no specific expiry period for carry forwarded leaves
-	        and there is no carry forwarded leave allocation, create a single expiry against the remaining leaves.
-	"""
-
-	# fetch leave type records that has carry forwarded leaves expiry
-	leave_type_records = frappe.db.get_values(
-		"Leave Type", filters={"expire_carry_forwarded_leaves_after_days": (">", 0)}, fieldname=["name"]
-	)
-
-	leave_type = [record[0] for record in leave_type_records] or [""]
-
-	# fetch non expired leave ledger entry of transaction_type allocation
-	expire_allocation = frappe.db.sql(
-		"""
-		SELECT
-			leaves, to_date, employee, leave_type,
-			is_carry_forward, transaction_name as name, transaction_type
-		FROM `tabLeave Ledger Entry` l
-		WHERE (NOT EXISTS
-			(SELECT name
-				FROM `tabLeave Ledger Entry`
-				WHERE
-					transaction_name = l.transaction_name
-					AND transaction_type = 'Leave Allocation'
-					AND name<>l.name
-					AND docstatus = 1
-					AND (
-						is_carry_forward=l.is_carry_forward
-						OR (is_carry_forward = 0 AND leave_type not in %s)
-			)))
-			AND transaction_type = 'Leave Allocation'
-			AND to_date < %s""",
-		(leave_type, today()),
-		as_dict=1,
-	)
-
-	if expire_allocation:
-		create_expiry_ledger_entry(expire_allocation)
-
-
-def create_expiry_ledger_entry(allocations):
-	"""Create ledger entry for expired allocation"""
-	for allocation in allocations:
-		if allocation.is_carry_forward:
-			expire_carried_forward_allocation(allocation)
-		else:
-			expire_allocation(allocation)
-
-
-def get_remaining_leaves(allocation):
-	"""Returns remaining leaves from the given allocation"""
-	return frappe.db.get_value(
-		"Leave Ledger Entry",
-		filters={
-			"employee": allocation.employee,
-			"leave_type": allocation.leave_type,
-			"to_date": ("<=", allocation.to_date),
-			"docstatus": 1,
-		},
-		fieldname=["SUM(leaves)"],
-	)
-
-
-@frappe.whitelist()
-def expire_allocation(allocation, expiry_date=None):
-	"""expires non-carry forwarded allocation"""
-	leaves = get_remaining_leaves(allocation)
-	expiry_date = expiry_date if expiry_date else allocation.to_date
-
-	# allows expired leaves entry to be created/reverted
-	if leaves:
-		args = dict(
-			leaves=flt(leaves) * -1,
-			transaction_name=allocation.name,
-			transaction_type="Leave Allocation",
-			from_date=expiry_date,
-			to_date=expiry_date,
-			is_carry_forward=0,
-			is_expired=1,
-		)
-		create_leave_ledger_entry(allocation, args)
-
-	frappe.db.set_value("Leave Allocation", allocation.name, "expired", 1)
-
-
-def expire_carried_forward_allocation(allocation):
-	"""Expires remaining leaves in the on carried forward allocation"""
-	from erpnext.hr.doctype.leave_application.leave_application import get_leaves_for_period
-
-	leaves_taken = get_leaves_for_period(
-		allocation.employee,
-		allocation.leave_type,
-		allocation.from_date,
-		allocation.to_date,
-		skip_expired_leaves=False,
-	)
-	leaves = flt(allocation.leaves) + flt(leaves_taken)
-
-	# allow expired leaves entry to be created
-	if leaves > 0:
-		args = frappe._dict(
-			transaction_name=allocation.name,
-			transaction_type="Leave Allocation",
-			leaves=allocation.leaves * -1,
-			is_carry_forward=allocation.is_carry_forward,
-			is_expired=1,
-			from_date=allocation.to_date,
-			to_date=allocation.to_date,
-		)
-		create_leave_ledger_entry(allocation, args)
diff --git a/erpnext/hr/doctype/leave_ledger_entry/leave_ledger_entry_list.js b/erpnext/hr/doctype/leave_ledger_entry/leave_ledger_entry_list.js
deleted file mode 100644
index 889325b..0000000
--- a/erpnext/hr/doctype/leave_ledger_entry/leave_ledger_entry_list.js
+++ /dev/null
@@ -1,13 +0,0 @@
-frappe.listview_settings['Leave Ledger Entry'] = {
-	onload: function(listview) {
-		if(listview.page.fields_dict.transaction_type) {
-			listview.page.fields_dict.transaction_type.get_query = function() {
-				return {
-					"filters": {
-						"name": ["in", ["Leave Allocation", "Leave Application", "Leave Encashment"]],
-					}
-				};
-			};
-		}
-	}
-};
diff --git a/erpnext/hr/doctype/leave_ledger_entry/test_leave_ledger_entry.py b/erpnext/hr/doctype/leave_ledger_entry/test_leave_ledger_entry.py
deleted file mode 100644
index 3121109..0000000
--- a/erpnext/hr/doctype/leave_ledger_entry/test_leave_ledger_entry.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-# import frappe
-import unittest
-
-
-class TestLeaveLedgerEntry(unittest.TestCase):
-	pass
diff --git a/erpnext/hr/doctype/leave_period/__init__.py b/erpnext/hr/doctype/leave_period/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/leave_period/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/leave_period/leave_period.js b/erpnext/hr/doctype/leave_period/leave_period.js
deleted file mode 100644
index 0e88bc1..0000000
--- a/erpnext/hr/doctype/leave_period/leave_period.js
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Leave Period', {
-	from_date: (frm)=>{
-		if (frm.doc.from_date && !frm.doc.to_date) {
-			var a_year_from_start = frappe.datetime.add_months(frm.doc.from_date, 12);
-			frm.set_value("to_date", frappe.datetime.add_days(a_year_from_start, -1));
-		}
-	},
-	onload: (frm) => {
-		frm.set_query("department", function() {
-			return {
-				"filters": {
-					"company": frm.doc.company,
-				}
-			};
-		});
-	},
-});
diff --git a/erpnext/hr/doctype/leave_period/leave_period.json b/erpnext/hr/doctype/leave_period/leave_period.json
deleted file mode 100644
index 84ce114..0000000
--- a/erpnext/hr/doctype/leave_period/leave_period.json
+++ /dev/null
@@ -1,108 +0,0 @@
-{
- "actions": [],
- "allow_import": 1,
- "allow_rename": 1,
- "autoname": "HR-LPR-.YYYY.-.#####",
- "creation": "2018-04-13 15:20:52.864288",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "from_date",
-  "to_date",
-  "is_active",
-  "column_break_3",
-  "company",
-  "optional_holiday_list"
- ],
- "fields": [
-  {
-   "fieldname": "from_date",
-   "fieldtype": "Date",
-   "in_list_view": 1,
-   "label": "From Date",
-   "reqd": 1
-  },
-  {
-   "fieldname": "to_date",
-   "fieldtype": "Date",
-   "in_list_view": 1,
-   "label": "To Date",
-   "reqd": 1
-  },
-  {
-   "default": "0",
-   "fieldname": "is_active",
-   "fieldtype": "Check",
-   "label": "Is Active"
-  },
-  {
-   "fieldname": "column_break_3",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Company",
-   "options": "Company",
-   "reqd": 1
-  },
-  {
-   "fieldname": "optional_holiday_list",
-   "fieldtype": "Link",
-   "label": "Holiday List for Optional Leave",
-   "options": "Holiday List"
-  }
- ],
- "links": [],
- "modified": "2022-01-13 13:28:12.951025",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Leave Period",
- "naming_rule": "Expression (old style)",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "write": 1
-  }
- ],
- "search_fields": "from_date, to_date, company",
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": [],
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_period/leave_period.py b/erpnext/hr/doctype/leave_period/leave_period.py
deleted file mode 100644
index 6e62bb5..0000000
--- a/erpnext/hr/doctype/leave_period/leave_period.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.utils import getdate
-
-from erpnext.hr.utils import validate_overlap
-
-
-class LeavePeriod(Document):
-	def validate(self):
-		self.validate_dates()
-		validate_overlap(self, self.from_date, self.to_date, self.company)
-
-	def validate_dates(self):
-		if getdate(self.from_date) >= getdate(self.to_date):
-			frappe.throw(_("To date can not be equal or less than from date"))
diff --git a/erpnext/hr/doctype/leave_period/leave_period_dashboard.py b/erpnext/hr/doctype/leave_period/leave_period_dashboard.py
deleted file mode 100644
index 854f988..0000000
--- a/erpnext/hr/doctype/leave_period/leave_period_dashboard.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from frappe import _
-
-
-def get_data():
-	return {
-		"fieldname": "leave_period",
-		"transactions": [{"label": _("Transactions"), "items": ["Leave Allocation"]}],
-	}
diff --git a/erpnext/hr/doctype/leave_period/test_leave_period.py b/erpnext/hr/doctype/leave_period/test_leave_period.py
deleted file mode 100644
index 0923574..0000000
--- a/erpnext/hr/doctype/leave_period/test_leave_period.py
+++ /dev/null
@@ -1,40 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-import frappe
-
-import erpnext
-
-test_dependencies = ["Employee", "Leave Type", "Leave Policy"]
-
-
-class TestLeavePeriod(unittest.TestCase):
-	pass
-
-
-def create_leave_period(from_date, to_date, company=None):
-	leave_period = frappe.db.get_value(
-		"Leave Period",
-		dict(
-			company=company or erpnext.get_default_company(),
-			from_date=from_date,
-			to_date=to_date,
-			is_active=1,
-		),
-		"name",
-	)
-	if leave_period:
-		return frappe.get_doc("Leave Period", leave_period)
-
-	leave_period = frappe.get_doc(
-		{
-			"doctype": "Leave Period",
-			"company": company or erpnext.get_default_company(),
-			"from_date": from_date,
-			"to_date": to_date,
-			"is_active": 1,
-		}
-	).insert()
-	return leave_period
diff --git a/erpnext/hr/doctype/leave_policy/__init__.py b/erpnext/hr/doctype/leave_policy/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/leave_policy/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/leave_policy/leave_policy.js b/erpnext/hr/doctype/leave_policy/leave_policy.js
deleted file mode 100644
index fdf8e0c..0000000
--- a/erpnext/hr/doctype/leave_policy/leave_policy.js
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Leave Policy', {
-});
-
-frappe.ui.form.on('Leave Policy Detail',{
-	leave_type: function(frm, cdt, cdn) {
-		var child = locals[cdt][cdn];
-		if(child.leave_type){
-			frappe.call({
-				method: "frappe.client.get_value",
-				args: {
-					doctype: "Leave Type",
-					fieldname: "max_leaves_allowed",
-					filters: { name: child.leave_type }
-				},
-				callback: function(r) {
-					if (r.message) {
-						child.annual_allocation = r.message.max_leaves_allowed;
-						refresh_field("leave_policy_details");
-					}
-				}
-			});
-		}
-		else{
-			child.annual_allocation = "";
-			refresh_field("leave_policy_details");
-		}
-	}
-});
diff --git a/erpnext/hr/doctype/leave_policy/leave_policy.json b/erpnext/hr/doctype/leave_policy/leave_policy.json
deleted file mode 100644
index 6ac8f20..0000000
--- a/erpnext/hr/doctype/leave_policy/leave_policy.json
+++ /dev/null
@@ -1,107 +0,0 @@
-{
- "actions": [],
- "autoname": "HR-LPOL-.YYYY.-.#####",
- "creation": "2018-04-13 16:06:19.507624",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "title",
-  "leave_allocations_section",
-  "leave_policy_details",
-  "amended_from"
- ],
- "fields": [
-  {
-   "allow_in_quick_entry": 1,
-   "fieldname": "leave_allocations_section",
-   "fieldtype": "Section Break",
-   "label": "Leave Allocations"
-  },
-  {
-   "fieldname": "leave_policy_details",
-   "fieldtype": "Table",
-   "label": "Leave Policy Details",
-   "options": "Leave Policy Detail",
-   "reqd": 1
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "Leave Policy",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "allow_on_submit": 1,
-   "fieldname": "title",
-   "fieldtype": "Data",
-   "in_list_view": 1,
-   "label": "Title",
-   "reqd": 1
-  }
- ],
- "is_submittable": 1,
- "links": [],
- "modified": "2022-01-19 13:07:40.556500",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Leave Policy",
- "naming_rule": "Expression (old style)",
- "owner": "Administrator",
- "permissions": [
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  }
- ],
- "search_fields": "title",
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": [],
- "title_field": "title",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_policy/leave_policy.py b/erpnext/hr/doctype/leave_policy/leave_policy.py
deleted file mode 100644
index 33c9493..0000000
--- a/erpnext/hr/doctype/leave_policy/leave_policy.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-
-
-class LeavePolicy(Document):
-	def validate(self):
-		if self.leave_policy_details:
-			for lp_detail in self.leave_policy_details:
-				max_leaves_allowed = frappe.db.get_value(
-					"Leave Type", lp_detail.leave_type, "max_leaves_allowed"
-				)
-				if max_leaves_allowed > 0 and lp_detail.annual_allocation > max_leaves_allowed:
-					frappe.throw(
-						_("Maximum leave allowed in the leave type {0} is {1}").format(
-							lp_detail.leave_type, max_leaves_allowed
-						)
-					)
diff --git a/erpnext/hr/doctype/leave_policy/leave_policy_dashboard.py b/erpnext/hr/doctype/leave_policy/leave_policy_dashboard.py
deleted file mode 100644
index 57ea93e..0000000
--- a/erpnext/hr/doctype/leave_policy/leave_policy_dashboard.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from frappe import _
-
-
-def get_data():
-	return {
-		"fieldname": "leave_policy",
-		"transactions": [
-			{"label": _("Leaves"), "items": ["Leave Policy Assignment", "Leave Allocation"]},
-		],
-	}
diff --git a/erpnext/hr/doctype/leave_policy/test_leave_policy.py b/erpnext/hr/doctype/leave_policy/test_leave_policy.py
deleted file mode 100644
index 33d5508..0000000
--- a/erpnext/hr/doctype/leave_policy/test_leave_policy.py
+++ /dev/null
@@ -1,39 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-import frappe
-
-
-class TestLeavePolicy(unittest.TestCase):
-	def test_max_leave_allowed(self):
-		random_leave_type = frappe.get_all("Leave Type", fields=["name", "max_leaves_allowed"])
-		if random_leave_type:
-			random_leave_type = random_leave_type[0]
-			leave_type = frappe.get_doc("Leave Type", random_leave_type.name)
-			leave_type.max_leaves_allowed = 2
-			leave_type.save()
-
-		leave_policy = create_leave_policy(
-			leave_type=leave_type.name, annual_allocation=leave_type.max_leaves_allowed + 1
-		)
-
-		self.assertRaises(frappe.ValidationError, leave_policy.insert)
-
-
-def create_leave_policy(**args):
-	"""Returns an object of leave policy"""
-	args = frappe._dict(args)
-	return frappe.get_doc(
-		{
-			"doctype": "Leave Policy",
-			"title": "Test Leave Policy",
-			"leave_policy_details": [
-				{
-					"leave_type": args.leave_type or "_Test Leave Type",
-					"annual_allocation": args.annual_allocation or 10,
-				}
-			],
-		}
-	)
diff --git a/erpnext/hr/doctype/leave_policy_assignment/__init__.py b/erpnext/hr/doctype/leave_policy_assignment/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/leave_policy_assignment/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/leave_policy_assignment/leave_policy_assignment.js b/erpnext/hr/doctype/leave_policy_assignment/leave_policy_assignment.js
deleted file mode 100644
index 0aaf4cf..0000000
--- a/erpnext/hr/doctype/leave_policy_assignment/leave_policy_assignment.js
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Leave Policy Assignment', {
-	onload: function(frm) {
-		frm.ignore_doctypes_on_cancel_all = ["Leave Ledger Entry"];
-
-		frm.set_query('leave_policy', function() {
-			return {
-				filters: {
-					"docstatus": 1
-				}
-			};
-		});
-		frm.set_query('leave_period', function() {
-			return {
-				filters: {
-					"is_active": 1,
-					"company": frm.doc.company
-				}
-			};
-		});
-	},
-
-	assignment_based_on: function(frm) {
-		if (frm.doc.assignment_based_on) {
-			frm.events.set_effective_date(frm);
-		} else {
-			frm.set_value("effective_from", '');
-			frm.set_value("effective_to", '');
-		}
-	},
-
-	leave_period: function(frm) {
-		if (frm.doc.leave_period) {
-			frm.events.set_effective_date(frm);
-		}
-	},
-
-	set_effective_date: function(frm) {
-		if (frm.doc.assignment_based_on == "Leave Period" && frm.doc.leave_period) {
-			frappe.model.with_doc("Leave Period", frm.doc.leave_period, function () {
-				let from_date = frappe.model.get_value("Leave Period", frm.doc.leave_period, "from_date");
-				let to_date = frappe.model.get_value("Leave Period", frm.doc.leave_period, "to_date");
-				frm.set_value("effective_from", from_date);
-				frm.set_value("effective_to", to_date);
-
-			});
-		} else if (frm.doc.assignment_based_on == "Joining Date" && frm.doc.employee) {
-			frappe.model.with_doc("Employee", frm.doc.employee, function () {
-				let from_date = frappe.model.get_value("Employee", frm.doc.employee, "date_of_joining");
-				frm.set_value("effective_from", from_date);
-				frm.set_value("effective_to", frappe.datetime.add_months(frm.doc.effective_from, 12));
-			});
-		}
-		frm.refresh();
-	}
-
-});
diff --git a/erpnext/hr/doctype/leave_policy_assignment/leave_policy_assignment.json b/erpnext/hr/doctype/leave_policy_assignment/leave_policy_assignment.json
deleted file mode 100644
index 27f0540..0000000
--- a/erpnext/hr/doctype/leave_policy_assignment/leave_policy_assignment.json
+++ /dev/null
@@ -1,171 +0,0 @@
-{
- "actions": [],
- "autoname": "HR-LPOL-ASSGN-.#####",
- "creation": "2020-08-19 13:02:43.343666",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "employee",
-  "employee_name",
-  "company",
-  "leave_policy",
-  "carry_forward",
-  "column_break_5",
-  "assignment_based_on",
-  "leave_period",
-  "effective_from",
-  "effective_to",
-  "leaves_allocated",
-  "amended_from"
- ],
- "fields": [
-  {
-   "fieldname": "employee",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Employee",
-   "options": "Employee",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "employee.employee_name",
-   "fieldname": "employee_name",
-   "fieldtype": "Data",
-   "label": "Employee name",
-   "read_only": 1
-  },
-  {
-   "fieldname": "leave_policy",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Leave Policy",
-   "options": "Leave Policy",
-   "reqd": 1
-  },
-  {
-   "fieldname": "assignment_based_on",
-   "fieldtype": "Select",
-   "label": "Assignment based on",
-   "options": "\nLeave Period\nJoining Date"
-  },
-  {
-   "depends_on": "eval:doc.assignment_based_on == \"Leave Period\"",
-   "fieldname": "leave_period",
-   "fieldtype": "Link",
-   "label": "Leave Period",
-   "mandatory_depends_on": "eval:doc.assignment_based_on == \"Leave Period\"",
-   "options": "Leave Period"
-  },
-  {
-   "fieldname": "effective_from",
-   "fieldtype": "Date",
-   "label": "Effective From",
-   "read_only_depends_on": "eval:doc.assignment_based_on",
-   "reqd": 1
-  },
-  {
-   "fieldname": "effective_to",
-   "fieldtype": "Date",
-   "label": "Effective To",
-   "read_only_depends_on": "eval:doc.assignment_based_on == \"Leave Period\"",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "employee.company",
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "in_standard_filter": 1,
-   "label": "Company",
-   "options": "Company",
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break_5",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "Leave Policy Assignment",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "default": "0",
-   "fieldname": "carry_forward",
-   "fieldtype": "Check",
-   "label": "Add unused leaves from previous allocations"
-  },
-  {
-   "default": "0",
-   "fieldname": "leaves_allocated",
-   "fieldtype": "Check",
-   "hidden": 1,
-   "label": "Leaves Allocated",
-   "no_copy": 1,
-   "print_hide": 1
-  }
- ],
- "is_submittable": 1,
- "links": [],
- "modified": "2022-01-13 13:37:11.218882",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Leave Policy Assignment",
- "naming_rule": "Expression (old style)",
- "owner": "Administrator",
- "permissions": [
-  {
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  }
- ],
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": [],
- "title_field": "employee_name",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_policy_assignment/leave_policy_assignment.py b/erpnext/hr/doctype/leave_policy_assignment/leave_policy_assignment.py
deleted file mode 100644
index 2ed86f3..0000000
--- a/erpnext/hr/doctype/leave_policy_assignment/leave_policy_assignment.py
+++ /dev/null
@@ -1,257 +0,0 @@
-# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import json
-from math import ceil
-
-import frappe
-from frappe import _, bold
-from frappe.model.document import Document
-from frappe.utils import date_diff, flt, formatdate, get_last_day, get_link_to_form, getdate
-
-
-class LeavePolicyAssignment(Document):
-	def validate(self):
-		self.set_dates()
-		self.validate_policy_assignment_overlap()
-		self.warn_about_carry_forwarding()
-
-	def on_submit(self):
-		self.grant_leave_alloc_for_employee()
-
-	def set_dates(self):
-		if self.assignment_based_on == "Leave Period":
-			self.effective_from, self.effective_to = frappe.db.get_value(
-				"Leave Period", self.leave_period, ["from_date", "to_date"]
-			)
-		elif self.assignment_based_on == "Joining Date":
-			self.effective_from = frappe.db.get_value("Employee", self.employee, "date_of_joining")
-
-	def validate_policy_assignment_overlap(self):
-		leave_policy_assignments = frappe.get_all(
-			"Leave Policy Assignment",
-			filters={
-				"employee": self.employee,
-				"name": ("!=", self.name),
-				"docstatus": 1,
-				"effective_to": (">=", self.effective_from),
-				"effective_from": ("<=", self.effective_to),
-			},
-		)
-
-		if len(leave_policy_assignments):
-			frappe.throw(
-				_("Leave Policy: {0} already assigned for Employee {1} for period {2} to {3}").format(
-					bold(self.leave_policy),
-					bold(self.employee),
-					bold(formatdate(self.effective_from)),
-					bold(formatdate(self.effective_to)),
-				)
-			)
-
-	def warn_about_carry_forwarding(self):
-		if not self.carry_forward:
-			return
-
-		leave_types = get_leave_type_details()
-		leave_policy = frappe.get_doc("Leave Policy", self.leave_policy)
-
-		for policy in leave_policy.leave_policy_details:
-			leave_type = leave_types.get(policy.leave_type)
-			if not leave_type.is_carry_forward:
-				msg = _(
-					"Leaves for the Leave Type {0} won't be carry-forwarded since carry-forwarding is disabled."
-				).format(frappe.bold(get_link_to_form("Leave Type", leave_type.name)))
-				frappe.msgprint(msg, indicator="orange", alert=True)
-
-	@frappe.whitelist()
-	def grant_leave_alloc_for_employee(self):
-		if self.leaves_allocated:
-			frappe.throw(_("Leave already have been assigned for this Leave Policy Assignment"))
-		else:
-			leave_allocations = {}
-			leave_type_details = get_leave_type_details()
-
-			leave_policy = frappe.get_doc("Leave Policy", self.leave_policy)
-			date_of_joining = frappe.db.get_value("Employee", self.employee, "date_of_joining")
-
-			for leave_policy_detail in leave_policy.leave_policy_details:
-				if not leave_type_details.get(leave_policy_detail.leave_type).is_lwp:
-					leave_allocation, new_leaves_allocated = self.create_leave_allocation(
-						leave_policy_detail.leave_type,
-						leave_policy_detail.annual_allocation,
-						leave_type_details,
-						date_of_joining,
-					)
-					leave_allocations[leave_policy_detail.leave_type] = {
-						"name": leave_allocation,
-						"leaves": new_leaves_allocated,
-					}
-			self.db_set("leaves_allocated", 1)
-			return leave_allocations
-
-	def create_leave_allocation(
-		self, leave_type, new_leaves_allocated, leave_type_details, date_of_joining
-	):
-		# Creates leave allocation for the given employee in the provided leave period
-		carry_forward = self.carry_forward
-		if self.carry_forward and not leave_type_details.get(leave_type).is_carry_forward:
-			carry_forward = 0
-
-		new_leaves_allocated = self.get_new_leaves(
-			leave_type, new_leaves_allocated, leave_type_details, date_of_joining
-		)
-
-		allocation = frappe.get_doc(
-			dict(
-				doctype="Leave Allocation",
-				employee=self.employee,
-				leave_type=leave_type,
-				from_date=self.effective_from,
-				to_date=self.effective_to,
-				new_leaves_allocated=new_leaves_allocated,
-				leave_period=self.leave_period if self.assignment_based_on == "Leave Policy" else "",
-				leave_policy_assignment=self.name,
-				leave_policy=self.leave_policy,
-				carry_forward=carry_forward,
-			)
-		)
-		allocation.save(ignore_permissions=True)
-		allocation.submit()
-		return allocation.name, new_leaves_allocated
-
-	def get_new_leaves(self, leave_type, new_leaves_allocated, leave_type_details, date_of_joining):
-		from frappe.model.meta import get_field_precision
-
-		precision = get_field_precision(
-			frappe.get_meta("Leave Allocation").get_field("new_leaves_allocated")
-		)
-
-		# Earned Leaves and Compensatory Leaves are allocated by scheduler, initially allocate 0
-		if leave_type_details.get(leave_type).is_compensatory == 1:
-			new_leaves_allocated = 0
-
-		elif leave_type_details.get(leave_type).is_earned_leave == 1:
-			if not self.assignment_based_on:
-				new_leaves_allocated = 0
-			else:
-				# get leaves for past months if assignment is based on Leave Period / Joining Date
-				new_leaves_allocated = self.get_leaves_for_passed_months(
-					leave_type, new_leaves_allocated, leave_type_details, date_of_joining
-				)
-
-		# Calculate leaves at pro-rata basis for employees joining after the beginning of the given leave period
-		elif getdate(date_of_joining) > getdate(self.effective_from):
-			remaining_period = (date_diff(self.effective_to, date_of_joining) + 1) / (
-				date_diff(self.effective_to, self.effective_from) + 1
-			)
-			new_leaves_allocated = ceil(new_leaves_allocated * remaining_period)
-
-		return flt(new_leaves_allocated, precision)
-
-	def get_leaves_for_passed_months(
-		self, leave_type, new_leaves_allocated, leave_type_details, date_of_joining
-	):
-		from erpnext.hr.utils import get_monthly_earned_leave
-
-		current_date = frappe.flags.current_date or getdate()
-		if current_date > getdate(self.effective_to):
-			current_date = getdate(self.effective_to)
-
-		from_date = getdate(self.effective_from)
-		if getdate(date_of_joining) > from_date:
-			from_date = getdate(date_of_joining)
-
-		months_passed = 0
-		based_on_doj = leave_type_details.get(leave_type).based_on_date_of_joining
-
-		if current_date.year == from_date.year and current_date.month >= from_date.month:
-			months_passed = current_date.month - from_date.month
-			months_passed = add_current_month_if_applicable(months_passed, date_of_joining, based_on_doj)
-
-		elif current_date.year > from_date.year:
-			months_passed = (12 - from_date.month) + current_date.month
-			months_passed = add_current_month_if_applicable(months_passed, date_of_joining, based_on_doj)
-
-		if months_passed > 0:
-			monthly_earned_leave = get_monthly_earned_leave(
-				new_leaves_allocated,
-				leave_type_details.get(leave_type).earned_leave_frequency,
-				leave_type_details.get(leave_type).rounding,
-			)
-			new_leaves_allocated = monthly_earned_leave * months_passed
-		else:
-			new_leaves_allocated = 0
-
-		return new_leaves_allocated
-
-
-def add_current_month_if_applicable(months_passed, date_of_joining, based_on_doj):
-	date = getdate(frappe.flags.current_date) or getdate()
-
-	if based_on_doj:
-		# if leave type allocation is based on DOJ, and the date of assignment creation is same as DOJ,
-		# then the month should be considered
-		if date.day == date_of_joining.day:
-			months_passed += 1
-	else:
-		last_day_of_month = get_last_day(date)
-		# if its the last day of the month, then that month should be considered
-		if last_day_of_month == date:
-			months_passed += 1
-
-	return months_passed
-
-
-@frappe.whitelist()
-def create_assignment_for_multiple_employees(employees, data):
-
-	if isinstance(employees, str):
-		employees = json.loads(employees)
-
-	if isinstance(data, str):
-		data = frappe._dict(json.loads(data))
-
-	docs_name = []
-	for employee in employees:
-		assignment = frappe.new_doc("Leave Policy Assignment")
-		assignment.employee = employee
-		assignment.assignment_based_on = data.assignment_based_on or None
-		assignment.leave_policy = data.leave_policy
-		assignment.effective_from = getdate(data.effective_from) or None
-		assignment.effective_to = getdate(data.effective_to) or None
-		assignment.leave_period = data.leave_period or None
-		assignment.carry_forward = data.carry_forward
-		assignment.save()
-		try:
-			assignment.submit()
-		except frappe.exceptions.ValidationError:
-			continue
-
-		frappe.db.commit()
-
-		docs_name.append(assignment.name)
-
-	return docs_name
-
-
-def get_leave_type_details():
-	leave_type_details = frappe._dict()
-	leave_types = frappe.get_all(
-		"Leave Type",
-		fields=[
-			"name",
-			"is_lwp",
-			"is_earned_leave",
-			"is_compensatory",
-			"based_on_date_of_joining",
-			"is_carry_forward",
-			"expire_carry_forwarded_leaves_after_days",
-			"earned_leave_frequency",
-			"rounding",
-		],
-	)
-	for d in leave_types:
-		leave_type_details.setdefault(d.name, d)
-	return leave_type_details
diff --git a/erpnext/hr/doctype/leave_policy_assignment/leave_policy_assignment_dashboard.py b/erpnext/hr/doctype/leave_policy_assignment/leave_policy_assignment_dashboard.py
deleted file mode 100644
index 13b39c7..0000000
--- a/erpnext/hr/doctype/leave_policy_assignment/leave_policy_assignment_dashboard.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from frappe import _
-
-
-def get_data():
-	return {
-		"fieldname": "leave_policy_assignment",
-		"transactions": [
-			{"label": _("Leaves"), "items": ["Leave Allocation"]},
-		],
-	}
diff --git a/erpnext/hr/doctype/leave_policy_assignment/leave_policy_assignment_list.js b/erpnext/hr/doctype/leave_policy_assignment/leave_policy_assignment_list.js
deleted file mode 100644
index 6b75817..0000000
--- a/erpnext/hr/doctype/leave_policy_assignment/leave_policy_assignment_list.js
+++ /dev/null
@@ -1,117 +0,0 @@
-frappe.listview_settings['Leave Policy Assignment'] = {
-	onload: function (list_view) {
-		let me = this;
-		list_view.page.add_inner_button(__("Bulk Leave Policy Assignment"), function () {
-			me.dialog = new frappe.ui.form.MultiSelectDialog({
-				doctype: "Employee",
-				target: cur_list,
-				setters: {
-					employee_name: '',
-					company: '',
-					department: '',
-				},
-				data_fields: [{
-					fieldname: 'leave_policy',
-					fieldtype: 'Link',
-					options: 'Leave Policy',
-					label: __('Leave Policy'),
-					reqd: 1
-				},
-				{
-					fieldname: 'assignment_based_on',
-					fieldtype: 'Select',
-					options: ["", "Leave Period"],
-					label: __('Assignment Based On'),
-					onchange: () => {
-						if (cur_dialog.fields_dict.assignment_based_on.value === "Leave Period") {
-							cur_dialog.set_df_property("effective_from", "read_only", 1);
-							cur_dialog.set_df_property("leave_period", "reqd", 1);
-							cur_dialog.set_df_property("effective_to", "read_only", 1);
-						} else {
-							cur_dialog.set_df_property("effective_from", "read_only", 0);
-							cur_dialog.set_df_property("leave_period", "reqd", 0);
-							cur_dialog.set_df_property("effective_to", "read_only", 0);
-							cur_dialog.set_value("effective_from", "");
-							cur_dialog.set_value("effective_to", "");
-						}
-					}
-				},
-				{
-					fieldname: "leave_period",
-					fieldtype: 'Link',
-					options: "Leave Period",
-					label: __('Leave Period'),
-					depends_on: doc => {
-						return doc.assignment_based_on == 'Leave Period';
-					},
-					onchange: () => {
-						if (cur_dialog.fields_dict.leave_period.value) {
-							me.set_effective_date();
-						}
-					},
-					get_query() {
-						let filters = {"is_active": 1};
-						if (cur_dialog.fields_dict.company.value)
-							filters["company"] = cur_dialog.fields_dict.company.value;
-
-						return {
-							filters: filters
-						};
-					},
-				},
-				{
-					fieldtype: "Column Break"
-				},
-				{
-					fieldname: 'effective_from',
-					fieldtype: 'Date',
-					label: __('Effective From'),
-					reqd: 1
-				},
-				{
-					fieldname: 'effective_to',
-					fieldtype: 'Date',
-					label: __('Effective To'),
-					reqd: 1
-				},
-				{
-					fieldname: 'carry_forward',
-					fieldtype: 'Check',
-					label: __('Add unused leaves from previous allocations')
-				}
-				],
-				get_query() {
-					return {
-						filters: {
-							status: ['=', 'Active']
-						}
-					};
-				},
-				add_filters_group: 1,
-				primary_action_label: "Assign",
-				action(employees, data) {
-					frappe.call({
-						method: 'erpnext.hr.doctype.leave_policy_assignment.leave_policy_assignment.create_assignment_for_multiple_employees',
-						async: false,
-						args: {
-							employees: employees,
-							data: data
-						}
-					});
-					cur_dialog.hide();
-				}
-			});
-		});
-	},
-
-	set_effective_date: function () {
-		if (cur_dialog.fields_dict.assignment_based_on.value === "Leave Period" && cur_dialog.fields_dict.leave_period.value) {
-			frappe.model.with_doc("Leave Period", cur_dialog.fields_dict.leave_period.value, function () {
-				let from_date = frappe.model.get_value("Leave Period", cur_dialog.fields_dict.leave_period.value, "from_date");
-				let to_date = frappe.model.get_value("Leave Period", cur_dialog.fields_dict.leave_period.value, "to_date");
-				cur_dialog.set_value("effective_from", from_date);
-				cur_dialog.set_value("effective_to", to_date);
-			});
-		}
-	}
-};
diff --git a/erpnext/hr/doctype/leave_policy_assignment/test_leave_policy_assignment.py b/erpnext/hr/doctype/leave_policy_assignment/test_leave_policy_assignment.py
deleted file mode 100644
index 031ed0e..0000000
--- a/erpnext/hr/doctype/leave_policy_assignment/test_leave_policy_assignment.py
+++ /dev/null
@@ -1,379 +0,0 @@
-# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-import frappe
-from frappe.tests.utils import FrappeTestCase
-from frappe.utils import add_days, add_months, get_first_day, get_last_day, getdate
-
-from erpnext.hr.doctype.leave_application.test_leave_application import (
-	get_employee,
-	get_leave_period,
-)
-from erpnext.hr.doctype.leave_policy.test_leave_policy import create_leave_policy
-from erpnext.hr.doctype.leave_policy_assignment.leave_policy_assignment import (
-	create_assignment_for_multiple_employees,
-)
-
-test_dependencies = ["Employee"]
-
-
-class TestLeavePolicyAssignment(FrappeTestCase):
-	def setUp(self):
-		for doctype in [
-			"Leave Period",
-			"Leave Application",
-			"Leave Allocation",
-			"Leave Policy Assignment",
-			"Leave Ledger Entry",
-		]:
-			frappe.db.delete(doctype)
-
-		employee = get_employee()
-		self.original_doj = employee.date_of_joining
-		self.employee = employee
-
-	def test_grant_leaves(self):
-		leave_period = get_leave_period()
-		# allocation = 10
-		leave_policy = create_leave_policy()
-		leave_policy.submit()
-
-		self.employee.date_of_joining = get_first_day(leave_period.from_date)
-		self.employee.save()
-
-		data = {
-			"assignment_based_on": "Leave Period",
-			"leave_policy": leave_policy.name,
-			"leave_period": leave_period.name,
-		}
-		leave_policy_assignments = create_assignment_for_multiple_employees(
-			[self.employee.name], frappe._dict(data)
-		)
-		self.assertEqual(
-			frappe.db.get_value("Leave Policy Assignment", leave_policy_assignments[0], "leaves_allocated"),
-			1,
-		)
-
-		leave_allocation = frappe.get_list(
-			"Leave Allocation",
-			filters={
-				"employee": self.employee.name,
-				"leave_policy": leave_policy.name,
-				"leave_policy_assignment": leave_policy_assignments[0],
-				"docstatus": 1,
-			},
-		)[0]
-		leave_alloc_doc = frappe.get_doc("Leave Allocation", leave_allocation)
-
-		self.assertEqual(leave_alloc_doc.new_leaves_allocated, 10)
-		self.assertEqual(leave_alloc_doc.leave_type, "_Test Leave Type")
-		self.assertEqual(getdate(leave_alloc_doc.from_date), getdate(leave_period.from_date))
-		self.assertEqual(getdate(leave_alloc_doc.to_date), getdate(leave_period.to_date))
-		self.assertEqual(leave_alloc_doc.leave_policy, leave_policy.name)
-		self.assertEqual(leave_alloc_doc.leave_policy_assignment, leave_policy_assignments[0])
-
-	def test_allow_to_grant_all_leave_after_cancellation_of_every_leave_allocation(self):
-		leave_period = get_leave_period()
-		# create the leave policy with leave type "_Test Leave Type", allocation = 10
-		leave_policy = create_leave_policy()
-		leave_policy.submit()
-
-		data = {
-			"assignment_based_on": "Leave Period",
-			"leave_policy": leave_policy.name,
-			"leave_period": leave_period.name,
-		}
-		leave_policy_assignments = create_assignment_for_multiple_employees(
-			[self.employee.name], frappe._dict(data)
-		)
-
-		# every leave is allocated no more leave can be granted now
-		self.assertEqual(
-			frappe.db.get_value("Leave Policy Assignment", leave_policy_assignments[0], "leaves_allocated"),
-			1,
-		)
-		leave_allocation = frappe.get_list(
-			"Leave Allocation",
-			filters={
-				"employee": self.employee.name,
-				"leave_policy": leave_policy.name,
-				"leave_policy_assignment": leave_policy_assignments[0],
-				"docstatus": 1,
-			},
-		)[0]
-
-		leave_alloc_doc = frappe.get_doc("Leave Allocation", leave_allocation)
-		leave_alloc_doc.cancel()
-		leave_alloc_doc.delete()
-		self.assertEqual(
-			frappe.db.get_value("Leave Policy Assignment", leave_policy_assignments[0], "leaves_allocated"),
-			0,
-		)
-
-	def test_earned_leave_allocation(self):
-		leave_period = create_leave_period("Test Earned Leave Period")
-		leave_type = create_earned_leave_type("Test Earned Leave")
-
-		leave_policy = frappe.get_doc(
-			{
-				"doctype": "Leave Policy",
-				"title": "Test Leave Policy",
-				"leave_policy_details": [{"leave_type": leave_type.name, "annual_allocation": 6}],
-			}
-		).submit()
-
-		data = {
-			"assignment_based_on": "Leave Period",
-			"leave_policy": leave_policy.name,
-			"leave_period": leave_period.name,
-		}
-
-		# second last day of the month
-		# leaves allocated should be 0 since it is an earned leave and allocation happens via scheduler based on set frequency
-		frappe.flags.current_date = add_days(get_last_day(getdate()), -1)
-		leave_policy_assignments = create_assignment_for_multiple_employees(
-			[self.employee.name], frappe._dict(data)
-		)
-
-		leaves_allocated = frappe.db.get_value(
-			"Leave Allocation",
-			{"leave_policy_assignment": leave_policy_assignments[0]},
-			"total_leaves_allocated",
-		)
-		self.assertEqual(leaves_allocated, 0)
-
-	def test_earned_leave_alloc_for_passed_months_based_on_leave_period(self):
-		leave_period, leave_policy = setup_leave_period_and_policy(
-			get_first_day(add_months(getdate(), -1))
-		)
-
-		# Case 1: assignment created one month after the leave period, should allocate 1 leave
-		frappe.flags.current_date = get_first_day(getdate())
-		data = {
-			"assignment_based_on": "Leave Period",
-			"leave_policy": leave_policy.name,
-			"leave_period": leave_period.name,
-		}
-		leave_policy_assignments = create_assignment_for_multiple_employees(
-			[self.employee.name], frappe._dict(data)
-		)
-
-		leaves_allocated = frappe.db.get_value(
-			"Leave Allocation",
-			{"leave_policy_assignment": leave_policy_assignments[0]},
-			"total_leaves_allocated",
-		)
-		self.assertEqual(leaves_allocated, 1)
-
-	def test_earned_leave_alloc_for_passed_months_on_month_end_based_on_leave_period(self):
-		leave_period, leave_policy = setup_leave_period_and_policy(
-			get_first_day(add_months(getdate(), -2))
-		)
-		# Case 2: assignment created on the last day of the leave period's latter month
-		# should allocate 1 leave for current month even though the month has not ended
-		# since the daily job might have already executed
-		frappe.flags.current_date = get_last_day(getdate())
-
-		data = {
-			"assignment_based_on": "Leave Period",
-			"leave_policy": leave_policy.name,
-			"leave_period": leave_period.name,
-		}
-		leave_policy_assignments = create_assignment_for_multiple_employees(
-			[self.employee.name], frappe._dict(data)
-		)
-
-		leaves_allocated = frappe.db.get_value(
-			"Leave Allocation",
-			{"leave_policy_assignment": leave_policy_assignments[0]},
-			"total_leaves_allocated",
-		)
-		self.assertEqual(leaves_allocated, 3)
-
-	def test_earned_leave_alloc_for_passed_months_with_cf_leaves_based_on_leave_period(self):
-		from erpnext.hr.doctype.leave_allocation.test_leave_allocation import create_leave_allocation
-
-		leave_period, leave_policy = setup_leave_period_and_policy(
-			get_first_day(add_months(getdate(), -2))
-		)
-		# initial leave allocation = 5
-		leave_allocation = create_leave_allocation(
-			employee=self.employee.name,
-			employee_name=self.employee.employee_name,
-			leave_type="Test Earned Leave",
-			from_date=add_months(getdate(), -12),
-			to_date=add_months(getdate(), -3),
-			new_leaves_allocated=5,
-			carry_forward=0,
-		)
-		leave_allocation.submit()
-
-		# Case 3: assignment created on the last day of the leave period's latter month with carry forwarding
-		frappe.flags.current_date = get_last_day(add_months(getdate(), -1))
-		data = {
-			"assignment_based_on": "Leave Period",
-			"leave_policy": leave_policy.name,
-			"leave_period": leave_period.name,
-			"carry_forward": 1,
-		}
-		# carry forwarded leaves = 5, 3 leaves allocated for passed months
-		leave_policy_assignments = create_assignment_for_multiple_employees(
-			[self.employee.name], frappe._dict(data)
-		)
-
-		details = frappe.db.get_value(
-			"Leave Allocation",
-			{"leave_policy_assignment": leave_policy_assignments[0]},
-			["total_leaves_allocated", "new_leaves_allocated", "unused_leaves", "name"],
-			as_dict=True,
-		)
-		self.assertEqual(details.new_leaves_allocated, 2)
-		self.assertEqual(details.unused_leaves, 5)
-		self.assertEqual(details.total_leaves_allocated, 7)
-
-	def test_earned_leave_alloc_for_passed_months_based_on_joining_date(self):
-		# tests leave alloc for earned leaves for assignment based on joining date in policy assignment
-		leave_type = create_earned_leave_type("Test Earned Leave")
-		leave_policy = frappe.get_doc(
-			{
-				"doctype": "Leave Policy",
-				"title": "Test Leave Policy",
-				"leave_policy_details": [{"leave_type": leave_type.name, "annual_allocation": 12}],
-			}
-		).submit()
-
-		# joining date set to 2 months back
-		self.employee.date_of_joining = get_first_day(add_months(getdate(), -2))
-		self.employee.save()
-
-		# assignment created on the last day of the current month
-		frappe.flags.current_date = get_last_day(getdate())
-		data = {"assignment_based_on": "Joining Date", "leave_policy": leave_policy.name}
-		leave_policy_assignments = create_assignment_for_multiple_employees(
-			[self.employee.name], frappe._dict(data)
-		)
-		leaves_allocated = frappe.db.get_value(
-			"Leave Allocation",
-			{"leave_policy_assignment": leave_policy_assignments[0]},
-			"total_leaves_allocated",
-		)
-		effective_from = frappe.db.get_value(
-			"Leave Policy Assignment", leave_policy_assignments[0], "effective_from"
-		)
-		self.assertEqual(effective_from, self.employee.date_of_joining)
-		self.assertEqual(leaves_allocated, 3)
-
-	def test_grant_leaves_on_doj_for_earned_leaves_based_on_leave_period(self):
-		# tests leave alloc based on leave period for earned leaves with "based on doj" configuration in leave type
-		leave_period, leave_policy = setup_leave_period_and_policy(
-			get_first_day(add_months(getdate(), -2)), based_on_doj=True
-		)
-
-		# joining date set to 2 months back
-		self.employee.date_of_joining = get_first_day(add_months(getdate(), -2))
-		self.employee.save()
-
-		# assignment created on the same day of the current month, should allocate leaves including the current month
-		frappe.flags.current_date = get_first_day(getdate())
-
-		data = {
-			"assignment_based_on": "Leave Period",
-			"leave_policy": leave_policy.name,
-			"leave_period": leave_period.name,
-		}
-		leave_policy_assignments = create_assignment_for_multiple_employees(
-			[self.employee.name], frappe._dict(data)
-		)
-
-		leaves_allocated = frappe.db.get_value(
-			"Leave Allocation",
-			{"leave_policy_assignment": leave_policy_assignments[0]},
-			"total_leaves_allocated",
-		)
-		self.assertEqual(leaves_allocated, 3)
-
-	def test_grant_leaves_on_doj_for_earned_leaves_based_on_joining_date(self):
-		# tests leave alloc based on joining date for earned leaves with "based on doj" configuration in leave type
-		leave_type = create_earned_leave_type("Test Earned Leave", based_on_doj=True)
-		leave_policy = frappe.get_doc(
-			{
-				"doctype": "Leave Policy",
-				"title": "Test Leave Policy",
-				"leave_policy_details": [{"leave_type": leave_type.name, "annual_allocation": 12}],
-			}
-		).submit()
-
-		# joining date set to 2 months back
-		# leave should be allocated for current month too since this day is same as the joining day
-		self.employee.date_of_joining = get_first_day(add_months(getdate(), -2))
-		self.employee.save()
-
-		# assignment created on the first day of the current month
-		frappe.flags.current_date = get_first_day(getdate())
-		data = {"assignment_based_on": "Joining Date", "leave_policy": leave_policy.name}
-		leave_policy_assignments = create_assignment_for_multiple_employees(
-			[self.employee.name], frappe._dict(data)
-		)
-		leaves_allocated = frappe.db.get_value(
-			"Leave Allocation",
-			{"leave_policy_assignment": leave_policy_assignments[0]},
-			"total_leaves_allocated",
-		)
-		effective_from = frappe.db.get_value(
-			"Leave Policy Assignment", leave_policy_assignments[0], "effective_from"
-		)
-		self.assertEqual(effective_from, self.employee.date_of_joining)
-		self.assertEqual(leaves_allocated, 3)
-
-	def tearDown(self):
-		frappe.db.set_value("Employee", self.employee.name, "date_of_joining", self.original_doj)
-		frappe.flags.current_date = None
-
-
-def create_earned_leave_type(leave_type, based_on_doj=False):
-	frappe.delete_doc_if_exists("Leave Type", leave_type, force=1)
-
-	return frappe.get_doc(
-		dict(
-			leave_type_name=leave_type,
-			doctype="Leave Type",
-			is_earned_leave=1,
-			earned_leave_frequency="Monthly",
-			rounding=0.5,
-			is_carry_forward=1,
-			based_on_date_of_joining=based_on_doj,
-		)
-	).insert()
-
-
-def create_leave_period(name, start_date=None):
-	frappe.delete_doc_if_exists("Leave Period", name, force=1)
-	if not start_date:
-		start_date = get_first_day(getdate())
-
-	return frappe.get_doc(
-		dict(
-			name=name,
-			doctype="Leave Period",
-			from_date=start_date,
-			to_date=add_months(start_date, 12),
-			company="_Test Company",
-			is_active=1,
-		)
-	).insert()
-
-
-def setup_leave_period_and_policy(start_date, based_on_doj=False):
-	leave_type = create_earned_leave_type("Test Earned Leave", based_on_doj)
-	leave_period = create_leave_period("Test Earned Leave Period", start_date=start_date)
-	leave_policy = frappe.get_doc(
-		{
-			"doctype": "Leave Policy",
-			"title": "Test Leave Policy",
-			"leave_policy_details": [{"leave_type": leave_type.name, "annual_allocation": 12}],
-		}
-	).insert()
-
-	return leave_period, leave_policy
diff --git a/erpnext/hr/doctype/leave_policy_detail/__init__.py b/erpnext/hr/doctype/leave_policy_detail/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/leave_policy_detail/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/leave_policy_detail/leave_policy_detail.js b/erpnext/hr/doctype/leave_policy_detail/leave_policy_detail.js
deleted file mode 100644
index ee21f8d..0000000
--- a/erpnext/hr/doctype/leave_policy_detail/leave_policy_detail.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Leave Policy Detail', {
-	refresh: function(frm) {
-
-	}
-});
diff --git a/erpnext/hr/doctype/leave_policy_detail/leave_policy_detail.json b/erpnext/hr/doctype/leave_policy_detail/leave_policy_detail.json
deleted file mode 100644
index 572b2f7..0000000
--- a/erpnext/hr/doctype/leave_policy_detail/leave_policy_detail.json
+++ /dev/null
@@ -1,104 +0,0 @@
-{
- "allow_copy": 0, 
- "allow_guest_to_view": 0, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "beta": 0, 
- "creation": "2018-04-13 16:01:20.928853", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "", 
- "editable_grid": 1, 
- "engine": "InnoDB", 
- "fields": [
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 3, 
-   "fieldname": "leave_type", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Leave Type", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Leave Type", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 2, 
-   "fieldname": "annual_allocation", 
-   "fieldtype": "Float", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Annual Allocation", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }
- ], 
- "has_web_view": 0, 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "image_view": 0, 
- "in_create": 0, 
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 1, 
- "max_attachments": 0, 
- "modified": "2018-04-14 13:00:34.511109", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Leave Policy Detail", 
- "name_case": "", 
- "owner": "Administrator", 
- "permissions": [], 
- "quick_entry": 1, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "show_name_in_global_search": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "track_changes": 1, 
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_policy_detail/leave_policy_detail.py b/erpnext/hr/doctype/leave_policy_detail/leave_policy_detail.py
deleted file mode 100644
index 8916d3d..0000000
--- a/erpnext/hr/doctype/leave_policy_detail/leave_policy_detail.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-from frappe.model.document import Document
-
-
-class LeavePolicyDetail(Document):
-	pass
diff --git a/erpnext/hr/doctype/leave_policy_detail/test_leave_policy_detail.py b/erpnext/hr/doctype/leave_policy_detail/test_leave_policy_detail.py
deleted file mode 100644
index aacf64f..0000000
--- a/erpnext/hr/doctype/leave_policy_detail/test_leave_policy_detail.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-
-class TestLeavePolicyDetail(unittest.TestCase):
-	pass
diff --git a/erpnext/hr/doctype/leave_type/README.md b/erpnext/hr/doctype/leave_type/README.md
deleted file mode 100644
index 695e9dd..0000000
--- a/erpnext/hr/doctype/leave_type/README.md
+++ /dev/null
@@ -1,6 +0,0 @@
-Type of Leave.
-
-e.g.
-
-- Casual Leave
-- Sick Leave
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_type/__init__.py b/erpnext/hr/doctype/leave_type/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/leave_type/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/leave_type/leave_type.js b/erpnext/hr/doctype/leave_type/leave_type.js
deleted file mode 100644
index b930ded..0000000
--- a/erpnext/hr/doctype/leave_type/leave_type.js
+++ /dev/null
@@ -1,38 +0,0 @@
-frappe.ui.form.on("Leave Type", {
-	refresh: function(frm) {
-	}
-});
-
-
-frappe.tour["Leave Type"] = [
-	{
-		fieldname: "max_leaves_allowed",
-		title: "Maximum Leave Allocation Allowed",
-		description: __("This field allows you to set the maximum number of leaves that can be allocated annually for this Leave Type while creating the Leave Policy")
-	},
-	{
-		fieldname: "max_continuous_days_allowed",
-		title: "Maximum Consecutive Leaves Allowed",
-		description: __("This field allows you to set the maximum number of consecutive leaves an Employee can apply for.")
-	},
-	{
-		fieldname: "is_optional_leave",
-		title: "Is Optional Leave",
-		description: __("Optional Leaves are holidays that Employees can choose to avail from a list of holidays published by the company.")
-	},
-	{
-		fieldname: "is_compensatory",
-		title: "Is Compensatory Leave",
-		description: __("Leaves you can avail against a holiday you worked on. You can claim Compensatory Off Leave using Compensatory Leave request. Click") + " <a href='https://docs.erpnext.com/docs/v13/user/manual/en/human-resources/compensatory-leave-request' target='_blank'>here</a> " + __('to know more')
-	},
-	{
-		fieldname: "allow_encashment",
-		title: "Allow Encashment",
-		description: __("From here, you can enable encashment for the balance leaves.")
-	},
-	{
-		fieldname: "is_earned_leave",
-		title: "Is Earned Leaves",
-		description: __("Earned Leaves are leaves earned by an Employee after working with the company for a certain amount of time. Enabling this will allocate leaves on pro-rata basis by automatically updating Leave Allocation for leaves of this type at intervals set by 'Earned Leave Frequency.")
-	}
-];
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_type/leave_type.json b/erpnext/hr/doctype/leave_type/leave_type.json
deleted file mode 100644
index d40ff09..0000000
--- a/erpnext/hr/doctype/leave_type/leave_type.json
+++ /dev/null
@@ -1,265 +0,0 @@
-{
- "actions": [],
- "allow_import": 1,
- "allow_rename": 1,
- "autoname": "field:leave_type_name",
- "creation": "2013-02-21 09:55:58",
- "doctype": "DocType",
- "document_type": "Setup",
- "engine": "InnoDB",
- "field_order": [
-  "leave_type_name",
-  "max_leaves_allowed",
-  "applicable_after",
-  "max_continuous_days_allowed",
-  "column_break_3",
-  "is_carry_forward",
-  "is_lwp",
-  "is_ppl",
-  "fraction_of_daily_salary_per_leave",
-  "is_optional_leave",
-  "allow_negative",
-  "allow_over_allocation",
-  "include_holiday",
-  "is_compensatory",
-  "carry_forward_section",
-  "maximum_carry_forwarded_leaves",
-  "expire_carry_forwarded_leaves_after_days",
-  "encashment",
-  "allow_encashment",
-  "encashment_threshold_days",
-  "column_break_17",
-  "earning_component",
-  "earned_leave",
-  "is_earned_leave",
-  "earned_leave_frequency",
-  "column_break_22",
-  "based_on_date_of_joining",
-  "rounding"
- ],
- "fields": [
-  {
-   "fieldname": "leave_type_name",
-   "fieldtype": "Data",
-   "in_list_view": 1,
-   "label": "Leave Type Name",
-   "oldfieldname": "leave_type_name",
-   "oldfieldtype": "Data",
-   "reqd": 1,
-   "unique": 1
-  },
-  {
-   "fieldname": "max_leaves_allowed",
-   "fieldtype": "Int",
-   "label": "Maximum Leave Allocation Allowed"
-  },
-  {
-   "fieldname": "applicable_after",
-   "fieldtype": "Int",
-   "label": "Applicable After (Working Days)"
-  },
-  {
-   "fieldname": "max_continuous_days_allowed",
-   "fieldtype": "Int",
-   "in_list_view": 1,
-   "label": "Maximum Consecutive Leaves Allowed",
-   "oldfieldname": "max_days_allowed",
-   "oldfieldtype": "Data"
-  },
-  {
-   "fieldname": "column_break_3",
-   "fieldtype": "Column Break"
-  },
-  {
-   "default": "0",
-   "fieldname": "is_carry_forward",
-   "fieldtype": "Check",
-   "in_list_view": 1,
-   "label": "Is Carry Forward",
-   "oldfieldname": "is_carry_forward",
-   "oldfieldtype": "Check"
-  },
-  {
-   "default": "0",
-   "depends_on": "eval:doc.is_ppl == 0",
-   "fieldname": "is_lwp",
-   "fieldtype": "Check",
-   "label": "Is Leave Without Pay"
-  },
-  {
-   "default": "0",
-   "description": "These leaves are holidays permitted by the company however, availing it is optional for an Employee.",
-   "fieldname": "is_optional_leave",
-   "fieldtype": "Check",
-   "label": "Is Optional Leave"
-  },
-  {
-   "default": "0",
-   "fieldname": "allow_negative",
-   "fieldtype": "Check",
-   "label": "Allow Negative Balance"
-  },
-  {
-   "default": "0",
-   "fieldname": "include_holiday",
-   "fieldtype": "Check",
-   "label": "Include holidays within leaves as leaves"
-  },
-  {
-   "default": "0",
-   "fieldname": "is_compensatory",
-   "fieldtype": "Check",
-   "label": "Is Compensatory"
-  },
-  {
-   "collapsible": 1,
-   "depends_on": "eval: doc.is_carry_forward == 1",
-   "fieldname": "carry_forward_section",
-   "fieldtype": "Section Break",
-   "label": "Carry Forward"
-  },
-  {
-   "description": "Calculated in days",
-   "fieldname": "expire_carry_forwarded_leaves_after_days",
-   "fieldtype": "Int",
-   "label": "Expire Carry Forwarded Leaves (Days)"
-  },
-  {
-   "collapsible": 1,
-   "fieldname": "encashment",
-   "fieldtype": "Section Break",
-   "label": "Encashment"
-  },
-  {
-   "default": "0",
-   "fieldname": "allow_encashment",
-   "fieldtype": "Check",
-   "label": "Allow Encashment"
-  },
-  {
-   "depends_on": "allow_encashment",
-   "fieldname": "encashment_threshold_days",
-   "fieldtype": "Int",
-   "label": "Encashment Threshold Days"
-  },
-  {
-   "depends_on": "allow_encashment",
-   "fieldname": "earning_component",
-   "fieldtype": "Link",
-   "label": "Earning Component",
-   "options": "Salary Component"
-  },
-  {
-   "collapsible": 1,
-   "fieldname": "earned_leave",
-   "fieldtype": "Section Break",
-   "label": "Earned Leave"
-  },
-  {
-   "default": "0",
-   "fieldname": "is_earned_leave",
-   "fieldtype": "Check",
-   "label": "Is Earned Leave"
-  },
-  {
-   "depends_on": "is_earned_leave",
-   "fieldname": "earned_leave_frequency",
-   "fieldtype": "Select",
-   "label": "Earned Leave Frequency",
-   "options": "Monthly\nQuarterly\nHalf-Yearly\nYearly"
-  },
-  {
-   "default": "0.5",
-   "depends_on": "is_earned_leave",
-   "fieldname": "rounding",
-   "fieldtype": "Select",
-   "label": "Rounding",
-   "options": "\n0.25\n0.5\n1.0"
-  },
-  {
-   "depends_on": "is_carry_forward",
-   "fieldname": "maximum_carry_forwarded_leaves",
-   "fieldtype": "Float",
-   "label": "Maximum Carry Forwarded Leaves"
-  },
-  {
-   "fieldname": "column_break_17",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "column_break_22",
-   "fieldtype": "Column Break"
-  },
-  {
-   "default": "0",
-   "depends_on": "eval:doc.is_earned_leave",
-   "description": "If checked, leave will be granted on the day of joining every month.",
-   "fieldname": "based_on_date_of_joining",
-   "fieldtype": "Check",
-   "label": "Based On Date Of Joining"
-  },
-  {
-   "default": "0",
-   "depends_on": "eval:doc.is_lwp == 0",
-   "fieldname": "is_ppl",
-   "fieldtype": "Check",
-   "label": "Is Partially Paid Leave"
-  },
-  {
-   "depends_on": "eval:doc.is_ppl == 1",
-   "description": "For a day of leave taken, if you still pay (say) 50% of the daily salary, then enter 0.50 in this field.",
-   "fieldname": "fraction_of_daily_salary_per_leave",
-   "fieldtype": "Float",
-   "label": "Fraction of Daily Salary per Leave",
-   "mandatory_depends_on": "eval:doc.is_ppl == 1"
-  },
-  {
-   "default": "0",
-   "description": "Allows allocating more leaves than the number of days in the allocation period.",
-   "fieldname": "allow_over_allocation",
-   "fieldtype": "Check",
-   "label": "Allow Over Allocation"
-  }
- ],
- "icon": "fa fa-flag",
- "idx": 1,
- "links": [],
- "modified": "2022-05-09 05:01:38.957545",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Leave Type",
- "naming_rule": "By fieldname",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "read": 1,
-   "role": "Employee"
-  }
- ],
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": [],
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_type/leave_type.py b/erpnext/hr/doctype/leave_type/leave_type.py
deleted file mode 100644
index 82b9bd6..0000000
--- a/erpnext/hr/doctype/leave_type/leave_type.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.utils import today
-
-
-class LeaveType(Document):
-	def validate(self):
-		if self.is_lwp:
-			leave_allocation = frappe.get_all(
-				"Leave Allocation",
-				filters={"leave_type": self.name, "from_date": ("<=", today()), "to_date": (">=", today())},
-				fields=["name"],
-			)
-			leave_allocation = [l["name"] for l in leave_allocation]
-			if leave_allocation:
-				frappe.throw(
-					_(
-						"Leave application is linked with leave allocations {0}. Leave application cannot be set as leave without pay"
-					).format(", ".join(leave_allocation))
-				)  # nosec
-
-		if self.is_lwp and self.is_ppl:
-			frappe.throw(_("Leave Type can be either without pay or partial pay"))
-
-		if self.is_ppl and (
-			self.fraction_of_daily_salary_per_leave < 0 or self.fraction_of_daily_salary_per_leave > 1
-		):
-			frappe.throw(_("The fraction of Daily Salary per Leave should be between 0 and 1"))
diff --git a/erpnext/hr/doctype/leave_type/leave_type_dashboard.py b/erpnext/hr/doctype/leave_type/leave_type_dashboard.py
deleted file mode 100644
index 269a1ec..0000000
--- a/erpnext/hr/doctype/leave_type/leave_type_dashboard.py
+++ /dev/null
@@ -1,10 +0,0 @@
-def get_data():
-	return {
-		"fieldname": "leave_type",
-		"transactions": [
-			{
-				"items": ["Leave Allocation", "Leave Application"],
-			},
-			{"items": ["Attendance", "Leave Encashment"]},
-		],
-	}
diff --git a/erpnext/hr/doctype/leave_type/test_leave_type.py b/erpnext/hr/doctype/leave_type/test_leave_type.py
deleted file mode 100644
index 69f9e12..0000000
--- a/erpnext/hr/doctype/leave_type/test_leave_type.py
+++ /dev/null
@@ -1,32 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-import frappe
-
-test_records = frappe.get_test_records("Leave Type")
-
-
-def create_leave_type(**args):
-	args = frappe._dict(args)
-	if frappe.db.exists("Leave Type", args.leave_type_name):
-		return frappe.get_doc("Leave Type", args.leave_type_name)
-	leave_type = frappe.get_doc(
-		{
-			"doctype": "Leave Type",
-			"leave_type_name": args.leave_type_name or "_Test Leave Type",
-			"include_holiday": args.include_holidays or 1,
-			"allow_encashment": args.allow_encashment or 0,
-			"is_earned_leave": args.is_earned_leave or 0,
-			"is_lwp": args.is_lwp or 0,
-			"is_ppl": args.is_ppl or 0,
-			"is_carry_forward": args.is_carry_forward or 0,
-			"expire_carry_forwarded_leaves_after_days": args.expire_carry_forwarded_leaves_after_days or 0,
-			"encashment_threshold_days": args.encashment_threshold_days or 5,
-			"earning_component": "Leave Encashment",
-		}
-	)
-
-	if leave_type.is_ppl:
-		leave_type.fraction_of_daily_salary_per_leave = args.fraction_of_daily_salary_per_leave or 0.5
-
-	return leave_type
diff --git a/erpnext/hr/doctype/leave_type/test_records.json b/erpnext/hr/doctype/leave_type/test_records.json
deleted file mode 100644
index f1f7d8f..0000000
--- a/erpnext/hr/doctype/leave_type/test_records.json
+++ /dev/null
@@ -1,27 +0,0 @@
-[
-    {
-        "doctype": "Leave Type",
-        "leave_type_name": "_Test Leave Type",
-        "include_holiday": 1
-    },
-    {
-        "doctype": "Leave Type",
-        "is_lwp": 1,
-        "leave_type_name": "_Test Leave Type LWP",
-        "include_holiday": 1
-    },
-    {
-        "doctype": "Leave Type",
-        "leave_type_name": "_Test Leave Type Encashment",
-        "include_holiday": 1,
-        "allow_encashment": 1,
-        "encashment_threshold_days": 5,
-        "earning_component": "Leave Encashment"
-    },
-    {
-        "doctype": "Leave Type",
-        "leave_type_name": "_Test Leave Type Earned",
-        "include_holiday": 1,
-        "is_earned_leave": 1
-    }
-]
\ No newline at end of file
diff --git a/erpnext/hr/doctype/offer_term/__init__.py b/erpnext/hr/doctype/offer_term/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/offer_term/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/offer_term/offer_term.js b/erpnext/hr/doctype/offer_term/offer_term.js
deleted file mode 100644
index 3be6e7b..0000000
--- a/erpnext/hr/doctype/offer_term/offer_term.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Offer Term', {
-	refresh: function(frm) {
-
-	}
-});
diff --git a/erpnext/hr/doctype/offer_term/offer_term.json b/erpnext/hr/doctype/offer_term/offer_term.json
deleted file mode 100644
index 3b7bd42..0000000
--- a/erpnext/hr/doctype/offer_term/offer_term.json
+++ /dev/null
@@ -1,84 +0,0 @@
-{
- "allow_copy": 0, 
- "allow_import": 1, 
- "allow_rename": 0, 
- "autoname": "field:offer_term", 
- "beta": 0, 
- "creation": "2015-03-05 13:00:30.900471", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "Setup", 
- "editable_grid": 0, 
- "fields": [
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "offer_term", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Offer Term", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }
- ], 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "image_view": 0, 
- "in_create": 0, 
-
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 0, 
- "max_attachments": 0, 
- "modified": "2016-07-25 05:24:25.724664", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Offer Term", 
- "name_case": "", 
- "owner": "Administrator", 
- "permissions": [
-  {
-   "amend": 0, 
-   "apply_user_permissions": 0, 
-   "cancel": 0, 
-   "create": 1, 
-   "delete": 1, 
-   "email": 0, 
-   "export": 0, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 0, 
-   "read": 1, 
-   "report": 0, 
-   "role": "HR User", 
-   "set_user_permissions": 0, 
-   "share": 0, 
-   "submit": 0, 
-   "write": 1
-  }
- ], 
- "quick_entry": 1, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/offer_term/offer_term.py b/erpnext/hr/doctype/offer_term/offer_term.py
deleted file mode 100644
index cee6c45..0000000
--- a/erpnext/hr/doctype/offer_term/offer_term.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and contributors
-# For license information, please see license.txt
-
-
-from frappe.model.document import Document
-
-
-class OfferTerm(Document):
-	pass
diff --git a/erpnext/hr/doctype/offer_term/test_offer_term.py b/erpnext/hr/doctype/offer_term/test_offer_term.py
deleted file mode 100644
index 2bea7b2..0000000
--- a/erpnext/hr/doctype/offer_term/test_offer_term.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and Contributors
-# See license.txt
-
-import unittest
-
-# test_records = frappe.get_test_records('Offer Term')
-
-
-class TestOfferTerm(unittest.TestCase):
-	pass
diff --git a/erpnext/hr/doctype/purpose_of_travel/__init__.py b/erpnext/hr/doctype/purpose_of_travel/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/purpose_of_travel/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/purpose_of_travel/purpose_of_travel.js b/erpnext/hr/doctype/purpose_of_travel/purpose_of_travel.js
deleted file mode 100644
index a9424d6..0000000
--- a/erpnext/hr/doctype/purpose_of_travel/purpose_of_travel.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Purpose of Travel', {
-	refresh: function(frm) {
-
-	}
-});
diff --git a/erpnext/hr/doctype/purpose_of_travel/purpose_of_travel.json b/erpnext/hr/doctype/purpose_of_travel/purpose_of_travel.json
deleted file mode 100644
index 68d2d6b..0000000
--- a/erpnext/hr/doctype/purpose_of_travel/purpose_of_travel.json
+++ /dev/null
@@ -1,93 +0,0 @@
-{
- "allow_copy": 0, 
- "allow_guest_to_view": 0, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "autoname": "field:purpose_of_travel", 
- "beta": 0, 
- "creation": "2018-05-15 07:00:30.933908", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "", 
- "editable_grid": 1, 
- "engine": "InnoDB", 
- "fields": [
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "purpose_of_travel", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Purpose of Travel", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }
- ], 
- "has_web_view": 0, 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "image_view": 0, 
- "in_create": 0, 
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 0, 
- "max_attachments": 0, 
- "modified": "2018-05-15 07:05:26.219209", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Purpose of Travel", 
- "name_case": "", 
- "owner": "Administrator", 
- "permissions": [
-  {
-   "amend": 0, 
-   "cancel": 0, 
-   "create": 1, 
-   "delete": 1, 
-   "email": 1, 
-   "export": 1, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 1, 
-   "role": "System Manager", 
-   "set_user_permissions": 0, 
-   "share": 1, 
-   "submit": 0, 
-   "write": 1
-  }
- ], 
- "quick_entry": 1, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "show_name_in_global_search": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "track_changes": 0, 
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/purpose_of_travel/purpose_of_travel.py b/erpnext/hr/doctype/purpose_of_travel/purpose_of_travel.py
deleted file mode 100644
index c9d6e71..0000000
--- a/erpnext/hr/doctype/purpose_of_travel/purpose_of_travel.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-from frappe.model.document import Document
-
-
-class PurposeofTravel(Document):
-	pass
diff --git a/erpnext/hr/doctype/purpose_of_travel/test_purpose_of_travel.py b/erpnext/hr/doctype/purpose_of_travel/test_purpose_of_travel.py
deleted file mode 100644
index 354663b..0000000
--- a/erpnext/hr/doctype/purpose_of_travel/test_purpose_of_travel.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-
-class TestPurposeofTravel(unittest.TestCase):
-	pass
diff --git a/erpnext/hr/doctype/shift_assignment/__init__.py b/erpnext/hr/doctype/shift_assignment/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/shift_assignment/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/shift_assignment/shift_assignment.js b/erpnext/hr/doctype/shift_assignment/shift_assignment.js
deleted file mode 100644
index 74708b1..0000000
--- a/erpnext/hr/doctype/shift_assignment/shift_assignment.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Shift Assignment', {
-	refresh: function(frm) {
-
-	}
-});
diff --git a/erpnext/hr/doctype/shift_assignment/shift_assignment.json b/erpnext/hr/doctype/shift_assignment/shift_assignment.json
deleted file mode 100644
index ce2a10f..0000000
--- a/erpnext/hr/doctype/shift_assignment/shift_assignment.json
+++ /dev/null
@@ -1,155 +0,0 @@
-{
- "actions": [],
- "allow_import": 1,
- "autoname": "HR-SHA-.YY.-.MM.-.#####",
- "creation": "2018-04-13 16:25:04.562730",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "employee",
-  "employee_name",
-  "shift_type",
-  "status",
-  "column_break_3",
-  "company",
-  "start_date",
-  "end_date",
-  "shift_request",
-  "department",
-  "amended_from"
- ],
- "fields": [
-  {
-   "fieldname": "employee",
-   "fieldtype": "Link",
-   "label": "Employee",
-   "options": "Employee",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "employee.employee_name",
-   "fieldname": "employee_name",
-   "fieldtype": "Data",
-   "label": "Employee Name",
-   "read_only": 1
-  },
-  {
-   "fetch_from": "employee.department",
-   "fieldname": "department",
-   "fieldtype": "Link",
-   "label": "Department",
-   "options": "Department",
-   "read_only": 1
-  },
-  {
-   "fieldname": "shift_type",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Shift Type",
-   "options": "Shift Type",
-   "reqd": 1
-  },
-  {
-   "fieldname": "column_break_3",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "label": "Company",
-   "options": "Company",
-   "reqd": 1
-  },
-  {
-   "fieldname": "shift_request",
-   "fieldtype": "Link",
-   "label": "Shift Request",
-   "options": "Shift Request",
-   "read_only": 1
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "Shift Assignment",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "fieldname": "start_date",
-   "fieldtype": "Date",
-   "in_list_view": 1,
-   "label": "Start Date",
-   "reqd": 1
-  },
-  {
-   "allow_on_submit": 1,
-   "fieldname": "end_date",
-   "fieldtype": "Date",
-   "label": "End Date",
-   "show_days": 1,
-   "show_seconds": 1
-  },
-  {
-   "allow_on_submit": 1,
-   "default": "Active",
-   "fieldname": "status",
-   "fieldtype": "Select",
-   "label": "Status",
-   "options": "Active\nInactive",
-   "show_days": 1,
-   "show_seconds": 1
-  }
- ],
- "is_submittable": 1,
- "links": [],
- "modified": "2020-06-15 14:27:54.310773",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Shift Assignment",
- "owner": "Administrator",
- "permissions": [
-  {
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "Employee",
-   "share": 1
-  },
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  }
- ],
- "sort_field": "modified",
- "sort_order": "DESC",
- "title_field": "employee_name",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/shift_assignment/shift_assignment.py b/erpnext/hr/doctype/shift_assignment/shift_assignment.py
deleted file mode 100644
index 51298de..0000000
--- a/erpnext/hr/doctype/shift_assignment/shift_assignment.py
+++ /dev/null
@@ -1,517 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-from datetime import datetime, timedelta
-from typing import Dict, List
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.query_builder import Criterion
-from frappe.utils import cstr, get_datetime, get_link_to_form, get_time, getdate, now_datetime
-
-from erpnext.hr.doctype.employee.employee import get_holiday_list_for_employee
-from erpnext.hr.doctype.holiday_list.holiday_list import is_holiday
-from erpnext.hr.utils import validate_active_employee
-
-
-class OverlappingShiftError(frappe.ValidationError):
-	pass
-
-
-class ShiftAssignment(Document):
-	def validate(self):
-		validate_active_employee(self.employee)
-		self.validate_overlapping_shifts()
-
-		if self.end_date:
-			self.validate_from_to_dates("start_date", "end_date")
-
-	def validate_overlapping_shifts(self):
-		overlapping_dates = self.get_overlapping_dates()
-		if len(overlapping_dates):
-			# if dates are overlapping, check if timings are overlapping, else allow
-			overlapping_timings = has_overlapping_timings(self.shift_type, overlapping_dates[0].shift_type)
-			if overlapping_timings:
-				self.throw_overlap_error(overlapping_dates[0])
-
-	def get_overlapping_dates(self):
-		if not self.name:
-			self.name = "New Shift Assignment"
-
-		shift = frappe.qb.DocType("Shift Assignment")
-		query = (
-			frappe.qb.from_(shift)
-			.select(shift.name, shift.shift_type, shift.docstatus, shift.status)
-			.where(
-				(shift.employee == self.employee)
-				& (shift.docstatus == 1)
-				& (shift.name != self.name)
-				& (shift.status == "Active")
-			)
-		)
-
-		if self.end_date:
-			query = query.where(
-				Criterion.any(
-					[
-						Criterion.any(
-							[
-								shift.end_date.isnull(),
-								((self.start_date >= shift.start_date) & (self.start_date <= shift.end_date)),
-							]
-						),
-						Criterion.any(
-							[
-								((self.end_date >= shift.start_date) & (self.end_date <= shift.end_date)),
-								shift.start_date.between(self.start_date, self.end_date),
-							]
-						),
-					]
-				)
-			)
-		else:
-			query = query.where(
-				shift.end_date.isnull()
-				| ((self.start_date >= shift.start_date) & (self.start_date <= shift.end_date))
-			)
-
-		return query.run(as_dict=True)
-
-	def throw_overlap_error(self, shift_details):
-		shift_details = frappe._dict(shift_details)
-		if shift_details.docstatus == 1 and shift_details.status == "Active":
-			msg = _(
-				"Employee {0} already has an active Shift {1}: {2} that overlaps within this period."
-			).format(
-				frappe.bold(self.employee),
-				frappe.bold(shift_details.shift_type),
-				get_link_to_form("Shift Assignment", shift_details.name),
-			)
-			frappe.throw(msg, title=_("Overlapping Shifts"), exc=OverlappingShiftError)
-
-
-def has_overlapping_timings(shift_1: str, shift_2: str) -> bool:
-	"""
-	Accepts two shift types and checks whether their timings are overlapping
-	"""
-	curr_shift = frappe.db.get_value("Shift Type", shift_1, ["start_time", "end_time"], as_dict=True)
-	overlapping_shift = frappe.db.get_value(
-		"Shift Type", shift_2, ["start_time", "end_time"], as_dict=True
-	)
-
-	if (
-		(
-			curr_shift.start_time > overlapping_shift.start_time
-			and curr_shift.start_time < overlapping_shift.end_time
-		)
-		or (
-			curr_shift.end_time > overlapping_shift.start_time
-			and curr_shift.end_time < overlapping_shift.end_time
-		)
-		or (
-			curr_shift.start_time <= overlapping_shift.start_time
-			and curr_shift.end_time >= overlapping_shift.end_time
-		)
-	):
-		return True
-	return False
-
-
-@frappe.whitelist()
-def get_events(start, end, filters=None):
-	from frappe.desk.calendar import get_event_conditions
-
-	employee = frappe.db.get_value(
-		"Employee", {"user_id": frappe.session.user}, ["name", "company"], as_dict=True
-	)
-	if employee:
-		employee, company = employee.name, employee.company
-	else:
-		employee = ""
-		company = frappe.db.get_value("Global Defaults", None, "default_company")
-
-	conditions = get_event_conditions("Shift Assignment", filters)
-	events = add_assignments(start, end, conditions=conditions)
-	return events
-
-
-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)
-		)
-		and docstatus = 1"""
-	if conditions:
-		query += conditions
-
-	records = frappe.db.sql(query, {"start_date": start, "end_date": end}, as_dict=True)
-	shift_timing_map = get_shift_type_timing([d.shift_type for d in records])
-
-	for d in records:
-		daily_event_start = d.start_date
-		daily_event_end = d.end_date if d.end_date else getdate()
-		delta = timedelta(days=1)
-		while daily_event_start <= daily_event_end:
-			start_timing = (
-				frappe.utils.get_datetime(daily_event_start) + shift_timing_map[d.shift_type]["start_time"]
-			)
-			end_timing = (
-				frappe.utils.get_datetime(daily_event_start) + shift_timing_map[d.shift_type]["end_time"]
-			)
-			daily_event_start += delta
-			e = {
-				"name": d.name,
-				"doctype": "Shift Assignment",
-				"start_date": start_timing,
-				"end_date": end_timing,
-				"title": cstr(d.employee_name) + ": " + cstr(d.shift_type),
-				"docstatus": d.docstatus,
-				"allDay": 0,
-			}
-			if e not in events:
-				events.append(e)
-
-	return events
-
-
-def get_shift_type_timing(shift_types):
-	shift_timing_map = {}
-	data = frappe.get_all(
-		"Shift Type", filters={"name": ("IN", shift_types)}, fields=["name", "start_time", "end_time"]
-	)
-
-	for d in data:
-		shift_timing_map[d.name] = d
-
-	return shift_timing_map
-
-
-def get_shift_for_time(shifts: List[Dict], for_timestamp: datetime) -> Dict:
-	"""Returns shift with details for given timestamp"""
-	valid_shifts = []
-
-	for entry in shifts:
-		shift_details = get_shift_details(entry.shift_type, for_timestamp=for_timestamp)
-
-		if (
-			get_datetime(shift_details.actual_start)
-			<= get_datetime(for_timestamp)
-			<= get_datetime(shift_details.actual_end)
-		):
-			valid_shifts.append(shift_details)
-
-	valid_shifts.sort(key=lambda x: x["actual_start"])
-
-	if len(valid_shifts) > 1:
-		for i in range(len(valid_shifts) - 1):
-			# comparing 2 consecutive shifts and adjusting start and end times
-			# if they are overlapping within grace period
-			curr_shift = valid_shifts[i]
-			next_shift = valid_shifts[i + 1]
-
-			if curr_shift and next_shift:
-				next_shift.actual_start = (
-					curr_shift.end_datetime
-					if next_shift.actual_start < curr_shift.end_datetime
-					else next_shift.actual_start
-				)
-				curr_shift.actual_end = (
-					next_shift.actual_start
-					if curr_shift.actual_end > next_shift.actual_start
-					else curr_shift.actual_end
-				)
-
-			valid_shifts[i] = curr_shift
-			valid_shifts[i + 1] = next_shift
-
-		return get_exact_shift(valid_shifts, for_timestamp) or {}
-
-	return (valid_shifts and valid_shifts[0]) or {}
-
-
-def get_shifts_for_date(employee: str, for_timestamp: datetime) -> List[Dict[str, str]]:
-	"""Returns list of shifts with details for given date"""
-	assignment = frappe.qb.DocType("Shift Assignment")
-
-	return (
-		frappe.qb.from_(assignment)
-		.select(assignment.name, assignment.shift_type)
-		.where(
-			(assignment.employee == employee)
-			& (assignment.docstatus == 1)
-			& (assignment.status == "Active")
-			& (assignment.start_date <= getdate(for_timestamp.date()))
-			& (
-				Criterion.any(
-					[
-						assignment.end_date.isnull(),
-						(assignment.end_date.isnotnull() & (getdate(for_timestamp.date()) <= assignment.end_date)),
-					]
-				)
-			)
-		)
-	).run(as_dict=True)
-
-
-def get_shift_for_timestamp(employee: str, for_timestamp: datetime) -> Dict:
-	shifts = get_shifts_for_date(employee, for_timestamp)
-	if shifts:
-		return get_shift_for_time(shifts, for_timestamp)
-	return {}
-
-
-def get_employee_shift(
-	employee: str,
-	for_timestamp: datetime = None,
-	consider_default_shift: bool = False,
-	next_shift_direction: str = None,
-) -> Dict:
-	"""Returns a Shift Type for the given employee on the given date. (excluding the holidays)
-
-	:param employee: Employee for which shift is required.
-	:param for_timestamp: DateTime on which shift is required
-	:param consider_default_shift: If set to true, default shift is taken when no shift assignment is found.
-	:param next_shift_direction: One of: None, 'forward', 'reverse'. Direction to look for next shift if shift not found on given date.
-	"""
-	if for_timestamp is None:
-		for_timestamp = now_datetime()
-
-	shift_details = get_shift_for_timestamp(employee, for_timestamp)
-
-	# if shift assignment is not found, consider default shift
-	default_shift = frappe.db.get_value("Employee", employee, "default_shift")
-	if not shift_details and consider_default_shift:
-		shift_details = get_shift_details(default_shift, for_timestamp)
-
-	# if its a holiday, reset
-	if shift_details and is_holiday_date(employee, shift_details):
-		shift_details = None
-
-	# if no shift is found, find next or prev shift assignment based on direction
-	if not shift_details and next_shift_direction:
-		shift_details = get_prev_or_next_shift(
-			employee, for_timestamp, consider_default_shift, default_shift, next_shift_direction
-		)
-
-	return shift_details or {}
-
-
-def get_prev_or_next_shift(
-	employee: str,
-	for_timestamp: datetime,
-	consider_default_shift: bool,
-	default_shift: str,
-	next_shift_direction: str,
-) -> Dict:
-	"""Returns a dict of shift details for the next or prev shift based on the next_shift_direction"""
-	MAX_DAYS = 366
-	shift_details = {}
-
-	if consider_default_shift and default_shift:
-		direction = -1 if next_shift_direction == "reverse" else 1
-		for i in range(MAX_DAYS):
-			date = for_timestamp + timedelta(days=direction * (i + 1))
-			shift_details = get_employee_shift(employee, date, consider_default_shift, None)
-			if shift_details:
-				break
-	else:
-		direction = "<" if next_shift_direction == "reverse" else ">"
-		sort_order = "desc" if next_shift_direction == "reverse" else "asc"
-		dates = frappe.db.get_all(
-			"Shift Assignment",
-			["start_date", "end_date"],
-			{
-				"employee": employee,
-				"start_date": (direction, for_timestamp.date()),
-				"docstatus": 1,
-				"status": "Active",
-			},
-			as_list=True,
-			limit=MAX_DAYS,
-			order_by="start_date " + sort_order,
-		)
-
-		if dates:
-			for date in dates:
-				if date[1] and date[1] < for_timestamp.date():
-					continue
-				shift_details = get_employee_shift(
-					employee, datetime.combine(date[0], for_timestamp.time()), consider_default_shift, None
-				)
-				if shift_details:
-					break
-
-	return shift_details or {}
-
-
-def is_holiday_date(employee: str, shift_details: Dict) -> bool:
-	holiday_list_name = frappe.db.get_value(
-		"Shift Type", shift_details.shift_type.name, "holiday_list"
-	)
-
-	if not holiday_list_name:
-		holiday_list_name = get_holiday_list_for_employee(employee, False)
-
-	return holiday_list_name and is_holiday(holiday_list_name, shift_details.start_datetime.date())
-
-
-def get_employee_shift_timings(
-	employee: str, for_timestamp: datetime = None, consider_default_shift: bool = False
-) -> List[Dict]:
-	"""Returns previous shift, current/upcoming shift, next_shift for the given timestamp and employee"""
-	if for_timestamp is None:
-		for_timestamp = now_datetime()
-
-	# write and verify a test case for midnight shift.
-	prev_shift = curr_shift = next_shift = None
-	curr_shift = get_employee_shift(employee, for_timestamp, consider_default_shift, "forward")
-	if curr_shift:
-		next_shift = get_employee_shift(
-			employee, curr_shift.start_datetime + timedelta(days=1), consider_default_shift, "forward"
-		)
-	prev_shift = get_employee_shift(
-		employee, for_timestamp + timedelta(days=-1), consider_default_shift, "reverse"
-	)
-
-	if curr_shift:
-		# adjust actual start and end times if they are overlapping with grace period (before start and after end)
-		if prev_shift:
-			curr_shift.actual_start = (
-				prev_shift.end_datetime
-				if curr_shift.actual_start < prev_shift.end_datetime
-				else curr_shift.actual_start
-			)
-			prev_shift.actual_end = (
-				curr_shift.actual_start
-				if prev_shift.actual_end > curr_shift.actual_start
-				else prev_shift.actual_end
-			)
-		if next_shift:
-			next_shift.actual_start = (
-				curr_shift.end_datetime
-				if next_shift.actual_start < curr_shift.end_datetime
-				else next_shift.actual_start
-			)
-			curr_shift.actual_end = (
-				next_shift.actual_start
-				if curr_shift.actual_end > next_shift.actual_start
-				else curr_shift.actual_end
-			)
-
-	return prev_shift, curr_shift, next_shift
-
-
-def get_actual_start_end_datetime_of_shift(
-	employee: str, for_timestamp: datetime, consider_default_shift: bool = False
-) -> Dict:
-	"""Returns a Dict containing shift details with actual_start and actual_end datetime values
-	Here 'actual' means taking into account the "begin_check_in_before_shift_start_time" and "allow_check_out_after_shift_end_time".
-	Empty Dict is returned if the timestamp is outside any actual shift timings.
-
-	:param employee (str): Employee name
-	:param for_timestamp (datetime, optional): Datetime value of checkin, if not provided considers current datetime
-	:param consider_default_shift (bool, optional): Flag (defaults to False) to specify whether to consider
-	default shift in employee master if no shift assignment is found
-	"""
-	shift_timings_as_per_timestamp = get_employee_shift_timings(
-		employee, for_timestamp, consider_default_shift
-	)
-	return get_exact_shift(shift_timings_as_per_timestamp, for_timestamp)
-
-
-def get_exact_shift(shifts: List, for_timestamp: datetime) -> Dict:
-	"""Returns the shift details (dict) for the exact shift in which the 'for_timestamp' value falls among multiple shifts"""
-	shift_details = dict()
-	timestamp_list = []
-
-	for shift in shifts:
-		if shift:
-			timestamp_list.extend([shift.actual_start, shift.actual_end])
-		else:
-			timestamp_list.extend([None, None])
-
-	timestamp_index = None
-	for index, timestamp in enumerate(timestamp_list):
-		if not timestamp:
-			continue
-
-		if for_timestamp < timestamp:
-			timestamp_index = index
-		elif for_timestamp == timestamp:
-			# on timestamp boundary
-			if index % 2 == 1:
-				timestamp_index = index
-			else:
-				timestamp_index = index + 1
-
-		if timestamp_index:
-			break
-
-	if timestamp_index and timestamp_index % 2 == 1:
-		shift_details = shifts[int((timestamp_index - 1) / 2)]
-
-	return shift_details
-
-
-def get_shift_details(shift_type_name: str, for_timestamp: datetime = None) -> Dict:
-	"""Returns a Dict containing shift details with the following data:
-	'shift_type' - Object of DocType Shift Type,
-	'start_datetime' - datetime of shift start on given timestamp,
-	'end_datetime' - datetime of shift end on given timestamp,
-	'actual_start' - datetime of shift start after adding 'begin_check_in_before_shift_start_time',
-	'actual_end' - datetime of shift end after adding 'allow_check_out_after_shift_end_time' (None is returned if this is zero)
-
-	:param shift_type_name (str): shift type name for which shift_details are required.
-	:param for_timestamp (datetime, optional): Datetime value of checkin, if not provided considers current datetime
-	"""
-	if not shift_type_name:
-		return {}
-
-	if for_timestamp is None:
-		for_timestamp = now_datetime()
-
-	shift_type = frappe.get_doc("Shift Type", shift_type_name)
-	shift_actual_start = shift_type.start_time - timedelta(
-		minutes=shift_type.begin_check_in_before_shift_start_time
-	)
-
-	if shift_type.start_time > shift_type.end_time:
-		# shift spans accross 2 different days
-		if get_time(for_timestamp.time()) >= get_time(shift_actual_start):
-			# if for_timestamp is greater than start time, it's within the first day
-			start_datetime = datetime.combine(for_timestamp, datetime.min.time()) + shift_type.start_time
-			for_timestamp = for_timestamp + timedelta(days=1)
-			end_datetime = datetime.combine(for_timestamp, datetime.min.time()) + shift_type.end_time
-
-		elif get_time(for_timestamp.time()) < get_time(shift_actual_start):
-			# if for_timestamp is less than start time, it's within the second day
-			end_datetime = datetime.combine(for_timestamp, datetime.min.time()) + shift_type.end_time
-			for_timestamp = for_timestamp + timedelta(days=-1)
-			start_datetime = datetime.combine(for_timestamp, datetime.min.time()) + shift_type.start_time
-	else:
-		# start and end timings fall on the same day
-		start_datetime = datetime.combine(for_timestamp, datetime.min.time()) + shift_type.start_time
-		end_datetime = datetime.combine(for_timestamp, datetime.min.time()) + shift_type.end_time
-
-	actual_start = start_datetime - timedelta(
-		minutes=shift_type.begin_check_in_before_shift_start_time
-	)
-	actual_end = end_datetime + timedelta(minutes=shift_type.allow_check_out_after_shift_end_time)
-
-	return frappe._dict(
-		{
-			"shift_type": shift_type,
-			"start_datetime": start_datetime,
-			"end_datetime": end_datetime,
-			"actual_start": actual_start,
-			"actual_end": actual_end,
-		}
-	)
diff --git a/erpnext/hr/doctype/shift_assignment/shift_assignment_calendar.js b/erpnext/hr/doctype/shift_assignment/shift_assignment_calendar.js
deleted file mode 100644
index 5d2360f..0000000
--- a/erpnext/hr/doctype/shift_assignment/shift_assignment_calendar.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.views.calendar["Shift Assignment"] = {
-	field_map: {
-		"start": "start_date",
-		"end": "end_date",
-		"id": "name",
-		"docstatus": 1,
-		"allDay": "allDay",
-	},
-	get_events_method: "erpnext.hr.doctype.shift_assignment.shift_assignment.get_events"
-}
diff --git a/erpnext/hr/doctype/shift_assignment/test_shift_assignment.py b/erpnext/hr/doctype/shift_assignment/test_shift_assignment.py
deleted file mode 100644
index de82a24..0000000
--- a/erpnext/hr/doctype/shift_assignment/test_shift_assignment.py
+++ /dev/null
@@ -1,171 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-import frappe
-from frappe.tests.utils import FrappeTestCase
-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, get_events
-from erpnext.hr.doctype.shift_type.test_shift_type import make_shift_assignment, setup_shift_type
-
-test_dependencies = ["Shift Type"]
-
-
-class TestShiftAssignment(FrappeTestCase):
-	def setUp(self):
-		frappe.db.delete("Shift Assignment")
-		frappe.db.delete("Shift Type")
-
-	def test_make_shift_assignment(self):
-		setup_shift_type(shift_type="Day Shift")
-		shift_assignment = frappe.get_doc(
-			{
-				"doctype": "Shift Assignment",
-				"shift_type": "Day Shift",
-				"company": "_Test Company",
-				"employee": "_T-Employee-00001",
-				"start_date": nowdate(),
-			}
-		).insert()
-		shift_assignment.submit()
-
-		self.assertEqual(shift_assignment.docstatus, 1)
-
-	def test_overlapping_for_ongoing_shift(self):
-		# shift should be Ongoing if Only start_date is present and status = Active
-		setup_shift_type(shift_type="Day Shift")
-		shift_assignment_1 = frappe.get_doc(
-			{
-				"doctype": "Shift Assignment",
-				"shift_type": "Day Shift",
-				"company": "_Test Company",
-				"employee": "_T-Employee-00001",
-				"start_date": nowdate(),
-				"status": "Active",
-			}
-		).insert()
-		shift_assignment_1.submit()
-
-		self.assertEqual(shift_assignment_1.docstatus, 1)
-
-		shift_assignment = frappe.get_doc(
-			{
-				"doctype": "Shift Assignment",
-				"shift_type": "Day Shift",
-				"company": "_Test Company",
-				"employee": "_T-Employee-00001",
-				"start_date": add_days(nowdate(), 2),
-			}
-		)
-
-		self.assertRaises(OverlappingShiftError, shift_assignment.save)
-
-	def test_overlapping_for_fixed_period_shift(self):
-		# shift should is for Fixed period if Only start_date and end_date both are present and status = Active
-		setup_shift_type(shift_type="Day Shift")
-		shift_assignment_1 = frappe.get_doc(
-			{
-				"doctype": "Shift Assignment",
-				"shift_type": "Day Shift",
-				"company": "_Test Company",
-				"employee": "_T-Employee-00001",
-				"start_date": nowdate(),
-				"end_date": add_days(nowdate(), 30),
-				"status": "Active",
-			}
-		).insert()
-		shift_assignment_1.submit()
-
-		# it should not allowed within period of any shift.
-		shift_assignment_3 = frappe.get_doc(
-			{
-				"doctype": "Shift Assignment",
-				"shift_type": "Day Shift",
-				"company": "_Test Company",
-				"employee": "_T-Employee-00001",
-				"start_date": add_days(nowdate(), 10),
-				"end_date": add_days(nowdate(), 35),
-				"status": "Active",
-			}
-		)
-
-		self.assertRaises(OverlappingShiftError, shift_assignment_3.save)
-
-	def test_overlapping_for_a_fixed_period_shift_and_ongoing_shift(self):
-		employee = make_employee("test_shift_assignment@example.com", company="_Test Company")
-
-		# shift setup for 8-12
-		shift_type = setup_shift_type(shift_type="Shift 1", start_time="08:00:00", end_time="12:00:00")
-		date = getdate()
-		# shift with end date
-		make_shift_assignment(shift_type.name, employee, date, add_days(date, 30))
-
-		# shift setup for 11-15
-		shift_type = setup_shift_type(shift_type="Shift 2", start_time="11:00:00", end_time="15:00:00")
-		date = getdate()
-
-		# shift assignment without end date
-		shift2 = frappe.get_doc(
-			{
-				"doctype": "Shift Assignment",
-				"shift_type": shift_type.name,
-				"company": "_Test Company",
-				"employee": employee,
-				"start_date": date,
-			}
-		)
-		self.assertRaises(OverlappingShiftError, shift2.insert)
-
-	def test_overlap_validation_for_shifts_on_same_day_with_overlapping_timeslots(self):
-		employee = make_employee("test_shift_assignment@example.com", company="_Test Company")
-
-		# shift setup for 8-12
-		shift_type = setup_shift_type(shift_type="Shift 1", start_time="08:00:00", end_time="12:00:00")
-		date = getdate()
-		make_shift_assignment(shift_type.name, employee, date)
-
-		# shift setup for 11-15
-		shift_type = setup_shift_type(shift_type="Shift 2", start_time="11:00:00", end_time="15:00:00")
-		date = getdate()
-
-		shift2 = frappe.get_doc(
-			{
-				"doctype": "Shift Assignment",
-				"shift_type": shift_type.name,
-				"company": "_Test Company",
-				"employee": employee,
-				"start_date": date,
-			}
-		)
-		self.assertRaises(OverlappingShiftError, shift2.insert)
-
-	def test_multiple_shift_assignments_for_same_day(self):
-		employee = make_employee("test_shift_assignment@example.com", company="_Test Company")
-
-		# shift setup for 8-12
-		shift_type = setup_shift_type(shift_type="Shift 1", start_time="08:00:00", end_time="12:00:00")
-		date = getdate()
-		make_shift_assignment(shift_type.name, employee, date)
-
-		# shift setup for 13-15
-		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)
diff --git a/erpnext/hr/doctype/shift_request/__init__.py b/erpnext/hr/doctype/shift_request/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/shift_request/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/shift_request/shift_request.js b/erpnext/hr/doctype/shift_request/shift_request.js
deleted file mode 100644
index b17a6f3..0000000
--- a/erpnext/hr/doctype/shift_request/shift_request.js
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Shift Request', {
-	setup: function(frm) {
-		frm.set_query("approver", function() {
-			return {
-				query: "erpnext.hr.doctype.department_approver.department_approver.get_approvers",
-				filters: {
-					employee: frm.doc.employee,
-					doctype: frm.doc.doctype
-				}
-			};
-		});
-		frm.set_query("employee", erpnext.queries.employee);
-	},
-});
diff --git a/erpnext/hr/doctype/shift_request/shift_request.json b/erpnext/hr/doctype/shift_request/shift_request.json
deleted file mode 100644
index 64cbdff..0000000
--- a/erpnext/hr/doctype/shift_request/shift_request.json
+++ /dev/null
@@ -1,155 +0,0 @@
-{
- "actions": [],
- "allow_import": 1,
- "autoname": "HR-SHR-.YY.-.MM.-.#####",
- "creation": "2018-04-13 16:32:27.974273",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "shift_type",
-  "employee",
-  "employee_name",
-  "department",
-  "status",
-  "column_break_4",
-  "company",
-  "approver",
-  "from_date",
-  "to_date",
-  "amended_from"
- ],
- "fields": [
-  {
-   "fieldname": "shift_type",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Shift Type",
-   "options": "Shift Type",
-   "reqd": 1
-  },
-  {
-   "fieldname": "employee",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Employee",
-   "options": "Employee",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "employee.employee_name",
-   "fieldname": "employee_name",
-   "fieldtype": "Data",
-   "label": "Employee Name",
-   "read_only": 1
-  },
-  {
-   "fetch_from": "employee.department",
-   "fieldname": "department",
-   "fieldtype": "Link",
-   "label": "Department",
-   "options": "Department",
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break_4",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Company",
-   "options": "Company",
-   "reqd": 1
-  },
-  {
-   "fieldname": "from_date",
-   "fieldtype": "Date",
-   "label": "From Date",
-   "reqd": 1
-  },
-  {
-   "fieldname": "to_date",
-   "fieldtype": "Date",
-   "label": "To Date"
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "Shift Request",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "default": "Draft",
-   "fieldname": "status",
-   "fieldtype": "Select",
-   "label": "Status",
-   "options": "Draft\nApproved\nRejected",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "employee.shift_request_approver",
-   "fetch_if_empty": 1,
-   "fieldname": "approver",
-   "fieldtype": "Link",
-   "label": "Approver",
-   "options": "User",
-   "reqd": 1
-  }
- ],
- "is_submittable": 1,
- "links": [],
- "modified": "2020-08-10 17:59:31.550558",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Shift Request",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "Employee",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  }
- ],
- "sort_field": "modified",
- "sort_order": "DESC",
- "title_field": "employee_name",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/shift_request/shift_request.py b/erpnext/hr/doctype/shift_request/shift_request.py
deleted file mode 100644
index 2bee240..0000000
--- a/erpnext/hr/doctype/shift_request/shift_request.py
+++ /dev/null
@@ -1,140 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.query_builder import Criterion
-from frappe.utils import get_link_to_form, getdate
-
-from erpnext.hr.doctype.shift_assignment.shift_assignment import has_overlapping_timings
-from erpnext.hr.utils import share_doc_with_approver, validate_active_employee
-
-
-class OverlappingShiftRequestError(frappe.ValidationError):
-	pass
-
-
-class ShiftRequest(Document):
-	def validate(self):
-		validate_active_employee(self.employee)
-		self.validate_dates()
-		self.validate_overlapping_shift_requests()
-		self.validate_approver()
-		self.validate_default_shift()
-
-	def on_update(self):
-		share_doc_with_approver(self, self.approver)
-
-	def on_submit(self):
-		if self.status not in ["Approved", "Rejected"]:
-			frappe.throw(_("Only Shift Request with status 'Approved' and 'Rejected' can be submitted"))
-		if self.status == "Approved":
-			assignment_doc = frappe.new_doc("Shift Assignment")
-			assignment_doc.company = self.company
-			assignment_doc.shift_type = self.shift_type
-			assignment_doc.employee = self.employee
-			assignment_doc.start_date = self.from_date
-			if self.to_date:
-				assignment_doc.end_date = self.to_date
-			assignment_doc.shift_request = self.name
-			assignment_doc.flags.ignore_permissions = 1
-			assignment_doc.insert()
-			assignment_doc.submit()
-
-			frappe.msgprint(
-				_("Shift Assignment: {0} created for Employee: {1}").format(
-					frappe.bold(assignment_doc.name), frappe.bold(self.employee)
-				)
-			)
-
-	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_default_shift(self):
-		default_shift = frappe.get_value("Employee", self.employee, "default_shift")
-		if self.shift_type == default_shift:
-			frappe.throw(
-				_("You can not request for your Default Shift: {0}").format(frappe.bold(self.shift_type))
-			)
-
-	def validate_approver(self):
-		department = frappe.get_value("Employee", self.employee, "department")
-		shift_approver = frappe.get_value("Employee", self.employee, "shift_request_approver")
-		approvers = frappe.db.sql(
-			"""select approver from `tabDepartment Approver` where parent= %s and parentfield = 'shift_request_approver'""",
-			(department),
-		)
-		approvers = [approver[0] for approver in approvers]
-		approvers.append(shift_approver)
-		if self.approver not in approvers:
-			frappe.throw(_("Only Approvers can Approve this Request."))
-
-	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"))
-
-	def validate_overlapping_shift_requests(self):
-		overlapping_dates = self.get_overlapping_dates()
-		if len(overlapping_dates):
-			# if dates are overlapping, check if timings are overlapping, else allow
-			overlapping_timings = has_overlapping_timings(self.shift_type, overlapping_dates[0].shift_type)
-			if overlapping_timings:
-				self.throw_overlap_error(overlapping_dates[0])
-
-	def get_overlapping_dates(self):
-		if not self.name:
-			self.name = "New Shift Request"
-
-		shift = frappe.qb.DocType("Shift Request")
-		query = (
-			frappe.qb.from_(shift)
-			.select(shift.name, shift.shift_type)
-			.where((shift.employee == self.employee) & (shift.docstatus < 2) & (shift.name != self.name))
-		)
-
-		if self.to_date:
-			query = query.where(
-				Criterion.any(
-					[
-						Criterion.any(
-							[
-								shift.to_date.isnull(),
-								((self.from_date >= shift.from_date) & (self.from_date <= shift.to_date)),
-							]
-						),
-						Criterion.any(
-							[
-								((self.to_date >= shift.from_date) & (self.to_date <= shift.to_date)),
-								shift.from_date.between(self.from_date, self.to_date),
-							]
-						),
-					]
-				)
-			)
-		else:
-			query = query.where(
-				shift.to_date.isnull()
-				| ((self.from_date >= shift.from_date) & (self.from_date <= shift.to_date))
-			)
-
-		return query.run(as_dict=True)
-
-	def throw_overlap_error(self, shift_details):
-		shift_details = frappe._dict(shift_details)
-		msg = _(
-			"Employee {0} has already applied for Shift {1}: {2} that overlaps within this period"
-		).format(
-			frappe.bold(self.employee),
-			frappe.bold(shift_details.shift_type),
-			get_link_to_form("Shift Request", shift_details.name),
-		)
-
-		frappe.throw(msg, title=_("Overlapping Shift Requests"), exc=OverlappingShiftRequestError)
diff --git a/erpnext/hr/doctype/shift_request/shift_request_dashboard.py b/erpnext/hr/doctype/shift_request/shift_request_dashboard.py
deleted file mode 100644
index 2859b8f..0000000
--- a/erpnext/hr/doctype/shift_request/shift_request_dashboard.py
+++ /dev/null
@@ -1,7 +0,0 @@
-def get_data():
-	return {
-		"fieldname": "shift_request",
-		"transactions": [
-			{"items": ["Shift Assignment"]},
-		],
-	}
diff --git a/erpnext/hr/doctype/shift_request/test_shift_request.py b/erpnext/hr/doctype/shift_request/test_shift_request.py
deleted file mode 100644
index c47418c..0000000
--- a/erpnext/hr/doctype/shift_request/test_shift_request.py
+++ /dev/null
@@ -1,258 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-import frappe
-from frappe.tests.utils import FrappeTestCase
-from frappe.utils import add_days, nowdate
-
-from erpnext.hr.doctype.employee.test_employee import make_employee
-from erpnext.hr.doctype.shift_request.shift_request import OverlappingShiftRequestError
-from erpnext.hr.doctype.shift_type.test_shift_type import setup_shift_type
-
-test_dependencies = ["Shift Type"]
-
-
-class TestShiftRequest(FrappeTestCase):
-	def setUp(self):
-		for doctype in ["Shift Request", "Shift Assignment", "Shift Type"]:
-			frappe.db.delete(doctype)
-
-	def test_make_shift_request(self):
-		"Test creation/updation of Shift Assignment from Shift Request."
-		setup_shift_type(shift_type="Day Shift")
-		department = frappe.get_value("Employee", "_T-Employee-00001", "department")
-		set_shift_approver(department)
-		approver = frappe.db.sql(
-			"""select approver from `tabDepartment Approver` where parent= %s and parentfield = 'shift_request_approver'""",
-			(department),
-		)[0][0]
-
-		shift_request = make_shift_request(approver)
-
-		# Only one shift assignment is created against a shift request
-		shift_assignment = frappe.db.get_value(
-			"Shift Assignment",
-			filters={"shift_request": shift_request.name},
-			fieldname=["employee", "docstatus"],
-			as_dict=True,
-		)
-		self.assertEqual(shift_request.employee, shift_assignment.employee)
-		self.assertEqual(shift_assignment.docstatus, 1)
-
-		shift_request.cancel()
-
-		shift_assignment_docstatus = frappe.db.get_value(
-			"Shift Assignment", filters={"shift_request": shift_request.name}, fieldname="docstatus"
-		)
-		self.assertEqual(shift_assignment_docstatus, 2)
-
-	def test_shift_request_approver_perms(self):
-		setup_shift_type(shift_type="Day Shift")
-		employee = frappe.get_doc("Employee", "_T-Employee-00001")
-		user = "test_approver_perm_emp@example.com"
-		make_employee(user, "_Test Company")
-
-		# set approver for employee
-		employee.reload()
-		employee.shift_request_approver = user
-		employee.save()
-
-		shift_request = make_shift_request(user, do_not_submit=True)
-		self.assertTrue(shift_request.name in frappe.share.get_shared("Shift Request", user))
-
-		# check shared doc revoked
-		shift_request.reload()
-		department = frappe.get_value("Employee", "_T-Employee-00001", "department")
-		set_shift_approver(department)
-		department_approver = frappe.db.sql(
-			"""select approver from `tabDepartment Approver` where parent= %s and parentfield = 'shift_request_approver'""",
-			(department),
-		)[0][0]
-		shift_request.approver = department_approver
-		shift_request.save()
-		self.assertTrue(shift_request.name not in frappe.share.get_shared("Shift Request", user))
-
-		shift_request.reload()
-		shift_request.approver = user
-		shift_request.save()
-
-		frappe.set_user(user)
-		shift_request.reload()
-		shift_request.status = "Approved"
-		shift_request.submit()
-
-		# unset approver
-		frappe.set_user("Administrator")
-		employee.reload()
-		employee.shift_request_approver = ""
-		employee.save()
-
-	def test_overlap_for_request_without_to_date(self):
-		# shift should be Ongoing if Only from_date is present
-		user = "test_shift_request@example.com"
-		employee = make_employee(user, company="_Test Company", shift_request_approver=user)
-		setup_shift_type(shift_type="Day Shift")
-
-		shift_request = frappe.get_doc(
-			{
-				"doctype": "Shift Request",
-				"shift_type": "Day Shift",
-				"company": "_Test Company",
-				"employee": employee,
-				"from_date": nowdate(),
-				"approver": user,
-				"status": "Approved",
-			}
-		).submit()
-
-		shift_request = frappe.get_doc(
-			{
-				"doctype": "Shift Request",
-				"shift_type": "Day Shift",
-				"company": "_Test Company",
-				"employee": employee,
-				"from_date": add_days(nowdate(), 2),
-				"approver": user,
-				"status": "Approved",
-			}
-		)
-
-		self.assertRaises(OverlappingShiftRequestError, shift_request.save)
-
-	def test_overlap_for_request_with_from_and_to_dates(self):
-		user = "test_shift_request@example.com"
-		employee = make_employee(user, company="_Test Company", shift_request_approver=user)
-		setup_shift_type(shift_type="Day Shift")
-
-		shift_request = frappe.get_doc(
-			{
-				"doctype": "Shift Request",
-				"shift_type": "Day Shift",
-				"company": "_Test Company",
-				"employee": employee,
-				"from_date": nowdate(),
-				"to_date": add_days(nowdate(), 30),
-				"approver": user,
-				"status": "Approved",
-			}
-		).submit()
-
-		shift_request = frappe.get_doc(
-			{
-				"doctype": "Shift Request",
-				"shift_type": "Day Shift",
-				"company": "_Test Company",
-				"employee": employee,
-				"from_date": add_days(nowdate(), 10),
-				"to_date": add_days(nowdate(), 35),
-				"approver": user,
-				"status": "Approved",
-			}
-		)
-
-		self.assertRaises(OverlappingShiftRequestError, shift_request.save)
-
-	def test_overlapping_for_a_fixed_period_shift_and_ongoing_shift(self):
-		user = "test_shift_request@example.com"
-		employee = make_employee(user, company="_Test Company", shift_request_approver=user)
-
-		# shift setup for 8-12
-		shift_type = setup_shift_type(shift_type="Shift 1", start_time="08:00:00", end_time="12:00:00")
-		date = nowdate()
-
-		# shift with end date
-		frappe.get_doc(
-			{
-				"doctype": "Shift Request",
-				"shift_type": shift_type.name,
-				"company": "_Test Company",
-				"employee": employee,
-				"from_date": date,
-				"to_date": add_days(date, 30),
-				"approver": user,
-				"status": "Approved",
-			}
-		).submit()
-
-		# shift setup for 11-15
-		shift_type = setup_shift_type(shift_type="Shift 2", start_time="11:00:00", end_time="15:00:00")
-		shift2 = frappe.get_doc(
-			{
-				"doctype": "Shift Request",
-				"shift_type": shift_type.name,
-				"company": "_Test Company",
-				"employee": employee,
-				"from_date": date,
-				"approver": user,
-				"status": "Approved",
-			}
-		)
-
-		self.assertRaises(OverlappingShiftRequestError, shift2.insert)
-
-	def test_allow_non_overlapping_shift_requests_for_same_day(self):
-		user = "test_shift_request@example.com"
-		employee = make_employee(user, company="_Test Company", shift_request_approver=user)
-
-		# shift setup for 8-12
-		shift_type = setup_shift_type(shift_type="Shift 1", start_time="08:00:00", end_time="12:00:00")
-		date = nowdate()
-
-		# shift with end date
-		frappe.get_doc(
-			{
-				"doctype": "Shift Request",
-				"shift_type": shift_type.name,
-				"company": "_Test Company",
-				"employee": employee,
-				"from_date": date,
-				"to_date": add_days(date, 30),
-				"approver": user,
-				"status": "Approved",
-			}
-		).submit()
-
-		# shift setup for 13-15
-		shift_type = setup_shift_type(shift_type="Shift 2", start_time="13:00:00", end_time="15:00:00")
-		frappe.get_doc(
-			{
-				"doctype": "Shift Request",
-				"shift_type": shift_type.name,
-				"company": "_Test Company",
-				"employee": employee,
-				"from_date": date,
-				"approver": user,
-				"status": "Approved",
-			}
-		).submit()
-
-
-def set_shift_approver(department):
-	department_doc = frappe.get_doc("Department", department)
-	department_doc.append("shift_request_approver", {"approver": "test1@example.com"})
-	department_doc.save()
-	department_doc.reload()
-
-
-def make_shift_request(approver, do_not_submit=0):
-	shift_request = frappe.get_doc(
-		{
-			"doctype": "Shift Request",
-			"shift_type": "Day Shift",
-			"company": "_Test Company",
-			"employee": "_T-Employee-00001",
-			"employee_name": "_Test Employee",
-			"from_date": nowdate(),
-			"to_date": add_days(nowdate(), 10),
-			"approver": approver,
-			"status": "Approved",
-		}
-	).insert()
-
-	if do_not_submit:
-		return shift_request
-
-	shift_request.submit()
-	return shift_request
diff --git a/erpnext/hr/doctype/shift_type/__init__.py b/erpnext/hr/doctype/shift_type/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/shift_type/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/shift_type/shift_type.js b/erpnext/hr/doctype/shift_type/shift_type.js
deleted file mode 100644
index 7138e3b..0000000
--- a/erpnext/hr/doctype/shift_type/shift_type.js
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Shift Type', {
-	refresh: function(frm) {
-		frm.add_custom_button(
-			__('Mark Attendance'),
-			() => {
-				if (!frm.doc.enable_auto_attendance) {
-					frm.scroll_to_field('enable_auto_attendance');
-					frappe.throw(__('Please Enable Auto Attendance and complete the setup first.'));
-				}
-
-				if (!frm.doc.process_attendance_after) {
-					frm.scroll_to_field('process_attendance_after');
-					frappe.throw(__('Please set {0}.', [__('Process Attendance After').bold()]));
-				}
-
-				if (!frm.doc.last_sync_of_checkin) {
-					frm.scroll_to_field('last_sync_of_checkin');
-					frappe.throw(__('Please set {0}.', [__('Last Sync of Checkin').bold()]));
-				}
-
-				frm.call({
-					doc: frm.doc,
-					method: 'process_auto_attendance',
-					freeze: true,
-					callback: () => {
-						frappe.msgprint(__('Attendance has been marked as per employee check-ins'));
-					}
-				});
-			}
-		);
-	}
-});
diff --git a/erpnext/hr/doctype/shift_type/shift_type.json b/erpnext/hr/doctype/shift_type/shift_type.json
deleted file mode 100644
index 61f3d2c..0000000
--- a/erpnext/hr/doctype/shift_type/shift_type.json
+++ /dev/null
@@ -1,204 +0,0 @@
-{
- "autoname": "prompt",
- "creation": "2018-04-13 16:22:52.954783",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "start_time",
-  "end_time",
-  "column_break_3",
-  "holiday_list",
-  "enable_auto_attendance",
-  "auto_attendance_settings_section",
-  "determine_check_in_and_check_out",
-  "working_hours_calculation_based_on",
-  "begin_check_in_before_shift_start_time",
-  "allow_check_out_after_shift_end_time",
-  "column_break_10",
-  "working_hours_threshold_for_half_day",
-  "working_hours_threshold_for_absent",
-  "process_attendance_after",
-  "last_sync_of_checkin",
-  "grace_period_settings_auto_attendance_section",
-  "enable_entry_grace_period",
-  "late_entry_grace_period",
-  "column_break_18",
-  "enable_exit_grace_period",
-  "early_exit_grace_period"
- ],
- "fields": [
-  {
-   "fieldname": "start_time",
-   "fieldtype": "Time",
-   "in_list_view": 1,
-   "label": "Start Time",
-   "reqd": 1
-  },
-  {
-   "fieldname": "end_time",
-   "fieldtype": "Time",
-   "in_list_view": 1,
-   "label": "End Time",
-   "reqd": 1
-  },
-  {
-   "fieldname": "holiday_list",
-   "fieldtype": "Link",
-   "label": "Holiday List",
-   "options": "Holiday List"
-  },
-  {
-   "fieldname": "column_break_3",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "column_break_10",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "determine_check_in_and_check_out",
-   "fieldtype": "Select",
-   "label": "Determine Check-in and Check-out",
-   "options": "Alternating entries as IN and OUT during the same shift\nStrictly based on Log Type in Employee Checkin"
-  },
-  {
-   "fieldname": "working_hours_calculation_based_on",
-   "fieldtype": "Select",
-   "label": "Working Hours Calculation Based On",
-   "options": "First Check-in and Last Check-out\nEvery Valid Check-in and Check-out"
-  },
-  {
-   "description": "Working hours below which Half Day is marked. (Zero to disable)",
-   "fieldname": "working_hours_threshold_for_half_day",
-   "fieldtype": "Float",
-   "label": "Working Hours Threshold for Half Day",
-   "precision": "1"
-  },
-  {
-   "description": "Working hours below which Absent is marked. (Zero to disable)",
-   "fieldname": "working_hours_threshold_for_absent",
-   "fieldtype": "Float",
-   "label": "Working Hours Threshold for Absent",
-   "precision": "1"
-  },
-  {
-   "default": "60",
-   "description": "The time before the shift start time during which Employee Check-in is considered for attendance.",
-   "fieldname": "begin_check_in_before_shift_start_time",
-   "fieldtype": "Int",
-   "label": "Begin check-in before shift start time (in minutes)"
-  },
-  {
-   "default": "0",
-   "fieldname": "enable_entry_grace_period",
-   "fieldtype": "Check",
-   "label": "Enable Entry Grace Period"
-  },
-  {
-   "depends_on": "enable_entry_grace_period",
-   "description": "The time after the shift start time when check-in is considered as late (in minutes).",
-   "fieldname": "late_entry_grace_period",
-   "fieldtype": "Int",
-   "label": "Late Entry Grace Period"
-  },
-  {
-   "fieldname": "column_break_18",
-   "fieldtype": "Column Break"
-  },
-  {
-   "default": "0",
-   "fieldname": "enable_exit_grace_period",
-   "fieldtype": "Check",
-   "label": "Enable Exit Grace Period"
-  },
-  {
-   "depends_on": "eval:doc.enable_exit_grace_period",
-   "description": "The time before the shift end time when check-out is considered as early (in minutes).",
-   "fieldname": "early_exit_grace_period",
-   "fieldtype": "Int",
-   "label": "Early Exit Grace Period"
-  },
-  {
-   "default": "60",
-   "description": "Time after the end of shift during which check-out is considered for attendance.",
-   "fieldname": "allow_check_out_after_shift_end_time",
-   "fieldtype": "Int",
-   "label": "Allow check-out after shift end time (in minutes)"
-  },
-  {
-   "depends_on": "enable_auto_attendance",
-   "fieldname": "auto_attendance_settings_section",
-   "fieldtype": "Section Break",
-   "label": "Auto Attendance Settings"
-  },
-  {
-   "depends_on": "enable_auto_attendance",
-   "fieldname": "grace_period_settings_auto_attendance_section",
-   "fieldtype": "Section Break",
-   "label": "Grace Period Settings For Auto Attendance"
-  },
-  {
-   "default": "0",
-   "description": "Mark attendance based on 'Employee Checkin' for Employees assigned to this shift.",
-   "fieldname": "enable_auto_attendance",
-   "fieldtype": "Check",
-   "label": "Enable Auto Attendance"
-  },
-  {
-   "description": "Attendance will be marked automatically only after this date.",
-   "fieldname": "process_attendance_after",
-   "fieldtype": "Date",
-   "label": "Process Attendance After"
-  },
-  {
-   "description": "Last Known Successful Sync of Employee Checkin. Reset this only if you are sure that all Logs are synced from all the locations. Please don't modify this if you are unsure.",
-   "fieldname": "last_sync_of_checkin",
-   "fieldtype": "Datetime",
-   "label": "Last Sync of Checkin"
-  }
- ],
- "modified": "2019-07-30 01:05:24.660666",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Shift Type",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "Employee",
-   "share": 1
-  },
-  {
-   "create": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "write": 1
-  }
- ],
- "quick_entry": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/shift_type/shift_type.py b/erpnext/hr/doctype/shift_type/shift_type.py
deleted file mode 100644
index a61bb9e..0000000
--- a/erpnext/hr/doctype/shift_type/shift_type.py
+++ /dev/null
@@ -1,202 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import itertools
-from datetime import datetime, timedelta
-
-import frappe
-from frappe.model.document import Document
-from frappe.utils import cint, get_datetime, get_time, getdate
-
-from erpnext.buying.doctype.supplier_scorecard.supplier_scorecard import daterange
-from erpnext.hr.doctype.attendance.attendance import mark_attendance
-from erpnext.hr.doctype.employee.employee import get_holiday_list_for_employee
-from erpnext.hr.doctype.employee_checkin.employee_checkin import (
-	calculate_working_hours,
-	mark_attendance_and_link_log,
-)
-from erpnext.hr.doctype.holiday_list.holiday_list import is_holiday
-from erpnext.hr.doctype.shift_assignment.shift_assignment import (
-	get_employee_shift,
-	get_shift_details,
-)
-
-
-class ShiftType(Document):
-	@frappe.whitelist()
-	def process_auto_attendance(self):
-		if (
-			not cint(self.enable_auto_attendance)
-			or not self.process_attendance_after
-			or not self.last_sync_of_checkin
-		):
-			return
-
-		filters = {
-			"skip_auto_attendance": 0,
-			"attendance": ("is", "not set"),
-			"time": (">=", self.process_attendance_after),
-			"shift_actual_end": ("<", self.last_sync_of_checkin),
-			"shift": self.name,
-		}
-		logs = frappe.db.get_list(
-			"Employee Checkin", fields="*", filters=filters, order_by="employee,time"
-		)
-
-		for key, group in itertools.groupby(
-			logs, key=lambda x: (x["employee"], x["shift_actual_start"])
-		):
-			single_shift_logs = list(group)
-			(
-				attendance_status,
-				working_hours,
-				late_entry,
-				early_exit,
-				in_time,
-				out_time,
-			) = self.get_attendance(single_shift_logs)
-
-			mark_attendance_and_link_log(
-				single_shift_logs,
-				attendance_status,
-				key[1].date(),
-				working_hours,
-				late_entry,
-				early_exit,
-				in_time,
-				out_time,
-				self.name,
-			)
-
-		for employee in self.get_assigned_employee(self.process_attendance_after, True):
-			self.mark_absent_for_dates_with_no_attendance(employee)
-
-	def get_attendance(self, logs):
-		"""Return attendance_status, working_hours, late_entry, early_exit, in_time, out_time
-		for a set of logs belonging to a single shift.
-		Assumptions:
-		1. These logs belongs to a single shift, single employee and it's not in a holiday date.
-		2. Logs are in chronological order
-		"""
-		late_entry = early_exit = False
-		total_working_hours, in_time, out_time = calculate_working_hours(
-			logs, self.determine_check_in_and_check_out, self.working_hours_calculation_based_on
-		)
-		if (
-			cint(self.enable_entry_grace_period)
-			and in_time
-			and in_time > logs[0].shift_start + timedelta(minutes=cint(self.late_entry_grace_period))
-		):
-			late_entry = True
-
-		if (
-			cint(self.enable_exit_grace_period)
-			and out_time
-			and out_time < logs[0].shift_end - timedelta(minutes=cint(self.early_exit_grace_period))
-		):
-			early_exit = True
-
-		if (
-			self.working_hours_threshold_for_half_day
-			and total_working_hours < self.working_hours_threshold_for_half_day
-		):
-			return "Half Day", total_working_hours, late_entry, early_exit, in_time, out_time
-		if (
-			self.working_hours_threshold_for_absent
-			and total_working_hours < self.working_hours_threshold_for_absent
-		):
-			return "Absent", total_working_hours, late_entry, early_exit, in_time, out_time
-		return "Present", total_working_hours, late_entry, early_exit, in_time, out_time
-
-	def mark_absent_for_dates_with_no_attendance(self, employee):
-		"""Marks Absents for the given employee on working days in this shift which have no attendance marked.
-		The Absent is marked starting from 'process_attendance_after' or employee creation date.
-		"""
-		start_date, end_date = self.get_start_and_end_dates(employee)
-
-		# no shift assignment found, no need to process absent attendance records
-		if start_date is None:
-			return
-
-		holiday_list_name = self.holiday_list
-		if not holiday_list_name:
-			holiday_list_name = get_holiday_list_for_employee(employee, False)
-
-		start_time = get_time(self.start_time)
-
-		for date in daterange(getdate(start_date), getdate(end_date)):
-			if is_holiday(holiday_list_name, date):
-				# skip marking absent on a holiday
-				continue
-
-			timestamp = datetime.combine(date, start_time)
-			shift_details = get_employee_shift(employee, timestamp, True)
-
-			if shift_details and shift_details.shift_type.name == self.name:
-				attendance = mark_attendance(employee, date, "Absent", self.name)
-				if attendance:
-					frappe.get_doc(
-						{
-							"doctype": "Comment",
-							"comment_type": "Comment",
-							"reference_doctype": "Attendance",
-							"reference_name": attendance,
-							"content": frappe._("Employee was marked Absent due to missing Employee Checkins."),
-						}
-					).insert(ignore_permissions=True)
-
-	def get_start_and_end_dates(self, employee):
-		"""Returns start and end dates for checking attendance and marking absent
-		return: start date = max of `process_attendance_after` and DOJ
-		return: end date = min of shift before `last_sync_of_checkin` and Relieving Date
-		"""
-		date_of_joining, relieving_date, employee_creation = frappe.db.get_value(
-			"Employee", employee, ["date_of_joining", "relieving_date", "creation"]
-		)
-
-		if not date_of_joining:
-			date_of_joining = employee_creation.date()
-
-		start_date = max(getdate(self.process_attendance_after), date_of_joining)
-		end_date = None
-
-		shift_details = get_shift_details(self.name, get_datetime(self.last_sync_of_checkin))
-		last_shift_time = (
-			shift_details.actual_start if shift_details else get_datetime(self.last_sync_of_checkin)
-		)
-
-		# check if shift is found for 1 day before the last sync of checkin
-		# absentees are auto-marked 1 day after the shift to wait for any manual attendance records
-		prev_shift = get_employee_shift(employee, last_shift_time - timedelta(days=1), True, "reverse")
-		if prev_shift:
-			end_date = (
-				min(prev_shift.start_datetime.date(), relieving_date)
-				if relieving_date
-				else prev_shift.start_datetime.date()
-			)
-		else:
-			# no shift found
-			return None, None
-		return start_date, end_date
-
-	def get_assigned_employee(self, from_date=None, consider_default_shift=False):
-		filters = {"shift_type": self.name, "docstatus": "1"}
-		if from_date:
-			filters["start_date"] = (">", from_date)
-
-		assigned_employees = frappe.get_all("Shift Assignment", filters=filters, pluck="employee")
-
-		if consider_default_shift:
-			filters = {"default_shift": self.name, "status": ["!=", "Inactive"]}
-			default_shift_employees = frappe.get_all("Employee", filters=filters, pluck="name")
-
-			return list(set(assigned_employees + default_shift_employees))
-		return assigned_employees
-
-
-def process_auto_attendance_for_all_shifts():
-	shift_list = frappe.get_all("Shift Type", "name", {"enable_auto_attendance": "1"}, as_list=True)
-	for shift in shift_list:
-		doc = frappe.get_doc("Shift Type", shift[0])
-		doc.process_auto_attendance()
diff --git a/erpnext/hr/doctype/shift_type/shift_type_dashboard.py b/erpnext/hr/doctype/shift_type/shift_type_dashboard.py
deleted file mode 100644
index 920d8fd..0000000
--- a/erpnext/hr/doctype/shift_type/shift_type_dashboard.py
+++ /dev/null
@@ -1,8 +0,0 @@
-def get_data():
-	return {
-		"fieldname": "shift",
-		"non_standard_fieldnames": {"Shift Request": "shift_type", "Shift Assignment": "shift_type"},
-		"transactions": [
-			{"items": ["Attendance", "Employee Checkin", "Shift Request", "Shift Assignment"]}
-		],
-	}
diff --git a/erpnext/hr/doctype/shift_type/test_records.json b/erpnext/hr/doctype/shift_type/test_records.json
deleted file mode 100644
index 9040b91..0000000
--- a/erpnext/hr/doctype/shift_type/test_records.json
+++ /dev/null
@@ -1,8 +0,0 @@
-[
-  {
-    "doctype": "Shift Type",
-    "name": "Day Shift",
-    "start_time": "9:00:00",
-    "end_time": "18:00:00"
-  }
-]
diff --git a/erpnext/hr/doctype/shift_type/test_shift_type.py b/erpnext/hr/doctype/shift_type/test_shift_type.py
deleted file mode 100644
index 0d75292..0000000
--- a/erpnext/hr/doctype/shift_type/test_shift_type.py
+++ /dev/null
@@ -1,382 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-from datetime import datetime, timedelta
-
-import frappe
-from frappe.tests.utils import FrappeTestCase
-from frappe.utils import add_days, get_time, get_year_ending, get_year_start, getdate, now_datetime
-
-from erpnext.hr.doctype.employee.test_employee import make_employee
-from erpnext.hr.doctype.holiday_list.test_holiday_list import set_holiday_list
-from erpnext.hr.doctype.leave_application.test_leave_application import get_first_sunday
-from erpnext.payroll.doctype.salary_slip.test_salary_slip import make_holiday_list
-
-
-class TestShiftType(FrappeTestCase):
-	def setUp(self):
-		frappe.db.delete("Shift Type")
-		frappe.db.delete("Shift Assignment")
-		frappe.db.delete("Employee Checkin")
-		frappe.db.delete("Attendance")
-
-		from_date = get_year_start(getdate())
-		to_date = get_year_ending(getdate())
-		self.holiday_list = make_holiday_list(from_date=from_date, to_date=to_date)
-
-	def test_mark_attendance(self):
-		from erpnext.hr.doctype.employee_checkin.test_employee_checkin import make_checkin
-
-		employee = make_employee("test_employee_checkin@example.com", company="_Test Company")
-
-		shift_type = setup_shift_type()
-		date = getdate()
-		make_shift_assignment(shift_type.name, employee, date)
-
-		timestamp = datetime.combine(date, get_time("08:00:00"))
-		log_in = make_checkin(employee, timestamp)
-		self.assertEqual(log_in.shift, shift_type.name)
-
-		timestamp = datetime.combine(date, get_time("12:00:00"))
-		log_out = make_checkin(employee, timestamp)
-		self.assertEqual(log_out.shift, shift_type.name)
-
-		shift_type.process_auto_attendance()
-
-		attendance = frappe.db.get_value(
-			"Attendance", {"shift": shift_type.name}, ["status", "name"], as_dict=True
-		)
-		self.assertEqual(attendance.status, "Present")
-
-	def test_entry_and_exit_grace(self):
-		from erpnext.hr.doctype.employee_checkin.test_employee_checkin import make_checkin
-
-		employee = make_employee("test_employee_checkin@example.com", company="_Test Company")
-
-		# doesn't mark late entry until 60 mins after shift start i.e. till 9
-		# doesn't mark late entry until 60 mins before shift end i.e. 11
-		shift_type = setup_shift_type(
-			enable_entry_grace_period=1,
-			enable_exit_grace_period=1,
-			late_entry_grace_period=60,
-			early_exit_grace_period=60,
-		)
-		date = getdate()
-		make_shift_assignment(shift_type.name, employee, date)
-
-		timestamp = datetime.combine(date, get_time("09:30:00"))
-		log_in = make_checkin(employee, timestamp)
-		self.assertEqual(log_in.shift, shift_type.name)
-
-		timestamp = datetime.combine(date, get_time("10:30:00"))
-		log_out = make_checkin(employee, timestamp)
-		self.assertEqual(log_out.shift, shift_type.name)
-
-		shift_type.process_auto_attendance()
-
-		attendance = frappe.db.get_value(
-			"Attendance",
-			{"shift": shift_type.name},
-			["status", "name", "late_entry", "early_exit"],
-			as_dict=True,
-		)
-		self.assertEqual(attendance.status, "Present")
-		self.assertEqual(attendance.late_entry, 1)
-		self.assertEqual(attendance.early_exit, 1)
-
-	def test_working_hours_threshold_for_half_day(self):
-		from erpnext.hr.doctype.employee_checkin.test_employee_checkin import make_checkin
-
-		employee = make_employee("test_employee_checkin@example.com", company="_Test Company")
-		shift_type = setup_shift_type(shift_type="Half Day Test", working_hours_threshold_for_half_day=2)
-		date = getdate()
-		make_shift_assignment(shift_type.name, employee, date)
-
-		timestamp = datetime.combine(date, get_time("08:00:00"))
-		log_in = make_checkin(employee, timestamp)
-		self.assertEqual(log_in.shift, shift_type.name)
-
-		timestamp = datetime.combine(date, get_time("09:30:00"))
-		log_out = make_checkin(employee, timestamp)
-		self.assertEqual(log_out.shift, shift_type.name)
-
-		shift_type.process_auto_attendance()
-
-		attendance = frappe.db.get_value(
-			"Attendance", {"shift": shift_type.name}, ["status", "working_hours"], as_dict=True
-		)
-		self.assertEqual(attendance.status, "Half Day")
-		self.assertEqual(attendance.working_hours, 1.5)
-
-	def test_working_hours_threshold_for_absent(self):
-		from erpnext.hr.doctype.employee_checkin.test_employee_checkin import make_checkin
-
-		employee = make_employee("test_employee_checkin@example.com", company="_Test Company")
-		shift_type = setup_shift_type(shift_type="Absent Test", working_hours_threshold_for_absent=2)
-		date = getdate()
-		make_shift_assignment(shift_type.name, employee, date)
-
-		timestamp = datetime.combine(date, get_time("08:00:00"))
-		log_in = make_checkin(employee, timestamp)
-		self.assertEqual(log_in.shift, shift_type.name)
-
-		timestamp = datetime.combine(date, get_time("09:30:00"))
-		log_out = make_checkin(employee, timestamp)
-		self.assertEqual(log_out.shift, shift_type.name)
-
-		shift_type.process_auto_attendance()
-
-		attendance = frappe.db.get_value(
-			"Attendance", {"shift": shift_type.name}, ["status", "working_hours"], as_dict=True
-		)
-		self.assertEqual(attendance.status, "Absent")
-		self.assertEqual(attendance.working_hours, 1.5)
-
-	def test_working_hours_threshold_for_absent_and_half_day_1(self):
-		# considers half day over absent
-		from erpnext.hr.doctype.employee_checkin.test_employee_checkin import make_checkin
-
-		employee = make_employee("test_employee_checkin@example.com", company="_Test Company")
-		shift_type = setup_shift_type(
-			shift_type="Half Day + Absent Test",
-			working_hours_threshold_for_half_day=1,
-			working_hours_threshold_for_absent=2,
-		)
-		date = getdate()
-		make_shift_assignment(shift_type.name, employee, date)
-
-		timestamp = datetime.combine(date, get_time("08:00:00"))
-		log_in = make_checkin(employee, timestamp)
-		self.assertEqual(log_in.shift, shift_type.name)
-
-		timestamp = datetime.combine(date, get_time("08:45:00"))
-		log_out = make_checkin(employee, timestamp)
-		self.assertEqual(log_out.shift, shift_type.name)
-
-		shift_type.process_auto_attendance()
-
-		attendance = frappe.db.get_value(
-			"Attendance", {"shift": shift_type.name}, ["status", "working_hours"], as_dict=True
-		)
-		self.assertEqual(attendance.status, "Half Day")
-		self.assertEqual(attendance.working_hours, 0.75)
-
-	def test_working_hours_threshold_for_absent_and_half_day_2(self):
-		# considers absent over half day
-		from erpnext.hr.doctype.employee_checkin.test_employee_checkin import make_checkin
-
-		employee = make_employee("test_employee_checkin@example.com", company="_Test Company")
-		shift_type = setup_shift_type(
-			shift_type="Half Day + Absent Test",
-			working_hours_threshold_for_half_day=1,
-			working_hours_threshold_for_absent=2,
-		)
-		date = getdate()
-		make_shift_assignment(shift_type.name, employee, date)
-
-		timestamp = datetime.combine(date, get_time("08:00:00"))
-		log_in = make_checkin(employee, timestamp)
-		self.assertEqual(log_in.shift, shift_type.name)
-
-		timestamp = datetime.combine(date, get_time("09:30:00"))
-		log_out = make_checkin(employee, timestamp)
-		self.assertEqual(log_out.shift, shift_type.name)
-
-		shift_type.process_auto_attendance()
-
-		attendance = frappe.db.get_value("Attendance", {"shift": shift_type.name}, "status")
-		self.assertEqual(attendance, "Absent")
-
-	def test_mark_absent_for_dates_with_no_attendance(self):
-		employee = make_employee("test_employee_checkin@example.com", company="_Test Company")
-		shift_type = setup_shift_type(shift_type="Test Absent with no Attendance")
-
-		# absentees are auto-marked one day after to wait for any manual attendance records
-		date = add_days(getdate(), -1)
-		make_shift_assignment(shift_type.name, employee, date)
-
-		shift_type.process_auto_attendance()
-
-		attendance = frappe.db.get_value(
-			"Attendance", {"attendance_date": date, "employee": employee}, "status"
-		)
-		self.assertEqual(attendance, "Absent")
-
-	@set_holiday_list("Salary Slip Test Holiday List", "_Test Company")
-	def test_skip_marking_absent_on_a_holiday(self):
-		employee = make_employee("test_employee_checkin@example.com", company="_Test Company")
-		shift_type = setup_shift_type(shift_type="Test Absent with no Attendance")
-		shift_type.holiday_list = None
-		shift_type.save()
-
-		# should not mark any attendance if no shift assignment is created
-		shift_type.process_auto_attendance()
-		attendance = frappe.db.get_value("Attendance", {"employee": employee}, "status")
-		self.assertIsNone(attendance)
-
-		first_sunday = get_first_sunday(self.holiday_list, for_date=getdate())
-		make_shift_assignment(shift_type.name, employee, first_sunday)
-
-		shift_type.process_auto_attendance()
-
-		attendance = frappe.db.get_value(
-			"Attendance", {"attendance_date": first_sunday, "employee": employee}, "status"
-		)
-		self.assertIsNone(attendance)
-
-	def test_get_start_and_end_dates(self):
-		date = getdate()
-
-		doj = add_days(date, -30)
-		relieving_date = add_days(date, -5)
-		employee = make_employee(
-			"test_employee_dates@example.com",
-			company="_Test Company",
-			date_of_joining=doj,
-			relieving_date=relieving_date,
-		)
-		shift_type = setup_shift_type(
-			shift_type="Test Absent with no Attendance", process_attendance_after=add_days(doj, 2)
-		)
-
-		make_shift_assignment(shift_type.name, employee, add_days(date, -25))
-
-		shift_type.process_auto_attendance()
-
-		# should not mark absent before shift assignment/process attendance after date
-		attendance = frappe.db.get_value(
-			"Attendance", {"attendance_date": doj, "employee": employee}, "name"
-		)
-		self.assertIsNone(attendance)
-
-		# mark absent on Relieving Date
-		attendance = frappe.db.get_value(
-			"Attendance", {"attendance_date": relieving_date, "employee": employee}, "status"
-		)
-		self.assertEquals(attendance, "Absent")
-
-		# should not mark absent after Relieving Date
-		attendance = frappe.db.get_value(
-			"Attendance", {"attendance_date": add_days(relieving_date, 1), "employee": employee}, "name"
-		)
-		self.assertIsNone(attendance)
-
-	def test_skip_auto_attendance_for_duplicate_record(self):
-		# Skip auto attendance in case of duplicate attendance record
-		from erpnext.hr.doctype.attendance.attendance import mark_attendance
-		from erpnext.hr.doctype.employee_checkin.test_employee_checkin import make_checkin
-
-		employee = make_employee("test_employee_checkin@example.com", company="_Test Company")
-
-		shift_type = setup_shift_type()
-		date = getdate()
-
-		# mark attendance
-		mark_attendance(employee, date, "Present")
-		make_shift_assignment(shift_type.name, employee, date)
-
-		timestamp = datetime.combine(date, get_time("08:00:00"))
-		log_in = make_checkin(employee, timestamp)
-		self.assertEqual(log_in.shift, shift_type.name)
-
-		timestamp = datetime.combine(date, get_time("12:00:00"))
-		log_out = make_checkin(employee, timestamp)
-		self.assertEqual(log_out.shift, shift_type.name)
-
-		# auto attendance should skip marking
-		shift_type.process_auto_attendance()
-
-		log_in.reload()
-		log_out.reload()
-		self.assertEqual(log_in.skip_auto_attendance, 1)
-		self.assertEqual(log_out.skip_auto_attendance, 1)
-
-	def test_skip_auto_attendance_for_overlapping_shift(self):
-		# Skip auto attendance in case of overlapping shift attendance record
-		# this case won't occur in case of shift assignment, since it will not allow overlapping shifts to be assigned
-		# can happen if manual attendance records are created
-		from erpnext.hr.doctype.attendance.attendance import mark_attendance
-		from erpnext.hr.doctype.employee_checkin.test_employee_checkin import make_checkin
-
-		employee = make_employee("test_employee_checkin@example.com", company="_Test Company")
-		shift_1 = setup_shift_type(shift_type="Shift 1", start_time="08:00:00", end_time="10:00:00")
-		shift_2 = setup_shift_type(shift_type="Shift 2", start_time="09:30:00", end_time="11:00:00")
-
-		date = getdate()
-
-		# mark attendance
-		mark_attendance(employee, date, "Present", shift=shift_1.name)
-		make_shift_assignment(shift_2.name, employee, date)
-
-		timestamp = datetime.combine(date, get_time("09:30:00"))
-		log_in = make_checkin(employee, timestamp)
-		self.assertEqual(log_in.shift, shift_2.name)
-
-		timestamp = datetime.combine(date, get_time("11:00:00"))
-		log_out = make_checkin(employee, timestamp)
-		self.assertEqual(log_out.shift, shift_2.name)
-
-		# auto attendance should be skipped for shift 2
-		# since it is already marked for overlapping shift 1
-		shift_2.process_auto_attendance()
-
-		log_in.reload()
-		log_out.reload()
-		self.assertEqual(log_in.skip_auto_attendance, 1)
-		self.assertEqual(log_out.skip_auto_attendance, 1)
-
-
-def setup_shift_type(**args):
-	args = frappe._dict(args)
-	date = getdate()
-
-	shift_type = frappe.get_doc(
-		{
-			"doctype": "Shift Type",
-			"__newname": args.shift_type or "_Test Shift",
-			"start_time": "08:00:00",
-			"end_time": "12:00:00",
-			"enable_auto_attendance": 1,
-			"determine_check_in_and_check_out": "Alternating entries as IN and OUT during the same shift",
-			"working_hours_calculation_based_on": "First Check-in and Last Check-out",
-			"begin_check_in_before_shift_start_time": 60,
-			"allow_check_out_after_shift_end_time": 60,
-			"process_attendance_after": add_days(date, -2),
-			"last_sync_of_checkin": now_datetime() + timedelta(days=1),
-		}
-	)
-
-	holiday_list = "Employee Checkin Test Holiday List"
-	if not frappe.db.exists("Holiday List", "Employee Checkin Test Holiday List"):
-		holiday_list = frappe.get_doc(
-			{
-				"doctype": "Holiday List",
-				"holiday_list_name": "Employee Checkin Test Holiday List",
-				"from_date": get_year_start(date),
-				"to_date": get_year_ending(date),
-			}
-		).insert()
-		holiday_list = holiday_list.name
-
-	shift_type.holiday_list = holiday_list
-	shift_type.update(args)
-	shift_type.save()
-
-	return shift_type
-
-
-def make_shift_assignment(shift_type, employee, start_date, end_date=None):
-	shift_assignment = frappe.get_doc(
-		{
-			"doctype": "Shift Assignment",
-			"shift_type": shift_type,
-			"company": "_Test Company",
-			"employee": employee,
-			"start_date": start_date,
-			"end_date": end_date,
-		}
-	).insert()
-	shift_assignment.submit()
-
-	return shift_assignment
diff --git a/erpnext/hr/doctype/skill/__init__.py b/erpnext/hr/doctype/skill/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/skill/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/skill/skill.js b/erpnext/hr/doctype/skill/skill.js
deleted file mode 100644
index a939ff0..0000000
--- a/erpnext/hr/doctype/skill/skill.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Skill', {
-	// refresh: function(frm) {
-
-	// }
-});
diff --git a/erpnext/hr/doctype/skill/skill.json b/erpnext/hr/doctype/skill/skill.json
deleted file mode 100644
index 4c8a8c9..0000000
--- a/erpnext/hr/doctype/skill/skill.json
+++ /dev/null
@@ -1,119 +0,0 @@
-{
- "allow_copy": 0,
- "allow_events_in_timeline": 0,
- "allow_guest_to_view": 0,
- "allow_import": 0,
- "allow_rename": 1,
- "autoname": "field:skill_name",
- "beta": 0,
- "creation": "2019-04-16 09:54:39.486915",
- "custom": 0,
- "docstatus": 0,
- "doctype": "DocType",
- "document_type": "",
- "editable_grid": 0,
- "engine": "InnoDB",
- "fields": [
-  {
-   "allow_bulk_edit": 0,
-   "allow_in_quick_entry": 1,
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
-   "fetch_if_empty": 0,
-   "fieldname": "skill_name",
-   "fieldtype": "Data",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_global_search": 0,
-   "in_list_view": 0,
-   "in_standard_filter": 0,
-   "label": "Skill Name",
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "precision": "",
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 0,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
-   "translatable": 0,
-   "unique": 1
-  },
-  {
-   "allow_in_quick_entry": 1,
-   "fieldname": "description",
-   "fieldtype": "Text",
-   "label": "Description"
-  }
- ],
- "has_web_view": 0,
- "hide_toolbar": 0,
- "idx": 0,
- "in_create": 0,
- "is_submittable": 0,
- "issingle": 0,
- "istable": 0,
- "max_attachments": 0,
- "modified": "2021-02-26 10:55:00.536328",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Skill",
- "name_case": "",
- "owner": "Administrator",
- "permissions": [
-  {
-   "amend": 0,
-   "cancel": 0,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "if_owner": 0,
-   "import": 0,
-   "permlevel": 0,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "set_user_permissions": 0,
-   "share": 1,
-   "submit": 0,
-   "write": 1
-  },
-  {
-   "amend": 0,
-   "cancel": 0,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "if_owner": 0,
-   "import": 0,
-   "permlevel": 0,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "set_user_permissions": 0,
-   "share": 1,
-   "submit": 0,
-   "write": 1
-  }
- ],
- "quick_entry": 1,
- "read_only": 0,
- "show_name_in_global_search": 0,
- "sort_field": "modified",
- "sort_order": "ASC",
- "track_changes": 1,
- "track_seen": 0,
- "track_views": 0
-}
diff --git a/erpnext/hr/doctype/skill/skill.py b/erpnext/hr/doctype/skill/skill.py
deleted file mode 100644
index d26e7ca..0000000
--- a/erpnext/hr/doctype/skill/skill.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-# import frappe
-from frappe.model.document import Document
-
-
-class Skill(Document):
-	pass
diff --git a/erpnext/hr/doctype/skill_assessment/__init__.py b/erpnext/hr/doctype/skill_assessment/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/skill_assessment/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/skill_assessment/skill_assessment.json b/erpnext/hr/doctype/skill_assessment/skill_assessment.json
deleted file mode 100644
index 8b935c4..0000000
--- a/erpnext/hr/doctype/skill_assessment/skill_assessment.json
+++ /dev/null
@@ -1,41 +0,0 @@
-{
- "actions": [],
- "creation": "2021-04-12 17:07:39.656289",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "skill",
-  "rating"
- ],
- "fields": [
-  {
-   "fieldname": "skill",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Skill",
-   "options": "Skill",
-   "read_only": 1,
-   "reqd": 1
-  },
-  {
-   "fieldname": "rating",
-   "fieldtype": "Rating",
-   "in_list_view": 1,
-   "label": "Rating",
-   "reqd": 1
-  }
- ],
- "index_web_pages_for_search": 1,
- "istable": 1,
- "links": [],
- "modified": "2021-04-12 17:18:14.032298",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Skill Assessment",
- "owner": "Administrator",
- "permissions": [],
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/skill_assessment/skill_assessment.py b/erpnext/hr/doctype/skill_assessment/skill_assessment.py
deleted file mode 100644
index 13775be..0000000
--- a/erpnext/hr/doctype/skill_assessment/skill_assessment.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-# import frappe
-from frappe.model.document import Document
-
-
-class SkillAssessment(Document):
-	pass
diff --git a/erpnext/hr/doctype/staffing_plan/__init__.py b/erpnext/hr/doctype/staffing_plan/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/staffing_plan/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/staffing_plan/staffing_plan.js b/erpnext/hr/doctype/staffing_plan/staffing_plan.js
deleted file mode 100644
index 228391b..0000000
--- a/erpnext/hr/doctype/staffing_plan/staffing_plan.js
+++ /dev/null
@@ -1,106 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Staffing Plan', {
-	setup: function(frm) {
-		frm.set_query("designation", "staffing_details", function() {
-			let designations = [];
-			(frm.doc.staffing_details || []).forEach(function(staff_detail) {
-				if(staff_detail.designation){
-					designations.push(staff_detail.designation)
-				}
-			})
-			// Filter out designations already selected in Staffing Plan Detail
-			return {
-				filters: [
-					['Designation', 'name', 'not in', designations],
-				]
-			}
-		});
-
-		frm.set_query("department", function() {
-			return {
-				"filters": {
-					"company": frm.doc.company,
-				}
-			};
-		});
-	},
-});
-
-frappe.ui.form.on('Staffing Plan Detail', {
-	designation: function(frm, cdt, cdn) {
-		let child = locals[cdt][cdn];
-		if(frm.doc.company && child.designation) {
-			set_number_of_positions(frm, cdt, cdn);
-		}
-	},
-
-	vacancies: function(frm, cdt, cdn) {
-		let child = locals[cdt][cdn];
-		if(child.vacancies < child.current_openings) {
-			frappe.throw(__("Vacancies cannot be lower than the current openings"));
-		}
-		set_number_of_positions(frm, cdt, cdn);
-	},
-
-	current_count: function(frm, cdt, cdn) {
-		set_number_of_positions(frm, cdt, cdn);
-	},
-
-	estimated_cost_per_position: function(frm, cdt, cdn) {
-		set_total_estimated_cost(frm, cdt, cdn);
-	}
-});
-
-var set_number_of_positions = function(frm, cdt, cdn) {
-	let child = locals[cdt][cdn];
-	if (!child.designation) frappe.throw(__("Please enter the designation"));
-	frappe.call({
-		"method": "erpnext.hr.doctype.staffing_plan.staffing_plan.get_designation_counts",
-		args: {
-			designation: child.designation,
-			company: frm.doc.company
-		},
-		callback: function (data) {
-			if(data.message){
-				frappe.model.set_value(cdt, cdn, 'current_count', data.message.employee_count);
-				frappe.model.set_value(cdt, cdn, 'current_openings', data.message.job_openings);
-				let total_positions = cint(data.message.employee_count) + cint(child.vacancies);
-				if (cint(child.number_of_positions) < total_positions){
-					frappe.model.set_value(cdt, cdn, 'number_of_positions', total_positions);
-				}
-			}
-			else{ // No employees for this designation
-				frappe.model.set_value(cdt, cdn, 'current_count', 0);
-				frappe.model.set_value(cdt, cdn, 'current_openings', 0);
-			}
-		}
-	});
-	refresh_field("staffing_details");
-	set_total_estimated_cost(frm, cdt, cdn);
-}
-
-// Note: Estimated Cost is calculated on number of Vacancies
-var set_total_estimated_cost = function(frm, cdt, cdn) {
-	let child = locals[cdt][cdn]
-	if(child.vacancies > 0 && child.estimated_cost_per_position) {
-		frappe.model.set_value(cdt, cdn, 'total_estimated_cost', child.vacancies * child.estimated_cost_per_position);
-	}
-	else {
-		frappe.model.set_value(cdt, cdn, 'total_estimated_cost', 0);
-	}
-	set_total_estimated_budget(frm);
-};
-
-var set_total_estimated_budget = function(frm) {
-	let estimated_budget = 0.0
-	if(frm.doc.staffing_details) {
-		(frm.doc.staffing_details || []).forEach(function(staff_detail) {
-			if(staff_detail.total_estimated_cost){
-				estimated_budget += staff_detail.total_estimated_cost
-			}
-		})
-		frm.set_value('total_estimated_budget', estimated_budget);
-	}
-};
diff --git a/erpnext/hr/doctype/staffing_plan/staffing_plan.json b/erpnext/hr/doctype/staffing_plan/staffing_plan.json
deleted file mode 100644
index 9576bc3..0000000
--- a/erpnext/hr/doctype/staffing_plan/staffing_plan.json
+++ /dev/null
@@ -1,403 +0,0 @@
-{
- "allow_copy": 0, 
- "allow_guest_to_view": 0, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "autoname": "prompt", 
- "beta": 0, 
- "creation": "2018-04-13 18:07:21.582747", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "", 
- "editable_grid": 1, 
- "engine": "InnoDB", 
- "fields": [
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "company", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Company", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Company", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "department", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Department", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Department", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "column_break_3", 
-   "fieldtype": "Column Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "from_date", 
-   "fieldtype": "Date", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "From Date", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "to_date", 
-   "fieldtype": "Date", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "To Date", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "staffing_plan_details", 
-   "fieldtype": "Section Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Staffing Plan Details", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "staffing_details", 
-   "fieldtype": "Table", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Staffing Plan Detail", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Staffing Plan Detail", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "section_break_8", 
-   "fieldtype": "Section Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "default": "0.00", 
-   "fieldname": "total_estimated_budget", 
-   "fieldtype": "Currency", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Total Estimated Budget", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "amended_from", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Amended From", 
-   "length": 0, 
-   "no_copy": 1, 
-   "options": "Staffing Plan", 
-   "permlevel": 0, 
-   "print_hide": 1, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }
- ], 
- "has_web_view": 0, 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "image_view": 0, 
- "in_create": 0, 
- "is_submittable": 1, 
- "issingle": 0, 
- "istable": 0, 
- "max_attachments": 0, 
- "modified": "2018-05-28 18:30:27.041395", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Staffing Plan", 
- "name_case": "", 
- "owner": "Administrator", 
- "permissions": [
-  {
-   "amend": 1, 
-   "cancel": 1, 
-   "create": 1, 
-   "delete": 1, 
-   "email": 1, 
-   "export": 1, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 1, 
-   "role": "HR Manager", 
-   "set_user_permissions": 0, 
-   "share": 1, 
-   "submit": 1, 
-   "write": 1
-  }, 
-  {
-   "amend": 0, 
-   "cancel": 0, 
-   "create": 1, 
-   "delete": 0, 
-   "email": 1, 
-   "export": 1, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 1, 
-   "role": "HR User", 
-   "set_user_permissions": 0, 
-   "share": 1, 
-   "submit": 1, 
-   "write": 1
-  }
- ], 
- "quick_entry": 1, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "show_name_in_global_search": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "track_changes": 1, 
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/staffing_plan/staffing_plan.py b/erpnext/hr/doctype/staffing_plan/staffing_plan.py
deleted file mode 100644
index 82472de..0000000
--- a/erpnext/hr/doctype/staffing_plan/staffing_plan.py
+++ /dev/null
@@ -1,222 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.utils import cint, flt, getdate, nowdate
-from frappe.utils.nestedset import get_descendants_of
-
-
-class SubsidiaryCompanyError(frappe.ValidationError):
-	pass
-
-
-class ParentCompanyError(frappe.ValidationError):
-	pass
-
-
-class StaffingPlan(Document):
-	def validate(self):
-		self.validate_period()
-		self.validate_details()
-		self.set_total_estimated_budget()
-
-	def validate_period(self):
-		# Validate Dates
-		if self.from_date and self.to_date and self.from_date > self.to_date:
-			frappe.throw(_("From Date cannot be greater than To Date"))
-
-	def validate_details(self):
-		for detail in self.get("staffing_details"):
-			self.validate_overlap(detail)
-			self.validate_with_subsidiary_plans(detail)
-			self.validate_with_parent_plan(detail)
-
-	def set_total_estimated_budget(self):
-		self.total_estimated_budget = 0
-
-		for detail in self.get("staffing_details"):
-			# Set readonly fields
-			self.set_number_of_positions(detail)
-			designation_counts = get_designation_counts(detail.designation, self.company)
-			detail.current_count = designation_counts["employee_count"]
-			detail.current_openings = designation_counts["job_openings"]
-
-			detail.total_estimated_cost = 0
-			if detail.number_of_positions > 0:
-				if detail.vacancies and detail.estimated_cost_per_position:
-					detail.total_estimated_cost = cint(detail.vacancies) * flt(detail.estimated_cost_per_position)
-
-			self.total_estimated_budget += detail.total_estimated_cost
-
-	def set_number_of_positions(self, detail):
-		detail.number_of_positions = cint(detail.vacancies) + cint(detail.current_count)
-
-	def validate_overlap(self, staffing_plan_detail):
-		# Validate if any submitted Staffing Plan exist for any Designations in this plan
-		# and spd.vacancies>0 ?
-		overlap = frappe.db.sql(
-			"""select spd.parent
-			from `tabStaffing Plan Detail` spd join `tabStaffing Plan` sp on spd.parent=sp.name
-			where spd.designation=%s and sp.docstatus=1
-			and sp.to_date >= %s and sp.from_date <= %s and sp.company = %s
-		""",
-			(staffing_plan_detail.designation, self.from_date, self.to_date, self.company),
-		)
-		if overlap and overlap[0][0]:
-			frappe.throw(
-				_("Staffing Plan {0} already exist for designation {1}").format(
-					overlap[0][0], staffing_plan_detail.designation
-				)
-			)
-
-	def validate_with_parent_plan(self, staffing_plan_detail):
-		if not frappe.get_cached_value("Company", self.company, "parent_company"):
-			return  # No parent, nothing to validate
-
-		# Get staffing plan applicable for the company (Parent Company)
-		parent_plan_details = get_active_staffing_plan_details(
-			self.company, staffing_plan_detail.designation, self.from_date, self.to_date
-		)
-		if not parent_plan_details:
-			return  # no staffing plan for any parent Company in hierarchy
-
-		# Fetch parent company which owns the staffing plan. NOTE: Parent could be higher up in the hierarchy
-		parent_company = frappe.db.get_value("Staffing Plan", parent_plan_details[0].name, "company")
-		# Parent plan available, validate with parent, siblings as well as children of staffing plan Company
-		if cint(staffing_plan_detail.vacancies) > cint(parent_plan_details[0].vacancies) or flt(
-			staffing_plan_detail.total_estimated_cost
-		) > flt(parent_plan_details[0].total_estimated_cost):
-			frappe.throw(
-				_(
-					"You can only plan for upto {0} vacancies and budget {1} for {2} as per staffing plan {3} for parent company {4}."
-				).format(
-					cint(parent_plan_details[0].vacancies),
-					parent_plan_details[0].total_estimated_cost,
-					frappe.bold(staffing_plan_detail.designation),
-					parent_plan_details[0].name,
-					parent_company,
-				),
-				ParentCompanyError,
-			)
-
-		# Get vacanices already planned for all companies down the hierarchy of Parent Company
-		lft, rgt = frappe.get_cached_value("Company", parent_company, ["lft", "rgt"])
-		all_sibling_details = frappe.db.sql(
-			"""select sum(spd.vacancies) as vacancies,
-			sum(spd.total_estimated_cost) as total_estimated_cost
-			from `tabStaffing Plan Detail` spd join `tabStaffing Plan` sp on spd.parent=sp.name
-			where spd.designation=%s and sp.docstatus=1
-			and sp.to_date >= %s and sp.from_date <=%s
-			and sp.company in (select name from tabCompany where lft > %s and rgt < %s)
-		""",
-			(staffing_plan_detail.designation, self.from_date, self.to_date, lft, rgt),
-			as_dict=1,
-		)[0]
-
-		if (
-			cint(parent_plan_details[0].vacancies)
-			< (cint(staffing_plan_detail.vacancies) + cint(all_sibling_details.vacancies))
-		) or (
-			flt(parent_plan_details[0].total_estimated_cost)
-			< (
-				flt(staffing_plan_detail.total_estimated_cost) + flt(all_sibling_details.total_estimated_cost)
-			)
-		):
-			frappe.throw(
-				_(
-					"{0} vacancies and {1} budget for {2} already planned for subsidiary companies of {3}. You can only plan for upto {4} vacancies and and budget {5} as per staffing plan {6} for parent company {3}."
-				).format(
-					cint(all_sibling_details.vacancies),
-					all_sibling_details.total_estimated_cost,
-					frappe.bold(staffing_plan_detail.designation),
-					parent_company,
-					cint(parent_plan_details[0].vacancies),
-					parent_plan_details[0].total_estimated_cost,
-					parent_plan_details[0].name,
-				)
-			)
-
-	def validate_with_subsidiary_plans(self, staffing_plan_detail):
-		# Valdate this plan with all child company plan
-		children_details = frappe.db.sql(
-			"""select sum(spd.vacancies) as vacancies,
-			sum(spd.total_estimated_cost) as total_estimated_cost
-			from `tabStaffing Plan Detail` spd join `tabStaffing Plan` sp on spd.parent=sp.name
-			where spd.designation=%s and sp.docstatus=1
-			and sp.to_date >= %s and sp.from_date <=%s
-			and sp.company in (select name from tabCompany where parent_company = %s)
-		""",
-			(staffing_plan_detail.designation, self.from_date, self.to_date, self.company),
-			as_dict=1,
-		)[0]
-
-		if (
-			children_details
-			and cint(staffing_plan_detail.vacancies) < cint(children_details.vacancies)
-			or flt(staffing_plan_detail.total_estimated_cost) < flt(children_details.total_estimated_cost)
-		):
-			frappe.throw(
-				_(
-					"Subsidiary companies have already planned for {1} vacancies at a budget of {2}. Staffing Plan for {0} should allocate more vacancies and budget for {3} than planned for its subsidiary companies"
-				).format(
-					self.company,
-					cint(children_details.vacancies),
-					children_details.total_estimated_cost,
-					frappe.bold(staffing_plan_detail.designation),
-				),
-				SubsidiaryCompanyError,
-			)
-
-
-@frappe.whitelist()
-def get_designation_counts(designation, company, job_opening=None):
-	if not designation:
-		return False
-
-	company_set = get_descendants_of("Company", company)
-	company_set.append(company)
-
-	employee_count = frappe.db.count(
-		"Employee", {"designation": designation, "status": "Active", "company": ("in", company_set)}
-	)
-
-	filters = {"designation": designation, "status": "Open", "company": ("in", company_set)}
-	if job_opening:
-		filters["name"] = ("!=", job_opening)
-
-	job_openings = frappe.db.count("Job Opening", filters)
-
-	return {"employee_count": employee_count, "job_openings": job_openings}
-
-
-@frappe.whitelist()
-def get_active_staffing_plan_details(company, designation, from_date=None, to_date=None):
-	if from_date is None:
-		from_date = getdate(nowdate())
-	if to_date is None:
-		to_date = getdate(nowdate())
-	if not company or not designation:
-		frappe.throw(_("Please select Company and Designation"))
-
-	staffing_plan = frappe.db.sql(
-		"""
-		select sp.name, spd.vacancies, spd.total_estimated_cost
-		from `tabStaffing Plan Detail` spd join `tabStaffing Plan` sp on spd.parent=sp.name
-		where company=%s and spd.designation=%s and sp.docstatus=1
-		and to_date >= %s and from_date <= %s """,
-		(company, designation, from_date, to_date),
-		as_dict=1,
-	)
-
-	if not staffing_plan:
-		parent_company = frappe.get_cached_value("Company", company, "parent_company")
-		if parent_company:
-			staffing_plan = get_active_staffing_plan_details(
-				parent_company, designation, from_date, to_date
-			)
-
-	# Only a single staffing plan can be active for a designation on given date
-	return staffing_plan if staffing_plan else None
diff --git a/erpnext/hr/doctype/staffing_plan/staffing_plan_dashboard.py b/erpnext/hr/doctype/staffing_plan/staffing_plan_dashboard.py
deleted file mode 100644
index 0f555d9..0000000
--- a/erpnext/hr/doctype/staffing_plan/staffing_plan_dashboard.py
+++ /dev/null
@@ -1,5 +0,0 @@
-def get_data():
-	return {
-		"fieldname": "staffing_plan",
-		"transactions": [{"items": ["Job Opening"]}],
-	}
diff --git a/erpnext/hr/doctype/staffing_plan/test_staffing_plan.py b/erpnext/hr/doctype/staffing_plan/test_staffing_plan.py
deleted file mode 100644
index ac69c21..0000000
--- a/erpnext/hr/doctype/staffing_plan/test_staffing_plan.py
+++ /dev/null
@@ -1,101 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-import frappe
-from frappe.utils import add_days, nowdate
-
-from erpnext.hr.doctype.staffing_plan.staffing_plan import (
-	ParentCompanyError,
-	SubsidiaryCompanyError,
-)
-
-test_dependencies = ["Designation"]
-
-
-class TestStaffingPlan(unittest.TestCase):
-	def test_staffing_plan(self):
-		_set_up()
-		frappe.db.set_value("Company", "_Test Company 3", "is_group", 1)
-		if frappe.db.exists("Staffing Plan", "Test"):
-			return
-		staffing_plan = frappe.new_doc("Staffing Plan")
-		staffing_plan.company = "_Test Company 10"
-		staffing_plan.name = "Test"
-		staffing_plan.from_date = nowdate()
-		staffing_plan.to_date = add_days(nowdate(), 10)
-		staffing_plan.append(
-			"staffing_details",
-			{"designation": "Designer", "vacancies": 6, "estimated_cost_per_position": 50000},
-		)
-		staffing_plan.insert()
-		staffing_plan.submit()
-		self.assertEqual(staffing_plan.total_estimated_budget, 300000.00)
-
-	def test_staffing_plan_subsidiary_company(self):
-		self.test_staffing_plan()
-		if frappe.db.exists("Staffing Plan", "Test 1"):
-			return
-		staffing_plan = frappe.new_doc("Staffing Plan")
-		staffing_plan.company = "_Test Company 3"
-		staffing_plan.name = "Test 1"
-		staffing_plan.from_date = nowdate()
-		staffing_plan.to_date = add_days(nowdate(), 10)
-		staffing_plan.append(
-			"staffing_details",
-			{"designation": "Designer", "vacancies": 3, "estimated_cost_per_position": 45000},
-		)
-		self.assertRaises(SubsidiaryCompanyError, staffing_plan.insert)
-
-	def test_staffing_plan_parent_company(self):
-		_set_up()
-		if frappe.db.exists("Staffing Plan", "Test"):
-			return
-		staffing_plan = frappe.new_doc("Staffing Plan")
-		staffing_plan.company = "_Test Company 3"
-		staffing_plan.name = "Test"
-		staffing_plan.from_date = nowdate()
-		staffing_plan.to_date = add_days(nowdate(), 10)
-		staffing_plan.append(
-			"staffing_details",
-			{"designation": "Designer", "vacancies": 7, "estimated_cost_per_position": 50000},
-		)
-		staffing_plan.insert()
-		staffing_plan.submit()
-		self.assertEqual(staffing_plan.total_estimated_budget, 350000.00)
-		if frappe.db.exists("Staffing Plan", "Test 1"):
-			return
-		staffing_plan = frappe.new_doc("Staffing Plan")
-		staffing_plan.company = "_Test Company 10"
-		staffing_plan.name = "Test 1"
-		staffing_plan.from_date = nowdate()
-		staffing_plan.to_date = add_days(nowdate(), 10)
-		staffing_plan.append(
-			"staffing_details",
-			{"designation": "Designer", "vacancies": 7, "estimated_cost_per_position": 60000},
-		)
-		staffing_plan.insert()
-		self.assertRaises(ParentCompanyError, staffing_plan.submit)
-
-
-def _set_up():
-	for doctype in ["Staffing Plan", "Staffing Plan Detail"]:
-		frappe.db.sql("delete from `tab{doctype}`".format(doctype=doctype))
-	make_company()
-
-
-def make_company(name=None, abbr=None):
-	if not name:
-		name = "_Test Company 10"
-
-	if frappe.db.exists("Company", name):
-		return
-
-	company = frappe.new_doc("Company")
-	company.company_name = name
-	company.abbr = abbr or "_TC10"
-	company.parent_company = "_Test Company 3"
-	company.default_currency = "INR"
-	company.country = "Pakistan"
-	company.insert()
diff --git a/erpnext/hr/doctype/staffing_plan_detail/__init__.py b/erpnext/hr/doctype/staffing_plan_detail/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/staffing_plan_detail/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/staffing_plan_detail/staffing_plan_detail.json b/erpnext/hr/doctype/staffing_plan_detail/staffing_plan_detail.json
deleted file mode 100644
index 77164c4..0000000
--- a/erpnext/hr/doctype/staffing_plan_detail/staffing_plan_detail.json
+++ /dev/null
@@ -1,79 +0,0 @@
-{
- "creation": "2018-04-13 18:04:20.978931",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "designation",
-  "vacancies",
-  "estimated_cost_per_position",
-  "total_estimated_cost",
-  "column_break_5",
-  "current_count",
-  "current_openings",
-  "number_of_positions"
- ],
- "fields": [
-  {
-   "fieldname": "designation",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Designation",
-   "options": "Designation",
-   "reqd": 1
-  },
-  {
-   "fieldname": "number_of_positions",
-   "fieldtype": "Int",
-   "in_list_view": 1,
-   "label": "Number Of Positions",
-   "read_only": 1
-  },
-  {
-   "fieldname": "estimated_cost_per_position",
-   "fieldtype": "Currency",
-   "in_list_view": 1,
-   "label": "Estimated Cost Per Position"
-  },
-  {
-   "fieldname": "column_break_5",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "current_count",
-   "fieldtype": "Int",
-   "label": "Current Count",
-   "read_only": 1
-  },
-  {
-   "fieldname": "current_openings",
-   "fieldtype": "Int",
-   "label": "Current Openings",
-   "read_only": 1
-  },
-  {
-   "fieldname": "vacancies",
-   "fieldtype": "Int",
-   "in_list_view": 1,
-   "label": "Vacancies"
-  },
-  {
-   "fieldname": "total_estimated_cost",
-   "fieldtype": "Currency",
-   "in_list_view": 1,
-   "label": "Total Estimated Cost",
-   "read_only": 1
-  }
- ],
- "istable": 1,
- "modified": "2019-06-24 18:40:37.140178",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Staffing Plan Detail",
- "owner": "Administrator",
- "permissions": [],
- "quick_entry": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/staffing_plan_detail/staffing_plan_detail.py b/erpnext/hr/doctype/staffing_plan_detail/staffing_plan_detail.py
deleted file mode 100644
index 6749690..0000000
--- a/erpnext/hr/doctype/staffing_plan_detail/staffing_plan_detail.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-from frappe.model.document import Document
-
-
-class StaffingPlanDetail(Document):
-	pass
diff --git a/erpnext/hr/doctype/training_event/__init__.py b/erpnext/hr/doctype/training_event/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/training_event/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/training_event/test_training_event.py b/erpnext/hr/doctype/training_event/test_training_event.py
deleted file mode 100644
index ec7eb74..0000000
--- a/erpnext/hr/doctype/training_event/test_training_event.py
+++ /dev/null
@@ -1,64 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-import frappe
-from frappe.utils import add_days, today
-
-from erpnext.payroll.doctype.salary_structure.test_salary_structure import make_employee
-
-
-class TestTrainingEvent(unittest.TestCase):
-	def setUp(self):
-		create_training_program("Basic Training")
-		employee = make_employee("robert_loan@trainig.com")
-		employee2 = make_employee("suzie.tan@trainig.com")
-		self.attendees = [{"employee": employee}, {"employee": employee2}]
-
-	def test_training_event_status_update(self):
-		training_event = create_training_event(self.attendees)
-		training_event.submit()
-
-		training_event.event_status = "Completed"
-		training_event.save()
-		training_event.reload()
-
-		for entry in training_event.employees:
-			self.assertEqual(entry.status, "Completed")
-
-		training_event.event_status = "Scheduled"
-		training_event.save()
-		training_event.reload()
-
-		for entry in training_event.employees:
-			self.assertEqual(entry.status, "Open")
-
-	def tearDown(self):
-		frappe.db.rollback()
-
-
-def create_training_program(training_program):
-	if not frappe.db.get_value("Training Program", training_program):
-		frappe.get_doc(
-			{
-				"doctype": "Training Program",
-				"training_program": training_program,
-				"description": training_program,
-			}
-		).insert()
-
-
-def create_training_event(attendees):
-	return frappe.get_doc(
-		{
-			"doctype": "Training Event",
-			"event_name": "Basic Training Event",
-			"training_program": "Basic Training",
-			"location": "Union Square",
-			"start_time": add_days(today(), 5),
-			"end_time": add_days(today(), 6),
-			"introduction": "Welcome to the Basic Training Event",
-			"employees": attendees,
-		}
-	).insert()
diff --git a/erpnext/hr/doctype/training_event/training_event.js b/erpnext/hr/doctype/training_event/training_event.js
deleted file mode 100644
index 642e6a1..0000000
--- a/erpnext/hr/doctype/training_event/training_event.js
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Training Event', {
-	onload_post_render: function (frm) {
-		frm.get_field("employees").grid.set_multiple_add("employee");
-	},
-	refresh: function (frm) {
-		if (!frm.doc.__islocal) {
-			frm.add_custom_button(__("Training Result"), function () {
-				frappe.route_options = {
-					training_event: frm.doc.name
-				};
-				frappe.set_route("List", "Training Result");
-			});
-			frm.add_custom_button(__("Training Feedback"), function () {
-				frappe.route_options = {
-					training_event: frm.doc.name
-				};
-				frappe.set_route("List", "Training Feedback");
-			});
-		}
-		frm.events.set_employee_query(frm);
-	},
-
-	set_employee_query: function(frm) {
-		let emp = [];
-		for (let d in frm.doc.employees) {
-			if (frm.doc.employees[d].employee) {
-				emp.push(frm.doc.employees[d].employee);
-			}
-		}
-		frm.set_query("employee", "employees", function () {
-			return {
-				filters: {
-					name: ["NOT IN", emp],
-					status: "Active"
-				}
-			};
-		});
-	}
-});
-
-frappe.ui.form.on("Training Event Employee", {
-	employee: function(frm) {
-		frm.events.set_employee_query(frm);
-	}
-});
diff --git a/erpnext/hr/doctype/training_event/training_event.json b/erpnext/hr/doctype/training_event/training_event.json
deleted file mode 100644
index 42e02ca..0000000
--- a/erpnext/hr/doctype/training_event/training_event.json
+++ /dev/null
@@ -1,231 +0,0 @@
-{
- "actions": [],
- "allow_import": 1,
- "allow_rename": 1,
- "autoname": "field:event_name",
- "creation": "2016-08-08 04:53:58.355206",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "event_name",
-  "training_program",
-  "event_status",
-  "has_certificate",
-  "column_break_2",
-  "type",
-  "level",
-  "company",
-  "section_break_4",
-  "trainer_name",
-  "trainer_email",
-  "column_break_7",
-  "supplier",
-  "contact_number",
-  "section_break_9",
-  "course",
-  "location",
-  "column_break_12",
-  "start_time",
-  "end_time",
-  "section_break_15",
-  "introduction",
-  "section_break_18",
-  "employees",
-  "amended_from",
-  "employee_emails"
- ],
- "fields": [
-  {
-   "fieldname": "event_name",
-   "fieldtype": "Data",
-   "in_list_view": 1,
-   "label": "Event Name",
-   "no_copy": 1,
-   "reqd": 1,
-   "unique": 1
-  },
-  {
-   "fieldname": "training_program",
-   "fieldtype": "Link",
-   "label": "Training Program",
-   "options": "Training Program"
-  },
-  {
-   "allow_on_submit": 1,
-   "fieldname": "event_status",
-   "fieldtype": "Select",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Event Status",
-   "options": "Scheduled\nCompleted\nCancelled",
-   "reqd": 1
-  },
-  {
-   "default": "0",
-   "depends_on": "eval:doc.type == 'Seminar' || doc.type == 'Workshop' || doc.type == 'Conference' || doc.type == 'Exam'",
-   "fieldname": "has_certificate",
-   "fieldtype": "Check",
-   "label": "Has Certificate"
-  },
-  {
-   "fieldname": "column_break_2",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "type",
-   "fieldtype": "Select",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Type",
-   "options": "Seminar\nTheory\nWorkshop\nConference\nExam\nInternet\nSelf-Study",
-   "reqd": 1
-  },
-  {
-   "depends_on": "eval:doc.type == 'Seminar' || doc.type == 'Workshop' || doc.type == 'Exam'",
-   "fieldname": "level",
-   "fieldtype": "Select",
-   "label": "Level",
-   "options": "\nBeginner\nIntermediate\nAdvance"
-  },
-  {
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "label": "Company",
-   "options": "Company"
-  },
-  {
-   "fieldname": "section_break_4",
-   "fieldtype": "Section Break"
-  },
-  {
-   "fieldname": "trainer_name",
-   "fieldtype": "Data",
-   "label": "Trainer Name"
-  },
-  {
-   "fieldname": "trainer_email",
-   "fieldtype": "Data",
-   "label": "Trainer Email"
-  },
-  {
-   "fieldname": "column_break_7",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "supplier",
-   "fieldtype": "Link",
-   "label": "Supplier",
-   "options": "Supplier"
-  },
-  {
-   "fieldname": "contact_number",
-   "fieldtype": "Data",
-   "label": "Contact Number"
-  },
-  {
-   "fieldname": "section_break_9",
-   "fieldtype": "Section Break"
-  },
-  {
-   "fieldname": "course",
-   "fieldtype": "Data",
-   "in_standard_filter": 1,
-   "label": "Course"
-  },
-  {
-   "fieldname": "location",
-   "fieldtype": "Data",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Location",
-   "reqd": 1
-  },
-  {
-   "fieldname": "column_break_12",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "start_time",
-   "fieldtype": "Datetime",
-   "label": "Start Time",
-   "reqd": 1
-  },
-  {
-   "fieldname": "end_time",
-   "fieldtype": "Datetime",
-   "label": "End Time",
-   "reqd": 1
-  },
-  {
-   "fieldname": "section_break_15",
-   "fieldtype": "Section Break"
-  },
-  {
-   "fieldname": "introduction",
-   "fieldtype": "Text Editor",
-   "label": "Introduction",
-   "reqd": 1
-  },
-  {
-   "fieldname": "section_break_18",
-   "fieldtype": "Section Break",
-   "label": "Attendees"
-  },
-  {
-   "allow_on_submit": 1,
-   "fieldname": "employees",
-   "fieldtype": "Table",
-   "label": "Employees",
-   "options": "Training Event Employee"
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "Training Event",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "fieldname": "employee_emails",
-   "fieldtype": "Small Text",
-   "hidden": 1,
-   "label": "Employee Emails",
-   "options": "Email"
-  }
- ],
- "is_submittable": 1,
- "links": [],
- "modified": "2022-04-28 13:29:35.139497",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Training Event",
- "naming_rule": "By fieldname",
- "owner": "Administrator",
- "permissions": [
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "import": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  }
- ],
- "search_fields": "event_name",
- "show_name_in_global_search": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": [],
- "title_field": "event_name"
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/training_event/training_event.py b/erpnext/hr/doctype/training_event/training_event.py
deleted file mode 100644
index 59972bb..0000000
--- a/erpnext/hr/doctype/training_event/training_event.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.utils import time_diff_in_seconds
-
-from erpnext.hr.doctype.employee.employee import get_employee_emails
-
-
-class TrainingEvent(Document):
-	def validate(self):
-		self.set_employee_emails()
-		self.validate_period()
-
-	def on_update_after_submit(self):
-		self.set_status_for_attendees()
-
-	def set_employee_emails(self):
-		self.employee_emails = ", ".join(get_employee_emails([d.employee for d in self.employees]))
-
-	def validate_period(self):
-		if time_diff_in_seconds(self.end_time, self.start_time) <= 0:
-			frappe.throw(_("End time cannot be before start time"))
-
-	def set_status_for_attendees(self):
-		if self.event_status == "Completed":
-			for employee in self.employees:
-				if employee.attendance == "Present" and employee.status != "Feedback Submitted":
-					employee.status = "Completed"
-
-		elif self.event_status == "Scheduled":
-			for employee in self.employees:
-				employee.status = "Open"
-
-		self.db_update_all()
diff --git a/erpnext/hr/doctype/training_event/training_event_calendar.js b/erpnext/hr/doctype/training_event/training_event_calendar.js
deleted file mode 100644
index cb168c0..0000000
--- a/erpnext/hr/doctype/training_event/training_event_calendar.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-// License: GNU General Public License v3. See license.txt
-
-frappe.views.calendar["Training Event"] = {
-	field_map: {
-		"start": "start_time",
-		"end": "end_time",
-		"id": "name",
-		"title": "event_name",
-		"allDay": "allDay"
-	},
-	gantt: true,
-	get_events_method: "frappe.desk.calendar.get_events",
-}
diff --git a/erpnext/hr/doctype/training_event/training_event_dashboard.py b/erpnext/hr/doctype/training_event/training_event_dashboard.py
deleted file mode 100644
index ca13938..0000000
--- a/erpnext/hr/doctype/training_event/training_event_dashboard.py
+++ /dev/null
@@ -1,7 +0,0 @@
-def get_data():
-	return {
-		"fieldname": "training_event",
-		"transactions": [
-			{"items": ["Training Result", "Training Feedback"]},
-		],
-	}
diff --git a/erpnext/hr/doctype/training_event_employee/__init__.py b/erpnext/hr/doctype/training_event_employee/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/training_event_employee/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/training_event_employee/training_event_employee.json b/erpnext/hr/doctype/training_event_employee/training_event_employee.json
deleted file mode 100644
index bcb7d5e..0000000
--- a/erpnext/hr/doctype/training_event_employee/training_event_employee.json
+++ /dev/null
@@ -1,81 +0,0 @@
-{
- "actions": [],
- "creation": "2016-08-08 05:33:39.965305",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "employee",
-  "employee_name",
-  "department",
-  "column_break_3",
-  "status",
-  "attendance",
-  "is_mandatory"
- ],
- "fields": [
-  {
-   "fieldname": "employee",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Employee",
-   "no_copy": 1,
-   "options": "Employee"
-  },
-  {
-   "fetch_from": "employee.employee_name",
-   "fieldname": "employee_name",
-   "fieldtype": "Read Only",
-   "label": "Employee Name"
-  },
-  {
-   "fetch_from": "employee.department",
-   "fieldname": "department",
-   "fieldtype": "Link",
-   "label": "Department",
-   "options": "Department",
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break_3",
-   "fieldtype": "Column Break"
-  },
-  {
-   "allow_on_submit": 1,
-   "default": "Open",
-   "fieldname": "status",
-   "fieldtype": "Select",
-   "in_list_view": 1,
-   "label": "Status",
-   "no_copy": 1,
-   "options": "Open\nInvited\nCompleted\nFeedback Submitted"
-  },
-  {
-   "fieldname": "attendance",
-   "fieldtype": "Select",
-   "in_list_view": 1,
-   "label": "Attendance",
-   "options": "Present\nAbsent"
-  },
-  {
-   "columns": 2,
-   "default": "1",
-   "fieldname": "is_mandatory",
-   "fieldtype": "Check",
-   "in_list_view": 1,
-   "label": "Is Mandatory"
-  }
- ],
- "index_web_pages_for_search": 1,
- "istable": 1,
- "links": [],
- "modified": "2021-07-02 17:20:27.630176",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Training Event Employee",
- "owner": "Administrator",
- "permissions": [],
- "quick_entry": 1,
- "sort_field": "modified",
- "sort_order": "DESC"
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/training_event_employee/training_event_employee.py b/erpnext/hr/doctype/training_event_employee/training_event_employee.py
deleted file mode 100644
index 5dce6e1..0000000
--- a/erpnext/hr/doctype/training_event_employee/training_event_employee.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-from frappe.model.document import Document
-
-
-class TrainingEventEmployee(Document):
-	pass
diff --git a/erpnext/hr/doctype/training_feedback/__init__.py b/erpnext/hr/doctype/training_feedback/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/training_feedback/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/training_feedback/test_training_feedback.py b/erpnext/hr/doctype/training_feedback/test_training_feedback.py
deleted file mode 100644
index c787b70..0000000
--- a/erpnext/hr/doctype/training_feedback/test_training_feedback.py
+++ /dev/null
@@ -1,72 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-import frappe
-
-from erpnext.hr.doctype.training_event.test_training_event import (
-	create_training_event,
-	create_training_program,
-)
-from erpnext.payroll.doctype.salary_structure.test_salary_structure import make_employee
-
-
-class TestTrainingFeedback(unittest.TestCase):
-	def setUp(self):
-		create_training_program("Basic Training")
-		self.employee = make_employee("robert_loan@trainig.com")
-		self.employee2 = make_employee("suzie.tan@trainig.com")
-		self.attendees = [{"employee": self.employee}]
-
-	def test_employee_validations_for_feedback(self):
-		training_event = create_training_event(self.attendees)
-		training_event.submit()
-
-		training_event.event_status = "Completed"
-		training_event.save()
-		training_event.reload()
-
-		# should not allow creating feedback since employee2 was not part of the event
-		feedback = create_training_feedback(training_event.name, self.employee2)
-		self.assertRaises(frappe.ValidationError, feedback.save)
-
-		# cannot record feedback for absent employee
-		employee = frappe.db.get_value(
-			"Training Event Employee", {"parent": training_event.name, "employee": self.employee}, "name"
-		)
-
-		frappe.db.set_value("Training Event Employee", employee, "attendance", "Absent")
-		feedback = create_training_feedback(training_event.name, self.employee)
-		self.assertRaises(frappe.ValidationError, feedback.save)
-
-	def test_training_feedback_status(self):
-		training_event = create_training_event(self.attendees)
-		training_event.submit()
-
-		training_event.event_status = "Completed"
-		training_event.save()
-		training_event.reload()
-
-		feedback = create_training_feedback(training_event.name, self.employee)
-		feedback.submit()
-
-		status = frappe.db.get_value(
-			"Training Event Employee", {"parent": training_event.name, "employee": self.employee}, "status"
-		)
-
-		self.assertEqual(status, "Feedback Submitted")
-
-	def tearDown(self):
-		frappe.db.rollback()
-
-
-def create_training_feedback(event, employee):
-	return frappe.get_doc(
-		{
-			"doctype": "Training Feedback",
-			"training_event": event,
-			"employee": employee,
-			"feedback": "Test",
-		}
-	)
diff --git a/erpnext/hr/doctype/training_feedback/training_feedback.js b/erpnext/hr/doctype/training_feedback/training_feedback.js
deleted file mode 100644
index 5e875c1..0000000
--- a/erpnext/hr/doctype/training_feedback/training_feedback.js
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Training Feedback', {
-	onload: function(frm) {
-		frm.add_fetch("training_event", "course", "course");
-		frm.add_fetch("training_event", "event_name", "event_name");
-		frm.add_fetch("training_event", "trainer_name", "trainer_name");
-	}
-});
diff --git a/erpnext/hr/doctype/training_feedback/training_feedback.json b/erpnext/hr/doctype/training_feedback/training_feedback.json
deleted file mode 100644
index e968911..0000000
--- a/erpnext/hr/doctype/training_feedback/training_feedback.json
+++ /dev/null
@@ -1,143 +0,0 @@
-{
- "actions": [],
- "autoname": "HR-TRF-.YYYY.-.#####",
- "creation": "2022-01-27 13:14:35.935580",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "employee",
-  "employee_name",
-  "department",
-  "course",
-  "column_break_3",
-  "training_event",
-  "event_name",
-  "trainer_name",
-  "section_break_6",
-  "feedback",
-  "amended_from"
- ],
- "fields": [
-  {
-   "fieldname": "employee",
-   "fieldtype": "Link",
-   "in_global_search": 1,
-   "in_standard_filter": 1,
-   "label": "Employee",
-   "options": "Employee",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "employee.employee_name",
-   "fieldname": "employee_name",
-   "fieldtype": "Read Only",
-   "in_global_search": 1,
-   "label": "Employee Name"
-  },
-  {
-   "fetch_from": "employee.department",
-   "fieldname": "department",
-   "fieldtype": "Link",
-   "label": "Department",
-   "options": "Department",
-   "read_only": 1
-  },
-  {
-   "fetch_from": "training_event.course",
-   "fieldname": "course",
-   "fieldtype": "Data",
-   "label": "Course",
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break_3",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "training_event",
-   "fieldtype": "Link",
-   "in_standard_filter": 1,
-   "label": "Training Event",
-   "options": "Training Event",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "training_event.event_name",
-   "fieldname": "event_name",
-   "fieldtype": "Data",
-   "in_list_view": 1,
-   "label": "Event Name",
-   "read_only": 1
-  },
-  {
-   "fetch_from": "training_event.trainer_name",
-   "fieldname": "trainer_name",
-   "fieldtype": "Data",
-   "in_list_view": 1,
-   "label": "Trainer Name",
-   "read_only": 1
-  },
-  {
-   "fieldname": "section_break_6",
-   "fieldtype": "Section Break"
-  },
-  {
-   "fieldname": "feedback",
-   "fieldtype": "Text",
-   "label": "Feedback",
-   "reqd": 1
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "Training Feedback",
-   "print_hide": 1,
-   "read_only": 1
-  }
- ],
- "is_submittable": 1,
- "links": [],
- "modified": "2022-04-28 13:32:29.261421",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Training Feedback",
- "naming_rule": "Expression (old style)",
- "owner": "Administrator",
- "permissions": [
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "Employee",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  }
- ],
- "search_fields": "employee_name, training_event, event_name",
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": [],
- "title_field": "employee_name"
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/training_feedback/training_feedback.py b/erpnext/hr/doctype/training_feedback/training_feedback.py
deleted file mode 100644
index d5de28e..0000000
--- a/erpnext/hr/doctype/training_feedback/training_feedback.py
+++ /dev/null
@@ -1,47 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-
-
-class TrainingFeedback(Document):
-	def validate(self):
-		training_event = frappe.get_doc("Training Event", self.training_event)
-		if training_event.docstatus != 1:
-			frappe.throw(_("{0} must be submitted").format(_("Training Event")))
-
-		emp_event_details = frappe.db.get_value(
-			"Training Event Employee",
-			{"parent": self.training_event, "employee": self.employee},
-			["name", "attendance"],
-			as_dict=True,
-		)
-
-		if not emp_event_details:
-			frappe.throw(
-				_("Employee {0} not found in Training Event Participants.").format(
-					frappe.bold(self.employee_name)
-				)
-			)
-
-		if emp_event_details.attendance == "Absent":
-			frappe.throw(_("Feedback cannot be recorded for an absent Employee."))
-
-	def on_submit(self):
-		employee = frappe.db.get_value(
-			"Training Event Employee", {"parent": self.training_event, "employee": self.employee}
-		)
-
-		if employee:
-			frappe.db.set_value("Training Event Employee", employee, "status", "Feedback Submitted")
-
-	def on_cancel(self):
-		employee = frappe.db.get_value(
-			"Training Event Employee", {"parent": self.training_event, "employee": self.employee}
-		)
-
-		if employee:
-			frappe.db.set_value("Training Event Employee", employee, "status", "Completed")
diff --git a/erpnext/hr/doctype/training_program/__init__.py b/erpnext/hr/doctype/training_program/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/training_program/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/training_program/test_training_program.py b/erpnext/hr/doctype/training_program/test_training_program.py
deleted file mode 100644
index 5000705..0000000
--- a/erpnext/hr/doctype/training_program/test_training_program.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-
-class TestTrainingProgram(unittest.TestCase):
-	pass
diff --git a/erpnext/hr/doctype/training_program/training_program.js b/erpnext/hr/doctype/training_program/training_program.js
deleted file mode 100644
index a4ccf54..0000000
--- a/erpnext/hr/doctype/training_program/training_program.js
+++ /dev/null
@@ -1,5 +0,0 @@
-// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Training Program', {
-});
diff --git a/erpnext/hr/doctype/training_program/training_program.json b/erpnext/hr/doctype/training_program/training_program.json
deleted file mode 100644
index 522d5e9..0000000
--- a/erpnext/hr/doctype/training_program/training_program.json
+++ /dev/null
@@ -1,454 +0,0 @@
-{
- "allow_copy": 0, 
- "allow_guest_to_view": 0, 
- "allow_import": 0, 
- "allow_rename": 1, 
- "autoname": "field:training_program", 
- "beta": 0, 
- "creation": "2017-10-11 04:43:17.230065", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "", 
- "editable_grid": 1, 
- "engine": "InnoDB", 
- "fields": [
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "training_program", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Training Program", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 1, 
-   "bold": 1, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "default": "Scheduled", 
-   "fieldname": "status", 
-   "fieldtype": "Select", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Status", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Scheduled\nCompleted\nCancelled", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "column_break_3", 
-   "fieldtype": "Column Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "company", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Company", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Company", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "section_break_5", 
-   "fieldtype": "Section Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "trainer_name", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Trainer Name", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "trainer_email", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Trainer Email", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "column_break_8", 
-   "fieldtype": "Column Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "supplier", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Supplier", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Supplier", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "contact_number", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Contact Number", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "section_break_11", 
-   "fieldtype": "Section Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "description", 
-   "fieldtype": "Text Editor", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Description", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "amended_from", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Amended From", 
-   "length": 0, 
-   "no_copy": 1, 
-   "options": "Training Program", 
-   "permlevel": 0, 
-   "print_hide": 1, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }
- ], 
- "has_web_view": 0, 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "image_view": 0, 
- "in_create": 0, 
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 0, 
- "max_attachments": 0, 
- "modified": "2017-11-27 08:12:03.649247", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Training Program", 
- "name_case": "", 
- "owner": "Administrator", 
- "permissions": [
-  {
-   "amend": 0, 
-   "apply_user_permissions": 0, 
-   "cancel": 0, 
-   "create": 1, 
-   "delete": 1, 
-   "email": 1, 
-   "export": 1, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 1, 
-   "role": "HR Manager", 
-   "set_user_permissions": 0, 
-   "share": 1, 
-   "submit": 0, 
-   "write": 1
-  }
- ], 
- "quick_entry": 0, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "show_name_in_global_search": 1, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "title_field": "training_program", 
- "track_changes": 1, 
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/training_program/training_program.py b/erpnext/hr/doctype/training_program/training_program.py
deleted file mode 100644
index 96b2fd7..0000000
--- a/erpnext/hr/doctype/training_program/training_program.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-from frappe.model.document import Document
-
-
-class TrainingProgram(Document):
-	pass
diff --git a/erpnext/hr/doctype/training_program/training_program_dashboard.py b/erpnext/hr/doctype/training_program/training_program_dashboard.py
deleted file mode 100644
index 1735db1..0000000
--- a/erpnext/hr/doctype/training_program/training_program_dashboard.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from frappe import _
-
-
-def get_data():
-	return {
-		"fieldname": "training_program",
-		"transactions": [
-			{"label": _("Training Events"), "items": ["Training Event"]},
-		],
-	}
diff --git a/erpnext/hr/doctype/training_result/__init__.py b/erpnext/hr/doctype/training_result/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/training_result/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/training_result/test_training_result.py b/erpnext/hr/doctype/training_result/test_training_result.py
deleted file mode 100644
index 136543c..0000000
--- a/erpnext/hr/doctype/training_result/test_training_result.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-# test_records = frappe.get_test_records('Training Result')
-
-
-class TestTrainingResult(unittest.TestCase):
-	pass
diff --git a/erpnext/hr/doctype/training_result/training_result.js b/erpnext/hr/doctype/training_result/training_result.js
deleted file mode 100644
index 718b383..0000000
--- a/erpnext/hr/doctype/training_result/training_result.js
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Training Result', {
-	onload: function(frm) {
-		frm.trigger("training_event");
-	},
-
-	training_event: function(frm) {
-		frm.trigger("training_event");
-	},
-
-	training_event: function(frm) {
-		if (frm.doc.training_event && !frm.doc.docstatus && !frm.doc.employees) {
-			frappe.call({
-				method: "erpnext.hr.doctype.training_result.training_result.get_employees",
-				args: {
-					"training_event": frm.doc.training_event
-				},
-				callback: function(r) {
-					frm.set_value("employees" ,"");
-					if (r.message) {
-						$.each(r.message, function(i, d) {
-							var row = frappe.model.add_child(frm.doc, "Training Result Employee", "employees");
-							row.employee = d.employee;
-							row.employee_name = d.employee_name;
-						});
-					}
-					refresh_field("employees");
-				}
-			});
-		}
-	}
-});
diff --git a/erpnext/hr/doctype/training_result/training_result.json b/erpnext/hr/doctype/training_result/training_result.json
deleted file mode 100644
index f28669e..0000000
--- a/erpnext/hr/doctype/training_result/training_result.json
+++ /dev/null
@@ -1,83 +0,0 @@
-{
- "actions": [],
- "allow_rename": 1,
- "autoname": "HR-TRR-.YYYY.-.#####",
- "creation": "2016-11-04 02:13:48.407576",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "training_event",
-  "section_break_3",
-  "employees",
-  "amended_from",
-  "employee_emails"
- ],
- "fields": [
-  {
-   "fieldname": "training_event",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Training Event",
-   "options": "Training Event",
-   "reqd": 1,
-   "unique": 1
-  },
-  {
-   "fieldname": "section_break_3",
-   "fieldtype": "Section Break"
-  },
-  {
-   "fieldname": "employees",
-   "fieldtype": "Table",
-   "label": "Employees",
-   "options": "Training Result Employee"
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "Training Result",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "fieldname": "employee_emails",
-   "fieldtype": "Small Text",
-   "hidden": 1,
-   "label": "Employee Emails",
-   "options": "Email"
-  }
- ],
- "is_submittable": 1,
- "links": [],
- "modified": "2022-01-18 19:31:44.900034",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Training Result",
- "naming_rule": "Expression (old style)",
- "owner": "Administrator",
- "permissions": [
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  }
- ],
- "search_fields": "training_event",
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": [],
- "title_field": "training_event"
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/training_result/training_result.py b/erpnext/hr/doctype/training_result/training_result.py
deleted file mode 100644
index 48a5b2c..0000000
--- a/erpnext/hr/doctype/training_result/training_result.py
+++ /dev/null
@@ -1,34 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-
-from erpnext.hr.doctype.employee.employee import get_employee_emails
-
-
-class TrainingResult(Document):
-	def validate(self):
-		training_event = frappe.get_doc("Training Event", self.training_event)
-		if training_event.docstatus != 1:
-			frappe.throw(_("{0} must be submitted").format(_("Training Event")))
-
-		self.employee_emails = ", ".join(get_employee_emails([d.employee for d in self.employees]))
-
-	def on_submit(self):
-		training_event = frappe.get_doc("Training Event", self.training_event)
-		training_event.status = "Completed"
-		for e in self.employees:
-			for e1 in training_event.employees:
-				if e1.employee == e.employee:
-					e1.status = "Completed"
-					break
-
-		training_event.save()
-
-
-@frappe.whitelist()
-def get_employees(training_event):
-	return frappe.get_doc("Training Event", training_event).employees
diff --git a/erpnext/hr/doctype/training_result_employee/__init__.py b/erpnext/hr/doctype/training_result_employee/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/training_result_employee/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/training_result_employee/training_result_employee.json b/erpnext/hr/doctype/training_result_employee/training_result_employee.json
deleted file mode 100644
index c474754..0000000
--- a/erpnext/hr/doctype/training_result_employee/training_result_employee.json
+++ /dev/null
@@ -1,334 +0,0 @@
-{
- "allow_copy": 0, 
- "allow_events_in_timeline": 0, 
- "allow_guest_to_view": 0, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "beta": 0, 
- "creation": "2016-11-04 02:39:12.825569", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "", 
- "editable_grid": 1, 
- "engine": "InnoDB", 
- "fields": [
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "employee", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Employee", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Employee", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "column_break_2", 
-   "fieldtype": "Column Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fetch_from": "employee.employee_name", 
-   "fieldname": "employee_name", 
-   "fieldtype": "Read Only", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Employee Name", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fetch_from": "employee.department", 
-   "fieldname": "department", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Department", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Department", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "depends_on": "", 
-   "fieldname": "section_break_5", 
-   "fieldtype": "Section Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 1, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "hours", 
-   "fieldtype": "Float", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Hours", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 1, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "grade", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Grade", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "column_break_7", 
-   "fieldtype": "Column Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 1, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "comments", 
-   "fieldtype": "Text", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Comments", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }
- ], 
- "has_web_view": 0, 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "image_view": 0, 
- "in_create": 0, 
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 1, 
- "max_attachments": 0, 
- "modified": "2019-01-30 11:28:14.337778", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Training Result Employee", 
- "name_case": "", 
- "owner": "Administrator", 
- "permissions": [], 
- "quick_entry": 1, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "show_name_in_global_search": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "track_changes": 0, 
- "track_seen": 0, 
- "track_views": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/training_result_employee/training_result_employee.py b/erpnext/hr/doctype/training_result_employee/training_result_employee.py
deleted file mode 100644
index e048ff5..0000000
--- a/erpnext/hr/doctype/training_result_employee/training_result_employee.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-from frappe.model.document import Document
-
-
-class TrainingResultEmployee(Document):
-	pass
diff --git a/erpnext/hr/doctype/travel_itinerary/__init__.py b/erpnext/hr/doctype/travel_itinerary/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/travel_itinerary/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/travel_itinerary/travel_itinerary.json b/erpnext/hr/doctype/travel_itinerary/travel_itinerary.json
deleted file mode 100644
index f887027..0000000
--- a/erpnext/hr/doctype/travel_itinerary/travel_itinerary.json
+++ /dev/null
@@ -1,512 +0,0 @@
-{
- "allow_copy": 0, 
- "allow_guest_to_view": 0, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "beta": 0, 
- "creation": "2018-05-15 07:40:59.181192", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "", 
- "editable_grid": 1, 
- "engine": "InnoDB", 
- "fields": [
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "travel_from", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Travel From", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "travel_to", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Travel To", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "mode_of_travel", 
-   "fieldtype": "Select", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Mode of Travel", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "\nFlight\nTrain\nTaxi\nRented Car", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "meal_preference", 
-   "fieldtype": "Select", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Meal Preference", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "\nVegetarian\nNon-Vegetarian\nGluten Free\nNon Diary", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "travel_advance_required", 
-   "fieldtype": "Check", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Travel Advance Required", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "depends_on": "travel_advance_required", 
-   "fieldname": "advance_amount", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Advance Amount", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "column_break_6", 
-   "fieldtype": "Column Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "description": "", 
-   "fieldname": "departure_date", 
-   "fieldtype": "Datetime", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Departure Datetime", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "description": "", 
-   "fieldname": "arrival_date", 
-   "fieldtype": "Datetime", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Arrival Datetime", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "lodging_required", 
-   "fieldtype": "Check", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Lodging Required", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "depends_on": "lodging_required", 
-   "fieldname": "preferred_area_for_lodging", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Preferred Area for Lodging", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "depends_on": "lodging_required", 
-   "fieldname": "check_in_date", 
-   "fieldtype": "Date", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Check-in Date", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "depends_on": "lodging_required", 
-   "fieldname": "check_out_date", 
-   "fieldtype": "Date", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Check-out Date", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "section_break_14", 
-   "fieldtype": "Section Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "other_details", 
-   "fieldtype": "Small Text", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Other Details", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }
- ], 
- "has_web_view": 0, 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "image_view": 0, 
- "in_create": 0, 
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 1, 
- "max_attachments": 0, 
- "modified": "2018-05-15 09:55:20.138108", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Travel Itinerary", 
- "name_case": "", 
- "owner": "Administrator", 
- "permissions": [], 
- "quick_entry": 1, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "show_name_in_global_search": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "track_changes": 1, 
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/travel_itinerary/travel_itinerary.py b/erpnext/hr/doctype/travel_itinerary/travel_itinerary.py
deleted file mode 100644
index 529909b..0000000
--- a/erpnext/hr/doctype/travel_itinerary/travel_itinerary.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-from frappe.model.document import Document
-
-
-class TravelItinerary(Document):
-	pass
diff --git a/erpnext/hr/doctype/travel_request/__init__.py b/erpnext/hr/doctype/travel_request/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/travel_request/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/travel_request/test_travel_request.py b/erpnext/hr/doctype/travel_request/test_travel_request.py
deleted file mode 100644
index e29a1ca..0000000
--- a/erpnext/hr/doctype/travel_request/test_travel_request.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-
-class TestTravelRequest(unittest.TestCase):
-	pass
diff --git a/erpnext/hr/doctype/travel_request/travel_request.js b/erpnext/hr/doctype/travel_request/travel_request.js
deleted file mode 100644
index 9dd48eb..0000000
--- a/erpnext/hr/doctype/travel_request/travel_request.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Travel Request', {
-	refresh: function(frm) {
-
-	}
-});
diff --git a/erpnext/hr/doctype/travel_request/travel_request.json b/erpnext/hr/doctype/travel_request/travel_request.json
deleted file mode 100644
index 7908e1a..0000000
--- a/erpnext/hr/doctype/travel_request/travel_request.json
+++ /dev/null
@@ -1,245 +0,0 @@
-{
- "actions": [],
- "autoname": "HR-TRQ-.YYYY.-.#####",
- "creation": "2018-05-15 06:32:33.950356",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "travel_type",
-  "travel_funding",
-  "travel_proof",
-  "column_break_2",
-  "purpose_of_travel",
-  "details_of_sponsor",
-  "employee_details",
-  "employee",
-  "employee_name",
-  "cell_number",
-  "prefered_email",
-  "column_break_7",
-  "date_of_birth",
-  "personal_id_type",
-  "personal_id_number",
-  "passport_number",
-  "section_break_4",
-  "description",
-  "travel_itinerary",
-  "itinerary",
-  "costing_details",
-  "costings",
-  "accounting_dimensions_section",
-  "cost_center",
-  "dimension_col_break",
-  "event_details",
-  "name_of_organizer",
-  "address_of_organizer",
-  "other_details",
-  "amended_from"
- ],
- "fields": [
-  {
-   "fieldname": "travel_type",
-   "fieldtype": "Select",
-   "in_list_view": 1,
-   "label": "Travel Type",
-   "options": "\nDomestic\nInternational",
-   "reqd": 1
-  },
-  {
-   "fieldname": "travel_funding",
-   "fieldtype": "Select",
-   "label": "Travel Funding",
-   "options": "\nRequire Full Funding\nFully Sponsored\nPartially Sponsored, Require Partial Funding"
-  },
-  {
-   "fieldname": "travel_proof",
-   "fieldtype": "Attach",
-   "label": "Copy of Invitation/Announcement"
-  },
-  {
-   "fieldname": "column_break_2",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "purpose_of_travel",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Purpose of Travel",
-   "options": "Purpose of Travel",
-   "reqd": 1
-  },
-  {
-   "fieldname": "details_of_sponsor",
-   "fieldtype": "Data",
-   "label": "Details of Sponsor (Name, Location)"
-  },
-  {
-   "collapsible": 1,
-   "fieldname": "section_break_4",
-   "fieldtype": "Section Break",
-   "label": "Description"
-  },
-  {
-   "fieldname": "description",
-   "fieldtype": "Small Text",
-   "label": "Any other details"
-  },
-  {
-   "collapsible": 1,
-   "fieldname": "employee_details",
-   "fieldtype": "Section Break",
-   "label": "Employee Details"
-  },
-  {
-   "fieldname": "employee",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Employee",
-   "options": "Employee",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "employee.employee_name",
-   "fieldname": "employee_name",
-   "fieldtype": "Data",
-   "label": "Employee Name",
-   "read_only": 1
-  },
-  {
-   "fetch_from": "employee.cell_number",
-   "fieldname": "cell_number",
-   "fieldtype": "Data",
-   "label": "Contact Number"
-  },
-  {
-   "fetch_from": "employee.prefered_email",
-   "fieldname": "prefered_email",
-   "fieldtype": "Data",
-   "label": "Contact Email"
-  },
-  {
-   "fieldname": "column_break_7",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fetch_from": "employee.date_of_birth",
-   "fieldname": "date_of_birth",
-   "fieldtype": "Date",
-   "label": "Date of Birth",
-   "read_only": 1
-  },
-  {
-   "fieldname": "personal_id_type",
-   "fieldtype": "Link",
-   "label": "Identification Document Type",
-   "options": "Identification Document Type"
-  },
-  {
-   "fieldname": "personal_id_number",
-   "fieldtype": "Data",
-   "label": "Identification Document Number"
-  },
-  {
-   "fetch_from": "employee.passport_number",
-   "fieldname": "passport_number",
-   "fieldtype": "Data",
-   "label": "Passport Number"
-  },
-  {
-   "fieldname": "travel_itinerary",
-   "fieldtype": "Section Break",
-   "label": "Travel Itinerary"
-  },
-  {
-   "fieldname": "itinerary",
-   "fieldtype": "Table",
-   "options": "Travel Itinerary"
-  },
-  {
-   "fieldname": "costing_details",
-   "fieldtype": "Section Break",
-   "label": "Costing Details"
-  },
-  {
-   "fieldname": "cost_center",
-   "fieldtype": "Link",
-   "label": "Cost Center",
-   "options": "Cost Center"
-  },
-  {
-   "fieldname": "costings",
-   "fieldtype": "Table",
-   "label": "Costing",
-   "options": "Travel Request Costing"
-  },
-  {
-   "collapsible": 1,
-   "fieldname": "event_details",
-   "fieldtype": "Section Break",
-   "label": "Event Details"
-  },
-  {
-   "fieldname": "name_of_organizer",
-   "fieldtype": "Data",
-   "label": "Name of Organizer"
-  },
-  {
-   "fieldname": "address_of_organizer",
-   "fieldtype": "Data",
-   "label": "Address of Organizer"
-  },
-  {
-   "fieldname": "other_details",
-   "fieldtype": "Text",
-   "label": "Other Details"
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "Travel Request",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "collapsible": 1,
-   "fieldname": "accounting_dimensions_section",
-   "fieldtype": "Section Break",
-   "label": "Accounting Dimensions"
-  },
-  {
-   "fieldname": "dimension_col_break",
-   "fieldtype": "Column Break"
-  }
- ],
- "is_submittable": 1,
- "links": [],
- "modified": "2022-01-18 19:19:33.678664",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Travel Request",
- "naming_rule": "Expression (old style)",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "share": 1,
-   "write": 1
-  }
- ],
- "search_fields": "employee_name",
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": [],
- "title_field": "employee_name",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/travel_request/travel_request.py b/erpnext/hr/doctype/travel_request/travel_request.py
deleted file mode 100644
index 02379c5..0000000
--- a/erpnext/hr/doctype/travel_request/travel_request.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-from frappe.model.document import Document
-
-from erpnext.hr.utils import validate_active_employee
-
-
-class TravelRequest(Document):
-	def validate(self):
-		validate_active_employee(self.employee)
diff --git a/erpnext/hr/doctype/travel_request_costing/__init__.py b/erpnext/hr/doctype/travel_request_costing/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/travel_request_costing/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/travel_request_costing/travel_request_costing.json b/erpnext/hr/doctype/travel_request_costing/travel_request_costing.json
deleted file mode 100644
index b64b1a9..0000000
--- a/erpnext/hr/doctype/travel_request_costing/travel_request_costing.json
+++ /dev/null
@@ -1,257 +0,0 @@
-{
- "allow_copy": 0, 
- "allow_guest_to_view": 0, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "beta": 0, 
- "creation": "2018-05-15 10:28:37.429581", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "", 
- "editable_grid": 1, 
- "engine": "InnoDB", 
- "fields": [
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "expense_type", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Expense Type", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Expense Claim Type", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "column_break_2", 
-   "fieldtype": "Column Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "sponsored_amount", 
-   "fieldtype": "Currency", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Sponsored Amount", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "funded_amount", 
-   "fieldtype": "Currency", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Funded Amount", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "total_amount", 
-   "fieldtype": "Currency", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Total Amount", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "section_break_4", 
-   "fieldtype": "Section Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "comments", 
-   "fieldtype": "Small Text", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Comments", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }
- ], 
- "has_web_view": 0, 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "image_view": 0, 
- "in_create": 0, 
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 1, 
- "max_attachments": 0, 
- "modified": "2018-05-15 10:42:07.960530", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Travel Request Costing", 
- "name_case": "", 
- "owner": "Administrator", 
- "permissions": [], 
- "quick_entry": 1, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "show_name_in_global_search": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "track_changes": 1, 
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/travel_request_costing/travel_request_costing.py b/erpnext/hr/doctype/travel_request_costing/travel_request_costing.py
deleted file mode 100644
index 0d1a592..0000000
--- a/erpnext/hr/doctype/travel_request_costing/travel_request_costing.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-from frappe.model.document import Document
-
-
-class TravelRequestCosting(Document):
-	pass
diff --git a/erpnext/hr/doctype/upload_attendance/README.md b/erpnext/hr/doctype/upload_attendance/README.md
deleted file mode 100644
index d0b3721..0000000
--- a/erpnext/hr/doctype/upload_attendance/README.md
+++ /dev/null
@@ -1 +0,0 @@
-Tool to upload attendance via csv file.
\ No newline at end of file
diff --git a/erpnext/hr/doctype/upload_attendance/__init__.py b/erpnext/hr/doctype/upload_attendance/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/upload_attendance/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/upload_attendance/test_upload_attendance.py b/erpnext/hr/doctype/upload_attendance/test_upload_attendance.py
deleted file mode 100644
index 537c206..0000000
--- a/erpnext/hr/doctype/upload_attendance/test_upload_attendance.py
+++ /dev/null
@@ -1,42 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-import frappe
-from frappe.utils import getdate
-
-import erpnext
-from erpnext.hr.doctype.employee.test_employee import make_employee
-from erpnext.hr.doctype.upload_attendance.upload_attendance import get_data
-
-test_dependencies = ["Holiday List"]
-
-
-class TestUploadAttendance(unittest.TestCase):
-	@classmethod
-	def setUpClass(cls):
-		frappe.db.set_value(
-			"Company", erpnext.get_default_company(), "default_holiday_list", "_Test Holiday List"
-		)
-
-	def test_date_range(self):
-		employee = make_employee("test_employee@company.com")
-		employee_doc = frappe.get_doc("Employee", employee)
-		date_of_joining = "2018-01-02"
-		relieving_date = "2018-01-03"
-		from_date = "2018-01-01"
-		to_date = "2018-01-04"
-		employee_doc.date_of_joining = date_of_joining
-		employee_doc.relieving_date = relieving_date
-		employee_doc.save()
-		args = {"from_date": from_date, "to_date": to_date}
-		data = get_data(args)
-		filtered_data = []
-		for row in data:
-			if row[1] == employee:
-				filtered_data.append(row)
-		for row in filtered_data:
-			self.assertTrue(
-				getdate(row[3]) >= getdate(date_of_joining) and getdate(row[3]) <= getdate(relieving_date)
-			)
diff --git a/erpnext/hr/doctype/upload_attendance/upload_attendance.js b/erpnext/hr/doctype/upload_attendance/upload_attendance.js
deleted file mode 100644
index bbafc82..0000000
--- a/erpnext/hr/doctype/upload_attendance/upload_attendance.js
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-// License: GNU General Public License v3. See license.txt
-
-
-
-frappe.provide("erpnext.hr");
-
-erpnext.hr.AttendanceControlPanel = class AttendanceControlPanel extends frappe.ui.form.Controller {
-	onload() {
-		this.frm.set_value("att_fr_date", frappe.datetime.get_today());
-		this.frm.set_value("att_to_date", frappe.datetime.get_today());
-	}
-
-	refresh() {
-		this.frm.disable_save();
-		this.show_upload();
-		this.setup_import_progress();
-	}
-
-	get_template() {
-		if(!this.frm.doc.att_fr_date || !this.frm.doc.att_to_date) {
-			frappe.msgprint(__("Attendance From Date and Attendance To Date is mandatory"));
-			return;
-		}
-		window.location.href = repl(frappe.request.url +
-			'?cmd=%(cmd)s&from_date=%(from_date)s&to_date=%(to_date)s', {
-			cmd: "erpnext.hr.doctype.upload_attendance.upload_attendance.get_template",
-			from_date: this.frm.doc.att_fr_date,
-			to_date: this.frm.doc.att_to_date,
-		});
-	}
-
-	show_upload() {
-		var $wrapper = $(cur_frm.fields_dict.upload_html.wrapper).empty();
-		new frappe.ui.FileUploader({
-			wrapper: $wrapper,
-			method: 'erpnext.hr.doctype.upload_attendance.upload_attendance.upload'
-		});
-	}
-
-	setup_import_progress() {
-		var $log_wrapper = $(this.frm.fields_dict.import_log.wrapper).empty();
-
-		frappe.realtime.on('import_attendance', (data) => {
-			if (data.progress) {
-				this.frm.dashboard.show_progress('Import Attendance', data.progress / data.total * 100,
-					__('Importing {0} of {1}', [data.progress, data.total]));
-				if (data.progress === data.total) {
-					this.frm.dashboard.hide_progress('Import Attendance');
-				}
-			} else if (data.error) {
-				this.frm.dashboard.hide();
-				let messages = [`<th>${__('Error in some rows')}</th>`].concat(data.messages
-					.filter(message => message.includes('Error'))
-					.map(message => `<tr><td>${message}</td></tr>`))
-					.join('');
-				$log_wrapper.append('<table class="table table-bordered">' + messages);
-			} else if (data.messages) {
-				this.frm.dashboard.hide();
-				let messages = [`<th>${__('Import Successful')}</th>`].concat(data.messages
-					.map(message => `<tr><td>${message}</td></tr>`))
-					.join('');
-				$log_wrapper.append('<table class="table table-bordered">' + messages);
-			}
-		});
-	}
-}
-
-cur_frm.cscript = new erpnext.hr.AttendanceControlPanel({frm: cur_frm});
diff --git a/erpnext/hr/doctype/upload_attendance/upload_attendance.json b/erpnext/hr/doctype/upload_attendance/upload_attendance.json
deleted file mode 100644
index a1451fd..0000000
--- a/erpnext/hr/doctype/upload_attendance/upload_attendance.json
+++ /dev/null
@@ -1,285 +0,0 @@
-{
- "allow_copy": 1, 
- "allow_guest_to_view": 0, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "beta": 0, 
- "creation": "2013-01-25 11:34:53", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "editable_grid": 0, 
- "fields": [
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "description": "", 
-   "fieldname": "download_template", 
-   "fieldtype": "Section Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Download Template", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "att_fr_date", 
-   "fieldtype": "Date", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Attendance From Date", 
-   "length": 0, 
-   "no_copy": 0, 
-   "oldfieldname": "attenadnce_date", 
-   "oldfieldtype": "Date", 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "att_to_date", 
-   "fieldtype": "Date", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Attendance To Date", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "get_template", 
-   "fieldtype": "Button", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Get Template", 
-   "length": 0, 
-   "no_copy": 0, 
-   "oldfieldtype": "Button", 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "upload_attendance_data", 
-   "fieldtype": "Section Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Import Attendance", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "upload_html", 
-   "fieldtype": "HTML", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Upload HTML", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "import_log", 
-   "fieldtype": "HTML", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Import Log", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }
- ], 
- "has_web_view": 0, 
- "hide_heading": 0, 
- "hide_toolbar": 1, 
- "icon": "fa fa-upload-alt", 
- "idx": 1, 
- "image_view": 0, 
- "in_create": 0, 
- "is_submittable": 0, 
- "issingle": 1, 
- "istable": 0, 
- "max_attachments": 1, 
- "modified": "2020-09-18 17:26:09.703215", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Upload Attendance", 
- "owner": "Administrator", 
- "permissions": [
-  {
-   "amend": 0, 
-   "apply_user_permissions": 0, 
-   "cancel": 0, 
-   "create": 1, 
-   "delete": 0, 
-   "email": 0, 
-   "export": 0, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 0, 
-   "read": 1, 
-   "report": 0, 
-   "role": "HR User", 
-   "set_user_permissions": 0, 
-   "share": 0, 
-   "submit": 0, 
-   "write": 1
-  }, 
-  {
-   "amend": 0, 
-   "apply_user_permissions": 0, 
-   "cancel": 0, 
-   "create": 1, 
-   "delete": 0, 
-   "email": 0, 
-   "export": 0, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 0, 
-   "read": 1, 
-   "report": 0, 
-   "role": "HR Manager", 
-   "set_user_permissions": 0, 
-   "share": 0, 
-   "submit": 0, 
-   "write": 1
-  }
- ], 
- "quick_entry": 0, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "show_name_in_global_search": 0, 
- "track_changes": 0, 
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/upload_attendance/upload_attendance.py b/erpnext/hr/doctype/upload_attendance/upload_attendance.py
deleted file mode 100644
index a66a481..0000000
--- a/erpnext/hr/doctype/upload_attendance/upload_attendance.py
+++ /dev/null
@@ -1,222 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.utils import add_days, cstr, date_diff, getdate
-from frappe.utils.csvutils import UnicodeWriter
-
-from erpnext.hr.doctype.employee.employee import get_holiday_list_for_employee
-from erpnext.hr.utils import get_holiday_dates_for_employee
-
-
-class UploadAttendance(Document):
-	pass
-
-
-@frappe.whitelist()
-def get_template():
-	if not frappe.has_permission("Attendance", "create"):
-		raise frappe.PermissionError
-
-	args = frappe.local.form_dict
-
-	if getdate(args.from_date) > getdate(args.to_date):
-		frappe.throw(_("To Date should be greater than From Date"))
-
-	w = UnicodeWriter()
-	w = add_header(w)
-
-	try:
-		w = add_data(w, args)
-	except Exception as e:
-		frappe.clear_messages()
-		frappe.respond_as_web_page("Holiday List Missing", html=e)
-		return
-
-	# write out response as a type csv
-	frappe.response["result"] = cstr(w.getvalue())
-	frappe.response["type"] = "csv"
-	frappe.response["doctype"] = "Attendance"
-
-
-def add_header(w):
-	status = ", ".join(
-		(frappe.get_meta("Attendance").get_field("status").options or "").strip().split("\n")
-	)
-	w.writerow(["Notes:"])
-	w.writerow(["Please do not change the template headings"])
-	w.writerow(["Status should be one of these values: " + status])
-	w.writerow(["If you are overwriting existing attendance records, 'ID' column mandatory"])
-	w.writerow(
-		["ID", "Employee", "Employee Name", "Date", "Status", "Leave Type", "Company", "Naming Series"]
-	)
-	return w
-
-
-def add_data(w, args):
-	data = get_data(args)
-	writedata(w, data)
-	return w
-
-
-def get_data(args):
-	dates = get_dates(args)
-	employees = get_active_employees()
-	holidays = get_holidays_for_employees(
-		[employee.name for employee in employees], args["from_date"], args["to_date"]
-	)
-	existing_attendance_records = get_existing_attendance_records(args)
-	data = []
-	for date in dates:
-		for employee in employees:
-			if getdate(date) < getdate(employee.date_of_joining):
-				continue
-			if employee.relieving_date:
-				if getdate(date) > getdate(employee.relieving_date):
-					continue
-			existing_attendance = {}
-			if (
-				existing_attendance_records
-				and tuple([getdate(date), employee.name]) in existing_attendance_records
-				and getdate(employee.date_of_joining) <= getdate(date)
-				and getdate(employee.relieving_date) >= getdate(date)
-			):
-				existing_attendance = existing_attendance_records[tuple([getdate(date), employee.name])]
-
-			employee_holiday_list = get_holiday_list_for_employee(employee.name)
-
-			row = [
-				existing_attendance and existing_attendance.name or "",
-				employee.name,
-				employee.employee_name,
-				date,
-				existing_attendance and existing_attendance.status or "",
-				existing_attendance and existing_attendance.leave_type or "",
-				employee.company,
-				existing_attendance and existing_attendance.naming_series or get_naming_series(),
-			]
-			if date in holidays[employee_holiday_list]:
-				row[4] = "Holiday"
-			data.append(row)
-
-	return data
-
-
-def get_holidays_for_employees(employees, from_date, to_date):
-	holidays = {}
-	for employee in employees:
-		holiday_list = get_holiday_list_for_employee(employee)
-		holiday = get_holiday_dates_for_employee(employee, getdate(from_date), getdate(to_date))
-		if holiday_list not in holidays:
-			holidays[holiday_list] = holiday
-
-	return holidays
-
-
-def writedata(w, data):
-	for row in data:
-		w.writerow(row)
-
-
-def get_dates(args):
-	"""get list of dates in between from date and to date"""
-	no_of_days = date_diff(add_days(args["to_date"], 1), args["from_date"])
-	dates = [add_days(args["from_date"], i) for i in range(0, no_of_days)]
-	return dates
-
-
-def get_active_employees():
-	employees = frappe.db.get_all(
-		"Employee",
-		fields=["name", "employee_name", "date_of_joining", "company", "relieving_date"],
-		filters={"docstatus": ["<", 2], "status": "Active"},
-	)
-	return employees
-
-
-def get_existing_attendance_records(args):
-	attendance = frappe.db.sql(
-		"""select name, attendance_date, employee, status, leave_type, naming_series
-		from `tabAttendance` where attendance_date between %s and %s and docstatus < 2""",
-		(args["from_date"], args["to_date"]),
-		as_dict=1,
-	)
-
-	existing_attendance = {}
-	for att in attendance:
-		existing_attendance[tuple([att.attendance_date, att.employee])] = att
-
-	return existing_attendance
-
-
-def get_naming_series():
-	series = frappe.get_meta("Attendance").get_field("naming_series").options.strip().split("\n")
-	if not series:
-		frappe.throw(_("Please setup numbering series for Attendance via Setup > Numbering Series"))
-	return series[0]
-
-
-@frappe.whitelist()
-def upload():
-	if not frappe.has_permission("Attendance", "create"):
-		raise frappe.PermissionError
-
-	from frappe.utils.csvutils import read_csv_content
-
-	rows = read_csv_content(frappe.local.uploaded_file)
-	if not rows:
-		frappe.throw(_("Please select a csv file"))
-	frappe.enqueue(import_attendances, rows=rows, now=True if len(rows) < 200 else False)
-
-
-def import_attendances(rows):
-	def remove_holidays(rows):
-		rows = [row for row in rows if row[4] != "Holiday"]
-		return rows
-
-	from frappe.modules import scrub
-
-	rows = list(filter(lambda x: x and any(x), rows))
-	columns = [scrub(f) for f in rows[4]]
-	columns[0] = "name"
-	columns[3] = "attendance_date"
-	rows = rows[5:]
-	ret = []
-	error = False
-
-	rows = remove_holidays(rows)
-
-	from frappe.utils.csvutils import check_record, import_doc
-
-	for i, row in enumerate(rows):
-		if not row:
-			continue
-		row_idx = i + 5
-		d = frappe._dict(zip(columns, row))
-
-		d["doctype"] = "Attendance"
-		if d.name:
-			d["docstatus"] = frappe.db.get_value("Attendance", d.name, "docstatus")
-
-		try:
-			check_record(d)
-			ret.append(import_doc(d, "Attendance", 1, row_idx, submit=True))
-			frappe.publish_realtime("import_attendance", dict(progress=i, total=len(rows)))
-		except AttributeError:
-			pass
-		except Exception as e:
-			error = True
-			ret.append("Error for row (#%d) %s : %s" % (row_idx, len(row) > 1 and row[1] or "", cstr(e)))
-			frappe.errprint(frappe.get_traceback())
-
-	if error:
-		frappe.db.rollback()
-	else:
-		frappe.db.commit()
-
-	frappe.publish_realtime("import_attendance", dict(messages=ret, error=error))
diff --git a/erpnext/hr/doctype/vehicle/__init__.py b/erpnext/hr/doctype/vehicle/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/vehicle/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/vehicle/test_vehicle.py b/erpnext/hr/doctype/vehicle/test_vehicle.py
deleted file mode 100644
index 97fe651..0000000
--- a/erpnext/hr/doctype/vehicle/test_vehicle.py
+++ /dev/null
@@ -1,28 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-import frappe
-from frappe.utils import random_string
-
-# test_records = frappe.get_test_records('Vehicle')
-
-
-class TestVehicle(unittest.TestCase):
-	def test_make_vehicle(self):
-		vehicle = frappe.get_doc(
-			{
-				"doctype": "Vehicle",
-				"license_plate": random_string(10).upper(),
-				"make": "Maruti",
-				"model": "PCM",
-				"last_odometer": 5000,
-				"acquisition_date": frappe.utils.nowdate(),
-				"location": "Mumbai",
-				"chassis_no": "1234ABCD",
-				"uom": "Litre",
-				"vehicle_value": frappe.utils.flt(500000),
-			}
-		)
-		vehicle.insert()
diff --git a/erpnext/hr/doctype/vehicle/vehicle.js b/erpnext/hr/doctype/vehicle/vehicle.js
deleted file mode 100644
index f12c434..0000000
--- a/erpnext/hr/doctype/vehicle/vehicle.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Vehicle', {
-	refresh: function(frm) {
-
-	}
-});
diff --git a/erpnext/hr/doctype/vehicle/vehicle.json b/erpnext/hr/doctype/vehicle/vehicle.json
deleted file mode 100644
index 6f395b3..0000000
--- a/erpnext/hr/doctype/vehicle/vehicle.json
+++ /dev/null
@@ -1,875 +0,0 @@
-{
- "allow_copy": 0, 
- "allow_guest_to_view": 0, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "autoname": "field:license_plate", 
- "beta": 0, 
- "creation": "2016-09-03 03:33:27.680331", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "Document", 
- "editable_grid": 1, 
- "fields": [
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "license_plate", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "License Plate", 
-   "length": 0, 
-   "no_copy": 1, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 1
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "make", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Make", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "column_break_3", 
-   "fieldtype": "Column Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "model", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 1, 
-   "label": "Model", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "vehicle_details", 
-   "fieldtype": "Section Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Details", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "last_odometer", 
-   "fieldtype": "Int", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Odometer Value (Last)", 
-   "length": 0, 
-   "no_copy": 1, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 1, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "acquisition_date", 
-   "fieldtype": "Date", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Acquisition Date", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "location", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Location", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "column_break_8", 
-   "fieldtype": "Column Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "chassis_no", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Chassis No", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "vehicle_value", 
-   "fieldtype": "Currency", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Vehicle Value", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 1, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "employee", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 1, 
-   "label": "Employee", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Employee", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "insurance_details", 
-   "fieldtype": "Section Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Insurance Details", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "insurance_company", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Insurance Company", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "policy_no", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Policy No", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "column_break_15", 
-   "fieldtype": "Column Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "start_date", 
-   "fieldtype": "Date", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Start Date", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "end_date", 
-   "fieldtype": "Date", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "End Date", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "additional_details", 
-   "fieldtype": "Section Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Additional Details", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "fuel_type", 
-   "fieldtype": "Select", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 1, 
-   "label": "Fuel Type", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Petrol\nDiesel\nNatural Gas\nElectric", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "default": "", 
-   "fieldname": "uom", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Fuel UOM", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "UOM", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "carbon_check_date", 
-   "fieldtype": "Date", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Last Carbon Check", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "column_break_21", 
-   "fieldtype": "Column Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "color", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Color", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "wheels", 
-   "fieldtype": "Int", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Wheels", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "doors", 
-   "fieldtype": "Int", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Doors", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "amended_from", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Amended From", 
-   "length": 0, 
-   "no_copy": 1, 
-   "options": "Vehicle", 
-   "permlevel": 0, 
-   "print_hide": 1, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }
- ], 
- "has_web_view": 0, 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "image_view": 0, 
- "in_create": 0, 
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 0, 
- "max_attachments": 0, 
- "modified": "2017-11-29 14:48:30.813359", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Vehicle", 
- "name_case": "", 
- "owner": "Administrator", 
- "permissions": [
-  {
-   "amend": 0, 
-   "apply_user_permissions": 0, 
-   "cancel": 0, 
-   "create": 1, 
-   "delete": 1, 
-   "email": 1, 
-   "export": 1, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 1, 
-   "role": "Fleet Manager", 
-   "set_user_permissions": 0, 
-   "share": 1, 
-   "submit": 0, 
-   "write": 1
-  }
- ], 
- "quick_entry": 1, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "search_fields": "license_plate,location,model", 
- "show_name_in_global_search": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "title_field": "", 
- "track_changes": 1, 
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/vehicle/vehicle.py b/erpnext/hr/doctype/vehicle/vehicle.py
deleted file mode 100644
index 22c14c3..0000000
--- a/erpnext/hr/doctype/vehicle/vehicle.py
+++ /dev/null
@@ -1,29 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.utils import getdate
-
-
-class Vehicle(Document):
-	def validate(self):
-		if getdate(self.start_date) > getdate(self.end_date):
-			frappe.throw(_("Insurance Start date should be less than Insurance End date"))
-		if getdate(self.carbon_check_date) > getdate():
-			frappe.throw(_("Last carbon check date cannot be a future date"))
-
-
-def get_timeline_data(doctype, name):
-	"""Return timeline for vehicle log"""
-	return dict(
-		frappe.db.sql(
-			"""select unix_timestamp(date), count(*)
-	from `tabVehicle Log` where license_plate=%s
-	and date > date_sub(curdate(), interval 1 year)
-	group by date""",
-			name,
-		)
-	)
diff --git a/erpnext/hr/doctype/vehicle/vehicle_dashboard.py b/erpnext/hr/doctype/vehicle/vehicle_dashboard.py
deleted file mode 100644
index 758dfbd..0000000
--- a/erpnext/hr/doctype/vehicle/vehicle_dashboard.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from frappe import _
-
-
-def get_data():
-	return {
-		"heatmap": True,
-		"heatmap_message": _(
-			"This is based on logs against this Vehicle. See timeline below for details"
-		),
-		"fieldname": "license_plate",
-		"non_standard_fieldnames": {"Delivery Trip": "vehicle"},
-		"transactions": [{"items": ["Vehicle Log"]}, {"items": ["Delivery Trip"]}],
-	}
diff --git a/erpnext/hr/doctype/vehicle_log/__init__.py b/erpnext/hr/doctype/vehicle_log/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/vehicle_log/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/vehicle_log/test_vehicle_log.py b/erpnext/hr/doctype/vehicle_log/test_vehicle_log.py
deleted file mode 100644
index bb29670..0000000
--- a/erpnext/hr/doctype/vehicle_log/test_vehicle_log.py
+++ /dev/null
@@ -1,131 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-import frappe
-from frappe.utils import cstr, flt, nowdate, random_string
-
-from erpnext.hr.doctype.employee.test_employee import make_employee
-from erpnext.hr.doctype.vehicle_log.vehicle_log import make_expense_claim
-
-
-class TestVehicleLog(unittest.TestCase):
-	def setUp(self):
-		employee_id = frappe.db.sql(
-			"""select name from `tabEmployee` where name='testdriver@example.com'"""
-		)
-		self.employee_id = employee_id[0][0] if employee_id else None
-
-		if not self.employee_id:
-			self.employee_id = make_employee("testdriver@example.com", company="_Test Company")
-
-		self.license_plate = get_vehicle(self.employee_id)
-
-	def tearDown(self):
-		frappe.delete_doc("Vehicle", self.license_plate, force=1)
-		frappe.delete_doc("Employee", self.employee_id, force=1)
-
-	def test_make_vehicle_log_and_syncing_of_odometer_value(self):
-		vehicle_log = make_vehicle_log(self.license_plate, self.employee_id)
-
-		# checking value of vehicle odometer value on submit.
-		vehicle = frappe.get_doc("Vehicle", self.license_plate)
-		self.assertEqual(vehicle.last_odometer, vehicle_log.odometer)
-
-		# checking value vehicle odometer on vehicle log cancellation.
-		last_odometer = vehicle_log.last_odometer
-		current_odometer = vehicle_log.odometer
-		distance_travelled = current_odometer - last_odometer
-
-		vehicle_log.cancel()
-		vehicle.reload()
-
-		self.assertEqual(vehicle.last_odometer, current_odometer - distance_travelled)
-
-		vehicle_log.delete()
-
-	def test_vehicle_log_fuel_expense(self):
-		vehicle_log = make_vehicle_log(self.license_plate, self.employee_id)
-
-		expense_claim = make_expense_claim(vehicle_log.name)
-		fuel_expense = expense_claim.expenses[0].amount
-		self.assertEqual(fuel_expense, 50 * 500)
-
-		vehicle_log.cancel()
-		frappe.delete_doc("Expense Claim", expense_claim.name)
-		frappe.delete_doc("Vehicle Log", vehicle_log.name)
-
-	def test_vehicle_log_with_service_expenses(self):
-		vehicle_log = make_vehicle_log(self.license_plate, self.employee_id, with_services=True)
-
-		expense_claim = make_expense_claim(vehicle_log.name)
-		expenses = expense_claim.expenses[0].amount
-		self.assertEqual(expenses, 27000)
-
-		vehicle_log.cancel()
-		frappe.delete_doc("Expense Claim", expense_claim.name)
-		frappe.delete_doc("Vehicle Log", vehicle_log.name)
-
-
-def get_vehicle(employee_id):
-	license_plate = random_string(10).upper()
-	vehicle = frappe.get_doc(
-		{
-			"doctype": "Vehicle",
-			"license_plate": cstr(license_plate),
-			"make": "Maruti",
-			"model": "PCM",
-			"employee": employee_id,
-			"last_odometer": 5000,
-			"acquisition_date": nowdate(),
-			"location": "Mumbai",
-			"chassis_no": "1234ABCD",
-			"uom": "Litre",
-			"vehicle_value": flt(500000),
-		}
-	)
-	try:
-		vehicle.insert(ignore_if_duplicate=True)
-	except frappe.DuplicateEntryError:
-		pass
-	return license_plate
-
-
-def make_vehicle_log(license_plate, employee_id, with_services=False):
-	vehicle_log = frappe.get_doc(
-		{
-			"doctype": "Vehicle Log",
-			"license_plate": cstr(license_plate),
-			"employee": employee_id,
-			"date": nowdate(),
-			"odometer": 5010,
-			"fuel_qty": flt(50),
-			"price": flt(500),
-		}
-	)
-
-	if with_services:
-		vehicle_log.append(
-			"service_detail",
-			{
-				"service_item": "Oil Change",
-				"type": "Inspection",
-				"frequency": "Mileage",
-				"expense_amount": flt(500),
-			},
-		)
-		vehicle_log.append(
-			"service_detail",
-			{
-				"service_item": "Wheels",
-				"type": "Change",
-				"frequency": "Half Yearly",
-				"expense_amount": flt(1500),
-			},
-		)
-
-	vehicle_log.save()
-	vehicle_log.submit()
-
-	return vehicle_log
diff --git a/erpnext/hr/doctype/vehicle_log/vehicle_log.js b/erpnext/hr/doctype/vehicle_log/vehicle_log.js
deleted file mode 100644
index 14fe9a0..0000000
--- a/erpnext/hr/doctype/vehicle_log/vehicle_log.js
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on("Vehicle Log", {
-	refresh: function(frm) {
-		if(frm.doc.docstatus == 1) {
-			frm.add_custom_button(__('Expense Claim'), function() {
-				frm.events.expense_claim(frm);
-			}, __('Create'));
-			frm.page.set_inner_btn_group_as_primary(__('Create'));
-		}
-	},
-
-	expense_claim: function(frm){
-		frappe.call({
-			method: "erpnext.hr.doctype.vehicle_log.vehicle_log.make_expense_claim",
-			args:{
-				docname: frm.doc.name
-			},
-			callback: function(r){
-				var doc = frappe.model.sync(r.message);
-				frappe.set_route('Form', 'Expense Claim', r.message.name);
-			}
-		});
-	}
-});
diff --git a/erpnext/hr/doctype/vehicle_log/vehicle_log.json b/erpnext/hr/doctype/vehicle_log/vehicle_log.json
deleted file mode 100644
index 4ea9045..0000000
--- a/erpnext/hr/doctype/vehicle_log/vehicle_log.json
+++ /dev/null
@@ -1,191 +0,0 @@
-{
- "actions": [],
- "autoname": "naming_series:",
- "creation": "2016-09-03 14:14:51.788550",
- "doctype": "DocType",
- "document_type": "Document",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "vehicle_section",
-  "naming_series",
-  "license_plate",
-  "employee",
-  "column_break_7",
-  "model",
-  "make",
-  "odometer_reading",
-  "date",
-  "odometer",
-  "column_break_12",
-  "last_odometer",
-  "refuelling_details",
-  "fuel_qty",
-  "price",
-  "column_break_15",
-  "supplier",
-  "invoice",
-  "service_details",
-  "service_detail",
-  "amended_from"
- ],
- "fields": [
-  {
-   "fieldname": "vehicle_section",
-   "fieldtype": "Section Break",
-   "options": "fa fa-user"
-  },
-  {
-   "fieldname": "naming_series",
-   "fieldtype": "Select",
-   "label": "Series",
-   "no_copy": 1,
-   "options": "HR-VLOG-.YYYY.-",
-   "print_hide": 1,
-   "reqd": 1,
-   "set_only_once": 1
-  },
-  {
-   "fieldname": "license_plate",
-   "fieldtype": "Link",
-   "in_global_search": 1,
-   "in_list_view": 1,
-   "label": "License Plate",
-   "options": "Vehicle",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "license_plate.employee",
-   "fetch_if_empty": 1,
-   "fieldname": "employee",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Employee",
-   "options": "Employee",
-   "reqd": 1
-  },
-  {
-   "fieldname": "column_break_7",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fetch_from": "license_plate.model",
-   "fieldname": "model",
-   "fieldtype": "Read Only",
-   "label": "Model"
-  },
-  {
-   "fetch_from": "license_plate.make",
-   "fieldname": "make",
-   "fieldtype": "Read Only",
-   "label": "Make"
-  },
-  {
-   "fieldname": "odometer_reading",
-   "fieldtype": "Section Break",
-   "label": "Odometer Reading"
-  },
-  {
-   "fieldname": "date",
-   "fieldtype": "Date",
-   "label": "Date",
-   "reqd": 1
-  },
-  {
-   "fieldname": "odometer",
-   "fieldtype": "Int",
-   "label": "Current Odometer value ",
-   "reqd": 1
-  },
-  {
-   "collapsible": 1,
-   "fieldname": "refuelling_details",
-   "fieldtype": "Section Break",
-   "label": "Refuelling Details"
-  },
-  {
-   "fieldname": "fuel_qty",
-   "fieldtype": "Float",
-   "label": "Fuel Qty"
-  },
-  {
-   "fieldname": "price",
-   "fieldtype": "Currency",
-   "label": "Fuel Price"
-  },
-  {
-   "fieldname": "column_break_15",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "supplier",
-   "fieldtype": "Link",
-   "label": "Supplier",
-   "options": "Supplier"
-  },
-  {
-   "fieldname": "invoice",
-   "fieldtype": "Data",
-   "label": "Invoice Ref"
-  },
-  {
-   "collapsible": 1,
-   "fieldname": "service_details",
-   "fieldtype": "Section Break",
-   "label": "Service Details"
-  },
-  {
-   "fieldname": "service_detail",
-   "fieldtype": "Table",
-   "options": "Vehicle Service"
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "Vehicle Log",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "fetch_from": "license_plate.last_odometer",
-   "fieldname": "last_odometer",
-   "fieldtype": "Int",
-   "label": "Last Odometer Value ",
-   "read_only": 1,
-   "reqd": 1
-  },
-  {
-   "fieldname": "column_break_12",
-   "fieldtype": "Column Break"
-  }
- ],
- "is_submittable": 1,
- "links": [],
- "modified": "2021-05-17 00:10:21.188352",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Vehicle Log",
- "owner": "Administrator",
- "permissions": [
-  {
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "Fleet Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  }
- ],
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/vehicle_log/vehicle_log.py b/erpnext/hr/doctype/vehicle_log/vehicle_log.py
deleted file mode 100644
index 2c1d9a4..0000000
--- a/erpnext/hr/doctype/vehicle_log/vehicle_log.py
+++ /dev/null
@@ -1,53 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.utils import flt
-
-
-class VehicleLog(Document):
-	def validate(self):
-		if flt(self.odometer) < flt(self.last_odometer):
-			frappe.throw(
-				_("Current Odometer Value should be greater than Last Odometer Value {0}").format(
-					self.last_odometer
-				)
-			)
-
-	def on_submit(self):
-		frappe.db.set_value("Vehicle", self.license_plate, "last_odometer", self.odometer)
-
-	def on_cancel(self):
-		distance_travelled = self.odometer - self.last_odometer
-		if distance_travelled > 0:
-			updated_odometer_value = (
-				int(frappe.db.get_value("Vehicle", self.license_plate, "last_odometer")) - distance_travelled
-			)
-			frappe.db.set_value("Vehicle", self.license_plate, "last_odometer", updated_odometer_value)
-
-
-@frappe.whitelist()
-def make_expense_claim(docname):
-	expense_claim = frappe.db.exists("Expense Claim", {"vehicle_log": docname})
-	if expense_claim:
-		frappe.throw(_("Expense Claim {0} already exists for the Vehicle Log").format(expense_claim))
-
-	vehicle_log = frappe.get_doc("Vehicle Log", docname)
-	service_expense = sum([flt(d.expense_amount) for d in vehicle_log.service_detail])
-
-	claim_amount = service_expense + (flt(vehicle_log.price) * flt(vehicle_log.fuel_qty) or 1)
-	if not claim_amount:
-		frappe.throw(_("No additional expenses has been added"))
-
-	exp_claim = frappe.new_doc("Expense Claim")
-	exp_claim.employee = vehicle_log.employee
-	exp_claim.vehicle_log = vehicle_log.name
-	exp_claim.remark = _("Expense Claim for Vehicle Log {0}").format(vehicle_log.name)
-	exp_claim.append(
-		"expenses",
-		{"expense_date": vehicle_log.date, "description": _("Vehicle Expenses"), "amount": claim_amount},
-	)
-	return exp_claim.as_dict()
diff --git a/erpnext/hr/doctype/vehicle_service/__init__.py b/erpnext/hr/doctype/vehicle_service/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/doctype/vehicle_service/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/doctype/vehicle_service/vehicle_service.json b/erpnext/hr/doctype/vehicle_service/vehicle_service.json
deleted file mode 100644
index e0bce2b..0000000
--- a/erpnext/hr/doctype/vehicle_service/vehicle_service.json
+++ /dev/null
@@ -1,57 +0,0 @@
-{
- "creation": "2016-09-03 19:20:14.561962",
- "doctype": "DocType",
- "document_type": "Document",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "service_item",
-  "type",
-  "frequency",
-  "expense_amount"
- ],
- "fields": [
-  {
-   "fieldname": "service_item",
-   "fieldtype": "Select",
-   "in_list_view": 1,
-   "label": "Service Item",
-   "options": "\nBrake Oil\nBrake Pad\nClutch Plate\nEngine Oil\nOil Change\nWheels",
-   "reqd": 1
-  },
-  {
-   "fieldname": "type",
-   "fieldtype": "Select",
-   "in_list_view": 1,
-   "label": "Type",
-   "options": "\nInspection\nService\nChange",
-   "reqd": 1
-  },
-  {
-   "fieldname": "frequency",
-   "fieldtype": "Select",
-   "in_list_view": 1,
-   "label": "Frequency",
-   "options": "\nMileage\nMonthly\nQuarterly\nHalf Yearly\nYearly",
-   "reqd": 1
-  },
-  {
-   "fieldname": "expense_amount",
-   "fieldtype": "Currency",
-   "in_list_view": 1,
-   "label": "Expense",
-   "reqd": 1
-  }
- ],
- "istable": 1,
- "modified": "2020-03-18 16:49:46.645004",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Vehicle Service",
- "owner": "Administrator",
- "permissions": [],
- "quick_entry": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/vehicle_service/vehicle_service.py b/erpnext/hr/doctype/vehicle_service/vehicle_service.py
deleted file mode 100644
index fdd4e39..0000000
--- a/erpnext/hr/doctype/vehicle_service/vehicle_service.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-from frappe.model.document import Document
-
-
-class VehicleService(Document):
-	pass
diff --git a/erpnext/hr/employee_property_update.js b/erpnext/hr/employee_property_update.js
deleted file mode 100644
index 86130bf..0000000
--- a/erpnext/hr/employee_property_update.js
+++ /dev/null
@@ -1,174 +0,0 @@
-frappe.ui.form.on(cur_frm.doctype, {
-	setup: function(frm) {
-		frm.set_query("employee", function() {
-			return {
-				filters: {
-					"status": "Active"
-				}
-			};
-		});
-	},
-
-	onload: function(frm) {
-		if (frm.doc.__islocal)
-			frm.trigger("clear_property_table");
-	},
-
-	employee: function(frm) {
-		frm.trigger("clear_property_table");
-	},
-
-	clear_property_table: function(frm) {
-		let table = (frm.doctype == "Employee Promotion") ? "promotion_details" : "transfer_details";
-		frm.clear_table(table);
-		frm.refresh_field(table);
-
-		frm.fields_dict[table].grid.wrapper.find(".grid-add-row").hide();
-	},
-
-	refresh: function(frm) {
-		let table;
-		if (frm.doctype == "Employee Promotion") {
-			table = "promotion_details";
-		} else if (frm.doctype == "Employee Transfer") {
-			table = "transfer_details";
-		}
-
-		if (!table)
-			return;
-
-		frm.fields_dict[table].grid.wrapper.find(".grid-add-row").hide();
-		frm.events.setup_employee_property_button(frm, table);
-	},
-
-	setup_employee_property_button: function(frm, table) {
-		frm.fields_dict[table].grid.add_custom_button(__("Add Employee Property"), () => {
-			if (!frm.doc.employee) {
-				frappe.msgprint(__("Please select Employee first."));
-				return;
-			}
-
-			const allowed_fields = [];
-			const exclude_fields = ["naming_series", "employee", "first_name", "middle_name", "last_name", "marital_status", "ctc",
-				"employee_name", "status", "image", "gender", "date_of_birth", "date_of_joining", "lft", "rgt", "old_parent"];
-
-			const exclude_field_types = ["HTML", "Section Break", "Column Break", "Button", "Read Only", "Tab Break", "Table"];
-
-			frappe.model.with_doctype("Employee", () => {
-				const field_label_map = {};
-				frappe.get_meta("Employee").fields.forEach(d => {
-					field_label_map[d.fieldname] = __(d.label) + ` (${d.fieldname})`;
-					if (!in_list(exclude_field_types, d.fieldtype) && !in_list(exclude_fields, d.fieldname)) {
-						allowed_fields.push({
-							label: field_label_map[d.fieldname],
-							value: d.fieldname,
-						});
-					}
-				});
-
-				show_dialog(frm, table, allowed_fields);
-			});
-		});
-	}
-});
-
-var show_dialog = function(frm, table, field_labels) {
-	var d = new frappe.ui.Dialog({
-		title: "Update Property",
-		fields: [
-			{fieldname: "property", label: __("Select Property"), fieldtype: "Autocomplete", options: field_labels},
-			{fieldname: "current", fieldtype: "Data", label: __("Current"), read_only: true},
-			{fieldname: "new_value", fieldtype: "Data", label: __("New")}
-		],
-		primary_action_label: __("Add to Details"),
-		primary_action: () => {
-			d.get_primary_btn().attr("disabled", true);
-			if (d.data) {
-				d.data.new = d.get_values().new_value;
-				add_to_details(frm, d, table);
-			}
-		}
-	});
-
-	d.fields_dict["property"].df.onchange = () => {
-		let property = d.get_values().property;
-		d.data.fieldname = property;
-		if(!property){return;}
-		frappe.call({
-			method: 'erpnext.hr.utils.get_employee_field_property',
-			args: {employee: frm.doc.employee, fieldname: property},
-			callback: function(r) {
-				if (r.message) {
-					d.data.current = r.message.value;
-					d.data.property = r.message.label;
-
-					d.set_value('current', r.message.value);
-					render_dynamic_field(d, r.message.datatype, r.message.options, property);
-					d.get_primary_btn().attr('disabled', false);
-				}
-			}
-		});
-	};
-	d.get_primary_btn().attr('disabled', true);
-	d.data = {};
-	d.show();
-};
-
-var render_dynamic_field = function(d, fieldtype, options, fieldname) {
-	d.data.new = null;
-	var dynamic_field = frappe.ui.form.make_control({
-		df: {
-			"fieldtype": fieldtype,
-			"fieldname": fieldname,
-			"options": options || '',
-			"label": __("New")
-		},
-		parent: d.fields_dict.new_value.wrapper,
-		only_input: false
-	});
-	dynamic_field.make_input();
-	d.replace_field("new_value", dynamic_field.df);
-};
-
-var add_to_details = function(frm, d, table) {
-	let data = d.data;
-	if (data.fieldname) {
-		if (validate_duplicate(frm, table, data.fieldname)) {
-			frappe.show_alert({message: __("Property already added"), indicator: "orange"});
-			return false;
-		}
-		if (data.current == data.new) {
-			frappe.show_alert({message: __("Nothing to change"), indicator: "orange"});
-			d.get_primary_btn().attr("disabled", false);
-			return false;
-		}
-		frm.add_child(table, {
-			fieldname: data.fieldname,
-			property: data.property,
-			current: data.current,
-			new: data.new
-		});
-		frm.refresh_field(table);
-
-		frm.fields_dict[table].grid.wrapper.find(".grid-add-row").hide();
-
-		d.fields_dict.new_value.$wrapper.html("");
-		d.set_value("property", "");
-		d.set_value("current", "");
-		frappe.show_alert({message: __("Added to details"), indicator: "green"});
-		d.data = {};
-	} else {
-		frappe.show_alert({message: __("Value missing"), indicator: "red"});
-	}
-};
-
-var validate_duplicate =  function(frm, table, fieldname){
-	let duplicate = false;
-	$.each(frm.doc[table], function(i, detail) {
-		if(detail.fieldname === fieldname){
-			duplicate = true;
-			return;
-		}
-	});
-	return duplicate;
-};
diff --git a/erpnext/hr/hr_dashboard/human_resource/human_resource.json b/erpnext/hr/hr_dashboard/human_resource/human_resource.json
deleted file mode 100644
index f74d9a3..0000000
--- a/erpnext/hr/hr_dashboard/human_resource/human_resource.json
+++ /dev/null
@@ -1,58 +0,0 @@
-{
- "cards": [
-  {
-   "card": "Total Employees"
-  },
-  {
-   "card": "New Joinees (Last year)"
-  },
-  {
-   "card": "Employees Left (Last year)"
-  },
-  {
-   "card": "Total Applicants (Last month)"
-  }
- ],
- "charts": [
-  {
-   "chart": "Attendance Count",
-   "width": "Full"
-  },
-  {
-   "chart": "Gender Diversity Ratio",
-   "width": "Half"
-  },
-  {
-   "chart": "Job Application Status",
-   "width": "Half"
-  },
-  {
-   "chart": "Designation Wise Employee Count",
-   "width": "Half"
-  },
-  {
-   "chart": "Department Wise Employee Count",
-   "width": "Half"
-  },
-  {
-   "chart": "Designation Wise Openings",
-   "width": "Half"
-  },
-  {
-   "chart": "Department Wise Openings",
-   "width": "Half"
-  }
- ],
- "creation": "2020-07-22 11:56:33.015888",
- "dashboard_name": "Human Resource",
- "docstatus": 0,
- "doctype": "Dashboard",
- "idx": 0,
- "is_default": 0,
- "is_standard": 1,
- "modified": "2020-07-22 14:42:12.789249",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Human Resource",
- "owner": "Administrator"
-}
\ No newline at end of file
diff --git a/erpnext/hr/module_onboarding/human_resource/human_resource.json b/erpnext/hr/module_onboarding/human_resource/human_resource.json
deleted file mode 100644
index cd11bd1..0000000
--- a/erpnext/hr/module_onboarding/human_resource/human_resource.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
- "allow_roles": [
-  {
-   "role": "HR Manager"
-  },
-  {
-   "role": "HR User"
-  }
- ],
- "creation": "2020-05-14 11:51:45.050242",
- "docstatus": 0,
- "doctype": "Module Onboarding",
- "documentation_url": "https://docs.erpnext.com/docs/user/manual/en/human-resources",
- "idx": 0,
- "is_complete": 0,
- "modified": "2021-05-19 05:32:01.794628",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Human Resource",
- "owner": "Administrator",
- "steps": [
-  {
-   "step": "HR Settings"
-  },
-  {
-   "step": "Create Holiday list"
-  },
-  {
-   "step": "Create Employee"
-  },
-  {
-   "step": "Data import"
-  },
-  {
-   "step": "Create Leave Type"
-  },
-  {
-   "step": "Create Leave Allocation"
-  },
-  {
-   "step": "Create Leave Application"
-  }
- ],
- "subtitle": "Employee, Leaves, and more.",
- "success_message": "The Human Resource Module is all set up!",
- "title": "Let's Set Up the Human Resource Module. "
-}
\ No newline at end of file
diff --git a/erpnext/hr/notification/__init__.py b/erpnext/hr/notification/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/notification/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/notification/exit_interview_scheduled/__init__.py b/erpnext/hr/notification/exit_interview_scheduled/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/notification/exit_interview_scheduled/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/notification/exit_interview_scheduled/exit_interview_scheduled.json b/erpnext/hr/notification/exit_interview_scheduled/exit_interview_scheduled.json
deleted file mode 100644
index 8323ef0..0000000
--- a/erpnext/hr/notification/exit_interview_scheduled/exit_interview_scheduled.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "attach_print": 0,
- "channel": "Email",
- "condition": "doc.date and doc.email and doc.docstatus != 2 and doc.status == 'Scheduled'",
- "creation": "2021-12-05 22:11:47.263933",
- "date_changed": "date",
- "days_in_advance": 1,
- "docstatus": 0,
- "doctype": "Notification",
- "document_type": "Exit Interview",
- "enabled": 1,
- "event": "Days Before",
- "idx": 0,
- "is_standard": 1,
- "message": "<table class=\"panel-header\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\">\n\t<tr height=\"10\"></tr>\n\t<tr>\n\t\t<td width=\"15\"></td>\n\t\t<td>\n\t\t\t<div class=\"text-medium text-muted\">\n\t\t\t\t<span>{{_(\"Exit Interview Scheduled:\")}} {{ doc.name }}</span>\n\t\t\t</div>\n\t\t</td>\n\t\t<td width=\"15\"></td>\n\t</tr>\n\t<tr height=\"10\"></tr>\n</table>\n\n<table class=\"panel-body\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\">\n\t<tr height=\"10\"></tr>\n\t<tr>\n\t\t<td width=\"15\"></td>\n\t\t<td>\n\t\t\t<div>\n\t\t\t\t<ul class=\"list-unstyled\" style=\"line-height: 1.7\">\n\t\t\t\t\t<li>{{_(\"Employee\")}}: <b>{{ doc.employee }} - {{ doc.employee_name }}</b></li>\n\t\t\t\t\t<li>{{_(\"Date\")}}: <b>{{ doc.date }}</b></li>\n\t\t\t\t\t<li> {{_(\"Interviewers\")}}: </li>\n\t\t\t\t\t{% for entry in doc.interviewers %}\n\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t<li>{{ entry.user }}</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t{% endfor %}\n\t\t\t\t\t<li>{{ _(\"Interview Document\") }}: {{ frappe.utils.get_link_to_form(doc.doctype, doc.name) }}</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</td>\n\t\t<td width=\"15\"></td>\n\t</tr>\n\t<tr height=\"10\"></tr>\n</table>\n",
- "modified": "2021-12-05 22:26:57.096159",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Exit Interview Scheduled",
- "owner": "Administrator",
- "recipients": [
-  {
-   "receiver_by_document_field": "email"
-  }
- ],
- "send_system_notification": 0,
- "send_to_all_assignees": 1,
- "subject": "Exit Interview Scheduled: {{ doc.name }}"
-}
\ No newline at end of file
diff --git a/erpnext/hr/notification/exit_interview_scheduled/exit_interview_scheduled.md b/erpnext/hr/notification/exit_interview_scheduled/exit_interview_scheduled.md
deleted file mode 100644
index 6d6db40..0000000
--- a/erpnext/hr/notification/exit_interview_scheduled/exit_interview_scheduled.md
+++ /dev/null
@@ -1,37 +0,0 @@
-<table class="panel-header" border="0" cellpadding="0" cellspacing="0" width="100%">
-	<tr height="10"></tr>
-	<tr>
-		<td width="15"></td>
-		<td>
-			<div class="text-medium text-muted">
-				<h2>{{_("Exit Interview Scheduled:")}} {{ doc.name }}</h2>
-			</div>
-		</td>
-		<td width="15"></td>
-	</tr>
-	<tr height="10"></tr>
-</table>
-
-<table class="panel-body" border="0" cellpadding="0" cellspacing="0" width="100%">
-	<tr height="10"></tr>
-	<tr>
-		<td width="15"></td>
-		<td>
-			<div>
-				<ul class="list-unstyled" style="line-height: 1.7">
-					<li><b>{{_("Employee")}}: </b>{{ doc.employee }} - {{ doc.employee_name }}</li>
-					<li><b>{{_("Date")}}: </b>{{ frappe.utils.formatdate(doc.date) }}</li>
-					<li><b>{{_("Interviewers")}}:</b> </li>
-					{% for entry in doc.interviewers %}
-						<ul>
-							<li>{{ entry.user }}</li>
-						</ul>
-					{% endfor %}
-					<li><b>{{ _("Interview Document") }}:</b> {{ frappe.utils.get_link_to_form(doc.doctype, doc.name) }}</li>
-				</ul>
-			</div>
-		</td>
-		<td width="15"></td>
-	</tr>
-	<tr height="10"></tr>
-</table>
diff --git a/erpnext/hr/notification/exit_interview_scheduled/exit_interview_scheduled.py b/erpnext/hr/notification/exit_interview_scheduled/exit_interview_scheduled.py
deleted file mode 100644
index 5f697c9..0000000
--- a/erpnext/hr/notification/exit_interview_scheduled/exit_interview_scheduled.py
+++ /dev/null
@@ -1,6 +0,0 @@
-# import frappe
-
-
-def get_context(context):
-	# do your magic here
-	pass
diff --git a/erpnext/hr/notification/training_feedback/__init__.py b/erpnext/hr/notification/training_feedback/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/notification/training_feedback/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/notification/training_feedback/training_feedback.html b/erpnext/hr/notification/training_feedback/training_feedback.html
deleted file mode 100644
index b49662a..0000000
--- a/erpnext/hr/notification/training_feedback/training_feedback.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<p>{{ _("Hello") }},</p>
-
-<p>You attended training {{ frappe.utils.get_link_to_form(
-	"Training Event", doc.training_event) }}</p>
-
-<p>{{ _("Please share your feedback to the training by clicking on 'Training Feedback' and then 'New'") }}</p>
diff --git a/erpnext/hr/notification/training_feedback/training_feedback.json b/erpnext/hr/notification/training_feedback/training_feedback.json
deleted file mode 100644
index 92b68a9..0000000
--- a/erpnext/hr/notification/training_feedback/training_feedback.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "attach_print": 0,
- "channel": "Email",
- "creation": "2017-08-11 03:17:11.769210",
- "days_in_advance": 0,
- "docstatus": 0,
- "doctype": "Notification",
- "document_type": "Training Result",
- "enabled": 1,
- "event": "Submit",
- "idx": 0,
- "is_standard": 1,
- "message": "<h3>{{_(\"Training Event\")}}</h3>\n<p>{{ message }}</p>\n\n<h4>{{_(\"Details\")}}</h4>\n{{_(\"Event Name\")}}: <a href=\"{{ event_link }}\">{{ name }}</a>\n<br>{{_(\"Event Location\")}}: {{ location }}\n<br>{{_(\"Start Time\")}}: {{ start_time }}\n<br>{{_(\"End Time\")}}: {{ end_time }}\n<br>{{_(\"Attendance\")}}: {{ attendance }}\n",
- "modified": "2017-08-11 04:26:58.194793",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Training Feedback",
- "owner": "Administrator",
- "recipients": [
-  {
-   "email_by_document_field": "employee_emails"
-  }
- ],
- "subject": "Please Share your Feedback For {{ doc.training_event }}"
-}
\ No newline at end of file
diff --git a/erpnext/hr/notification/training_feedback/training_feedback.md b/erpnext/hr/notification/training_feedback/training_feedback.md
deleted file mode 100644
index bcadf7d..0000000
--- a/erpnext/hr/notification/training_feedback/training_feedback.md
+++ /dev/null
@@ -1,9 +0,0 @@
-<h3>{{_("Training Event")}}</h3>
-<p>{{ message }}</p>
-
-<h4>{{_("Details")}}</h4>
-{{_("Event Name")}}: <a href="{{ event_link }}">{{ name }}</a>
-<br>{{_("Event Location")}}: {{ location }}
-<br>{{_("Start Time")}}: {{ start_time }}
-<br>{{_("End Time")}}: {{ end_time }}
-<br>{{_("Attendance")}}: {{ attendance }}
diff --git a/erpnext/hr/notification/training_feedback/training_feedback.py b/erpnext/hr/notification/training_feedback/training_feedback.py
deleted file mode 100644
index 02e3e93..0000000
--- a/erpnext/hr/notification/training_feedback/training_feedback.py
+++ /dev/null
@@ -1,3 +0,0 @@
-def get_context(context):
-	# do your magic here
-	pass
diff --git a/erpnext/hr/notification/training_scheduled/__init__.py b/erpnext/hr/notification/training_scheduled/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/notification/training_scheduled/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/notification/training_scheduled/training_scheduled.html b/erpnext/hr/notification/training_scheduled/training_scheduled.html
deleted file mode 100644
index 50f6d07..0000000
--- a/erpnext/hr/notification/training_scheduled/training_scheduled.html
+++ /dev/null
@@ -1,44 +0,0 @@
-<table class="panel-header" border="0" cellpadding="0" cellspacing="0" width="100%">
-    <tr height="10"></tr>
-    <tr>
-        <td width="15"></td>
-        <td>
-            <div class="text-medium text-muted">
-                <span>{{_("Training Event:")}} {{ doc.event_name }}</span>
-            </div>
-        </td>
-        <td width="15"></td>
-    </tr>
-    <tr height="10"></tr>
-</table>
-
-<table class="panel-body" border="0" cellpadding="0" cellspacing="0" width="100%">
-    <tr height="10"></tr>
-    <tr>
-        <td width="15"></td>
-        <td>
-            <div>
-                {{ doc.introduction }}
-                <ul class="list-unstyled" style="line-height: 1.7">
-                    <li>{{_("Event Location")}}: <b>{{ doc.location }}</b></li>
-                    {% set start = frappe.utils.get_datetime(doc.start_time) %}
-                    {% set end = frappe.utils.get_datetime(doc.end_time) %}
-                    {% if start.date() == end.date() %}
-                    <li>{{_("Date")}}: <b>{{ start.strftime("%A, %d %b %Y") }}</b></li>
-                    <li>
-                        {{_("Timing")}}: <b>{{ start.strftime("%I:%M %p") + ' to ' + end.strftime("%I:%M %p") }}</b>
-                    </li>
-                    {% else %}
-                    <li>{{_("Start Time")}}: <b>{{ start.strftime("%A, %d %b %Y at %I:%M %p") }}</b>
-                    </li>
-                    <li>{{_("End Time")}}: <b>{{ end.strftime("%A, %d %b %Y at %I:%M %p") }}</b>
-                    </li>
-                    {% endif %}
-                    <li>{{ _('Event Link') }}: {{ frappe.utils.get_link_to_form(doc.doctype, doc.name) }}</li>
-                </ul>
-            </div>
-        </td>
-        <td width="15"></td>
-    </tr>
-    <tr height="10"></tr>
-</table>
diff --git a/erpnext/hr/notification/training_scheduled/training_scheduled.json b/erpnext/hr/notification/training_scheduled/training_scheduled.json
deleted file mode 100644
index f365003..0000000
--- a/erpnext/hr/notification/training_scheduled/training_scheduled.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "attach_print": 0,
- "channel": "Email",
- "condition": "",
- "creation": "2017-08-11 03:13:40.519614",
- "days_in_advance": 0,
- "docstatus": 0,
- "doctype": "Notification",
- "document_type": "Training Event",
- "enabled": 1,
- "event": "Submit",
- "idx": 0,
- "is_standard": 1,
- "message": "<table class=\"panel-header\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\">\n    <tr height=\"10\"></tr>\n    <tr>\n        <td width=\"15\"></td>\n        <td>\n            <div class=\"text-medium text-muted\">\n                <span>{{_(\"Training Event:\")}} {{ doc.event_name }}</span>\n            </div>\n        </td>\n        <td width=\"15\"></td>\n    </tr>\n    <tr height=\"10\"></tr>\n</table>\n\n<table class=\"panel-body\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\">\n    <tr height=\"10\"></tr>\n    <tr>\n        <td width=\"15\"></td>\n        <td>\n            <div>\n                {{ doc.introduction }}\n                <ul class=\"list-unstyled\" style=\"line-height: 1.7\">\n                    <li>{{_(\"Event Location\")}}: <b>{{ doc.location }}</b></li>\n                    {% set start = frappe.utils.get_datetime(doc.start_time) %}\n                    {% set end = frappe.utils.get_datetime(doc.end_time) %}\n                    {% if start.date() == end.date() %}\n                        <li>{{_(\"Date\")}}: <b>{{ start.strftime(\"%A, %d %b %Y\") }}</b></li>\n                        <li>\n                            {{_(\"Timing\")}}: <b>{{ start.strftime(\"%I:%M %p\") + ' to ' + end.strftime(\"%I:%M %p\") }}</b>\n                        </li>\n                    {% else %}\n                        <li>\n                            {{_(\"Start Time\")}}: <b>{{ start.strftime(\"%A, %d %b %Y at %I:%M %p\") }}</b>\n                        </li>\n                        <li>{{_(\"End Time\")}}: <b>{{ end.strftime(\"%A, %d %b %Y at %I:%M %p\") }}</b></li>\n                    {% endif %}\n                    <li>{{ _(\"Event Link\") }}: {{ frappe.utils.get_link_to_form(doc.doctype, doc.name) }}</li>\n                    {% if doc.is_mandatory %}\n                        <li>{{ _(\"Note: This Training Event is mandatory\") }}</li>\n                    {% endif %}\n                </ul>\n            </div>\n        </td>\n        <td width=\"15\"></td>\n    </tr>\n    <tr height=\"10\"></tr>\n</table>",
- "modified": "2021-06-16 14:08:12.933367",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Training Scheduled",
- "owner": "Administrator",
- "recipients": [
-  {
-   "receiver_by_document_field": "employee_emails"
-  }
- ],
- "send_system_notification": 0,
- "send_to_all_assignees": 0,
- "subject": "Training Scheduled: {{ doc.name }}"
-}
\ No newline at end of file
diff --git a/erpnext/hr/notification/training_scheduled/training_scheduled.md b/erpnext/hr/notification/training_scheduled/training_scheduled.md
deleted file mode 100644
index b9ba846..0000000
--- a/erpnext/hr/notification/training_scheduled/training_scheduled.md
+++ /dev/null
@@ -1,47 +0,0 @@
-<table class="panel-header" border="0" cellpadding="0" cellspacing="0" width="100%">
-    <tr height="10"></tr>
-    <tr>
-        <td width="15"></td>
-        <td>
-            <div class="text-medium text-muted">
-                <span>{{_("Training Event:")}} {{ doc.event_name }}</span>
-            </div>
-        </td>
-        <td width="15"></td>
-    </tr>
-    <tr height="10"></tr>
-</table>
-
-<table class="panel-body" border="0" cellpadding="0" cellspacing="0" width="100%">
-    <tr height="10"></tr>
-    <tr>
-        <td width="15"></td>
-        <td>
-            <div>
-                {{ doc.introduction }}
-                <ul class="list-unstyled" style="line-height: 1.7">
-                    <li>{{_("Event Location")}}: <b>{{ doc.location }}</b></li>
-                    {% set start = frappe.utils.get_datetime(doc.start_time) %}
-                    {% set end = frappe.utils.get_datetime(doc.end_time) %}
-                    {% if start.date() == end.date() %}
-                        <li>{{_("Date")}}: <b>{{ start.strftime("%A, %d %b %Y") }}</b></li>
-                        <li>
-                            {{_("Timing")}}: <b>{{ start.strftime("%I:%M %p") + ' to ' + end.strftime("%I:%M %p") }}</b>
-                        </li>
-                    {% else %}
-                        <li>
-                            {{_("Start Time")}}: <b>{{ start.strftime("%A, %d %b %Y at %I:%M %p") }}</b>
-                        </li>
-                        <li>{{_("End Time")}}: <b>{{ end.strftime("%A, %d %b %Y at %I:%M %p") }}</b></li>
-                    {% endif %}
-                    <li>{{ _("Event Link") }}: {{ frappe.utils.get_link_to_form(doc.doctype, doc.name) }}</li>
-                    {% if doc.is_mandatory %}
-                        <li>{{ _("Note: This Training Event is mandatory") }}</li>
-                    {% endif %}
-                </ul>
-            </div>
-        </td>
-        <td width="15"></td>
-    </tr>
-    <tr height="10"></tr>
-</table>
diff --git a/erpnext/hr/notification/training_scheduled/training_scheduled.py b/erpnext/hr/notification/training_scheduled/training_scheduled.py
deleted file mode 100644
index 02e3e93..0000000
--- a/erpnext/hr/notification/training_scheduled/training_scheduled.py
+++ /dev/null
@@ -1,3 +0,0 @@
-def get_context(context):
-	# do your magic here
-	pass
diff --git "a/erpnext/hr/number_card/employees_left_\050last_year\051/employees_left_\050last_year\051.json" "b/erpnext/hr/number_card/employees_left_\050last_year\051/employees_left_\050last_year\051.json"
deleted file mode 100644
index 6a91912..0000000
--- "a/erpnext/hr/number_card/employees_left_\050last_year\051/employees_left_\050last_year\051.json"
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "creation": "2020-07-22 11:56:32.947790",
- "docstatus": 0,
- "doctype": "Number Card",
- "document_type": "Employee",
- "dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]",
- "filters_json": "[[\"Employee\",\"relieving_date\",\"Timespan\",\"last year\",false]]",
- "function": "Count",
- "idx": 0,
- "is_public": 1,
- "is_standard": 1,
- "label": "Employees Left (Last year)",
- "modified": "2020-07-23 12:03:26.747447",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Employees Left (Last year)",
- "owner": "Administrator",
- "show_percentage_stats": 1,
- "stats_time_interval": "Monthly",
- "type": "Document Type"
-}
\ No newline at end of file
diff --git "a/erpnext/hr/number_card/new_joinees_\050last_year\051/new_joinees_\050last_year\051.json" "b/erpnext/hr/number_card/new_joinees_\050last_year\051/new_joinees_\050last_year\051.json"
deleted file mode 100644
index 8f5ad9c..0000000
--- "a/erpnext/hr/number_card/new_joinees_\050last_year\051/new_joinees_\050last_year\051.json"
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "creation": "2020-07-22 11:56:32.914057",
- "docstatus": 0,
- "doctype": "Number Card",
- "document_type": "Employee",
- "dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]",
- "filters_json": "[[\"Employee\",\"date_of_joining\",\"Timespan\",\"last year\",false],[\"Employee\",\"status\",\"=\",\"Active\",false]]",
- "function": "Count",
- "idx": 0,
- "is_public": 1,
- "is_standard": 1,
- "label": "New Joinees (Last year)",
- "modified": "2020-07-22 14:32:09.352301",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "New Joinees (Last year)",
- "owner": "Administrator",
- "show_percentage_stats": 1,
- "stats_time_interval": "Monthly",
- "type": "Document Type"
-}
\ No newline at end of file
diff --git "a/erpnext/hr/number_card/total_applicants_\050last_month\051/total_applicants_\050last_month\051.json" "b/erpnext/hr/number_card/total_applicants_\050last_month\051/total_applicants_\050last_month\051.json"
deleted file mode 100644
index 1af42ca..0000000
--- "a/erpnext/hr/number_card/total_applicants_\050last_month\051/total_applicants_\050last_month\051.json"
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "creation": "2020-07-22 11:56:32.977716",
- "docstatus": 0,
- "doctype": "Number Card",
- "document_type": "Job Applicant",
- "dynamic_filters_json": "",
- "filters_json": "[[\"Job Applicant\",\"creation\",\"Timespan\",\"last month\"]]",
- "function": "Count",
- "idx": 0,
- "is_public": 1,
- "is_standard": 1,
- "label": "Total Applicants (Last month)",
- "modified": "2020-07-22 14:32:27.656855",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Total Applicants (Last month)",
- "owner": "Administrator",
- "show_percentage_stats": 1,
- "stats_time_interval": "Monthly",
- "type": "Document Type"
-}
\ No newline at end of file
diff --git a/erpnext/hr/number_card/total_employees/total_employees.json b/erpnext/hr/number_card/total_employees/total_employees.json
deleted file mode 100644
index 932e255..0000000
--- a/erpnext/hr/number_card/total_employees/total_employees.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "creation": "2020-07-22 11:56:32.874849",
- "docstatus": 0,
- "doctype": "Number Card",
- "document_type": "Employee",
- "dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]",
- "filters_json": "[[\"Employee\",\"status\",\"=\",\"Active\",false]]",
- "function": "Count",
- "idx": 0,
- "is_public": 1,
- "is_standard": 1,
- "label": "Total Employees",
- "modified": "2020-07-22 14:31:59.118650",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Total Employees",
- "owner": "Administrator",
- "show_percentage_stats": 1,
- "stats_time_interval": "Monthly",
- "type": "Document Type"
-}
\ No newline at end of file
diff --git a/erpnext/hr/onboarding_step/create_department/create_department.json b/erpnext/hr/onboarding_step/create_department/create_department.json
deleted file mode 100644
index 66a54cf..0000000
--- a/erpnext/hr/onboarding_step/create_department/create_department.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "action": "Create Entry",
- "creation": "2020-05-14 11:44:34.682115",
- "docstatus": 0,
- "doctype": "Onboarding Step",
- "idx": 0,
- "is_complete": 0,
- "is_mandatory": 0,
- "is_single": 0,
- "is_skipped": 0,
- "modified": "2020-05-14 12:22:26.448420",
- "modified_by": "Administrator",
- "name": "Create Department",
- "owner": "Administrator",
- "reference_document": "Department",
- "show_full_form": 0,
- "title": "Create Department",
- "validate_action": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/onboarding_step/create_designation/create_designation.json b/erpnext/hr/onboarding_step/create_designation/create_designation.json
deleted file mode 100644
index c4e9cc7..0000000
--- a/erpnext/hr/onboarding_step/create_designation/create_designation.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "action": "Create Entry",
- "creation": "2020-05-14 11:45:07.514193",
- "docstatus": 0,
- "doctype": "Onboarding Step",
- "idx": 0,
- "is_complete": 0,
- "is_mandatory": 0,
- "is_single": 0,
- "is_skipped": 0,
- "modified": "2020-05-14 12:22:41.500795",
- "modified_by": "Administrator",
- "name": "Create Designation",
- "owner": "Administrator",
- "reference_document": "Designation",
- "show_full_form": 0,
- "title": "Create Designation",
- "validate_action": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/onboarding_step/create_employee/create_employee.json b/erpnext/hr/onboarding_step/create_employee/create_employee.json
deleted file mode 100644
index 4782818..0000000
--- a/erpnext/hr/onboarding_step/create_employee/create_employee.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "action": "Show Form Tour",
- "action_label": "Show Tour",
- "creation": "2020-05-14 11:43:25.561152",
- "description": "<h3>Employee</h3>\n\nAn individual who works and is recognized for his rights and duties in your company is your Employee. You can manage the Employee master. It captures the demographic, personal and professional details, joining and leave details, etc.",
- "docstatus": 0,
- "doctype": "Onboarding Step",
- "idx": 0,
- "is_complete": 0,
- "is_single": 0,
- "is_skipped": 0,
- "modified": "2021-05-19 04:50:02.240321",
- "modified_by": "Administrator",
- "name": "Create Employee",
- "owner": "Administrator",
- "reference_document": "Employee",
- "show_form_tour": 0,
- "show_full_form": 0,
- "title": "Create Employee",
- "validate_action": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/onboarding_step/create_holiday_list/create_holiday_list.json b/erpnext/hr/onboarding_step/create_holiday_list/create_holiday_list.json
deleted file mode 100644
index a08e85f..0000000
--- a/erpnext/hr/onboarding_step/create_holiday_list/create_holiday_list.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "action": "Show Form Tour",
- "action_label": "Show Tour",
- "creation": "2020-05-28 11:47:34.700174",
- "description": "<h3>Holiday List.</h3>\n\nHoliday List is a list which contains the dates of holidays. Most organizations have a standard Holiday List for their employees. However, some of them may have different holiday lists based on different Locations or Departments. In ERPNext, you can configure multiple Holiday Lists.",
- "docstatus": 0,
- "doctype": "Onboarding Step",
- "idx": 0,
- "is_complete": 0,
- "is_single": 0,
- "is_skipped": 0,
- "modified": "2021-05-19 04:19:52.305199",
- "modified_by": "Administrator",
- "name": "Create Holiday list",
- "owner": "Administrator",
- "reference_document": "Holiday List",
- "show_form_tour": 0,
- "show_full_form": 1,
- "title": "Create Holiday List",
- "validate_action": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/onboarding_step/create_leave_allocation/create_leave_allocation.json b/erpnext/hr/onboarding_step/create_leave_allocation/create_leave_allocation.json
deleted file mode 100644
index 0b0ce3f..0000000
--- a/erpnext/hr/onboarding_step/create_leave_allocation/create_leave_allocation.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "action": "Show Form Tour",
- "action_label": "Show Tour",
- "creation": "2020-05-14 11:48:56.123718",
- "description": "<h3>Leave Allocation</h3>\n\nLeave Allocation enables you to allocate a specific number of leaves of a particular type to an Employee so that, an employee will be able to create a Leave Application only if Leaves are allocated. ",
- "docstatus": 0,
- "doctype": "Onboarding Step",
- "idx": 0,
- "is_complete": 0,
- "is_single": 0,
- "is_skipped": 0,
- "modified": "2021-05-19 04:22:34.220238",
- "modified_by": "Administrator",
- "name": "Create Leave Allocation",
- "owner": "Administrator",
- "reference_document": "Leave Allocation",
- "show_form_tour": 0,
- "show_full_form": 0,
- "title": "Create Leave Allocation",
- "validate_action": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/onboarding_step/create_leave_application/create_leave_application.json b/erpnext/hr/onboarding_step/create_leave_application/create_leave_application.json
deleted file mode 100644
index af63aa5..0000000
--- a/erpnext/hr/onboarding_step/create_leave_application/create_leave_application.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "action": "Show Form Tour",
- "action_label": "Show Tour",
- "creation": "2020-05-14 11:49:45.400764",
- "description": "<h3>Leave Application</h3>\n\nLeave Application is a formal document created by an Employee to apply for Leaves for a particular time period based on there leave allocation and leave type according to there need.",
- "docstatus": 0,
- "doctype": "Onboarding Step",
- "idx": 0,
- "is_complete": 0,
- "is_single": 0,
- "is_skipped": 0,
- "modified": "2021-05-19 04:39:09.893474",
- "modified_by": "Administrator",
- "name": "Create Leave Application",
- "owner": "Administrator",
- "reference_document": "Leave Application",
- "show_form_tour": 0,
- "show_full_form": 0,
- "title": "Create Leave Application",
- "validate_action": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/onboarding_step/create_leave_type/create_leave_type.json b/erpnext/hr/onboarding_step/create_leave_type/create_leave_type.json
deleted file mode 100644
index 397f5cd..0000000
--- a/erpnext/hr/onboarding_step/create_leave_type/create_leave_type.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "action": "Show Form Tour",
- "action_label": "Show Tour",
- "creation": "2020-05-27 11:17:31.119312",
- "description": "<h3>Leave Type</h3>\n\nLeave type is defined based on many factors and features like encashment, earned leaves, partially paid, without pay and, a lot more. To check other options and to define your leave type click on Show Tour.",
- "docstatus": 0,
- "doctype": "Onboarding Step",
- "idx": 0,
- "is_complete": 0,
- "is_single": 0,
- "is_skipped": 0,
- "modified": "2021-05-19 04:32:48.135406",
- "modified_by": "Administrator",
- "name": "Create Leave Type",
- "owner": "Administrator",
- "reference_document": "Leave Type",
- "show_form_tour": 0,
- "show_full_form": 1,
- "title": "Create Leave Type",
- "validate_action": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/onboarding_step/data_import/data_import.json b/erpnext/hr/onboarding_step/data_import/data_import.json
deleted file mode 100644
index ac343c6..0000000
--- a/erpnext/hr/onboarding_step/data_import/data_import.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "action": "Watch Video",
- "action_label": "",
- "creation": "2021-05-19 05:29:16.809610",
- "description": "<h3>Data Import</h3>\n\nData import is the tool to migrate your existing data like Employee, Customer, Supplier, and a lot more to our ERPNext system.\nGo through the video for a detailed explanation of this tool.",
- "docstatus": 0,
- "doctype": "Onboarding Step",
- "idx": 0,
- "is_complete": 0,
- "is_single": 0,
- "is_skipped": 0,
- "modified": "2021-05-19 05:29:16.809610",
- "modified_by": "Administrator",
- "name": "Data import",
- "owner": "Administrator",
- "show_form_tour": 0,
- "show_full_form": 0,
- "title": "Data Import",
- "validate_action": 1,
- "video_url": "https://www.youtube.com/watch?v=DQyqeurPI64"
-}
\ No newline at end of file
diff --git a/erpnext/hr/onboarding_step/hr_settings/hr_settings.json b/erpnext/hr/onboarding_step/hr_settings/hr_settings.json
deleted file mode 100644
index 355664f..0000000
--- a/erpnext/hr/onboarding_step/hr_settings/hr_settings.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "action": "Show Form Tour",
- "action_label": "Explore",
- "creation": "2020-05-28 13:13:52.427711",
- "description": "<h3>HR Settings</h3>\n\nHr Settings consists of major settings related to Employee Lifecycle, Leave Management, etc. Click on Explore, to explore Hr Settings.",
- "docstatus": 0,
- "doctype": "Onboarding Step",
- "idx": 0,
- "is_complete": 0,
- "is_single": 1,
- "is_skipped": 0,
- "modified": "2021-05-18 07:02:05.747548",
- "modified_by": "Administrator",
- "name": "HR Settings",
- "owner": "Administrator",
- "reference_document": "HR Settings",
- "show_form_tour": 0,
- "show_full_form": 0,
- "title": "HR Settings",
- "validate_action": 0
-}
\ No newline at end of file
diff --git a/erpnext/hr/page/__init__.py b/erpnext/hr/page/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/page/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/page/organizational_chart/__init__.py b/erpnext/hr/page/organizational_chart/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/page/organizational_chart/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/page/organizational_chart/organizational_chart.js b/erpnext/hr/page/organizational_chart/organizational_chart.js
deleted file mode 100644
index b0e41e0..0000000
--- a/erpnext/hr/page/organizational_chart/organizational_chart.js
+++ /dev/null
@@ -1,23 +0,0 @@
-frappe.pages['organizational-chart'].on_page_load = function(wrapper) {
-	frappe.ui.make_app_page({
-		parent: wrapper,
-		title: __('Organizational Chart'),
-		single_column: true
-	});
-
-	$(wrapper).bind('show', () => {
-		frappe.require('hierarchy-chart.bundle.js', () => {
-			let organizational_chart = undefined;
-			let method = 'erpnext.hr.page.organizational_chart.organizational_chart.get_children';
-
-			if (frappe.is_mobile()) {
-				organizational_chart = new erpnext.HierarchyChartMobile('Employee', wrapper, method);
-			} else {
-				organizational_chart = new erpnext.HierarchyChart('Employee', wrapper, method);
-			}
-
-			frappe.breadcrumbs.add('HR');
-			organizational_chart.show();
-		});
-	});
-};
diff --git a/erpnext/hr/page/organizational_chart/organizational_chart.json b/erpnext/hr/page/organizational_chart/organizational_chart.json
deleted file mode 100644
index d802781..0000000
--- a/erpnext/hr/page/organizational_chart/organizational_chart.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "content": null,
- "creation": "2021-05-25 10:53:10.107241",
- "docstatus": 0,
- "doctype": "Page",
- "idx": 0,
- "modified": "2021-05-25 10:53:18.201931",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "organizational-chart",
- "owner": "Administrator",
- "page_name": "Organizational Chart",
- "roles": [
-  {
-   "role": "HR User"
-  },
-  {
-   "role": "HR Manager"
-  }
- ],
- "script": null,
- "standard": "Yes",
- "style": null,
- "system_page": 0,
- "title": "Organizational Chart"
-}
\ No newline at end of file
diff --git a/erpnext/hr/page/organizational_chart/organizational_chart.py b/erpnext/hr/page/organizational_chart/organizational_chart.py
deleted file mode 100644
index 3674912..0000000
--- a/erpnext/hr/page/organizational_chart/organizational_chart.py
+++ /dev/null
@@ -1,45 +0,0 @@
-import frappe
-
-
-@frappe.whitelist()
-def get_children(parent=None, company=None, exclude_node=None):
-	filters = [["status", "!=", "Left"]]
-	if company and company != "All Companies":
-		filters.append(["company", "=", company])
-
-	if parent and company and parent != company:
-		filters.append(["reports_to", "=", parent])
-	else:
-		filters.append(["reports_to", "=", ""])
-
-	if exclude_node:
-		filters.append(["name", "!=", exclude_node])
-
-	employees = frappe.get_list(
-		"Employee",
-		fields=["employee_name as name", "name as id", "reports_to", "image", "designation as title"],
-		filters=filters,
-		order_by="name",
-	)
-
-	for employee in employees:
-		is_expandable = frappe.db.count("Employee", filters={"reports_to": employee.get("id")})
-		employee.connections = get_connections(employee.id)
-		employee.expandable = 1 if is_expandable else 0
-
-	return employees
-
-
-def get_connections(employee):
-	num_connections = 0
-
-	nodes_to_expand = frappe.get_list("Employee", filters=[["reports_to", "=", employee]])
-	num_connections += len(nodes_to_expand)
-
-	while nodes_to_expand:
-		parent = nodes_to_expand.pop(0)
-		descendants = frappe.get_list("Employee", filters=[["reports_to", "=", parent.name]])
-		num_connections += len(descendants)
-		nodes_to_expand.extend(descendants)
-
-	return num_connections
diff --git a/erpnext/hr/page/team_updates/__init__.py b/erpnext/hr/page/team_updates/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/page/team_updates/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/page/team_updates/team_update_row.html b/erpnext/hr/page/team_updates/team_update_row.html
deleted file mode 100644
index 4f36754..0000000
--- a/erpnext/hr/page/team_updates/team_update_row.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<div class="row activity-row" data-creation="{%= creation.split(" ")[0] + " 00:00:00" %}">
-	<div class="col-xs-3 text-right activity-date"><span class="{%= date_class %}">
-		{%= date_sep || "" %}</span></div>
-	<div class="col-xs-9 activity-message"
-		title="{%= by %} / {%= frappe.datetime.str_to_user(creation) %}">
-		<div class="row">
-			<div class="col-xs-2 col-sm-1">
-				{{ avatar }}
-			</div>
-			<div class="col-xs-10 col-sm-11 small content">
-				{{ content }}
-			</div>
-		</div>
-	</div>
-</div>
diff --git a/erpnext/hr/page/team_updates/team_updates.css b/erpnext/hr/page/team_updates/team_updates.css
deleted file mode 100644
index d37e782..0000000
--- a/erpnext/hr/page/team_updates/team_updates.css
+++ /dev/null
@@ -1,57 +0,0 @@
-.date-indicator {
-    background:none;
-    font-size:12px;
-    vertical-align:middle;
-    font-weight:bold;
-    color:#6c7680;
-}
-.date-indicator::after {
-    margin:0 -4px 0 12px;
-    content:'';
-    display:inline-block;
-    height:8px;
-    width:8px;
-    border-radius:8px;
-	background: #d1d8dd;
-}
-
-.date-indicator.blue {
-	color: #5e64ff;
-}
-
-.date-indicator.blue::after {
-	background: #5e64ff;
-}
-
-.activity-row {
-}
-
-.activity-message {
-	border-left: 1px solid #d1d8dd;
-}
-
-.activity-message .row {
-	padding: 15px;
-	margin-right: 0px;
-	border-bottom: 1px solid #d1d8dd;
-}
-
-.activity-row:last-child .activity-message .row {
-	border-bottom: none;
-}
-
-.activity-row .content {
-	padding-left: 0px;
-	padding-right: 30px;
-}
-
-.activity-date {
-	padding: 15px;
-	padding-right: 0px;
-	z-index: 1;
-}
-
-.for-more {
-	border-top: 1px solid #d1d8dd;
-	padding: 10px;
-}
diff --git a/erpnext/hr/page/team_updates/team_updates.js b/erpnext/hr/page/team_updates/team_updates.js
deleted file mode 100644
index 3583297..0000000
--- a/erpnext/hr/page/team_updates/team_updates.js
+++ /dev/null
@@ -1,80 +0,0 @@
-frappe.pages['team-updates'].on_page_load = function(wrapper) {
-	var page = frappe.ui.make_app_page({
-		parent: wrapper,
-		title: __('Team Updates'),
-		single_column: true
-	});
-
-	frappe.team_updates.make(page);
-	frappe.team_updates.run();
-
-	if(frappe.model.can_read('Daily Work Summary Group')) {
-		page.add_menu_item(__('Daily Work Summary Group'), function() {
-			frappe.set_route('Form', 'Daily Work Summary Group');
-		});
-	}
-}
-
-frappe.team_updates = {
-	start: 0,
-	make: function(page) {
-		var me = frappe.team_updates;
-		me.page = page;
-		me.body = $('<div></div>').appendTo(me.page.main);
-		me.more = $('<div class="for-more"><button class="btn btn-sm btn-default btn-more">'
-			+ __("More") + '</button></div>').appendTo(me.page.main)
-			.find('.btn-more').on('click', function() {
-				me.start += 40;
-				me.run();
-			});
-	},
-	run: function() {
-		var me = frappe.team_updates;
-		frappe.call({
-			method: 'erpnext.hr.page.team_updates.team_updates.get_data',
-			args: {
-				start: me.start
-			},
-			callback: function(r) {
-				if (r.message && r.message.length > 0) {
-					r.message.forEach(function(d) {
-						me.add_row(d);
-					});
-				} else {
-					frappe.show_alert({message: __('No more updates'), indicator: 'gray'});
-					me.more.parent().addClass('hidden');
-				}
-			}
-		});
-	},
-	add_row: function(data) {
-		var me = frappe.team_updates;
-
-		data.by = frappe.user.full_name(data.sender);
-		data.avatar = frappe.avatar(data.sender);
-		data.when = comment_when(data.creation);
-
-		var date = frappe.datetime.str_to_obj(data.creation);
-		var last = me.last_feed_date;
-
-		if((last && frappe.datetime.obj_to_str(last) != frappe.datetime.obj_to_str(date)) || (!last)) {
-			var diff = frappe.datetime.get_day_diff(frappe.datetime.get_today(), frappe.datetime.obj_to_str(date));
-			var pdate;
-			if(diff < 1) {
-				pdate = 'Today';
-			} else if(diff < 2) {
-				pdate = 'Yesterday';
-			} else {
-				pdate = frappe.datetime.global_date_format(date);
-			}
-			data.date_sep = pdate;
-			data.date_class = pdate=='Today' ? "date-indicator blue" : "date-indicator";
-		} else {
-			data.date_sep = null;
-			data.date_class = "";
-		}
-		me.last_feed_date = date;
-
-		$(frappe.render_template('team_update_row', data)).appendTo(me.body);
-	}
-}
diff --git a/erpnext/hr/page/team_updates/team_updates.json b/erpnext/hr/page/team_updates/team_updates.json
deleted file mode 100644
index 167c67f..0000000
--- a/erpnext/hr/page/team_updates/team_updates.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "content": null, 
- "creation": "2017-01-31 11:02:31.614045", 
- "docstatus": 0, 
- "doctype": "Page", 
- "idx": 0, 
- "modified": "2017-01-31 11:25:01.983200", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "team-updates", 
- "owner": "Administrator", 
- "page_name": "team-updates", 
- "roles": [
-  {
-   "role": "Employee"
-  }, 
-  {
-   "role": "System Manager"
-  }
- ], 
- "script": null, 
- "standard": "Yes", 
- "style": null, 
- "title": "Team Updates"
-}
\ No newline at end of file
diff --git a/erpnext/hr/page/team_updates/team_updates.py b/erpnext/hr/page/team_updates/team_updates.py
deleted file mode 100644
index c1fcb73..0000000
--- a/erpnext/hr/page/team_updates/team_updates.py
+++ /dev/null
@@ -1,24 +0,0 @@
-import frappe
-from email_reply_parser import EmailReplyParser
-
-
-@frappe.whitelist()
-def get_data(start=0):
-	# frappe.only_for('Employee', 'System Manager')
-	data = frappe.get_all(
-		"Communication",
-		fields=("content", "text_content", "sender", "creation"),
-		filters=dict(reference_doctype="Daily Work Summary"),
-		order_by="creation desc",
-		limit=40,
-		start=start,
-	)
-
-	for d in data:
-		d.sender_name = (
-			frappe.db.get_value("Employee", {"user_id": d.sender}, "employee_name") or d.sender
-		)
-		if d.text_content:
-			d.content = frappe.utils.md_to_html(EmailReplyParser.parse_reply(d.text_content))
-
-	return data
diff --git a/erpnext/hr/print_format/__init__.py b/erpnext/hr/print_format/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/print_format/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/print_format/job_offer/__init__.py b/erpnext/hr/print_format/job_offer/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/print_format/job_offer/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/print_format/job_offer/job_offer.json b/erpnext/hr/print_format/job_offer/job_offer.json
deleted file mode 100644
index 0a92230..0000000
--- a/erpnext/hr/print_format/job_offer/job_offer.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "align_labels_right": 0, 
- "creation": "2015-03-05 14:34:26.751210", 
- "custom_format": 1, 
- "disabled": 0, 
- "doc_type": "Job Offer", 
- "docstatus": 0, 
- "doctype": "Print Format", 
- "html": "{% set terms_exist = doc.terms and (doc.terms|striptags).strip() or \"\" %}\n\n{% if letter_head and not no_letterhead -%}\n    <div class=\"letter-head\">{{ letter_head }}</div>\n    <hr>\n{%- endif %}\n\n<div {% if terms_exist -%} class=\"page-break\" {%- endif %}>\n<p>\n\n<!-- job offer content starts here, <br> is used to create new lines -->\nDate: {{ doc.offer_date }}\n<br><br>\n\nDear {{ doc.applicant_name }}, \n\n<br><br>\n\nWe are pleased to appoint you in the services of {{ doc.company }} on the terms and conditions detailed in this letter.\n\n<br><br>\n\nYour designation shall be <b>{{ doc.designation }}</b>.\n\n<br><br>\n\n<!-- job offer terms and description from the table -->\n\n{%- if doc.offer_terms -%}\n    {%- for row in doc.offer_terms -%}\n        <b>{{ row.offer_term }}:</b> {{ row.value }}\n\n        <br>\n    {%- endfor -%}\n{%- endif -%}\n\n<br>\n\n<!-- job offer content continues -->\n\n\nPlease read the detailed terms as below. If you have any queries, feel free to get in touch with us.\nWe look forward to your long and fruitful career association with our organisation.\nIf you decide to join us, 'Welcome to {{ doc.company }} !'\n\n<br><br>\n\n<p class=\"strong\">\n\nYours truly,\n\n<br><br><br><br>\n\nAuthorized Signatory\n\n<br>\n\n{{ doc.company }}\n\n<!-- job offer content ends here -->\n\n</p>\n</div>\n\n<!-- job offer terms and conditions -->\n{% if terms_exist %}\n<div> {{ doc.terms }} </div>\n{% endif %}", 
- "idx": 0, 
- "line_breaks": 0, 
- "modified": "2018-02-15 03:03:55.844085", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Job Offer", 
- "owner": "Administrator", 
- "print_format_builder": 0, 
- "print_format_type": "Jinja", 
- "show_section_headings": 0, 
- "standard": "Yes"
-}
\ No newline at end of file
diff --git a/erpnext/hr/print_format/standard_appointment_letter/__init__.py b/erpnext/hr/print_format/standard_appointment_letter/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/print_format/standard_appointment_letter/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/print_format/standard_appointment_letter/standard_appointment_letter.html b/erpnext/hr/print_format/standard_appointment_letter/standard_appointment_letter.html
deleted file mode 100644
index 87daafc..0000000
--- a/erpnext/hr/print_format/standard_appointment_letter/standard_appointment_letter.html
+++ /dev/null
@@ -1,38 +0,0 @@
-{%- from "templates/print_formats/standard_macros.html" import add_header -%}
-
-<div class="text-center" style="margin-bottom: 10%;"><h3>Appointment Letter</h3></div>
-<div class ='row' style="margin-bottom: 5%;">
-    <div class = "col-sm-6">
-        <b>{{ doc.applicant_name }},</b>
-    </div>
-    <div class="col-sm-6">
-        <span style = "float: right;"><b> Date: </b>{{ doc.appointment_date }}</span>
-    </div>
-</div>
-<div style="margin-bottom: 5%;">
-    {{ doc.introduction }}
-</div>
-<div style="margin-bottom: 5%;">
-    <ul>
-    {% for content in doc.terms %}
-        <li style="padding-bottom: 3%;">
-            <span>
-                <span><b>{{ content.title }}: </b></span> {{ content.description }}
-            </span>
-        </li>
-    {% endfor %}
-    </ul>
-</div>
-<div style="margin-bottom: 5%;">
-<span>Your sincerely,</span><br>
-<span><b>For {{ doc.company }}</b></span>
-</div>
-
-<div style="margin-bottom: 5%;">
-    <span>{{ doc.closing_notes }}</span>
-</div>
-
-<div>
-    <span><b>________________</b></span><br>
-    <span><b>{{ doc.applicant_name }}</b></span>
-</div>
diff --git a/erpnext/hr/print_format/standard_appointment_letter/standard_appointment_letter.json b/erpnext/hr/print_format/standard_appointment_letter/standard_appointment_letter.json
deleted file mode 100644
index 1813e71..0000000
--- a/erpnext/hr/print_format/standard_appointment_letter/standard_appointment_letter.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "align_labels_right": 0,
- "creation": "2019-12-26 15:22:44.200332",
- "custom_format": 0,
- "default_print_language": "en",
- "disabled": 0,
- "doc_type": "Appointment Letter",
- "docstatus": 0,
- "doctype": "Print Format",
- "font": "Default",
- "idx": 0,
- "line_breaks": 0,
- "modified": "2020-01-21 17:24:16.705082",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Standard Appointment Letter",
- "owner": "Administrator",
- "print_format_builder": 0,
- "print_format_type": "Jinja",
- "raw_printing": 0,
- "show_section_headings": 0,
- "standard": "Yes"
-}
\ No newline at end of file
diff --git a/erpnext/hr/report/__init__.py b/erpnext/hr/report/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/report/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/report/daily_work_summary_replies/__init__.py b/erpnext/hr/report/daily_work_summary_replies/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/report/daily_work_summary_replies/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/report/daily_work_summary_replies/daily_work_summary_replies.js b/erpnext/hr/report/daily_work_summary_replies/daily_work_summary_replies.js
deleted file mode 100644
index 0980c69..0000000
--- a/erpnext/hr/report/daily_work_summary_replies/daily_work_summary_replies.js
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-/* eslint-disable */
-frappe.query_reports["Daily Work Summary Replies"] = {
-	"filters": [
-		{
-			"fieldname":"group",
-			"label": __("Group"),
-			"fieldtype": "Link",
-			"options": "Daily Work Summary Group",
-			"reqd": 1
-		},
-		{
-			"fieldname": "range",
-			"label": __("Date Range"),
-			"fieldtype": "DateRange",
-			"reqd": 1
-		}
-	]
-}
diff --git a/erpnext/hr/report/daily_work_summary_replies/daily_work_summary_replies.json b/erpnext/hr/report/daily_work_summary_replies/daily_work_summary_replies.json
deleted file mode 100644
index 04c8850..0000000
--- a/erpnext/hr/report/daily_work_summary_replies/daily_work_summary_replies.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "add_total_row": 0,
- "creation": "2018-06-04 10:30:25.673452",
- "disabled": 0,
- "docstatus": 0,
- "doctype": "Report",
- "idx": 0,
- "is_standard": "Yes",
- "modified": "2018-06-04 10:44:04.694509",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Daily Work Summary Replies",
- "owner": "Administrator",
- "ref_doctype": "Daily Work Summary",
- "report_name": "Daily Work Summary Replies",
- "report_type": "Script Report",
- "roles": [
-  {
-   "role": "Employee"
-  },
-  {
-   "role": "HR User"
-  }
- ]
-}
\ No newline at end of file
diff --git a/erpnext/hr/report/daily_work_summary_replies/daily_work_summary_replies.py b/erpnext/hr/report/daily_work_summary_replies/daily_work_summary_replies.py
deleted file mode 100644
index d93688a..0000000
--- a/erpnext/hr/report/daily_work_summary_replies/daily_work_summary_replies.py
+++ /dev/null
@@ -1,61 +0,0 @@
-# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-
-from erpnext.hr.doctype.daily_work_summary.daily_work_summary import get_user_emails_from_group
-
-
-def execute(filters=None):
-	if not filters.group:
-		return [], []
-	columns, data = get_columns(), get_data(filters)
-	return columns, data
-
-
-def get_columns(filters=None):
-	columns = [
-		{"label": _("User"), "fieldname": "user", "fieldtype": "Data", "width": 300},
-		{
-			"label": _("Replies"),
-			"fieldname": "count",
-			"fieldtype": "data",
-			"width": 100,
-			"align": "right",
-		},
-		{
-			"label": _("Total"),
-			"fieldname": "total",
-			"fieldtype": "data",
-			"width": 100,
-			"align": "right",
-		},
-	]
-	return columns
-
-
-def get_data(filters):
-	daily_summary_emails = frappe.get_all(
-		"Daily Work Summary", fields=["name"], filters=[["creation", "Between", filters.range]]
-	)
-	daily_summary_emails = [d.get("name") for d in daily_summary_emails]
-	replies = frappe.get_all(
-		"Communication",
-		fields=["content", "text_content", "sender"],
-		filters=[
-			["reference_doctype", "=", "Daily Work Summary"],
-			["reference_name", "in", daily_summary_emails],
-			["communication_type", "=", "Communication"],
-			["sent_or_received", "=", "Received"],
-		],
-		order_by="creation asc",
-	)
-	data = []
-	total = len(daily_summary_emails)
-	for user in get_user_emails_from_group(filters.group):
-		user_name = frappe.get_value("User", user, "full_name")
-		count = len([d for d in replies if d.sender == user])
-		data.append([user_name, count, total])
-	return data
diff --git a/erpnext/hr/report/employee_advance_summary/__init__.py b/erpnext/hr/report/employee_advance_summary/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/report/employee_advance_summary/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/report/employee_advance_summary/employee_advance_summary.js b/erpnext/hr/report/employee_advance_summary/employee_advance_summary.js
deleted file mode 100644
index 8de4af5..0000000
--- a/erpnext/hr/report/employee_advance_summary/employee_advance_summary.js
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-/* eslint-disable */
-
-frappe.query_reports["Employee Advance Summary"] = {
-	"filters": [
-		{
-			"fieldname":"employee",
-			"label": __("Employee"),
-			"fieldtype": "Link",
-			"options": "Employee",
-			"width": "80"
-		},
-		{
-			"fieldname":"from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"default": frappe.defaults.get_user_default("year_start_date"),
-			"width": "80"
-		},
-		{
-			"fieldname":"to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.get_today()
-		},
-		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company"
-		},
-		{
-			"fieldname":"status",
-			"label": __("Status"),
-			"fieldtype": "Select",
-			"options": "\nDraft\nPaid\nUnpaid\nClaimed\nCancelled"
-		}
-	]
-};
diff --git a/erpnext/hr/report/employee_advance_summary/employee_advance_summary.json b/erpnext/hr/report/employee_advance_summary/employee_advance_summary.json
deleted file mode 100644
index 60afd59..0000000
--- a/erpnext/hr/report/employee_advance_summary/employee_advance_summary.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "add_total_row": 1, 
- "apply_user_permissions": 1, 
- "creation": "2018-02-21 07:12:37.299923", 
- "disabled": 0, 
- "docstatus": 0, 
- "doctype": "Report", 
- "idx": 0, 
- "is_standard": "Yes", 
- "modified": "2018-02-22 13:33:41.532005", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Employee Advance Summary", 
- "owner": "Administrator", 
- "ref_doctype": "Employee Advance", 
- "report_name": "Employee Advance Summary", 
- "report_type": "Script Report", 
- "roles": [
-  {
-   "role": "Employee"
-  }, 
-  {
-   "role": "Expense Approver"
-  }
- ]
-}
\ No newline at end of file
diff --git a/erpnext/hr/report/employee_advance_summary/employee_advance_summary.py b/erpnext/hr/report/employee_advance_summary/employee_advance_summary.py
deleted file mode 100644
index 29532f7..0000000
--- a/erpnext/hr/report/employee_advance_summary/employee_advance_summary.py
+++ /dev/null
@@ -1,105 +0,0 @@
-# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _, msgprint
-
-
-def execute(filters=None):
-	if not filters:
-		filters = {}
-
-	advances_list = get_advances(filters)
-	columns = get_columns()
-
-	if not advances_list:
-		msgprint(_("No record found"))
-		return columns, advances_list
-
-	data = []
-	for advance in advances_list:
-		row = [
-			advance.name,
-			advance.employee,
-			advance.company,
-			advance.posting_date,
-			advance.advance_amount,
-			advance.paid_amount,
-			advance.claimed_amount,
-			advance.status,
-		]
-		data.append(row)
-
-	return columns, data
-
-
-def get_columns():
-	return [
-		{
-			"label": _("Title"),
-			"fieldname": "title",
-			"fieldtype": "Link",
-			"options": "Employee Advance",
-			"width": 120,
-		},
-		{
-			"label": _("Employee"),
-			"fieldname": "employee",
-			"fieldtype": "Link",
-			"options": "Employee",
-			"width": 120,
-		},
-		{
-			"label": _("Company"),
-			"fieldname": "company",
-			"fieldtype": "Link",
-			"options": "Company",
-			"width": 120,
-		},
-		{"label": _("Posting Date"), "fieldname": "posting_date", "fieldtype": "Date", "width": 120},
-		{
-			"label": _("Advance Amount"),
-			"fieldname": "advance_amount",
-			"fieldtype": "Currency",
-			"width": 120,
-		},
-		{"label": _("Paid Amount"), "fieldname": "paid_amount", "fieldtype": "Currency", "width": 120},
-		{
-			"label": _("Claimed Amount"),
-			"fieldname": "claimed_amount",
-			"fieldtype": "Currency",
-			"width": 120,
-		},
-		{"label": _("Status"), "fieldname": "status", "fieldtype": "Data", "width": 120},
-	]
-
-
-def get_conditions(filters):
-	conditions = ""
-
-	if filters.get("employee"):
-		conditions += "and employee = %(employee)s"
-	if filters.get("company"):
-		conditions += " and company = %(company)s"
-	if filters.get("status"):
-		conditions += " and status = %(status)s"
-	if filters.get("from_date"):
-		conditions += " and posting_date>=%(from_date)s"
-	if filters.get("to_date"):
-		conditions += " and posting_date<=%(to_date)s"
-
-	return conditions
-
-
-def get_advances(filters):
-	conditions = get_conditions(filters)
-	return frappe.db.sql(
-		"""select name, employee, paid_amount, status, advance_amount, claimed_amount, company,
-		posting_date, purpose
-		from `tabEmployee Advance`
-		where docstatus<2 %s order by posting_date, name desc"""
-		% conditions,
-		filters,
-		as_dict=1,
-	)
diff --git a/erpnext/hr/report/employee_analytics/__init__.py b/erpnext/hr/report/employee_analytics/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/report/employee_analytics/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/report/employee_analytics/employee_analytics.js b/erpnext/hr/report/employee_analytics/employee_analytics.js
deleted file mode 100644
index 8620a65..0000000
--- a/erpnext/hr/report/employee_analytics/employee_analytics.js
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-/* eslint-disable */
-
-frappe.query_reports["Employee Analytics"] = {
-	"filters": [
-		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company"),
-			"reqd": 1
-		},
-		{
-			"fieldname":"parameter",
-			"label": __("Parameter"),
-			"fieldtype": "Select",
-			"options": ["Branch","Grade","Department","Designation", "Employment Type"],
-			"reqd": 1
-		}
-	]
-};
diff --git a/erpnext/hr/report/employee_analytics/employee_analytics.json b/erpnext/hr/report/employee_analytics/employee_analytics.json
deleted file mode 100644
index 5a7ab9a..0000000
--- a/erpnext/hr/report/employee_analytics/employee_analytics.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "add_total_row": 0,
- "creation": "2020-05-12 13:52:50.631086",
- "disable_prepared_report": 0,
- "disabled": 0,
- "docstatus": 0,
- "doctype": "Report",
- "idx": 0,
- "is_standard": "Yes",
- "modified": "2020-05-12 13:52:50.631086",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Employee Analytics",
- "owner": "Administrator",
- "prepared_report": 0,
- "ref_doctype": "Employee",
- "report_name": "Employee Analytics",
- "report_type": "Script Report",
- "roles": [
-  {
-   "role": "Employee"
-  },
-  {
-   "role": "HR User"
-  },
-  {
-   "role": "HR Manager"
-  }
- ]
-}
\ No newline at end of file
diff --git a/erpnext/hr/report/employee_analytics/employee_analytics.py b/erpnext/hr/report/employee_analytics/employee_analytics.py
deleted file mode 100644
index 12be156..0000000
--- a/erpnext/hr/report/employee_analytics/employee_analytics.py
+++ /dev/null
@@ -1,99 +0,0 @@
-# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-
-
-def execute(filters=None):
-	if not filters:
-		filters = {}
-
-	if not filters["company"]:
-		frappe.throw(_("{0} is mandatory").format(_("Company")))
-
-	columns = get_columns()
-	employees = get_employees(filters)
-	parameters_result = get_parameters(filters)
-	parameters = []
-	if parameters_result:
-		for department in parameters_result:
-			parameters.append(department)
-
-	chart = get_chart_data(parameters, employees, filters)
-	return columns, employees, None, chart
-
-
-def get_columns():
-	return [
-		_("Employee") + ":Link/Employee:120",
-		_("Name") + ":Data:200",
-		_("Date of Birth") + ":Date:100",
-		_("Branch") + ":Link/Branch:120",
-		_("Department") + ":Link/Department:120",
-		_("Designation") + ":Link/Designation:120",
-		_("Gender") + "::100",
-		_("Company") + ":Link/Company:120",
-	]
-
-
-def get_conditions(filters):
-	conditions = " and " + filters.get("parameter").lower().replace(" ", "_") + " IS NOT NULL "
-
-	if filters.get("company"):
-		conditions += " and company = '%s'" % filters["company"].replace("'", "\\'")
-	return conditions
-
-
-def get_employees(filters):
-	conditions = get_conditions(filters)
-	return frappe.db.sql(
-		"""select name, employee_name, date_of_birth,
-	branch, department, designation,
-	gender, company from `tabEmployee` where status = 'Active' %s"""
-		% conditions,
-		as_list=1,
-	)
-
-
-def get_parameters(filters):
-	if filters.get("parameter") == "Grade":
-		parameter = "Employee Grade"
-	else:
-		parameter = filters.get("parameter")
-
-	return frappe.db.sql("""select name from `tab""" + parameter + """` """, as_list=1)
-
-
-def get_chart_data(parameters, employees, filters):
-	if not parameters:
-		parameters = []
-	datasets = []
-	parameter_field_name = filters.get("parameter").lower().replace(" ", "_")
-	label = []
-	for parameter in parameters:
-		if parameter:
-			total_employee = frappe.db.sql(
-				"""select count(*) from
-				`tabEmployee` where """
-				+ parameter_field_name
-				+ """ = %s and  company = %s""",
-				(parameter[0], filters.get("company")),
-				as_list=1,
-			)
-			if total_employee[0][0]:
-				label.append(parameter)
-			datasets.append(total_employee[0][0])
-
-	values = [value for value in datasets if value != 0]
-
-	total_employee = frappe.db.count("Employee", {"status": "Active"})
-	others = total_employee - sum(values)
-
-	label.append(["Not Set"])
-	values.append(others)
-
-	chart = {"data": {"labels": label, "datasets": [{"name": "Employees", "values": values}]}}
-	chart["type"] = "donut"
-	return chart
diff --git a/erpnext/hr/report/employee_birthday/__init__.py b/erpnext/hr/report/employee_birthday/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/report/employee_birthday/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/report/employee_birthday/employee_birthday.js b/erpnext/hr/report/employee_birthday/employee_birthday.js
deleted file mode 100644
index bbe4a8d..0000000
--- a/erpnext/hr/report/employee_birthday/employee_birthday.js
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-// License: GNU General Public License v3. See license.txt
-
-frappe.query_reports["Employee Birthday"] = {
-	"filters": [
-		{
-			"fieldname":"month",
-			"label": __("Month"),
-			"fieldtype": "Select",
-			"options": "Jan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug\nSep\nOct\nNov\nDec",
-			"default": ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov",
-				"Dec"][frappe.datetime.str_to_obj(frappe.datetime.get_today()).getMonth()],
-		},
-		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company")
-		}
-	]
-}
diff --git a/erpnext/hr/report/employee_birthday/employee_birthday.json b/erpnext/hr/report/employee_birthday/employee_birthday.json
deleted file mode 100644
index 7946a6a..0000000
--- a/erpnext/hr/report/employee_birthday/employee_birthday.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "add_total_row": 0, 
- "apply_user_permissions": 1, 
- "creation": "2013-05-06 17:56:03", 
- "disabled": 0, 
- "docstatus": 0, 
- "doctype": "Report", 
- "idx": 3, 
- "is_standard": "Yes", 
- "modified": "2017-02-24 20:18:13.011024", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Employee Birthday", 
- "owner": "Administrator", 
- "ref_doctype": "Employee", 
- "report_name": "Employee Birthday", 
- "report_type": "Script Report", 
- "roles": [
-  {
-   "role": "Employee"
-  }, 
-  {
-   "role": "HR User"
-  }, 
-  {
-   "role": "HR Manager"
-  }
- ]
-}
\ No newline at end of file
diff --git a/erpnext/hr/report/employee_birthday/employee_birthday.py b/erpnext/hr/report/employee_birthday/employee_birthday.py
deleted file mode 100644
index a6a13d8..0000000
--- a/erpnext/hr/report/employee_birthday/employee_birthday.py
+++ /dev/null
@@ -1,65 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-
-import frappe
-from frappe import _
-
-
-def execute(filters=None):
-	if not filters:
-		filters = {}
-
-	columns = get_columns()
-	data = get_employees(filters)
-
-	return columns, data
-
-
-def get_columns():
-	return [
-		_("Employee") + ":Link/Employee:120",
-		_("Name") + ":Data:200",
-		_("Date of Birth") + ":Date:100",
-		_("Branch") + ":Link/Branch:120",
-		_("Department") + ":Link/Department:120",
-		_("Designation") + ":Link/Designation:120",
-		_("Gender") + "::60",
-		_("Company") + ":Link/Company:120",
-	]
-
-
-def get_employees(filters):
-	conditions = get_conditions(filters)
-	return frappe.db.sql(
-		"""select name, employee_name, date_of_birth,
-	branch, department, designation,
-	gender, company from tabEmployee where status = 'Active' %s"""
-		% conditions,
-		as_list=1,
-	)
-
-
-def get_conditions(filters):
-	conditions = ""
-	if filters.get("month"):
-		month = [
-			"Jan",
-			"Feb",
-			"Mar",
-			"Apr",
-			"May",
-			"Jun",
-			"Jul",
-			"Aug",
-			"Sep",
-			"Oct",
-			"Nov",
-			"Dec",
-		].index(filters["month"]) + 1
-		conditions += " and month(date_of_birth) = '%s'" % month
-
-	if filters.get("company"):
-		conditions += " and company = '%s'" % filters["company"].replace("'", "\\'")
-
-	return conditions
diff --git a/erpnext/hr/report/employee_exits/__init__.py b/erpnext/hr/report/employee_exits/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/report/employee_exits/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/report/employee_exits/employee_exits.js b/erpnext/hr/report/employee_exits/employee_exits.js
deleted file mode 100644
index ac677d8..0000000
--- a/erpnext/hr/report/employee_exits/employee_exits.js
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-/* eslint-disable */
-
-frappe.query_reports["Employee Exits"] = {
-	filters: [
-		{
-			"fieldname": "from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.add_months(frappe.datetime.nowdate(), -12)
-		},
-		{
-			"fieldname": "to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.nowdate()
-		},
-		{
-			"fieldname": "company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company"
-		},
-		{
-			"fieldname": "department",
-			"label": __("Department"),
-			"fieldtype": "Link",
-			"options": "Department"
-		},
-		{
-			"fieldname": "designation",
-			"label": __("Designation"),
-			"fieldtype": "Link",
-			"options": "Designation"
-		},
-		{
-			"fieldname": "employee",
-			"label": __("Employee"),
-			"fieldtype": "Link",
-			"options": "Employee"
-		},
-		{
-			"fieldname": "reports_to",
-			"label": __("Reports To"),
-			"fieldtype": "Link",
-			"options": "Employee"
-		},
-		{
-			"fieldname": "interview_status",
-			"label": __("Interview Status"),
-			"fieldtype": "Select",
-			"options": ["", "Pending", "Scheduled", "Completed"]
-		},
-		{
-			"fieldname": "final_decision",
-			"label": __("Final Decision"),
-			"fieldtype": "Select",
-			"options": ["", "Employee Retained", "Exit Confirmed"]
-		},
-		{
-			"fieldname": "exit_interview_pending",
-			"label": __("Exit Interview Pending"),
-			"fieldtype": "Check"
-		},
-		{
-			"fieldname": "questionnaire_pending",
-			"label": __("Exit Questionnaire Pending"),
-			"fieldtype": "Check"
-		},
-		{
-			"fieldname": "fnf_pending",
-			"label": __("FnF Pending"),
-			"fieldtype": "Check"
-		}
-	]
-};
diff --git a/erpnext/hr/report/employee_exits/employee_exits.json b/erpnext/hr/report/employee_exits/employee_exits.json
deleted file mode 100644
index 4fe9a85..0000000
--- a/erpnext/hr/report/employee_exits/employee_exits.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "add_total_row": 0,
- "columns": [],
- "creation": "2021-12-05 19:47:18.332319",
- "disable_prepared_report": 0,
- "disabled": 0,
- "docstatus": 0,
- "doctype": "Report",
- "filters": [],
- "idx": 0,
- "is_standard": "Yes",
- "letter_head": "Test",
- "modified": "2021-12-05 19:47:18.332319",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Employee Exits",
- "owner": "Administrator",
- "prepared_report": 0,
- "ref_doctype": "Exit Interview",
- "report_name": "Employee Exits",
- "report_type": "Script Report",
- "roles": [
-  {
-   "role": "System Manager"
-  },
-  {
-   "role": "HR Manager"
-  },
-  {
-   "role": "HR User"
-  }
- ]
-}
\ No newline at end of file
diff --git a/erpnext/hr/report/employee_exits/employee_exits.py b/erpnext/hr/report/employee_exits/employee_exits.py
deleted file mode 100644
index 9cd9ff0..0000000
--- a/erpnext/hr/report/employee_exits/employee_exits.py
+++ /dev/null
@@ -1,235 +0,0 @@
-# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
-# License: MIT. See LICENSE
-
-import frappe
-from frappe import _
-from frappe.query_builder import Order
-from frappe.utils import getdate
-
-
-def execute(filters=None):
-	columns = get_columns()
-	data = get_data(filters)
-	chart = get_chart_data(data)
-	report_summary = get_report_summary(data)
-
-	return columns, data, None, chart, report_summary
-
-
-def get_columns():
-	return [
-		{
-			"label": _("Employee"),
-			"fieldname": "employee",
-			"fieldtype": "Link",
-			"options": "Employee",
-			"width": 150,
-		},
-		{"label": _("Employee Name"), "fieldname": "employee_name", "fieldtype": "Data", "width": 150},
-		{
-			"label": _("Date of Joining"),
-			"fieldname": "date_of_joining",
-			"fieldtype": "Date",
-			"width": 120,
-		},
-		{"label": _("Relieving Date"), "fieldname": "relieving_date", "fieldtype": "Date", "width": 120},
-		{
-			"label": _("Exit Interview"),
-			"fieldname": "exit_interview",
-			"fieldtype": "Link",
-			"options": "Exit Interview",
-			"width": 150,
-		},
-		{
-			"label": _("Interview Status"),
-			"fieldname": "interview_status",
-			"fieldtype": "Data",
-			"width": 130,
-		},
-		{
-			"label": _("Final Decision"),
-			"fieldname": "employee_status",
-			"fieldtype": "Data",
-			"width": 150,
-		},
-		{
-			"label": _("Full and Final Statement"),
-			"fieldname": "full_and_final_statement",
-			"fieldtype": "Link",
-			"options": "Full and Final Statement",
-			"width": 180,
-		},
-		{
-			"label": _("Department"),
-			"fieldname": "department",
-			"fieldtype": "Link",
-			"options": "Department",
-			"width": 120,
-		},
-		{
-			"label": _("Designation"),
-			"fieldname": "designation",
-			"fieldtype": "Link",
-			"options": "Designation",
-			"width": 120,
-		},
-		{
-			"label": _("Reports To"),
-			"fieldname": "reports_to",
-			"fieldtype": "Link",
-			"options": "Employee",
-			"width": 120,
-		},
-	]
-
-
-def get_data(filters):
-	employee = frappe.qb.DocType("Employee")
-	interview = frappe.qb.DocType("Exit Interview")
-	fnf = frappe.qb.DocType("Full and Final Statement")
-
-	query = (
-		frappe.qb.from_(employee)
-		.left_join(interview)
-		.on(interview.employee == employee.name)
-		.left_join(fnf)
-		.on(fnf.employee == employee.name)
-		.select(
-			employee.name.as_("employee"),
-			employee.employee_name.as_("employee_name"),
-			employee.date_of_joining.as_("date_of_joining"),
-			employee.relieving_date.as_("relieving_date"),
-			employee.department.as_("department"),
-			employee.designation.as_("designation"),
-			employee.reports_to.as_("reports_to"),
-			interview.name.as_("exit_interview"),
-			interview.status.as_("interview_status"),
-			interview.employee_status.as_("employee_status"),
-			interview.reference_document_name.as_("questionnaire"),
-			fnf.name.as_("full_and_final_statement"),
-		)
-		.distinct()
-		.where(
-			((employee.relieving_date.isnotnull()) | (employee.relieving_date != ""))
-			& ((interview.name.isnull()) | ((interview.name.isnotnull()) & (interview.docstatus != 2)))
-			& ((fnf.name.isnull()) | ((fnf.name.isnotnull()) & (fnf.docstatus != 2)))
-		)
-		.orderby(employee.relieving_date, order=Order.asc)
-	)
-
-	query = get_conditions(filters, query, employee, interview, fnf)
-	result = query.run(as_dict=True)
-
-	return result
-
-
-def get_conditions(filters, query, employee, interview, fnf):
-	if filters.get("from_date") and filters.get("to_date"):
-		query = query.where(
-			employee.relieving_date[getdate(filters.get("from_date")) : getdate(filters.get("to_date"))]
-		)
-
-	elif filters.get("from_date"):
-		query = query.where(employee.relieving_date >= filters.get("from_date"))
-
-	elif filters.get("to_date"):
-		query = query.where(employee.relieving_date <= filters.get("to_date"))
-
-	if filters.get("company"):
-		query = query.where(employee.company == filters.get("company"))
-
-	if filters.get("department"):
-		query = query.where(employee.department == filters.get("department"))
-
-	if filters.get("designation"):
-		query = query.where(employee.designation == filters.get("designation"))
-
-	if filters.get("employee"):
-		query = query.where(employee.name == filters.get("employee"))
-
-	if filters.get("reports_to"):
-		query = query.where(employee.reports_to == filters.get("reports_to"))
-
-	if filters.get("interview_status"):
-		query = query.where(interview.status == filters.get("interview_status"))
-
-	if filters.get("final_decision"):
-		query = query.where(interview.employee_status == filters.get("final_decision"))
-
-	if filters.get("exit_interview_pending"):
-		query = query.where((interview.name == "") | (interview.name.isnull()))
-
-	if filters.get("questionnaire_pending"):
-		query = query.where(
-			(interview.reference_document_name == "") | (interview.reference_document_name.isnull())
-		)
-
-	if filters.get("fnf_pending"):
-		query = query.where((fnf.name == "") | (fnf.name.isnull()))
-
-	return query
-
-
-def get_chart_data(data):
-	if not data:
-		return None
-
-	retained = 0
-	exit_confirmed = 0
-	pending = 0
-
-	for entry in data:
-		if entry.employee_status == "Employee Retained":
-			retained += 1
-		elif entry.employee_status == "Exit Confirmed":
-			exit_confirmed += 1
-		else:
-			pending += 1
-
-	chart = {
-		"data": {
-			"labels": [_("Retained"), _("Exit Confirmed"), _("Decision Pending")],
-			"datasets": [{"name": _("Employee Status"), "values": [retained, exit_confirmed, pending]}],
-		},
-		"type": "donut",
-		"colors": ["green", "red", "blue"],
-	}
-
-	return chart
-
-
-def get_report_summary(data):
-	if not data:
-		return None
-
-	total_resignations = len(data)
-	interviews_pending = len([entry.name for entry in data if not entry.exit_interview])
-	fnf_pending = len([entry.name for entry in data if not entry.full_and_final_statement])
-	questionnaires_pending = len([entry.name for entry in data if not entry.questionnaire])
-
-	return [
-		{
-			"value": total_resignations,
-			"label": _("Total Resignations"),
-			"indicator": "Red" if total_resignations > 0 else "Green",
-			"datatype": "Int",
-		},
-		{
-			"value": interviews_pending,
-			"label": _("Pending Interviews"),
-			"indicator": "Blue" if interviews_pending > 0 else "Green",
-			"datatype": "Int",
-		},
-		{
-			"value": fnf_pending,
-			"label": _("Pending FnF"),
-			"indicator": "Blue" if fnf_pending > 0 else "Green",
-			"datatype": "Int",
-		},
-		{
-			"value": questionnaires_pending,
-			"label": _("Pending Questionnaires"),
-			"indicator": "Blue" if questionnaires_pending > 0 else "Green",
-			"datatype": "Int",
-		},
-	]
diff --git a/erpnext/hr/report/employee_exits/test_employee_exits.py b/erpnext/hr/report/employee_exits/test_employee_exits.py
deleted file mode 100644
index a9a30de..0000000
--- a/erpnext/hr/report/employee_exits/test_employee_exits.py
+++ /dev/null
@@ -1,245 +0,0 @@
-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()
diff --git a/erpnext/hr/report/employee_information/__init__.py b/erpnext/hr/report/employee_information/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/report/employee_information/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/report/employee_information/employee_information.json b/erpnext/hr/report/employee_information/employee_information.json
deleted file mode 100644
index ee68af3..0000000
--- a/erpnext/hr/report/employee_information/employee_information.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "add_total_row": 0, 
- "apply_user_permissions": 1, 
- "creation": "2013-05-06 18:43:53", 
- "disabled": 0, 
- "docstatus": 0, 
- "doctype": "Report", 
- "idx": 3, 
- "is_standard": "Yes", 
- "json": "{\"add_total_row\": 0, \"sort_by\": \"Employee.bank_ac_no\", \"sort_order\": \"desc\", \"sort_by_next\": \"\", \"filters\": [], \"sort_order_next\": \"desc\", \"columns\": [[\"name\", \"Employee\"], [\"employee_number\", \"Employee\"], [\"date_of_joining\", \"Employee\"], [\"branch\", \"Employee\"], [\"department\", \"Employee\"], [\"designation\", \"Employee\"], [\"gender\", \"Employee\"], [\"status\", \"Employee\"], [\"company\", \"Employee\"], [\"employment_type\", \"Employee\"], [\"reports_to\", \"Employee\"], [\"company_email\", \"Employee\"]]}", 
- "modified": "2017-02-24 20:01:38.681441", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Employee Information", 
- "owner": "Administrator", 
- "ref_doctype": "Employee", 
- "report_name": "Employee Information", 
- "report_type": "Report Builder", 
- "roles": [
-  {
-   "role": "HR User"
-  }, 
-  {
-   "role": "HR Manager"
-  }
- ]
-}
\ No newline at end of file
diff --git a/erpnext/hr/report/employee_leave_balance/__init__.py b/erpnext/hr/report/employee_leave_balance/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/report/employee_leave_balance/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/report/employee_leave_balance/employee_leave_balance.js b/erpnext/hr/report/employee_leave_balance/employee_leave_balance.js
deleted file mode 100644
index 2339350..0000000
--- a/erpnext/hr/report/employee_leave_balance/employee_leave_balance.js
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-// License: GNU General Public License v3. See license.txt
-
-frappe.query_reports["Employee Leave Balance"] = {
-	"filters": [
-		{
-			"fieldname": "from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"reqd": 1,
-			"default": frappe.defaults.get_default("year_start_date")
-		},
-		{
-			"fieldname": "to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"reqd": 1,
-			"default": frappe.defaults.get_default("year_end_date")
-		},
-		{
-			"fieldname": "company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"reqd": 1,
-			"default": frappe.defaults.get_user_default("Company")
-		},
-		{
-			"fieldname": "department",
-			"label": __("Department"),
-			"fieldtype": "Link",
-			"options": "Department",
-		},
-		{
-			"fieldname": "employee",
-			"label": __("Employee"),
-			"fieldtype": "Link",
-			"options": "Employee",
-		},
-		{
-			"fieldname": "employee_status",
-			"label": __("Employee Status"),
-			"fieldtype": "Select",
-			"options": [
-				"",
-				{ "value": "Active", "label": __("Active") },
-				{ "value": "Inactive", "label": __("Inactive") },
-				{ "value": "Suspended", "label": __("Suspended") },
-				{ "value": "Left", "label": __("Left") },
-			],
-			"default": "Active",
-		}
-	],
-
-	onload: () => {
-		frappe.call({
-			type: "GET",
-			method: "erpnext.hr.utils.get_leave_period",
-			args: {
-				"from_date": frappe.defaults.get_default("year_start_date"),
-				"to_date": frappe.defaults.get_default("year_end_date"),
-				"company": frappe.defaults.get_user_default("Company")
-			},
-			freeze: true,
-			callback: (data) => {
-				frappe.query_report.set_filter_value("from_date", data.message[0].from_date);
-				frappe.query_report.set_filter_value("to_date", data.message[0].to_date);
-			}
-		});
-	}
-}
diff --git a/erpnext/hr/report/employee_leave_balance/employee_leave_balance.json b/erpnext/hr/report/employee_leave_balance/employee_leave_balance.json
deleted file mode 100644
index 8b47f7e..0000000
--- a/erpnext/hr/report/employee_leave_balance/employee_leave_balance.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "add_total_row": 0, 
- "apply_user_permissions": 1, 
- "creation": "2013-02-22 15:29:34", 
- "disabled": 0, 
- "docstatus": 0, 
- "doctype": "Report", 
- "idx": 3, 
- "is_standard": "Yes", 
- "modified": "2017-02-24 20:18:04.317397", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Employee Leave Balance", 
- "owner": "Administrator", 
- "ref_doctype": "Employee", 
- "report_name": "Employee Leave Balance", 
- "report_type": "Script Report", 
- "roles": [
-  {
-   "role": "HR User"
-  }, 
-  {
-   "role": "HR Manager"
-  }
- ]
-}
\ No newline at end of file
diff --git a/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py b/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py
deleted file mode 100644
index 1f7ade2..0000000
--- a/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py
+++ /dev/null
@@ -1,307 +0,0 @@
-# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-from itertools import groupby
-from typing import Dict, List, Optional, Tuple
-
-import frappe
-from frappe import _
-from frappe.utils import add_days, getdate
-
-from erpnext.hr.doctype.leave_allocation.leave_allocation import get_previous_allocation
-from erpnext.hr.doctype.leave_application.leave_application import (
-	get_leave_balance_on,
-	get_leaves_for_period,
-)
-
-Filters = frappe._dict
-
-
-def execute(filters: Optional[Filters] = None) -> Tuple:
-	if filters.to_date <= filters.from_date:
-		frappe.throw(_('"From Date" can not be greater than or equal to "To Date"'))
-
-	columns = get_columns()
-	data = get_data(filters)
-	charts = get_chart_data(data)
-	return columns, data, None, charts
-
-
-def get_columns() -> List[Dict]:
-	return [
-		{
-			"label": _("Leave Type"),
-			"fieldtype": "Link",
-			"fieldname": "leave_type",
-			"width": 200,
-			"options": "Leave Type",
-		},
-		{
-			"label": _("Employee"),
-			"fieldtype": "Link",
-			"fieldname": "employee",
-			"width": 100,
-			"options": "Employee",
-		},
-		{
-			"label": _("Employee Name"),
-			"fieldtype": "Dynamic Link",
-			"fieldname": "employee_name",
-			"width": 100,
-			"options": "employee",
-		},
-		{
-			"label": _("Opening Balance"),
-			"fieldtype": "float",
-			"fieldname": "opening_balance",
-			"width": 150,
-		},
-		{
-			"label": _("New Leave(s) Allocated"),
-			"fieldtype": "float",
-			"fieldname": "leaves_allocated",
-			"width": 200,
-		},
-		{
-			"label": _("Leave(s) Taken"),
-			"fieldtype": "float",
-			"fieldname": "leaves_taken",
-			"width": 150,
-		},
-		{
-			"label": _("Leave(s) Expired"),
-			"fieldtype": "float",
-			"fieldname": "leaves_expired",
-			"width": 150,
-		},
-		{
-			"label": _("Closing Balance"),
-			"fieldtype": "float",
-			"fieldname": "closing_balance",
-			"width": 150,
-		},
-	]
-
-
-def get_data(filters: Filters) -> List:
-	leave_types = frappe.db.get_list("Leave Type", pluck="name", order_by="name")
-	conditions = get_conditions(filters)
-
-	user = frappe.session.user
-	department_approver_map = get_department_leave_approver_map(filters.get("department"))
-
-	active_employees = frappe.get_list(
-		"Employee",
-		filters=conditions,
-		fields=["name", "employee_name", "department", "user_id", "leave_approver"],
-	)
-
-	data = []
-
-	for leave_type in leave_types:
-		if len(active_employees) > 1:
-			data.append({"leave_type": leave_type})
-		else:
-			row = frappe._dict({"leave_type": leave_type})
-
-		for employee in active_employees:
-
-			leave_approvers = department_approver_map.get(employee.department_name, []).append(
-				employee.leave_approver
-			)
-
-			if (
-				(leave_approvers and len(leave_approvers) and user in leave_approvers)
-				or (user in ["Administrator", employee.user_id])
-				or ("HR Manager" in frappe.get_roles(user))
-			):
-				if len(active_employees) > 1:
-					row = frappe._dict()
-				row.employee = employee.name
-				row.employee_name = employee.employee_name
-
-				leaves_taken = (
-					get_leaves_for_period(employee.name, leave_type, filters.from_date, filters.to_date) * -1
-				)
-
-				new_allocation, expired_leaves, carry_forwarded_leaves = get_allocated_and_expired_leaves(
-					filters.from_date, filters.to_date, employee.name, leave_type
-				)
-				opening = get_opening_balance(employee.name, leave_type, filters, carry_forwarded_leaves)
-
-				row.leaves_allocated = new_allocation
-				row.leaves_expired = expired_leaves
-				row.opening_balance = opening
-				row.leaves_taken = leaves_taken
-
-				# not be shown on the basis of days left it create in user mind for carry_forward leave
-				row.closing_balance = new_allocation + opening - (row.leaves_expired + leaves_taken)
-				row.indent = 1
-				data.append(row)
-
-	return data
-
-
-def get_opening_balance(
-	employee: str, leave_type: str, filters: Filters, carry_forwarded_leaves: float
-) -> float:
-	# allocation boundary condition
-	# opening balance is the closing leave balance 1 day before the filter start date
-	opening_balance_date = add_days(filters.from_date, -1)
-	allocation = get_previous_allocation(filters.from_date, leave_type, employee)
-
-	if (
-		allocation
-		and allocation.get("to_date")
-		and opening_balance_date
-		and getdate(allocation.get("to_date")) == getdate(opening_balance_date)
-	):
-		# if opening balance date is same as the previous allocation's expiry
-		# then opening balance should only consider carry forwarded leaves
-		opening_balance = carry_forwarded_leaves
-	else:
-		# else directly get leave balance on the previous day
-		opening_balance = get_leave_balance_on(employee, leave_type, opening_balance_date)
-
-	return opening_balance
-
-
-def get_conditions(filters: Filters) -> Dict:
-	conditions = {}
-
-	if filters.get("employee"):
-		conditions["name"] = filters.get("employee")
-
-	if filters.get("company"):
-		conditions["company"] = filters.get("company")
-
-	if filters.get("department"):
-		conditions["department"] = filters.get("department")
-
-	if filters.get("employee_status"):
-		conditions["status"] = filters.get("employee_status")
-
-	return conditions
-
-
-def get_department_leave_approver_map(department: Optional[str] = None):
-	# get current department and all its child
-	department_list = frappe.get_list(
-		"Department",
-		filters={"disabled": 0},
-		or_filters={"name": department, "parent_department": department},
-		pluck="name",
-	)
-	# retrieve approvers list from current department and from its subsequent child departments
-	approver_list = frappe.get_all(
-		"Department Approver",
-		filters={"parentfield": "leave_approvers", "parent": ("in", department_list)},
-		fields=["parent", "approver"],
-		as_list=True,
-	)
-
-	approvers = {}
-
-	for k, v in approver_list:
-		approvers.setdefault(k, []).append(v)
-
-	return approvers
-
-
-def get_allocated_and_expired_leaves(
-	from_date: str, to_date: str, employee: str, leave_type: str
-) -> Tuple[float, float, float]:
-	new_allocation = 0
-	expired_leaves = 0
-	carry_forwarded_leaves = 0
-
-	records = get_leave_ledger_entries(from_date, to_date, employee, leave_type)
-
-	for record in records:
-		# new allocation records with `is_expired=1` are created when leave expires
-		# these new records should not be considered, else it leads to negative leave balance
-		if record.is_expired:
-			continue
-
-		if record.to_date < getdate(to_date):
-			# leave allocations ending before to_date, reduce leaves taken within that period
-			# since they are already used, they won't expire
-			expired_leaves += record.leaves
-			expired_leaves += get_leaves_for_period(employee, leave_type, record.from_date, record.to_date)
-
-		if record.from_date >= getdate(from_date):
-			if record.is_carry_forward:
-				carry_forwarded_leaves += record.leaves
-			else:
-				new_allocation += record.leaves
-
-	return new_allocation, expired_leaves, carry_forwarded_leaves
-
-
-def get_leave_ledger_entries(
-	from_date: str, to_date: str, employee: str, leave_type: str
-) -> List[Dict]:
-	ledger = frappe.qb.DocType("Leave Ledger Entry")
-	records = (
-		frappe.qb.from_(ledger)
-		.select(
-			ledger.employee,
-			ledger.leave_type,
-			ledger.from_date,
-			ledger.to_date,
-			ledger.leaves,
-			ledger.transaction_name,
-			ledger.transaction_type,
-			ledger.is_carry_forward,
-			ledger.is_expired,
-		)
-		.where(
-			(ledger.docstatus == 1)
-			& (ledger.transaction_type == "Leave Allocation")
-			& (ledger.employee == employee)
-			& (ledger.leave_type == leave_type)
-			& (
-				(ledger.from_date[from_date:to_date])
-				| (ledger.to_date[from_date:to_date])
-				| ((ledger.from_date < from_date) & (ledger.to_date > to_date))
-			)
-		)
-	).run(as_dict=True)
-
-	return records
-
-
-def get_chart_data(data: List) -> Dict:
-	labels = []
-	datasets = []
-	employee_data = data
-
-	if data and data[0].get("employee_name"):
-		get_dataset_for_chart(employee_data, datasets, labels)
-
-	chart = {
-		"data": {"labels": labels, "datasets": datasets},
-		"type": "bar",
-		"colors": ["#456789", "#EE8888", "#7E77BF"],
-	}
-
-	return chart
-
-
-def get_dataset_for_chart(employee_data: List, datasets: List, labels: List) -> List:
-	leaves = []
-	employee_data = sorted(employee_data, key=lambda k: k["employee_name"])
-
-	for key, group in groupby(employee_data, lambda x: x["employee_name"]):
-		for grp in group:
-			if grp.closing_balance:
-				leaves.append(
-					frappe._dict({"leave_type": grp.leave_type, "closing_balance": grp.closing_balance})
-				)
-
-		if leaves:
-			labels.append(key)
-
-	for leave in leaves:
-		datasets.append({"name": leave.leave_type, "values": [leave.closing_balance]})
diff --git a/erpnext/hr/report/employee_leave_balance/test_employee_leave_balance.py b/erpnext/hr/report/employee_leave_balance/test_employee_leave_balance.py
deleted file mode 100644
index 5354abf..0000000
--- a/erpnext/hr/report/employee_leave_balance/test_employee_leave_balance.py
+++ /dev/null
@@ -1,246 +0,0 @@
-# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-
-import unittest
-
-import frappe
-from frappe.utils import add_days, add_months, flt, get_year_ending, get_year_start, getdate
-
-from erpnext.hr.doctype.employee.test_employee import make_employee
-from erpnext.hr.doctype.holiday_list.test_holiday_list import set_holiday_list
-from erpnext.hr.doctype.leave_application.test_leave_application import (
-	get_first_sunday,
-	make_allocation_record,
-)
-from erpnext.hr.doctype.leave_ledger_entry.leave_ledger_entry import process_expired_allocation
-from erpnext.hr.doctype.leave_type.test_leave_type import create_leave_type
-from erpnext.hr.report.employee_leave_balance.employee_leave_balance import execute
-from erpnext.payroll.doctype.salary_slip.test_salary_slip import (
-	make_holiday_list,
-	make_leave_application,
-)
-
-test_records = frappe.get_test_records("Leave Type")
-
-
-class TestEmployeeLeaveBalance(unittest.TestCase):
-	def setUp(self):
-		for dt in [
-			"Leave Application",
-			"Leave Allocation",
-			"Salary Slip",
-			"Leave Ledger Entry",
-			"Leave Type",
-		]:
-			frappe.db.delete(dt)
-
-		frappe.set_user("Administrator")
-
-		self.employee_id = make_employee("test_emp_leave_balance@example.com", company="_Test Company")
-
-		self.date = getdate()
-		self.year_start = getdate(get_year_start(self.date))
-		self.mid_year = add_months(self.year_start, 6)
-		self.year_end = getdate(get_year_ending(self.date))
-
-		self.holiday_list = make_holiday_list(
-			"_Test Emp Balance Holiday List", self.year_start, self.year_end
-		)
-
-	def tearDown(self):
-		frappe.db.rollback()
-
-	@set_holiday_list("_Test Emp Balance Holiday List", "_Test Company")
-	def test_employee_leave_balance(self):
-		frappe.get_doc(test_records[0]).insert()
-
-		# 5 leaves
-		allocation1 = make_allocation_record(
-			employee=self.employee_id,
-			from_date=add_days(self.year_start, -11),
-			to_date=add_days(self.year_start, -1),
-			leaves=5,
-		)
-		# 30 leaves
-		allocation2 = make_allocation_record(
-			employee=self.employee_id, from_date=self.year_start, to_date=self.year_end
-		)
-		# expires 5 leaves
-		process_expired_allocation()
-
-		# 4 days leave
-		first_sunday = get_first_sunday(self.holiday_list, for_date=self.year_start)
-		leave_application = make_leave_application(
-			self.employee_id, add_days(first_sunday, 1), add_days(first_sunday, 4), "_Test Leave Type"
-		)
-		leave_application.reload()
-
-		filters = frappe._dict(
-			{
-				"from_date": allocation1.from_date,
-				"to_date": allocation2.to_date,
-				"employee": self.employee_id,
-			}
-		)
-
-		report = execute(filters)
-
-		expected_data = [
-			{
-				"leave_type": "_Test Leave Type",
-				"employee": self.employee_id,
-				"employee_name": "test_emp_leave_balance@example.com",
-				"leaves_allocated": flt(allocation1.new_leaves_allocated + allocation2.new_leaves_allocated),
-				"leaves_expired": flt(allocation1.new_leaves_allocated),
-				"opening_balance": flt(0),
-				"leaves_taken": flt(leave_application.total_leave_days),
-				"closing_balance": flt(allocation2.new_leaves_allocated - leave_application.total_leave_days),
-				"indent": 1,
-			}
-		]
-
-		self.assertEqual(report[1], expected_data)
-
-	@set_holiday_list("_Test Emp Balance Holiday List", "_Test Company")
-	def test_opening_balance_on_alloc_boundary_dates(self):
-		frappe.get_doc(test_records[0]).insert()
-
-		# 30 leaves allocated
-		allocation1 = make_allocation_record(
-			employee=self.employee_id, from_date=self.year_start, to_date=self.year_end
-		)
-		# 4 days leave application in the first allocation
-		first_sunday = get_first_sunday(self.holiday_list, for_date=self.year_start)
-		leave_application = make_leave_application(
-			self.employee_id, add_days(first_sunday, 1), add_days(first_sunday, 4), "_Test Leave Type"
-		)
-		leave_application.reload()
-
-		# Case 1: opening balance for first alloc boundary
-		filters = frappe._dict(
-			{"from_date": self.year_start, "to_date": self.year_end, "employee": self.employee_id}
-		)
-		report = execute(filters)
-		self.assertEqual(report[1][0].opening_balance, 0)
-
-		# Case 2: opening balance after leave application date
-		filters = frappe._dict(
-			{
-				"from_date": add_days(leave_application.to_date, 1),
-				"to_date": self.year_end,
-				"employee": self.employee_id,
-			}
-		)
-		report = execute(filters)
-		self.assertEqual(
-			report[1][0].opening_balance,
-			(allocation1.new_leaves_allocated - leave_application.total_leave_days),
-		)
-
-		# Case 3: leave balance shows actual balance and not consumption balance as per remaining days near alloc end date
-		# eg: 3 days left for alloc to end, leave balance should still be 26 and not 3
-		filters = frappe._dict(
-			{
-				"from_date": add_days(self.year_end, -3),
-				"to_date": self.year_end,
-				"employee": self.employee_id,
-			}
-		)
-		report = execute(filters)
-		self.assertEqual(
-			report[1][0].opening_balance,
-			(allocation1.new_leaves_allocated - leave_application.total_leave_days),
-		)
-
-	@set_holiday_list("_Test Emp Balance Holiday List", "_Test Company")
-	def test_opening_balance_considers_carry_forwarded_leaves(self):
-		leave_type = create_leave_type(leave_type_name="_Test_CF_leave_expiry", is_carry_forward=1)
-		leave_type.insert()
-
-		# 30 leaves allocated for first half of the year
-		allocation1 = make_allocation_record(
-			employee=self.employee_id,
-			from_date=self.year_start,
-			to_date=self.mid_year,
-			leave_type=leave_type.name,
-		)
-		# 4 days leave application in the first allocation
-		first_sunday = get_first_sunday(self.holiday_list, for_date=self.year_start)
-		leave_application = make_leave_application(
-			self.employee_id, first_sunday, add_days(first_sunday, 3), leave_type.name
-		)
-		leave_application.reload()
-		# 30 leaves allocated for second half of the year + carry forward leaves (26) from the previous allocation
-		allocation2 = make_allocation_record(
-			employee=self.employee_id,
-			from_date=add_days(self.mid_year, 1),
-			to_date=self.year_end,
-			carry_forward=True,
-			leave_type=leave_type.name,
-		)
-
-		# Case 1: carry forwarded leaves considered in opening balance for second alloc
-		filters = frappe._dict(
-			{
-				"from_date": add_days(self.mid_year, 1),
-				"to_date": self.year_end,
-				"employee": self.employee_id,
-			}
-		)
-		report = execute(filters)
-		# available leaves from old alloc
-		opening_balance = allocation1.new_leaves_allocated - leave_application.total_leave_days
-		self.assertEqual(report[1][0].opening_balance, opening_balance)
-
-		# Case 2: opening balance one day after alloc boundary = carry forwarded leaves + new leaves alloc
-		filters = frappe._dict(
-			{
-				"from_date": add_days(self.mid_year, 2),
-				"to_date": self.year_end,
-				"employee": self.employee_id,
-			}
-		)
-		report = execute(filters)
-		# available leaves from old alloc
-		opening_balance = allocation2.new_leaves_allocated + (
-			allocation1.new_leaves_allocated - leave_application.total_leave_days
-		)
-		self.assertEqual(report[1][0].opening_balance, opening_balance)
-
-	@set_holiday_list("_Test Emp Balance Holiday List", "_Test Company")
-	def test_employee_status_filter(self):
-		frappe.get_doc(test_records[0]).insert()
-		inactive_emp = make_employee("test_emp_status@example.com", company="_Test Company")
-
-		allocation = make_allocation_record(
-			employee=inactive_emp,
-			from_date=self.year_start,
-			to_date=self.year_end,
-			leaves=5,
-		)
-
-		# set employee as inactive
-		frappe.db.set_value("Employee", inactive_emp, "status", "Inactive")
-
-		filters = frappe._dict(
-			{
-				"from_date": allocation.from_date,
-				"to_date": allocation.to_date,
-				"employee": inactive_emp,
-				"employee_status": "Active",
-			}
-		)
-		report = execute(filters)
-		self.assertEqual(len(report[1]), 0)
-
-		filters = frappe._dict(
-			{
-				"from_date": allocation.from_date,
-				"to_date": allocation.to_date,
-				"employee": inactive_emp,
-				"employee_status": "Inactive",
-			}
-		)
-		report = execute(filters)
-		self.assertEqual(len(report[1]), 1)
diff --git a/erpnext/hr/report/employee_leave_balance_summary/__init__.py b/erpnext/hr/report/employee_leave_balance_summary/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/report/employee_leave_balance_summary/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.js b/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.js
deleted file mode 100644
index 26dd782..0000000
--- a/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.js
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-/* eslint-disable */
-
-frappe.query_reports['Employee Leave Balance Summary'] = {
-	filters: [
-		{
-			fieldname:'date',
-			label: __('Date'),
-			fieldtype: 'Date',
-			reqd: 1,
-			default: frappe.datetime.now_date()
-		},
-		{
-			fieldname:'company',
-			label: __('Company'),
-			fieldtype: 'Link',
-			options: 'Company',
-			reqd: 1,
-			default: frappe.defaults.get_user_default('Company')
-		},
-		{
-			fieldname:'employee',
-			label: __('Employee'),
-			fieldtype: 'Link',
-			options: 'Employee',
-		},
-		{
-			fieldname:'department',
-			label: __('Department'),
-			fieldtype: 'Link',
-			options: 'Department',
-		},
-		{
-			fieldname: "employee_status",
-			label: __("Employee Status"),
-			fieldtype: "Select",
-			options: [
-				"",
-				{ "value": "Active", "label": __("Active") },
-				{ "value": "Inactive", "label": __("Inactive") },
-				{ "value": "Suspended", "label": __("Suspended") },
-				{ "value": "Left", "label": __("Left") },
-			],
-			default: "Active",
-		}
-	]
-};
diff --git a/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.json b/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.json
deleted file mode 100644
index 1c22ece..0000000
--- a/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "add_total_row": 0,
- "creation": "2019-09-05 11:18:06.209397",
- "disable_prepared_report": 0,
- "disabled": 0,
- "docstatus": 0,
- "doctype": "Report",
- "idx": 0,
- "is_standard": "Yes",
- "modified": "2019-09-06 11:18:06.209397",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Employee Leave Balance Summary",
- "owner": "Administrator",
- "prepared_report": 0,
- "ref_doctype": "Employee",
- "report_name": "Employee Leave Balance Summary",
- "report_type": "Script Report",
- "roles": [
-  {
-   "role": "Employee"
-  },
-  {
-   "role": "HR Manager"
-  },
-  {
-   "role": "HR User"
-  },
-  {
-   "role": "Leave Approver"
-  }
- ]
-}
\ No newline at end of file
diff --git a/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.py b/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.py
deleted file mode 100644
index 82878db..0000000
--- a/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.py
+++ /dev/null
@@ -1,85 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-
-import frappe
-from frappe import _
-
-from erpnext.hr.doctype.leave_application.leave_application import get_leave_details
-from erpnext.hr.report.employee_leave_balance.employee_leave_balance import (
-	get_department_leave_approver_map,
-)
-
-
-def execute(filters=None):
-	leave_types = frappe.db.sql_list("select name from `tabLeave Type` order by name asc")
-
-	columns = get_columns(leave_types)
-	data = get_data(filters, leave_types)
-
-	return columns, data
-
-
-def get_columns(leave_types):
-	columns = [
-		_("Employee") + ":Link.Employee:150",
-		_("Employee Name") + "::200",
-		_("Department") + "::150",
-	]
-
-	for leave_type in leave_types:
-		columns.append(_(leave_type) + ":Float:160")
-
-	return columns
-
-
-def get_conditions(filters):
-	conditions = {
-		"company": filters.company,
-	}
-	if filters.get("employee_status"):
-		conditions.update({"status": filters.get("employee_status")})
-	if filters.get("department"):
-		conditions.update({"department": filters.get("department")})
-	if filters.get("employee"):
-		conditions.update({"employee": filters.get("employee")})
-
-	return conditions
-
-
-def get_data(filters, leave_types):
-	user = frappe.session.user
-	conditions = get_conditions(filters)
-
-	active_employees = frappe.get_list(
-		"Employee",
-		filters=conditions,
-		fields=["name", "employee_name", "department", "user_id", "leave_approver"],
-	)
-
-	department_approver_map = get_department_leave_approver_map(filters.get("department"))
-
-	data = []
-	for employee in active_employees:
-		leave_approvers = department_approver_map.get(employee.department_name, [])
-		if employee.leave_approver:
-			leave_approvers.append(employee.leave_approver)
-
-		if (
-			(len(leave_approvers) and user in leave_approvers)
-			or (user in ["Administrator", employee.user_id])
-			or ("HR Manager" in frappe.get_roles(user))
-		):
-			row = [employee.name, employee.employee_name, employee.department]
-			available_leave = get_leave_details(employee.name, filters.date)
-			for leave_type in leave_types:
-				remaining = 0
-				if leave_type in available_leave["leave_allocation"]:
-					# opening balance
-					remaining = available_leave["leave_allocation"][leave_type]["remaining_leaves"]
-
-				row += [remaining]
-
-			data.append(row)
-
-	return data
diff --git a/erpnext/hr/report/employee_leave_balance_summary/test_employee_leave_balance_summary.py b/erpnext/hr/report/employee_leave_balance_summary/test_employee_leave_balance_summary.py
deleted file mode 100644
index 2fd74b7..0000000
--- a/erpnext/hr/report/employee_leave_balance_summary/test_employee_leave_balance_summary.py
+++ /dev/null
@@ -1,181 +0,0 @@
-# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-
-import unittest
-
-import frappe
-from frappe.utils import add_days, flt, get_year_ending, get_year_start, getdate
-
-from erpnext.hr.doctype.employee.test_employee import make_employee
-from erpnext.hr.doctype.holiday_list.test_holiday_list import set_holiday_list
-from erpnext.hr.doctype.leave_application.test_leave_application import (
-	get_first_sunday,
-	make_allocation_record,
-)
-from erpnext.hr.doctype.leave_ledger_entry.leave_ledger_entry import process_expired_allocation
-from erpnext.hr.report.employee_leave_balance_summary.employee_leave_balance_summary import execute
-from erpnext.payroll.doctype.salary_slip.test_salary_slip import (
-	make_holiday_list,
-	make_leave_application,
-)
-
-test_records = frappe.get_test_records("Leave Type")
-
-
-class TestEmployeeLeaveBalance(unittest.TestCase):
-	def setUp(self):
-		for dt in [
-			"Leave Application",
-			"Leave Allocation",
-			"Salary Slip",
-			"Leave Ledger Entry",
-			"Leave Type",
-		]:
-			frappe.db.delete(dt)
-
-		frappe.set_user("Administrator")
-
-		self.employee_id = make_employee("test_emp_leave_balance@example.com", company="_Test Company")
-
-		self.date = getdate()
-		self.year_start = getdate(get_year_start(self.date))
-		self.year_end = getdate(get_year_ending(self.date))
-
-		self.holiday_list = make_holiday_list(
-			"_Test Emp Balance Holiday List", self.year_start, self.year_end
-		)
-
-	def tearDown(self):
-		frappe.db.rollback()
-
-	@set_holiday_list("_Test Emp Balance Holiday List", "_Test Company")
-	def test_employee_leave_balance_summary(self):
-		frappe.get_doc(test_records[0]).insert()
-
-		# 5 leaves
-		allocation1 = make_allocation_record(
-			employee=self.employee_id,
-			from_date=add_days(self.year_start, -11),
-			to_date=add_days(self.year_start, -1),
-			leaves=5,
-		)
-		# 30 leaves
-		allocation2 = make_allocation_record(
-			employee=self.employee_id, from_date=self.year_start, to_date=self.year_end
-		)
-
-		# 2 days leave within the first allocation
-		leave_application1 = make_leave_application(
-			self.employee_id,
-			add_days(self.year_start, -11),
-			add_days(self.year_start, -10),
-			"_Test Leave Type",
-		)
-		leave_application1.reload()
-
-		# expires 3 leaves
-		process_expired_allocation()
-
-		# 4 days leave within the second allocation
-		first_sunday = get_first_sunday(self.holiday_list, for_date=self.year_start)
-		leave_application2 = make_leave_application(
-			self.employee_id, add_days(first_sunday, 1), add_days(first_sunday, 4), "_Test Leave Type"
-		)
-		leave_application2.reload()
-
-		filters = frappe._dict(
-			{
-				"date": add_days(leave_application2.to_date, 1),
-				"company": "_Test Company",
-				"employee": self.employee_id,
-			}
-		)
-
-		report = execute(filters)
-
-		expected_data = [
-			[
-				self.employee_id,
-				"test_emp_leave_balance@example.com",
-				frappe.db.get_value("Employee", self.employee_id, "department"),
-				flt(
-					allocation1.new_leaves_allocated  # allocated = 5
-					+ allocation2.new_leaves_allocated  # allocated = 30
-					- leave_application1.total_leave_days  # leaves taken in the 1st alloc = 2
-					- (
-						allocation1.new_leaves_allocated - leave_application1.total_leave_days
-					)  # leaves expired from 1st alloc = 3
-					- leave_application2.total_leave_days  # leaves taken in the 2nd alloc = 4
-				),
-			]
-		]
-
-		self.assertEqual(report[1], expected_data)
-
-	@set_holiday_list("_Test Emp Balance Holiday List", "_Test Company")
-	def test_get_leave_balance_near_alloc_expiry(self):
-		frappe.get_doc(test_records[0]).insert()
-
-		# 30 leaves allocated
-		allocation = make_allocation_record(
-			employee=self.employee_id, from_date=self.year_start, to_date=self.year_end
-		)
-		# 4 days leave application in the first allocation
-		first_sunday = get_first_sunday(self.holiday_list, for_date=self.year_start)
-		leave_application = make_leave_application(
-			self.employee_id, add_days(first_sunday, 1), add_days(first_sunday, 4), "_Test Leave Type"
-		)
-		leave_application.reload()
-
-		# Leave balance should show actual balance, and not "consumption balance as per remaining days", near alloc end date
-		# eg: 3 days left for alloc to end, leave balance should still be 26 and not 3
-		filters = frappe._dict(
-			{"date": add_days(self.year_end, -3), "company": "_Test Company", "employee": self.employee_id}
-		)
-		report = execute(filters)
-
-		expected_data = [
-			[
-				self.employee_id,
-				"test_emp_leave_balance@example.com",
-				frappe.db.get_value("Employee", self.employee_id, "department"),
-				flt(allocation.new_leaves_allocated - leave_application.total_leave_days),
-			]
-		]
-
-		self.assertEqual(report[1], expected_data)
-
-	@set_holiday_list("_Test Emp Balance Holiday List", "_Test Company")
-	def test_employee_status_filter(self):
-		frappe.get_doc(test_records[0]).insert()
-
-		inactive_emp = make_employee("test_emp_status@example.com", company="_Test Company")
-		allocation = make_allocation_record(
-			employee=inactive_emp, from_date=self.year_start, to_date=self.year_end
-		)
-
-		# set employee as inactive
-		frappe.db.set_value("Employee", inactive_emp, "status", "Inactive")
-
-		filters = frappe._dict(
-			{
-				"date": allocation.from_date,
-				"company": "_Test Company",
-				"employee": inactive_emp,
-				"employee_status": "Active",
-			}
-		)
-		report = execute(filters)
-		self.assertEqual(len(report[1]), 0)
-
-		filters = frappe._dict(
-			{
-				"date": allocation.from_date,
-				"company": "_Test Company",
-				"employee": inactive_emp,
-				"employee_status": "Inactive",
-			}
-		)
-		report = execute(filters)
-		self.assertEqual(len(report[1]), 1)
diff --git a/erpnext/hr/report/employees_working_on_a_holiday/__init__.py b/erpnext/hr/report/employees_working_on_a_holiday/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/report/employees_working_on_a_holiday/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/report/employees_working_on_a_holiday/employees_working_on_a_holiday.js b/erpnext/hr/report/employees_working_on_a_holiday/employees_working_on_a_holiday.js
deleted file mode 100644
index 97108e8..0000000
--- a/erpnext/hr/report/employees_working_on_a_holiday/employees_working_on_a_holiday.js
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.query_reports["Employees working on a holiday"] = {
-	"filters": [
-		{
-			"fieldname":"from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"reqd": 1,
-			"default": frappe.datetime.year_start()
-		},
-		{
-			"fieldname":"to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"reqd": 1,
-			"default": frappe.datetime.year_end()
-		},
-		{
-			"fieldname":"holiday_list",
-			"label": __("Holiday List"),
-			"fieldtype": "Link",
-			"options": "Holiday List"
-		}
-	]
-}
diff --git a/erpnext/hr/report/employees_working_on_a_holiday/employees_working_on_a_holiday.json b/erpnext/hr/report/employees_working_on_a_holiday/employees_working_on_a_holiday.json
deleted file mode 100644
index 6c9f7ff..0000000
--- a/erpnext/hr/report/employees_working_on_a_holiday/employees_working_on_a_holiday.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "add_total_row": 0, 
- "apply_user_permissions": 1, 
- "creation": "2016-07-14 12:03:56.967739", 
- "disabled": 0, 
- "docstatus": 0, 
- "doctype": "Report", 
- "idx": 2, 
- "is_standard": "Yes", 
- "modified": "2017-02-24 20:05:17.833885", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Employees working on a holiday", 
- "owner": "Administrator", 
- "ref_doctype": "Attendance", 
- "report_name": "Employees working on a holiday", 
- "report_type": "Script Report", 
- "roles": [
-  {
-   "role": "System Manager"
-  }, 
-  {
-   "role": "HR User"
-  }, 
-  {
-   "role": "HR Manager"
-  }
- ]
-}
\ No newline at end of file
diff --git a/erpnext/hr/report/employees_working_on_a_holiday/employees_working_on_a_holiday.py b/erpnext/hr/report/employees_working_on_a_holiday/employees_working_on_a_holiday.py
deleted file mode 100644
index f13fabf..0000000
--- a/erpnext/hr/report/employees_working_on_a_holiday/employees_working_on_a_holiday.py
+++ /dev/null
@@ -1,70 +0,0 @@
-# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-
-
-def execute(filters=None):
-	if not filters:
-		filters = {}
-
-	columns = get_columns()
-	data = get_employees(filters)
-	return columns, data
-
-
-def get_columns():
-	return [
-		_("Employee") + ":Link/Employee:120",
-		_("Name") + ":Data:200",
-		_("Date") + ":Date:100",
-		_("Status") + ":Data:70",
-		_("Holiday") + ":Data:200",
-	]
-
-
-def get_employees(filters):
-	holiday_filter = [
-		["holiday_date", ">=", filters.from_date],
-		["holiday_date", "<=", filters.to_date],
-	]
-	if filters.holiday_list:
-		holiday_filter.append(["parent", "=", filters.holiday_list])
-
-	holidays = frappe.get_all(
-		"Holiday", fields=["holiday_date", "description"], filters=holiday_filter
-	)
-
-	holiday_names = {}
-	holidays_list = []
-
-	for holiday in holidays:
-		holidays_list.append(holiday.holiday_date)
-		holiday_names[holiday.holiday_date] = holiday.description
-
-	if holidays_list:
-		cond = " attendance_date in %(holidays_list)s"
-
-		if filters.holiday_list:
-			cond += (
-				""" and (employee in (select employee from tabEmployee where holiday_list = %(holidays)s))"""
-			)
-
-		employee_list = frappe.db.sql(
-			"""select
-				employee, employee_name, attendance_date, status
-			from tabAttendance
-			where %s"""
-			% cond.format(", ".join(["%s"] * len(holidays_list))),
-			{"holidays_list": holidays_list, "holidays": filters.holiday_list},
-			as_list=True,
-		)
-
-		for employee_data in employee_list:
-			employee_data.append(holiday_names[employee_data[2]])
-
-		return employee_list
-	else:
-		return []
diff --git a/erpnext/hr/report/monthly_attendance_sheet/__init__.py b/erpnext/hr/report/monthly_attendance_sheet/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/report/monthly_attendance_sheet/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.js b/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.js
deleted file mode 100644
index 6f4bbd5..0000000
--- a/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.js
+++ /dev/null
@@ -1,101 +0,0 @@
-// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-// License: GNU General Public License v3. See license.txt
-
-
-frappe.query_reports["Monthly Attendance Sheet"] = {
-	"filters": [
-		{
-			"fieldname": "month",
-			"label": __("Month"),
-			"fieldtype": "Select",
-			"reqd": 1 ,
-			"options": [
-				{ "value": 1, "label": __("Jan") },
-				{ "value": 2, "label": __("Feb") },
-				{ "value": 3, "label": __("Mar") },
-				{ "value": 4, "label": __("Apr") },
-				{ "value": 5, "label": __("May") },
-				{ "value": 6, "label": __("June") },
-				{ "value": 7, "label": __("July") },
-				{ "value": 8, "label": __("Aug") },
-				{ "value": 9, "label": __("Sep") },
-				{ "value": 10, "label": __("Oct") },
-				{ "value": 11, "label": __("Nov") },
-				{ "value": 12, "label": __("Dec") },
-			],
-			"default": frappe.datetime.str_to_obj(frappe.datetime.get_today()).getMonth() + 1
-		},
-		{
-			"fieldname":"year",
-			"label": __("Year"),
-			"fieldtype": "Select",
-			"reqd": 1
-		},
-		{
-			"fieldname":"employee",
-			"label": __("Employee"),
-			"fieldtype": "Link",
-			"options": "Employee",
-			get_query: () => {
-				var company = frappe.query_report.get_filter_value('company');
-				return {
-					filters: {
-						'company': company
-					}
-				};
-			}
-		},
-		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company"),
-			"reqd": 1
-		},
-		{
-			"fieldname":"group_by",
-			"label": __("Group By"),
-			"fieldtype": "Select",
-			"options": ["","Branch","Grade","Department","Designation"]
-		},
-		{
-			"fieldname":"summarized_view",
-			"label": __("Summarized View"),
-			"fieldtype": "Check",
-			"Default": 0,
-		}
-	],
-	onload: function() {
-		return  frappe.call({
-			method: "erpnext.hr.report.monthly_attendance_sheet.monthly_attendance_sheet.get_attendance_years",
-			callback: function(r) {
-				var year_filter = frappe.query_report.get_filter('year');
-				year_filter.df.options = r.message;
-				year_filter.df.default = r.message.split("\n")[0];
-				year_filter.refresh();
-				year_filter.set_input(year_filter.df.default);
-			}
-		});
-	},
-	formatter: function(value, row, column, data, default_formatter) {
-		value = default_formatter(value, row, column, data);
-		const summarized_view = frappe.query_report.get_filter_value('summarized_view');
-		const group_by = frappe.query_report.get_filter_value('group_by');
-
-		if (!summarized_view) {
-			if ((group_by && column.colIndex > 3) || (!group_by && column.colIndex > 2)) {
-				if (value == 'P' || value == 'WFH')
-					value = "<span style='color:green'>" + value + "</span>";
-				else if (value == 'A')
-					value = "<span style='color:red'>" + value + "</span>";
-				else if (value == 'HD')
-					value = "<span style='color:orange'>" + value + "</span>";
-				else if (value == 'L')
-					value = "<span style='color:#318AD8'>" + value + "</span>";
-			}
-		}
-
-		return value;
-	}
-}
diff --git a/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.json b/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.json
deleted file mode 100644
index 4daab81..0000000
--- a/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "add_total_row": 0, 
- "apply_user_permissions": 1, 
- "creation": "2013-05-13 14:04:03", 
- "disabled": 0, 
- "docstatus": 0, 
- "doctype": "Report", 
- "idx": 3, 
- "is_standard": "Yes", 
- "modified": "2017-02-24 20:16:50.550242", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Monthly Attendance Sheet", 
- "owner": "Administrator", 
- "ref_doctype": "Attendance", 
- "report_name": "Monthly Attendance Sheet", 
- "report_type": "Script Report", 
- "roles": [
-  {
-   "role": "System Manager"
-  }, 
-  {
-   "role": "HR User"
-  }, 
-  {
-   "role": "HR Manager"
-  }
- ]
-}
\ No newline at end of file
diff --git a/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.py b/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.py
deleted file mode 100644
index efd2d38..0000000
--- a/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.py
+++ /dev/null
@@ -1,620 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-
-from calendar import monthrange
-from itertools import groupby
-from typing import Dict, List, Optional, Tuple
-
-import frappe
-from frappe import _
-from frappe.query_builder.functions import Count, Extract, Sum
-from frappe.utils import cint, cstr, getdate
-
-Filters = frappe._dict
-
-status_map = {
-	"Present": "P",
-	"Absent": "A",
-	"Half Day": "HD",
-	"Work From Home": "WFH",
-	"On Leave": "L",
-	"Holiday": "H",
-	"Weekly Off": "WO",
-}
-
-day_abbr = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
-
-
-def execute(filters: Optional[Filters] = None) -> Tuple:
-	filters = frappe._dict(filters or {})
-
-	if not (filters.month and filters.year):
-		frappe.throw(_("Please select month and year."))
-
-	attendance_map = get_attendance_map(filters)
-	if not attendance_map:
-		frappe.msgprint(_("No attendance records found."), alert=True, indicator="orange")
-		return [], [], None, None
-
-	columns = get_columns(filters)
-	data = get_data(filters, attendance_map)
-
-	if not data:
-		frappe.msgprint(
-			_("No attendance records found for this criteria."), alert=True, indicator="orange"
-		)
-		return columns, [], None, None
-
-	message = get_message() if not filters.summarized_view else ""
-	chart = get_chart_data(attendance_map, filters)
-
-	return columns, data, message, chart
-
-
-def get_message() -> str:
-	message = ""
-	colors = ["green", "red", "orange", "green", "#318AD8", "", ""]
-
-	count = 0
-	for status, abbr in status_map.items():
-		message += f"""
-			<span style='border-left: 2px solid {colors[count]}; padding-right: 12px; padding-left: 5px; margin-right: 3px;'>
-				{status} - {abbr}
-			</span>
-		"""
-		count += 1
-
-	return message
-
-
-def get_columns(filters: Filters) -> List[Dict]:
-	columns = []
-
-	if filters.group_by:
-		columns.append(
-			{
-				"label": _(filters.group_by),
-				"fieldname": frappe.scrub(filters.group_by),
-				"fieldtype": "Link",
-				"options": "Branch",
-				"width": 120,
-			}
-		)
-
-	columns.extend(
-		[
-			{
-				"label": _("Employee"),
-				"fieldname": "employee",
-				"fieldtype": "Link",
-				"options": "Employee",
-				"width": 135,
-			},
-			{"label": _("Employee Name"), "fieldname": "employee_name", "fieldtype": "Data", "width": 120},
-		]
-	)
-
-	if filters.summarized_view:
-		columns.extend(
-			[
-				{
-					"label": _("Total Present"),
-					"fieldname": "total_present",
-					"fieldtype": "Float",
-					"width": 110,
-				},
-				{"label": _("Total Leaves"), "fieldname": "total_leaves", "fieldtype": "Float", "width": 110},
-				{"label": _("Total Absent"), "fieldname": "total_absent", "fieldtype": "Float", "width": 110},
-				{
-					"label": _("Total Holidays"),
-					"fieldname": "total_holidays",
-					"fieldtype": "Float",
-					"width": 120,
-				},
-				{
-					"label": _("Unmarked Days"),
-					"fieldname": "unmarked_days",
-					"fieldtype": "Float",
-					"width": 130,
-				},
-			]
-		)
-		columns.extend(get_columns_for_leave_types())
-		columns.extend(
-			[
-				{
-					"label": _("Total Late Entries"),
-					"fieldname": "total_late_entries",
-					"fieldtype": "Float",
-					"width": 140,
-				},
-				{
-					"label": _("Total Early Exits"),
-					"fieldname": "total_early_exits",
-					"fieldtype": "Float",
-					"width": 140,
-				},
-			]
-		)
-	else:
-		columns.append({"label": _("Shift"), "fieldname": "shift", "fieldtype": "Data", "width": 120})
-		columns.extend(get_columns_for_days(filters))
-
-	return columns
-
-
-def get_columns_for_leave_types() -> List[Dict]:
-	leave_types = frappe.db.get_all("Leave Type", pluck="name")
-	types = []
-	for entry in leave_types:
-		types.append(
-			{"label": entry, "fieldname": frappe.scrub(entry), "fieldtype": "Float", "width": 120}
-		)
-
-	return types
-
-
-def get_columns_for_days(filters: Filters) -> List[Dict]:
-	total_days = get_total_days_in_month(filters)
-	days = []
-
-	for day in range(1, total_days + 1):
-		# forms the dates from selected year and month from filters
-		date = "{}-{}-{}".format(cstr(filters.year), cstr(filters.month), cstr(day))
-		# gets abbr from weekday number
-		weekday = day_abbr[getdate(date).weekday()]
-		# sets days as 1 Mon, 2 Tue, 3 Wed
-		label = "{} {}".format(cstr(day), weekday)
-		days.append({"label": label, "fieldtype": "Data", "fieldname": day, "width": 65})
-
-	return days
-
-
-def get_total_days_in_month(filters: Filters) -> int:
-	return monthrange(cint(filters.year), cint(filters.month))[1]
-
-
-def get_data(filters: Filters, attendance_map: Dict) -> List[Dict]:
-	employee_details, group_by_param_values = get_employee_related_details(
-		filters.group_by, filters.company
-	)
-	holiday_map = get_holiday_map(filters)
-	data = []
-
-	if filters.group_by:
-		group_by_column = frappe.scrub(filters.group_by)
-
-		for value in group_by_param_values:
-			if not value:
-				continue
-
-			records = get_rows(employee_details[value], filters, holiday_map, attendance_map)
-
-			if records:
-				data.append({group_by_column: frappe.bold(value)})
-				data.extend(records)
-	else:
-		data = get_rows(employee_details, filters, holiday_map, attendance_map)
-
-	return data
-
-
-def get_attendance_map(filters: Filters) -> Dict:
-	"""Returns a dictionary of employee wise attendance map as per shifts for all the days of the month like
-	{
-	        'employee1': {
-	                'Morning Shift': {1: 'Present', 2: 'Absent', ...}
-	                'Evening Shift': {1: 'Absent', 2: 'Present', ...}
-	        },
-	        'employee2': {
-	                'Afternoon Shift': {1: 'Present', 2: 'Absent', ...}
-	                'Night Shift': {1: 'Absent', 2: 'Absent', ...}
-	        }
-	}
-	"""
-	Attendance = frappe.qb.DocType("Attendance")
-	query = (
-		frappe.qb.from_(Attendance)
-		.select(
-			Attendance.employee,
-			Extract("day", Attendance.attendance_date).as_("day_of_month"),
-			Attendance.status,
-			Attendance.shift,
-		)
-		.where(
-			(Attendance.docstatus == 1)
-			& (Attendance.company == filters.company)
-			& (Extract("month", Attendance.attendance_date) == filters.month)
-			& (Extract("year", Attendance.attendance_date) == filters.year)
-		)
-	)
-	if filters.employee:
-		query = query.where(Attendance.employee == filters.employee)
-	query = query.orderby(Attendance.employee, Attendance.attendance_date)
-
-	attendance_list = query.run(as_dict=1)
-	attendance_map = {}
-
-	for d in attendance_list:
-		attendance_map.setdefault(d.employee, frappe._dict()).setdefault(d.shift, frappe._dict())
-		attendance_map[d.employee][d.shift][d.day_of_month] = d.status
-
-	return attendance_map
-
-
-def get_employee_related_details(group_by: str, company: str) -> Tuple[Dict, List]:
-	"""Returns
-	1. nested dict for employee details
-	2. list of values for the group by filter
-	"""
-	Employee = frappe.qb.DocType("Employee")
-	query = (
-		frappe.qb.from_(Employee)
-		.select(
-			Employee.name,
-			Employee.employee_name,
-			Employee.designation,
-			Employee.grade,
-			Employee.department,
-			Employee.branch,
-			Employee.company,
-			Employee.holiday_list,
-		)
-		.where(Employee.company == company)
-	)
-
-	if group_by:
-		group_by = group_by.lower()
-		query = query.orderby(group_by)
-
-	employee_details = query.run(as_dict=True)
-
-	group_by_param_values = []
-	emp_map = {}
-
-	if group_by:
-		for parameter, employees in groupby(employee_details, key=lambda d: d[group_by]):
-			group_by_param_values.append(parameter)
-			emp_map.setdefault(parameter, frappe._dict())
-
-			for emp in employees:
-				emp_map[parameter][emp.name] = emp
-	else:
-		for emp in employee_details:
-			emp_map[emp.name] = emp
-
-	return emp_map, group_by_param_values
-
-
-def get_holiday_map(filters: Filters) -> Dict[str, List[Dict]]:
-	"""
-	Returns a dict of holidays falling in the filter month and year
-	with list name as key and list of holidays as values like
-	{
-	        'Holiday List 1': [
-	                {'day_of_month': '0' , 'weekly_off': 1},
-	                {'day_of_month': '1', 'weekly_off': 0}
-	        ],
-	        'Holiday List 2': [
-	                {'day_of_month': '0' , 'weekly_off': 1},
-	                {'day_of_month': '1', 'weekly_off': 0}
-	        ]
-	}
-	"""
-	# add default holiday list too
-	holiday_lists = frappe.db.get_all("Holiday List", pluck="name")
-	default_holiday_list = frappe.get_cached_value("Company", filters.company, "default_holiday_list")
-	holiday_lists.append(default_holiday_list)
-
-	holiday_map = frappe._dict()
-	Holiday = frappe.qb.DocType("Holiday")
-
-	for d in holiday_lists:
-		if not d:
-			continue
-
-		holidays = (
-			frappe.qb.from_(Holiday)
-			.select(Extract("day", Holiday.holiday_date).as_("day_of_month"), Holiday.weekly_off)
-			.where(
-				(Holiday.parent == d)
-				& (Extract("month", Holiday.holiday_date) == filters.month)
-				& (Extract("year", Holiday.holiday_date) == filters.year)
-			)
-		).run(as_dict=True)
-
-		holiday_map.setdefault(d, holidays)
-
-	return holiday_map
-
-
-def get_rows(
-	employee_details: Dict, filters: Filters, holiday_map: Dict, attendance_map: Dict
-) -> List[Dict]:
-	records = []
-	default_holiday_list = frappe.get_cached_value("Company", filters.company, "default_holiday_list")
-
-	for employee, details in employee_details.items():
-		emp_holiday_list = details.holiday_list or default_holiday_list
-		holidays = holiday_map.get(emp_holiday_list)
-
-		if filters.summarized_view:
-			attendance = get_attendance_status_for_summarized_view(employee, filters, holidays)
-			if not attendance:
-				continue
-
-			leave_summary = get_leave_summary(employee, filters)
-			entry_exits_summary = get_entry_exits_summary(employee, filters)
-
-			row = {"employee": employee, "employee_name": details.employee_name}
-			set_defaults_for_summarized_view(filters, row)
-			row.update(attendance)
-			row.update(leave_summary)
-			row.update(entry_exits_summary)
-
-			records.append(row)
-		else:
-			employee_attendance = attendance_map.get(employee)
-			if not employee_attendance:
-				continue
-
-			attendance_for_employee = get_attendance_status_for_detailed_view(
-				employee, filters, employee_attendance, holidays
-			)
-			# set employee details in the first row
-			attendance_for_employee[0].update(
-				{"employee": employee, "employee_name": details.employee_name}
-			)
-
-			records.extend(attendance_for_employee)
-
-	return records
-
-
-def set_defaults_for_summarized_view(filters, row):
-	for entry in get_columns(filters):
-		if entry.get("fieldtype") == "Float":
-			row[entry.get("fieldname")] = 0.0
-
-
-def get_attendance_status_for_summarized_view(
-	employee: str, filters: Filters, holidays: List
-) -> Dict:
-	"""Returns dict of attendance status for employee like
-	{'total_present': 1.5, 'total_leaves': 0.5, 'total_absent': 13.5, 'total_holidays': 8, 'unmarked_days': 5}
-	"""
-	summary, attendance_days = get_attendance_summary_and_days(employee, filters)
-	if not any(summary.values()):
-		return {}
-
-	total_days = get_total_days_in_month(filters)
-	total_holidays = total_unmarked_days = 0
-
-	for day in range(1, total_days + 1):
-		if day in attendance_days:
-			continue
-
-		status = get_holiday_status(day, holidays)
-		if status in ["Weekly Off", "Holiday"]:
-			total_holidays += 1
-		elif not status:
-			total_unmarked_days += 1
-
-	return {
-		"total_present": summary.total_present + summary.total_half_days,
-		"total_leaves": summary.total_leaves + summary.total_half_days,
-		"total_absent": summary.total_absent + summary.total_half_days,
-		"total_holidays": total_holidays,
-		"unmarked_days": total_unmarked_days,
-	}
-
-
-def get_attendance_summary_and_days(employee: str, filters: Filters) -> Tuple[Dict, List]:
-	Attendance = frappe.qb.DocType("Attendance")
-
-	present_case = (
-		frappe.qb.terms.Case()
-		.when(((Attendance.status == "Present") | (Attendance.status == "Work From Home")), 1)
-		.else_(0)
-	)
-	sum_present = Sum(present_case).as_("total_present")
-
-	absent_case = frappe.qb.terms.Case().when(Attendance.status == "Absent", 1).else_(0)
-	sum_absent = Sum(absent_case).as_("total_absent")
-
-	leave_case = frappe.qb.terms.Case().when(Attendance.status == "On Leave", 1).else_(0)
-	sum_leave = Sum(leave_case).as_("total_leaves")
-
-	half_day_case = frappe.qb.terms.Case().when(Attendance.status == "Half Day", 0.5).else_(0)
-	sum_half_day = Sum(half_day_case).as_("total_half_days")
-
-	summary = (
-		frappe.qb.from_(Attendance)
-		.select(
-			sum_present,
-			sum_absent,
-			sum_leave,
-			sum_half_day,
-		)
-		.where(
-			(Attendance.docstatus == 1)
-			& (Attendance.employee == employee)
-			& (Attendance.company == filters.company)
-			& (Extract("month", Attendance.attendance_date) == filters.month)
-			& (Extract("year", Attendance.attendance_date) == filters.year)
-		)
-	).run(as_dict=True)
-
-	days = (
-		frappe.qb.from_(Attendance)
-		.select(Extract("day", Attendance.attendance_date).as_("day_of_month"))
-		.distinct()
-		.where(
-			(Attendance.docstatus == 1)
-			& (Attendance.employee == employee)
-			& (Attendance.company == filters.company)
-			& (Extract("month", Attendance.attendance_date) == filters.month)
-			& (Extract("year", Attendance.attendance_date) == filters.year)
-		)
-	).run(pluck=True)
-
-	return summary[0], days
-
-
-def get_attendance_status_for_detailed_view(
-	employee: str, filters: Filters, employee_attendance: Dict, holidays: List
-) -> List[Dict]:
-	"""Returns list of shift-wise attendance status for employee
-	[
-	        {'shift': 'Morning Shift', 1: 'A', 2: 'P', 3: 'A'....},
-	        {'shift': 'Evening Shift', 1: 'P', 2: 'A', 3: 'P'....}
-	]
-	"""
-	total_days = get_total_days_in_month(filters)
-	attendance_values = []
-
-	for shift, status_dict in employee_attendance.items():
-		row = {"shift": shift}
-
-		for day in range(1, total_days + 1):
-			status = status_dict.get(day)
-			if status is None and holidays:
-				status = get_holiday_status(day, holidays)
-
-			abbr = status_map.get(status, "")
-			row[day] = abbr
-
-		attendance_values.append(row)
-
-	return attendance_values
-
-
-def get_holiday_status(day: int, holidays: List) -> str:
-	status = None
-	for holiday in holidays:
-		if day == holiday.get("day_of_month"):
-			if holiday.get("weekly_off"):
-				status = "Weekly Off"
-			else:
-				status = "Holiday"
-			break
-	return status
-
-
-def get_leave_summary(employee: str, filters: Filters) -> Dict[str, float]:
-	"""Returns a dict of leave type and corresponding leaves taken by employee like:
-	{'leave_without_pay': 1.0, 'sick_leave': 2.0}
-	"""
-	Attendance = frappe.qb.DocType("Attendance")
-	day_case = frappe.qb.terms.Case().when(Attendance.status == "Half Day", 0.5).else_(1)
-	sum_leave_days = Sum(day_case).as_("leave_days")
-
-	leave_details = (
-		frappe.qb.from_(Attendance)
-		.select(Attendance.leave_type, sum_leave_days)
-		.where(
-			(Attendance.employee == employee)
-			& (Attendance.docstatus == 1)
-			& (Attendance.company == filters.company)
-			& ((Attendance.leave_type.isnotnull()) | (Attendance.leave_type != ""))
-			& (Extract("month", Attendance.attendance_date) == filters.month)
-			& (Extract("year", Attendance.attendance_date) == filters.year)
-		)
-		.groupby(Attendance.leave_type)
-	).run(as_dict=True)
-
-	leaves = {}
-	for d in leave_details:
-		leave_type = frappe.scrub(d.leave_type)
-		leaves[leave_type] = d.leave_days
-
-	return leaves
-
-
-def get_entry_exits_summary(employee: str, filters: Filters) -> Dict[str, float]:
-	"""Returns total late entries and total early exits for employee like:
-	{'total_late_entries': 5, 'total_early_exits': 2}
-	"""
-	Attendance = frappe.qb.DocType("Attendance")
-
-	late_entry_case = frappe.qb.terms.Case().when(Attendance.late_entry == "1", "1")
-	count_late_entries = Count(late_entry_case).as_("total_late_entries")
-
-	early_exit_case = frappe.qb.terms.Case().when(Attendance.early_exit == "1", "1")
-	count_early_exits = Count(early_exit_case).as_("total_early_exits")
-
-	entry_exits = (
-		frappe.qb.from_(Attendance)
-		.select(count_late_entries, count_early_exits)
-		.where(
-			(Attendance.docstatus == 1)
-			& (Attendance.employee == employee)
-			& (Attendance.company == filters.company)
-			& (Extract("month", Attendance.attendance_date) == filters.month)
-			& (Extract("year", Attendance.attendance_date) == filters.year)
-		)
-	).run(as_dict=True)
-
-	return entry_exits[0]
-
-
-@frappe.whitelist()
-def get_attendance_years() -> str:
-	"""Returns all the years for which attendance records exist"""
-	Attendance = frappe.qb.DocType("Attendance")
-	year_list = (
-		frappe.qb.from_(Attendance)
-		.select(Extract("year", Attendance.attendance_date).as_("year"))
-		.distinct()
-	).run(as_dict=True)
-
-	if year_list:
-		year_list.sort(key=lambda d: d.year, reverse=True)
-	else:
-		year_list = [getdate().year]
-
-	return "\n".join(cstr(entry.year) for entry in year_list)
-
-
-def get_chart_data(attendance_map: Dict, filters: Filters) -> Dict:
-	days = get_columns_for_days(filters)
-	labels = []
-	absent = []
-	present = []
-	leave = []
-
-	for day in days:
-		labels.append(day["label"])
-		total_absent_on_day = total_leaves_on_day = total_present_on_day = 0
-
-		for employee, attendance_dict in attendance_map.items():
-			for shift, attendance in attendance_dict.items():
-				attendance_on_day = attendance.get(day["fieldname"])
-
-				if attendance_on_day == "Absent":
-					total_absent_on_day += 1
-				elif attendance_on_day in ["Present", "Work From Home"]:
-					total_present_on_day += 1
-				elif attendance_on_day == "Half Day":
-					total_present_on_day += 0.5
-					total_leaves_on_day += 0.5
-				elif attendance_on_day == "On Leave":
-					total_leaves_on_day += 1
-
-		absent.append(total_absent_on_day)
-		present.append(total_present_on_day)
-		leave.append(total_leaves_on_day)
-
-	return {
-		"data": {
-			"labels": labels,
-			"datasets": [
-				{"name": "Absent", "values": absent},
-				{"name": "Present", "values": present},
-				{"name": "Leave", "values": leave},
-			],
-		},
-		"type": "line",
-		"colors": ["red", "green", "blue"],
-	}
diff --git a/erpnext/hr/report/monthly_attendance_sheet/test_monthly_attendance_sheet.py b/erpnext/hr/report/monthly_attendance_sheet/test_monthly_attendance_sheet.py
deleted file mode 100644
index cde7dd3..0000000
--- a/erpnext/hr/report/monthly_attendance_sheet/test_monthly_attendance_sheet.py
+++ /dev/null
@@ -1,249 +0,0 @@
-import frappe
-from dateutil.relativedelta import relativedelta
-from frappe.tests.utils import FrappeTestCase
-from frappe.utils import get_year_ending, get_year_start, getdate, now_datetime
-
-from erpnext.hr.doctype.attendance.attendance import mark_attendance
-from erpnext.hr.doctype.employee.test_employee import make_employee
-from erpnext.hr.doctype.holiday_list.test_holiday_list import set_holiday_list
-from erpnext.hr.doctype.leave_application.test_leave_application import make_allocation_record
-from erpnext.hr.report.monthly_attendance_sheet.monthly_attendance_sheet import execute
-from erpnext.payroll.doctype.salary_slip.test_salary_slip import (
-	make_holiday_list,
-	make_leave_application,
-)
-
-test_dependencies = ["Shift Type"]
-
-
-class TestMonthlyAttendanceSheet(FrappeTestCase):
-	def setUp(self):
-		self.employee = make_employee("test_employee@example.com", company="_Test Company")
-		frappe.db.delete("Attendance")
-
-		date = getdate()
-		from_date = get_year_start(date)
-		to_date = get_year_ending(date)
-		make_holiday_list(from_date=from_date, to_date=to_date)
-
-	@set_holiday_list("Salary Slip Test Holiday List", "_Test Company")
-	def test_monthly_attendance_sheet_report(self):
-		now = now_datetime()
-		previous_month = now.month - 1
-		previous_month_first = now.replace(day=1).replace(month=previous_month).date()
-
-		company = frappe.db.get_value("Employee", self.employee, "company")
-
-		# mark different attendance status on first 3 days of previous month
-		mark_attendance(self.employee, previous_month_first, "Absent")
-		mark_attendance(self.employee, previous_month_first + relativedelta(days=1), "Present")
-		mark_attendance(self.employee, previous_month_first + relativedelta(days=2), "On Leave")
-
-		filters = frappe._dict(
-			{
-				"month": previous_month,
-				"year": now.year,
-				"company": company,
-			}
-		)
-		report = execute(filters=filters)
-
-		record = report[1][0]
-		datasets = report[3]["data"]["datasets"]
-		absent = datasets[0]["values"]
-		present = datasets[1]["values"]
-		leaves = datasets[2]["values"]
-
-		# ensure correct attendance is reflected on the report
-		self.assertEqual(self.employee, record.get("employee"))
-		self.assertEqual(absent[0], 1)
-		self.assertEqual(present[1], 1)
-		self.assertEqual(leaves[2], 1)
-
-	@set_holiday_list("Salary Slip Test Holiday List", "_Test Company")
-	def test_monthly_attendance_sheet_with_detailed_view(self):
-		now = now_datetime()
-		previous_month = now.month - 1
-		previous_month_first = now.replace(day=1).replace(month=previous_month).date()
-
-		company = frappe.db.get_value("Employee", self.employee, "company")
-
-		# attendance with shift
-		mark_attendance(self.employee, previous_month_first, "Absent", "Day Shift")
-		mark_attendance(
-			self.employee, previous_month_first + relativedelta(days=1), "Present", "Day Shift"
-		)
-
-		# attendance without shift
-		mark_attendance(self.employee, previous_month_first + relativedelta(days=2), "On Leave")
-		mark_attendance(self.employee, previous_month_first + relativedelta(days=3), "Present")
-
-		filters = frappe._dict(
-			{
-				"month": previous_month,
-				"year": now.year,
-				"company": company,
-			}
-		)
-		report = execute(filters=filters)
-
-		day_shift_row = report[1][0]
-		row_without_shift = report[1][1]
-
-		self.assertEqual(day_shift_row["shift"], "Day Shift")
-		self.assertEqual(day_shift_row[1], "A")  # absent on the 1st day of the month
-		self.assertEqual(day_shift_row[2], "P")  # present on the 2nd day
-
-		self.assertEqual(row_without_shift["shift"], None)
-		self.assertEqual(row_without_shift[3], "L")  # on leave on the 3rd day
-		self.assertEqual(row_without_shift[4], "P")  # present on the 4th day
-
-	@set_holiday_list("Salary Slip Test Holiday List", "_Test Company")
-	def test_monthly_attendance_sheet_with_summarized_view(self):
-		now = now_datetime()
-		previous_month = now.month - 1
-		previous_month_first = now.replace(day=1).replace(month=previous_month).date()
-
-		company = frappe.db.get_value("Employee", self.employee, "company")
-
-		# attendance with shift
-		mark_attendance(self.employee, previous_month_first, "Absent", "Day Shift")
-		mark_attendance(
-			self.employee, previous_month_first + relativedelta(days=1), "Present", "Day Shift"
-		)
-		mark_attendance(
-			self.employee, previous_month_first + relativedelta(days=2), "Half Day"
-		)  # half day
-
-		mark_attendance(
-			self.employee, previous_month_first + relativedelta(days=3), "Present"
-		)  # attendance without shift
-		mark_attendance(
-			self.employee, previous_month_first + relativedelta(days=4), "Present", late_entry=1
-		)  # late entry
-		mark_attendance(
-			self.employee, previous_month_first + relativedelta(days=5), "Present", early_exit=1
-		)  # early exit
-
-		leave_application = get_leave_application(self.employee)
-
-		filters = frappe._dict(
-			{"month": previous_month, "year": now.year, "company": company, "summarized_view": 1}
-		)
-		report = execute(filters=filters)
-
-		row = report[1][0]
-		self.assertEqual(row["employee"], self.employee)
-
-		# 4 present + half day absent 0.5
-		self.assertEqual(row["total_present"], 4.5)
-		# 1 present + half day absent 0.5
-		self.assertEqual(row["total_absent"], 1.5)
-		# leave days + half day leave 0.5
-		self.assertEqual(row["total_leaves"], leave_application.total_leave_days + 0.5)
-
-		self.assertEqual(row["_test_leave_type"], leave_application.total_leave_days)
-		self.assertEqual(row["total_late_entries"], 1)
-		self.assertEqual(row["total_early_exits"], 1)
-
-	@set_holiday_list("Salary Slip Test Holiday List", "_Test Company")
-	def test_attendance_with_group_by_filter(self):
-		now = now_datetime()
-		previous_month = now.month - 1
-		previous_month_first = now.replace(day=1).replace(month=previous_month).date()
-
-		company = frappe.db.get_value("Employee", self.employee, "company")
-
-		# attendance with shift
-		mark_attendance(self.employee, previous_month_first, "Absent", "Day Shift")
-		mark_attendance(
-			self.employee, previous_month_first + relativedelta(days=1), "Present", "Day Shift"
-		)
-
-		# attendance without shift
-		mark_attendance(self.employee, previous_month_first + relativedelta(days=2), "On Leave")
-		mark_attendance(self.employee, previous_month_first + relativedelta(days=3), "Present")
-
-		filters = frappe._dict(
-			{"month": previous_month, "year": now.year, "company": company, "group_by": "Department"}
-		)
-		report = execute(filters=filters)
-
-		department = frappe.db.get_value("Employee", self.employee, "department")
-		department_row = report[1][0]
-		self.assertIn(department, department_row["department"])
-
-		day_shift_row = report[1][1]
-		row_without_shift = report[1][2]
-
-		self.assertEqual(day_shift_row["shift"], "Day Shift")
-		self.assertEqual(day_shift_row[1], "A")  # absent on the 1st day of the month
-		self.assertEqual(day_shift_row[2], "P")  # present on the 2nd day
-
-		self.assertEqual(row_without_shift["shift"], None)
-		self.assertEqual(row_without_shift[3], "L")  # on leave on the 3rd day
-		self.assertEqual(row_without_shift[4], "P")  # present on the 4th day
-
-	def test_attendance_with_employee_filter(self):
-		now = now_datetime()
-		previous_month = now.month - 1
-		previous_month_first = now.replace(day=1).replace(month=previous_month).date()
-
-		company = frappe.db.get_value("Employee", self.employee, "company")
-
-		# mark different attendance status on first 3 days of previous month
-		mark_attendance(self.employee, previous_month_first, "Absent")
-		mark_attendance(self.employee, previous_month_first + relativedelta(days=1), "Present")
-		mark_attendance(self.employee, previous_month_first + relativedelta(days=2), "On Leave")
-
-		filters = frappe._dict(
-			{"month": previous_month, "year": now.year, "company": company, "employee": self.employee}
-		)
-		report = execute(filters=filters)
-
-		record = report[1][0]
-		datasets = report[3]["data"]["datasets"]
-		absent = datasets[0]["values"]
-		present = datasets[1]["values"]
-		leaves = datasets[2]["values"]
-
-		# ensure correct attendance is reflected on the report
-		self.assertEqual(self.employee, record.get("employee"))
-		self.assertEqual(absent[0], 1)
-		self.assertEqual(present[1], 1)
-		self.assertEqual(leaves[2], 1)
-
-	@set_holiday_list("Salary Slip Test Holiday List", "_Test Company")
-	def test_validations(self):
-		# validation error for filters without month and year
-		self.assertRaises(frappe.ValidationError, execute_report_with_invalid_filters)
-
-		# execute report without attendance record
-		now = now_datetime()
-		previous_month = now.month - 1
-
-		company = frappe.db.get_value("Employee", self.employee, "company")
-		filters = frappe._dict(
-			{"month": previous_month, "year": now.year, "company": company, "group_by": "Department"}
-		)
-		report = execute(filters=filters)
-		self.assertEqual(report, ([], [], None, None))
-
-
-def get_leave_application(employee):
-	now = now_datetime()
-	previous_month = now.month - 1
-
-	date = getdate()
-	year_start = getdate(get_year_start(date))
-	year_end = getdate(get_year_ending(date))
-	make_allocation_record(employee=employee, from_date=year_start, to_date=year_end)
-
-	from_date = now.replace(day=7).replace(month=previous_month).date()
-	to_date = now.replace(day=8).replace(month=previous_month).date()
-	return make_leave_application(employee, from_date, to_date, "_Test Leave Type")
-
-
-def execute_report_with_invalid_filters():
-	filters = frappe._dict({"company": "_Test Company", "group_by": "Department"})
-	execute(filters=filters)
diff --git a/erpnext/hr/report/recruitment_analytics/__init__.py b/erpnext/hr/report/recruitment_analytics/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/report/recruitment_analytics/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/report/recruitment_analytics/recruitment_analytics.js b/erpnext/hr/report/recruitment_analytics/recruitment_analytics.js
deleted file mode 100644
index 51dc7ff..0000000
--- a/erpnext/hr/report/recruitment_analytics/recruitment_analytics.js
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-/* eslint-disable */
-
-frappe.query_reports["Recruitment Analytics"] = {
-	"filters": [
-		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company"),
-			"reqd": 1
-		},
-		{
-			"fieldname":"on_date",
-			"label": __("On Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.now_date(),
-			"reqd": 1,
-		},
-	]
-};
diff --git a/erpnext/hr/report/recruitment_analytics/recruitment_analytics.json b/erpnext/hr/report/recruitment_analytics/recruitment_analytics.json
deleted file mode 100644
index 30a8e17..0000000
--- a/erpnext/hr/report/recruitment_analytics/recruitment_analytics.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "add_total_row": 0,
- "creation": "2020-05-14 16:28:45.743869",
- "disable_prepared_report": 0,
- "disabled": 0,
- "docstatus": 0,
- "doctype": "Report",
- "idx": 0,
- "is_standard": "Yes",
- "modified": "2020-05-14 16:28:45.743869",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Recruitment Analytics",
- "owner": "Administrator",
- "prepared_report": 0,
- "ref_doctype": "Staffing Plan",
- "report_name": "Recruitment Analytics",
- "report_type": "Script Report",
- "roles": [
-  {
-   "role": "HR Manager"
-  },
-  {
-   "role": "HR User"
-  }
- ]
-}
\ No newline at end of file
diff --git a/erpnext/hr/report/recruitment_analytics/recruitment_analytics.py b/erpnext/hr/report/recruitment_analytics/recruitment_analytics.py
deleted file mode 100644
index b6caf40..0000000
--- a/erpnext/hr/report/recruitment_analytics/recruitment_analytics.py
+++ /dev/null
@@ -1,198 +0,0 @@
-# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-
-
-def execute(filters=None):
-
-	if not filters:
-		filters = {}
-	filters = frappe._dict(filters)
-
-	columns = get_columns()
-
-	data = get_data(filters)
-
-	return columns, data
-
-
-def get_columns():
-	return [
-		{
-			"label": _("Staffing Plan"),
-			"fieldtype": "Link",
-			"fieldname": "staffing_plan",
-			"options": "Staffing Plan",
-			"width": 150,
-		},
-		{
-			"label": _("Job Opening"),
-			"fieldtype": "Link",
-			"fieldname": "job_opening",
-			"options": "Job Opening",
-			"width": 105,
-		},
-		{
-			"label": _("Job Applicant"),
-			"fieldtype": "Link",
-			"fieldname": "job_applicant",
-			"options": "Job Applicant",
-			"width": 150,
-		},
-		{"label": _("Applicant name"), "fieldtype": "data", "fieldname": "applicant_name", "width": 130},
-		{
-			"label": _("Application Status"),
-			"fieldtype": "Data",
-			"fieldname": "application_status",
-			"width": 150,
-		},
-		{
-			"label": _("Job Offer"),
-			"fieldtype": "Link",
-			"fieldname": "job_offer",
-			"options": "job Offer",
-			"width": 150,
-		},
-		{"label": _("Designation"), "fieldtype": "Data", "fieldname": "designation", "width": 100},
-		{"label": _("Offer Date"), "fieldtype": "date", "fieldname": "offer_date", "width": 100},
-		{
-			"label": _("Job Offer status"),
-			"fieldtype": "Data",
-			"fieldname": "job_offer_status",
-			"width": 150,
-		},
-	]
-
-
-def get_data(filters):
-	data = []
-	staffing_plan_details = get_staffing_plan(filters)
-	staffing_plan_list = list(set([details["name"] for details in staffing_plan_details]))
-	sp_jo_map, jo_list = get_job_opening(staffing_plan_list)
-	jo_ja_map, ja_list = get_job_applicant(jo_list)
-	ja_joff_map = get_job_offer(ja_list)
-
-	for sp in sp_jo_map.keys():
-		parent_row = get_parent_row(sp_jo_map, sp, jo_ja_map, ja_joff_map)
-		data += parent_row
-
-	return data
-
-
-def get_parent_row(sp_jo_map, sp, jo_ja_map, ja_joff_map):
-	data = []
-	if sp in sp_jo_map.keys():
-		for jo in sp_jo_map[sp]:
-			row = {
-				"staffing_plan": sp,
-				"job_opening": jo["name"],
-			}
-			data.append(row)
-			child_row = get_child_row(jo["name"], jo_ja_map, ja_joff_map)
-			data += child_row
-	return data
-
-
-def get_child_row(jo, jo_ja_map, ja_joff_map):
-	data = []
-	if jo in jo_ja_map.keys():
-		for ja in jo_ja_map[jo]:
-			row = {
-				"indent": 1,
-				"job_applicant": ja.name,
-				"applicant_name": ja.applicant_name,
-				"application_status": ja.status,
-			}
-			if ja.name in ja_joff_map.keys():
-				jo_detail = ja_joff_map[ja.name][0]
-				row["job_offer"] = jo_detail.name
-				row["job_offer_status"] = jo_detail.status
-				row["offer_date"] = jo_detail.offer_date.strftime("%d-%m-%Y")
-				row["designation"] = jo_detail.designation
-
-			data.append(row)
-	return data
-
-
-def get_staffing_plan(filters):
-
-	staffing_plan = frappe.db.sql(
-		"""
-	select
-		sp.name, sp.department, spd.designation, spd.vacancies, spd.current_count, spd.parent, sp.to_date
-	from
-		`tabStaffing Plan Detail` spd , `tabStaffing Plan` sp
-	where
-			spd.parent = sp.name
-		And
-			sp.to_date > '{0}'
-		""".format(
-			filters.on_date
-		),
-		as_dict=1,
-	)
-
-	return staffing_plan
-
-
-def get_job_opening(sp_list):
-
-	job_openings = frappe.get_all(
-		"Job Opening", filters=[["staffing_plan", "IN", sp_list]], fields=["name", "staffing_plan"]
-	)
-
-	sp_jo_map = {}
-	jo_list = []
-
-	for openings in job_openings:
-		if openings.staffing_plan not in sp_jo_map.keys():
-			sp_jo_map[openings.staffing_plan] = [openings]
-		else:
-			sp_jo_map[openings.staffing_plan].append(openings)
-
-		jo_list.append(openings.name)
-
-	return sp_jo_map, jo_list
-
-
-def get_job_applicant(jo_list):
-
-	jo_ja_map = {}
-	ja_list = []
-
-	applicants = frappe.get_all(
-		"Job Applicant",
-		filters=[["job_title", "IN", jo_list]],
-		fields=["name", "job_title", "applicant_name", "status"],
-	)
-
-	for applicant in applicants:
-		if applicant.job_title not in jo_ja_map.keys():
-			jo_ja_map[applicant.job_title] = [applicant]
-		else:
-			jo_ja_map[applicant.job_title].append(applicant)
-
-		ja_list.append(applicant.name)
-
-	return jo_ja_map, ja_list
-
-
-def get_job_offer(ja_list):
-	ja_joff_map = {}
-
-	offers = frappe.get_all(
-		"Job Offer",
-		filters=[["job_applicant", "IN", ja_list]],
-		fields=["name", "job_applicant", "status", "offer_date", "designation"],
-	)
-
-	for offer in offers:
-		if offer.job_applicant not in ja_joff_map.keys():
-			ja_joff_map[offer.job_applicant] = [offer]
-		else:
-			ja_joff_map[offer.job_applicant].append(offer)
-
-	return ja_joff_map
diff --git a/erpnext/hr/report/vehicle_expenses/__init__.py b/erpnext/hr/report/vehicle_expenses/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/report/vehicle_expenses/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/report/vehicle_expenses/test_vehicle_expenses.py b/erpnext/hr/report/vehicle_expenses/test_vehicle_expenses.py
deleted file mode 100644
index da6dace..0000000
--- a/erpnext/hr/report/vehicle_expenses/test_vehicle_expenses.py
+++ /dev/null
@@ -1,77 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-
-import unittest
-
-import frappe
-from frappe.utils import getdate
-
-from erpnext.accounts.utils import get_fiscal_year
-from erpnext.hr.doctype.employee.test_employee import make_employee
-from erpnext.hr.doctype.vehicle_log.test_vehicle_log import get_vehicle, make_vehicle_log
-from erpnext.hr.doctype.vehicle_log.vehicle_log import make_expense_claim
-from erpnext.hr.report.vehicle_expenses.vehicle_expenses import execute
-
-
-class TestVehicleExpenses(unittest.TestCase):
-	@classmethod
-	def setUpClass(self):
-		frappe.db.sql("delete from `tabVehicle Log`")
-
-		employee_id = frappe.db.sql(
-			'''select name from `tabEmployee` where name="testdriver@example.com"'''
-		)
-		self.employee_id = employee_id[0][0] if employee_id else None
-		if not self.employee_id:
-			self.employee_id = make_employee("testdriver@example.com", company="_Test Company")
-
-		self.license_plate = get_vehicle(self.employee_id)
-
-	def test_vehicle_expenses_based_on_fiscal_year(self):
-		vehicle_log = make_vehicle_log(self.license_plate, self.employee_id, with_services=True)
-		expense_claim = make_expense_claim(vehicle_log.name)
-
-		# Based on Fiscal Year
-		filters = {"filter_based_on": "Fiscal Year", "fiscal_year": get_fiscal_year(getdate())[0]}
-
-		report = execute(filters)
-
-		expected_data = [
-			{
-				"vehicle": self.license_plate,
-				"make": "Maruti",
-				"model": "PCM",
-				"location": "Mumbai",
-				"log_name": vehicle_log.name,
-				"odometer": 5010,
-				"date": getdate(),
-				"fuel_qty": 50.0,
-				"fuel_price": 500.0,
-				"fuel_expense": 25000.0,
-				"service_expense": 2000.0,
-				"employee": self.employee_id,
-			}
-		]
-
-		self.assertEqual(report[1], expected_data)
-
-		# Based on Date Range
-		fiscal_year = get_fiscal_year(getdate(), as_dict=True)
-		filters = {
-			"filter_based_on": "Date Range",
-			"from_date": fiscal_year.year_start_date,
-			"to_date": fiscal_year.year_end_date,
-		}
-
-		report = execute(filters)
-		self.assertEqual(report[1], expected_data)
-
-		# clean up
-		vehicle_log.cancel()
-		frappe.delete_doc("Expense Claim", expense_claim.name)
-		frappe.delete_doc("Vehicle Log", vehicle_log.name)
-
-	def tearDown(self):
-		frappe.delete_doc("Vehicle", self.license_plate, force=1)
-		frappe.delete_doc("Employee", self.employee_id, force=1)
diff --git a/erpnext/hr/report/vehicle_expenses/vehicle_expenses.js b/erpnext/hr/report/vehicle_expenses/vehicle_expenses.js
deleted file mode 100644
index 2d0aa0f..0000000
--- a/erpnext/hr/report/vehicle_expenses/vehicle_expenses.js
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-frappe.query_reports["Vehicle Expenses"] = {
-	"filters": [
-		{
-			"fieldname": "filter_based_on",
-			"label": __("Filter Based On"),
-			"fieldtype": "Select",
-			"options": ["Fiscal Year", "Date Range"],
-			"default": ["Fiscal Year"],
-			"reqd": 1
-		},
-		{
-			"fieldname": "fiscal_year",
-			"label": __("Fiscal Year"),
-			"fieldtype": "Link",
-			"options": "Fiscal Year",
-			"default": frappe.defaults.get_user_default("fiscal_year"),
-			"depends_on": "eval: doc.filter_based_on == 'Fiscal Year'",
-			"reqd": 1
-		},
-		{
-			"fieldname": "from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"reqd": 1,
-			"depends_on": "eval: doc.filter_based_on == 'Date Range'",
-			"default": frappe.datetime.add_months(frappe.datetime.nowdate(), -12)
-		},
-		{
-			"fieldname": "to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"reqd": 1,
-			"depends_on": "eval: doc.filter_based_on == 'Date Range'",
-			"default": frappe.datetime.nowdate()
-		},
-		{
-			"fieldname": "vehicle",
-			"label": __("Vehicle"),
-			"fieldtype": "Link",
-			"options": "Vehicle"
-		},
-		{
-			"fieldname": "employee",
-			"label": __("Employee"),
-			"fieldtype": "Link",
-			"options": "Employee"
-		}
-	]
-};
diff --git a/erpnext/hr/report/vehicle_expenses/vehicle_expenses.json b/erpnext/hr/report/vehicle_expenses/vehicle_expenses.json
deleted file mode 100644
index 1a3e5a9..0000000
--- a/erpnext/hr/report/vehicle_expenses/vehicle_expenses.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "add_total_row": 1,
- "columns": [],
- "creation": "2016-09-09 03:33:40.605734",
- "disable_prepared_report": 0,
- "disabled": 0,
- "docstatus": 0,
- "doctype": "Report",
- "filters": [],
- "idx": 2,
- "is_standard": "Yes",
- "modified": "2021-05-16 22:48:22.767535",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Vehicle Expenses",
- "owner": "Administrator",
- "prepared_report": 0,
- "ref_doctype": "Vehicle",
- "report_name": "Vehicle Expenses",
- "report_type": "Script Report",
- "roles": [
-  {
-   "role": "Fleet Manager"
-  }
- ]
-}
\ No newline at end of file
diff --git a/erpnext/hr/report/vehicle_expenses/vehicle_expenses.py b/erpnext/hr/report/vehicle_expenses/vehicle_expenses.py
deleted file mode 100644
index fc5510d..0000000
--- a/erpnext/hr/report/vehicle_expenses/vehicle_expenses.py
+++ /dev/null
@@ -1,177 +0,0 @@
-# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.utils import flt
-
-from erpnext.accounts.report.financial_statements import get_period_list
-
-
-def execute(filters=None):
-	filters = frappe._dict(filters or {})
-
-	columns = get_columns()
-	data = get_vehicle_log_data(filters)
-	chart = get_chart_data(data, filters)
-
-	return columns, data, None, chart
-
-
-def get_columns():
-	return [
-		{
-			"fieldname": "vehicle",
-			"fieldtype": "Link",
-			"label": _("Vehicle"),
-			"options": "Vehicle",
-			"width": 150,
-		},
-		{"fieldname": "make", "fieldtype": "Data", "label": _("Make"), "width": 100},
-		{"fieldname": "model", "fieldtype": "Data", "label": _("Model"), "width": 80},
-		{"fieldname": "location", "fieldtype": "Data", "label": _("Location"), "width": 100},
-		{
-			"fieldname": "log_name",
-			"fieldtype": "Link",
-			"label": _("Vehicle Log"),
-			"options": "Vehicle Log",
-			"width": 100,
-		},
-		{"fieldname": "odometer", "fieldtype": "Int", "label": _("Odometer Value"), "width": 120},
-		{"fieldname": "date", "fieldtype": "Date", "label": _("Date"), "width": 100},
-		{"fieldname": "fuel_qty", "fieldtype": "Float", "label": _("Fuel Qty"), "width": 80},
-		{"fieldname": "fuel_price", "fieldtype": "Float", "label": _("Fuel Price"), "width": 100},
-		{"fieldname": "fuel_expense", "fieldtype": "Currency", "label": _("Fuel Expense"), "width": 150},
-		{
-			"fieldname": "service_expense",
-			"fieldtype": "Currency",
-			"label": _("Service Expense"),
-			"width": 150,
-		},
-		{
-			"fieldname": "employee",
-			"fieldtype": "Link",
-			"label": _("Employee"),
-			"options": "Employee",
-			"width": 150,
-		},
-	]
-
-
-def get_vehicle_log_data(filters):
-	start_date, end_date = get_period_dates(filters)
-	conditions, values = get_conditions(filters)
-
-	data = frappe.db.sql(
-		"""
-		SELECT
-			vhcl.license_plate as vehicle, vhcl.make, vhcl.model,
-			vhcl.location, log.name as log_name, log.odometer,
-			log.date, log.employee, log.fuel_qty,
-			log.price as fuel_price,
-			log.fuel_qty * log.price as fuel_expense
-		FROM
-			`tabVehicle` vhcl,`tabVehicle Log` log
-		WHERE
-			vhcl.license_plate = log.license_plate
-			and log.docstatus = 1
-			and date between %(start_date)s and %(end_date)s
-			{0}
-		ORDER BY date""".format(
-			conditions
-		),
-		values,
-		as_dict=1,
-	)
-
-	for row in data:
-		row["service_expense"] = get_service_expense(row.log_name)
-
-	return data
-
-
-def get_conditions(filters):
-	conditions = ""
-
-	start_date, end_date = get_period_dates(filters)
-	values = {"start_date": start_date, "end_date": end_date}
-
-	if filters.employee:
-		conditions += " and log.employee = %(employee)s"
-		values["employee"] = filters.employee
-
-	if filters.vehicle:
-		conditions += " and vhcl.license_plate = %(vehicle)s"
-		values["vehicle"] = filters.vehicle
-
-	return conditions, values
-
-
-def get_period_dates(filters):
-	if filters.filter_based_on == "Fiscal Year" and filters.fiscal_year:
-		fy = frappe.db.get_value(
-			"Fiscal Year", filters.fiscal_year, ["year_start_date", "year_end_date"], as_dict=True
-		)
-		return fy.year_start_date, fy.year_end_date
-	else:
-		return filters.from_date, filters.to_date
-
-
-def get_service_expense(logname):
-	expense_amount = frappe.db.sql(
-		"""
-		SELECT sum(expense_amount)
-		FROM
-			`tabVehicle Log` log, `tabVehicle Service` service
-		WHERE
-			service.parent=log.name and log.name=%s
-	""",
-		logname,
-	)
-
-	return flt(expense_amount[0][0]) if expense_amount else 0.0
-
-
-def get_chart_data(data, filters):
-	period_list = get_period_list(
-		filters.fiscal_year,
-		filters.fiscal_year,
-		filters.from_date,
-		filters.to_date,
-		filters.filter_based_on,
-		"Monthly",
-	)
-
-	fuel_data, service_data = [], []
-
-	for period in period_list:
-		total_fuel_exp = 0
-		total_service_exp = 0
-
-		for row in data:
-			if row.date <= period.to_date and row.date >= period.from_date:
-				total_fuel_exp += flt(row.fuel_expense)
-				total_service_exp += flt(row.service_expense)
-
-		fuel_data.append([period.key, total_fuel_exp])
-		service_data.append([period.key, total_service_exp])
-
-	labels = [period.label for period in period_list]
-	fuel_exp_data = [row[1] for row in fuel_data]
-	service_exp_data = [row[1] for row in service_data]
-
-	datasets = []
-	if fuel_exp_data:
-		datasets.append({"name": _("Fuel Expenses"), "values": fuel_exp_data})
-
-	if service_exp_data:
-		datasets.append({"name": _("Service Expenses"), "values": service_exp_data})
-
-	chart = {
-		"data": {"labels": labels, "datasets": datasets},
-		"type": "line",
-		"fieldtype": "Currency",
-	}
-
-	return chart
diff --git a/erpnext/hr/utils.py b/erpnext/hr/utils.py
deleted file mode 100644
index c730b19..0000000
--- a/erpnext/hr/utils.py
+++ /dev/null
@@ -1,598 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-import frappe
-from frappe import _
-from frappe.utils import (
-	add_days,
-	cstr,
-	flt,
-	format_datetime,
-	formatdate,
-	get_datetime,
-	get_link_to_form,
-	getdate,
-	nowdate,
-	today,
-)
-
-import erpnext
-from erpnext.hr.doctype.employee.employee import (
-	InactiveEmployeeStatusError,
-	get_holiday_list_for_employee,
-)
-
-
-class DuplicateDeclarationError(frappe.ValidationError):
-	pass
-
-
-def set_employee_name(doc):
-	if doc.employee and not doc.employee_name:
-		doc.employee_name = frappe.db.get_value("Employee", doc.employee, "employee_name")
-
-
-def update_employee_work_history(employee, details, date=None, cancel=False):
-	if not employee.internal_work_history and not cancel:
-		employee.append(
-			"internal_work_history",
-			{
-				"branch": employee.branch,
-				"designation": employee.designation,
-				"department": employee.department,
-				"from_date": employee.date_of_joining,
-			},
-		)
-
-	internal_work_history = {}
-	for item in details:
-		field = frappe.get_meta("Employee").get_field(item.fieldname)
-		if not field:
-			continue
-		fieldtype = field.fieldtype
-		new_data = item.new if not cancel else item.current
-		if fieldtype == "Date" and new_data:
-			new_data = getdate(new_data)
-		elif fieldtype == "Datetime" and new_data:
-			new_data = get_datetime(new_data)
-		setattr(employee, item.fieldname, new_data)
-		if item.fieldname in ["department", "designation", "branch"]:
-			internal_work_history[item.fieldname] = item.new
-
-	if internal_work_history and not cancel:
-		internal_work_history["from_date"] = date
-		employee.append("internal_work_history", internal_work_history)
-
-	if cancel:
-		delete_employee_work_history(details, employee, date)
-
-	return employee
-
-
-def delete_employee_work_history(details, employee, date):
-	filters = {}
-	for d in details:
-		for history in employee.internal_work_history:
-			if d.property == "Department" and history.department == d.new:
-				department = d.new
-				filters["department"] = department
-			if d.property == "Designation" and history.designation == d.new:
-				designation = d.new
-				filters["designation"] = designation
-			if d.property == "Branch" and history.branch == d.new:
-				branch = d.new
-				filters["branch"] = branch
-			if date and date == history.from_date:
-				filters["from_date"] = date
-	if filters:
-		frappe.db.delete("Employee Internal Work History", filters)
-
-
-@frappe.whitelist()
-def get_employee_field_property(employee, fieldname):
-	if employee and fieldname:
-		field = frappe.get_meta("Employee").get_field(fieldname)
-		value = frappe.db.get_value("Employee", employee, fieldname)
-		options = field.options
-		if field.fieldtype == "Date":
-			value = formatdate(value)
-		elif field.fieldtype == "Datetime":
-			value = format_datetime(value)
-		return {"value": value, "datatype": field.fieldtype, "label": field.label, "options": options}
-	else:
-		return False
-
-
-def validate_dates(doc, from_date, to_date):
-	date_of_joining, relieving_date = frappe.db.get_value(
-		"Employee", doc.employee, ["date_of_joining", "relieving_date"]
-	)
-	if getdate(from_date) > getdate(to_date):
-		frappe.throw(_("To date can not be less than from date"))
-	elif getdate(from_date) > getdate(nowdate()):
-		frappe.throw(_("Future dates not allowed"))
-	elif date_of_joining and getdate(from_date) < getdate(date_of_joining):
-		frappe.throw(_("From date can not be less than employee's joining date"))
-	elif relieving_date and getdate(to_date) > getdate(relieving_date):
-		frappe.throw(_("To date can not greater than employee's relieving date"))
-
-
-def validate_overlap(doc, from_date, to_date, company=None):
-	query = """
-		select name
-		from `tab{0}`
-		where name != %(name)s
-		"""
-	query += get_doc_condition(doc.doctype)
-
-	if not doc.name:
-		# hack! if name is null, it could cause problems with !=
-		doc.name = "New " + doc.doctype
-
-	overlap_doc = frappe.db.sql(
-		query.format(doc.doctype),
-		{
-			"employee": doc.get("employee"),
-			"from_date": from_date,
-			"to_date": to_date,
-			"name": doc.name,
-			"company": company,
-		},
-		as_dict=1,
-	)
-
-	if overlap_doc:
-		if doc.get("employee"):
-			exists_for = doc.employee
-		if company:
-			exists_for = company
-		throw_overlap_error(doc, exists_for, overlap_doc[0].name, from_date, to_date)
-
-
-def get_doc_condition(doctype):
-	if doctype == "Compensatory Leave Request":
-		return "and employee = %(employee)s and docstatus < 2 \
-		and (work_from_date between %(from_date)s and %(to_date)s \
-		or work_end_date between %(from_date)s and %(to_date)s \
-		or (work_from_date < %(from_date)s and work_end_date > %(to_date)s))"
-	elif doctype == "Leave Period":
-		return "and company = %(company)s and (from_date between %(from_date)s and %(to_date)s \
-			or to_date between %(from_date)s and %(to_date)s \
-			or (from_date < %(from_date)s and to_date > %(to_date)s))"
-
-
-def throw_overlap_error(doc, exists_for, overlap_doc, from_date, to_date):
-	msg = (
-		_("A {0} exists between {1} and {2} (").format(
-			doc.doctype, formatdate(from_date), formatdate(to_date)
-		)
-		+ """ <b><a href="/app/Form/{0}/{1}">{1}</a></b>""".format(doc.doctype, overlap_doc)
-		+ _(") for {0}").format(exists_for)
-	)
-	frappe.throw(msg)
-
-
-def validate_duplicate_exemption_for_payroll_period(doctype, docname, payroll_period, employee):
-	existing_record = frappe.db.exists(
-		doctype,
-		{
-			"payroll_period": payroll_period,
-			"employee": employee,
-			"docstatus": ["<", 2],
-			"name": ["!=", docname],
-		},
-	)
-	if existing_record:
-		frappe.throw(
-			_("{0} already exists for employee {1} and period {2}").format(
-				doctype, employee, payroll_period
-			),
-			DuplicateDeclarationError,
-		)
-
-
-def validate_tax_declaration(declarations):
-	subcategories = []
-	for d in declarations:
-		if d.exemption_sub_category in subcategories:
-			frappe.throw(_("More than one selection for {0} not allowed").format(d.exemption_sub_category))
-		subcategories.append(d.exemption_sub_category)
-
-
-def get_total_exemption_amount(declarations):
-	exemptions = frappe._dict()
-	for d in declarations:
-		exemptions.setdefault(d.exemption_category, frappe._dict())
-		category_max_amount = exemptions.get(d.exemption_category).max_amount
-		if not category_max_amount:
-			category_max_amount = frappe.db.get_value(
-				"Employee Tax Exemption Category", d.exemption_category, "max_amount"
-			)
-			exemptions.get(d.exemption_category).max_amount = category_max_amount
-		sub_category_exemption_amount = (
-			d.max_amount if (d.max_amount and flt(d.amount) > flt(d.max_amount)) else d.amount
-		)
-
-		exemptions.get(d.exemption_category).setdefault("total_exemption_amount", 0.0)
-		exemptions.get(d.exemption_category).total_exemption_amount += flt(sub_category_exemption_amount)
-
-		if (
-			category_max_amount
-			and exemptions.get(d.exemption_category).total_exemption_amount > category_max_amount
-		):
-			exemptions.get(d.exemption_category).total_exemption_amount = category_max_amount
-
-	total_exemption_amount = sum([flt(d.total_exemption_amount) for d in exemptions.values()])
-	return total_exemption_amount
-
-
-@frappe.whitelist()
-def get_leave_period(from_date, to_date, company):
-	leave_period = frappe.db.sql(
-		"""
-		select name, from_date, to_date
-		from `tabLeave Period`
-		where company=%(company)s and is_active=1
-			and (from_date between %(from_date)s and %(to_date)s
-				or to_date between %(from_date)s and %(to_date)s
-				or (from_date < %(from_date)s and to_date > %(to_date)s))
-	""",
-		{"from_date": from_date, "to_date": to_date, "company": company},
-		as_dict=1,
-	)
-
-	if leave_period:
-		return leave_period
-
-
-def generate_leave_encashment():
-	"""Generates a draft leave encashment on allocation expiry"""
-	from erpnext.hr.doctype.leave_encashment.leave_encashment import create_leave_encashment
-
-	if frappe.db.get_single_value("HR Settings", "auto_leave_encashment"):
-		leave_type = frappe.get_all("Leave Type", filters={"allow_encashment": 1}, fields=["name"])
-		leave_type = [l["name"] for l in leave_type]
-
-		leave_allocation = frappe.get_all(
-			"Leave Allocation",
-			filters={"to_date": add_days(today(), -1), "leave_type": ("in", leave_type)},
-			fields=[
-				"employee",
-				"leave_period",
-				"leave_type",
-				"to_date",
-				"total_leaves_allocated",
-				"new_leaves_allocated",
-			],
-		)
-
-		create_leave_encashment(leave_allocation=leave_allocation)
-
-
-def allocate_earned_leaves():
-	"""Allocate earned leaves to Employees"""
-	e_leave_types = get_earned_leaves()
-	today = getdate()
-
-	for e_leave_type in e_leave_types:
-
-		leave_allocations = get_leave_allocations(today, e_leave_type.name)
-
-		for allocation in leave_allocations:
-
-			if not allocation.leave_policy_assignment and not allocation.leave_policy:
-				continue
-
-			leave_policy = (
-				allocation.leave_policy
-				if allocation.leave_policy
-				else frappe.db.get_value(
-					"Leave Policy Assignment", allocation.leave_policy_assignment, ["leave_policy"]
-				)
-			)
-
-			annual_allocation = frappe.db.get_value(
-				"Leave Policy Detail",
-				filters={"parent": leave_policy, "leave_type": e_leave_type.name},
-				fieldname=["annual_allocation"],
-			)
-
-			from_date = allocation.from_date
-
-			if e_leave_type.based_on_date_of_joining:
-				from_date = frappe.db.get_value("Employee", allocation.employee, "date_of_joining")
-
-			if check_effective_date(
-				from_date, today, e_leave_type.earned_leave_frequency, e_leave_type.based_on_date_of_joining
-			):
-				update_previous_leave_allocation(allocation, annual_allocation, e_leave_type)
-
-
-def update_previous_leave_allocation(allocation, annual_allocation, e_leave_type):
-	earned_leaves = get_monthly_earned_leave(
-		annual_allocation, e_leave_type.earned_leave_frequency, e_leave_type.rounding
-	)
-
-	allocation = frappe.get_doc("Leave Allocation", allocation.name)
-	new_allocation = flt(allocation.total_leaves_allocated) + flt(earned_leaves)
-
-	if new_allocation > e_leave_type.max_leaves_allowed and e_leave_type.max_leaves_allowed > 0:
-		new_allocation = e_leave_type.max_leaves_allowed
-
-	if new_allocation != allocation.total_leaves_allocated:
-		today_date = today()
-
-		allocation.db_set("total_leaves_allocated", new_allocation, update_modified=False)
-		create_additional_leave_ledger_entry(allocation, earned_leaves, today_date)
-
-		if e_leave_type.based_on_date_of_joining:
-			text = _("allocated {0} leave(s) via scheduler on {1} based on the date of joining").format(
-				frappe.bold(earned_leaves), frappe.bold(formatdate(today_date))
-			)
-		else:
-			text = _("allocated {0} leave(s) via scheduler on {1}").format(
-				frappe.bold(earned_leaves), frappe.bold(formatdate(today_date))
-			)
-
-		allocation.add_comment(comment_type="Info", text=text)
-
-
-def get_monthly_earned_leave(annual_leaves, frequency, rounding):
-	earned_leaves = 0.0
-	divide_by_frequency = {"Yearly": 1, "Half-Yearly": 6, "Quarterly": 4, "Monthly": 12}
-	if annual_leaves:
-		earned_leaves = flt(annual_leaves) / divide_by_frequency[frequency]
-		if rounding:
-			if rounding == "0.25":
-				earned_leaves = round(earned_leaves * 4) / 4
-			elif rounding == "0.5":
-				earned_leaves = round(earned_leaves * 2) / 2
-			else:
-				earned_leaves = round(earned_leaves)
-
-	return earned_leaves
-
-
-def is_earned_leave_already_allocated(allocation, annual_allocation):
-	from erpnext.hr.doctype.leave_policy_assignment.leave_policy_assignment import (
-		get_leave_type_details,
-	)
-
-	leave_type_details = get_leave_type_details()
-	date_of_joining = frappe.db.get_value("Employee", allocation.employee, "date_of_joining")
-
-	assignment = frappe.get_doc("Leave Policy Assignment", allocation.leave_policy_assignment)
-	leaves_for_passed_months = assignment.get_leaves_for_passed_months(
-		allocation.leave_type, annual_allocation, leave_type_details, date_of_joining
-	)
-
-	# exclude carry-forwarded leaves while checking for leave allocation for passed months
-	num_allocations = allocation.total_leaves_allocated
-	if allocation.unused_leaves:
-		num_allocations -= allocation.unused_leaves
-
-	if num_allocations >= leaves_for_passed_months:
-		return True
-	return False
-
-
-def get_leave_allocations(date, leave_type):
-	return frappe.db.sql(
-		"""select name, employee, from_date, to_date, leave_policy_assignment, leave_policy
-		from `tabLeave Allocation`
-		where
-			%s between from_date and to_date and docstatus=1
-			and leave_type=%s""",
-		(date, leave_type),
-		as_dict=1,
-	)
-
-
-def get_earned_leaves():
-	return frappe.get_all(
-		"Leave Type",
-		fields=[
-			"name",
-			"max_leaves_allowed",
-			"earned_leave_frequency",
-			"rounding",
-			"based_on_date_of_joining",
-		],
-		filters={"is_earned_leave": 1},
-	)
-
-
-def create_additional_leave_ledger_entry(allocation, leaves, date):
-	"""Create leave ledger entry for leave types"""
-	allocation.new_leaves_allocated = leaves
-	allocation.from_date = date
-	allocation.unused_leaves = 0
-	allocation.create_leave_ledger_entry()
-
-
-def check_effective_date(from_date, to_date, frequency, based_on_date_of_joining):
-	import calendar
-
-	from dateutil import relativedelta
-
-	from_date = get_datetime(from_date)
-	to_date = get_datetime(to_date)
-	rd = relativedelta.relativedelta(to_date, from_date)
-	# last day of month
-	last_day = calendar.monthrange(to_date.year, to_date.month)[1]
-
-	if (from_date.day == to_date.day and based_on_date_of_joining) or (
-		not based_on_date_of_joining and to_date.day == last_day
-	):
-		if frequency == "Monthly":
-			return True
-		elif frequency == "Quarterly" and rd.months % 3:
-			return True
-		elif frequency == "Half-Yearly" and rd.months % 6:
-			return True
-		elif frequency == "Yearly" and rd.months % 12:
-			return True
-
-	if frappe.flags.in_test:
-		return True
-
-	return False
-
-
-def get_salary_assignments(employee, payroll_period):
-	start_date, end_date = frappe.db.get_value(
-		"Payroll Period", payroll_period, ["start_date", "end_date"]
-	)
-	assignments = frappe.db.get_all(
-		"Salary Structure Assignment",
-		filters={"employee": employee, "docstatus": 1, "from_date": ["between", (start_date, end_date)]},
-		fields=["*"],
-		order_by="from_date",
-	)
-
-	return assignments
-
-
-def get_sal_slip_total_benefit_given(employee, payroll_period, component=False):
-	total_given_benefit_amount = 0
-	query = """
-	select sum(sd.amount) as 'total_amount'
-	from `tabSalary Slip` ss, `tabSalary Detail` sd
-	where ss.employee=%(employee)s
-	and ss.docstatus = 1 and ss.name = sd.parent
-	and sd.is_flexible_benefit = 1 and sd.parentfield = "earnings"
-	and sd.parenttype = "Salary Slip"
-	and (ss.start_date between %(start_date)s and %(end_date)s
-		or ss.end_date between %(start_date)s and %(end_date)s
-		or (ss.start_date < %(start_date)s and ss.end_date > %(end_date)s))
-	"""
-
-	if component:
-		query += "and sd.salary_component = %(component)s"
-
-	sum_of_given_benefit = frappe.db.sql(
-		query,
-		{
-			"employee": employee,
-			"start_date": payroll_period.start_date,
-			"end_date": payroll_period.end_date,
-			"component": component,
-		},
-		as_dict=True,
-	)
-
-	if sum_of_given_benefit and flt(sum_of_given_benefit[0].total_amount) > 0:
-		total_given_benefit_amount = sum_of_given_benefit[0].total_amount
-	return total_given_benefit_amount
-
-
-def get_holiday_dates_for_employee(employee, start_date, end_date):
-	"""return a list of holiday dates for the given employee between start_date and end_date"""
-	# return only date
-	holidays = get_holidays_for_employee(employee, start_date, end_date)
-
-	return [cstr(h.holiday_date) for h in holidays]
-
-
-def get_holidays_for_employee(
-	employee, start_date, end_date, raise_exception=True, only_non_weekly=False
-):
-	"""Get Holidays for a given employee
-
-	`employee` (str)
-	`start_date` (str or datetime)
-	`end_date` (str or datetime)
-	`raise_exception` (bool)
-	`only_non_weekly` (bool)
-
-	return: list of dicts with `holiday_date` and `description`
-	"""
-	holiday_list = get_holiday_list_for_employee(employee, raise_exception=raise_exception)
-
-	if not holiday_list:
-		return []
-
-	filters = {"parent": holiday_list, "holiday_date": ("between", [start_date, end_date])}
-
-	if only_non_weekly:
-		filters["weekly_off"] = False
-
-	holidays = frappe.get_all("Holiday", fields=["description", "holiday_date"], filters=filters)
-
-	return holidays
-
-
-@erpnext.allow_regional
-def calculate_annual_eligible_hra_exemption(doc):
-	# Don't delete this method, used for localization
-	# Indian HRA Exemption Calculation
-	return {}
-
-
-@erpnext.allow_regional
-def calculate_hra_exemption_for_period(doc):
-	# Don't delete this method, used for localization
-	# Indian HRA Exemption Calculation
-	return {}
-
-
-def get_previous_claimed_amount(employee, payroll_period, non_pro_rata=False, component=False):
-	total_claimed_amount = 0
-	query = """
-	select sum(claimed_amount) as 'total_amount'
-	from `tabEmployee Benefit Claim`
-	where employee=%(employee)s
-	and docstatus = 1
-	and (claim_date between %(start_date)s and %(end_date)s)
-	"""
-	if non_pro_rata:
-		query += "and pay_against_benefit_claim = 1"
-	if component:
-		query += "and earning_component = %(component)s"
-
-	sum_of_claimed_amount = frappe.db.sql(
-		query,
-		{
-			"employee": employee,
-			"start_date": payroll_period.start_date,
-			"end_date": payroll_period.end_date,
-			"component": component,
-		},
-		as_dict=True,
-	)
-	if sum_of_claimed_amount and flt(sum_of_claimed_amount[0].total_amount) > 0:
-		total_claimed_amount = sum_of_claimed_amount[0].total_amount
-	return total_claimed_amount
-
-
-def share_doc_with_approver(doc, user):
-	# if approver does not have permissions, share
-	if not frappe.has_permission(doc=doc, ptype="submit", user=user):
-		frappe.share.add(doc.doctype, doc.name, user, submit=1, flags={"ignore_share_permission": True})
-
-		frappe.msgprint(
-			_("Shared with the user {0} with {1} access").format(user, frappe.bold("submit"), alert=True)
-		)
-
-	# remove shared doc if approver changes
-	doc_before_save = doc.get_doc_before_save()
-	if doc_before_save:
-		approvers = {
-			"Leave Application": "leave_approver",
-			"Expense Claim": "expense_approver",
-			"Shift Request": "approver",
-		}
-
-		approver = approvers.get(doc.doctype)
-		if doc_before_save.get(approver) != doc.get(approver):
-			frappe.share.remove(doc.doctype, doc.name, doc_before_save.get(approver))
-
-
-def validate_active_employee(employee):
-	if frappe.db.get_value("Employee", employee, "status") == "Inactive":
-		frappe.throw(
-			_("Transactions cannot be created for an Inactive Employee {0}.").format(
-				get_link_to_form("Employee", employee)
-			),
-			InactiveEmployeeStatusError,
-		)
diff --git a/erpnext/hr/web_form/__init__.py b/erpnext/hr/web_form/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/web_form/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/web_form/job_application/__init__.py b/erpnext/hr/web_form/job_application/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/hr/web_form/job_application/__init__.py
+++ /dev/null
diff --git a/erpnext/hr/web_form/job_application/job_application.js b/erpnext/hr/web_form/job_application/job_application.js
deleted file mode 100644
index ffc5e98..0000000
--- a/erpnext/hr/web_form/job_application/job_application.js
+++ /dev/null
@@ -1,3 +0,0 @@
-frappe.ready(function() {
-	// bind events here
-})
diff --git a/erpnext/hr/web_form/job_application/job_application.json b/erpnext/hr/web_form/job_application/job_application.json
deleted file mode 100644
index 512ba5c..0000000
--- a/erpnext/hr/web_form/job_application/job_application.json
+++ /dev/null
@@ -1,200 +0,0 @@
-{
- "accept_payment": 0,
- "allow_comments": 1,
- "allow_delete": 0,
- "allow_edit": 1,
- "allow_incomplete": 0,
- "allow_multiple": 1,
- "allow_print": 0,
- "amount": 0.0,
- "amount_based_on_field": 0,
- "apply_document_permissions": 0,
- "client_script": "frappe.web_form.on('resume_link', (field, value) => {\n    if (!frappe.utils.is_url(value)) {\n        frappe.msgprint(__('Resume link not valid'));\n    }\n});\n",
- "creation": "2016-09-10 02:53:16.598314",
- "doc_type": "Job Applicant",
- "docstatus": 0,
- "doctype": "Web Form",
- "idx": 0,
- "introduction_text": "",
- "is_standard": 1,
- "login_required": 0,
- "max_attachment_size": 0,
- "modified": "2020-10-07 19:27:17.143355",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "job-application",
- "owner": "Administrator",
- "published": 1,
- "route": "job_application",
- "route_to_success_link": 0,
- "show_attachments": 0,
- "show_in_grid": 0,
- "show_sidebar": 1,
- "sidebar_items": [],
- "success_message": "Thank you for applying.",
- "success_url": "/jobs",
- "title": "Job Application",
- "web_form_fields": [
-  {
-   "allow_read_on_all_link_options": 0,
-   "fieldname": "job_title",
-   "fieldtype": "Data",
-   "hidden": 0,
-   "label": "Job Opening",
-   "max_length": 0,
-   "max_value": 0,
-   "options": "",
-   "read_only": 1,
-   "reqd": 0,
-   "show_in_filter": 0
-  },
-  {
-   "allow_read_on_all_link_options": 0,
-   "fieldname": "applicant_name",
-   "fieldtype": "Data",
-   "hidden": 0,
-   "label": "Applicant Name",
-   "max_length": 0,
-   "max_value": 0,
-   "read_only": 0,
-   "reqd": 1,
-   "show_in_filter": 0
-  },
-  {
-   "allow_read_on_all_link_options": 0,
-   "fieldname": "email_id",
-   "fieldtype": "Data",
-   "hidden": 0,
-   "label": "Email Address",
-   "max_length": 0,
-   "max_value": 0,
-   "options": "Email",
-   "read_only": 0,
-   "reqd": 1,
-   "show_in_filter": 0
-  },
-  {
-   "allow_read_on_all_link_options": 0,
-   "fieldname": "phone_number",
-   "fieldtype": "Data",
-   "hidden": 0,
-   "label": "Phone Number",
-   "max_length": 0,
-   "max_value": 0,
-   "options": "Phone",
-   "read_only": 0,
-   "reqd": 0,
-   "show_in_filter": 0
-  },
-  {
-   "allow_read_on_all_link_options": 0,
-   "fieldname": "country",
-   "fieldtype": "Link",
-   "hidden": 0,
-   "label": "Country of Residence",
-   "max_length": 0,
-   "max_value": 0,
-   "options": "Country",
-   "read_only": 0,
-   "reqd": 0,
-   "show_in_filter": 0
-  },
-  {
-   "allow_read_on_all_link_options": 0,
-   "fieldname": "cover_letter",
-   "fieldtype": "Text",
-   "hidden": 0,
-   "label": "Cover Letter",
-   "max_length": 0,
-   "max_value": 0,
-   "read_only": 0,
-   "reqd": 0,
-   "show_in_filter": 0
-  },
-  {
-   "allow_read_on_all_link_options": 0,
-   "fieldname": "resume_link",
-   "fieldtype": "Data",
-   "hidden": 0,
-   "label": "Resume Link",
-   "max_length": 0,
-   "max_value": 0,
-   "read_only": 0,
-   "reqd": 0,
-   "show_in_filter": 0
-  },
-  {
-   "allow_read_on_all_link_options": 0,
-   "fieldname": "",
-   "fieldtype": "Section Break",
-   "hidden": 0,
-   "label": "Expected Salary Range per month",
-   "max_length": 0,
-   "max_value": 0,
-   "read_only": 0,
-   "reqd": 1,
-   "show_in_filter": 0
-  },
-  {
-   "allow_read_on_all_link_options": 0,
-   "fieldname": "currency",
-   "fieldtype": "Link",
-   "hidden": 0,
-   "label": "Currency",
-   "max_length": 0,
-   "max_value": 0,
-   "options": "Currency",
-   "read_only": 0,
-   "reqd": 0,
-   "show_in_filter": 0
-  },
-  {
-   "allow_read_on_all_link_options": 0,
-   "fieldname": "",
-   "fieldtype": "Column Break",
-   "hidden": 0,
-   "max_length": 0,
-   "max_value": 0,
-   "read_only": 0,
-   "reqd": 0,
-   "show_in_filter": 0
-  },
-  {
-   "allow_read_on_all_link_options": 0,
-   "fieldname": "lower_range",
-   "fieldtype": "Currency",
-   "hidden": 0,
-   "label": "Lower Range",
-   "max_length": 0,
-   "max_value": 0,
-   "options": "currency",
-   "read_only": 0,
-   "reqd": 0,
-   "show_in_filter": 0
-  },
-  {
-   "allow_read_on_all_link_options": 0,
-   "fieldname": "",
-   "fieldtype": "Column Break",
-   "hidden": 0,
-   "max_length": 0,
-   "max_value": 0,
-   "read_only": 0,
-   "reqd": 0,
-   "show_in_filter": 0
-  },
-  {
-   "allow_read_on_all_link_options": 0,
-   "fieldname": "upper_range",
-   "fieldtype": "Currency",
-   "hidden": 0,
-   "label": "Upper Range",
-   "max_length": 0,
-   "max_value": 0,
-   "options": "currency",
-   "read_only": 0,
-   "reqd": 0,
-   "show_in_filter": 0
-  }
- ]
-}
\ No newline at end of file
diff --git a/erpnext/hr/web_form/job_application/job_application.py b/erpnext/hr/web_form/job_application/job_application.py
deleted file mode 100644
index 02e3e93..0000000
--- a/erpnext/hr/web_form/job_application/job_application.py
+++ /dev/null
@@ -1,3 +0,0 @@
-def get_context(context):
-	# do your magic here
-	pass
diff --git a/erpnext/hr/workspace/hr/hr.json b/erpnext/hr/workspace/hr/hr.json
deleted file mode 100644
index 30cec1b..0000000
--- a/erpnext/hr/workspace/hr/hr.json
+++ /dev/null
@@ -1,1697 +0,0 @@
-{
- "charts": [
-  {
-   "chart_name": "Outgoing Salary",
-   "label": "Outgoing Salary"
-  }
- ],
- "content": "[{\"type\":\"onboarding\",\"data\":{\"onboarding_name\":\"Human Resource\",\"col\":12}},{\"type\":\"chart\",\"data\":{\"chart_name\":\"Outgoing Salary\",\"col\":12}},{\"type\":\"spacer\",\"data\":{\"col\":12}},{\"type\":\"header\",\"data\":{\"text\":\"<span class=\\\"h4\\\"><b>Your Shortcuts</b></span>\",\"col\":12}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Employee\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Leave Application\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Attendance\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Job Applicant\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Monthly Attendance Sheet\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Dashboard\",\"col\":3}},{\"type\":\"spacer\",\"data\":{\"col\":12}},{\"type\":\"header\",\"data\":{\"text\":\"<span class=\\\"h4\\\"><b>Reports & Masters</b></span>\",\"col\":12}},{\"type\":\"card\",\"data\":{\"card_name\":\"Employee\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Employee Lifecycle\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Employee Exit\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Shift Management\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Leaves\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Attendance\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Expense Claims\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Settings\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Loans\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Recruitment\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Performance\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Fleet Management\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Training\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Key Reports\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Other Reports\",\"col\":4}}]",
- "creation": "2020-03-02 15:48:58.322521",
- "docstatus": 0,
- "doctype": "Workspace",
- "for_user": "",
- "hide_custom": 0,
- "icon": "hr",
- "idx": 0,
- "label": "HR",
- "links": [
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee",
-   "link_count": 0,
-   "link_to": "Employee",
-   "link_type": "DocType",
-   "onboard": 1,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employment Type",
-   "link_count": 0,
-   "link_to": "Employment Type",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Branch",
-   "link_count": 0,
-   "link_to": "Branch",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Department",
-   "link_count": 0,
-   "link_to": "Department",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Designation",
-   "link_count": 0,
-   "link_to": "Designation",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Grade",
-   "link_count": 0,
-   "link_to": "Employee Grade",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Group",
-   "link_count": 0,
-   "link_to": "Employee Group",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Health Insurance",
-   "link_count": 0,
-   "link_to": "Employee Health Insurance",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Job Applicant",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Onboarding",
-   "link_count": 0,
-   "link_to": "Employee Onboarding",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Skill Map",
-   "link_count": 0,
-   "link_to": "Employee Skill Map",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Promotion",
-   "link_count": 0,
-   "link_to": "Employee Promotion",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Transfer",
-   "link_count": 0,
-   "link_to": "Employee Transfer",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Grievance Type",
-   "link_count": 0,
-   "link_to": "Grievance Type",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Grievance",
-   "link_count": 0,
-   "link_to": "Employee Grievance",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Separation",
-   "link_count": 0,
-   "link_to": "Employee Separation",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Onboarding Template",
-   "link_count": 0,
-   "link_to": "Employee Onboarding Template",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Separation Template",
-   "link_count": 0,
-   "link_to": "Employee Separation Template",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Full and Final Statement",
-   "link_count": 0,
-   "link_to": "Full and Final Statement",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Shift Type",
-   "link_count": 0,
-   "link_to": "Shift Type",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Shift Request",
-   "link_count": 0,
-   "link_to": "Shift Request",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Shift Assignment",
-   "link_count": 0,
-   "link_to": "Shift Assignment",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Holiday List",
-   "link_count": 0,
-   "link_to": "Holiday List",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Leave Type",
-   "link_count": 0,
-   "link_to": "Leave Type",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Leave Period",
-   "link_count": 0,
-   "link_to": "Leave Period",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Leave Type",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Leave Policy",
-   "link_count": 0,
-   "link_to": "Leave Policy",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Leave Policy",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Leave Policy Assignment",
-   "link_count": 0,
-   "link_to": "Leave Policy Assignment",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Leave Application",
-   "link_count": 0,
-   "link_to": "Leave Application",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Leave Allocation",
-   "link_count": 0,
-   "link_to": "Leave Allocation",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Leave Encashment",
-   "link_count": 0,
-   "link_to": "Leave Encashment",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Leave Block List",
-   "link_count": 0,
-   "link_to": "Leave Block List",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Compensatory Leave Request",
-   "link_count": 0,
-   "link_to": "Compensatory Leave Request",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Attendance Tool",
-   "link_count": 0,
-   "link_to": "Employee Attendance Tool",
-   "link_type": "DocType",
-   "onboard": 1,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Attendance",
-   "link_count": 0,
-   "link_to": "Attendance",
-   "link_type": "DocType",
-   "onboard": 1,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Attendance Request",
-   "link_count": 0,
-   "link_to": "Attendance Request",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Upload Attendance",
-   "link_count": 0,
-   "link_to": "Upload Attendance",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Checkin",
-   "link_count": 0,
-   "link_to": "Employee Checkin",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Expense Claim",
-   "link_count": 0,
-   "link_to": "Expense Claim",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Advance",
-   "link_count": 0,
-   "link_to": "Employee Advance",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Travel Request",
-   "link_count": 0,
-   "link_to": "Travel Request",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "HR Settings",
-   "link_count": 0,
-   "link_to": "HR Settings",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Daily Work Summary Group",
-   "link_count": 0,
-   "link_to": "Daily Work Summary Group",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Team Updates",
-   "link_count": 0,
-   "link_to": "team-updates",
-   "link_type": "Page",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Driver",
-   "link_count": 0,
-   "link_to": "Driver",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Vehicle",
-   "link_count": 0,
-   "link_to": "Vehicle",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Vehicle Log",
-   "link_count": 0,
-   "link_to": "Vehicle Log",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Vehicle",
-   "hidden": 0,
-   "is_query_report": 1,
-   "label": "Vehicle Expenses",
-   "link_count": 0,
-   "link_to": "Vehicle Expenses",
-   "link_type": "Report",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Job Opening",
-   "link_count": 0,
-   "link_to": "Job Opening",
-   "link_type": "DocType",
-   "onboard": 1,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Referral",
-   "link_count": 0,
-   "link_to": "Employee Referral",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Job Applicant",
-   "link_count": 0,
-   "link_to": "Job Applicant",
-   "link_type": "DocType",
-   "onboard": 1,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Job Offer",
-   "link_count": 0,
-   "link_to": "Job Offer",
-   "link_type": "DocType",
-   "onboard": 1,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Staffing Plan",
-   "link_count": 0,
-   "link_to": "Staffing Plan",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Appointment Letter",
-   "link_count": 0,
-   "link_to": "Appointment Letter",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Appointment Letter Template",
-   "link_count": 0,
-   "link_to": "Appointment Letter Template",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Loans",
-   "link_count": 0,
-   "onboard": 0,
-   "type": "Card Break"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Loan Application",
-   "link_count": 0,
-   "link_to": "Loan Application",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Loan",
-   "link_count": 0,
-   "link_to": "Loan",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Loan Type",
-   "link_count": 0,
-   "link_to": "Loan Type",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Training",
-   "link_count": 0,
-   "onboard": 0,
-   "type": "Card Break"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Training Program",
-   "link_count": 0,
-   "link_to": "Training Program",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Training Event",
-   "link_count": 0,
-   "link_to": "Training Event",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Training Result",
-   "link_count": 0,
-   "link_to": "Training Result",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Training Feedback",
-   "link_count": 0,
-   "link_to": "Training Feedback",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Performance",
-   "link_count": 0,
-   "onboard": 0,
-   "type": "Card Break"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Appraisal",
-   "link_count": 0,
-   "link_to": "Appraisal",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Appraisal Template",
-   "link_count": 0,
-   "link_to": "Appraisal Template",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Energy Point Rule",
-   "link_count": 0,
-   "link_to": "Energy Point Rule",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Energy Point Log",
-   "link_count": 0,
-   "link_to": "Energy Point Log",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Attendance",
-   "hidden": 0,
-   "is_query_report": 1,
-   "label": "Monthly Attendance Sheet",
-   "link_count": 0,
-   "link_to": "Monthly Attendance Sheet",
-   "link_type": "Report",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Staffing Plan",
-   "hidden": 0,
-   "is_query_report": 1,
-   "label": "Recruitment Analytics",
-   "link_count": 0,
-   "link_to": "Recruitment Analytics",
-   "link_type": "Report",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 1,
-   "label": "Employee Analytics",
-   "link_count": 0,
-   "link_to": "Employee Analytics",
-   "link_type": "Report",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 1,
-   "label": "Employee Leave Balance",
-   "link_count": 0,
-   "link_to": "Employee Leave Balance",
-   "link_type": "Report",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 1,
-   "label": "Employee Leave Balance Summary",
-   "link_count": 0,
-   "link_to": "Employee Leave Balance Summary",
-   "link_type": "Report",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee Advance",
-   "hidden": 0,
-   "is_query_report": 1,
-   "label": "Employee Advance Summary",
-   "link_count": 0,
-   "link_to": "Employee Advance Summary",
-   "link_type": "Report",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Other Reports",
-   "link_count": 0,
-   "onboard": 0,
-   "type": "Card Break"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Information",
-   "link_count": 0,
-   "link_to": "Employee Information",
-   "link_type": "Report",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 1,
-   "label": "Employee Birthday",
-   "link_count": 0,
-   "link_to": "Employee Birthday",
-   "link_type": "Report",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 1,
-   "label": "Employees Working on a Holiday",
-   "link_count": 0,
-   "link_to": "Employees working on a holiday",
-   "link_type": "Report",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Daily Work Summary",
-   "hidden": 0,
-   "is_query_report": 1,
-   "label": "Daily Work Summary Replies",
-   "link_count": 0,
-   "link_to": "Daily Work Summary Replies",
-   "link_type": "Report",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Lifecycle",
-   "link_count": 7,
-   "onboard": 0,
-   "type": "Card Break"
-  },
-  {
-   "dependencies": "Job Applicant",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Onboarding",
-   "link_count": 0,
-   "link_to": "Employee Onboarding",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Skill Map",
-   "link_count": 0,
-   "link_to": "Employee Skill Map",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Promotion",
-   "link_count": 0,
-   "link_to": "Employee Promotion",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Transfer",
-   "link_count": 0,
-   "link_to": "Employee Transfer",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Grievance Type",
-   "link_count": 0,
-   "link_to": "Grievance Type",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Grievance",
-   "link_count": 0,
-   "link_to": "Employee Grievance",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Onboarding Template",
-   "link_count": 0,
-   "link_to": "Employee Onboarding Template",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Exit",
-   "link_count": 4,
-   "onboard": 0,
-   "type": "Card Break"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Separation Template",
-   "link_count": 0,
-   "link_to": "Employee Separation Template",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Separation",
-   "link_count": 0,
-   "link_to": "Employee Separation",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Full and Final Statement",
-   "link_count": 0,
-   "link_to": "Full and Final Statement",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Exit Interview",
-   "link_count": 0,
-   "link_to": "Exit Interview",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee",
-   "link_count": 8,
-   "onboard": 0,
-   "type": "Card Break"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee",
-   "link_count": 0,
-   "link_to": "Employee",
-   "link_type": "DocType",
-   "onboard": 1,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employment Type",
-   "link_count": 0,
-   "link_to": "Employment Type",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Branch",
-   "link_count": 0,
-   "link_to": "Branch",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Department",
-   "link_count": 0,
-   "link_to": "Department",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Designation",
-   "link_count": 0,
-   "link_to": "Designation",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Grade",
-   "link_count": 0,
-   "link_to": "Employee Grade",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Group",
-   "link_count": 0,
-   "link_to": "Employee Group",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Health Insurance",
-   "link_count": 0,
-   "link_to": "Employee Health Insurance",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Key Reports",
-   "link_count": 7,
-   "onboard": 0,
-   "type": "Card Break"
-  },
-  {
-   "dependencies": "Attendance",
-   "hidden": 0,
-   "is_query_report": 1,
-   "label": "Monthly Attendance Sheet",
-   "link_count": 0,
-   "link_to": "Monthly Attendance Sheet",
-   "link_type": "Report",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Staffing Plan",
-   "hidden": 0,
-   "is_query_report": 1,
-   "label": "Recruitment Analytics",
-   "link_count": 0,
-   "link_to": "Recruitment Analytics",
-   "link_type": "Report",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 1,
-   "label": "Employee Analytics",
-   "link_count": 0,
-   "link_to": "Employee Analytics",
-   "link_type": "Report",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 1,
-   "label": "Employee Leave Balance",
-   "link_count": 0,
-   "link_to": "Employee Leave Balance",
-   "link_type": "Report",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 1,
-   "label": "Employee Leave Balance Summary",
-   "link_count": 0,
-   "link_to": "Employee Leave Balance Summary",
-   "link_type": "Report",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee Advance",
-   "hidden": 0,
-   "is_query_report": 1,
-   "label": "Employee Advance Summary",
-   "link_count": 0,
-   "link_to": "Employee Advance Summary",
-   "link_type": "Report",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Exits",
-   "link_count": 0,
-   "link_to": "Employee Exits",
-   "link_type": "Report",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Recruitment",
-   "link_count": 11,
-   "onboard": 0,
-   "type": "Card Break"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Job Opening",
-   "link_count": 0,
-   "link_to": "Job Opening",
-   "link_type": "DocType",
-   "onboard": 1,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Referral",
-   "link_count": 0,
-   "link_to": "Employee Referral",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Job Applicant",
-   "link_count": 0,
-   "link_to": "Job Applicant",
-   "link_type": "DocType",
-   "onboard": 1,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Job Offer",
-   "link_count": 0,
-   "link_to": "Job Offer",
-   "link_type": "DocType",
-   "onboard": 1,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Staffing Plan",
-   "link_count": 0,
-   "link_to": "Staffing Plan",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Appointment Letter",
-   "link_count": 0,
-   "link_to": "Appointment Letter",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Appointment Letter Template",
-   "link_count": 0,
-   "link_to": "Appointment Letter Template",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Interview Type",
-   "link_count": 0,
-   "link_to": "Interview Type",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Interview Round",
-   "link_count": 0,
-   "link_to": "Interview Round",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Interview",
-   "link_count": 0,
-   "link_to": "Interview",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Interview Feedback",
-   "link_count": 0,
-   "link_to": "Interview Feedback",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Fleet Management",
-   "link_count": 4,
-   "onboard": 0,
-   "type": "Card Break"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Driver",
-   "link_count": 0,
-   "link_to": "Driver",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Vehicle",
-   "link_count": 0,
-   "link_to": "Vehicle",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Vehicle Log",
-   "link_count": 0,
-   "link_to": "Vehicle Log",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Vehicle",
-   "hidden": 0,
-   "is_query_report": 1,
-   "label": "Vehicle Expenses",
-   "link_count": 0,
-   "link_to": "Vehicle Expenses",
-   "link_type": "Report",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Settings",
-   "link_count": 3,
-   "onboard": 0,
-   "type": "Card Break"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "HR Settings",
-   "link_count": 0,
-   "link_to": "HR Settings",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Daily Work Summary Group",
-   "link_count": 0,
-   "link_to": "Daily Work Summary Group",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Team Updates",
-   "link_count": 0,
-   "link_to": "team-updates",
-   "link_type": "Page",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Expense Claims",
-   "link_count": 3,
-   "onboard": 0,
-   "type": "Card Break"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Expense Claim",
-   "link_count": 0,
-   "link_to": "Expense Claim",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Advance",
-   "link_count": 0,
-   "link_to": "Employee Advance",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Travel Request",
-   "link_count": 0,
-   "link_to": "Travel Request",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Attendance",
-   "link_count": 5,
-   "onboard": 0,
-   "type": "Card Break"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Attendance Tool",
-   "link_count": 0,
-   "link_to": "Employee Attendance Tool",
-   "link_type": "DocType",
-   "onboard": 1,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Attendance",
-   "link_count": 0,
-   "link_to": "Attendance",
-   "link_type": "DocType",
-   "onboard": 1,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Attendance Request",
-   "link_count": 0,
-   "link_to": "Attendance Request",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Upload Attendance",
-   "link_count": 0,
-   "link_to": "Upload Attendance",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Checkin",
-   "link_count": 0,
-   "link_to": "Employee Checkin",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Leaves",
-   "link_count": 10,
-   "onboard": 0,
-   "type": "Card Break"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Holiday List",
-   "link_count": 0,
-   "link_to": "Holiday List",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Leave Type",
-   "link_count": 0,
-   "link_to": "Leave Type",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Leave Period",
-   "link_count": 0,
-   "link_to": "Leave Period",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Leave Type",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Leave Policy",
-   "link_count": 0,
-   "link_to": "Leave Policy",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Leave Policy",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Leave Policy Assignment",
-   "link_count": 0,
-   "link_to": "Leave Policy Assignment",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Leave Application",
-   "link_count": 0,
-   "link_to": "Leave Application",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Leave Allocation",
-   "link_count": 0,
-   "link_to": "Leave Allocation",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Leave Encashment",
-   "link_count": 0,
-   "link_to": "Leave Encashment",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Leave Block List",
-   "link_count": 0,
-   "link_to": "Leave Block List",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Employee",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Compensatory Leave Request",
-   "link_count": 0,
-   "link_to": "Compensatory Leave Request",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Shift Management",
-   "link_count": 3,
-   "onboard": 0,
-   "type": "Card Break"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Shift Type",
-   "link_count": 0,
-   "link_to": "Shift Type",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Shift Request",
-   "link_count": 0,
-   "link_to": "Shift Request",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Shift Assignment",
-   "link_count": 0,
-   "link_to": "Shift Assignment",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  }
- ],
- "modified": "2022-01-13 17:38:45.489128",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "HR",
- "owner": "Administrator",
- "parent_page": "",
- "public": 1,
- "restrict_to_domain": "",
- "roles": [],
- "sequence_id": 14.0,
- "shortcuts": [
-  {
-   "color": "Green",
-   "format": "{} Active",
-   "label": "Employee",
-   "link_to": "Employee",
-   "stats_filter": "{\"status\":\"Active\"}",
-   "type": "DocType"
-  },
-  {
-   "color": "Yellow",
-   "format": "{} Open",
-   "label": "Leave Application",
-   "link_to": "Leave Application",
-   "stats_filter": "{\"status\":\"Open\"}",
-   "type": "DocType"
-  },
-  {
-   "label": "Attendance",
-   "link_to": "Attendance",
-   "stats_filter": "",
-   "type": "DocType"
-  },
-  {
-   "label": "Job Applicant",
-   "link_to": "Job Applicant",
-   "type": "DocType"
-  },
-  {
-   "label": "Monthly Attendance Sheet",
-   "link_to": "Monthly Attendance Sheet",
-   "type": "Report"
-  },
-  {
-   "format": "{} Open",
-   "label": "Dashboard",
-   "link_to": "Human Resource",
-   "stats_filter": "{\n    \"status\": \"Open\"\n}",
-   "type": "Dashboard"
-  }
- ],
- "title": "HR"
-}
\ No newline at end of file
diff --git a/erpnext/modules.txt b/erpnext/modules.txt
index 869166b..cd061f7 100644
--- a/erpnext/modules.txt
+++ b/erpnext/modules.txt
@@ -4,7 +4,6 @@
 Projects
 Selling
 Setup
-HR
 Manufacturing
 Stock
 Support
@@ -17,7 +16,6 @@
 Quality Management
 Communication
 Loan Management
-Payroll
 Telephony
 Bulk Transaction
 E-commerce
diff --git a/erpnext/payroll/__init__.py b/erpnext/payroll/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/__init__.py
+++ /dev/null
diff --git "a/erpnext/payroll/dashboard_chart/department_wise_salary\050last_month\051/department_wise_salary\050last_month\051.json" "b/erpnext/payroll/dashboard_chart/department_wise_salary\050last_month\051/department_wise_salary\050last_month\051.json"
deleted file mode 100644
index 61ae86f..0000000
--- "a/erpnext/payroll/dashboard_chart/department_wise_salary\050last_month\051/department_wise_salary\050last_month\051.json"
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "aggregate_function_based_on": "rounded_total",
- "chart_name": "Department Wise Salary(Last Month)",
- "chart_type": "Group By",
- "creation": "2020-07-22 11:56:34.511940",
- "custom_options": "",
- "docstatus": 0,
- "doctype": "Dashboard Chart",
- "document_type": "Salary Slip",
- "dynamic_filters_json": "[[\"Salary Slip\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]",
- "filters_json": "[[\"Salary Slip\",\"docstatus\",\"=\",\"1\",false],[\"Salary Slip\",\"start_date\",\"Timespan\",\"last month\",false]]",
- "group_by_based_on": "department",
- "group_by_type": "Sum",
- "idx": 0,
- "is_public": 1,
- "is_standard": 1,
- "last_synced_on": "2020-07-22 12:46:05.272076",
- "modified": "2020-07-22 12:48:12.080992",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Department Wise Salary(Last Month)",
- "number_of_groups": 0,
- "owner": "Administrator",
- "time_interval": "Monthly",
- "timeseries": 0,
- "timespan": "Last Year",
- "type": "Bar",
- "use_report_chart": 0,
- "y_axis": []
-}
\ No newline at end of file
diff --git "a/erpnext/payroll/dashboard_chart/designation_wise_salary\050last_month\051/designation_wise_salary\050last_month\051.json" "b/erpnext/payroll/dashboard_chart/designation_wise_salary\050last_month\051/designation_wise_salary\050last_month\051.json"
deleted file mode 100644
index b3c4e59..0000000
--- "a/erpnext/payroll/dashboard_chart/designation_wise_salary\050last_month\051/designation_wise_salary\050last_month\051.json"
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "aggregate_function_based_on": "rounded_total",
- "chart_name": "Designation Wise Salary(Last Month)",
- "chart_type": "Group By",
- "creation": "2020-07-22 11:56:34.550339",
- "custom_options": "",
- "docstatus": 0,
- "doctype": "Dashboard Chart",
- "document_type": "Salary Slip",
- "dynamic_filters_json": "[[\"Salary Slip\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]",
- "filters_json": "[[\"Salary Slip\",\"docstatus\",\"=\",\"1\",false],[\"Salary Slip\",\"start_date\",\"Timespan\",\"last month\",false]]",
- "group_by_based_on": "designation",
- "group_by_type": "Sum",
- "idx": 0,
- "is_public": 1,
- "is_standard": 1,
- "last_synced_on": "2020-07-22 12:22:18.412822",
- "modified": "2020-07-22 12:39:07.923382",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Designation Wise Salary(Last Month)",
- "number_of_groups": 0,
- "owner": "Administrator",
- "time_interval": "Monthly",
- "timeseries": 0,
- "timespan": "Last Year",
- "type": "Bar",
- "use_report_chart": 0,
- "y_axis": []
-}
\ No newline at end of file
diff --git a/erpnext/payroll/dashboard_chart/outgoing_salary/outgoing_salary.json b/erpnext/payroll/dashboard_chart/outgoing_salary/outgoing_salary.json
deleted file mode 100644
index c77c8a5..0000000
--- a/erpnext/payroll/dashboard_chart/outgoing_salary/outgoing_salary.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "based_on": "end_date",
- "chart_name": "Outgoing Salary",
- "chart_type": "Sum",
- "creation": "2020-07-22 11:56:34.478848",
- "custom_options": "",
- "docstatus": 0,
- "doctype": "Dashboard Chart",
- "document_type": "Salary Slip",
- "dynamic_filters_json": "[[\"Salary Slip\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]",
- "filters_json": "[[\"Salary Slip\",\"docstatus\",\"=\",\"1\",false]]",
- "idx": 0,
- "is_public": 1,
- "is_standard": 1,
- "last_synced_on": "2020-07-22 12:11:27.481231",
- "modified": "2020-07-22 12:20:05.777715",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Outgoing Salary",
- "number_of_groups": 0,
- "owner": "Administrator",
- "time_interval": "Monthly",
- "timeseries": 1,
- "timespan": "Last Year",
- "type": "Line",
- "use_report_chart": 0,
- "value_based_on": "rounded_total",
- "y_axis": []
-}
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/__init__.py b/erpnext/payroll/doctype/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/doctype/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/doctype/additional_salary/__init__.py b/erpnext/payroll/doctype/additional_salary/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/doctype/additional_salary/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/doctype/additional_salary/additional_salary.js b/erpnext/payroll/doctype/additional_salary/additional_salary.js
deleted file mode 100644
index 24ffce5..0000000
--- a/erpnext/payroll/doctype/additional_salary/additional_salary.js
+++ /dev/null
@@ -1,84 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Additional Salary', {
-	setup: function(frm) {
-		frm.add_fetch("salary_component", "deduct_full_tax_on_selected_payroll_date", "deduct_full_tax_on_selected_payroll_date");
-
-		frm.set_query("employee", function() {
-			return {
-				filters: {
-					company: frm.doc.company
-				}
-			};
-		});
-	},
-
-	onload: function(frm) {
-		if (frm.doc.type) {
-			frm.trigger('set_component_query');
-		}
-	},
-
-	employee: function(frm) {
-		if (frm.doc.employee) {
-			frappe.run_serially([
-				() => 	frm.trigger('get_employee_currency'),
-				() => 	frm.trigger('set_company')
-			]);
-		} else {
-			frm.set_value("company", null);
-		}
-	},
-
-	set_company: function(frm) {
-		frappe.call({
-			method: "frappe.client.get_value",
-			args: {
-				doctype: "Employee",
-				fieldname: "company",
-				filters: {
-					name: frm.doc.employee
-				}
-			},
-			callback: function(data) {
-				if (data.message) {
-					frm.set_value("company", data.message.company);
-				}
-			}
-		});
-	},
-
-	company: function(frm) {
-		frm.set_value("type", "");
-		frm.trigger('set_component_query');
-	},
-
-	set_component_query: function(frm) {
-		if (!frm.doc.company) return;
-		let filters = {company: frm.doc.company};
-		if (frm.doc.type) {
-			filters.type = frm.doc.type;
-		}
-		frm.set_query("salary_component", function() {
-			return {
-				filters: filters
-			};
-		});
-	},
-
-	get_employee_currency: function(frm) {
-		frappe.call({
-			method: "erpnext.payroll.doctype.salary_structure_assignment.salary_structure_assignment.get_employee_currency",
-			args: {
-				employee: frm.doc.employee,
-			},
-			callback: function(r) {
-				if (r.message) {
-					frm.set_value('currency', r.message);
-					frm.refresh_fields();
-				}
-			}
-		});
-	},
-});
diff --git a/erpnext/payroll/doctype/additional_salary/additional_salary.json b/erpnext/payroll/doctype/additional_salary/additional_salary.json
deleted file mode 100644
index 9c897a7..0000000
--- a/erpnext/payroll/doctype/additional_salary/additional_salary.json
+++ /dev/null
@@ -1,249 +0,0 @@
-{
- "actions": [],
- "allow_import": 1,
- "autoname": "naming_series:",
- "creation": "2018-05-10 12:04:08.396461",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "employee_details_section",
-  "naming_series",
-  "employee",
-  "employee_name",
-  "column_break_5",
-  "company",
-  "department",
-  "salary_details_section",
-  "salary_component",
-  "type",
-  "currency",
-  "amount",
-  "column_break_13",
-  "is_recurring",
-  "payroll_date",
-  "from_date",
-  "to_date",
-  "properties_and_references_section",
-  "deduct_full_tax_on_selected_payroll_date",
-  "ref_doctype",
-  "ref_docname",
-  "column_break_22",
-  "overwrite_salary_structure_amount",
-  "amended_from"
- ],
- "fields": [
-  {
-   "fieldname": "naming_series",
-   "fieldtype": "Select",
-   "label": "Series",
-   "options": "HR-ADS-.YY.-.MM.-",
-   "reqd": 1
-  },
-  {
-   "fieldname": "employee",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Employee",
-   "options": "Employee",
-   "reqd": 1,
-   "search_index": 1
-  },
-  {
-   "fieldname": "salary_component",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Salary Component",
-   "options": "Salary Component",
-   "reqd": 1,
-   "search_index": 1
-  },
-  {
-   "fieldname": "amount",
-   "fieldtype": "Currency",
-   "in_list_view": 1,
-   "label": "Amount",
-   "options": "currency",
-   "reqd": 1
-  },
-  {
-   "default": "1",
-   "fieldname": "overwrite_salary_structure_amount",
-   "fieldtype": "Check",
-   "label": "Overwrite Salary Structure Amount"
-  },
-  {
-   "default": "0",
-   "fieldname": "deduct_full_tax_on_selected_payroll_date",
-   "fieldtype": "Check",
-   "label": "Deduct Full Tax on Selected Payroll Date"
-  },
-  {
-   "fieldname": "column_break_5",
-   "fieldtype": "Column Break"
-  },
-  {
-   "depends_on": "eval:(doc.is_recurring==0)",
-   "description": "The date on which Salary Component with Amount will contribute for Earnings/Deduction in Salary Slip. ",
-   "fieldname": "payroll_date",
-   "fieldtype": "Date",
-   "in_list_view": 1,
-   "label": "Payroll Date",
-   "mandatory_depends_on": "eval:(doc.is_recurring==0)",
-   "search_index": 1
-  },
-  {
-   "fetch_from": "employee.employee_name",
-   "fieldname": "employee_name",
-   "fieldtype": "Data",
-   "in_list_view": 1,
-   "label": "Employee Name",
-   "read_only": 1
-  },
-  {
-   "fetch_from": "employee.department",
-   "fieldname": "department",
-   "fieldtype": "Link",
-   "label": "Department",
-   "options": "Department",
-   "read_only": 1
-  },
-  {
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "label": "Company",
-   "options": "Company",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "salary_component.type",
-   "fieldname": "type",
-   "fieldtype": "Data",
-   "label": "Salary Component Type",
-   "read_only": 1
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "Additional Salary",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "default": "0",
-   "fieldname": "is_recurring",
-   "fieldtype": "Check",
-   "label": "Is Recurring"
-  },
-  {
-   "depends_on": "eval:(doc.is_recurring==1)",
-   "fieldname": "from_date",
-   "fieldtype": "Date",
-   "label": "From Date",
-   "mandatory_depends_on": "eval:(doc.is_recurring==1)"
-  },
-  {
-   "depends_on": "eval:(doc.is_recurring==1)",
-   "fieldname": "to_date",
-   "fieldtype": "Date",
-   "label": "To Date",
-   "mandatory_depends_on": "eval:(doc.is_recurring==1)"
-  },
-  {
-   "fieldname": "ref_doctype",
-   "fieldtype": "Link",
-   "label": "Reference Document Type",
-   "options": "DocType",
-   "read_only": 1
-  },
-  {
-   "fieldname": "ref_docname",
-   "fieldtype": "Dynamic Link",
-   "label": "Reference Document",
-   "no_copy": 1,
-   "options": "ref_doctype",
-   "read_only": 1
-  },
-  {
-   "depends_on": "eval:(doc.docstatus==1 || doc.employee)",
-   "fieldname": "currency",
-   "fieldtype": "Link",
-   "label": "Currency",
-   "options": "Currency",
-   "print_hide": 1,
-   "read_only": 1,
-   "reqd": 1
-  },
-  {
-   "fieldname": "employee_details_section",
-   "fieldtype": "Section Break",
-   "label": "Employee Details"
-  },
-  {
-   "fieldname": "column_break_13",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "column_break_22",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "salary_details_section",
-   "fieldtype": "Section Break",
-   "label": "Salary Details"
-  },
-  {
-   "fieldname": "properties_and_references_section",
-   "fieldtype": "Section Break",
-   "label": "Properties and References"
-  }
- ],
- "is_submittable": 1,
- "links": [],
- "modified": "2022-01-19 12:56:51.765353",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Additional Salary",
- "naming_rule": "By \"Naming Series\" field",
- "owner": "Administrator",
- "permissions": [
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  }
- ],
- "search_fields": "employee_name",
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": [],
- "title_field": "employee_name",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/additional_salary/additional_salary.py b/erpnext/payroll/doctype/additional_salary/additional_salary.py
deleted file mode 100644
index 18bd3b7..0000000
--- a/erpnext/payroll/doctype/additional_salary/additional_salary.py
+++ /dev/null
@@ -1,213 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _, bold
-from frappe.model.document import Document
-from frappe.utils import comma_and, date_diff, formatdate, getdate
-
-from erpnext.hr.utils import validate_active_employee
-
-
-class AdditionalSalary(Document):
-	def on_submit(self):
-		self.update_return_amount_in_employee_advance()
-		self.update_employee_referral()
-
-	def on_cancel(self):
-		self.update_return_amount_in_employee_advance()
-		self.update_employee_referral(cancel=True)
-
-	def validate(self):
-		validate_active_employee(self.employee)
-		self.validate_dates()
-		self.validate_salary_structure()
-		self.validate_recurring_additional_salary_overlap()
-		self.validate_employee_referral()
-
-		if self.amount < 0:
-			frappe.throw(_("Amount should not be less than zero"))
-
-	def validate_salary_structure(self):
-		if not frappe.db.exists("Salary Structure Assignment", {"employee": self.employee}):
-			frappe.throw(
-				_("There is no Salary Structure assigned to {0}. First assign a Salary Stucture.").format(
-					self.employee
-				)
-			)
-
-	def validate_recurring_additional_salary_overlap(self):
-		if self.is_recurring:
-			additional_salaries = frappe.db.sql(
-				"""
-				SELECT
-					name
-				FROM `tabAdditional Salary`
-				WHERE
-					employee=%s
-					AND name <> %s
-					AND docstatus=1
-					AND is_recurring=1
-					AND salary_component = %s
-					AND to_date >= %s
-					AND from_date <= %s""",
-				(self.employee, self.name, self.salary_component, self.from_date, self.to_date),
-				as_dict=1,
-			)
-
-			additional_salaries = [salary.name for salary in additional_salaries]
-
-			if additional_salaries and len(additional_salaries):
-				frappe.throw(
-					_(
-						"Additional Salary: {0} already exist for Salary Component: {1} for period {2} and {3}"
-					).format(
-						bold(comma_and(additional_salaries)),
-						bold(self.salary_component),
-						bold(formatdate(self.from_date)),
-						bold(formatdate(self.to_date)),
-					)
-				)
-
-	def validate_dates(self):
-		date_of_joining, relieving_date = frappe.db.get_value(
-			"Employee", self.employee, ["date_of_joining", "relieving_date"]
-		)
-
-		if getdate(self.from_date) > getdate(self.to_date):
-			frappe.throw(_("From Date can not be greater than To Date."))
-
-		if date_of_joining:
-			if self.payroll_date and getdate(self.payroll_date) < getdate(date_of_joining):
-				frappe.throw(_("Payroll date can not be less than employee's joining date."))
-			elif self.from_date and getdate(self.from_date) < getdate(date_of_joining):
-				frappe.throw(_("From date can not be less than employee's joining date."))
-
-		if relieving_date:
-			if self.to_date and getdate(self.to_date) > getdate(relieving_date):
-				frappe.throw(_("To date can not be greater than employee's relieving date."))
-			if self.payroll_date and getdate(self.payroll_date) > getdate(relieving_date):
-				frappe.throw(_("Payroll date can not be greater than employee's relieving date."))
-
-	def validate_employee_referral(self):
-		if self.ref_doctype == "Employee Referral":
-			referral_details = frappe.db.get_value(
-				"Employee Referral",
-				self.ref_docname,
-				["is_applicable_for_referral_bonus", "status"],
-				as_dict=1,
-			)
-
-			if not referral_details.is_applicable_for_referral_bonus:
-				frappe.throw(
-					_("Employee Referral {0} is not applicable for referral bonus.").format(self.ref_docname)
-				)
-
-			if self.type == "Deduction":
-				frappe.throw(_("Earning Salary Component is required for Employee Referral Bonus."))
-
-			if referral_details.status != "Accepted":
-				frappe.throw(
-					_(
-						"Additional Salary for referral bonus can only be created against Employee Referral with status {0}"
-					).format(frappe.bold("Accepted"))
-				)
-
-	def update_return_amount_in_employee_advance(self):
-		if self.ref_doctype == "Employee Advance" and self.ref_docname:
-			return_amount = frappe.db.get_value("Employee Advance", self.ref_docname, "return_amount")
-
-			if self.docstatus == 2:
-				return_amount -= self.amount
-			else:
-				return_amount += self.amount
-
-			frappe.db.set_value("Employee Advance", self.ref_docname, "return_amount", return_amount)
-			advance = frappe.get_doc("Employee Advance", self.ref_docname)
-			advance.set_status(update=True)
-
-	def update_employee_referral(self, cancel=False):
-		if self.ref_doctype == "Employee Referral":
-			status = "Unpaid" if cancel else "Paid"
-			frappe.db.set_value("Employee Referral", self.ref_docname, "referral_payment_status", status)
-
-	def get_amount(self, sal_start_date, sal_end_date):
-		start_date = getdate(sal_start_date)
-		end_date = getdate(sal_end_date)
-		total_days = date_diff(getdate(self.to_date), getdate(self.from_date)) + 1
-		amount_per_day = self.amount / total_days
-		if getdate(sal_start_date) <= getdate(self.from_date):
-			start_date = getdate(self.from_date)
-		if getdate(sal_end_date) > getdate(self.to_date):
-			end_date = getdate(self.to_date)
-		no_of_days = date_diff(getdate(end_date), getdate(start_date)) + 1
-		return amount_per_day * no_of_days
-
-
-@frappe.whitelist()
-def get_additional_salaries(employee, start_date, end_date, component_type):
-	from frappe.query_builder import Criterion
-
-	comp_type = "Earning" if component_type == "earnings" else "Deduction"
-
-	additional_sal = frappe.qb.DocType("Additional Salary")
-	component_field = additional_sal.salary_component.as_("component")
-	overwrite_field = additional_sal.overwrite_salary_structure_amount.as_("overwrite")
-
-	additional_salary_list = (
-		frappe.qb.from_(additional_sal)
-		.select(
-			additional_sal.name,
-			component_field,
-			additional_sal.type,
-			additional_sal.amount,
-			additional_sal.is_recurring,
-			overwrite_field,
-			additional_sal.deduct_full_tax_on_selected_payroll_date,
-		)
-		.where(
-			(additional_sal.employee == employee)
-			& (additional_sal.docstatus == 1)
-			& (additional_sal.type == comp_type)
-		)
-		.where(
-			Criterion.any(
-				[
-					Criterion.all(
-						[  # is recurring and additional salary dates fall within the payroll period
-							additional_sal.is_recurring == 1,
-							additional_sal.from_date <= end_date,
-							additional_sal.to_date >= end_date,
-						]
-					),
-					Criterion.all(
-						[  # is not recurring and additional salary's payroll date falls within the payroll period
-							additional_sal.is_recurring == 0,
-							additional_sal.payroll_date[start_date:end_date],
-						]
-					),
-				]
-			)
-		)
-		.run(as_dict=True)
-	)
-
-	additional_salaries = []
-	components_to_overwrite = []
-
-	for d in additional_salary_list:
-		if d.overwrite:
-			if d.component in components_to_overwrite:
-				frappe.throw(
-					_(
-						"Multiple Additional Salaries with overwrite property exist for Salary Component {0} between {1} and {2}."
-					).format(frappe.bold(d.component), start_date, end_date),
-					title=_("Error"),
-				)
-
-			components_to_overwrite.append(d.component)
-
-		additional_salaries.append(d)
-
-	return additional_salaries
diff --git a/erpnext/payroll/doctype/additional_salary/test_additional_salary.py b/erpnext/payroll/doctype/additional_salary/test_additional_salary.py
deleted file mode 100644
index bd73936..0000000
--- a/erpnext/payroll/doctype/additional_salary/test_additional_salary.py
+++ /dev/null
@@ -1,106 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-import frappe
-from frappe.tests.utils import FrappeTestCase
-from frappe.utils import add_days, add_months, nowdate
-
-import erpnext
-from erpnext.hr.doctype.employee.test_employee import make_employee
-from erpnext.payroll.doctype.salary_component.test_salary_component import create_salary_component
-from erpnext.payroll.doctype.salary_slip.test_salary_slip import (
-	make_employee_salary_slip,
-	setup_test,
-)
-from erpnext.payroll.doctype.salary_structure.test_salary_structure import make_salary_structure
-
-
-class TestAdditionalSalary(FrappeTestCase):
-	def setUp(self):
-		setup_test()
-
-	def test_recurring_additional_salary(self):
-		amount = 0
-		salary_component = None
-		emp_id = make_employee("test_additional@salary.com")
-		frappe.db.set_value("Employee", emp_id, "relieving_date", add_days(nowdate(), 1800))
-		salary_structure = make_salary_structure(
-			"Test Salary Structure Additional Salary", "Monthly", employee=emp_id
-		)
-		add_sal = get_additional_salary(emp_id)
-
-		ss = make_employee_salary_slip(
-			"test_additional@salary.com", "Monthly", salary_structure=salary_structure.name
-		)
-		for earning in ss.earnings:
-			if earning.salary_component == "Recurring Salary Component":
-				amount = earning.amount
-				salary_component = earning.salary_component
-				break
-
-		self.assertEqual(amount, add_sal.amount)
-		self.assertEqual(salary_component, add_sal.salary_component)
-
-	def test_non_recurring_additional_salary(self):
-		amount = 0
-		salary_component = None
-		date = nowdate()
-
-		emp_id = make_employee("test_additional@salary.com")
-		frappe.db.set_value("Employee", emp_id, "relieving_date", add_days(date, 1800))
-		salary_structure = make_salary_structure(
-			"Test Salary Structure Additional Salary", "Monthly", employee=emp_id
-		)
-		add_sal = get_additional_salary(emp_id, recurring=False, payroll_date=date)
-
-		ss = make_employee_salary_slip(
-			"test_additional@salary.com", "Monthly", salary_structure=salary_structure.name
-		)
-
-		amount, salary_component = None, None
-		for earning in ss.earnings:
-			if earning.salary_component == "Recurring Salary Component":
-				amount = earning.amount
-				salary_component = earning.salary_component
-				break
-
-		self.assertEqual(amount, add_sal.amount)
-		self.assertEqual(salary_component, add_sal.salary_component)
-
-		# should not show up in next months
-		ss.posting_date = add_months(date, 1)
-		ss.start_date = ss.end_date = None
-		ss.earnings = []
-		ss.deductions = []
-		ss.save()
-
-		amount, salary_component = None, None
-		for earning in ss.earnings:
-			if earning.salary_component == "Recurring Salary Component":
-				amount = earning.amount
-				salary_component = earning.salary_component
-				break
-
-		self.assertIsNone(amount)
-		self.assertIsNone(salary_component)
-
-
-def get_additional_salary(emp_id, recurring=True, payroll_date=None):
-	create_salary_component("Recurring Salary Component")
-	add_sal = frappe.new_doc("Additional Salary")
-	add_sal.employee = emp_id
-	add_sal.salary_component = "Recurring Salary Component"
-
-	add_sal.is_recurring = 1 if recurring else 0
-	add_sal.from_date = add_days(nowdate(), -50)
-	add_sal.to_date = add_days(nowdate(), 180)
-	add_sal.payroll_date = payroll_date
-
-	add_sal.amount = 5000
-	add_sal.currency = erpnext.get_default_currency()
-	add_sal.save()
-	add_sal.submit()
-
-	return add_sal
diff --git a/erpnext/payroll/doctype/employee_benefit_application/__init__.py b/erpnext/payroll/doctype/employee_benefit_application/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/doctype/employee_benefit_application/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/doctype/employee_benefit_application/employee_benefit_application.js b/erpnext/payroll/doctype/employee_benefit_application/employee_benefit_application.js
deleted file mode 100644
index 6756cd9..0000000
--- a/erpnext/payroll/doctype/employee_benefit_application/employee_benefit_application.js
+++ /dev/null
@@ -1,127 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Employee Benefit Application', {
-	employee: function(frm) {
-		if (frm.doc.employee) {
-			frappe.run_serially([
-				() => 	frm.trigger('get_employee_currency'),
-				() => 	frm.trigger('set_earning_component')
-			]);
-		}
-		var method, args;
-		if(frm.doc.employee && frm.doc.date && frm.doc.payroll_period){
-			method = "erpnext.payroll.doctype.employee_benefit_application.employee_benefit_application.get_max_benefits_remaining";
-			args = {
-				employee: frm.doc.employee,
-				on_date: frm.doc.date,
-				payroll_period: frm.doc.payroll_period
-			};
-			get_max_benefits(frm, method, args);
-		}
-		else if(frm.doc.employee && frm.doc.date){
-			method = "erpnext.payroll.doctype.employee_benefit_application.employee_benefit_application.get_max_benefits";
-			args = {
-				employee: frm.doc.employee,
-				on_date: frm.doc.date
-			};
-			get_max_benefits(frm, method, args);
-		}
-	},
-
-	date: function(frm) {
-		frm.trigger('set_earning_component');
-	},
-
-	set_earning_component: function(frm) {
-		if(!frm.doc.employee && !frm.doc.date) return;
-		frm.set_query("earning_component", "employee_benefits", function() {
-			return {
-				query : "erpnext.payroll.doctype.employee_benefit_application.employee_benefit_application.get_earning_components",
-				filters: {date: frm.doc.date, employee: frm.doc.employee}
-			};
-		});
-	},
-
-	get_employee_currency: function(frm) {
-		if (frm.doc.employee) {
-			frappe.call({
-				method: "erpnext.payroll.doctype.salary_structure_assignment.salary_structure_assignment.get_employee_currency",
-				args: {
-					employee: frm.doc.employee,
-				},
-				callback: function(r) {
-					if (r.message) {
-						frm.set_value('currency', r.message);
-						frm.refresh_fields();
-					}
-				}
-			});
-		}
-	},
-
-	payroll_period: function(frm) {
-		var method, args;
-		if (frm.doc.employee && frm.doc.date && frm.doc.payroll_period) {
-			method = "erpnext.payroll.doctype.employee_benefit_application.employee_benefit_application.get_max_benefits_remaining";
-			args = {
-				employee: frm.doc.employee,
-				on_date: frm.doc.date,
-				payroll_period: frm.doc.payroll_period
-			};
-			get_max_benefits(frm, method, args);
-		}
-	},
-	max_benefits: function(frm) {
-		calculate_all(frm.doc);
-	}
-});
-
-var get_max_benefits=function(frm, method, args) {
-	frappe.call({
-		method: method,
-		args: args,
-		callback: function (data) {
-			if (!data.exc) {
-				if (data.message) {
-					frm.set_value("max_benefits", data.message);
-				} else {
-					frm.set_value("max_benefits", 0);
-				}
-			}
-			frm.refresh_fields();
-		}
-	});
-};
-
-frappe.ui.form.on("Employee Benefit Application Detail",{
-	amount:  function(frm) {
-		calculate_all(frm.doc);
-	},
-	employee_benefits_remove: function(frm) {
-		calculate_all(frm.doc);
-	}
-});
-
-var calculate_all = function(doc) {
-	var tbl = doc.employee_benefits || [];
-	var pro_rata_dispensed_amount = 0;
-	var total_amount = 0;
-	if (doc.max_benefits === 0) {
-		doc.employee_benefits = [];
-	} else {
-		for (var i = 0; i < tbl.length; i++) {
-			if (cint(tbl[i].amount) > 0) {
-				total_amount += flt(tbl[i].amount);
-			}
-			if (tbl[i].pay_against_benefit_claim != 1) {
-				pro_rata_dispensed_amount += flt(tbl[i].amount);
-			}
-		}
-	}
-
-	doc.total_amount = total_amount;
-	doc.remaining_benefit = doc.max_benefits - total_amount;
-	doc.pro_rata_dispensed_amount = pro_rata_dispensed_amount;
-	refresh_many(['pro_rata_dispensed_amount', 'total_amount','remaining_benefit']);
-};
diff --git a/erpnext/payroll/doctype/employee_benefit_application/employee_benefit_application.json b/erpnext/payroll/doctype/employee_benefit_application/employee_benefit_application.json
deleted file mode 100644
index 2e4b64e..0000000
--- a/erpnext/payroll/doctype/employee_benefit_application/employee_benefit_application.json
+++ /dev/null
@@ -1,222 +0,0 @@
-{
- "actions": [],
- "allow_import": 1,
- "allow_rename": 1,
- "autoname": "HR-BEN-APP-.YY.-.MM.-.#####",
- "creation": "2018-04-13 16:31:39.190787",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "employee",
-  "employee_name",
-  "currency",
-  "max_benefits",
-  "remaining_benefit",
-  "column_break_2",
-  "date",
-  "payroll_period",
-  "department",
-  "company",
-  "amended_from",
-  "section_break_4",
-  "employee_benefits",
-  "totals",
-  "total_amount",
-  "column_break",
-  "pro_rata_dispensed_amount"
- ],
- "fields": [
-  {
-   "fieldname": "employee",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Employee",
-   "options": "Employee",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "employee.employee_name",
-   "fieldname": "employee_name",
-   "fieldtype": "Data",
-   "label": "Employee Name",
-   "read_only": 1
-  },
-  {
-   "fieldname": "max_benefits",
-   "fieldtype": "Currency",
-   "label": "Max Benefits (Yearly)",
-   "options": "currency",
-   "read_only": 1
-  },
-  {
-   "fieldname": "remaining_benefit",
-   "fieldtype": "Currency",
-   "label": "Remaining Benefits (Yearly)",
-   "options": "currency",
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break_2",
-   "fieldtype": "Column Break"
-  },
-  {
-   "default": "Today",
-   "fieldname": "date",
-   "fieldtype": "Date",
-   "label": "Date",
-   "reqd": 1
-  },
-  {
-   "fieldname": "payroll_period",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Payroll Period",
-   "options": "Payroll Period",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "employee.department",
-   "fieldname": "department",
-   "fieldtype": "Link",
-   "label": "Department",
-   "options": "Department",
-   "read_only": 1
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "Employee Benefit Application",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "fieldname": "section_break_4",
-   "fieldtype": "Section Break",
-   "label": "Benefits Applied"
-  },
-  {
-   "fieldname": "employee_benefits",
-   "fieldtype": "Table",
-   "label": "Employee Benefits",
-   "options": "Employee Benefit Application Detail",
-   "reqd": 1
-  },
-  {
-   "fieldname": "totals",
-   "fieldtype": "Section Break",
-   "label": "Totals"
-  },
-  {
-   "fieldname": "total_amount",
-   "fieldtype": "Currency",
-   "label": "Total Amount",
-   "options": "currency",
-   "read_only": 1
-  },
-  {
-   "fieldname": "pro_rata_dispensed_amount",
-   "fieldtype": "Currency",
-   "label": "Dispensed Amount (Pro-rated)",
-   "options": "currency",
-   "read_only": 1
-  },
-  {
-   "depends_on": "eval:(doc.docstatus==1 || doc.employee)",
-   "fieldname": "currency",
-   "fieldtype": "Link",
-   "label": "Currency",
-   "options": "Currency",
-   "read_only": 1,
-   "reqd": 1
-  },
-  {
-   "fetch_from": "employee.company",
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "label": "Company",
-   "options": "Company",
-   "reqd": 1
-  },
-  {
-   "fieldname": "column_break",
-   "fieldtype": "Column Break"
-  }
- ],
- "is_submittable": 1,
- "links": [],
- "modified": "2022-01-19 12:58:31.664468",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Employee Benefit Application",
- "naming_rule": "Expression (old style)",
- "owner": "Administrator",
- "permissions": [
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "Employee",
-   "share": 1,
-   "write": 1
-  }
- ],
- "quick_entry": 1,
- "search_fields": "employee_name",
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": [],
- "title_field": "employee_name",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/employee_benefit_application/employee_benefit_application.py b/erpnext/payroll/doctype/employee_benefit_application/employee_benefit_application.py
deleted file mode 100644
index 8df1bb6..0000000
--- a/erpnext/payroll/doctype/employee_benefit_application/employee_benefit_application.py
+++ /dev/null
@@ -1,371 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.utils import add_days, cstr, date_diff, flt, getdate, rounded
-
-from erpnext.hr.utils import (
-	get_holiday_dates_for_employee,
-	get_previous_claimed_amount,
-	get_sal_slip_total_benefit_given,
-	validate_active_employee,
-)
-from erpnext.payroll.doctype.payroll_period.payroll_period import (
-	get_payroll_period_days,
-	get_period_factor,
-)
-from erpnext.payroll.doctype.salary_structure_assignment.salary_structure_assignment import (
-	get_assigned_salary_structure,
-)
-
-
-class EmployeeBenefitApplication(Document):
-	def validate(self):
-		validate_active_employee(self.employee)
-		self.validate_duplicate_on_payroll_period()
-		if not self.max_benefits:
-			self.max_benefits = flt(
-				get_max_benefits_remaining(self.employee, self.date, self.payroll_period),
-				self.precision("max_benefits"),
-			)
-		if self.max_benefits and self.max_benefits > 0:
-			self.validate_max_benefit_for_component()
-			self.validate_prev_benefit_claim()
-			if self.remaining_benefit and self.remaining_benefit > 0:
-				self.validate_remaining_benefit_amount()
-		else:
-			frappe.throw(
-				_("As per your assigned Salary Structure you cannot apply for benefits").format(self.employee)
-			)
-
-	def validate_prev_benefit_claim(self):
-		if self.employee_benefits:
-			for benefit in self.employee_benefits:
-				if benefit.pay_against_benefit_claim == 1:
-					payroll_period = frappe.get_doc("Payroll Period", self.payroll_period)
-					benefit_claimed = get_previous_claimed_amount(
-						self.employee, payroll_period, component=benefit.earning_component
-					)
-					benefit_given = get_sal_slip_total_benefit_given(
-						self.employee, payroll_period, component=benefit.earning_component
-					)
-					benefit_claim_remining = benefit_claimed - benefit_given
-					if benefit_claimed > 0 and benefit_claim_remining > benefit.amount:
-						frappe.throw(
-							_(
-								"An amount of {0} already claimed for the component {1}, set the amount equal or greater than {2}"
-							).format(
-								benefit_claimed, benefit.earning_component, benefit_claim_remining
-							)
-						)
-
-	def validate_remaining_benefit_amount(self):
-		# check salary structure earnings have flexi component (sum of max_benefit_amount)
-		# without pro-rata which satisfy the remaining_benefit
-		# else pro-rata component for the amount
-		# again comes the same validation and satisfy or throw
-		benefit_components = []
-		if self.employee_benefits:
-			for employee_benefit in self.employee_benefits:
-				benefit_components.append(employee_benefit.earning_component)
-		salary_struct_name = get_assigned_salary_structure(self.employee, self.date)
-		if salary_struct_name:
-			non_pro_rata_amount = 0
-			pro_rata_amount = 0
-			salary_structure = frappe.get_doc("Salary Structure", salary_struct_name)
-			if salary_structure.earnings:
-				for earnings in salary_structure.earnings:
-					if earnings.is_flexible_benefit == 1 and earnings.salary_component not in benefit_components:
-						pay_against_benefit_claim, max_benefit_amount = frappe.db.get_value(
-							"Salary Component",
-							earnings.salary_component,
-							["pay_against_benefit_claim", "max_benefit_amount"],
-						)
-						if pay_against_benefit_claim != 1:
-							pro_rata_amount += max_benefit_amount
-						else:
-							non_pro_rata_amount += max_benefit_amount
-
-			if pro_rata_amount == 0 and non_pro_rata_amount == 0:
-				frappe.throw(
-					_("Please add the remaining benefits {0} to any of the existing component").format(
-						self.remaining_benefit
-					)
-				)
-			elif non_pro_rata_amount > 0 and non_pro_rata_amount < rounded(self.remaining_benefit):
-				frappe.throw(
-					_(
-						"You can claim only an amount of {0}, the rest amount {1} should be in the application as pro-rata component"
-					).format(non_pro_rata_amount, self.remaining_benefit - non_pro_rata_amount)
-				)
-			elif non_pro_rata_amount == 0:
-				frappe.throw(
-					_("Please add the remaining benefits {0} to the application as pro-rata component").format(
-						self.remaining_benefit
-					)
-				)
-
-	def validate_max_benefit_for_component(self):
-		if self.employee_benefits:
-			max_benefit_amount = 0
-			for employee_benefit in self.employee_benefits:
-				self.validate_max_benefit(employee_benefit.earning_component)
-				max_benefit_amount += flt(employee_benefit.amount)
-			if max_benefit_amount > self.max_benefits:
-				frappe.throw(
-					_("Maximum benefit amount of employee {0} exceeds {1}").format(
-						self.employee, self.max_benefits
-					)
-				)
-
-	def validate_max_benefit(self, earning_component_name):
-		max_benefit_amount = frappe.db.get_value(
-			"Salary Component", earning_component_name, "max_benefit_amount"
-		)
-		benefit_amount = 0
-		for employee_benefit in self.employee_benefits:
-			if employee_benefit.earning_component == earning_component_name:
-				benefit_amount += flt(employee_benefit.amount)
-
-		prev_sal_slip_flexi_amount = get_sal_slip_total_benefit_given(
-			self.employee, frappe.get_doc("Payroll Period", self.payroll_period), earning_component_name
-		)
-		benefit_amount += prev_sal_slip_flexi_amount
-		if rounded(benefit_amount, 2) > max_benefit_amount:
-			frappe.throw(
-				_("Maximum benefit amount of component {0} exceeds {1}").format(
-					earning_component_name, max_benefit_amount
-				)
-			)
-
-	def validate_duplicate_on_payroll_period(self):
-		application = frappe.db.exists(
-			"Employee Benefit Application",
-			{"employee": self.employee, "payroll_period": self.payroll_period, "docstatus": 1},
-		)
-		if application:
-			frappe.throw(
-				_("Employee {0} already submited an apllication {1} for the payroll period {2}").format(
-					self.employee, application, self.payroll_period
-				)
-			)
-
-
-@frappe.whitelist()
-def get_max_benefits(employee, on_date):
-	sal_struct = get_assigned_salary_structure(employee, on_date)
-	if sal_struct:
-		max_benefits = frappe.db.get_value("Salary Structure", sal_struct, "max_benefits")
-		if max_benefits > 0:
-			return max_benefits
-	return False
-
-
-@frappe.whitelist()
-def get_max_benefits_remaining(employee, on_date, payroll_period):
-	max_benefits = get_max_benefits(employee, on_date)
-	if max_benefits and max_benefits > 0:
-		have_depends_on_payment_days = False
-		per_day_amount_total = 0
-		payroll_period_days = get_payroll_period_days(on_date, on_date, employee)[1]
-		payroll_period_obj = frappe.get_doc("Payroll Period", payroll_period)
-
-		# Get all salary slip flexi amount in the payroll period
-		prev_sal_slip_flexi_total = get_sal_slip_total_benefit_given(employee, payroll_period_obj)
-
-		if prev_sal_slip_flexi_total > 0:
-			# Check salary structure hold depends_on_payment_days component
-			# If yes then find the amount per day of each component and find the sum
-			sal_struct_name = get_assigned_salary_structure(employee, on_date)
-			if sal_struct_name:
-				sal_struct = frappe.get_doc("Salary Structure", sal_struct_name)
-				for sal_struct_row in sal_struct.get("earnings"):
-					salary_component = frappe.get_doc("Salary Component", sal_struct_row.salary_component)
-					if (
-						salary_component.depends_on_payment_days == 1
-						and salary_component.pay_against_benefit_claim != 1
-					):
-						have_depends_on_payment_days = True
-						benefit_amount = get_benefit_amount_based_on_pro_rata(
-							sal_struct, salary_component.max_benefit_amount
-						)
-						amount_per_day = benefit_amount / payroll_period_days
-						per_day_amount_total += amount_per_day
-
-			# Then the sum multiply with the no of lwp in that period
-			# Include that amount to the prev_sal_slip_flexi_total to get the actual
-			if have_depends_on_payment_days and per_day_amount_total > 0:
-				holidays = get_holiday_dates_for_employee(employee, payroll_period_obj.start_date, on_date)
-				working_days = date_diff(on_date, payroll_period_obj.start_date) + 1
-				leave_days = calculate_lwp(employee, payroll_period_obj.start_date, holidays, working_days)
-				leave_days_amount = leave_days * per_day_amount_total
-				prev_sal_slip_flexi_total += leave_days_amount
-
-			return max_benefits - prev_sal_slip_flexi_total
-	return max_benefits
-
-
-def calculate_lwp(employee, start_date, holidays, working_days):
-	lwp = 0
-	holidays = "','".join(holidays)
-
-	for d in range(working_days):
-		date = add_days(cstr(getdate(start_date)), d)
-
-		LeaveApplication = frappe.qb.DocType("Leave Application")
-		LeaveType = frappe.qb.DocType("Leave Type")
-
-		is_half_day = (
-			frappe.qb.terms.Case()
-			.when(
-				(
-					(LeaveApplication.half_day_date == date)
-					| (LeaveApplication.from_date == LeaveApplication.to_date)
-				),
-				LeaveApplication.half_day,
-			)
-			.else_(0)
-		).as_("is_half_day")
-
-		query = (
-			frappe.qb.from_(LeaveApplication)
-			.inner_join(LeaveType)
-			.on((LeaveType.name == LeaveApplication.leave_type))
-			.select(LeaveApplication.name, is_half_day)
-			.where(
-				(LeaveType.is_lwp == 1)
-				& (LeaveApplication.docstatus == 1)
-				& (LeaveApplication.status == "Approved")
-				& (LeaveApplication.employee == employee)
-				& ((LeaveApplication.from_date <= date) & (date <= LeaveApplication.to_date))
-			)
-		)
-
-		# if it's a holiday only include if leave type has "include holiday" enabled
-		if date in holidays:
-			query = query.where((LeaveType.include_holiday == "1"))
-		leaves = query.run(as_dict=True)
-
-		if leaves:
-			lwp += 0.5 if leaves[0].is_half_day else 1
-
-	return lwp
-
-
-def get_benefit_component_amount(
-	employee, start_date, end_date, salary_component, sal_struct, payroll_frequency, payroll_period
-):
-	if not payroll_period:
-		frappe.msgprint(
-			_("Start and end dates not in a valid Payroll Period, cannot calculate {0}").format(
-				salary_component
-			)
-		)
-		return False
-
-	# Considering there is only one application for a year
-	benefit_application = frappe.db.sql(
-		"""
-		select name
-		from `tabEmployee Benefit Application`
-		where
-			payroll_period=%(payroll_period)s
-			and employee=%(employee)s
-			and docstatus = 1
-	""",
-		{"employee": employee, "payroll_period": payroll_period.name},
-	)
-
-	current_benefit_amount = 0.0
-	component_max_benefit, depends_on_payment_days = frappe.db.get_value(
-		"Salary Component", salary_component, ["max_benefit_amount", "depends_on_payment_days"]
-	)
-
-	benefit_amount = 0
-	if benefit_application:
-		benefit_amount = frappe.db.get_value(
-			"Employee Benefit Application Detail",
-			{"parent": benefit_application[0][0], "earning_component": salary_component},
-			"amount",
-		)
-	elif component_max_benefit:
-		benefit_amount = get_benefit_amount_based_on_pro_rata(sal_struct, component_max_benefit)
-
-	current_benefit_amount = 0
-	if benefit_amount:
-		total_sub_periods = get_period_factor(
-			employee, start_date, end_date, payroll_frequency, payroll_period, depends_on_payment_days
-		)[0]
-
-		current_benefit_amount = benefit_amount / total_sub_periods
-
-	return current_benefit_amount
-
-
-def get_benefit_amount_based_on_pro_rata(sal_struct, component_max_benefit):
-	max_benefits_total = 0
-	benefit_amount = 0
-	for d in sal_struct.get("earnings"):
-		if d.is_flexible_benefit == 1:
-			component = frappe.db.get_value(
-				"Salary Component",
-				d.salary_component,
-				["max_benefit_amount", "pay_against_benefit_claim"],
-				as_dict=1,
-			)
-			if not component.pay_against_benefit_claim:
-				max_benefits_total += component.max_benefit_amount
-
-	if max_benefits_total > 0:
-		benefit_amount = sal_struct.max_benefits * component.max_benefit_amount / max_benefits_total
-		if benefit_amount > component_max_benefit:
-			benefit_amount = component_max_benefit
-
-	return benefit_amount
-
-
-@frappe.whitelist()
-@frappe.validate_and_sanitize_search_inputs
-def get_earning_components(doctype, txt, searchfield, start, page_len, filters):
-	if len(filters) < 2:
-		return {}
-
-	salary_structure = get_assigned_salary_structure(filters["employee"], filters["date"])
-
-	if salary_structure:
-		return frappe.db.sql(
-			"""
-			select salary_component
-			from `tabSalary Detail`
-			where parent = %s and is_flexible_benefit = 1
-			order by name
-		""",
-			salary_structure,
-		)
-	else:
-		frappe.throw(
-			_("Salary Structure not found for employee {0} and date {1}").format(
-				filters["employee"], filters["date"]
-			)
-		)
-
-
-@frappe.whitelist()
-def get_earning_components_max_benefits(employee, date, earning_component):
-	salary_structure = get_assigned_salary_structure(employee, date)
-	amount = frappe.db.sql(
-		"""
-			select amount
-			from `tabSalary Detail`
-			where parent = %s and is_flexible_benefit = 1
-			and salary_component = %s
-			order by name
-		""",
-		salary_structure,
-		earning_component,
-	)
-
-	return amount if amount else 0
diff --git a/erpnext/payroll/doctype/employee_benefit_application/test_employee_benefit_application.py b/erpnext/payroll/doctype/employee_benefit_application/test_employee_benefit_application.py
deleted file mode 100644
index de8f9b6..0000000
--- a/erpnext/payroll/doctype/employee_benefit_application/test_employee_benefit_application.py
+++ /dev/null
@@ -1,84 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-import frappe
-from frappe.tests.utils import FrappeTestCase
-from frappe.utils import add_days, date_diff, get_year_ending, get_year_start, getdate
-
-from erpnext.hr.doctype.employee.test_employee import make_employee
-from erpnext.hr.doctype.holiday_list.test_holiday_list import set_holiday_list
-from erpnext.hr.doctype.leave_application.test_leave_application import get_first_sunday
-from erpnext.hr.utils import get_holiday_dates_for_employee
-from erpnext.payroll.doctype.employee_benefit_application.employee_benefit_application import (
-	calculate_lwp,
-)
-from erpnext.payroll.doctype.employee_tax_exemption_declaration.test_employee_tax_exemption_declaration import (
-	create_payroll_period,
-)
-from erpnext.payroll.doctype.salary_slip.test_salary_slip import (
-	make_holiday_list,
-	make_leave_application,
-)
-from erpnext.payroll.doctype.salary_structure.salary_structure import make_salary_slip
-from erpnext.payroll.doctype.salary_structure.test_salary_structure import make_salary_structure
-
-
-class TestEmployeeBenefitApplication(FrappeTestCase):
-	def setUp(self):
-		date = getdate()
-		make_holiday_list(from_date=get_year_start(date), to_date=get_year_ending(date))
-
-	@set_holiday_list("Salary Slip Test Holiday List", "_Test Company")
-	def test_employee_benefit_application(self):
-		payroll_period = create_payroll_period(name="_Test Payroll Period 1", company="_Test Company")
-		employee = make_employee("test_employee_benefits@salary.com", company="_Test Company")
-		first_sunday = get_first_sunday("Salary Slip Test Holiday List")
-
-		leave_application = make_leave_application(
-			employee,
-			add_days(first_sunday, 1),
-			add_days(first_sunday, 3),
-			"Leave Without Pay",
-			half_day=1,
-			half_day_date=add_days(first_sunday, 1),
-			submit=True,
-		)
-
-		frappe.db.set_value("Leave Type", "Leave Without Pay", "include_holiday", 0)
-		salary_structure = make_salary_structure(
-			"Test Employee Benefits",
-			"Monthly",
-			other_details={"max_benefits": 100000},
-			include_flexi_benefits=True,
-			employee=employee,
-			payroll_period=payroll_period,
-		)
-		salary_slip = make_salary_slip(salary_structure.name, employee=employee, posting_date=getdate())
-		salary_slip.insert()
-		salary_slip.submit()
-
-		application = make_employee_benefit_application(
-			employee, payroll_period.name, date=leave_application.to_date
-		)
-		self.assertEqual(application.employee_benefits[0].max_benefit_amount, 15000)
-
-		holidays = get_holiday_dates_for_employee(employee, payroll_period.start_date, application.date)
-		working_days = date_diff(application.date, payroll_period.start_date) + 1
-		lwp = calculate_lwp(employee, payroll_period.start_date, holidays, working_days)
-		self.assertEqual(lwp, 2.5)
-
-
-def make_employee_benefit_application(employee, payroll_period, date):
-	frappe.db.delete("Employee Benefit Application")
-
-	return frappe.get_doc(
-		{
-			"doctype": "Employee Benefit Application",
-			"employee": employee,
-			"date": date,
-			"payroll_period": payroll_period,
-			"employee_benefits": [{"earning_component": "Medical Allowance", "amount": 1500}],
-		}
-	).insert()
diff --git a/erpnext/payroll/doctype/employee_benefit_application_detail/__init__.py b/erpnext/payroll/doctype/employee_benefit_application_detail/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/doctype/employee_benefit_application_detail/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/doctype/employee_benefit_application_detail/employee_benefit_application_detail.json b/erpnext/payroll/doctype/employee_benefit_application_detail/employee_benefit_application_detail.json
deleted file mode 100644
index c93d356..0000000
--- a/erpnext/payroll/doctype/employee_benefit_application_detail/employee_benefit_application_detail.json
+++ /dev/null
@@ -1,60 +0,0 @@
-{
- "actions": [],
- "creation": "2018-04-13 16:36:18.389786",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "earning_component",
-  "pay_against_benefit_claim",
-  "max_benefit_amount",
-  "amount"
- ],
- "fields": [
-  {
-   "fieldname": "earning_component",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Earning Component",
-   "options": "Salary Component",
-   "reqd": 1
-  },
-  {
-   "default": "0",
-   "fetch_from": "earning_component.pay_against_benefit_claim",
-   "fieldname": "pay_against_benefit_claim",
-   "fieldtype": "Check",
-   "label": "Pay Against Benefit Claim",
-   "read_only": 1
-  },
-  {
-   "fetch_from": "earning_component.max_benefit_amount",
-   "fieldname": "max_benefit_amount",
-   "fieldtype": "Currency",
-   "in_list_view": 1,
-   "label": "Max Benefit Amount",
-   "options": "currency",
-   "read_only": 1
-  },
-  {
-   "fieldname": "amount",
-   "fieldtype": "Currency",
-   "in_list_view": 1,
-   "label": "Amount",
-   "options": "currency",
-   "reqd": 1
-  }
- ],
- "istable": 1,
- "links": [],
- "modified": "2020-09-29 16:22:15.783854",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Employee Benefit Application Detail",
- "owner": "Administrator",
- "permissions": [],
- "quick_entry": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/employee_benefit_application_detail/employee_benefit_application_detail.py b/erpnext/payroll/doctype/employee_benefit_application_detail/employee_benefit_application_detail.py
deleted file mode 100644
index 51aa2c9..0000000
--- a/erpnext/payroll/doctype/employee_benefit_application_detail/employee_benefit_application_detail.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-# import frappe
-from frappe.model.document import Document
-
-
-class EmployeeBenefitApplicationDetail(Document):
-	pass
diff --git a/erpnext/payroll/doctype/employee_benefit_claim/__init__.py b/erpnext/payroll/doctype/employee_benefit_claim/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/doctype/employee_benefit_claim/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/doctype/employee_benefit_claim/employee_benefit_claim.js b/erpnext/payroll/doctype/employee_benefit_claim/employee_benefit_claim.js
deleted file mode 100644
index e1f8431..0000000
--- a/erpnext/payroll/doctype/employee_benefit_claim/employee_benefit_claim.js
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Employee Benefit Claim', {
-	setup: function(frm) {
-		frm.set_query("earning_component", function() {
-			return {
-				query : "erpnext.payroll.doctype.employee_benefit_application.employee_benefit_application.get_earning_components",
-				filters: {date: frm.doc.claim_date, employee: frm.doc.employee}
-			};
-		});
-	},
-	employee: function(frm) {
-		frm.set_value("earning_component", null);
-		if (frm.doc.employee) {
-			frappe.call({
-				method: "erpnext.payroll.doctype.salary_structure_assignment.salary_structure_assignment.get_employee_currency",
-				args: {
-					employee: frm.doc.employee,
-				},
-				callback: function(r) {
-					if (r.message) {
-						frm.set_value('currency', r.message);
-					}
-				}
-			});
-		}
-		if (!frm.doc.earning_component) {
-			frm.doc.max_amount_eligible = null;
-			frm.doc.claimed_amount = null;
-		}
-		frm.refresh_fields();
-	}
-});
diff --git a/erpnext/payroll/doctype/employee_benefit_claim/employee_benefit_claim.json b/erpnext/payroll/doctype/employee_benefit_claim/employee_benefit_claim.json
deleted file mode 100644
index 5deb0a5..0000000
--- a/erpnext/payroll/doctype/employee_benefit_claim/employee_benefit_claim.json
+++ /dev/null
@@ -1,218 +0,0 @@
-{
- "actions": [],
- "allow_import": 1,
- "autoname": "HR-BEN-CLM-.YY.-.MM.-.#####",
- "creation": "2018-04-13 16:43:10.386409",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "employee",
-  "employee_name",
-  "department",
-  "column_break_3",
-  "claim_date",
-  "currency",
-  "company",
-  "benefit_type_and_amount",
-  "earning_component",
-  "max_amount_eligible",
-  "pay_against_benefit_claim",
-  "claimed_amount",
-  "salary_slip",
-  "amended_from",
-  "section_break_9",
-  "attachments"
- ],
- "fields": [
-  {
-   "fieldname": "employee",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Employee",
-   "options": "Employee",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "employee.employee_name",
-   "fieldname": "employee_name",
-   "fieldtype": "Data",
-   "label": "Employee Name",
-   "read_only": 1
-  },
-  {
-   "fetch_from": "employee.department",
-   "fieldname": "department",
-   "fieldtype": "Link",
-   "label": "Department",
-   "options": "Department",
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break_3",
-   "fieldtype": "Column Break"
-  },
-  {
-   "default": "Today",
-   "fieldname": "claim_date",
-   "fieldtype": "Date",
-   "in_list_view": 1,
-   "label": "Claim Date",
-   "reqd": 1
-  },
-  {
-   "fieldname": "benefit_type_and_amount",
-   "fieldtype": "Section Break",
-   "label": "Benefit Type and Amount"
-  },
-  {
-   "fieldname": "earning_component",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Claim Benefit For",
-   "options": "Salary Component",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "earning_component.max_benefit_amount",
-   "fieldname": "max_amount_eligible",
-   "fieldtype": "Currency",
-   "label": "Max Amount Eligible",
-   "options": "currency",
-   "read_only": 1
-  },
-  {
-   "default": "0",
-   "fetch_from": "earning_component.pay_against_benefit_claim",
-   "fieldname": "pay_against_benefit_claim",
-   "fieldtype": "Check",
-   "hidden": 1,
-   "label": "Pay Against Benefit Claim",
-   "read_only": 1
-  },
-  {
-   "fieldname": "claimed_amount",
-   "fieldtype": "Currency",
-   "in_list_view": 1,
-   "label": "Claimed Amount",
-   "options": "currency",
-   "reqd": 1
-  },
-  {
-   "fieldname": "salary_slip",
-   "fieldtype": "Link",
-   "label": "Salary Slip",
-   "options": "Salary Slip",
-   "read_only": 1
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "Employee Benefit Claim",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "fieldname": "section_break_9",
-   "fieldtype": "Section Break",
-   "label": "Expense Proof"
-  },
-  {
-   "fieldname": "attachments",
-   "fieldtype": "Attach",
-   "label": "Attachments"
-  },
-  {
-   "depends_on": "eval: doc.employee",
-   "fieldname": "currency",
-   "fieldtype": "Link",
-   "label": "Currency",
-   "options": "Currency",
-   "read_only": 1,
-   "reqd": 1
-  },
-  {
-   "fetch_from": "employee.company",
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "label": "Company",
-   "options": "Company",
-   "reqd": 1
-  }
- ],
- "is_submittable": 1,
- "links": [],
- "modified": "2022-01-19 12:59:15.699118",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Employee Benefit Claim",
- "naming_rule": "Expression (old style)",
- "owner": "Administrator",
- "permissions": [
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "Employee",
-   "share": 1,
-   "write": 1
-  }
- ],
- "search_fields": "employee_name",
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": [],
- "title_field": "employee_name",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/employee_benefit_claim/employee_benefit_claim.py b/erpnext/payroll/doctype/employee_benefit_claim/employee_benefit_claim.py
deleted file mode 100644
index 6ec34b9..0000000
--- a/erpnext/payroll/doctype/employee_benefit_claim/employee_benefit_claim.py
+++ /dev/null
@@ -1,241 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.utils import flt
-
-from erpnext.hr.utils import get_previous_claimed_amount, validate_active_employee
-from erpnext.payroll.doctype.employee_benefit_application.employee_benefit_application import (
-	get_max_benefits,
-)
-from erpnext.payroll.doctype.payroll_period.payroll_period import get_payroll_period
-from erpnext.payroll.doctype.salary_structure_assignment.salary_structure_assignment import (
-	get_assigned_salary_structure,
-)
-
-
-class EmployeeBenefitClaim(Document):
-	def validate(self):
-		validate_active_employee(self.employee)
-		max_benefits = get_max_benefits(self.employee, self.claim_date)
-		if not max_benefits or max_benefits <= 0:
-			frappe.throw(_("Employee {0} has no maximum benefit amount").format(self.employee))
-		payroll_period = get_payroll_period(
-			self.claim_date, self.claim_date, frappe.db.get_value("Employee", self.employee, "company")
-		)
-		if not payroll_period:
-			frappe.throw(
-				_("{0} is not in a valid Payroll Period").format(
-					frappe.format(self.claim_date, dict(fieldtype="Date"))
-				)
-			)
-		self.validate_max_benefit_for_component(payroll_period)
-		self.validate_max_benefit_for_sal_struct(max_benefits)
-		self.validate_benefit_claim_amount(max_benefits, payroll_period)
-		if self.pay_against_benefit_claim:
-			self.validate_non_pro_rata_benefit_claim(max_benefits, payroll_period)
-
-	def validate_benefit_claim_amount(self, max_benefits, payroll_period):
-		claimed_amount = self.claimed_amount
-		claimed_amount += get_previous_claimed_amount(self.employee, payroll_period)
-		if max_benefits < claimed_amount:
-			frappe.throw(
-				_(
-					"Maximum benefit of employee {0} exceeds {1} by the sum {2} of previous claimed amount"
-				).format(self.employee, max_benefits, claimed_amount - max_benefits)
-			)
-
-	def validate_max_benefit_for_sal_struct(self, max_benefits):
-		if self.claimed_amount > max_benefits:
-			frappe.throw(
-				_("Maximum benefit amount of employee {0} exceeds {1}").format(self.employee, max_benefits)
-			)
-
-	def validate_max_benefit_for_component(self, payroll_period):
-		if self.max_amount_eligible:
-			claimed_amount = self.claimed_amount
-			claimed_amount += get_previous_claimed_amount(
-				self.employee, payroll_period, component=self.earning_component
-			)
-			if claimed_amount > self.max_amount_eligible:
-				frappe.throw(
-					_("Maximum amount eligible for the component {0} exceeds {1}").format(
-						self.earning_component, self.max_amount_eligible
-					)
-				)
-
-	def validate_non_pro_rata_benefit_claim(self, max_benefits, payroll_period):
-		claimed_amount = self.claimed_amount
-		pro_rata_amount = self.get_pro_rata_amount_in_application(payroll_period.name)
-		if not pro_rata_amount:
-			pro_rata_amount = 0
-			# Get pro_rata_amount if there is no application,
-			# get salary structure for the date and calculate pro-rata amount
-			sal_struct_name = get_assigned_salary_structure(self.employee, self.claim_date)
-			if sal_struct_name:
-				sal_struct = frappe.get_doc("Salary Structure", sal_struct_name)
-				pro_rata_amount = get_benefit_pro_rata_ratio_amount(self.employee, self.claim_date, sal_struct)
-
-		claimed_amount += get_previous_claimed_amount(self.employee, payroll_period, non_pro_rata=True)
-		if max_benefits < pro_rata_amount + claimed_amount:
-			frappe.throw(
-				_(
-					"Maximum benefit of employee {0} exceeds {1} by the sum {2} of benefit application pro-rata component amount and previous claimed amount"
-				).format(
-					self.employee, max_benefits, pro_rata_amount + claimed_amount - max_benefits
-				)
-			)
-
-	def get_pro_rata_amount_in_application(self, payroll_period):
-		application = frappe.db.exists(
-			"Employee Benefit Application",
-			{"employee": self.employee, "payroll_period": payroll_period, "docstatus": 1},
-		)
-		if application:
-			return frappe.db.get_value(
-				"Employee Benefit Application", application, "pro_rata_dispensed_amount"
-			)
-		return False
-
-
-def get_benefit_pro_rata_ratio_amount(employee, on_date, sal_struct):
-	total_pro_rata_max = 0
-	benefit_amount_total = 0
-	for sal_struct_row in sal_struct.get("earnings"):
-		try:
-			pay_against_benefit_claim, max_benefit_amount = frappe.db.get_value(
-				"Salary Component",
-				sal_struct_row.salary_component,
-				["pay_against_benefit_claim", "max_benefit_amount"],
-			)
-		except TypeError:
-			# show the error in tests?
-			frappe.throw(_("Unable to find Salary Component {0}").format(sal_struct_row.salary_component))
-		if sal_struct_row.is_flexible_benefit == 1 and pay_against_benefit_claim != 1:
-			total_pro_rata_max += max_benefit_amount
-	if total_pro_rata_max > 0:
-		for sal_struct_row in sal_struct.get("earnings"):
-			pay_against_benefit_claim, max_benefit_amount = frappe.db.get_value(
-				"Salary Component",
-				sal_struct_row.salary_component,
-				["pay_against_benefit_claim", "max_benefit_amount"],
-			)
-
-			if sal_struct_row.is_flexible_benefit == 1 and pay_against_benefit_claim != 1:
-				component_max = max_benefit_amount
-				benefit_amount = component_max * sal_struct.max_benefits / total_pro_rata_max
-				if benefit_amount > component_max:
-					benefit_amount = component_max
-				benefit_amount_total += benefit_amount
-	return benefit_amount_total
-
-
-def get_benefit_claim_amount(employee, start_date, end_date, salary_component=None):
-	query = """
-		select sum(claimed_amount)
-		from `tabEmployee Benefit Claim`
-		where
-			employee=%(employee)s
-			and docstatus = 1
-			and pay_against_benefit_claim = 1
-			and claim_date between %(start_date)s and %(end_date)s
-	"""
-
-	if salary_component:
-		query += " and earning_component = %(earning_component)s"
-
-	claimed_amount = flt(
-		frappe.db.sql(
-			query,
-			{
-				"employee": employee,
-				"start_date": start_date,
-				"end_date": end_date,
-				"earning_component": salary_component,
-			},
-		)[0][0]
-	)
-
-	return claimed_amount
-
-
-def get_total_benefit_dispensed(employee, sal_struct, sal_slip_start_date, payroll_period):
-	pro_rata_amount = 0
-	claimed_amount = 0
-	application = frappe.db.exists(
-		"Employee Benefit Application",
-		{"employee": employee, "payroll_period": payroll_period.name, "docstatus": 1},
-	)
-	if application:
-		application_obj = frappe.get_doc("Employee Benefit Application", application)
-		pro_rata_amount = (
-			application_obj.pro_rata_dispensed_amount
-			+ application_obj.max_benefits
-			- application_obj.remaining_benefit
-		)
-	else:
-		pro_rata_amount = get_benefit_pro_rata_ratio_amount(employee, sal_slip_start_date, sal_struct)
-
-	claimed_amount += get_benefit_claim_amount(
-		employee, payroll_period.start_date, payroll_period.end_date
-	)
-
-	return claimed_amount + pro_rata_amount
-
-
-def get_last_payroll_period_benefits(
-	employee, sal_slip_start_date, sal_slip_end_date, payroll_period, sal_struct
-):
-	max_benefits = get_max_benefits(employee, payroll_period.end_date)
-	if not max_benefits:
-		max_benefits = 0
-	remaining_benefit = max_benefits - get_total_benefit_dispensed(
-		employee, sal_struct, sal_slip_start_date, payroll_period
-	)
-	if remaining_benefit > 0:
-		have_remaining = True
-		# Set the remaining benefits to flexi non pro-rata component in the salary structure
-		salary_components_array = []
-		for d in sal_struct.get("earnings"):
-			if d.is_flexible_benefit == 1:
-				salary_component = frappe.get_doc("Salary Component", d.salary_component)
-				if salary_component.pay_against_benefit_claim == 1:
-					claimed_amount = get_benefit_claim_amount(
-						employee, payroll_period.start_date, sal_slip_end_date, d.salary_component
-					)
-					amount_fit_to_component = salary_component.max_benefit_amount - claimed_amount
-					if amount_fit_to_component > 0:
-						if remaining_benefit > amount_fit_to_component:
-							amount = amount_fit_to_component
-							remaining_benefit -= amount_fit_to_component
-						else:
-							amount = remaining_benefit
-							have_remaining = False
-						current_claimed_amount = get_benefit_claim_amount(
-							employee, sal_slip_start_date, sal_slip_end_date, d.salary_component
-						)
-						amount += current_claimed_amount
-						struct_row = {}
-						salary_components_dict = {}
-						struct_row["depends_on_payment_days"] = salary_component.depends_on_payment_days
-						struct_row["salary_component"] = salary_component.name
-						struct_row["abbr"] = salary_component.salary_component_abbr
-						struct_row["do_not_include_in_total"] = salary_component.do_not_include_in_total
-						struct_row["is_tax_applicable"] = (salary_component.is_tax_applicable,)
-						struct_row["is_flexible_benefit"] = (salary_component.is_flexible_benefit,)
-						struct_row[
-							"variable_based_on_taxable_salary"
-						] = salary_component.variable_based_on_taxable_salary
-						salary_components_dict["amount"] = amount
-						salary_components_dict["struct_row"] = struct_row
-						salary_components_array.append(salary_components_dict)
-			if not have_remaining:
-				break
-
-		if len(salary_components_array) > 0:
-			return salary_components_array
-
-	return False
diff --git a/erpnext/payroll/doctype/employee_benefit_claim/test_employee_benefit_claim.py b/erpnext/payroll/doctype/employee_benefit_claim/test_employee_benefit_claim.py
deleted file mode 100644
index b1d3c66..0000000
--- a/erpnext/payroll/doctype/employee_benefit_claim/test_employee_benefit_claim.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-
-class TestEmployeeBenefitClaim(unittest.TestCase):
-	pass
diff --git a/erpnext/payroll/doctype/employee_cost_center/__init__.py b/erpnext/payroll/doctype/employee_cost_center/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/doctype/employee_cost_center/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/doctype/employee_cost_center/employee_cost_center.json b/erpnext/payroll/doctype/employee_cost_center/employee_cost_center.json
deleted file mode 100644
index 8fed9f7..0000000
--- a/erpnext/payroll/doctype/employee_cost_center/employee_cost_center.json
+++ /dev/null
@@ -1,43 +0,0 @@
-{
- "actions": [],
- "creation": "2021-12-23 12:44:38.389283",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "cost_center",
-  "percentage"
- ],
- "fields": [
-  {
-   "allow_on_submit": 1,
-   "fieldname": "cost_center",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Cost Center",
-   "options": "Cost Center",
-   "reqd": 1
-  },
-  {
-   "allow_on_submit": 1,
-   "fieldname": "percentage",
-   "fieldtype": "Int",
-   "in_list_view": 1,
-   "label": "Percentage (%)",
-   "non_negative": 1,
-   "reqd": 1
-  }
- ],
- "index_web_pages_for_search": 1,
- "istable": 1,
- "links": [],
- "modified": "2021-12-23 17:39:03.410924",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Employee Cost Center",
- "owner": "Administrator",
- "permissions": [],
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": []
-}
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/employee_cost_center/employee_cost_center.py b/erpnext/payroll/doctype/employee_cost_center/employee_cost_center.py
deleted file mode 100644
index 6c5be97..0000000
--- a/erpnext/payroll/doctype/employee_cost_center/employee_cost_center.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-# import frappe
-from frappe.model.document import Document
-
-
-class EmployeeCostCenter(Document):
-	pass
diff --git a/erpnext/payroll/doctype/employee_incentive/__init__.py b/erpnext/payroll/doctype/employee_incentive/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/doctype/employee_incentive/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/doctype/employee_incentive/employee_incentive.js b/erpnext/payroll/doctype/employee_incentive/employee_incentive.js
deleted file mode 100644
index b2809b1..0000000
--- a/erpnext/payroll/doctype/employee_incentive/employee_incentive.js
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Employee Incentive', {
-	setup: function(frm) {
-		frm.set_query("employee", function() {
-			return {
-				filters: {
-					"status": "Active"
-				}
-			};
-		});
-		frm.trigger('set_earning_component');
-	},
-
-	employee: function(frm) {
-		if (frm.doc.employee) {
-			frappe.run_serially([
-				() => 	frm.trigger('get_employee_currency'),
-				() => 	frm.trigger('set_company')
-			]);
-		} else {
-			frm.set_value("company", null);
-		}
-	},
-
-	set_company: function(frm) {
-		frappe.call({
-			method: "frappe.client.get_value",
-			args: {
-				doctype: "Employee",
-				fieldname: "company",
-				filters: {
-					name: frm.doc.employee
-				}
-			},
-			callback: function(data) {
-				if (data.message) {
-					frm.set_value("company", data.message.company);
-					frm.trigger('set_earning_component');
-				}
-			}
-		});
-	},
-
-	set_earning_component: function(frm) {
-		if (!frm.doc.company) return;
-		frm.set_query("salary_component", function() {
-			return {
-				filters: {type: "earning", company: frm.doc.company}
-			};
-		});
-	},
-
-	get_employee_currency: function(frm) {
-		frappe.call({
-			method: "erpnext.payroll.doctype.salary_structure_assignment.salary_structure_assignment.get_employee_currency",
-			args: {
-				employee: frm.doc.employee,
-			},
-			callback: function(r) {
-				if (r.message) {
-					frm.set_value('currency', r.message);
-					frm.refresh_fields();
-				}
-			}
-		});
-	},
-});
diff --git a/erpnext/payroll/doctype/employee_incentive/employee_incentive.json b/erpnext/payroll/doctype/employee_incentive/employee_incentive.json
deleted file mode 100644
index 64fb8c5..0000000
--- a/erpnext/payroll/doctype/employee_incentive/employee_incentive.json
+++ /dev/null
@@ -1,146 +0,0 @@
-{
- "actions": [],
- "autoname": "HR-EINV-.YY.-.MM.-.#####",
- "creation": "2018-04-13 16:13:43.404546",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "employee",
-  "employee_name",
-  "company",
-  "currency",
-  "incentive_amount",
-  "column_break_5",
-  "salary_component",
-  "payroll_date",
-  "department",
-  "amended_from"
- ],
- "fields": [
-  {
-   "fieldname": "employee",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Employee",
-   "options": "Employee",
-   "reqd": 1
-  },
-  {
-   "fieldname": "incentive_amount",
-   "fieldtype": "Currency",
-   "label": "Incentive Amount",
-   "options": "currency",
-   "reqd": 1
-  },
-  {
-   "fieldname": "payroll_date",
-   "fieldtype": "Date",
-   "label": "Payroll Date",
-   "reqd": 1
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "Employee Incentive",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break_5",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fetch_from": "employee.employee_name",
-   "fieldname": "employee_name",
-   "fieldtype": "Data",
-   "label": "Employee Name",
-   "read_only": 1
-  },
-  {
-   "fetch_from": "employee.department",
-   "fieldname": "department",
-   "fieldtype": "Link",
-   "label": "Department",
-   "options": "Department",
-   "read_only": 1
-  },
-  {
-   "fieldname": "salary_component",
-   "fieldtype": "Link",
-   "label": "Salary Component",
-   "options": "Salary Component",
-   "reqd": 1
-  },
-  {
-   "depends_on": "eval:(doc.docstatus==1 || doc.employee)",
-   "fieldname": "currency",
-   "fieldtype": "Link",
-   "label": "Currency",
-   "options": "Currency",
-   "print_hide": 1,
-   "read_only": 1,
-   "reqd": 1
-  },
-  {
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "label": "Company",
-   "options": "Company",
-   "reqd": 1
-  }
- ],
- "is_submittable": 1,
- "links": [],
- "modified": "2022-01-19 12:52:19.850710",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Employee Incentive",
- "naming_rule": "Expression (old style)",
- "owner": "Administrator",
- "permissions": [
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "Employee",
-   "share": 1
-  },
-  {
-   "create": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "write": 1
-  }
- ],
- "search_fields": "employee_name",
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": [],
- "title_field": "employee_name",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/employee_incentive/employee_incentive.py b/erpnext/payroll/doctype/employee_incentive/employee_incentive.py
deleted file mode 100644
index 7686185..0000000
--- a/erpnext/payroll/doctype/employee_incentive/employee_incentive.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-
-from erpnext.hr.utils import validate_active_employee
-
-
-class EmployeeIncentive(Document):
-	def validate(self):
-		validate_active_employee(self.employee)
-		self.validate_salary_structure()
-
-	def validate_salary_structure(self):
-		if not frappe.db.exists("Salary Structure Assignment", {"employee": self.employee}):
-			frappe.throw(
-				_("There is no Salary Structure assigned to {0}. First assign a Salary Stucture.").format(
-					self.employee
-				)
-			)
-
-	def on_submit(self):
-		company = frappe.db.get_value("Employee", self.employee, "company")
-
-		additional_salary = frappe.new_doc("Additional Salary")
-		additional_salary.employee = self.employee
-		additional_salary.currency = self.currency
-		additional_salary.salary_component = self.salary_component
-		additional_salary.overwrite_salary_structure_amount = 0
-		additional_salary.amount = self.incentive_amount
-		additional_salary.payroll_date = self.payroll_date
-		additional_salary.company = company
-		additional_salary.ref_doctype = self.doctype
-		additional_salary.ref_docname = self.name
-		additional_salary.submit()
diff --git a/erpnext/payroll/doctype/employee_incentive/test_employee_incentive.py b/erpnext/payroll/doctype/employee_incentive/test_employee_incentive.py
deleted file mode 100644
index e296fdf..0000000
--- a/erpnext/payroll/doctype/employee_incentive/test_employee_incentive.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-
-class TestEmployeeIncentive(unittest.TestCase):
-	pass
diff --git a/erpnext/payroll/doctype/employee_other_income/__init__.py b/erpnext/payroll/doctype/employee_other_income/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/doctype/employee_other_income/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/doctype/employee_other_income/employee_other_income.js b/erpnext/payroll/doctype/employee_other_income/employee_other_income.js
deleted file mode 100644
index c1a74e8..0000000
--- a/erpnext/payroll/doctype/employee_other_income/employee_other_income.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Employee Other Income', {
-	// refresh: function(frm) {
-
-	// }
-});
diff --git a/erpnext/payroll/doctype/employee_other_income/employee_other_income.json b/erpnext/payroll/doctype/employee_other_income/employee_other_income.json
deleted file mode 100644
index 04ce9f7..0000000
--- a/erpnext/payroll/doctype/employee_other_income/employee_other_income.json
+++ /dev/null
@@ -1,139 +0,0 @@
-{
- "actions": [],
- "autoname": "HR-INCOME-.######",
- "creation": "2020-03-18 15:04:40.767434",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "employee",
-  "employee_name",
-  "payroll_period",
-  "column_break_3",
-  "company",
-  "source",
-  "amount",
-  "amended_from"
- ],
- "fields": [
-  {
-   "fieldname": "employee",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Employee",
-   "options": "Employee",
-   "reqd": 1
-  },
-  {
-   "fieldname": "payroll_period",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Payroll Period",
-   "options": "Payroll Period",
-   "reqd": 1
-  },
-  {
-   "fieldname": "column_break_3",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Company",
-   "options": "Company",
-   "reqd": 1
-  },
-  {
-   "fieldname": "source",
-   "fieldtype": "Data",
-   "label": "Source"
-  },
-  {
-   "fieldname": "amount",
-   "fieldtype": "Currency",
-   "in_list_view": 1,
-   "label": "Amount",
-   "options": "Company:company:default_currency",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "employee.employee_name",
-   "fieldname": "employee_name",
-   "fieldtype": "Data",
-   "label": "Employee Name",
-   "read_only": 1
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "Employee Other Income",
-   "print_hide": 1,
-   "read_only": 1
-  }
- ],
- "is_submittable": 1,
- "links": [],
- "modified": "2022-01-19 12:58:43.255900",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Employee Other Income",
- "naming_rule": "Expression (old style)",
- "owner": "Administrator",
- "permissions": [
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "Employee",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  }
- ],
- "quick_entry": 1,
- "search_fields": "employee_name",
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": [],
- "title_field": "employee_name",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/employee_other_income/employee_other_income.py b/erpnext/payroll/doctype/employee_other_income/employee_other_income.py
deleted file mode 100644
index 51059a1..0000000
--- a/erpnext/payroll/doctype/employee_other_income/employee_other_income.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-# import frappe
-from frappe.model.document import Document
-
-
-class EmployeeOtherIncome(Document):
-	pass
diff --git a/erpnext/payroll/doctype/employee_other_income/test_employee_other_income.py b/erpnext/payroll/doctype/employee_other_income/test_employee_other_income.py
deleted file mode 100644
index 8f0f637..0000000
--- a/erpnext/payroll/doctype/employee_other_income/test_employee_other_income.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-# import frappe
-import unittest
-
-
-class TestEmployeeOtherIncome(unittest.TestCase):
-	pass
diff --git a/erpnext/payroll/doctype/employee_tax_exemption_category/__init__.py b/erpnext/payroll/doctype/employee_tax_exemption_category/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/doctype/employee_tax_exemption_category/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/doctype/employee_tax_exemption_category/employee_tax_exemption_category.js b/erpnext/payroll/doctype/employee_tax_exemption_category/employee_tax_exemption_category.js
deleted file mode 100644
index 1df609f..0000000
--- a/erpnext/payroll/doctype/employee_tax_exemption_category/employee_tax_exemption_category.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Employee Tax Exemption Category', {
-	refresh: function(frm) {
-
-	}
-});
diff --git a/erpnext/payroll/doctype/employee_tax_exemption_category/employee_tax_exemption_category.json b/erpnext/payroll/doctype/employee_tax_exemption_category/employee_tax_exemption_category.json
deleted file mode 100644
index f2556d7..0000000
--- a/erpnext/payroll/doctype/employee_tax_exemption_category/employee_tax_exemption_category.json
+++ /dev/null
@@ -1,74 +0,0 @@
-{
- "actions": [],
- "allow_import": 1,
- "allow_rename": 1,
- "autoname": "Prompt",
- "creation": "2018-04-13 16:51:36.971140",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "max_amount",
-  "is_active"
- ],
- "fields": [
-  {
-   "fieldname": "max_amount",
-   "fieldtype": "Currency",
-   "in_list_view": 1,
-   "label": "Max Exemption Amount"
-  },
-  {
-   "default": "1",
-   "fieldname": "is_active",
-   "fieldtype": "Check",
-   "label": "Is Active"
-  }
- ],
- "links": [],
- "modified": "2020-06-22 23:16:47.472910",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Employee Tax Exemption Category",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "write": 1
-  }
- ],
- "sort_field": "modified",
- "sort_order": "DESC"
-}
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/employee_tax_exemption_category/employee_tax_exemption_category.py b/erpnext/payroll/doctype/employee_tax_exemption_category/employee_tax_exemption_category.py
deleted file mode 100644
index 5c109de..0000000
--- a/erpnext/payroll/doctype/employee_tax_exemption_category/employee_tax_exemption_category.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-from frappe.model.document import Document
-
-
-class EmployeeTaxExemptionCategory(Document):
-	pass
diff --git a/erpnext/payroll/doctype/employee_tax_exemption_category/test_employee_tax_exemption_category.py b/erpnext/payroll/doctype/employee_tax_exemption_category/test_employee_tax_exemption_category.py
deleted file mode 100644
index 84e6183..0000000
--- a/erpnext/payroll/doctype/employee_tax_exemption_category/test_employee_tax_exemption_category.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-
-class TestEmployeeTaxExemptionCategory(unittest.TestCase):
-	pass
diff --git a/erpnext/payroll/doctype/employee_tax_exemption_declaration/__init__.py b/erpnext/payroll/doctype/employee_tax_exemption_declaration/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/doctype/employee_tax_exemption_declaration/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/doctype/employee_tax_exemption_declaration/employee_tax_exemption_declaration.js b/erpnext/payroll/doctype/employee_tax_exemption_declaration/employee_tax_exemption_declaration.js
deleted file mode 100644
index fb11875..0000000
--- a/erpnext/payroll/doctype/employee_tax_exemption_declaration/employee_tax_exemption_declaration.js
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Employee Tax Exemption Declaration', {
-	setup: function(frm) {
-		frm.set_query('employee', function() {
-			return {
-				filters: {
-					'status': "Active"
-				}
-			}
-		});
-
-		frm.set_query('payroll_period', function() {
-			const fields = {'employee': 'Employee', 'company': 'Company'};
-
-			for (let [field, label] of Object.entries(fields)) {
-				if (!frm.doc[field]) {
-					frappe.msgprint(__("Please select {0}", [label]))
-				}
-			};
-
-			if (frm.doc.employee && frm.doc.company){
-				return {
-					filters: {
-						'company': frm.doc.company
-					}
-				}
-			}
-		});
-
-		frm.set_query('exemption_sub_category', 'declarations', function() {
-			return {
-				filters: {
-					'is_active': 1
-				}
-			}
-		});
-	},
-
-	refresh: function(frm) {
-		if(frm.doc.docstatus==1) {
-			frm.add_custom_button(__('Submit Proof'), function() {
-				frappe.model.open_mapped_doc({
-					method: "erpnext.payroll.doctype.employee_tax_exemption_declaration.employee_tax_exemption_declaration.make_proof_submission",
-					frm: frm
-				});
-			}).addClass("btn-primary");
-		}
-	},
-
-	employee: function(frm) {
-		if (frm.doc.employee) {
-			frm.trigger('get_employee_currency');
-		}
-	},
-
-	get_employee_currency: function(frm) {
-		frappe.call({
-			method: "erpnext.payroll.doctype.salary_structure_assignment.salary_structure_assignment.get_employee_currency",
-			args: {
-				employee: frm.doc.employee,
-			},
-			callback: function(r) {
-				if (r.message) {
-					frm.set_value('currency', r.message);
-					frm.refresh_fields();
-				}
-			}
-		});
-	}
-});
diff --git a/erpnext/payroll/doctype/employee_tax_exemption_declaration/employee_tax_exemption_declaration.json b/erpnext/payroll/doctype/employee_tax_exemption_declaration/employee_tax_exemption_declaration.json
deleted file mode 100644
index 5ef373e..0000000
--- a/erpnext/payroll/doctype/employee_tax_exemption_declaration/employee_tax_exemption_declaration.json
+++ /dev/null
@@ -1,196 +0,0 @@
-{
- "actions": [],
- "allow_import": 1,
- "allow_rename": 1,
- "autoname": "HR-TAX-DEC-.YYYY.-.#####",
- "creation": "2018-04-13 16:53:36.175504",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "employee",
-  "employee_name",
-  "department",
-  "column_break_2",
-  "payroll_period",
-  "company",
-  "currency",
-  "amended_from",
-  "section_break_8",
-  "declarations",
-  "section_break_10",
-  "total_declared_amount",
-  "column_break_12",
-  "total_exemption_amount"
- ],
- "fields": [
-  {
-   "fieldname": "employee",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Employee",
-   "options": "Employee",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "employee.employee_name",
-   "fieldname": "employee_name",
-   "fieldtype": "Data",
-   "label": "Employee Name",
-   "read_only": 1
-  },
-  {
-   "fetch_from": "employee.department",
-   "fieldname": "department",
-   "fieldtype": "Link",
-   "label": "Department",
-   "options": "Department",
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break_2",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "payroll_period",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Payroll Period",
-   "options": "Payroll Period",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "employee.company",
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "label": "Company",
-   "options": "Company"
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "Employee Tax Exemption Declaration",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "fieldname": "section_break_8",
-   "fieldtype": "Section Break"
-  },
-  {
-   "fieldname": "declarations",
-   "fieldtype": "Table",
-   "label": "Declarations",
-   "options": "Employee Tax Exemption Declaration Category"
-  },
-  {
-   "fieldname": "section_break_10",
-   "fieldtype": "Section Break"
-  },
-  {
-   "fieldname": "total_declared_amount",
-   "fieldtype": "Currency",
-   "label": "Total Declared Amount",
-   "options": "currency",
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break_12",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "total_exemption_amount",
-   "fieldtype": "Currency",
-   "label": "Total Exemption Amount",
-   "options": "currency",
-   "read_only": 1
-  },
-  {
-   "depends_on": "eval: doc.employee",
-   "fieldname": "currency",
-   "fieldtype": "Link",
-   "label": "Currency",
-   "options": "Currency",
-   "print_hide": 1,
-   "reqd": 1
-  }
- ],
- "is_submittable": 1,
- "links": [],
- "modified": "2022-01-19 12:58:54.707871",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Employee Tax Exemption Declaration",
- "naming_rule": "Expression (old style)",
- "owner": "Administrator",
- "permissions": [
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "Employee",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  }
- ],
- "search_fields": "employee_name",
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": [],
- "title_field": "employee_name",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/employee_tax_exemption_declaration/employee_tax_exemption_declaration.py b/erpnext/payroll/doctype/employee_tax_exemption_declaration/employee_tax_exemption_declaration.py
deleted file mode 100644
index 3d1d965..0000000
--- a/erpnext/payroll/doctype/employee_tax_exemption_declaration/employee_tax_exemption_declaration.py
+++ /dev/null
@@ -1,78 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe.model.document import Document
-from frappe.model.mapper import get_mapped_doc
-from frappe.utils import flt
-
-from erpnext.hr.utils import (
-	calculate_annual_eligible_hra_exemption,
-	get_total_exemption_amount,
-	validate_active_employee,
-	validate_duplicate_exemption_for_payroll_period,
-	validate_tax_declaration,
-)
-
-
-class EmployeeTaxExemptionDeclaration(Document):
-	def validate(self):
-		validate_active_employee(self.employee)
-		validate_tax_declaration(self.declarations)
-		validate_duplicate_exemption_for_payroll_period(
-			self.doctype, self.name, self.payroll_period, self.employee
-		)
-		self.set_total_declared_amount()
-		self.set_total_exemption_amount()
-		self.calculate_hra_exemption()
-
-	def set_total_declared_amount(self):
-		self.total_declared_amount = 0.0
-		for d in self.declarations:
-			self.total_declared_amount += flt(d.amount)
-
-	def set_total_exemption_amount(self):
-		self.total_exemption_amount = flt(
-			get_total_exemption_amount(self.declarations), self.precision("total_exemption_amount")
-		)
-
-	def calculate_hra_exemption(self):
-		self.salary_structure_hra, self.annual_hra_exemption, self.monthly_hra_exemption = 0, 0, 0
-		if self.get("monthly_house_rent"):
-			hra_exemption = calculate_annual_eligible_hra_exemption(self)
-			if hra_exemption:
-				self.total_exemption_amount += hra_exemption["annual_exemption"]
-				self.total_exemption_amount = flt(
-					self.total_exemption_amount, self.precision("total_exemption_amount")
-				)
-				self.salary_structure_hra = flt(
-					hra_exemption["hra_amount"], self.precision("salary_structure_hra")
-				)
-				self.annual_hra_exemption = flt(
-					hra_exemption["annual_exemption"], self.precision("annual_hra_exemption")
-				)
-				self.monthly_hra_exemption = flt(
-					hra_exemption["monthly_exemption"], self.precision("monthly_hra_exemption")
-				)
-
-
-@frappe.whitelist()
-def make_proof_submission(source_name, target_doc=None):
-	doclist = get_mapped_doc(
-		"Employee Tax Exemption Declaration",
-		source_name,
-		{
-			"Employee Tax Exemption Declaration": {
-				"doctype": "Employee Tax Exemption Proof Submission",
-				"field_no_map": ["monthly_house_rent", "monthly_hra_exemption"],
-			},
-			"Employee Tax Exemption Declaration Category": {
-				"doctype": "Employee Tax Exemption Proof Submission Detail",
-				"add_if_empty": True,
-			},
-		},
-		target_doc,
-	)
-
-	return doclist
diff --git a/erpnext/payroll/doctype/employee_tax_exemption_declaration/test_employee_tax_exemption_declaration.py b/erpnext/payroll/doctype/employee_tax_exemption_declaration/test_employee_tax_exemption_declaration.py
deleted file mode 100644
index 2d8df35..0000000
--- a/erpnext/payroll/doctype/employee_tax_exemption_declaration/test_employee_tax_exemption_declaration.py
+++ /dev/null
@@ -1,490 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-import frappe
-from frappe.tests.utils import FrappeTestCase
-from frappe.utils import add_months, getdate
-
-import erpnext
-from erpnext.hr.doctype.employee.test_employee import make_employee
-from erpnext.hr.utils import DuplicateDeclarationError
-
-
-class TestEmployeeTaxExemptionDeclaration(FrappeTestCase):
-	def setUp(self):
-		make_employee("employee@taxexemption.com", company="_Test Company")
-		make_employee("employee1@taxexemption.com", company="_Test Company")
-		create_payroll_period(company="_Test Company")
-		create_exemption_category()
-		frappe.db.delete("Employee Tax Exemption Declaration")
-		frappe.db.delete("Salary Structure Assignment")
-
-	def test_duplicate_category_in_declaration(self):
-		declaration = frappe.get_doc(
-			{
-				"doctype": "Employee Tax Exemption Declaration",
-				"employee": frappe.get_value("Employee", {"user_id": "employee@taxexemption.com"}, "name"),
-				"company": erpnext.get_default_company(),
-				"payroll_period": "_Test Payroll Period",
-				"currency": erpnext.get_default_currency(),
-				"declarations": [
-					dict(
-						exemption_sub_category="_Test Sub Category",
-						exemption_category="_Test Category",
-						amount=100000,
-					),
-					dict(
-						exemption_sub_category="_Test Sub Category",
-						exemption_category="_Test Category",
-						amount=50000,
-					),
-				],
-			}
-		)
-		self.assertRaises(frappe.ValidationError, declaration.save)
-
-	def test_duplicate_entry_for_payroll_period(self):
-		declaration = frappe.get_doc(
-			{
-				"doctype": "Employee Tax Exemption Declaration",
-				"employee": frappe.get_value("Employee", {"user_id": "employee@taxexemption.com"}, "name"),
-				"company": erpnext.get_default_company(),
-				"payroll_period": "_Test Payroll Period",
-				"currency": erpnext.get_default_currency(),
-				"declarations": [
-					dict(
-						exemption_sub_category="_Test Sub Category",
-						exemption_category="_Test Category",
-						amount=100000,
-					),
-					dict(
-						exemption_sub_category="_Test1 Sub Category",
-						exemption_category="_Test Category",
-						amount=50000,
-					),
-				],
-			}
-		).insert()
-
-		duplicate_declaration = frappe.get_doc(
-			{
-				"doctype": "Employee Tax Exemption Declaration",
-				"employee": frappe.get_value("Employee", {"user_id": "employee@taxexemption.com"}, "name"),
-				"company": erpnext.get_default_company(),
-				"payroll_period": "_Test Payroll Period",
-				"currency": erpnext.get_default_currency(),
-				"declarations": [
-					dict(
-						exemption_sub_category="_Test Sub Category",
-						exemption_category="_Test Category",
-						amount=100000,
-					)
-				],
-			}
-		)
-		self.assertRaises(DuplicateDeclarationError, duplicate_declaration.insert)
-		duplicate_declaration.employee = frappe.get_value(
-			"Employee", {"user_id": "employee1@taxexemption.com"}, "name"
-		)
-		self.assertTrue(duplicate_declaration.insert)
-
-	def test_exemption_amount(self):
-		declaration = frappe.get_doc(
-			{
-				"doctype": "Employee Tax Exemption Declaration",
-				"employee": frappe.get_value("Employee", {"user_id": "employee@taxexemption.com"}, "name"),
-				"company": erpnext.get_default_company(),
-				"payroll_period": "_Test Payroll Period",
-				"currency": erpnext.get_default_currency(),
-				"declarations": [
-					dict(
-						exemption_sub_category="_Test Sub Category",
-						exemption_category="_Test Category",
-						amount=80000,
-					),
-					dict(
-						exemption_sub_category="_Test1 Sub Category",
-						exemption_category="_Test Category",
-						amount=60000,
-					),
-				],
-			}
-		).insert()
-
-		self.assertEqual(declaration.total_exemption_amount, 100000)
-
-	def test_india_hra_exemption(self):
-		# set country
-		current_country = frappe.flags.country
-		frappe.flags.country = "India"
-
-		setup_hra_exemption_prerequisites("Monthly")
-		employee = frappe.get_value("Employee", {"user_id": "employee@taxexemption.com"}, "name")
-
-		declaration = frappe.get_doc(
-			{
-				"doctype": "Employee Tax Exemption Declaration",
-				"employee": employee,
-				"company": "_Test Company",
-				"payroll_period": "_Test Payroll Period",
-				"currency": "INR",
-				"monthly_house_rent": 50000,
-				"rented_in_metro_city": 1,
-				"declarations": [
-					dict(
-						exemption_sub_category="_Test Sub Category",
-						exemption_category="_Test Category",
-						amount=80000,
-					),
-					dict(
-						exemption_sub_category="_Test1 Sub Category",
-						exemption_category="_Test Category",
-						amount=60000,
-					),
-				],
-			}
-		).insert()
-
-		# Monthly HRA received = 3000
-		# should set HRA exemption as per actual annual HRA because that's the minimum
-		self.assertEqual(declaration.monthly_hra_exemption, 3000)
-		self.assertEqual(declaration.annual_hra_exemption, 36000)
-		# 100000 Standard Exemption + 36000 HRA exemption
-		self.assertEqual(declaration.total_exemption_amount, 136000)
-
-		# reset
-		frappe.flags.country = current_country
-
-	def test_india_hra_exemption_with_daily_payroll_frequency(self):
-		# set country
-		current_country = frappe.flags.country
-		frappe.flags.country = "India"
-
-		setup_hra_exemption_prerequisites("Daily")
-		employee = frappe.get_value("Employee", {"user_id": "employee@taxexemption.com"}, "name")
-
-		declaration = frappe.get_doc(
-			{
-				"doctype": "Employee Tax Exemption Declaration",
-				"employee": employee,
-				"company": "_Test Company",
-				"payroll_period": "_Test Payroll Period",
-				"currency": "INR",
-				"monthly_house_rent": 170000,
-				"rented_in_metro_city": 1,
-				"declarations": [
-					dict(
-						exemption_sub_category="_Test1 Sub Category",
-						exemption_category="_Test Category",
-						amount=60000,
-					),
-				],
-			}
-		).insert()
-
-		# Daily HRA received = 3000
-		# should set HRA exemption as per (rent - 10% of Basic Salary), that's the minimum
-		self.assertEqual(declaration.monthly_hra_exemption, 17916.67)
-		self.assertEqual(declaration.annual_hra_exemption, 215000)
-		# 50000 Standard Exemption + 215000 HRA exemption
-		self.assertEqual(declaration.total_exemption_amount, 265000)
-
-		# reset
-		frappe.flags.country = current_country
-
-	def test_india_hra_exemption_with_weekly_payroll_frequency(self):
-		# set country
-		current_country = frappe.flags.country
-		frappe.flags.country = "India"
-
-		setup_hra_exemption_prerequisites("Weekly")
-		employee = frappe.get_value("Employee", {"user_id": "employee@taxexemption.com"}, "name")
-
-		declaration = frappe.get_doc(
-			{
-				"doctype": "Employee Tax Exemption Declaration",
-				"employee": employee,
-				"company": "_Test Company",
-				"payroll_period": "_Test Payroll Period",
-				"currency": "INR",
-				"monthly_house_rent": 170000,
-				"rented_in_metro_city": 1,
-				"declarations": [
-					dict(
-						exemption_sub_category="_Test1 Sub Category",
-						exemption_category="_Test Category",
-						amount=60000,
-					),
-				],
-			}
-		).insert()
-
-		# Weekly HRA received = 3000
-		# should set HRA exemption as per actual annual HRA because that's the minimum
-		self.assertEqual(declaration.monthly_hra_exemption, 13000)
-		self.assertEqual(declaration.annual_hra_exemption, 156000)
-		# 50000 Standard Exemption + 156000 HRA exemption
-		self.assertEqual(declaration.total_exemption_amount, 206000)
-
-		# reset
-		frappe.flags.country = current_country
-
-	def test_india_hra_exemption_with_fortnightly_payroll_frequency(self):
-		# set country
-		current_country = frappe.flags.country
-		frappe.flags.country = "India"
-
-		setup_hra_exemption_prerequisites("Fortnightly")
-		employee = frappe.get_value("Employee", {"user_id": "employee@taxexemption.com"}, "name")
-
-		declaration = frappe.get_doc(
-			{
-				"doctype": "Employee Tax Exemption Declaration",
-				"employee": employee,
-				"company": "_Test Company",
-				"payroll_period": "_Test Payroll Period",
-				"currency": "INR",
-				"monthly_house_rent": 170000,
-				"rented_in_metro_city": 1,
-				"declarations": [
-					dict(
-						exemption_sub_category="_Test1 Sub Category",
-						exemption_category="_Test Category",
-						amount=60000,
-					),
-				],
-			}
-		).insert()
-
-		# Fortnightly HRA received = 3000
-		# should set HRA exemption as per actual annual HRA because that's the minimum
-		self.assertEqual(declaration.monthly_hra_exemption, 6500)
-		self.assertEqual(declaration.annual_hra_exemption, 78000)
-		# 50000 Standard Exemption + 78000 HRA exemption
-		self.assertEqual(declaration.total_exemption_amount, 128000)
-
-		# reset
-		frappe.flags.country = current_country
-
-	def test_india_hra_exemption_with_bimonthly_payroll_frequency(self):
-		# set country
-		current_country = frappe.flags.country
-		frappe.flags.country = "India"
-
-		setup_hra_exemption_prerequisites("Bimonthly")
-		employee = frappe.get_value("Employee", {"user_id": "employee@taxexemption.com"}, "name")
-
-		declaration = frappe.get_doc(
-			{
-				"doctype": "Employee Tax Exemption Declaration",
-				"employee": employee,
-				"company": "_Test Company",
-				"payroll_period": "_Test Payroll Period",
-				"currency": "INR",
-				"monthly_house_rent": 50000,
-				"rented_in_metro_city": 1,
-				"declarations": [
-					dict(
-						exemption_sub_category="_Test Sub Category",
-						exemption_category="_Test Category",
-						amount=80000,
-					),
-					dict(
-						exemption_sub_category="_Test1 Sub Category",
-						exemption_category="_Test Category",
-						amount=60000,
-					),
-				],
-			}
-		).insert()
-
-		# Bimonthly HRA received = 3000
-		# should set HRA exemption as per actual annual HRA because that's the minimum
-		self.assertEqual(declaration.monthly_hra_exemption, 1500)
-		self.assertEqual(declaration.annual_hra_exemption, 18000)
-		# 100000 Standard Exemption + 18000 HRA exemption
-		self.assertEqual(declaration.total_exemption_amount, 118000)
-
-		# reset
-		frappe.flags.country = current_country
-
-	def test_india_hra_exemption_with_multiple_salary_structure_assignments(self):
-		from erpnext.payroll.doctype.salary_slip.test_salary_slip import create_tax_slab
-		from erpnext.payroll.doctype.salary_structure.test_salary_structure import (
-			create_salary_structure_assignment,
-			make_salary_structure,
-		)
-
-		# set country
-		current_country = frappe.flags.country
-		frappe.flags.country = "India"
-
-		employee = make_employee("employee@taxexemption2.com", company="_Test Company")
-		payroll_period = create_payroll_period(name="_Test Payroll Period", company="_Test Company")
-
-		create_tax_slab(
-			payroll_period,
-			allow_tax_exemption=True,
-			currency="INR",
-			effective_date=getdate("2019-04-01"),
-			company="_Test Company",
-		)
-
-		frappe.db.set_value(
-			"Company", "_Test Company", {"basic_component": "Basic Salary", "hra_component": "HRA"}
-		)
-
-		# salary structure with base 50000, HRA 3000
-		make_salary_structure(
-			"Monthly Structure for HRA Exemption 1",
-			"Monthly",
-			employee=employee,
-			company="_Test Company",
-			currency="INR",
-			payroll_period=payroll_period.name,
-			from_date=payroll_period.start_date,
-		)
-
-		# salary structure with base 70000, HRA = base * 0.2 = 14000
-		salary_structure = make_salary_structure(
-			"Monthly Structure for HRA Exemption 2",
-			"Monthly",
-			employee=employee,
-			company="_Test Company",
-			currency="INR",
-			payroll_period=payroll_period.name,
-			from_date=payroll_period.start_date,
-			dont_submit=True,
-		)
-		for component_row in salary_structure.earnings:
-			if component_row.salary_component == "HRA":
-				component_row.amount = 0
-				component_row.amount_based_on_formula = 1
-				component_row.formula = "base * 0.2"
-				break
-
-		salary_structure.submit()
-
-		create_salary_structure_assignment(
-			employee,
-			salary_structure.name,
-			from_date=add_months(payroll_period.start_date, 6),
-			company="_Test Company",
-			currency="INR",
-			payroll_period=payroll_period.name,
-			base=70000,
-			allow_duplicate=True,
-		)
-
-		declaration = frappe.get_doc(
-			{
-				"doctype": "Employee Tax Exemption Declaration",
-				"employee": employee,
-				"company": "_Test Company",
-				"payroll_period": payroll_period.name,
-				"currency": "INR",
-				"monthly_house_rent": 50000,
-				"rented_in_metro_city": 1,
-				"declarations": [
-					dict(
-						exemption_sub_category="_Test1 Sub Category",
-						exemption_category="_Test Category",
-						amount=60000,
-					),
-				],
-			}
-		).insert()
-
-		# Monthly HRA received = 50000 * 6 months + 70000 * 6 months
-		# should set HRA exemption as per actual annual HRA because that's the minimum
-		self.assertEqual(declaration.monthly_hra_exemption, 8500)
-		self.assertEqual(declaration.annual_hra_exemption, 102000)
-		# 50000 Standard Exemption + 102000 HRA exemption
-		self.assertEqual(declaration.total_exemption_amount, 152000)
-
-		# reset
-		frappe.flags.country = current_country
-
-
-def create_payroll_period(**args):
-	args = frappe._dict(args)
-	name = args.name or "_Test Payroll Period"
-	if not frappe.db.exists("Payroll Period", name):
-		from datetime import date
-
-		payroll_period = frappe.get_doc(
-			dict(
-				doctype="Payroll Period",
-				name=name,
-				company=args.company or erpnext.get_default_company(),
-				start_date=args.start_date or date(date.today().year, 1, 1),
-				end_date=args.end_date or date(date.today().year, 12, 31),
-			)
-		).insert()
-		return payroll_period
-	else:
-		return frappe.get_doc("Payroll Period", name)
-
-
-def create_exemption_category():
-	if not frappe.db.exists("Employee Tax Exemption Category", "_Test Category"):
-		category = frappe.get_doc(
-			{
-				"doctype": "Employee Tax Exemption Category",
-				"name": "_Test Category",
-				"deduction_component": "Income Tax",
-				"max_amount": 100000,
-			}
-		).insert()
-	if not frappe.db.exists("Employee Tax Exemption Sub Category", "_Test Sub Category"):
-		frappe.get_doc(
-			{
-				"doctype": "Employee Tax Exemption Sub Category",
-				"name": "_Test Sub Category",
-				"exemption_category": "_Test Category",
-				"max_amount": 100000,
-				"is_active": 1,
-			}
-		).insert()
-	if not frappe.db.exists("Employee Tax Exemption Sub Category", "_Test1 Sub Category"):
-		frappe.get_doc(
-			{
-				"doctype": "Employee Tax Exemption Sub Category",
-				"name": "_Test1 Sub Category",
-				"exemption_category": "_Test Category",
-				"max_amount": 50000,
-				"is_active": 1,
-			}
-		).insert()
-
-
-def setup_hra_exemption_prerequisites(frequency, employee=None):
-	from erpnext.payroll.doctype.salary_slip.test_salary_slip import create_tax_slab
-	from erpnext.payroll.doctype.salary_structure.test_salary_structure import make_salary_structure
-
-	payroll_period = create_payroll_period(name="_Test Payroll Period", company="_Test Company")
-	if not employee:
-		employee = frappe.get_value("Employee", {"user_id": "employee@taxexemption.com"}, "name")
-
-	create_tax_slab(
-		payroll_period,
-		allow_tax_exemption=True,
-		currency="INR",
-		effective_date=getdate("2019-04-01"),
-		company="_Test Company",
-	)
-
-	make_salary_structure(
-		f"{frequency} Structure for HRA Exemption",
-		frequency,
-		employee=employee,
-		company="_Test Company",
-		currency="INR",
-		payroll_period=payroll_period,
-	)
-
-	frappe.db.set_value(
-		"Company", "_Test Company", {"basic_component": "Basic Salary", "hra_component": "HRA"}
-	)
diff --git a/erpnext/payroll/doctype/employee_tax_exemption_declaration_category/__init__.py b/erpnext/payroll/doctype/employee_tax_exemption_declaration_category/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/doctype/employee_tax_exemption_declaration_category/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/doctype/employee_tax_exemption_declaration_category/employee_tax_exemption_declaration_category.json b/erpnext/payroll/doctype/employee_tax_exemption_declaration_category/employee_tax_exemption_declaration_category.json
deleted file mode 100644
index 723a3df..0000000
--- a/erpnext/payroll/doctype/employee_tax_exemption_declaration_category/employee_tax_exemption_declaration_category.json
+++ /dev/null
@@ -1,63 +0,0 @@
-{
- "actions": [],
- "creation": "2018-04-13 16:56:23.333041",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "exemption_sub_category",
-  "exemption_category",
-  "max_amount",
-  "amount"
- ],
- "fields": [
-  {
-   "fieldname": "exemption_sub_category",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Exemption Sub Category",
-   "options": "Employee Tax Exemption Sub Category",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "exemption_sub_category.exemption_category",
-   "fieldname": "exemption_category",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Exemption Category",
-   "options": "Employee Tax Exemption Category",
-   "read_only": 1,
-   "reqd": 1
-  },
-  {
-   "fetch_from": "exemption_sub_category.max_amount",
-   "fieldname": "max_amount",
-   "fieldtype": "Currency",
-   "in_list_view": 1,
-   "label": "Maximum Exempted Amount",
-   "options": "currency",
-   "read_only": 1,
-   "reqd": 1
-  },
-  {
-   "fieldname": "amount",
-   "fieldtype": "Currency",
-   "in_list_view": 1,
-   "label": "Declared Amount",
-   "options": "currency",
-   "reqd": 1
-  }
- ],
- "istable": 1,
- "links": [],
- "modified": "2020-10-20 16:43:09.606265",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Employee Tax Exemption Declaration Category",
- "owner": "Administrator",
- "permissions": [],
- "quick_entry": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/employee_tax_exemption_declaration_category/employee_tax_exemption_declaration_category.py b/erpnext/payroll/doctype/employee_tax_exemption_declaration_category/employee_tax_exemption_declaration_category.py
deleted file mode 100644
index 4322f31..0000000
--- a/erpnext/payroll/doctype/employee_tax_exemption_declaration_category/employee_tax_exemption_declaration_category.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-# import frappe
-from frappe.model.document import Document
-
-
-class EmployeeTaxExemptionDeclarationCategory(Document):
-	pass
diff --git a/erpnext/payroll/doctype/employee_tax_exemption_proof_submission/__init__.py b/erpnext/payroll/doctype/employee_tax_exemption_proof_submission/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/doctype/employee_tax_exemption_proof_submission/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/doctype/employee_tax_exemption_proof_submission/employee_tax_exemption_proof_submission.js b/erpnext/payroll/doctype/employee_tax_exemption_proof_submission/employee_tax_exemption_proof_submission.js
deleted file mode 100644
index 4fb0a37..0000000
--- a/erpnext/payroll/doctype/employee_tax_exemption_proof_submission/employee_tax_exemption_proof_submission.js
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Employee Tax Exemption Proof Submission', {
-	setup: function(frm) {
-		frm.set_query('employee', function() {
-			return {
-				filters: {
-					'status': "Active"
-				}
-			}
-		});
-
-		frm.set_query('payroll_period', function() {
-			if(frm.doc.employee && frm.doc.company){
-				return {
-					filters: {
-						'company': frm.doc.company
-					}
-				}
-			}else {
-				frappe.msgprint(__("Please select Employee"));
-			}
-		});
-
-		frm.set_query('exemption_sub_category', 'tax_exemption_proofs', function() {
-			return {
-				filters: {
-					'is_active': 1
-				}
-			}
-		});
-	},
-
-	refresh: function(frm) {
-		if(frm.doc.docstatus === 0) {
-			let filters = {
-				docstatus: 1,
-				company: frm.doc.company
-			};
-			if(frm.doc.employee) filters["employee"] = frm.doc.employee;
-			if(frm.doc.payroll_period) filters["payroll_period"] = frm.doc.payroll_period;
-
-			frm.add_custom_button(__('Get Details From Declaration'), function() {
-				erpnext.utils.map_current_doc({
-					method: "erpnext.payroll.doctype.employee_tax_exemption_declaration.employee_tax_exemption_declaration.make_proof_submission",
-					source_doctype: "Employee Tax Exemption Declaration",
-					target: frm,
-					date_field: "creation",
-					setters: {
-						employee: frm.doc.employee || undefined
-					},
-					get_query_filters: filters
-				});
-			});
-		}
-	},
-
-	currency: function(frm) {
-		frm.refresh_fields();
-	},
-
-	employee: function(frm) {
-		if (frm.doc.employee) {
-			frm.trigger('get_employee_currency');
-		}
-	},
-
-	get_employee_currency: function(frm) {
-		frappe.call({
-			method: "erpnext.payroll.doctype.salary_structure_assignment.salary_structure_assignment.get_employee_currency",
-			args: {
-				employee: frm.doc.employee,
-			},
-			callback: function(r) {
-				if (r.message) {
-					frm.set_value('currency', r.message);
-					frm.refresh_fields();
-				}
-			}
-		});
-	},
-});
diff --git a/erpnext/payroll/doctype/employee_tax_exemption_proof_submission/employee_tax_exemption_proof_submission.json b/erpnext/payroll/doctype/employee_tax_exemption_proof_submission/employee_tax_exemption_proof_submission.json
deleted file mode 100644
index bb90051..0000000
--- a/erpnext/payroll/doctype/employee_tax_exemption_proof_submission/employee_tax_exemption_proof_submission.json
+++ /dev/null
@@ -1,219 +0,0 @@
-{
- "actions": [],
- "allow_import": 1,
- "allow_rename": 1,
- "autoname": "HR-TAX-PRF-.YYYY.-.#####",
- "creation": "2018-04-13 17:24:11.456132",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "employee",
-  "employee_name",
-  "department",
-  "currency",
-  "column_break_2",
-  "submission_date",
-  "payroll_period",
-  "company",
-  "section_break_5",
-  "tax_exemption_proofs",
-  "section_break_10",
-  "total_actual_amount",
-  "column_break_12",
-  "exemption_amount",
-  "attachment_section",
-  "attachments",
-  "amended_from"
- ],
- "fields": [
-  {
-   "fieldname": "employee",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Employee",
-   "options": "Employee",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "employee.employee_name",
-   "fieldname": "employee_name",
-   "fieldtype": "Data",
-   "label": "Employee Name",
-   "read_only": 1
-  },
-  {
-   "fetch_from": "employee.department",
-   "fieldname": "department",
-   "fieldtype": "Link",
-   "label": "Department",
-   "options": "Department",
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break_2",
-   "fieldtype": "Column Break"
-  },
-  {
-   "default": "Today",
-   "fieldname": "submission_date",
-   "fieldtype": "Date",
-   "label": "Submission Date",
-   "reqd": 1
-  },
-  {
-   "fieldname": "payroll_period",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Payroll Period",
-   "options": "Payroll Period",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "employee.company",
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "label": "Company",
-   "options": "Company",
-   "read_only": 1,
-   "reqd": 1
-  },
-  {
-   "fieldname": "section_break_5",
-   "fieldtype": "Section Break"
-  },
-  {
-   "fieldname": "tax_exemption_proofs",
-   "fieldtype": "Table",
-   "label": "Tax Exemption Proofs",
-   "options": "Employee Tax Exemption Proof Submission Detail"
-  },
-  {
-   "fieldname": "section_break_10",
-   "fieldtype": "Section Break"
-  },
-  {
-   "fieldname": "total_actual_amount",
-   "fieldtype": "Currency",
-   "label": "Total Actual Amount",
-   "options": "currency",
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break_12",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "exemption_amount",
-   "fieldtype": "Currency",
-   "label": "Total Exemption Amount",
-   "options": "currency",
-   "read_only": 1
-  },
-  {
-   "fieldname": "attachment_section",
-   "fieldtype": "Section Break"
-  },
-  {
-   "fieldname": "attachments",
-   "fieldtype": "Attach",
-   "label": "Attachments"
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "Employee Tax Exemption Proof Submission",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "depends_on": "eval: doc.employee",
-   "fieldname": "currency",
-   "fieldtype": "Link",
-   "label": "Currency",
-   "options": "Currency",
-   "print_hide": 1,
-   "reqd": 1
-  }
- ],
- "is_submittable": 1,
- "links": [],
- "modified": "2022-01-19 12:58:24.244546",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Employee Tax Exemption Proof Submission",
- "naming_rule": "Expression (old style)",
- "owner": "Administrator",
- "permissions": [
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "Employee",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  }
- ],
- "search_fields": "employee_name",
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": [],
- "title_field": "employee_name",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/employee_tax_exemption_proof_submission/employee_tax_exemption_proof_submission.py b/erpnext/payroll/doctype/employee_tax_exemption_proof_submission/employee_tax_exemption_proof_submission.py
deleted file mode 100644
index b3b66b9..0000000
--- a/erpnext/payroll/doctype/employee_tax_exemption_proof_submission/employee_tax_exemption_proof_submission.py
+++ /dev/null
@@ -1,53 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-from frappe.model.document import Document
-from frappe.utils import flt
-
-from erpnext.hr.utils import (
-	calculate_hra_exemption_for_period,
-	get_total_exemption_amount,
-	validate_active_employee,
-	validate_duplicate_exemption_for_payroll_period,
-	validate_tax_declaration,
-)
-
-
-class EmployeeTaxExemptionProofSubmission(Document):
-	def validate(self):
-		validate_active_employee(self.employee)
-		validate_tax_declaration(self.tax_exemption_proofs)
-		self.set_total_actual_amount()
-		self.set_total_exemption_amount()
-		self.calculate_hra_exemption()
-		validate_duplicate_exemption_for_payroll_period(
-			self.doctype, self.name, self.payroll_period, self.employee
-		)
-
-	def set_total_actual_amount(self):
-		self.total_actual_amount = flt(self.get("house_rent_payment_amount"))
-		for d in self.tax_exemption_proofs:
-			self.total_actual_amount += flt(d.amount)
-
-	def set_total_exemption_amount(self):
-		self.exemption_amount = flt(
-			get_total_exemption_amount(self.tax_exemption_proofs), self.precision("exemption_amount")
-		)
-
-	def calculate_hra_exemption(self):
-		self.monthly_hra_exemption, self.monthly_house_rent, self.total_eligible_hra_exemption = 0, 0, 0
-		if self.get("house_rent_payment_amount"):
-			hra_exemption = calculate_hra_exemption_for_period(self)
-			if hra_exemption:
-				self.exemption_amount += hra_exemption["total_eligible_hra_exemption"]
-				self.exemption_amount = flt(self.exemption_amount, self.precision("exemption_amount"))
-				self.monthly_hra_exemption = flt(
-					hra_exemption["monthly_exemption"], self.precision("monthly_hra_exemption")
-				)
-				self.monthly_house_rent = flt(
-					hra_exemption["monthly_house_rent"], self.precision("monthly_house_rent")
-				)
-				self.total_eligible_hra_exemption = flt(
-					hra_exemption["total_eligible_hra_exemption"], self.precision("total_eligible_hra_exemption")
-				)
diff --git a/erpnext/payroll/doctype/employee_tax_exemption_proof_submission/test_employee_tax_exemption_proof_submission.py b/erpnext/payroll/doctype/employee_tax_exemption_proof_submission/test_employee_tax_exemption_proof_submission.py
deleted file mode 100644
index 416cf31..0000000
--- a/erpnext/payroll/doctype/employee_tax_exemption_proof_submission/test_employee_tax_exemption_proof_submission.py
+++ /dev/null
@@ -1,136 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-import frappe
-from frappe.tests.utils import FrappeTestCase
-
-from erpnext.hr.doctype.employee.test_employee import make_employee
-from erpnext.payroll.doctype.employee_tax_exemption_declaration.test_employee_tax_exemption_declaration import (
-	create_exemption_category,
-	create_payroll_period,
-	setup_hra_exemption_prerequisites,
-)
-
-
-class TestEmployeeTaxExemptionProofSubmission(FrappeTestCase):
-	def setUp(self):
-		make_employee("employee@proofsubmission.com", company="_Test Company")
-		create_payroll_period(company="_Test Company")
-		create_exemption_category()
-		frappe.db.delete("Employee Tax Exemption Proof Submission")
-		frappe.db.delete("Salary Structure Assignment")
-
-	def test_exemption_amount_lesser_than_category_max(self):
-		proof = frappe.get_doc(
-			{
-				"doctype": "Employee Tax Exemption Proof Submission",
-				"employee": frappe.get_value("Employee", {"user_id": "employee@proofsubmission.com"}, "name"),
-				"payroll_period": "Test Payroll Period",
-				"tax_exemption_proofs": [
-					dict(
-						exemption_sub_category="_Test Sub Category",
-						type_of_proof="Test Proof",
-						exemption_category="_Test Category",
-						amount=150000,
-					)
-				],
-			}
-		)
-		self.assertRaises(frappe.ValidationError, proof.save)
-		proof = frappe.get_doc(
-			{
-				"doctype": "Employee Tax Exemption Proof Submission",
-				"payroll_period": "Test Payroll Period",
-				"employee": frappe.get_value("Employee", {"user_id": "employee@proofsubmission.com"}, "name"),
-				"tax_exemption_proofs": [
-					dict(
-						exemption_sub_category="_Test Sub Category",
-						type_of_proof="Test Proof",
-						exemption_category="_Test Category",
-						amount=100000,
-					)
-				],
-			}
-		)
-		self.assertTrue(proof.save)
-		self.assertTrue(proof.submit)
-
-	def test_duplicate_category_in_proof_submission(self):
-		proof = frappe.get_doc(
-			{
-				"doctype": "Employee Tax Exemption Proof Submission",
-				"employee": frappe.get_value("Employee", {"user_id": "employee@proofsubmission.com"}, "name"),
-				"payroll_period": "Test Payroll Period",
-				"tax_exemption_proofs": [
-					dict(
-						exemption_sub_category="_Test Sub Category",
-						exemption_category="_Test Category",
-						type_of_proof="Test Proof",
-						amount=100000,
-					),
-					dict(
-						exemption_sub_category="_Test Sub Category",
-						exemption_category="_Test Category",
-						amount=50000,
-					),
-				],
-			}
-		)
-		self.assertRaises(frappe.ValidationError, proof.save)
-
-	def test_india_hra_exemption(self):
-		# set country
-		current_country = frappe.flags.country
-		frappe.flags.country = "India"
-
-		employee = frappe.get_value("Employee", {"user_id": "employee@proofsubmission.com"}, "name")
-		setup_hra_exemption_prerequisites("Monthly", employee)
-		payroll_period = frappe.db.get_value(
-			"Payroll Period", "_Test Payroll Period", ["start_date", "end_date"], as_dict=True
-		)
-
-		proof = frappe.get_doc(
-			{
-				"doctype": "Employee Tax Exemption Proof Submission",
-				"employee": employee,
-				"company": "_Test Company",
-				"payroll_period": "_Test Payroll Period",
-				"currency": "INR",
-				"house_rent_payment_amount": 600000,
-				"rented_in_metro_city": 1,
-				"rented_from_date": payroll_period.start_date,
-				"rented_to_date": payroll_period.end_date,
-				"tax_exemption_proofs": [
-					dict(
-						exemption_sub_category="_Test Sub Category",
-						exemption_category="_Test Category",
-						type_of_proof="Test Proof",
-						amount=100000,
-					),
-					dict(
-						exemption_sub_category="_Test1 Sub Category",
-						exemption_category="_Test Category",
-						type_of_proof="Test Proof",
-						amount=50000,
-					),
-				],
-			}
-		).insert()
-
-		self.assertEqual(proof.monthly_house_rent, 50000)
-
-		# Monthly HRA received = 3000
-		# should set HRA exemption as per actual annual HRA because that's the minimum
-		self.assertEqual(proof.monthly_hra_exemption, 3000)
-		self.assertEqual(proof.total_eligible_hra_exemption, 36000)
-
-		# total exemptions + house rent payment amount
-		self.assertEqual(proof.total_actual_amount, 750000)
-
-		# 100000 Standard Exemption + 36000 HRA exemption
-		self.assertEqual(proof.exemption_amount, 136000)
-
-		# reset
-		frappe.flags.country = current_country
diff --git a/erpnext/payroll/doctype/employee_tax_exemption_proof_submission_detail/__init__.py b/erpnext/payroll/doctype/employee_tax_exemption_proof_submission_detail/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/doctype/employee_tax_exemption_proof_submission_detail/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/doctype/employee_tax_exemption_proof_submission_detail/employee_tax_exemption_proof_submission_detail.json b/erpnext/payroll/doctype/employee_tax_exemption_proof_submission_detail/employee_tax_exemption_proof_submission_detail.json
deleted file mode 100644
index 2fd8b94..0000000
--- a/erpnext/payroll/doctype/employee_tax_exemption_proof_submission_detail/employee_tax_exemption_proof_submission_detail.json
+++ /dev/null
@@ -1,68 +0,0 @@
-{
- "actions": [],
- "creation": "2018-04-13 17:19:03.006149",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "exemption_sub_category",
-  "exemption_category",
-  "max_amount",
-  "type_of_proof",
-  "amount"
- ],
- "fields": [
-  {
-   "fieldname": "exemption_sub_category",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Exemption Sub Category",
-   "options": "Employee Tax Exemption Sub Category",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "exemption_sub_category.exemption_category",
-   "fieldname": "exemption_category",
-   "fieldtype": "Read Only",
-   "in_list_view": 1,
-   "label": "Exemption Category",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "exemption_sub_category.max_amount",
-   "fieldname": "max_amount",
-   "fieldtype": "Currency",
-   "in_list_view": 1,
-   "label": "Maximum Exemption Amount",
-   "options": "currency",
-   "read_only": 1,
-   "reqd": 1
-  },
-  {
-   "fieldname": "type_of_proof",
-   "fieldtype": "Data",
-   "in_list_view": 1,
-   "label": "Type of Proof",
-   "reqd": 1
-  },
-  {
-   "fieldname": "amount",
-   "fieldtype": "Currency",
-   "in_list_view": 1,
-   "label": "Actual Amount",
-   "options": "currency"
-  }
- ],
- "istable": 1,
- "links": [],
- "modified": "2020-10-20 16:47:31.480870",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Employee Tax Exemption Proof Submission Detail",
- "owner": "Administrator",
- "permissions": [],
- "quick_entry": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/employee_tax_exemption_proof_submission_detail/employee_tax_exemption_proof_submission_detail.py b/erpnext/payroll/doctype/employee_tax_exemption_proof_submission_detail/employee_tax_exemption_proof_submission_detail.py
deleted file mode 100644
index 37209e5..0000000
--- a/erpnext/payroll/doctype/employee_tax_exemption_proof_submission_detail/employee_tax_exemption_proof_submission_detail.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-# import frappe
-from frappe.model.document import Document
-
-
-class EmployeeTaxExemptionProofSubmissionDetail(Document):
-	pass
diff --git a/erpnext/payroll/doctype/employee_tax_exemption_sub_category/__init__.py b/erpnext/payroll/doctype/employee_tax_exemption_sub_category/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/doctype/employee_tax_exemption_sub_category/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/doctype/employee_tax_exemption_sub_category/employee_tax_exemption_sub_category.js b/erpnext/payroll/doctype/employee_tax_exemption_sub_category/employee_tax_exemption_sub_category.js
deleted file mode 100644
index 8a83a27..0000000
--- a/erpnext/payroll/doctype/employee_tax_exemption_sub_category/employee_tax_exemption_sub_category.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Employee Tax Exemption Sub Category', {
-	refresh: function(frm) {
-
-	}
-});
diff --git a/erpnext/payroll/doctype/employee_tax_exemption_sub_category/employee_tax_exemption_sub_category.json b/erpnext/payroll/doctype/employee_tax_exemption_sub_category/employee_tax_exemption_sub_category.json
deleted file mode 100644
index f8c4b8b..0000000
--- a/erpnext/payroll/doctype/employee_tax_exemption_sub_category/employee_tax_exemption_sub_category.json
+++ /dev/null
@@ -1,86 +0,0 @@
-{
- "actions": [],
- "allow_import": 1,
- "allow_rename": 1,
- "autoname": "Prompt",
- "creation": "2018-05-09 12:47:26.983095",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "exemption_category",
-  "max_amount",
-  "is_active"
- ],
- "fields": [
-  {
-   "fieldname": "exemption_category",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Tax Exemption Category",
-   "options": "Employee Tax Exemption Category",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "exemption_category.max_amount",
-   "fetch_if_empty": 1,
-   "fieldname": "max_amount",
-   "fieldtype": "Currency",
-   "in_list_view": 1,
-   "label": "Max Exemption Amount"
-  },
-  {
-   "default": "1",
-   "fieldname": "is_active",
-   "fieldtype": "Check",
-   "label": "Is Active"
-  }
- ],
- "links": [],
- "modified": "2020-06-22 23:18:08.254645",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Employee Tax Exemption Sub Category",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "write": 1
-  }
- ],
- "sort_field": "modified",
- "sort_order": "DESC"
-}
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/employee_tax_exemption_sub_category/employee_tax_exemption_sub_category.py b/erpnext/payroll/doctype/employee_tax_exemption_sub_category/employee_tax_exemption_sub_category.py
deleted file mode 100644
index fb75d67..0000000
--- a/erpnext/payroll/doctype/employee_tax_exemption_sub_category/employee_tax_exemption_sub_category.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.utils import flt
-
-
-class EmployeeTaxExemptionSubCategory(Document):
-	def validate(self):
-		category_max_amount = frappe.db.get_value(
-			"Employee Tax Exemption Category", self.exemption_category, "max_amount"
-		)
-		if flt(self.max_amount) > flt(category_max_amount):
-			frappe.throw(
-				_(
-					"Max Exemption Amount cannot be greater than maximum exemption amount {0} of Tax Exemption Category {1}"
-				).format(category_max_amount, self.exemption_category)
-			)
diff --git a/erpnext/payroll/doctype/employee_tax_exemption_sub_category/test_employee_tax_exemption_sub_category.py b/erpnext/payroll/doctype/employee_tax_exemption_sub_category/test_employee_tax_exemption_sub_category.py
deleted file mode 100644
index 64d2e3a..0000000
--- a/erpnext/payroll/doctype/employee_tax_exemption_sub_category/test_employee_tax_exemption_sub_category.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-
-class TestEmployeeTaxExemptionSubCategory(unittest.TestCase):
-	pass
diff --git a/erpnext/payroll/doctype/gratuity/__init__.py b/erpnext/payroll/doctype/gratuity/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/doctype/gratuity/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/doctype/gratuity/gratuity.js b/erpnext/payroll/doctype/gratuity/gratuity.js
deleted file mode 100644
index 3d69c46..0000000
--- a/erpnext/payroll/doctype/gratuity/gratuity.js
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Gratuity', {
-	setup: function (frm) {
-		frm.set_query("salary_component", function () {
-			return {
-				filters: {
-					type: "Earning"
-				}
-			};
-		});
-
-		frm.set_query("expense_account", function () {
-			return {
-				filters: {
-					"root_type": "Expense",
-					"is_group": 0,
-					"company": frm.doc.company
-				}
-			};
-		});
-
-		frm.set_query("payable_account", function () {
-			return {
-				filters: {
-					"root_type": "Liability",
-					"is_group": 0,
-					"company": frm.doc.company
-				}
-			};
-		});
-	},
-	refresh: function (frm) {
-		if (frm.doc.docstatus == 1 && !frm.doc.pay_via_salary_slip && frm.doc.status == "Unpaid") {
-			frm.add_custom_button(__("Create Payment Entry"), function () {
-				return frappe.call({
-					method: 'erpnext.accounts.doctype.payment_entry.payment_entry.get_payment_entry',
-					args: {
-						"dt": frm.doc.doctype,
-						"dn": frm.doc.name
-					},
-					callback: function (r) {
-						var doclist = frappe.model.sync(r.message);
-						frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
-					}
-				});
-			});
-		}
-	},
-	employee: function (frm) {
-		frm.events.calculate_work_experience_and_amount(frm);
-	},
-	gratuity_rule: function (frm) {
-		frm.events.calculate_work_experience_and_amount(frm);
-	},
-	calculate_work_experience_and_amount: function (frm) {
-
-		if (frm.doc.employee && frm.doc.gratuity_rule) {
-			frappe.call({
-				method: "erpnext.payroll.doctype.gratuity.gratuity.calculate_work_experience_and_amount",
-				args: {
-					employee: frm.doc.employee,
-					gratuity_rule: frm.doc.gratuity_rule
-				}
-			}).then((r) => {
-				frm.set_value("current_work_experience", r.message['current_work_experience']);
-				frm.set_value("amount", r.message['amount']);
-			});
-		}
-	}
-
-});
diff --git a/erpnext/payroll/doctype/gratuity/gratuity.json b/erpnext/payroll/doctype/gratuity/gratuity.json
deleted file mode 100644
index c540baf..0000000
--- a/erpnext/payroll/doctype/gratuity/gratuity.json
+++ /dev/null
@@ -1,233 +0,0 @@
-{
- "actions": [],
- "autoname": "HR-GRA-PAY-.#####",
- "creation": "2022-01-27 16:24:28.200061",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "employee",
-  "employee_name",
-  "department",
-  "designation",
-  "column_break_3",
-  "posting_date",
-  "status",
-  "company",
-  "gratuity_rule",
-  "section_break_5",
-  "pay_via_salary_slip",
-  "payroll_date",
-  "salary_component",
-  "payable_account",
-  "expense_account",
-  "mode_of_payment",
-  "cost_center",
-  "column_break_15",
-  "current_work_experience",
-  "amount",
-  "paid_amount",
-  "amended_from"
- ],
- "fields": [
-  {
-   "fieldname": "employee",
-   "fieldtype": "Link",
-   "in_global_search": 1,
-   "in_list_view": 1,
-   "label": "Employee",
-   "options": "Employee",
-   "reqd": 1,
-   "search_index": 1
-  },
-  {
-   "fetch_from": "employee.company",
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "label": "Company",
-   "options": "Company",
-   "read_only": 1,
-   "reqd": 1
-  },
-  {
-   "fieldname": "posting_date",
-   "fieldtype": "Date",
-   "label": "Posting date",
-   "reqd": 1
-  },
-  {
-   "default": "0",
-   "fieldname": "current_work_experience",
-   "fieldtype": "Int",
-   "label": "Current Work Experience",
-   "read_only": 1
-  },
-  {
-   "default": "0",
-   "fieldname": "amount",
-   "fieldtype": "Currency",
-   "label": "Total Amount",
-   "read_only": 1,
-   "reqd": 1
-  },
-  {
-   "default": "Draft",
-   "fieldname": "status",
-   "fieldtype": "Select",
-   "in_list_view": 1,
-   "label": "Status",
-   "options": "Draft\nUnpaid\nPaid\nSubmitted\nCancelled",
-   "read_only": 1
-  },
-  {
-   "depends_on": "eval: !doc.pay_via_salary_slip",
-   "fieldname": "expense_account",
-   "fieldtype": "Link",
-   "label": "Expense Account",
-   "mandatory_depends_on": "eval: !doc.pay_via_salary_slip",
-   "options": "Account"
-  },
-  {
-   "depends_on": "eval: !doc.pay_via_salary_slip",
-   "fieldname": "mode_of_payment",
-   "fieldtype": "Link",
-   "label": "Mode of Payment",
-   "mandatory_depends_on": "eval: !doc.pay_via_salary_slip",
-   "options": "Mode of Payment"
-  },
-  {
-   "fieldname": "gratuity_rule",
-   "fieldtype": "Link",
-   "label": "Gratuity Rule",
-   "options": "Gratuity Rule",
-   "reqd": 1
-  },
-  {
-   "fieldname": "section_break_5",
-   "fieldtype": "Section Break",
-   "label": "Payment Configuration"
-  },
-  {
-   "fetch_from": "employee.employee_name",
-   "fieldname": "employee_name",
-   "fieldtype": "Data",
-   "label": "Employee Name",
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break_3",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fetch_from": "employee.department",
-   "fieldname": "department",
-   "fieldtype": "Link",
-   "label": "Department",
-   "options": "Department",
-   "read_only": 1
-  },
-  {
-   "fetch_from": "employee.designation",
-   "fieldname": "designation",
-   "fieldtype": "Data",
-   "label": "Designation",
-   "read_only": 1
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "Gratuity",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break_15",
-   "fieldtype": "Column Break"
-  },
-  {
-   "default": "0",
-   "depends_on": "eval:doc.pay_via_salary_slip == 0",
-   "fieldname": "paid_amount",
-   "fieldtype": "Currency",
-   "label": "Paid Amount",
-   "read_only": 1
-  },
-  {
-   "depends_on": "eval: !doc.pay_via_salary_slip",
-   "fieldname": "payable_account",
-   "fieldtype": "Link",
-   "label": "Payable Account",
-   "mandatory_depends_on": "eval: !doc.pay_via_salary_slip",
-   "options": "Account"
-  },
-  {
-   "fieldname": "cost_center",
-   "fieldtype": "Link",
-   "label": "Cost Center",
-   "options": "Cost Center"
-  },
-  {
-   "default": "1",
-   "fieldname": "pay_via_salary_slip",
-   "fieldtype": "Check",
-   "label": "Pay via Salary Slip"
-  },
-  {
-   "depends_on": "pay_via_salary_slip",
-   "fieldname": "payroll_date",
-   "fieldtype": "Date",
-   "label": "Payroll Date",
-   "mandatory_depends_on": "pay_via_salary_slip"
-  },
-  {
-   "depends_on": "pay_via_salary_slip",
-   "fieldname": "salary_component",
-   "fieldtype": "Link",
-   "label": "Salary Component",
-   "mandatory_depends_on": "pay_via_salary_slip",
-   "options": "Salary Component"
-  }
- ],
- "index_web_pages_for_search": 1,
- "is_submittable": 1,
- "links": [],
- "modified": "2022-05-27 13:56:14.349183",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Gratuity",
- "naming_rule": "Expression (old style)",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "write": 1
-  }
- ],
- "search_fields": "employee_name",
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": [],
- "title_field": "employee_name"
-}
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/gratuity/gratuity.py b/erpnext/payroll/doctype/gratuity/gratuity.py
deleted file mode 100644
index 91740ae..0000000
--- a/erpnext/payroll/doctype/gratuity/gratuity.py
+++ /dev/null
@@ -1,334 +0,0 @@
-# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-from math import floor
-
-import frappe
-from frappe import _, bold
-from frappe.utils import flt, get_datetime, get_link_to_form
-
-from erpnext.accounts.general_ledger import make_gl_entries
-from erpnext.controllers.accounts_controller import AccountsController
-
-
-class Gratuity(AccountsController):
-	def validate(self):
-		data = calculate_work_experience_and_amount(self.employee, self.gratuity_rule)
-		self.current_work_experience = data["current_work_experience"]
-		self.amount = data["amount"]
-		if self.docstatus == 1:
-			self.status = "Unpaid"
-
-	def on_submit(self):
-		if self.pay_via_salary_slip:
-			self.create_additional_salary()
-		else:
-			self.create_gl_entries()
-
-	def on_cancel(self):
-		self.ignore_linked_doctypes = ["GL Entry"]
-		self.create_gl_entries(cancel=True)
-
-	def create_gl_entries(self, cancel=False):
-		gl_entries = self.get_gl_entries()
-		make_gl_entries(gl_entries, cancel)
-
-	def get_gl_entries(self):
-		gl_entry = []
-		# payable entry
-		if self.amount:
-			gl_entry.append(
-				self.get_gl_dict(
-					{
-						"account": self.payable_account,
-						"credit": self.amount,
-						"credit_in_account_currency": self.amount,
-						"against": self.expense_account,
-						"party_type": "Employee",
-						"party": self.employee,
-						"against_voucher_type": self.doctype,
-						"against_voucher": self.name,
-						"cost_center": self.cost_center,
-					},
-					item=self,
-				)
-			)
-
-			# expense entries
-			gl_entry.append(
-				self.get_gl_dict(
-					{
-						"account": self.expense_account,
-						"debit": self.amount,
-						"debit_in_account_currency": self.amount,
-						"against": self.payable_account,
-						"cost_center": self.cost_center,
-					},
-					item=self,
-				)
-			)
-		else:
-			frappe.throw(_("Total Amount can not be zero"))
-
-		return gl_entry
-
-	def create_additional_salary(self):
-		if self.pay_via_salary_slip:
-			additional_salary = frappe.new_doc("Additional Salary")
-			additional_salary.employee = self.employee
-			additional_salary.salary_component = self.salary_component
-			additional_salary.overwrite_salary_structure_amount = 0
-			additional_salary.amount = self.amount
-			additional_salary.payroll_date = self.payroll_date
-			additional_salary.company = self.company
-			additional_salary.ref_doctype = self.doctype
-			additional_salary.ref_docname = self.name
-			additional_salary.submit()
-
-	def set_total_advance_paid(self):
-		paid_amount = frappe.db.sql(
-			"""
-			select ifnull(sum(debit_in_account_currency), 0) as paid_amount
-			from `tabGL Entry`
-			where against_voucher_type = 'Gratuity'
-				and against_voucher = %s
-				and party_type = 'Employee'
-				and party = %s
-		""",
-			(self.name, self.employee),
-			as_dict=1,
-		)[0].paid_amount
-
-		if flt(paid_amount) > self.amount:
-			frappe.throw(_("Row {0}# Paid Amount cannot be greater than Total amount"))
-
-		self.db_set("paid_amount", paid_amount)
-		if self.amount == self.paid_amount:
-			self.db_set("status", "Paid")
-
-
-@frappe.whitelist()
-def calculate_work_experience_and_amount(employee, gratuity_rule):
-	current_work_experience = calculate_work_experience(employee, gratuity_rule) or 0
-	gratuity_amount = calculate_gratuity_amount(employee, gratuity_rule, current_work_experience) or 0
-
-	return {"current_work_experience": current_work_experience, "amount": gratuity_amount}
-
-
-def calculate_work_experience(employee, gratuity_rule):
-
-	total_working_days_per_year, minimum_year_for_gratuity = frappe.db.get_value(
-		"Gratuity Rule", gratuity_rule, ["total_working_days_per_year", "minimum_year_for_gratuity"]
-	)
-
-	date_of_joining, relieving_date = frappe.db.get_value(
-		"Employee", employee, ["date_of_joining", "relieving_date"]
-	)
-	if not relieving_date:
-		frappe.throw(
-			_("Please set Relieving Date for employee: {0}").format(
-				bold(get_link_to_form("Employee", employee))
-			)
-		)
-
-	method = frappe.db.get_value(
-		"Gratuity Rule", gratuity_rule, "work_experience_calculation_function"
-	)
-	employee_total_workings_days = calculate_employee_total_workings_days(
-		employee, date_of_joining, relieving_date
-	)
-
-	current_work_experience = employee_total_workings_days / total_working_days_per_year or 1
-	current_work_experience = get_work_experience_using_method(
-		method, current_work_experience, minimum_year_for_gratuity, employee
-	)
-	return current_work_experience
-
-
-def calculate_employee_total_workings_days(employee, date_of_joining, relieving_date):
-	employee_total_workings_days = (get_datetime(relieving_date) - get_datetime(date_of_joining)).days
-
-	payroll_based_on = frappe.db.get_value("Payroll Settings", None, "payroll_based_on") or "Leave"
-	if payroll_based_on == "Leave":
-		total_lwp = get_non_working_days(employee, relieving_date, "On Leave")
-		employee_total_workings_days -= total_lwp
-	elif payroll_based_on == "Attendance":
-		total_absents = get_non_working_days(employee, relieving_date, "Absent")
-		employee_total_workings_days -= total_absents
-
-	return employee_total_workings_days
-
-
-def get_work_experience_using_method(
-	method, current_work_experience, minimum_year_for_gratuity, employee
-):
-	if method == "Round off Work Experience":
-		current_work_experience = round(current_work_experience)
-	else:
-		current_work_experience = floor(current_work_experience)
-
-	if current_work_experience < minimum_year_for_gratuity:
-		frappe.throw(
-			_("Employee: {0} have to complete minimum {1} years for gratuity").format(
-				bold(employee), minimum_year_for_gratuity
-			)
-		)
-	return current_work_experience
-
-
-def get_non_working_days(employee, relieving_date, status):
-
-	filters = {
-		"docstatus": 1,
-		"status": status,
-		"employee": employee,
-		"attendance_date": ("<=", get_datetime(relieving_date)),
-	}
-
-	if status == "On Leave":
-		lwp_leave_types = frappe.get_list("Leave Type", filters={"is_lwp": 1})
-		lwp_leave_types = [leave_type.name for leave_type in lwp_leave_types]
-		filters["leave_type"] = ("IN", lwp_leave_types)
-
-	record = frappe.get_all("Attendance", filters=filters, fields=["COUNT(name) as total_lwp"])
-	return record[0].total_lwp if len(record) else 0
-
-
-def calculate_gratuity_amount(employee, gratuity_rule, experience):
-	applicable_earnings_component = get_applicable_components(gratuity_rule)
-	total_applicable_components_amount = get_total_applicable_component_amount(
-		employee, applicable_earnings_component, gratuity_rule
-	)
-
-	calculate_gratuity_amount_based_on = frappe.db.get_value(
-		"Gratuity Rule", gratuity_rule, "calculate_gratuity_amount_based_on"
-	)
-	gratuity_amount = 0
-	slabs = get_gratuity_rule_slabs(gratuity_rule)
-	slab_found = False
-	year_left = experience
-
-	for slab in slabs:
-		if calculate_gratuity_amount_based_on == "Current Slab":
-			slab_found, gratuity_amount = calculate_amount_based_on_current_slab(
-				slab.from_year,
-				slab.to_year,
-				experience,
-				total_applicable_components_amount,
-				slab.fraction_of_applicable_earnings,
-			)
-			if slab_found:
-				break
-
-		elif calculate_gratuity_amount_based_on == "Sum of all previous slabs":
-			if slab.to_year == 0 and slab.from_year == 0:
-				gratuity_amount += (
-					year_left * total_applicable_components_amount * slab.fraction_of_applicable_earnings
-				)
-				slab_found = True
-				break
-
-			if experience > slab.to_year and experience > slab.from_year and slab.to_year != 0:
-				gratuity_amount += (
-					(slab.to_year - slab.from_year)
-					* total_applicable_components_amount
-					* slab.fraction_of_applicable_earnings
-				)
-				year_left -= slab.to_year - slab.from_year
-				slab_found = True
-			elif slab.from_year <= experience and (experience < slab.to_year or slab.to_year == 0):
-				gratuity_amount += (
-					year_left * total_applicable_components_amount * slab.fraction_of_applicable_earnings
-				)
-				slab_found = True
-
-	if not slab_found:
-		frappe.throw(
-			_("No Suitable Slab found for Calculation of gratuity amount in Gratuity Rule: {0}").format(
-				bold(gratuity_rule)
-			)
-		)
-	return gratuity_amount
-
-
-def get_applicable_components(gratuity_rule):
-	applicable_earnings_component = frappe.get_all(
-		"Gratuity Applicable Component", filters={"parent": gratuity_rule}, fields=["salary_component"]
-	)
-	if len(applicable_earnings_component) == 0:
-		frappe.throw(
-			_("No Applicable Earnings Component found for Gratuity Rule: {0}").format(
-				bold(get_link_to_form("Gratuity Rule", gratuity_rule))
-			)
-		)
-	applicable_earnings_component = [
-		component.salary_component for component in applicable_earnings_component
-	]
-
-	return applicable_earnings_component
-
-
-def get_total_applicable_component_amount(employee, applicable_earnings_component, gratuity_rule):
-	sal_slip = get_last_salary_slip(employee)
-	if not sal_slip:
-		frappe.throw(_("No Salary Slip is found for Employee: {0}").format(bold(employee)))
-	component_and_amounts = frappe.get_all(
-		"Salary Detail",
-		filters={
-			"docstatus": 1,
-			"parent": sal_slip,
-			"parentfield": "earnings",
-			"salary_component": ("in", applicable_earnings_component),
-		},
-		fields=["amount"],
-	)
-	total_applicable_components_amount = 0
-	if not len(component_and_amounts):
-		frappe.throw(_("No Applicable Component is present in last month salary slip"))
-	for data in component_and_amounts:
-		total_applicable_components_amount += data.amount
-	return total_applicable_components_amount
-
-
-def calculate_amount_based_on_current_slab(
-	from_year,
-	to_year,
-	experience,
-	total_applicable_components_amount,
-	fraction_of_applicable_earnings,
-):
-	slab_found = False
-	gratuity_amount = 0
-	if experience >= from_year and (to_year == 0 or experience < to_year):
-		gratuity_amount = (
-			total_applicable_components_amount * experience * fraction_of_applicable_earnings
-		)
-		if fraction_of_applicable_earnings:
-			slab_found = True
-
-	return slab_found, gratuity_amount
-
-
-def get_gratuity_rule_slabs(gratuity_rule):
-	return frappe.get_all(
-		"Gratuity Rule Slab", filters={"parent": gratuity_rule}, fields=["*"], order_by="idx"
-	)
-
-
-def get_salary_structure(employee):
-	return frappe.get_list(
-		"Salary Structure Assignment",
-		filters={"employee": employee, "docstatus": 1},
-		fields=["from_date", "salary_structure"],
-		order_by="from_date desc",
-	)[0].salary_structure
-
-
-def get_last_salary_slip(employee):
-	salary_slips = frappe.get_list(
-		"Salary Slip", filters={"employee": employee, "docstatus": 1}, order_by="start_date desc"
-	)
-	if not salary_slips:
-		return
-	return salary_slips[0].name
diff --git a/erpnext/payroll/doctype/gratuity/gratuity_dashboard.py b/erpnext/payroll/doctype/gratuity/gratuity_dashboard.py
deleted file mode 100644
index 9396461..0000000
--- a/erpnext/payroll/doctype/gratuity/gratuity_dashboard.py
+++ /dev/null
@@ -1,11 +0,0 @@
-from frappe import _
-
-
-def get_data():
-	return {
-		"fieldname": "reference_name",
-		"non_standard_fieldnames": {
-			"Additional Salary": "ref_docname",
-		},
-		"transactions": [{"label": _("Payment"), "items": ["Payment Entry", "Additional Salary"]}],
-	}
diff --git a/erpnext/payroll/doctype/gratuity/gratuity_list.js b/erpnext/payroll/doctype/gratuity/gratuity_list.js
deleted file mode 100644
index 20e3d5b..0000000
--- a/erpnext/payroll/doctype/gratuity/gratuity_list.js
+++ /dev/null
@@ -1,12 +0,0 @@
-frappe.listview_settings["Gratuity"] = {
-	get_indicator: function(doc) {
-		let status_color = {
-			"Draft": "red",
-			"Submitted": "blue",
-			"Cancelled": "red",
-			"Paid": "green",
-			"Unpaid": "orange",
-		};
-		return [__(doc.status), status_color[doc.status], "status,=,"+doc.status];
-	}
-};
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/gratuity/test_gratuity.py b/erpnext/payroll/doctype/gratuity/test_gratuity.py
deleted file mode 100644
index 1155a06..0000000
--- a/erpnext/payroll/doctype/gratuity/test_gratuity.py
+++ /dev/null
@@ -1,231 +0,0 @@
-# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-import frappe
-from frappe.tests.utils import FrappeTestCase
-from frappe.utils import add_days, add_months, floor, flt, get_datetime, get_first_day, getdate
-
-from erpnext.hr.doctype.employee.test_employee import make_employee
-from erpnext.hr.doctype.expense_claim.test_expense_claim import get_payable_account
-from erpnext.hr.doctype.holiday_list.test_holiday_list import set_holiday_list
-from erpnext.payroll.doctype.gratuity.gratuity import get_last_salary_slip
-from erpnext.payroll.doctype.salary_slip.test_salary_slip import (
-	make_deduction_salary_component,
-	make_earning_salary_component,
-	make_employee_salary_slip,
-	make_holiday_list,
-)
-from erpnext.payroll.doctype.salary_structure.salary_structure import make_salary_slip
-from erpnext.regional.united_arab_emirates.setup import create_gratuity_rule
-
-test_dependencies = ["Salary Component", "Salary Slip", "Account"]
-
-
-class TestGratuity(FrappeTestCase):
-	def setUp(self):
-		frappe.db.delete("Gratuity")
-		frappe.db.delete("Salary Slip")
-		frappe.db.delete("Additional Salary", {"ref_doctype": "Gratuity"})
-
-		make_earning_salary_component(
-			setup=True, test_tax=True, company_list=["_Test Company"], include_flexi_benefits=True
-		)
-		make_deduction_salary_component(setup=True, test_tax=True, company_list=["_Test Company"])
-		make_holiday_list()
-
-	@set_holiday_list("Salary Slip Test Holiday List", "_Test Company")
-	def test_get_last_salary_slip_should_return_none_for_new_employee(self):
-		new_employee = make_employee("new_employee@salary.com", company="_Test Company")
-		salary_slip = get_last_salary_slip(new_employee)
-		self.assertIsNone(salary_slip)
-
-	@set_holiday_list("Salary Slip Test Holiday List", "_Test Company")
-	def test_gratuity_based_on_current_slab_via_additional_salary(self):
-		"""
-		Range	|	Fraction
-		5-0		|	1
-		"""
-		doj = add_days(getdate(), -(6 * 365))
-		relieving_date = getdate()
-
-		employee = make_employee(
-			"test_employee_gratuity@salary.com",
-			company="_Test Company",
-			date_of_joining=doj,
-			relieving_date=relieving_date,
-		)
-		sal_slip = create_salary_slip("test_employee_gratuity@salary.com")
-
-		rule = get_gratuity_rule("Rule Under Unlimited Contract on termination (UAE)")
-		gratuity = create_gratuity(pay_via_salary_slip=1, employee=employee, rule=rule.name)
-
-		# work experience calculation
-		employee_total_workings_days = (get_datetime(relieving_date) - get_datetime(doj)).days
-		experience = floor(employee_total_workings_days / rule.total_working_days_per_year)
-		self.assertEqual(gratuity.current_work_experience, experience)
-
-		# amount calculation
-		component_amount = frappe.get_all(
-			"Salary Detail",
-			filters={
-				"docstatus": 1,
-				"parent": sal_slip,
-				"parentfield": "earnings",
-				"salary_component": "Basic Salary",
-			},
-			fields=["amount"],
-			limit=1,
-		)
-		gratuity_amount = component_amount[0].amount * experience
-		self.assertEqual(flt(gratuity_amount, 2), flt(gratuity.amount, 2))
-
-		# additional salary creation (Pay via salary slip)
-		self.assertTrue(frappe.db.exists("Additional Salary", {"ref_docname": gratuity.name}))
-
-		# gratuity should be marked "Paid" on the next salary slip submission
-		salary_slip = make_salary_slip("Test Gratuity", employee=employee)
-		salary_slip.posting_date = getdate()
-		salary_slip.insert()
-		salary_slip.submit()
-
-		gratuity.reload()
-		self.assertEqual(gratuity.status, "Paid")
-
-	@set_holiday_list("Salary Slip Test Holiday List", "_Test Company")
-	def test_gratuity_based_on_all_previous_slabs_via_payment_entry(self):
-		"""
-		Range	|	Fraction
-		0-1		|	0
-		1-5		|	0.7
-		5-0		|	1
-		"""
-		from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry
-
-		doj = add_days(getdate(), -(6 * 365))
-		relieving_date = getdate()
-
-		employee = make_employee(
-			"test_employee_gratuity@salary.com",
-			company="_Test Company",
-			date_of_joining=doj,
-			relieving_date=relieving_date,
-		)
-
-		sal_slip = create_salary_slip("test_employee_gratuity@salary.com")
-		rule = get_gratuity_rule("Rule Under Limited Contract (UAE)")
-		set_mode_of_payment_account()
-
-		gratuity = create_gratuity(
-			expense_account="Payment Account - _TC", mode_of_payment="Cash", employee=employee
-		)
-
-		# work experience calculation
-		employee_total_workings_days = (get_datetime(relieving_date) - get_datetime(doj)).days
-		experience = floor(employee_total_workings_days / rule.total_working_days_per_year)
-		self.assertEqual(gratuity.current_work_experience, experience)
-
-		# amount calculation
-		component_amount = frappe.get_all(
-			"Salary Detail",
-			filters={
-				"docstatus": 1,
-				"parent": sal_slip,
-				"parentfield": "earnings",
-				"salary_component": "Basic Salary",
-			},
-			fields=["amount"],
-			limit=1,
-		)
-
-		gratuity_amount = ((0 * 1) + (4 * 0.7) + (1 * 1)) * component_amount[0].amount
-		self.assertEqual(flt(gratuity_amount, 2), flt(gratuity.amount, 2))
-		self.assertEqual(gratuity.status, "Unpaid")
-
-		pe = get_payment_entry("Gratuity", gratuity.name)
-		pe.reference_no = "123467"
-		pe.reference_date = getdate()
-		pe.submit()
-
-		gratuity.reload()
-		self.assertEqual(gratuity.status, "Paid")
-		self.assertEqual(flt(gratuity.paid_amount, 2), flt(gratuity.amount, 2))
-
-
-def get_gratuity_rule(name):
-	rule = frappe.db.exists("Gratuity Rule", name)
-	if not rule:
-		create_gratuity_rule()
-	rule = frappe.get_doc("Gratuity Rule", name)
-	rule.applicable_earnings_component = []
-	rule.append("applicable_earnings_component", {"salary_component": "Basic Salary"})
-	rule.save()
-
-	return rule
-
-
-def create_gratuity(**args):
-	if args:
-		args = frappe._dict(args)
-	gratuity = frappe.new_doc("Gratuity")
-	gratuity.employee = args.employee
-	gratuity.posting_date = getdate()
-	gratuity.gratuity_rule = args.rule or "Rule Under Limited Contract (UAE)"
-	gratuity.pay_via_salary_slip = args.pay_via_salary_slip or 0
-	if gratuity.pay_via_salary_slip:
-		gratuity.payroll_date = getdate()
-		gratuity.salary_component = "Performance Bonus"
-	else:
-		gratuity.expense_account = args.expense_account or "Payment Account - _TC"
-		gratuity.payable_account = args.payable_account or get_payable_account("_Test Company")
-		gratuity.mode_of_payment = args.mode_of_payment or "Cash"
-
-	gratuity.save()
-	gratuity.submit()
-
-	return gratuity
-
-
-def set_mode_of_payment_account():
-	if not frappe.db.exists("Account", "Payment Account - _TC"):
-		mode_of_payment = create_account()
-
-	mode_of_payment = frappe.get_doc("Mode of Payment", "Cash")
-
-	mode_of_payment.accounts = []
-	mode_of_payment.append(
-		"accounts", {"company": "_Test Company", "default_account": "_Test Bank - _TC"}
-	)
-	mode_of_payment.save()
-
-
-def create_account():
-	return frappe.get_doc(
-		{
-			"doctype": "Account",
-			"company": "_Test Company",
-			"account_name": "Payment Account",
-			"root_type": "Asset",
-			"report_type": "Balance Sheet",
-			"currency": "INR",
-			"parent_account": "Bank Accounts - _TC",
-			"account_type": "Bank",
-		}
-	).insert(ignore_permissions=True)
-
-
-def create_salary_slip(employee):
-	if not frappe.db.exists("Salary Slip", {"employee": employee}):
-		posting_date = get_first_day(add_months(getdate(), -1))
-		salary_slip = make_employee_salary_slip(
-			employee, "Monthly", "Test Gratuity", posting_date=posting_date
-		)
-		salary_slip.start_date = posting_date
-		salary_slip.end_date = None
-		salary_slip.submit()
-		salary_slip = salary_slip.name
-	else:
-		salary_slip = get_last_salary_slip(employee)
-
-	return salary_slip
diff --git a/erpnext/payroll/doctype/gratuity_applicable_component/__init__.py b/erpnext/payroll/doctype/gratuity_applicable_component/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/doctype/gratuity_applicable_component/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/doctype/gratuity_applicable_component/gratuity_applicable_component.json b/erpnext/payroll/doctype/gratuity_applicable_component/gratuity_applicable_component.json
deleted file mode 100644
index eea0e85..0000000
--- a/erpnext/payroll/doctype/gratuity_applicable_component/gratuity_applicable_component.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "actions": [],
- "creation": "2020-08-05 19:00:28.097265",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "salary_component"
- ],
- "fields": [
-  {
-   "fieldname": "salary_component",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Salary Component ",
-   "options": "Salary Component",
-   "reqd": 1
-  }
- ],
- "istable": 1,
- "links": [],
- "modified": "2020-08-05 20:17:13.855035",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Gratuity Applicable Component",
- "owner": "Administrator",
- "permissions": [],
- "quick_entry": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/gratuity_applicable_component/gratuity_applicable_component.py b/erpnext/payroll/doctype/gratuity_applicable_component/gratuity_applicable_component.py
deleted file mode 100644
index 9c1657d..0000000
--- a/erpnext/payroll/doctype/gratuity_applicable_component/gratuity_applicable_component.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-# import frappe
-from frappe.model.document import Document
-
-
-class GratuityApplicableComponent(Document):
-	pass
diff --git a/erpnext/payroll/doctype/gratuity_rule/__init__.py b/erpnext/payroll/doctype/gratuity_rule/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/doctype/gratuity_rule/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/doctype/gratuity_rule/gratuity_rule.js b/erpnext/payroll/doctype/gratuity_rule/gratuity_rule.js
deleted file mode 100644
index 7290a9e..0000000
--- a/erpnext/payroll/doctype/gratuity_rule/gratuity_rule.js
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Gratuity Rule', {
-	// refresh: function(frm) {
-
-	// }
-});
-
-frappe.ui.form.on('Gratuity Rule Slab', {
-
-	/*
-		Slabs should be in order like
-
-		from | to | fraction
-		0    | 4  | 0.5
-		4    | 6  | 0.7
-
-		So, on row addition setting current_row.from = previous row.to.
-		On to_year insert we have to check that it is not less than from_year
-
-		Wrong order may lead to Wrong Calculation
-	*/
-
-	gratuity_rule_slabs_add(frm, cdt, cdn) {
-		let row = locals[cdt][cdn];
-		let array_idx = row.idx - 1;
-		if (array_idx > 0) {
-			row.from_year = cur_frm.doc.gratuity_rule_slabs[array_idx - 1].to_year;
-			frm.refresh();
-		}
-	},
-
-	to_year(frm, cdt, cdn) {
-		let row = locals[cdt][cdn];
-		if (row.to_year <= row.from_year && row.to_year === 0) {
-			frappe.throw(__("To(Year) year can not be less than From(year)"));
-		}
-	}
-});
diff --git a/erpnext/payroll/doctype/gratuity_rule/gratuity_rule.json b/erpnext/payroll/doctype/gratuity_rule/gratuity_rule.json
deleted file mode 100644
index 84cdcf5..0000000
--- a/erpnext/payroll/doctype/gratuity_rule/gratuity_rule.json
+++ /dev/null
@@ -1,114 +0,0 @@
-{
- "actions": [],
- "autoname": "Prompt",
- "creation": "2020-08-05 19:00:36.103500",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "applicable_earnings_component",
-  "work_experience_calculation_function",
-  "total_working_days_per_year",
-  "column_break_3",
-  "disable",
-  "calculate_gratuity_amount_based_on",
-  "minimum_year_for_gratuity",
-  "gratuity_rules_section",
-  "gratuity_rule_slabs"
- ],
- "fields": [
-  {
-   "default": "0",
-   "fieldname": "disable",
-   "fieldtype": "Check",
-   "label": "Disable"
-  },
-  {
-   "fieldname": "calculate_gratuity_amount_based_on",
-   "fieldtype": "Select",
-   "in_list_view": 1,
-   "label": "Calculate Gratuity Amount Based On",
-   "options": "Current Slab\nSum of all previous slabs",
-   "reqd": 1
-  },
-  {
-   "description": "Salary components should be part of the Salary Structure.",
-   "fieldname": "applicable_earnings_component",
-   "fieldtype": "Table MultiSelect",
-   "label": "Applicable Earnings Component",
-   "options": "Gratuity Applicable Component",
-   "reqd": 1
-  },
-  {
-   "fieldname": "column_break_3",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "gratuity_rules_section",
-   "fieldtype": "Section Break",
-   "label": "Gratuity Rules"
-  },
-  {
-   "description": "Leave <b>From</b> and <b>To</b> 0 for no upper and lower limit.",
-   "fieldname": "gratuity_rule_slabs",
-   "fieldtype": "Table",
-   "label": "Current Work Experience",
-   "options": "Gratuity Rule Slab",
-   "reqd": 1
-  },
-  {
-   "default": "Round off Work Experience",
-   "fieldname": "work_experience_calculation_function",
-   "fieldtype": "Select",
-   "label": "Work Experience Calculation method",
-   "options": "Round off Work Experience\nTake Exact Completed Years"
-  },
-  {
-   "default": "365",
-   "fieldname": "total_working_days_per_year",
-   "fieldtype": "Int",
-   "label": "Total working Days Per Year"
-  },
-  {
-   "fieldname": "minimum_year_for_gratuity",
-   "fieldtype": "Int",
-   "label": "Minimum Year for Gratuity"
-  }
- ],
- "index_web_pages_for_search": 1,
- "links": [],
- "modified": "2020-12-03 17:08:27.891535",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Gratuity Rule",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "write": 1
-  }
- ],
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/gratuity_rule/gratuity_rule.py b/erpnext/payroll/doctype/gratuity_rule/gratuity_rule.py
deleted file mode 100644
index 5cde79a..0000000
--- a/erpnext/payroll/doctype/gratuity_rule/gratuity_rule.py
+++ /dev/null
@@ -1,42 +0,0 @@
-# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-
-
-class GratuityRule(Document):
-	def validate(self):
-		for current_slab in self.gratuity_rule_slabs:
-			if (current_slab.from_year > current_slab.to_year) and current_slab.to_year != 0:
-				frappe.throw(
-					_("Row {0}: From (Year) can not be greater than To (Year)").format(current_slab.idx)
-				)
-
-			if (
-				current_slab.to_year == 0 and current_slab.from_year == 0 and len(self.gratuity_rule_slabs) > 1
-			):
-				frappe.throw(
-					_("You can not define multiple slabs if you have a slab with no lower and upper limits.")
-				)
-
-
-def get_gratuity_rule(name, slabs, **args):
-	args = frappe._dict(args)
-
-	rule = frappe.new_doc("Gratuity Rule")
-	rule.name = name
-	rule.calculate_gratuity_amount_based_on = (
-		args.calculate_gratuity_amount_based_on or "Current Slab"
-	)
-	rule.work_experience_calculation_method = (
-		args.work_experience_calculation_method or "Take Exact Completed Years"
-	)
-	rule.minimum_year_for_gratuity = 1
-
-	for slab in slabs:
-		slab = frappe._dict(slab)
-		rule.append("gratuity_rule_slabs", slab)
-	return rule
diff --git a/erpnext/payroll/doctype/gratuity_rule/gratuity_rule_dashboard.py b/erpnext/payroll/doctype/gratuity_rule/gratuity_rule_dashboard.py
deleted file mode 100644
index fa5a9de..0000000
--- a/erpnext/payroll/doctype/gratuity_rule/gratuity_rule_dashboard.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from frappe import _
-
-
-def get_data():
-	return {
-		"fieldname": "gratuity_rule",
-		"transactions": [{"label": _("Gratuity"), "items": ["Gratuity"]}],
-	}
diff --git a/erpnext/payroll/doctype/gratuity_rule/test_gratuity_rule.py b/erpnext/payroll/doctype/gratuity_rule/test_gratuity_rule.py
deleted file mode 100644
index 8393050..0000000
--- a/erpnext/payroll/doctype/gratuity_rule/test_gratuity_rule.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-# import frappe
-import unittest
-
-
-class TestGratuityRule(unittest.TestCase):
-	pass
diff --git a/erpnext/payroll/doctype/gratuity_rule_slab/__init__.py b/erpnext/payroll/doctype/gratuity_rule_slab/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/doctype/gratuity_rule_slab/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/doctype/gratuity_rule_slab/gratuity_rule_slab.json b/erpnext/payroll/doctype/gratuity_rule_slab/gratuity_rule_slab.json
deleted file mode 100644
index bc37b0f..0000000
--- a/erpnext/payroll/doctype/gratuity_rule_slab/gratuity_rule_slab.json
+++ /dev/null
@@ -1,50 +0,0 @@
-{
- "actions": [],
- "creation": "2020-08-05 19:12:49.423500",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "from_year",
-  "to_year",
-  "fraction_of_applicable_earnings"
- ],
- "fields": [
-  {
-   "fieldname": "fraction_of_applicable_earnings",
-   "fieldtype": "Float",
-   "in_list_view": 1,
-   "label": "Fraction of Applicable Earnings ",
-   "reqd": 1
-  },
-  {
-   "default": "0",
-   "fieldname": "from_year",
-   "fieldtype": "Int",
-   "in_list_view": 1,
-   "label": "From(Year)",
-   "read_only": 1,
-   "reqd": 1
-  },
-  {
-   "default": "0",
-   "fieldname": "to_year",
-   "fieldtype": "Int",
-   "in_list_view": 1,
-   "label": "To(Year)",
-   "reqd": 1
-  }
- ],
- "istable": 1,
- "links": [],
- "modified": "2020-08-17 14:09:56.781712",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Gratuity Rule Slab",
- "owner": "Administrator",
- "permissions": [],
- "quick_entry": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/gratuity_rule_slab/gratuity_rule_slab.py b/erpnext/payroll/doctype/gratuity_rule_slab/gratuity_rule_slab.py
deleted file mode 100644
index 2ae6b54..0000000
--- a/erpnext/payroll/doctype/gratuity_rule_slab/gratuity_rule_slab.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-# import frappe
-from frappe.model.document import Document
-
-
-class GratuityRuleSlab(Document):
-	pass
diff --git a/erpnext/payroll/doctype/income_tax_slab/__init__.py b/erpnext/payroll/doctype/income_tax_slab/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/doctype/income_tax_slab/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/doctype/income_tax_slab/income_tax_slab.js b/erpnext/payroll/doctype/income_tax_slab/income_tax_slab.js
deleted file mode 100644
index 7d780d3..0000000
--- a/erpnext/payroll/doctype/income_tax_slab/income_tax_slab.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Income Tax Slab', {
-	currency: function(frm) {
-		frm.refresh_fields();
-	}
-});
diff --git a/erpnext/payroll/doctype/income_tax_slab/income_tax_slab.json b/erpnext/payroll/doctype/income_tax_slab/income_tax_slab.json
deleted file mode 100644
index 5a7de37..0000000
--- a/erpnext/payroll/doctype/income_tax_slab/income_tax_slab.json
+++ /dev/null
@@ -1,162 +0,0 @@
-{
- "actions": [],
- "autoname": "Prompt",
- "creation": "2020-03-17 16:50:35.564915",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "effective_from",
-  "company",
-  "column_break_3",
-  "currency",
-  "standard_tax_exemption_amount",
-  "allow_tax_exemption",
-  "disabled",
-  "amended_from",
-  "taxable_salary_slabs_section",
-  "slabs",
-  "taxes_and_charges_on_income_tax_section",
-  "other_taxes_and_charges"
- ],
- "fields": [
-  {
-   "fieldname": "effective_from",
-   "fieldtype": "Date",
-   "in_list_view": 1,
-   "label": "Effective from",
-   "reqd": 1
-  },
-  {
-   "fieldname": "column_break_3",
-   "fieldtype": "Column Break"
-  },
-  {
-   "default": "0",
-   "description": "If enabled, Tax Exemption Declaration will be considered for income tax calculation.",
-   "fieldname": "allow_tax_exemption",
-   "fieldtype": "Check",
-   "label": "Allow Tax Exemption"
-  },
-  {
-   "fieldname": "taxable_salary_slabs_section",
-   "fieldtype": "Section Break",
-   "label": "Taxable Salary Slabs"
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "Income Tax Slab",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "fieldname": "slabs",
-   "fieldtype": "Table",
-   "label": "Taxable Salary Slabs",
-   "options": "Taxable Salary Slab",
-   "reqd": 1
-  },
-  {
-   "allow_on_submit": 1,
-   "default": "0",
-   "fieldname": "disabled",
-   "fieldtype": "Check",
-   "label": "Disabled"
-  },
-  {
-   "depends_on": "allow_tax_exemption",
-   "fieldname": "standard_tax_exemption_amount",
-   "fieldtype": "Currency",
-   "label": "Standard Tax Exemption Amount",
-   "options": "currency"
-  },
-  {
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "label": "Company",
-   "options": "Company"
-  },
-  {
-   "collapsible": 1,
-   "collapsible_depends_on": "other_taxes_and_charges",
-   "fieldname": "taxes_and_charges_on_income_tax_section",
-   "fieldtype": "Section Break",
-   "label": "Taxes and Charges on Income Tax"
-  },
-  {
-   "fieldname": "other_taxes_and_charges",
-   "fieldtype": "Table",
-   "label": "Other Taxes and Charges",
-   "options": "Income Tax Slab Other Charges"
-  },
-  {
-   "fetch_from": "company.default_currency",
-   "fieldname": "currency",
-   "fieldtype": "Link",
-   "label": "Currency",
-   "options": "Currency",
-   "print_hide": 1,
-   "reqd": 1
-  }
- ],
- "is_submittable": 1,
- "links": [],
- "modified": "2021-03-31 22:42:08.139520",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Income Tax Slab",
- "owner": "Administrator",
- "permissions": [
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  }
- ],
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/income_tax_slab/income_tax_slab.py b/erpnext/payroll/doctype/income_tax_slab/income_tax_slab.py
deleted file mode 100644
index e62d61f..0000000
--- a/erpnext/payroll/doctype/income_tax_slab/income_tax_slab.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-from frappe.model.document import Document
-
-# import frappe
-import erpnext
-
-
-class IncomeTaxSlab(Document):
-	def validate(self):
-		if self.company:
-			self.currency = erpnext.get_company_currency(self.company)
diff --git a/erpnext/payroll/doctype/income_tax_slab/test_income_tax_slab.py b/erpnext/payroll/doctype/income_tax_slab/test_income_tax_slab.py
deleted file mode 100644
index 680cb3b..0000000
--- a/erpnext/payroll/doctype/income_tax_slab/test_income_tax_slab.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-# import frappe
-import unittest
-
-
-class TestIncomeTaxSlab(unittest.TestCase):
-	pass
diff --git a/erpnext/payroll/doctype/income_tax_slab_other_charges/__init__.py b/erpnext/payroll/doctype/income_tax_slab_other_charges/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/doctype/income_tax_slab_other_charges/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/doctype/income_tax_slab_other_charges/income_tax_slab_other_charges.json b/erpnext/payroll/doctype/income_tax_slab_other_charges/income_tax_slab_other_charges.json
deleted file mode 100644
index 0dba338..0000000
--- a/erpnext/payroll/doctype/income_tax_slab_other_charges/income_tax_slab_other_charges.json
+++ /dev/null
@@ -1,75 +0,0 @@
-{
- "actions": [],
- "creation": "2020-04-24 11:46:59.041180",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "description",
-  "column_break_2",
-  "percent",
-  "conditions_section",
-  "min_taxable_income",
-  "column_break_7",
-  "max_taxable_income"
- ],
- "fields": [
-  {
-   "columns": 4,
-   "fieldname": "description",
-   "fieldtype": "Data",
-   "in_list_view": 1,
-   "label": "Description",
-   "reqd": 1
-  },
-  {
-   "fieldname": "column_break_2",
-   "fieldtype": "Column Break"
-  },
-  {
-   "columns": 2,
-   "fieldname": "percent",
-   "fieldtype": "Percent",
-   "in_list_view": 1,
-   "label": "Percent",
-   "reqd": 1
-  },
-  {
-   "fieldname": "conditions_section",
-   "fieldtype": "Section Break",
-   "label": "Conditions"
-  },
-  {
-   "columns": 2,
-   "fieldname": "min_taxable_income",
-   "fieldtype": "Currency",
-   "in_list_view": 1,
-   "label": "Min Taxable Income",
-   "options": "currency"
-  },
-  {
-   "fieldname": "column_break_7",
-   "fieldtype": "Column Break"
-  },
-  {
-   "columns": 2,
-   "fieldname": "max_taxable_income",
-   "fieldtype": "Currency",
-   "in_list_view": 1,
-   "label": "Max Taxable Income",
-   "options": "currency"
-  }
- ],
- "istable": 1,
- "links": [],
- "modified": "2020-10-19 13:45:12.850090",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Income Tax Slab Other Charges",
- "owner": "Administrator",
- "permissions": [],
- "quick_entry": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/income_tax_slab_other_charges/income_tax_slab_other_charges.py b/erpnext/payroll/doctype/income_tax_slab_other_charges/income_tax_slab_other_charges.py
deleted file mode 100644
index 53911a9..0000000
--- a/erpnext/payroll/doctype/income_tax_slab_other_charges/income_tax_slab_other_charges.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-# import frappe
-from frappe.model.document import Document
-
-
-class IncomeTaxSlabOtherCharges(Document):
-	pass
diff --git a/erpnext/payroll/doctype/payroll_employee_detail/__init__.py b/erpnext/payroll/doctype/payroll_employee_detail/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/doctype/payroll_employee_detail/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/doctype/payroll_employee_detail/payroll_employee_detail.json b/erpnext/payroll/doctype/payroll_employee_detail/payroll_employee_detail.json
deleted file mode 100644
index 09c7eb9..0000000
--- a/erpnext/payroll/doctype/payroll_employee_detail/payroll_employee_detail.json
+++ /dev/null
@@ -1,65 +0,0 @@
-{
- "actions": [],
- "creation": "2017-11-30 06:07:33.477781",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "employee",
-  "employee_name",
-  "column_break_3",
-  "department",
-  "designation"
- ],
- "fields": [
-  {
-   "fieldname": "employee",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Employee",
-   "options": "Employee"
-  },
-  {
-   "fetch_from": "employee.employee_name",
-   "fieldname": "employee_name",
-   "fieldtype": "Data",
-   "in_list_view": 1,
-   "label": "Employee Name",
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break_3",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fetch_from": "employee.department",
-   "fieldname": "department",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Department",
-   "options": "Department",
-   "read_only": 1
-  },
-  {
-   "fetch_from": "employee.designation",
-   "fieldname": "designation",
-   "fieldtype": "Data",
-   "in_list_view": 1,
-   "label": "Designation",
-   "read_only": 1
-  }
- ],
- "istable": 1,
- "links": [],
- "modified": "2020-12-17 15:43:29.542977",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Payroll Employee Detail",
- "owner": "Administrator",
- "permissions": [],
- "quick_entry": 1,
- "read_only": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/payroll_employee_detail/payroll_employee_detail.py b/erpnext/payroll/doctype/payroll_employee_detail/payroll_employee_detail.py
deleted file mode 100644
index 8cc426b..0000000
--- a/erpnext/payroll/doctype/payroll_employee_detail/payroll_employee_detail.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-from frappe.model.document import Document
-
-
-class PayrollEmployeeDetail(Document):
-	pass
diff --git a/erpnext/payroll/doctype/payroll_entry/__init__.py b/erpnext/payroll/doctype/payroll_entry/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/doctype/payroll_entry/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/doctype/payroll_entry/payroll_entry.js b/erpnext/payroll/doctype/payroll_entry/payroll_entry.js
deleted file mode 100644
index b06f350..0000000
--- a/erpnext/payroll/doctype/payroll_entry/payroll_entry.js
+++ /dev/null
@@ -1,418 +0,0 @@
-// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-var in_progress = false;
-
-frappe.provide("erpnext.accounts.dimensions");
-
-frappe.ui.form.on('Payroll Entry', {
-	onload: function (frm) {
-		if (!frm.doc.posting_date) {
-			frm.doc.posting_date = frappe.datetime.nowdate();
-		}
-		frm.toggle_reqd(['payroll_frequency'], !frm.doc.salary_slip_based_on_timesheet);
-
-		erpnext.accounts.dimensions.setup_dimension_filters(frm, frm.doctype);
-		frm.events.department_filters(frm);
-		frm.events.payroll_payable_account_filters(frm);
-	},
-
-	department_filters: function (frm) {
-		frm.set_query("department", function () {
-			return {
-				"filters": {
-					"company": frm.doc.company,
-				}
-			};
-		});
-	},
-
-	payroll_payable_account_filters: function (frm) {
-		frm.set_query("payroll_payable_account", function () {
-			return {
-				filters: {
-					"company": frm.doc.company,
-					"root_type": "Liability",
-					"is_group": 0,
-				}
-			};
-		});
-	},
-
-	refresh: function (frm) {
-		if (frm.doc.docstatus === 0 && !frm.is_new()) {
-			frm.page.clear_primary_action();
-			frm.add_custom_button(__("Get Employees"),
-				function () {
-					frm.events.get_employee_details(frm);
-				}
-			).toggleClass("btn-primary", !(frm.doc.employees || []).length);
-		}
-
-		if (
-			(frm.doc.employees || []).length
-			&& !frappe.model.has_workflow(frm.doctype)
-			&& !cint(frm.doc.salary_slips_created)
-			&& (frm.doc.docstatus != 2)
-		) {
-			if (frm.doc.docstatus == 0) {
-				frm.page.clear_primary_action();
-				frm.page.set_primary_action(__("Create Salary Slips"), () => {
-					frm.save("Submit").then(() => {
-						frm.page.clear_primary_action();
-						frm.refresh();
-						frm.events.refresh(frm);
-					});
-				});
-			} else if (frm.doc.docstatus == 1 && frm.doc.status == "Failed") {
-				frm.add_custom_button(__("Create Salary Slip"), function () {
-					frm.call("create_salary_slips", {}, () => {
-						frm.reload_doc();
-					});
-				}).addClass("btn-primary");
-			}
-		}
-
-		if (frm.doc.docstatus == 1 && frm.doc.status == "Submitted") {
-			if (frm.custom_buttons) frm.clear_custom_buttons();
-			frm.events.add_context_buttons(frm);
-		}
-
-		if (frm.doc.status == "Failed" && frm.doc.error_message) {
-			const issue = `<a id="jump_to_error" style="text-decoration: underline;">issue</a>`;
-			let process = (cint(frm.doc.salary_slips_created)) ? "submission" : "creation";
-
-			frm.dashboard.set_headline(
-				__("Salary Slip {0} failed. You can resolve the {1} and retry {0}.", [process, issue])
-			);
-
-			$("#jump_to_error").on("click", (e) => {
-				e.preventDefault();
-				frappe.utils.scroll_to(
-					frm.get_field("error_message").$wrapper,
-					true,
-					30
-				);
-			});
-		}
-
-		frappe.realtime.on("completed_salary_slip_creation", function() {
-			frm.reload_doc();
-		});
-
-		frappe.realtime.on("completed_salary_slip_submission", function() {
-			frm.reload_doc();
-		});
-	},
-
-	get_employee_details: function (frm) {
-		return frappe.call({
-			doc: frm.doc,
-			method: 'fill_employee_details',
-		}).then(r => {
-			if (r.docs && r.docs[0].employees) {
-				frm.employees = r.docs[0].employees;
-				frm.dirty();
-				frm.save();
-				frm.refresh();
-				if (r.docs[0].validate_attendance) {
-					render_employee_attendance(frm, r.message);
-				}
-			}
-		});
-	},
-
-	create_salary_slips: function (frm) {
-		frm.call({
-			doc: frm.doc,
-			method: "create_salary_slips",
-			callback: function () {
-				frm.reload_doc();
-				frm.toolbar.refresh();
-			}
-		});
-	},
-
-	add_context_buttons: function (frm) {
-		if (frm.doc.salary_slips_submitted || (frm.doc.__onload && frm.doc.__onload.submitted_ss)) {
-			frm.events.add_bank_entry_button(frm);
-		} else if (frm.doc.salary_slips_created && frm.doc.status != 'Queued') {
-			frm.add_custom_button(__("Submit Salary Slip"), function () {
-				submit_salary_slip(frm);
-			}).addClass("btn-primary");
-		}
-	},
-
-	add_bank_entry_button: function (frm) {
-		frappe.call({
-			method: 'erpnext.payroll.doctype.payroll_entry.payroll_entry.payroll_entry_has_bank_entries',
-			args: {
-				'name': frm.doc.name
-			},
-			callback: function (r) {
-				if (r.message && !r.message.submitted) {
-					frm.add_custom_button(__("Make Bank Entry"), function () {
-						make_bank_entry(frm);
-					}).addClass("btn-primary");
-				}
-			}
-		});
-	},
-
-	setup: function (frm) {
-		frm.add_fetch('company', 'cost_center', 'cost_center');
-
-		frm.set_query("payment_account", function () {
-			var account_types = ["Bank", "Cash"];
-			return {
-				filters: {
-					"account_type": ["in", account_types],
-					"is_group": 0,
-					"company": frm.doc.company
-				}
-			};
-		});
-
-		frm.set_query('employee', 'employees', () => {
-			let error_fields = [];
-			let mandatory_fields = ['company', 'payroll_frequency', 'start_date', 'end_date'];
-
-			let message = __('Mandatory fields required in {0}', [__(frm.doc.doctype)]);
-
-			mandatory_fields.forEach(field => {
-				if (!frm.doc[field]) {
-					error_fields.push(frappe.unscrub(field));
-				}
-			});
-
-			if (error_fields && error_fields.length) {
-				message = message + '<br><br><ul><li>' + error_fields.join('</li><li>') + "</ul>";
-				frappe.throw({
-					message: message,
-					indicator: 'red',
-					title: __('Missing Fields')
-				});
-			}
-
-			return {
-				query: "erpnext.payroll.doctype.payroll_entry.payroll_entry.employee_query",
-				filters: frm.events.get_employee_filters(frm)
-			};
-		});
-	},
-
-	get_employee_filters: function (frm) {
-		let filters = {};
-		filters['salary_slip_based_on_timesheet'] = frm.doc.salary_slip_based_on_timesheet;
-
-		let fields = ['company', 'start_date', 'end_date', 'payroll_frequency', 'payroll_payable_account',
-			'currency', 'department', 'branch', 'designation'];
-
-		fields.forEach(field => {
-			if (frm.doc[field]) {
-				filters[field] = frm.doc[field];
-			}
-		});
-
-		if (frm.doc.employees) {
-			let employees = frm.doc.employees.filter(d => d.employee).map(d => d.employee);
-			if (employees && employees.length) {
-				filters['employees'] = employees;
-			}
-		}
-		return filters;
-	},
-
-	payroll_frequency: function (frm) {
-		frm.trigger("set_start_end_dates").then( ()=> {
-			frm.events.clear_employee_table(frm);
-		});
-	},
-
-	company: function (frm) {
-		frm.events.clear_employee_table(frm);
-		erpnext.accounts.dimensions.update_dimension(frm, frm.doctype);
-		frm.trigger("set_payable_account_and_currency");
-	},
-
-	set_payable_account_and_currency: function (frm) {
-		frappe.db.get_value("Company", {"name": frm.doc.company}, "default_currency", (r) => {
-			frm.set_value('currency', r.default_currency);
-		});
-		frappe.db.get_value("Company", {"name": frm.doc.company}, "default_payroll_payable_account", (r) => {
-			frm.set_value('payroll_payable_account', r.default_payroll_payable_account);
-		});
-	},
-
-	currency: function (frm) {
-		var company_currency;
-		if (!frm.doc.company) {
-			company_currency = erpnext.get_currency(frappe.defaults.get_default("Company"));
-		} else {
-			company_currency = erpnext.get_currency(frm.doc.company);
-		}
-		if (frm.doc.currency) {
-			if (company_currency != frm.doc.currency) {
-				frappe.call({
-					method: "erpnext.setup.utils.get_exchange_rate",
-					args: {
-						from_currency: frm.doc.currency,
-						to_currency: company_currency,
-					},
-					callback: function (r) {
-						frm.set_value("exchange_rate", flt(r.message));
-						frm.set_df_property('exchange_rate', 'hidden', 0);
-						frm.set_df_property("exchange_rate", "description", "1 " + frm.doc.currency +
-							" = [?] " + company_currency);
-					}
-				});
-			} else {
-				frm.set_value("exchange_rate", 1.0);
-				frm.set_df_property('exchange_rate', 'hidden', 1);
-				frm.set_df_property("exchange_rate", "description", "");
-			}
-		}
-	},
-
-	department: function (frm) {
-		frm.events.clear_employee_table(frm);
-	},
-
-	designation: function (frm) {
-		frm.events.clear_employee_table(frm);
-	},
-
-	branch: function (frm) {
-		frm.events.clear_employee_table(frm);
-	},
-
-	start_date: function (frm) {
-		if (!in_progress && frm.doc.start_date) {
-			frm.trigger("set_end_date");
-		} else {
-			// reset flag
-			in_progress = false;
-		}
-		frm.events.clear_employee_table(frm);
-	},
-
-	project: function (frm) {
-		frm.events.clear_employee_table(frm);
-	},
-
-	salary_slip_based_on_timesheet: function (frm) {
-		frm.toggle_reqd(['payroll_frequency'], !frm.doc.salary_slip_based_on_timesheet);
-	},
-
-	set_start_end_dates: function (frm) {
-		if (!frm.doc.salary_slip_based_on_timesheet) {
-			frappe.call({
-				method: 'erpnext.payroll.doctype.payroll_entry.payroll_entry.get_start_end_dates',
-				args: {
-					payroll_frequency: frm.doc.payroll_frequency,
-					start_date: frm.doc.posting_date
-				},
-				callback: function (r) {
-					if (r.message) {
-						in_progress = true;
-						frm.set_value('start_date', r.message.start_date);
-						frm.set_value('end_date', r.message.end_date);
-					}
-				}
-			});
-		}
-	},
-
-	set_end_date: function (frm) {
-		frappe.call({
-			method: 'erpnext.payroll.doctype.payroll_entry.payroll_entry.get_end_date',
-			args: {
-				frequency: frm.doc.payroll_frequency,
-				start_date: frm.doc.start_date
-			},
-			callback: function (r) {
-				if (r.message) {
-					frm.set_value('end_date', r.message.end_date);
-				}
-			}
-		});
-	},
-
-	validate_attendance: function (frm) {
-		if (frm.doc.validate_attendance && frm.doc.employees) {
-			frappe.call({
-				method: 'validate_employee_attendance',
-				args: {},
-				callback: function (r) {
-					render_employee_attendance(frm, r.message);
-				},
-				doc: frm.doc,
-				freeze: true,
-				freeze_message: __('Validating Employee Attendance...')
-			});
-		} else {
-			frm.fields_dict.attendance_detail_html.html("");
-		}
-	},
-
-	clear_employee_table: function (frm) {
-		frm.clear_table('employees');
-		frm.refresh();
-	},
-});
-
-// Submit salary slips
-
-const submit_salary_slip = function (frm) {
-	frappe.confirm(__('This will submit Salary Slips and create accrual Journal Entry. Do you want to proceed?'),
-		function () {
-			frappe.call({
-				method: 'submit_salary_slips',
-				args: {},
-				callback: function () {
-					frm.reload_doc();
-					frm.events.refresh(frm);
-				},
-				doc: frm.doc,
-				freeze: true,
-				freeze_message: __('Submitting Salary Slips and creating Journal Entry...')
-			});
-		},
-		function () {
-			if (frappe.dom.freeze_count) {
-				frappe.dom.unfreeze();
-				frm.events.refresh(frm);
-			}
-		}
-	);
-};
-
-let make_bank_entry = function (frm) {
-	var doc = frm.doc;
-	if (doc.payment_account) {
-		return frappe.call({
-			doc: cur_frm.doc,
-			method: "make_payment_entry",
-			callback: function () {
-				frappe.set_route(
-					'List', 'Journal Entry', {
-						"Journal Entry Account.reference_name": frm.doc.name
-					}
-				);
-			},
-			freeze: true,
-			freeze_message: __("Creating Payment Entries......")
-		});
-	} else {
-		frappe.msgprint(__("Payment Account is mandatory"));
-		frm.scroll_to_field('payment_account');
-	}
-};
-
-let render_employee_attendance = function (frm, data) {
-	frm.fields_dict.attendance_detail_html.html(
-		frappe.render_template('employees_to_mark_attendance', {
-			data: data
-		})
-	);
-};
diff --git a/erpnext/payroll/doctype/payroll_entry/payroll_entry.json b/erpnext/payroll/doctype/payroll_entry/payroll_entry.json
deleted file mode 100644
index 17882eb..0000000
--- a/erpnext/payroll/doctype/payroll_entry/payroll_entry.json
+++ /dev/null
@@ -1,342 +0,0 @@
-{
- "actions": [],
- "allow_copy": 1,
- "autoname": "HR-PRUN-.YYYY.-.#####",
- "creation": "2017-10-23 15:22:29.291323",
- "doctype": "DocType",
- "document_type": "Other",
- "engine": "InnoDB",
- "field_order": [
-  "section_break0",
-  "posting_date",
-  "payroll_frequency",
-  "company",
-  "column_break1",
-  "status",
-  "currency",
-  "exchange_rate",
-  "payroll_payable_account",
-  "section_break_8",
-  "branch",
-  "department",
-  "column_break_10",
-  "designation",
-  "number_of_employees",
-  "sec_break20",
-  "employees",
-  "section_break_13",
-  "validate_attendance",
-  "attendance_detail_html",
-  "section_break_12",
-  "salary_slip_based_on_timesheet",
-  "select_payroll_period",
-  "start_date",
-  "end_date",
-  "column_break_11",
-  "deduct_tax_for_unclaimed_employee_benefits",
-  "deduct_tax_for_unsubmitted_tax_exemption_proof",
-  "accounting_dimensions_section",
-  "project",
-  "dimension_col_break",
-  "cost_center",
-  "account",
-  "payment_account",
-  "column_break_33",
-  "bank_account",
-  "salary_slips_created",
-  "salary_slips_submitted",
-  "failure_details_section",
-  "error_message",
-  "section_break_41",
-  "amended_from"
- ],
- "fields": [
-  {
-   "fieldname": "section_break0",
-   "fieldtype": "Section Break",
-   "label": "Select Employees"
-  },
-  {
-   "default": "Today",
-   "fieldname": "posting_date",
-   "fieldtype": "Date",
-   "label": "Posting Date",
-   "reqd": 1
-  },
-  {
-   "depends_on": "eval:doc.salary_slip_based_on_timesheet == 0",
-   "fieldname": "payroll_frequency",
-   "fieldtype": "Select",
-   "label": "Payroll Frequency",
-   "options": "\nMonthly\nFortnightly\nBimonthly\nWeekly\nDaily",
-   "reqd": 1
-  },
-  {
-   "fieldname": "column_break1",
-   "fieldtype": "Column Break",
-   "width": "50%"
-  },
-  {
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Company",
-   "options": "Company",
-   "remember_last_selected_value": 1,
-   "reqd": 1
-  },
-  {
-   "fieldname": "section_break_8",
-   "fieldtype": "Section Break",
-   "label": "Employees"
-  },
-  {
-   "fieldname": "branch",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Branch",
-   "options": "Branch"
-  },
-  {
-   "fieldname": "department",
-   "fieldtype": "Link",
-   "label": "Department",
-   "options": "Department"
-  },
-  {
-   "fieldname": "column_break_10",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "designation",
-   "fieldtype": "Link",
-   "label": "Designation",
-   "options": "Designation"
-  },
-  {
-   "fieldname": "number_of_employees",
-   "fieldtype": "Int",
-   "label": "Number Of Employees",
-   "read_only": 1
-  },
-  {
-   "fieldname": "sec_break20",
-   "fieldtype": "Section Break"
-  },
-  {
-   "fieldname": "employees",
-   "fieldtype": "Table",
-   "label": "Employee Details",
-   "options": "Payroll Employee Detail"
-  },
-  {
-   "fieldname": "section_break_13",
-   "fieldtype": "Section Break"
-  },
-  {
-   "default": "0",
-   "fieldname": "validate_attendance",
-   "fieldtype": "Check",
-   "label": "Validate Attendance"
-  },
-  {
-   "fieldname": "attendance_detail_html",
-   "fieldtype": "HTML"
-  },
-  {
-   "fieldname": "section_break_12",
-   "fieldtype": "Section Break"
-  },
-  {
-   "default": "0",
-   "fieldname": "salary_slip_based_on_timesheet",
-   "fieldtype": "Check",
-   "label": "Salary Slip Based on Timesheet"
-  },
-  {
-   "fieldname": "select_payroll_period",
-   "fieldtype": "Section Break",
-   "label": "Select Payroll Period"
-  },
-  {
-   "fieldname": "start_date",
-   "fieldtype": "Date",
-   "label": "Start Date",
-   "reqd": 1
-  },
-  {
-   "fieldname": "end_date",
-   "fieldtype": "Date",
-   "label": "End Date",
-   "reqd": 1
-  },
-  {
-   "fieldname": "column_break_11",
-   "fieldtype": "Column Break"
-  },
-  {
-   "default": "0",
-   "fieldname": "deduct_tax_for_unclaimed_employee_benefits",
-   "fieldtype": "Check",
-   "label": "Deduct Tax For Unclaimed Employee Benefits"
-  },
-  {
-   "default": "0",
-   "fieldname": "deduct_tax_for_unsubmitted_tax_exemption_proof",
-   "fieldtype": "Check",
-   "label": "Deduct Tax For Unsubmitted Tax Exemption Proof"
-  },
-  {
-   "default": ":Company",
-   "fieldname": "cost_center",
-   "fieldtype": "Link",
-   "label": "Cost Center",
-   "options": "Cost Center",
-   "reqd": 1
-  },
-  {
-   "fieldname": "project",
-   "fieldtype": "Link",
-   "label": "Project",
-   "options": "Project"
-  },
-  {
-   "fieldname": "account",
-   "fieldtype": "Section Break",
-   "label": "Payment Entry"
-  },
-  {
-   "allow_on_submit": 1,
-   "description": "Select Payment Account to make Bank Entry",
-   "fetch_from": "bank_account.account",
-   "fieldname": "payment_account",
-   "fieldtype": "Link",
-   "label": "Payment Account",
-   "options": "Account"
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "Payroll Entry",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "default": "0",
-   "fieldname": "salary_slips_created",
-   "fieldtype": "Check",
-   "hidden": 1,
-   "label": "Salary Slips Created",
-   "no_copy": 1,
-   "read_only": 1
-  },
-  {
-   "default": "0",
-   "fieldname": "salary_slips_submitted",
-   "fieldtype": "Check",
-   "hidden": 1,
-   "label": "Salary Slips Submitted",
-   "no_copy": 1,
-   "read_only": 1
-  },
-  {
-   "fieldname": "accounting_dimensions_section",
-   "fieldtype": "Section Break",
-   "label": "Accounting Dimensions"
-  },
-  {
-   "fieldname": "dimension_col_break",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "bank_account",
-   "fieldtype": "Link",
-   "label": "Bank Account",
-   "options": "Bank Account"
-  },
-  {
-   "fieldname": "column_break_33",
-   "fieldtype": "Column Break"
-  },
-  {
-   "depends_on": "company",
-   "fieldname": "currency",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Currency",
-   "options": "Currency",
-   "reqd": 1
-  },
-  {
-   "depends_on": "company",
-   "fieldname": "exchange_rate",
-   "fieldtype": "Float",
-   "label": "Exchange Rate",
-   "precision": "9",
-   "reqd": 1
-  },
-  {
-   "depends_on": "company",
-   "fieldname": "payroll_payable_account",
-   "fieldtype": "Link",
-   "label": "Payroll Payable Account",
-   "options": "Account",
-   "reqd": 1
-  },
-  {
-   "collapsible": 1,
-   "collapsible_depends_on": "error_message",
-   "depends_on": "eval:doc.status=='Failed';",
-   "fieldname": "failure_details_section",
-   "fieldtype": "Section Break",
-   "label": "Failure Details"
-  },
-  {
-   "depends_on": "eval:doc.status=='Failed';",
-   "fieldname": "error_message",
-   "fieldtype": "Small Text",
-   "label": "Error Message",
-   "no_copy": 1,
-   "read_only": 1
-  },
-  {
-   "fieldname": "section_break_41",
-   "fieldtype": "Section Break"
-  },
-  {
-   "fieldname": "status",
-   "fieldtype": "Select",
-   "label": "Status",
-   "options": "Draft\nSubmitted\nCancelled\nQueued\nFailed",
-   "print_hide": 1,
-   "read_only": 1
-  }
- ],
- "icon": "fa fa-cog",
- "is_submittable": 1,
- "links": [],
- "modified": "2022-03-16 12:45:21.662765",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Payroll Entry",
- "naming_rule": "Expression (old style)",
- "owner": "Administrator",
- "permissions": [
-  {
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  }
- ],
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": []
-}
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/payroll_entry/payroll_entry.py b/erpnext/payroll/doctype/payroll_entry/payroll_entry.py
deleted file mode 100644
index 620fcad..0000000
--- a/erpnext/payroll/doctype/payroll_entry/payroll_entry.py
+++ /dev/null
@@ -1,1057 +0,0 @@
-# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-import json
-
-import frappe
-from dateutil.relativedelta import relativedelta
-from frappe import _
-from frappe.desk.reportview import get_filters_cond, get_match_cond
-from frappe.model.document import Document
-from frappe.query_builder.functions import Coalesce
-from frappe.utils import (
-	DATE_FORMAT,
-	add_days,
-	add_to_date,
-	cint,
-	comma_and,
-	date_diff,
-	flt,
-	get_link_to_form,
-	getdate,
-)
-
-import erpnext
-from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import (
-	get_accounting_dimensions,
-)
-from erpnext.accounts.utils import get_fiscal_year
-from erpnext.hr.doctype.employee.employee import get_holiday_list_for_employee
-
-
-class PayrollEntry(Document):
-	def onload(self):
-		if not self.docstatus == 1 or self.salary_slips_submitted:
-			return
-
-		# check if salary slips were manually submitted
-		entries = frappe.db.count("Salary Slip", {"payroll_entry": self.name, "docstatus": 1}, ["name"])
-		if cint(entries) == len(self.employees):
-			self.set_onload("submitted_ss", True)
-
-	def validate(self):
-		self.number_of_employees = len(self.employees)
-		self.set_status()
-
-	def on_submit(self):
-		self.set_status(update=True, status="Submitted")
-		self.create_salary_slips()
-
-	def before_submit(self):
-		self.validate_employee_details()
-		self.validate_payroll_payable_account()
-		if self.validate_attendance:
-			if self.validate_employee_attendance():
-				frappe.throw(_("Cannot Submit, Employees left to mark attendance"))
-
-	def set_status(self, status=None, update=False):
-		if not status:
-			status = {0: "Draft", 1: "Submitted", 2: "Cancelled"}[self.docstatus or 0]
-
-		if update:
-			self.db_set("status", status)
-		else:
-			self.status = status
-
-	def validate_employee_details(self):
-		emp_with_sal_slip = []
-		for employee_details in self.employees:
-			if frappe.db.exists(
-				"Salary Slip",
-				{
-					"employee": employee_details.employee,
-					"start_date": self.start_date,
-					"end_date": self.end_date,
-					"docstatus": 1,
-				},
-			):
-				emp_with_sal_slip.append(employee_details.employee)
-
-		if len(emp_with_sal_slip):
-			frappe.throw(_("Salary Slip already exists for {0}").format(comma_and(emp_with_sal_slip)))
-
-	def validate_payroll_payable_account(self):
-		if frappe.db.get_value("Account", self.payroll_payable_account, "account_type"):
-			frappe.throw(
-				_(
-					"Account type cannot be set for payroll payable account {0}, please remove and try again"
-				).format(frappe.bold(get_link_to_form("Account", self.payroll_payable_account)))
-			)
-
-	def on_cancel(self):
-		frappe.delete_doc(
-			"Salary Slip",
-			frappe.db.sql_list(
-				"""select name from `tabSalary Slip`
-			where payroll_entry=%s """,
-				(self.name),
-			),
-		)
-		self.db_set("salary_slips_created", 0)
-		self.db_set("salary_slips_submitted", 0)
-		self.set_status(update=True, status="Cancelled")
-		self.db_set("error_message", "")
-
-	def get_emp_list(self):
-		"""
-		Returns list of active employees based on selected criteria
-		and for which salary structure exists
-		"""
-		self.check_mandatory()
-		filters = self.make_filters()
-		cond = get_filter_condition(filters)
-		cond += get_joining_relieving_condition(self.start_date, self.end_date)
-
-		condition = ""
-		if self.payroll_frequency:
-			condition = """and payroll_frequency = '%(payroll_frequency)s'""" % {
-				"payroll_frequency": self.payroll_frequency
-			}
-
-		sal_struct = get_sal_struct(
-			self.company, self.currency, self.salary_slip_based_on_timesheet, condition
-		)
-		if sal_struct:
-			cond += "and t2.salary_structure IN %(sal_struct)s "
-			cond += "and t2.payroll_payable_account = %(payroll_payable_account)s "
-			cond += "and %(from_date)s >= t2.from_date"
-			emp_list = get_emp_list(sal_struct, cond, self.end_date, self.payroll_payable_account)
-			emp_list = remove_payrolled_employees(emp_list, self.start_date, self.end_date)
-			return emp_list
-
-	def make_filters(self):
-		filters = frappe._dict()
-		filters["company"] = self.company
-		filters["branch"] = self.branch
-		filters["department"] = self.department
-		filters["designation"] = self.designation
-
-		return filters
-
-	@frappe.whitelist()
-	def fill_employee_details(self):
-		self.set("employees", [])
-		employees = self.get_emp_list()
-		if not employees:
-			error_msg = _(
-				"No employees found for the mentioned criteria:<br>Company: {0}<br> Currency: {1}<br>Payroll Payable Account: {2}"
-			).format(
-				frappe.bold(self.company),
-				frappe.bold(self.currency),
-				frappe.bold(self.payroll_payable_account),
-			)
-			if self.branch:
-				error_msg += "<br>" + _("Branch: {0}").format(frappe.bold(self.branch))
-			if self.department:
-				error_msg += "<br>" + _("Department: {0}").format(frappe.bold(self.department))
-			if self.designation:
-				error_msg += "<br>" + _("Designation: {0}").format(frappe.bold(self.designation))
-			if self.start_date:
-				error_msg += "<br>" + _("Start date: {0}").format(frappe.bold(self.start_date))
-			if self.end_date:
-				error_msg += "<br>" + _("End date: {0}").format(frappe.bold(self.end_date))
-			frappe.throw(error_msg, title=_("No employees found"))
-
-		for d in employees:
-			self.append("employees", d)
-
-		self.number_of_employees = len(self.employees)
-		if self.validate_attendance:
-			return self.validate_employee_attendance()
-
-	def check_mandatory(self):
-		for fieldname in ["company", "start_date", "end_date"]:
-			if not self.get(fieldname):
-				frappe.throw(_("Please set {0}").format(self.meta.get_label(fieldname)))
-
-	@frappe.whitelist()
-	def create_salary_slips(self):
-		"""
-		Creates salary slip for selected employees if already not created
-		"""
-		self.check_permission("write")
-		employees = [emp.employee for emp in self.employees]
-		if employees:
-			args = frappe._dict(
-				{
-					"salary_slip_based_on_timesheet": self.salary_slip_based_on_timesheet,
-					"payroll_frequency": self.payroll_frequency,
-					"start_date": self.start_date,
-					"end_date": self.end_date,
-					"company": self.company,
-					"posting_date": self.posting_date,
-					"deduct_tax_for_unclaimed_employee_benefits": self.deduct_tax_for_unclaimed_employee_benefits,
-					"deduct_tax_for_unsubmitted_tax_exemption_proof": self.deduct_tax_for_unsubmitted_tax_exemption_proof,
-					"payroll_entry": self.name,
-					"exchange_rate": self.exchange_rate,
-					"currency": self.currency,
-				}
-			)
-			if len(employees) > 30 or frappe.flags.enqueue_payroll_entry:
-				self.db_set("status", "Queued")
-				frappe.enqueue(
-					create_salary_slips_for_employees,
-					timeout=600,
-					employees=employees,
-					args=args,
-					publish_progress=False,
-				)
-				frappe.msgprint(
-					_("Salary Slip creation is queued. It may take a few minutes"),
-					alert=True,
-					indicator="blue",
-				)
-			else:
-				create_salary_slips_for_employees(employees, args, publish_progress=False)
-				# since this method is called via frm.call this doc needs to be updated manually
-				self.reload()
-
-	def get_sal_slip_list(self, ss_status, as_dict=False):
-		"""
-		Returns list of salary slips based on selected criteria
-		"""
-
-		ss = frappe.qb.DocType("Salary Slip")
-		ss_list = (
-			frappe.qb.from_(ss)
-			.select(ss.name, ss.salary_structure)
-			.where(
-				(ss.docstatus == ss_status)
-				& (ss.start_date >= self.start_date)
-				& (ss.end_date <= self.end_date)
-				& (ss.payroll_entry == self.name)
-				& ((ss.journal_entry.isnull()) | (ss.journal_entry == ""))
-				& (Coalesce(ss.salary_slip_based_on_timesheet, 0) == self.salary_slip_based_on_timesheet)
-			)
-		).run(as_dict=as_dict)
-
-		return ss_list
-
-	@frappe.whitelist()
-	def submit_salary_slips(self):
-		self.check_permission("write")
-		salary_slips = self.get_sal_slip_list(ss_status=0)
-		if len(salary_slips) > 30 or frappe.flags.enqueue_payroll_entry:
-			self.db_set("status", "Queued")
-			frappe.enqueue(
-				submit_salary_slips_for_employees,
-				timeout=600,
-				payroll_entry=self,
-				salary_slips=salary_slips,
-				publish_progress=False,
-			)
-			frappe.msgprint(
-				_("Salary Slip submission is queued. It may take a few minutes"),
-				alert=True,
-				indicator="blue",
-			)
-		else:
-			submit_salary_slips_for_employees(self, salary_slips, publish_progress=False)
-
-	def email_salary_slip(self, submitted_ss):
-		if frappe.db.get_single_value("Payroll Settings", "email_salary_slip_to_employee"):
-			for ss in submitted_ss:
-				ss.email_salary_slip()
-
-	def get_salary_component_account(self, salary_component):
-		account = frappe.db.get_value(
-			"Salary Component Account", {"parent": salary_component, "company": self.company}, "account"
-		)
-
-		if not account:
-			frappe.throw(
-				_("Please set account in Salary Component {0}").format(
-					get_link_to_form("Salary Component", salary_component)
-				)
-			)
-
-		return account
-
-	def get_salary_components(self, component_type):
-		salary_slips = self.get_sal_slip_list(ss_status=1, as_dict=True)
-
-		if salary_slips:
-			ss = frappe.qb.DocType("Salary Slip")
-			ssd = frappe.qb.DocType("Salary Detail")
-			salary_components = (
-				frappe.qb.from_(ss)
-				.join(ssd)
-				.on(ss.name == ssd.parent)
-				.select(ssd.salary_component, ssd.amount, ssd.parentfield, ss.salary_structure, ss.employee)
-				.where(
-					(ssd.parentfield == component_type) & (ss.name.isin(tuple([d.name for d in salary_slips])))
-				)
-			).run(as_dict=True)
-
-			return salary_components
-
-	def get_salary_component_total(self, component_type=None):
-		salary_components = self.get_salary_components(component_type)
-		if salary_components:
-			component_dict = {}
-			self.employee_cost_centers = {}
-			for item in salary_components:
-				employee_cost_centers = self.get_payroll_cost_centers_for_employee(
-					item.employee, item.salary_structure
-				)
-
-				add_component_to_accrual_jv_entry = True
-				if component_type == "earnings":
-					is_flexible_benefit, only_tax_impact = frappe.get_cached_value(
-						"Salary Component", item["salary_component"], ["is_flexible_benefit", "only_tax_impact"]
-					)
-					if is_flexible_benefit == 1 and only_tax_impact == 1:
-						add_component_to_accrual_jv_entry = False
-
-				if add_component_to_accrual_jv_entry:
-					for cost_center, percentage in employee_cost_centers.items():
-						amount_against_cost_center = flt(item.amount) * percentage / 100
-						component_dict[(item.salary_component, cost_center)] = (
-							component_dict.get((item.salary_component, cost_center), 0) + amount_against_cost_center
-						)
-
-			account_details = self.get_account(component_dict=component_dict)
-			return account_details
-
-	def get_payroll_cost_centers_for_employee(self, employee, salary_structure):
-		if not self.employee_cost_centers.get(employee):
-			ss_assignment_name = frappe.db.get_value(
-				"Salary Structure Assignment",
-				{"employee": employee, "salary_structure": salary_structure, "docstatus": 1},
-				"name",
-			)
-
-			if ss_assignment_name:
-				cost_centers = dict(
-					frappe.get_all(
-						"Employee Cost Center",
-						{"parent": ss_assignment_name},
-						["cost_center", "percentage"],
-						as_list=1,
-					)
-				)
-				if not cost_centers:
-					default_cost_center, department = frappe.get_cached_value(
-						"Employee", employee, ["payroll_cost_center", "department"]
-					)
-					if not default_cost_center and department:
-						default_cost_center = frappe.get_cached_value(
-							"Department", department, "payroll_cost_center"
-						)
-					if not default_cost_center:
-						default_cost_center = self.cost_center
-
-					cost_centers = {default_cost_center: 100}
-
-				self.employee_cost_centers.setdefault(employee, cost_centers)
-
-		return self.employee_cost_centers.get(employee, {})
-
-	def get_account(self, component_dict=None):
-		account_dict = {}
-		for key, amount in component_dict.items():
-			account = self.get_salary_component_account(key[0])
-			account_dict[(account, key[1])] = account_dict.get((account, key[1]), 0) + amount
-		return account_dict
-
-	def make_accrual_jv_entry(self):
-		self.check_permission("write")
-		earnings = self.get_salary_component_total(component_type="earnings") or {}
-		deductions = self.get_salary_component_total(component_type="deductions") or {}
-		payroll_payable_account = self.payroll_payable_account
-		jv_name = ""
-		precision = frappe.get_precision("Journal Entry Account", "debit_in_account_currency")
-
-		if earnings or deductions:
-			journal_entry = frappe.new_doc("Journal Entry")
-			journal_entry.voucher_type = "Journal Entry"
-			journal_entry.user_remark = _("Accrual Journal Entry for salaries from {0} to {1}").format(
-				self.start_date, self.end_date
-			)
-			journal_entry.company = self.company
-			journal_entry.posting_date = self.posting_date
-			accounting_dimensions = get_accounting_dimensions() or []
-
-			accounts = []
-			currencies = []
-			payable_amount = 0
-			multi_currency = 0
-			company_currency = erpnext.get_company_currency(self.company)
-
-			# Earnings
-			for acc_cc, amount in earnings.items():
-				exchange_rate, amt = self.get_amount_and_exchange_rate_for_journal_entry(
-					acc_cc[0], amount, company_currency, currencies
-				)
-				payable_amount += flt(amount, precision)
-				accounts.append(
-					self.update_accounting_dimensions(
-						{
-							"account": acc_cc[0],
-							"debit_in_account_currency": flt(amt, precision),
-							"exchange_rate": flt(exchange_rate),
-							"cost_center": acc_cc[1] or self.cost_center,
-							"project": self.project,
-						},
-						accounting_dimensions,
-					)
-				)
-
-			# Deductions
-			for acc_cc, amount in deductions.items():
-				exchange_rate, amt = self.get_amount_and_exchange_rate_for_journal_entry(
-					acc_cc[0], amount, company_currency, currencies
-				)
-				payable_amount -= flt(amount, precision)
-				accounts.append(
-					self.update_accounting_dimensions(
-						{
-							"account": acc_cc[0],
-							"credit_in_account_currency": flt(amt, precision),
-							"exchange_rate": flt(exchange_rate),
-							"cost_center": acc_cc[1] or self.cost_center,
-							"project": self.project,
-						},
-						accounting_dimensions,
-					)
-				)
-
-			# Payable amount
-			exchange_rate, payable_amt = self.get_amount_and_exchange_rate_for_journal_entry(
-				payroll_payable_account, payable_amount, company_currency, currencies
-			)
-			accounts.append(
-				self.update_accounting_dimensions(
-					{
-						"account": payroll_payable_account,
-						"credit_in_account_currency": flt(payable_amt, precision),
-						"exchange_rate": flt(exchange_rate),
-						"cost_center": self.cost_center,
-					},
-					accounting_dimensions,
-				)
-			)
-
-			journal_entry.set("accounts", accounts)
-			if len(currencies) > 1:
-				multi_currency = 1
-			journal_entry.multi_currency = multi_currency
-			journal_entry.title = payroll_payable_account
-			journal_entry.save()
-
-			try:
-				journal_entry.submit()
-				jv_name = journal_entry.name
-				self.update_salary_slip_status(jv_name=jv_name)
-			except Exception as e:
-				if type(e) in (str, list, tuple):
-					frappe.msgprint(e)
-				raise
-
-		return jv_name
-
-	def update_accounting_dimensions(self, row, accounting_dimensions):
-		for dimension in accounting_dimensions:
-			row.update({dimension: self.get(dimension)})
-
-		return row
-
-	def get_amount_and_exchange_rate_for_journal_entry(
-		self, account, amount, company_currency, currencies
-	):
-		conversion_rate = 1
-		exchange_rate = self.exchange_rate
-		account_currency = frappe.db.get_value("Account", account, "account_currency")
-		if account_currency not in currencies:
-			currencies.append(account_currency)
-		if account_currency == company_currency:
-			conversion_rate = self.exchange_rate
-			exchange_rate = 1
-		amount = flt(amount) * flt(conversion_rate)
-		return exchange_rate, amount
-
-	@frappe.whitelist()
-	def make_payment_entry(self):
-		self.check_permission("write")
-
-		salary_slip_name_list = frappe.db.sql(
-			""" select t1.name from `tabSalary Slip` t1
-			where t1.docstatus = 1 and start_date >= %s and end_date <= %s and t1.payroll_entry = %s
-			""",
-			(self.start_date, self.end_date, self.name),
-			as_list=True,
-		)
-
-		if salary_slip_name_list and len(salary_slip_name_list) > 0:
-			salary_slip_total = 0
-			for salary_slip_name in salary_slip_name_list:
-				salary_slip = frappe.get_doc("Salary Slip", salary_slip_name[0])
-				for sal_detail in salary_slip.earnings:
-					(
-						is_flexible_benefit,
-						only_tax_impact,
-						creat_separate_je,
-						statistical_component,
-					) = frappe.db.get_value(
-						"Salary Component",
-						sal_detail.salary_component,
-						[
-							"is_flexible_benefit",
-							"only_tax_impact",
-							"create_separate_payment_entry_against_benefit_claim",
-							"statistical_component",
-						],
-					)
-					if only_tax_impact != 1 and statistical_component != 1:
-						if is_flexible_benefit == 1 and creat_separate_je == 1:
-							self.create_journal_entry(sal_detail.amount, sal_detail.salary_component)
-						else:
-							salary_slip_total += sal_detail.amount
-				for sal_detail in salary_slip.deductions:
-					statistical_component = frappe.db.get_value(
-						"Salary Component", sal_detail.salary_component, "statistical_component"
-					)
-					if statistical_component != 1:
-						salary_slip_total -= sal_detail.amount
-			if salary_slip_total > 0:
-				self.create_journal_entry(salary_slip_total, "salary")
-
-	def create_journal_entry(self, je_payment_amount, user_remark):
-		payroll_payable_account = self.payroll_payable_account
-		precision = frappe.get_precision("Journal Entry Account", "debit_in_account_currency")
-
-		accounts = []
-		currencies = []
-		multi_currency = 0
-		company_currency = erpnext.get_company_currency(self.company)
-		accounting_dimensions = get_accounting_dimensions() or []
-
-		exchange_rate, amount = self.get_amount_and_exchange_rate_for_journal_entry(
-			self.payment_account, je_payment_amount, company_currency, currencies
-		)
-		accounts.append(
-			self.update_accounting_dimensions(
-				{
-					"account": self.payment_account,
-					"bank_account": self.bank_account,
-					"credit_in_account_currency": flt(amount, precision),
-					"exchange_rate": flt(exchange_rate),
-				},
-				accounting_dimensions,
-			)
-		)
-
-		exchange_rate, amount = self.get_amount_and_exchange_rate_for_journal_entry(
-			payroll_payable_account, je_payment_amount, company_currency, currencies
-		)
-		accounts.append(
-			self.update_accounting_dimensions(
-				{
-					"account": payroll_payable_account,
-					"debit_in_account_currency": flt(amount, precision),
-					"exchange_rate": flt(exchange_rate),
-					"reference_type": self.doctype,
-					"reference_name": self.name,
-				},
-				accounting_dimensions,
-			)
-		)
-
-		if len(currencies) > 1:
-			multi_currency = 1
-
-		journal_entry = frappe.new_doc("Journal Entry")
-		journal_entry.voucher_type = "Bank Entry"
-		journal_entry.user_remark = _("Payment of {0} from {1} to {2}").format(
-			user_remark, self.start_date, self.end_date
-		)
-		journal_entry.company = self.company
-		journal_entry.posting_date = self.posting_date
-		journal_entry.multi_currency = multi_currency
-
-		journal_entry.set("accounts", accounts)
-		journal_entry.save(ignore_permissions=True)
-
-	def update_salary_slip_status(self, jv_name=None):
-		ss_list = self.get_sal_slip_list(ss_status=1)
-		for ss in ss_list:
-			ss_obj = frappe.get_doc("Salary Slip", ss[0])
-			frappe.db.set_value("Salary Slip", ss_obj.name, "journal_entry", jv_name)
-
-	def set_start_end_dates(self):
-		self.update(
-			get_start_end_dates(self.payroll_frequency, self.start_date or self.posting_date, self.company)
-		)
-
-	@frappe.whitelist()
-	def validate_employee_attendance(self):
-		employees_to_mark_attendance = []
-		days_in_payroll, days_holiday, days_attendance_marked = 0, 0, 0
-		for employee_detail in self.employees:
-			employee_joining_date = frappe.db.get_value(
-				"Employee", employee_detail.employee, "date_of_joining"
-			)
-			start_date = self.start_date
-			if employee_joining_date > getdate(self.start_date):
-				start_date = employee_joining_date
-			days_holiday = self.get_count_holidays_of_employee(employee_detail.employee, start_date)
-			days_attendance_marked = self.get_count_employee_attendance(
-				employee_detail.employee, start_date
-			)
-			days_in_payroll = date_diff(self.end_date, start_date) + 1
-			if days_in_payroll > days_holiday + days_attendance_marked:
-				employees_to_mark_attendance.append(
-					{"employee": employee_detail.employee, "employee_name": employee_detail.employee_name}
-				)
-		return employees_to_mark_attendance
-
-	def get_count_holidays_of_employee(self, employee, start_date):
-		holiday_list = get_holiday_list_for_employee(employee)
-		holidays = 0
-		if holiday_list:
-			days = frappe.db.sql(
-				"""select count(*) from tabHoliday where
-				parent=%s and holiday_date between %s and %s""",
-				(holiday_list, start_date, self.end_date),
-			)
-			if days and days[0][0]:
-				holidays = days[0][0]
-		return holidays
-
-	def get_count_employee_attendance(self, employee, start_date):
-		marked_days = 0
-		attendances = frappe.get_all(
-			"Attendance",
-			fields=["count(*)"],
-			filters={"employee": employee, "attendance_date": ("between", [start_date, self.end_date])},
-			as_list=1,
-		)
-		if attendances and attendances[0][0]:
-			marked_days = attendances[0][0]
-		return marked_days
-
-
-def get_sal_struct(company, currency, salary_slip_based_on_timesheet, condition):
-	return frappe.db.sql_list(
-		"""
-		select
-			name from `tabSalary Structure`
-		where
-			docstatus = 1 and
-			is_active = 'Yes'
-			and company = %(company)s
-			and currency = %(currency)s and
-			ifnull(salary_slip_based_on_timesheet,0) = %(salary_slip_based_on_timesheet)s
-			{condition}""".format(
-			condition=condition
-		),
-		{
-			"company": company,
-			"currency": currency,
-			"salary_slip_based_on_timesheet": salary_slip_based_on_timesheet,
-		},
-	)
-
-
-def get_filter_condition(filters):
-	cond = ""
-	for f in ["company", "branch", "department", "designation"]:
-		if filters.get(f):
-			cond += " and t1." + f + " = " + frappe.db.escape(filters.get(f))
-
-	return cond
-
-
-def get_joining_relieving_condition(start_date, end_date):
-	cond = """
-		and ifnull(t1.date_of_joining, '0000-00-00') <= '%(end_date)s'
-		and ifnull(t1.relieving_date, '2199-12-31') >= '%(start_date)s'
-	""" % {
-		"start_date": start_date,
-		"end_date": end_date,
-	}
-	return cond
-
-
-def get_emp_list(sal_struct, cond, end_date, payroll_payable_account):
-	return frappe.db.sql(
-		"""
-			select
-				distinct t1.name as employee, t1.employee_name, t1.department, t1.designation
-			from
-				`tabEmployee` t1, `tabSalary Structure Assignment` t2
-			where
-				t1.name = t2.employee
-				and t2.docstatus = 1
-				and t1.status != 'Inactive'
-		%s order by t2.from_date desc
-		"""
-		% cond,
-		{
-			"sal_struct": tuple(sal_struct),
-			"from_date": end_date,
-			"payroll_payable_account": payroll_payable_account,
-		},
-		as_dict=True,
-	)
-
-
-def remove_payrolled_employees(emp_list, start_date, end_date):
-	new_emp_list = []
-	for employee_details in emp_list:
-		if not frappe.db.exists(
-			"Salary Slip",
-			{
-				"employee": employee_details.employee,
-				"start_date": start_date,
-				"end_date": end_date,
-				"docstatus": 1,
-			},
-		):
-			new_emp_list.append(employee_details)
-
-	return new_emp_list
-
-
-@frappe.whitelist()
-def get_start_end_dates(payroll_frequency, start_date=None, company=None):
-	"""Returns dict of start and end dates for given payroll frequency based on start_date"""
-
-	if payroll_frequency == "Monthly" or payroll_frequency == "Bimonthly" or payroll_frequency == "":
-		fiscal_year = get_fiscal_year(start_date, company=company)[0]
-		month = "%02d" % getdate(start_date).month
-		m = get_month_details(fiscal_year, month)
-		if payroll_frequency == "Bimonthly":
-			if getdate(start_date).day <= 15:
-				start_date = m["month_start_date"]
-				end_date = m["month_mid_end_date"]
-			else:
-				start_date = m["month_mid_start_date"]
-				end_date = m["month_end_date"]
-		else:
-			start_date = m["month_start_date"]
-			end_date = m["month_end_date"]
-
-	if payroll_frequency == "Weekly":
-		end_date = add_days(start_date, 6)
-
-	if payroll_frequency == "Fortnightly":
-		end_date = add_days(start_date, 13)
-
-	if payroll_frequency == "Daily":
-		end_date = start_date
-
-	return frappe._dict({"start_date": start_date, "end_date": end_date})
-
-
-def get_frequency_kwargs(frequency_name):
-	frequency_dict = {
-		"monthly": {"months": 1},
-		"fortnightly": {"days": 14},
-		"weekly": {"days": 7},
-		"daily": {"days": 1},
-	}
-	return frequency_dict.get(frequency_name)
-
-
-@frappe.whitelist()
-def get_end_date(start_date, frequency):
-	start_date = getdate(start_date)
-	frequency = frequency.lower() if frequency else "monthly"
-	kwargs = (
-		get_frequency_kwargs(frequency) if frequency != "bimonthly" else get_frequency_kwargs("monthly")
-	)
-
-	# weekly, fortnightly and daily intervals have fixed days so no problems
-	end_date = add_to_date(start_date, **kwargs) - relativedelta(days=1)
-	if frequency != "bimonthly":
-		return dict(end_date=end_date.strftime(DATE_FORMAT))
-
-	else:
-		return dict(end_date="")
-
-
-def get_month_details(year, month):
-	ysd = frappe.db.get_value("Fiscal Year", year, "year_start_date")
-	if ysd:
-		import calendar
-		import datetime
-
-		diff_mnt = cint(month) - cint(ysd.month)
-		if diff_mnt < 0:
-			diff_mnt = 12 - int(ysd.month) + cint(month)
-		msd = ysd + relativedelta(months=diff_mnt)  # month start date
-		month_days = cint(calendar.monthrange(cint(msd.year), cint(month))[1])  # days in month
-		mid_start = datetime.date(msd.year, cint(month), 16)  # month mid start date
-		mid_end = datetime.date(msd.year, cint(month), 15)  # month mid end date
-		med = datetime.date(msd.year, cint(month), month_days)  # month end date
-		return frappe._dict(
-			{
-				"year": msd.year,
-				"month_start_date": msd,
-				"month_end_date": med,
-				"month_mid_start_date": mid_start,
-				"month_mid_end_date": mid_end,
-				"month_days": month_days,
-			}
-		)
-	else:
-		frappe.throw(_("Fiscal Year {0} not found").format(year))
-
-
-def get_payroll_entry_bank_entries(payroll_entry_name):
-	journal_entries = frappe.db.sql(
-		"select name from `tabJournal Entry Account` "
-		'where reference_type="Payroll Entry" '
-		"and reference_name=%s and docstatus=1",
-		payroll_entry_name,
-		as_dict=1,
-	)
-
-	return journal_entries
-
-
-@frappe.whitelist()
-def payroll_entry_has_bank_entries(name):
-	response = {}
-	bank_entries = get_payroll_entry_bank_entries(name)
-	response["submitted"] = 1 if bank_entries else 0
-
-	return response
-
-
-def log_payroll_failure(process, payroll_entry, error):
-	error_log = frappe.log_error(
-		title=_("Salary Slip {0} failed for Payroll Entry {1}").format(process, payroll_entry.name)
-	)
-	message_log = frappe.message_log.pop() if frappe.message_log else str(error)
-
-	try:
-		error_message = json.loads(message_log).get("message")
-	except Exception:
-		error_message = message_log
-
-	error_message += "\n" + _("Check Error Log {0} for more details.").format(
-		get_link_to_form("Error Log", error_log.name)
-	)
-
-	payroll_entry.db_set({"error_message": error_message, "status": "Failed"})
-
-
-def create_salary_slips_for_employees(employees, args, publish_progress=True):
-	try:
-		payroll_entry = frappe.get_doc("Payroll Entry", args.payroll_entry)
-		salary_slips_exist_for = get_existing_salary_slips(employees, args)
-		count = 0
-
-		for emp in employees:
-			if emp not in salary_slips_exist_for:
-				args.update({"doctype": "Salary Slip", "employee": emp})
-				frappe.get_doc(args).insert()
-
-				count += 1
-				if publish_progress:
-					frappe.publish_progress(
-						count * 100 / len(set(employees) - set(salary_slips_exist_for)),
-						title=_("Creating Salary Slips..."),
-					)
-
-		payroll_entry.db_set({"status": "Submitted", "salary_slips_created": 1, "error_message": ""})
-
-		if salary_slips_exist_for:
-			frappe.msgprint(
-				_(
-					"Salary Slips already exist for employees {}, and will not be processed by this payroll."
-				).format(frappe.bold(", ".join(emp for emp in salary_slips_exist_for))),
-				title=_("Message"),
-				indicator="orange",
-			)
-
-	except Exception as e:
-		frappe.db.rollback()
-		log_payroll_failure("creation", payroll_entry, e)
-
-	finally:
-		frappe.db.commit()  # nosemgrep
-		frappe.publish_realtime("completed_salary_slip_creation")
-
-
-def show_payroll_submission_status(submitted, unsubmitted, payroll_entry):
-	if not submitted and not unsubmitted:
-		frappe.msgprint(
-			_(
-				"No salary slip found to submit for the above selected criteria OR salary slip already submitted"
-			)
-		)
-	elif submitted and not unsubmitted:
-		frappe.msgprint(
-			_("Salary Slips submitted for period from {0} to {1}").format(
-				payroll_entry.start_date, payroll_entry.end_date
-			)
-		)
-	elif unsubmitted:
-		frappe.msgprint(
-			_("Could not submit some Salary Slips: {}").format(
-				", ".join(get_link_to_form("Salary Slip", entry) for entry in unsubmitted)
-			)
-		)
-
-
-def get_existing_salary_slips(employees, args):
-	return frappe.db.sql_list(
-		"""
-		select distinct employee from `tabSalary Slip`
-		where docstatus!= 2 and company = %s and payroll_entry = %s
-			and start_date >= %s and end_date <= %s
-			and employee in (%s)
-	"""
-		% ("%s", "%s", "%s", "%s", ", ".join(["%s"] * len(employees))),
-		[args.company, args.payroll_entry, args.start_date, args.end_date] + employees,
-	)
-
-
-def submit_salary_slips_for_employees(payroll_entry, salary_slips, publish_progress=True):
-	try:
-		submitted = []
-		unsubmitted = []
-		frappe.flags.via_payroll_entry = True
-		count = 0
-
-		for entry in salary_slips:
-			salary_slip = frappe.get_doc("Salary Slip", entry[0])
-			if salary_slip.net_pay < 0:
-				unsubmitted.append(entry[0])
-			else:
-				try:
-					salary_slip.submit()
-					submitted.append(salary_slip)
-				except frappe.ValidationError:
-					unsubmitted.append(entry[0])
-
-			count += 1
-			if publish_progress:
-				frappe.publish_progress(count * 100 / len(salary_slips), title=_("Submitting Salary Slips..."))
-
-		if submitted:
-			payroll_entry.make_accrual_jv_entry()
-			payroll_entry.email_salary_slip(submitted)
-			payroll_entry.db_set({"salary_slips_submitted": 1, "status": "Submitted", "error_message": ""})
-
-		show_payroll_submission_status(submitted, unsubmitted, payroll_entry)
-
-	except Exception as e:
-		frappe.db.rollback()
-		log_payroll_failure("submission", payroll_entry, e)
-
-	finally:
-		frappe.db.commit()  # nosemgrep
-		frappe.publish_realtime("completed_salary_slip_submission")
-
-	frappe.flags.via_payroll_entry = False
-
-
-@frappe.whitelist()
-@frappe.validate_and_sanitize_search_inputs
-def get_payroll_entries_for_jv(doctype, txt, searchfield, start, page_len, filters):
-	return frappe.db.sql(
-		"""
-		select name from `tabPayroll Entry`
-		where `{key}` LIKE %(txt)s
-		and name not in
-			(select reference_name from `tabJournal Entry Account`
-				where reference_type="Payroll Entry")
-		order by name limit %(start)s, %(page_len)s""".format(
-			key=searchfield
-		),
-		{"txt": "%%%s%%" % txt, "start": start, "page_len": page_len},
-	)
-
-
-def get_employee_list(filters):
-	cond = get_filter_condition(filters)
-	cond += get_joining_relieving_condition(filters.start_date, filters.end_date)
-	condition = """and payroll_frequency = '%(payroll_frequency)s'""" % {
-		"payroll_frequency": filters.payroll_frequency
-	}
-	sal_struct = get_sal_struct(
-		filters.company, filters.currency, filters.salary_slip_based_on_timesheet, condition
-	)
-	if sal_struct:
-		cond += "and t2.salary_structure IN %(sal_struct)s "
-		cond += "and t2.payroll_payable_account = %(payroll_payable_account)s "
-		cond += "and %(from_date)s >= t2.from_date"
-		emp_list = get_emp_list(sal_struct, cond, filters.end_date, filters.payroll_payable_account)
-		emp_list = remove_payrolled_employees(emp_list, filters.start_date, filters.end_date)
-		return emp_list
-
-	return []
-
-
-@frappe.whitelist()
-@frappe.validate_and_sanitize_search_inputs
-def employee_query(doctype, txt, searchfield, start, page_len, filters):
-	filters = frappe._dict(filters)
-	conditions = []
-	include_employees = []
-	emp_cond = ""
-
-	if not filters.payroll_frequency:
-		frappe.throw(_("Select Payroll Frequency."))
-
-	if filters.start_date and filters.end_date:
-		employee_list = get_employee_list(filters)
-		emp = filters.get("employees") or []
-		include_employees = [
-			employee.employee for employee in employee_list if employee.employee not in emp
-		]
-		filters.pop("start_date")
-		filters.pop("end_date")
-		filters.pop("salary_slip_based_on_timesheet")
-		filters.pop("payroll_frequency")
-		filters.pop("payroll_payable_account")
-		filters.pop("currency")
-		if filters.employees is not None:
-			filters.pop("employees")
-
-		if include_employees:
-			emp_cond += "and employee in %(include_employees)s"
-
-	return frappe.db.sql(
-		"""select name, employee_name from `tabEmployee`
-		where status = 'Active'
-			and docstatus < 2
-			and ({key} like %(txt)s
-				or employee_name like %(txt)s)
-			{emp_cond}
-			{fcond} {mcond}
-		order by
-			if(locate(%(_txt)s, name), locate(%(_txt)s, name), 99999),
-			if(locate(%(_txt)s, employee_name), locate(%(_txt)s, employee_name), 99999),
-			idx desc,
-			name, employee_name
-		limit %(start)s, %(page_len)s""".format(
-			**{
-				"key": searchfield,
-				"fcond": get_filters_cond(doctype, filters, conditions),
-				"mcond": get_match_cond(doctype),
-				"emp_cond": emp_cond,
-			}
-		),
-		{
-			"txt": "%%%s%%" % txt,
-			"_txt": txt.replace("%", ""),
-			"start": start,
-			"page_len": page_len,
-			"include_employees": include_employees,
-		},
-	)
diff --git a/erpnext/payroll/doctype/payroll_entry/payroll_entry_dashboard.py b/erpnext/payroll/doctype/payroll_entry/payroll_entry_dashboard.py
deleted file mode 100644
index eb93d68..0000000
--- a/erpnext/payroll/doctype/payroll_entry/payroll_entry_dashboard.py
+++ /dev/null
@@ -1,9 +0,0 @@
-def get_data():
-	return {
-		"fieldname": "payroll_entry",
-		"non_standard_fieldnames": {
-			"Journal Entry": "reference_name",
-			"Payment Entry": "reference_name",
-		},
-		"transactions": [{"items": ["Salary Slip", "Journal Entry"]}],
-	}
diff --git a/erpnext/payroll/doctype/payroll_entry/payroll_entry_list.js b/erpnext/payroll/doctype/payroll_entry/payroll_entry_list.js
deleted file mode 100644
index 56390b7..0000000
--- a/erpnext/payroll/doctype/payroll_entry/payroll_entry_list.js
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-// License: GNU General Public License v3. See license.txt
-
-// render
-frappe.listview_settings['Payroll Entry'] = {
-	has_indicator_for_draft: 1,
-	get_indicator: function(doc) {
-		var status_color = {
-			'Draft': 'red',
-			'Submitted': 'blue',
-			'Queued': 'orange',
-			'Failed': 'red',
-			'Cancelled': 'red'
-
-		};
-		return [__(doc.status), status_color[doc.status], 'status,=,'+doc.status];
-	}
-};
diff --git a/erpnext/payroll/doctype/payroll_entry/test_payroll_entry.py b/erpnext/payroll/doctype/payroll_entry/test_payroll_entry.py
deleted file mode 100644
index 0363a0c..0000000
--- a/erpnext/payroll/doctype/payroll_entry/test_payroll_entry.py
+++ /dev/null
@@ -1,484 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-import unittest
-
-import frappe
-from dateutil.relativedelta import relativedelta
-from frappe.tests.utils import FrappeTestCase
-from frappe.utils import add_months
-
-import erpnext
-from erpnext.accounts.utils import get_fiscal_year, getdate, nowdate
-from erpnext.hr.doctype.employee.test_employee import make_employee
-from erpnext.loan_management.doctype.loan.test_loan import (
-	create_loan,
-	create_loan_accounts,
-	create_loan_type,
-	make_loan_disbursement_entry,
-)
-from erpnext.loan_management.doctype.process_loan_interest_accrual.process_loan_interest_accrual import (
-	process_loan_interest_accrual_for_term_loans,
-)
-from erpnext.payroll.doctype.payroll_entry.payroll_entry import get_end_date, get_start_end_dates
-from erpnext.payroll.doctype.salary_slip.test_salary_slip import (
-	create_account,
-	make_deduction_salary_component,
-	make_earning_salary_component,
-	set_salary_component_account,
-)
-from erpnext.payroll.doctype.salary_structure.test_salary_structure import (
-	create_salary_structure_assignment,
-	make_salary_structure,
-)
-
-test_dependencies = ["Holiday List"]
-
-
-class TestPayrollEntry(FrappeTestCase):
-	def setUp(self):
-		for dt in [
-			"Salary Slip",
-			"Salary Component",
-			"Salary Component Account",
-			"Payroll Entry",
-			"Salary Structure",
-			"Salary Structure Assignment",
-			"Payroll Employee Detail",
-			"Additional Salary",
-			"Loan",
-		]:
-			frappe.db.delete(dt)
-
-		make_earning_salary_component(setup=True, company_list=["_Test Company"])
-		make_deduction_salary_component(setup=True, test_tax=False, company_list=["_Test Company"])
-
-		frappe.db.set_value("Company", "_Test Company", "default_holiday_list", "_Test Holiday List")
-		frappe.db.set_value("Payroll Settings", None, "email_salary_slip_to_employee", 0)
-
-		# set default payable account
-		default_account = frappe.db.get_value(
-			"Company", "_Test Company", "default_payroll_payable_account"
-		)
-		if not default_account or default_account != "_Test Payroll Payable - _TC":
-			create_account(
-				account_name="_Test Payroll Payable",
-				company="_Test Company",
-				parent_account="Current Liabilities - _TC",
-				account_type="Payable",
-			)
-			frappe.db.set_value(
-				"Company", "_Test Company", "default_payroll_payable_account", "_Test Payroll Payable - _TC"
-			)
-
-	def test_payroll_entry(self):
-		company = frappe.get_doc("Company", "_Test Company")
-		employee = frappe.db.get_value("Employee", {"company": "_Test Company"})
-		setup_salary_structure(employee, company)
-
-		dates = get_start_end_dates("Monthly", nowdate())
-		make_payroll_entry(
-			start_date=dates.start_date,
-			end_date=dates.end_date,
-			payable_account=company.default_payroll_payable_account,
-			currency=company.default_currency,
-			company=company.name,
-		)
-
-	def test_multi_currency_payroll_entry(self):
-		company = frappe.get_doc("Company", "_Test Company")
-		employee = make_employee(
-			"test_muti_currency_employee@payroll.com", company=company.name, department="Accounts - _TC"
-		)
-		salary_structure = "_Test Multi Currency Salary Structure"
-		setup_salary_structure(employee, company, "USD", salary_structure)
-
-		dates = get_start_end_dates("Monthly", nowdate())
-		payroll_entry = make_payroll_entry(
-			start_date=dates.start_date,
-			end_date=dates.end_date,
-			payable_account=company.default_payroll_payable_account,
-			currency="USD",
-			exchange_rate=70,
-			company=company.name,
-			cost_center="Main - _TC",
-		)
-		payroll_entry.make_payment_entry()
-
-		salary_slip = frappe.db.get_value("Salary Slip", {"payroll_entry": payroll_entry.name}, "name")
-		salary_slip = frappe.get_doc("Salary Slip", salary_slip)
-
-		payroll_entry.reload()
-		payroll_je = salary_slip.journal_entry
-		if payroll_je:
-			payroll_je_doc = frappe.get_doc("Journal Entry", payroll_je)
-			self.assertEqual(salary_slip.base_gross_pay, payroll_je_doc.total_debit)
-			self.assertEqual(salary_slip.base_gross_pay, payroll_je_doc.total_credit)
-
-		payment_entry = frappe.db.sql(
-			"""
-			Select ifnull(sum(je.total_debit),0) as total_debit, ifnull(sum(je.total_credit),0) as total_credit from `tabJournal Entry` je, `tabJournal Entry Account` jea
-			Where je.name = jea.parent
-			And jea.reference_name = %s
-			""",
-			(payroll_entry.name),
-			as_dict=1,
-		)
-		self.assertEqual(salary_slip.base_net_pay, payment_entry[0].total_debit)
-		self.assertEqual(salary_slip.base_net_pay, payment_entry[0].total_credit)
-
-	def test_payroll_entry_with_employee_cost_center(self):
-		if not frappe.db.exists("Department", "cc - _TC"):
-			frappe.get_doc(
-				{"doctype": "Department", "department_name": "cc", "company": "_Test Company"}
-			).insert()
-
-		employee1 = make_employee(
-			"test_employee1@example.com",
-			payroll_cost_center="_Test Cost Center - _TC",
-			department="cc - _TC",
-			company="_Test Company",
-		)
-		employee2 = make_employee(
-			"test_employee2@example.com", department="cc - _TC", company="_Test Company"
-		)
-
-		company = frappe.get_doc("Company", "_Test Company")
-		setup_salary_structure(employee1, company)
-
-		ss = make_salary_structure(
-			"_Test Salary Structure 2",
-			"Monthly",
-			employee2,
-			company="_Test Company",
-			currency=company.default_currency,
-			test_tax=False,
-		)
-
-		# update cost centers in salary structure assignment for employee2
-		ssa = frappe.db.get_value(
-			"Salary Structure Assignment",
-			{"employee": employee2, "salary_structure": ss.name, "docstatus": 1},
-			"name",
-		)
-
-		ssa_doc = frappe.get_doc("Salary Structure Assignment", ssa)
-		ssa_doc.payroll_cost_centers = []
-		ssa_doc.append(
-			"payroll_cost_centers", {"cost_center": "_Test Cost Center - _TC", "percentage": 60}
-		)
-		ssa_doc.append(
-			"payroll_cost_centers", {"cost_center": "_Test Cost Center 2 - _TC", "percentage": 40}
-		)
-		ssa_doc.save()
-
-		dates = get_start_end_dates("Monthly", nowdate())
-		pe = make_payroll_entry(
-			start_date=dates.start_date,
-			end_date=dates.end_date,
-			payable_account="_Test Payroll Payable - _TC",
-			currency=frappe.db.get_value("Company", "_Test Company", "default_currency"),
-			department="cc - _TC",
-			company="_Test Company",
-			payment_account="Cash - _TC",
-			cost_center="Main - _TC",
-		)
-		je = frappe.db.get_value("Salary Slip", {"payroll_entry": pe.name}, "journal_entry")
-		je_entries = frappe.db.sql(
-			"""
-			select account, cost_center, debit, credit
-			from `tabJournal Entry Account`
-			where parent=%s
-			order by account, cost_center
-		""",
-			je,
-		)
-		expected_je = (
-			("_Test Payroll Payable - _TC", "Main - _TC", 0.0, 155600.0),
-			("Salary - _TC", "_Test Cost Center - _TC", 124800.0, 0.0),
-			("Salary - _TC", "_Test Cost Center 2 - _TC", 31200.0, 0.0),
-			("Salary Deductions - _TC", "_Test Cost Center - _TC", 0.0, 320.0),
-			("Salary Deductions - _TC", "_Test Cost Center 2 - _TC", 0.0, 80.0),
-		)
-
-		self.assertEqual(je_entries, expected_je)
-
-	def test_get_end_date(self):
-		self.assertEqual(get_end_date("2017-01-01", "monthly"), {"end_date": "2017-01-31"})
-		self.assertEqual(get_end_date("2017-02-01", "monthly"), {"end_date": "2017-02-28"})
-		self.assertEqual(get_end_date("2017-02-01", "fortnightly"), {"end_date": "2017-02-14"})
-		self.assertEqual(get_end_date("2017-02-01", "bimonthly"), {"end_date": ""})
-		self.assertEqual(get_end_date("2017-01-01", "bimonthly"), {"end_date": ""})
-		self.assertEqual(get_end_date("2020-02-15", "bimonthly"), {"end_date": ""})
-		self.assertEqual(get_end_date("2017-02-15", "monthly"), {"end_date": "2017-03-14"})
-		self.assertEqual(get_end_date("2017-02-15", "daily"), {"end_date": "2017-02-15"})
-
-	def test_loan(self):
-		company = "_Test Company"
-		branch = "Test Employee Branch"
-
-		if not frappe.db.exists("Branch", branch):
-			frappe.get_doc({"doctype": "Branch", "branch": branch}).insert()
-		holiday_list = make_holiday("test holiday for loan")
-
-		applicant = make_employee(
-			"test_employee@loan.com", company="_Test Company", branch=branch, holiday_list=holiday_list
-		)
-		company_doc = frappe.get_doc("Company", company)
-
-		make_salary_structure(
-			"Test Salary Structure for Loan",
-			"Monthly",
-			employee=applicant,
-			company="_Test Company",
-			currency=company_doc.default_currency,
-		)
-
-		if not frappe.db.exists("Loan Type", "Car Loan"):
-			create_loan_accounts()
-			create_loan_type(
-				"Car Loan",
-				500000,
-				8.4,
-				is_term_loan=1,
-				mode_of_payment="Cash",
-				disbursement_account="Disbursement Account - _TC",
-				payment_account="Payment Account - _TC",
-				loan_account="Loan Account - _TC",
-				interest_income_account="Interest Income Account - _TC",
-				penalty_income_account="Penalty Income Account - _TC",
-			)
-
-		loan = create_loan(
-			applicant,
-			"Car Loan",
-			280000,
-			"Repay Over Number of Periods",
-			20,
-			posting_date=add_months(nowdate(), -1),
-		)
-		loan.repay_from_salary = 1
-		loan.submit()
-
-		make_loan_disbursement_entry(
-			loan.name, loan.loan_amount, disbursement_date=add_months(nowdate(), -1)
-		)
-		process_loan_interest_accrual_for_term_loans(posting_date=nowdate())
-
-		dates = get_start_end_dates("Monthly", nowdate())
-		make_payroll_entry(
-			company="_Test Company",
-			start_date=dates.start_date,
-			payable_account=company_doc.default_payroll_payable_account,
-			currency=company_doc.default_currency,
-			end_date=dates.end_date,
-			branch=branch,
-			cost_center="Main - _TC",
-			payment_account="Cash - _TC",
-		)
-
-		name = frappe.db.get_value(
-			"Salary Slip", {"posting_date": nowdate(), "employee": applicant}, "name"
-		)
-
-		salary_slip = frappe.get_doc("Salary Slip", name)
-		for row in salary_slip.loans:
-			if row.loan == loan.name:
-				interest_amount = (280000 * 8.4) / (12 * 100)
-				principal_amount = loan.monthly_repayment_amount - interest_amount
-				self.assertEqual(row.interest_amount, interest_amount)
-				self.assertEqual(row.principal_amount, principal_amount)
-				self.assertEqual(row.total_payment, interest_amount + principal_amount)
-
-	def test_salary_slip_operation_queueing(self):
-		company = "_Test Company"
-		company_doc = frappe.get_doc("Company", company)
-		employee = make_employee("test_employee@payroll.com", company=company)
-		setup_salary_structure(employee, company_doc)
-
-		# enqueue salary slip creation via payroll entry
-		# Payroll Entry status should change to Queued
-		dates = get_start_end_dates("Monthly", nowdate())
-		payroll_entry = get_payroll_entry(
-			start_date=dates.start_date,
-			end_date=dates.end_date,
-			payable_account=company_doc.default_payroll_payable_account,
-			currency=company_doc.default_currency,
-			company=company_doc.name,
-			cost_center="Main - _TC",
-		)
-		frappe.flags.enqueue_payroll_entry = True
-		payroll_entry.submit()
-		payroll_entry.reload()
-
-		self.assertEqual(payroll_entry.status, "Queued")
-		frappe.flags.enqueue_payroll_entry = False
-
-	def test_salary_slip_operation_failure(self):
-		company = "_Test Company"
-		company_doc = frappe.get_doc("Company", company)
-		employee = make_employee("test_employee@payroll.com", company=company)
-
-		salary_structure = make_salary_structure(
-			"_Test Salary Structure",
-			"Monthly",
-			employee,
-			company=company,
-			currency=company_doc.default_currency,
-		)
-
-		# reset account in component to test submission failure
-		component = frappe.get_doc("Salary Component", salary_structure.earnings[0].salary_component)
-		component.accounts = []
-		component.save()
-
-		# salary slip submission via payroll entry
-		# Payroll Entry status should change to Failed because of the missing account setup
-		dates = get_start_end_dates("Monthly", nowdate())
-		payroll_entry = get_payroll_entry(
-			start_date=dates.start_date,
-			end_date=dates.end_date,
-			payable_account=company_doc.default_payroll_payable_account,
-			currency=company_doc.default_currency,
-			company=company_doc.name,
-			cost_center="Main - _TC",
-		)
-
-		# set employee as Inactive to check creation failure
-		frappe.db.set_value("Employee", employee, "status", "Inactive")
-		payroll_entry.submit()
-		payroll_entry.reload()
-		self.assertEqual(payroll_entry.status, "Failed")
-		self.assertIsNotNone(payroll_entry.error_message)
-
-		frappe.db.set_value("Employee", employee, "status", "Active")
-		payroll_entry.submit()
-		payroll_entry.submit_salary_slips()
-
-		payroll_entry.reload()
-		self.assertEqual(payroll_entry.status, "Failed")
-		self.assertIsNotNone(payroll_entry.error_message)
-
-		# set accounts
-		for data in frappe.get_all("Salary Component", pluck="name"):
-			set_salary_component_account(data, company_list=[company])
-
-		# Payroll Entry successful, status should change to Submitted
-		payroll_entry.submit_salary_slips()
-		payroll_entry.reload()
-
-		self.assertEqual(payroll_entry.status, "Submitted")
-		self.assertEqual(payroll_entry.error_message, "")
-
-	def test_payroll_entry_status(self):
-		company = "_Test Company"
-		company_doc = frappe.get_doc("Company", company)
-		employee = make_employee("test_employee@payroll.com", company=company)
-
-		setup_salary_structure(employee, company_doc)
-
-		dates = get_start_end_dates("Monthly", nowdate())
-		payroll_entry = get_payroll_entry(
-			start_date=dates.start_date,
-			end_date=dates.end_date,
-			payable_account=company_doc.default_payroll_payable_account,
-			currency=company_doc.default_currency,
-			company=company_doc.name,
-			cost_center="Main - _TC",
-		)
-		payroll_entry.submit()
-		self.assertEqual(payroll_entry.status, "Submitted")
-
-		payroll_entry.cancel()
-		self.assertEqual(payroll_entry.status, "Cancelled")
-
-
-def get_payroll_entry(**args):
-	args = frappe._dict(args)
-
-	payroll_entry = frappe.new_doc("Payroll Entry")
-	payroll_entry.company = args.company or erpnext.get_default_company()
-	payroll_entry.start_date = args.start_date or "2016-11-01"
-	payroll_entry.end_date = args.end_date or "2016-11-30"
-	payroll_entry.payment_account = get_payment_account()
-	payroll_entry.posting_date = nowdate()
-	payroll_entry.payroll_frequency = "Monthly"
-	payroll_entry.branch = args.branch or None
-	payroll_entry.department = args.department or None
-	payroll_entry.payroll_payable_account = args.payable_account
-	payroll_entry.currency = args.currency
-	payroll_entry.exchange_rate = args.exchange_rate or 1
-
-	if args.cost_center:
-		payroll_entry.cost_center = args.cost_center
-
-	if args.payment_account:
-		payroll_entry.payment_account = args.payment_account
-
-	payroll_entry.fill_employee_details()
-	payroll_entry.insert()
-
-	# Commit so that the first salary slip creation failure does not rollback the Payroll Entry insert.
-	frappe.db.commit()  # nosemgrep
-
-	return payroll_entry
-
-
-def make_payroll_entry(**args):
-	payroll_entry = get_payroll_entry(**args)
-	payroll_entry.submit()
-	payroll_entry.submit_salary_slips()
-	if payroll_entry.get_sal_slip_list(ss_status=1):
-		payroll_entry.make_payment_entry()
-
-	return payroll_entry
-
-
-def get_payment_account():
-	return frappe.get_value(
-		"Account",
-		{"account_type": "Cash", "company": erpnext.get_default_company(), "is_group": 0},
-		"name",
-	)
-
-
-def make_holiday(holiday_list_name):
-	if not frappe.db.exists("Holiday List", holiday_list_name):
-		current_fiscal_year = get_fiscal_year(nowdate(), as_dict=True)
-		dt = getdate(nowdate())
-
-		new_year = dt + relativedelta(month=1, day=1, year=dt.year)
-		republic_day = dt + relativedelta(month=1, day=26, year=dt.year)
-		test_holiday = dt + relativedelta(month=2, day=2, year=dt.year)
-
-		frappe.get_doc(
-			{
-				"doctype": "Holiday List",
-				"from_date": current_fiscal_year.year_start_date,
-				"to_date": current_fiscal_year.year_end_date,
-				"holiday_list_name": holiday_list_name,
-				"holidays": [
-					{"holiday_date": new_year, "description": "New Year"},
-					{"holiday_date": republic_day, "description": "Republic Day"},
-					{"holiday_date": test_holiday, "description": "Test Holiday"},
-				],
-			}
-		).insert()
-
-	return holiday_list_name
-
-
-def setup_salary_structure(employee, company_doc, currency=None, salary_structure=None):
-	for data in frappe.get_all("Salary Component", pluck="name"):
-		if not frappe.db.get_value(
-			"Salary Component Account", {"parent": data, "company": company_doc.name}, "name"
-		):
-			set_salary_component_account(data)
-
-	make_salary_structure(
-		salary_structure or "_Test Salary Structure",
-		"Monthly",
-		employee,
-		company=company_doc.name,
-		currency=(currency or company_doc.default_currency),
-	)
diff --git a/erpnext/payroll/doctype/payroll_period/__init__.py b/erpnext/payroll/doctype/payroll_period/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/doctype/payroll_period/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/doctype/payroll_period/payroll_period.js b/erpnext/payroll/doctype/payroll_period/payroll_period.js
deleted file mode 100644
index 67caf9d..0000000
--- a/erpnext/payroll/doctype/payroll_period/payroll_period.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Payroll Period', {
-	refresh: function(frm) {
-
-	}
-});
diff --git a/erpnext/payroll/doctype/payroll_period/payroll_period.json b/erpnext/payroll/doctype/payroll_period/payroll_period.json
deleted file mode 100644
index 0e09484..0000000
--- a/erpnext/payroll/doctype/payroll_period/payroll_period.json
+++ /dev/null
@@ -1,103 +0,0 @@
-{
- "actions": [],
- "allow_import": 1,
- "autoname": "Prompt",
- "creation": "2018-04-13 15:18:53.698553",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "company",
-  "column_break_2",
-  "start_date",
-  "end_date",
-  "section_break_5",
-  "periods"
- ],
- "fields": [
-  {
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Company",
-   "options": "Company",
-   "reqd": 1
-  },
-  {
-   "fieldname": "column_break_2",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "start_date",
-   "fieldtype": "Date",
-   "label": "Start Date",
-   "reqd": 1
-  },
-  {
-   "fieldname": "end_date",
-   "fieldtype": "Date",
-   "label": "End Date",
-   "reqd": 1
-  },
-  {
-   "fieldname": "section_break_5",
-   "fieldtype": "Section Break",
-   "hidden": 1,
-   "label": "Payroll Periods"
-  },
-  {
-   "fieldname": "periods",
-   "fieldtype": "Table",
-   "label": "Payroll Periods",
-   "options": "Payroll Period Date"
-  }
- ],
- "links": [],
- "modified": "2020-06-29 17:17:12.689089",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Payroll Period",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "write": 1
-  }
- ],
- "quick_entry": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/payroll_period/payroll_period.py b/erpnext/payroll/doctype/payroll_period/payroll_period.py
deleted file mode 100644
index e1f1cab..0000000
--- a/erpnext/payroll/doctype/payroll_period/payroll_period.py
+++ /dev/null
@@ -1,130 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.utils import add_months, cint, date_diff, flt, formatdate, getdate, month_diff
-
-from erpnext.hr.utils import get_holiday_dates_for_employee
-
-
-class PayrollPeriod(Document):
-	def validate(self):
-		self.validate_dates()
-		self.validate_overlap()
-
-	def validate_dates(self):
-		if getdate(self.start_date) > getdate(self.end_date):
-			frappe.throw(_("End date can not be less than start date"))
-
-	def validate_overlap(self):
-		query = """
-			select name
-			from `tab{0}`
-			where name != %(name)s
-			and company = %(company)s and (start_date between %(start_date)s and %(end_date)s \
-				or end_date between %(start_date)s and %(end_date)s \
-				or (start_date < %(start_date)s and end_date > %(end_date)s))
-			"""
-		if not self.name:
-			# hack! if name is null, it could cause problems with !=
-			self.name = "New " + self.doctype
-
-		overlap_doc = frappe.db.sql(
-			query.format(self.doctype),
-			{
-				"start_date": self.start_date,
-				"end_date": self.end_date,
-				"name": self.name,
-				"company": self.company,
-			},
-			as_dict=1,
-		)
-
-		if overlap_doc:
-			msg = (
-				_("A {0} exists between {1} and {2} (").format(
-					self.doctype, formatdate(self.start_date), formatdate(self.end_date)
-				)
-				+ """ <b><a href="/app/Form/{0}/{1}">{1}</a></b>""".format(self.doctype, overlap_doc[0].name)
-				+ _(") for {0}").format(self.company)
-			)
-			frappe.throw(msg)
-
-
-def get_payroll_period_days(start_date, end_date, employee, company=None):
-	if not company:
-		company = frappe.db.get_value("Employee", employee, "company")
-	payroll_period = frappe.db.sql(
-		"""
-		select name, start_date, end_date
-		from `tabPayroll Period`
-		where
-			company=%(company)s
-			and %(start_date)s between start_date and end_date
-			and %(end_date)s between start_date and end_date
-	""",
-		{"company": company, "start_date": start_date, "end_date": end_date},
-	)
-
-	if len(payroll_period) > 0:
-		actual_no_of_days = date_diff(getdate(payroll_period[0][2]), getdate(payroll_period[0][1])) + 1
-		working_days = actual_no_of_days
-		if not cint(
-			frappe.db.get_value("Payroll Settings", None, "include_holidays_in_total_working_days")
-		):
-			holidays = get_holiday_dates_for_employee(
-				employee, getdate(payroll_period[0][1]), getdate(payroll_period[0][2])
-			)
-			working_days -= len(holidays)
-		return payroll_period[0][0], working_days, actual_no_of_days
-	return False, False, False
-
-
-def get_payroll_period(from_date, to_date, company):
-	payroll_period = frappe.db.sql(
-		"""
-		select name, start_date, end_date
-		from `tabPayroll Period`
-		where start_date<=%s and end_date>= %s and company=%s
-	""",
-		(from_date, to_date, company),
-		as_dict=1,
-	)
-
-	return payroll_period[0] if payroll_period else None
-
-
-def get_period_factor(
-	employee, start_date, end_date, payroll_frequency, payroll_period, depends_on_payment_days=0
-):
-	# TODO if both deduct checked update the factor to make tax consistent
-	period_start, period_end = payroll_period.start_date, payroll_period.end_date
-	joining_date, relieving_date = frappe.db.get_value(
-		"Employee", employee, ["date_of_joining", "relieving_date"]
-	)
-
-	if getdate(joining_date) > getdate(period_start):
-		period_start = joining_date
-	if relieving_date and getdate(relieving_date) < getdate(period_end):
-		period_end = relieving_date
-		if month_diff(period_end, start_date) > 1:
-			start_date = add_months(start_date, -(month_diff(period_end, start_date) + 1))
-
-	total_sub_periods, remaining_sub_periods = 0.0, 0.0
-
-	if payroll_frequency == "Monthly" and not depends_on_payment_days:
-		total_sub_periods = month_diff(payroll_period.end_date, payroll_period.start_date)
-		remaining_sub_periods = month_diff(period_end, start_date)
-	else:
-		salary_days = date_diff(end_date, start_date) + 1
-
-		days_in_payroll_period = date_diff(payroll_period.end_date, payroll_period.start_date) + 1
-		total_sub_periods = flt(days_in_payroll_period) / flt(salary_days)
-
-		remaining_days_in_payroll_period = date_diff(period_end, start_date) + 1
-		remaining_sub_periods = flt(remaining_days_in_payroll_period) / flt(salary_days)
-
-	return total_sub_periods, remaining_sub_periods
diff --git a/erpnext/payroll/doctype/payroll_period/payroll_period_dashboard.py b/erpnext/payroll/doctype/payroll_period/payroll_period_dashboard.py
deleted file mode 100644
index 96632c5..0000000
--- a/erpnext/payroll/doctype/payroll_period/payroll_period_dashboard.py
+++ /dev/null
@@ -1,7 +0,0 @@
-def get_data():
-	return {
-		"fieldname": "payroll_period",
-		"transactions": [
-			{"items": ["Employee Tax Exemption Proof Submission", "Employee Tax Exemption Declaration"]},
-		],
-	}
diff --git a/erpnext/payroll/doctype/payroll_period/test_payroll_period.py b/erpnext/payroll/doctype/payroll_period/test_payroll_period.py
deleted file mode 100644
index 61967c0..0000000
--- a/erpnext/payroll/doctype/payroll_period/test_payroll_period.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-
-class TestPayrollPeriod(unittest.TestCase):
-	pass
diff --git a/erpnext/payroll/doctype/payroll_period_date/__init__.py b/erpnext/payroll/doctype/payroll_period_date/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/doctype/payroll_period_date/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/doctype/payroll_period_date/payroll_period_date.json b/erpnext/payroll/doctype/payroll_period_date/payroll_period_date.json
deleted file mode 100644
index 4a2f383..0000000
--- a/erpnext/payroll/doctype/payroll_period_date/payroll_period_date.json
+++ /dev/null
@@ -1,39 +0,0 @@
-{
- "actions": [],
- "creation": "2018-04-13 15:17:30.513630",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "start_date",
-  "end_date"
- ],
- "fields": [
-  {
-   "fieldname": "start_date",
-   "fieldtype": "Date",
-   "in_list_view": 1,
-   "label": "Start Date",
-   "reqd": 1
-  },
-  {
-   "fieldname": "end_date",
-   "fieldtype": "Date",
-   "in_list_view": 1,
-   "label": "End Date",
-   "reqd": 1
-  }
- ],
- "istable": 1,
- "links": [],
- "modified": "2020-06-22 23:30:15.943356",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Payroll Period Date",
- "owner": "Administrator",
- "permissions": [],
- "quick_entry": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/payroll_period_date/payroll_period_date.py b/erpnext/payroll/doctype/payroll_period_date/payroll_period_date.py
deleted file mode 100644
index c90a76a..0000000
--- a/erpnext/payroll/doctype/payroll_period_date/payroll_period_date.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-# import frappe
-from frappe.model.document import Document
-
-
-class PayrollPeriodDate(Document):
-	pass
diff --git a/erpnext/payroll/doctype/payroll_settings/__init__.py b/erpnext/payroll/doctype/payroll_settings/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/doctype/payroll_settings/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/doctype/payroll_settings/payroll_settings.js b/erpnext/payroll/doctype/payroll_settings/payroll_settings.js
deleted file mode 100644
index 941464d..0000000
--- a/erpnext/payroll/doctype/payroll_settings/payroll_settings.js
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Payroll Settings', {
-	encrypt_salary_slips_in_emails: function(frm) {
-		let encrypt_state = frm.doc.encrypt_salary_slips_in_emails;
-		frm.set_df_property('password_policy', 'reqd', encrypt_state);
-	},
-
-	validate: function(frm) {
-		let policy = frm.doc.password_policy;
-		if (policy) {
-			if (policy.includes(' ') || policy.includes('--')) {
-				frappe.msgprint(__("Password policy cannot contain spaces or simultaneous hyphens. The format will be restructured automatically"));
-			}
-			frm.set_value('password_policy', policy.split(new RegExp(" |-", 'g')).filter((token) => token).join('-'));
-		}
-	},
-});
diff --git a/erpnext/payroll/doctype/payroll_settings/payroll_settings.json b/erpnext/payroll/doctype/payroll_settings/payroll_settings.json
deleted file mode 100644
index 54377e9..0000000
--- a/erpnext/payroll/doctype/payroll_settings/payroll_settings.json
+++ /dev/null
@@ -1,119 +0,0 @@
-{
- "actions": [],
- "creation": "2020-06-04 15:13:33.589685",
- "doctype": "DocType",
- "document_type": "Other",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "payroll_based_on",
-  "consider_unmarked_attendance_as",
-  "max_working_hours_against_timesheet",
-  "include_holidays_in_total_working_days",
-  "disable_rounded_total",
-  "column_break_11",
-  "daily_wages_fraction_for_half_day",
-  "email_salary_slip_to_employee",
-  "encrypt_salary_slips_in_emails",
-  "show_leave_balances_in_salary_slip",
-  "password_policy"
- ],
- "fields": [
-  {
-   "default": "Leave",
-   "fieldname": "payroll_based_on",
-   "fieldtype": "Select",
-   "label": "Calculate Payroll Working Days Based On",
-   "options": "Leave\nAttendance"
-  },
-  {
-   "fieldname": "max_working_hours_against_timesheet",
-   "fieldtype": "Float",
-   "label": "Max working hours against Timesheet"
-  },
-  {
-   "default": "0",
-   "description": "If checked, Total no. of Working Days will include holidays, and this will reduce the value of Salary Per Day",
-   "fieldname": "include_holidays_in_total_working_days",
-   "fieldtype": "Check",
-   "label": "Include holidays in Total no. of Working Days"
-  },
-  {
-   "default": "0",
-   "description": "If checked, hides and disables Rounded Total field in Salary Slips",
-   "fieldname": "disable_rounded_total",
-   "fieldtype": "Check",
-   "label": "Disable Rounded Total"
-  },
-  {
-   "fieldname": "column_break_11",
-   "fieldtype": "Column Break"
-  },
-  {
-   "default": "0.5",
-   "description": "The fraction of daily wages to be paid for half-day attendance",
-   "fieldname": "daily_wages_fraction_for_half_day",
-   "fieldtype": "Float",
-   "label": "Fraction of Daily Salary for Half Day"
-  },
-  {
-   "default": "1",
-   "description": "Emails salary slip to employee based on preferred email selected in Employee",
-   "fieldname": "email_salary_slip_to_employee",
-   "fieldtype": "Check",
-   "label": "Email Salary Slip to Employee"
-  },
-  {
-   "default": "0",
-   "depends_on": "eval: doc.email_salary_slip_to_employee == 1;",
-   "description": "The salary slip emailed to the employee will be password protected, the password will be generated based on the password policy.",
-   "fieldname": "encrypt_salary_slips_in_emails",
-   "fieldtype": "Check",
-   "label": "Encrypt Salary Slips in Emails"
-  },
-  {
-   "depends_on": "eval: doc.encrypt_salary_slips_in_emails == 1",
-   "description": "<b>Example:</b> SAL-{first_name}-{date_of_birth.year} <br>This will generate a password like SAL-Jane-1972",
-   "fieldname": "password_policy",
-   "fieldtype": "Data",
-   "in_list_view": 1,
-   "label": "Password Policy"
-  },
-  {
-   "depends_on": "eval:doc.payroll_based_on == 'Attendance'",
-   "fieldname": "consider_unmarked_attendance_as",
-   "fieldtype": "Select",
-   "label": "Consider Unmarked Attendance As",
-   "options": "Present\nAbsent"
-  },
-  {
-   "default": "0",
-   "fieldname": "show_leave_balances_in_salary_slip",
-   "fieldtype": "Check",
-   "label": "Show Leave Balances in Salary Slip"
-  }
- ],
- "icon": "fa fa-cog",
- "index_web_pages_for_search": 1,
- "issingle": 1,
- "links": [],
- "modified": "2021-03-03 17:49:59.579723",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Payroll Settings",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "email": 1,
-   "print": 1,
-   "read": 1,
-   "role": "System Manager",
-   "share": 1,
-   "write": 1
-  }
- ],
- "sort_field": "modified",
- "sort_order": "ASC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/payroll_settings/payroll_settings.py b/erpnext/payroll/doctype/payroll_settings/payroll_settings.py
deleted file mode 100644
index 33614e9..0000000
--- a/erpnext/payroll/doctype/payroll_settings/payroll_settings.py
+++ /dev/null
@@ -1,45 +0,0 @@
-# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.custom.doctype.property_setter.property_setter import make_property_setter
-from frappe.model.document import Document
-from frappe.utils import cint
-
-
-class PayrollSettings(Document):
-	def validate(self):
-		self.validate_password_policy()
-
-		if not self.daily_wages_fraction_for_half_day:
-			self.daily_wages_fraction_for_half_day = 0.5
-
-	def validate_password_policy(self):
-		if self.email_salary_slip_to_employee and self.encrypt_salary_slips_in_emails:
-			if not self.password_policy:
-				frappe.throw(_("Password policy for Salary Slips is not set"))
-
-	def on_update(self):
-		self.toggle_rounded_total()
-		frappe.clear_cache()
-
-	def toggle_rounded_total(self):
-		self.disable_rounded_total = cint(self.disable_rounded_total)
-		make_property_setter(
-			"Salary Slip",
-			"rounded_total",
-			"hidden",
-			self.disable_rounded_total,
-			"Check",
-			validate_fields_for_doctype=False,
-		)
-		make_property_setter(
-			"Salary Slip",
-			"rounded_total",
-			"print_hide",
-			self.disable_rounded_total,
-			"Check",
-			validate_fields_for_doctype=False,
-		)
diff --git a/erpnext/payroll/doctype/payroll_settings/test_payroll_settings.py b/erpnext/payroll/doctype/payroll_settings/test_payroll_settings.py
deleted file mode 100644
index 3b96db6..0000000
--- a/erpnext/payroll/doctype/payroll_settings/test_payroll_settings.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-# import frappe
-import unittest
-
-
-class TestPayrollSettings(unittest.TestCase):
-	pass
diff --git a/erpnext/payroll/doctype/retention_bonus/__init__.py b/erpnext/payroll/doctype/retention_bonus/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/doctype/retention_bonus/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/doctype/retention_bonus/retention_bonus.js b/erpnext/payroll/doctype/retention_bonus/retention_bonus.js
deleted file mode 100644
index f8bb40a..0000000
--- a/erpnext/payroll/doctype/retention_bonus/retention_bonus.js
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Retention Bonus', {
-	setup: function(frm) {
-		frm.set_query("employee", function() {
-			if (!frm.doc.company) {
-				frappe.msgprint(__("Please Select Company First"));
-			}
-			return {
-				filters: {
-					"status": "Active",
-					"company": frm.doc.company
-				}
-			};
-		});
-
-		frm.set_query("salary_component", function() {
-			return {
-				filters: {
-					"type": "Earning"
-				}
-			};
-		});
-	},
-
-	employee: function(frm) {
-		if (frm.doc.employee) {
-			frappe.call({
-				method: "erpnext.payroll.doctype.salary_structure_assignment.salary_structure_assignment.get_employee_currency",
-				args: {
-					employee: frm.doc.employee,
-				},
-				callback: function(r) {
-					if (r.message) {
-						frm.set_value('currency', r.message);
-						frm.refresh_fields();
-					}
-				}
-			});
-		}
-	}
-});
diff --git a/erpnext/payroll/doctype/retention_bonus/retention_bonus.json b/erpnext/payroll/doctype/retention_bonus/retention_bonus.json
deleted file mode 100644
index f8d8bb4..0000000
--- a/erpnext/payroll/doctype/retention_bonus/retention_bonus.json
+++ /dev/null
@@ -1,173 +0,0 @@
-{
- "actions": [],
- "allow_import": 1,
- "allow_rename": 1,
- "autoname": "HR-RTB-.YYYY.-.#####",
- "creation": "2018-05-13 14:59:42.038964",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "company",
-  "employee",
-  "bonus_payment_date",
-  "bonus_amount",
-  "salary_component",
-  "amended_from",
-  "column_break_6",
-  "employee_name",
-  "department",
-  "date_of_joining",
-  "currency"
- ],
- "fields": [
-  {
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "label": "Company",
-   "options": "Company",
-   "reqd": 1
-  },
-  {
-   "fieldname": "employee",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Employee",
-   "options": "Employee",
-   "reqd": 1
-  },
-  {
-   "fieldname": "bonus_payment_date",
-   "fieldtype": "Date",
-   "in_list_view": 1,
-   "label": "Bonus Payment Date",
-   "reqd": 1
-  },
-  {
-   "fieldname": "bonus_amount",
-   "fieldtype": "Currency",
-   "label": "Bonus Amount",
-   "options": "currency",
-   "reqd": 1
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "Retention Bonus",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break_6",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fetch_from": "employee.employee_name",
-   "fieldname": "employee_name",
-   "fieldtype": "Data",
-   "label": "Employee Name",
-   "read_only": 1
-  },
-  {
-   "fetch_from": "employee.department",
-   "fieldname": "department",
-   "fieldtype": "Link",
-   "label": "Department",
-   "options": "Department",
-   "read_only": 1
-  },
-  {
-   "fetch_from": "employee.date_of_joining",
-   "fieldname": "date_of_joining",
-   "fieldtype": "Data",
-   "label": "Date of Joining",
-   "read_only": 1
-  },
-  {
-   "fieldname": "salary_component",
-   "fieldtype": "Link",
-   "label": "Salary Component",
-   "options": "Salary Component",
-   "reqd": 1
-  },
-  {
-   "depends_on": "eval:(doc.docstatus==1 || doc.employee)",
-   "fieldname": "currency",
-   "fieldtype": "Link",
-   "label": "Currency",
-   "options": "Currency",
-   "print_hide": 1,
-   "read_only": 1,
-   "reqd": 1
-  }
- ],
- "is_submittable": 1,
- "links": [],
- "modified": "2022-01-19 12:57:37.898953",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Retention Bonus",
- "naming_rule": "Expression (old style)",
- "owner": "Administrator",
- "permissions": [
-  {
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "Employee",
-   "share": 1
-  }
- ],
- "search_fields": "employee_name",
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": [],
- "title_field": "employee_name",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/retention_bonus/retention_bonus.py b/erpnext/payroll/doctype/retention_bonus/retention_bonus.py
deleted file mode 100644
index cdcd9a9..0000000
--- a/erpnext/payroll/doctype/retention_bonus/retention_bonus.py
+++ /dev/null
@@ -1,69 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.utils import getdate
-
-from erpnext.hr.utils import validate_active_employee
-
-
-class RetentionBonus(Document):
-	def validate(self):
-		validate_active_employee(self.employee)
-		if getdate(self.bonus_payment_date) < getdate():
-			frappe.throw(_("Bonus Payment Date cannot be a past date"))
-
-	def on_submit(self):
-		company = frappe.db.get_value("Employee", self.employee, "company")
-		additional_salary = self.get_additional_salary()
-
-		if not additional_salary:
-			additional_salary = frappe.new_doc("Additional Salary")
-			additional_salary.employee = self.employee
-			additional_salary.salary_component = self.salary_component
-			additional_salary.amount = self.bonus_amount
-			additional_salary.payroll_date = self.bonus_payment_date
-			additional_salary.company = company
-			additional_salary.overwrite_salary_structure_amount = 0
-			additional_salary.ref_doctype = self.doctype
-			additional_salary.ref_docname = self.name
-			additional_salary.submit()
-			# self.db_set('additional_salary', additional_salary.name)
-
-		else:
-			bonus_added = (
-				frappe.db.get_value("Additional Salary", additional_salary, "amount") + self.bonus_amount
-			)
-			frappe.db.set_value("Additional Salary", additional_salary, "amount", bonus_added)
-			self.db_set("additional_salary", additional_salary)
-
-	def on_cancel(self):
-
-		additional_salary = self.get_additional_salary()
-		if self.additional_salary:
-			bonus_removed = (
-				frappe.db.get_value("Additional Salary", self.additional_salary, "amount") - self.bonus_amount
-			)
-			if bonus_removed == 0:
-				frappe.get_doc("Additional Salary", self.additional_salary).cancel()
-			else:
-				frappe.db.set_value("Additional Salary", self.additional_salary, "amount", bonus_removed)
-
-			# self.db_set('additional_salary', '')
-
-	def get_additional_salary(self):
-		return frappe.db.exists(
-			"Additional Salary",
-			{
-				"employee": self.employee,
-				"salary_component": self.salary_component,
-				"payroll_date": self.bonus_payment_date,
-				"company": self.company,
-				"docstatus": 1,
-				"ref_doctype": self.doctype,
-				"ref_docname": self.name,
-			},
-		)
diff --git a/erpnext/payroll/doctype/retention_bonus/test_retention_bonus.py b/erpnext/payroll/doctype/retention_bonus/test_retention_bonus.py
deleted file mode 100644
index c86bf33..0000000
--- a/erpnext/payroll/doctype/retention_bonus/test_retention_bonus.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-
-class TestRetentionBonus(unittest.TestCase):
-	pass
diff --git a/erpnext/payroll/doctype/salary_component/README.md b/erpnext/payroll/doctype/salary_component/README.md
deleted file mode 100644
index 9644192..0000000
--- a/erpnext/payroll/doctype/salary_component/README.md
+++ /dev/null
@@ -1 +0,0 @@
-Type of earning and deductions that is a part of the salary.
diff --git a/erpnext/payroll/doctype/salary_component/__init__.py b/erpnext/payroll/doctype/salary_component/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/doctype/salary_component/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/doctype/salary_component/salary_component.js b/erpnext/payroll/doctype/salary_component/salary_component.js
deleted file mode 100644
index dbf7514..0000000
--- a/erpnext/payroll/doctype/salary_component/salary_component.js
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Salary Component', {
-	setup: function(frm) {
-		frm.set_query("account", "accounts", function(doc, cdt, cdn) {
-			var d = locals[cdt][cdn];
-			return {
-				filters: {
-					"is_group": 0,
-					"company": d.company
-				}
-			};
-		});
-		frm.set_query("earning_component_group", function() {
-			return {
-				filters: {
-					"is_group": 1,
-					"is_flexible_benefit": 1
-				}
-			};
-		});
-	},
-	is_flexible_benefit: function(frm) {
-		if(frm.doc.is_flexible_benefit){
-			set_value_for_condition_and_formula(frm);
-			frm.set_value("formula", '');
-			frm.set_value("amount", 0);
-		}
-	},
-	type: function(frm) {
-		if(frm.doc.type=="Earning"){
-			frm.set_value("is_tax_applicable", 1);
-			frm.set_value("variable_based_on_taxable_salary", 0);
-		}
-		if(frm.doc.type=="Deduction"){
-			frm.set_value("is_tax_applicable", 0);
-			frm.set_value("is_flexible_benefit", 0);
-		}
-	},
-	variable_based_on_taxable_salary: function(frm) {
-		if(frm.doc.variable_based_on_taxable_salary){
-			set_value_for_condition_and_formula(frm);
-		}
-	},
-	create_separate_payment_entry_against_benefit_claim: function(frm) {
-		if(frm.doc.create_separate_payment_entry_against_benefit_claim){
-			frm.set_df_property("accounts", "reqd", 1);
-			frm.set_value("only_tax_impact", 0);
-		}
-		else{
-			frm.set_df_property("accounts", "reqd", 0);
-		}
-	},
-	only_tax_impact: function(frm) {
-		if(frm.only_tax_impact){
-			frm.set_value("create_separate_payment_entry_against_benefit_claim", 0);
-		}
-	}
-});
-
-var set_value_for_condition_and_formula = function(frm) {
-	frm.set_value("formula", null);
-	frm.set_value("condition", null);
-	frm.set_value("amount_based_on_formula", 0);
-	frm.set_value("statistical_component", 0);
-	frm.set_value("do_not_include_in_total", 0);
-	frm.set_value("depends_on_payment_days", 0);
-};
diff --git a/erpnext/payroll/doctype/salary_component/salary_component.json b/erpnext/payroll/doctype/salary_component/salary_component.json
deleted file mode 100644
index c97e45c..0000000
--- a/erpnext/payroll/doctype/salary_component/salary_component.json
+++ /dev/null
@@ -1,272 +0,0 @@
-{
- "actions": [],
- "allow_import": 1,
- "allow_rename": 1,
- "autoname": "field:salary_component",
- "creation": "2016-06-30 15:42:43.631931",
- "doctype": "DocType",
- "document_type": "Setup",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "salary_component",
-  "salary_component_abbr",
-  "type",
-  "description",
-  "column_break_4",
-  "depends_on_payment_days",
-  "is_tax_applicable",
-  "is_income_tax_component",
-  "deduct_full_tax_on_selected_payroll_date",
-  "variable_based_on_taxable_salary",
-  "exempted_from_income_tax",
-  "round_to_the_nearest_integer",
-  "statistical_component",
-  "do_not_include_in_total",
-  "disabled",
-  "flexible_benefits",
-  "is_flexible_benefit",
-  "max_benefit_amount",
-  "column_break_9",
-  "pay_against_benefit_claim",
-  "only_tax_impact",
-  "create_separate_payment_entry_against_benefit_claim",
-  "section_break_5",
-  "accounts",
-  "condition_and_formula",
-  "condition",
-  "amount",
-  "amount_based_on_formula",
-  "formula",
-  "column_break_28",
-  "help"
- ],
- "fields": [
-  {
-   "fieldname": "salary_component",
-   "fieldtype": "Data",
-   "in_list_view": 1,
-   "label": "Name",
-   "reqd": 1,
-   "unique": 1
-  },
-  {
-   "fieldname": "salary_component_abbr",
-   "fieldtype": "Data",
-   "in_list_view": 1,
-   "label": "Abbr",
-   "print_width": "120px",
-   "reqd": 1,
-   "width": "120px"
-  },
-  {
-   "fieldname": "type",
-   "fieldtype": "Select",
-   "in_standard_filter": 1,
-   "label": "Type",
-   "options": "Earning\nDeduction",
-   "reqd": 1
-  },
-  {
-   "default": "1",
-   "depends_on": "eval:doc.type == \"Earning\"",
-   "fieldname": "is_tax_applicable",
-   "fieldtype": "Check",
-   "label": "Is Tax Applicable"
-  },
-  {
-   "default": "1",
-   "fieldname": "depends_on_payment_days",
-   "fieldtype": "Check",
-   "label": "Depends on Payment Days",
-   "print_hide": 1
-  },
-  {
-   "default": "0",
-   "fieldname": "do_not_include_in_total",
-   "fieldtype": "Check",
-   "label": "Do Not Include in Total"
-  },
-  {
-   "default": "0",
-   "depends_on": "eval:doc.is_tax_applicable && doc.type=='Earning'",
-   "fieldname": "deduct_full_tax_on_selected_payroll_date",
-   "fieldtype": "Check",
-   "label": "Deduct Full Tax on Selected Payroll Date"
-  },
-  {
-   "fieldname": "column_break_4",
-   "fieldtype": "Column Break"
-  },
-  {
-   "default": "0",
-   "fieldname": "disabled",
-   "fieldtype": "Check",
-   "label": "Disabled"
-  },
-  {
-   "fieldname": "description",
-   "fieldtype": "Small Text",
-   "in_list_view": 1,
-   "label": "Description"
-  },
-  {
-   "default": "0",
-   "description": "If selected, the value specified or calculated in this component will not contribute to the earnings or deductions. However, it's value can be referenced by other components that can be added or deducted. ",
-   "fieldname": "statistical_component",
-   "fieldtype": "Check",
-   "label": "Statistical Component"
-  },
-  {
-   "depends_on": "eval:doc.type==\"Earning\" && doc.statistical_component!=1",
-   "fieldname": "flexible_benefits",
-   "fieldtype": "Section Break",
-   "label": "Flexible Benefits"
-  },
-  {
-   "default": "0",
-   "fieldname": "is_flexible_benefit",
-   "fieldtype": "Check",
-   "label": "Is Flexible Benefit"
-  },
-  {
-   "depends_on": "is_flexible_benefit",
-   "fieldname": "max_benefit_amount",
-   "fieldtype": "Currency",
-   "label": "Max Benefit Amount (Yearly)"
-  },
-  {
-   "fieldname": "column_break_9",
-   "fieldtype": "Column Break"
-  },
-  {
-   "default": "0",
-   "depends_on": "is_flexible_benefit",
-   "fieldname": "pay_against_benefit_claim",
-   "fieldtype": "Check",
-   "label": "Pay Against Benefit Claim"
-  },
-  {
-   "default": "0",
-   "depends_on": "eval:doc.is_flexible_benefit == 1 & doc.create_separate_payment_entry_against_benefit_claim !=1",
-   "fieldname": "only_tax_impact",
-   "fieldtype": "Check",
-   "label": "Only Tax Impact (Cannot Claim But Part of Taxable Income)"
-  },
-  {
-   "default": "0",
-   "depends_on": "eval:doc.is_flexible_benefit == 1 & doc.only_tax_impact !=1",
-   "fieldname": "create_separate_payment_entry_against_benefit_claim",
-   "fieldtype": "Check",
-   "label": "Create Separate Payment Entry Against Benefit Claim"
-  },
-  {
-   "default": "0",
-   "depends_on": "eval:doc.type == \"Deduction\"",
-   "fieldname": "variable_based_on_taxable_salary",
-   "fieldtype": "Check",
-   "label": "Variable Based On Taxable Salary"
-  },
-  {
-   "depends_on": "eval:doc.statistical_component != 1",
-   "fieldname": "section_break_5",
-   "fieldtype": "Section Break",
-   "label": "Accounts"
-  },
-  {
-   "fieldname": "accounts",
-   "fieldtype": "Table",
-   "label": "Accounts",
-   "options": "Salary Component Account"
-  },
-  {
-   "collapsible": 1,
-   "depends_on": "eval:doc.is_flexible_benefit != 1 && doc.variable_based_on_taxable_salary != 1",
-   "fieldname": "condition_and_formula",
-   "fieldtype": "Section Break",
-   "label": "Condition and Formula"
-  },
-  {
-   "fieldname": "condition",
-   "fieldtype": "Code",
-   "label": "Condition"
-  },
-  {
-   "default": "0",
-   "fieldname": "amount_based_on_formula",
-   "fieldtype": "Check",
-   "label": "Amount based on formula"
-  },
-  {
-   "depends_on": "amount_based_on_formula",
-   "fieldname": "formula",
-   "fieldtype": "Code",
-   "label": "Formula"
-  },
-  {
-   "depends_on": "eval:doc.amount_based_on_formula!==1",
-   "fieldname": "amount",
-   "fieldtype": "Currency",
-   "label": "Amount"
-  },
-  {
-   "fieldname": "column_break_28",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "help",
-   "fieldtype": "HTML",
-   "label": "Help",
-   "options": "<h3>Help</h3>\n\n<p>Notes:</p>\n\n<ol>\n<li>Use field <code>base</code> for using base salary of the Employee</li>\n<li>Use Salary Component abbreviations in conditions and formulas. <code>BS = Basic Salary</code></li>\n<li>Use field name for employee details in conditions and formulas. <code>Employment Type = employment_type</code><code>Branch = branch</code></li>\n<li>Use field name from Salary Slip in conditions and formulas. <code>Payment Days = payment_days</code><code>Leave without pay = leave_without_pay</code></li>\n<li>Direct Amount can also be entered based on Condition. See example 3</li></ol>\n\n<h4>Examples</h4>\n<ol>\n<li>Calculating Basic Salary based on <code>base</code>\n<pre><code>Condition: base &lt; 10000</code></pre>\n<pre><code>Formula: base * .2</code></pre></li>\n<li>Calculating HRA based on Basic Salary<code>BS</code> \n<pre><code>Condition: BS &gt; 2000</code></pre>\n<pre><code>Formula: BS * .1</code></pre></li>\n<li>Calculating TDS based on Employment Type<code>employment_type</code> \n<pre><code>Condition: employment_type==\"Intern\"</code></pre>\n<pre><code>Amount: 1000</code></pre></li>\n</ol>"
-  },
-  {
-   "default": "0",
-   "fieldname": "round_to_the_nearest_integer",
-   "fieldtype": "Check",
-   "label": "Round to the Nearest Integer"
-  },
-  {
-   "default": "0",
-   "depends_on": "eval:doc.type == \"Deduction\" && !doc.variable_based_on_taxable_salary",
-   "description": "If checked, the full amount will be deducted from taxable income before calculating income tax without any declaration or proof submission.",
-   "fieldname": "exempted_from_income_tax",
-   "fieldtype": "Check",
-   "label": "Exempted from Income Tax"
-  },
-  {
-   "default": "0",
-   "depends_on": "eval:doc.type == \"Deduction\"",
-   "fieldname": "is_income_tax_component",
-   "fieldtype": "Check",
-   "label": "Is Income Tax Component"
-  }
- ],
- "icon": "fa fa-flag",
- "index_web_pages_for_search": 1,
- "links": [],
- "modified": "2020-10-07 20:38:33.795853",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Salary Component",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "read": 1,
-   "role": "Employee"
-  }
- ],
- "sort_field": "modified",
- "sort_order": "DESC"
-}
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/salary_component/salary_component.py b/erpnext/payroll/doctype/salary_component/salary_component.py
deleted file mode 100644
index 409c4a1..0000000
--- a/erpnext/payroll/doctype/salary_component/salary_component.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-from frappe.model.document import Document
-from frappe.model.naming import append_number_if_name_exists
-
-
-class SalaryComponent(Document):
-	def validate(self):
-		self.validate_abbr()
-
-	def validate_abbr(self):
-		if not self.salary_component_abbr:
-			self.salary_component_abbr = "".join([c[0] for c in self.salary_component.split()]).upper()
-
-		self.salary_component_abbr = self.salary_component_abbr.strip()
-		self.salary_component_abbr = append_number_if_name_exists(
-			"Salary Component",
-			self.salary_component_abbr,
-			"salary_component_abbr",
-			separator="_",
-			filters={"name": ["!=", self.name]},
-		)
diff --git a/erpnext/payroll/doctype/salary_component/test_records.json b/erpnext/payroll/doctype/salary_component/test_records.json
deleted file mode 100644
index 104b44f..0000000
--- a/erpnext/payroll/doctype/salary_component/test_records.json
+++ /dev/null
@@ -1,36 +0,0 @@
-[
-	{
-		"doctype": "Salary Component",
-		"salary_component": "_Test Basic Salary",
-		"type": "Earning",
-		"is_tax_applicable": 1
-	},
-	{
-		"doctype": "Salary Component",
-		"salary_component": "_Test Allowance",
-		"type": "Earning",
-		"is_tax_applicable": 1
-	},
-	{
-		"doctype": "Salary Component",
-		"salary_component": "_Test Professional Tax",
-		"type": "Deduction"
-	},
-	{
-		"doctype": "Salary Component",
-		"salary_component": "_Test TDS",
-		"type": "Deduction"
-	},
-	{
-		"doctype": "Salary Component",
-		"salary_component": "Basic",
-		"type": "Earning",
-		"is_tax_applicable": 1
-	},
-	{
-		"doctype": "Salary Component",
-		"salary_component": "Leave Encashment",
-		"type": "Earning",
-		"is_tax_applicable": 1
-	}
-]
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/salary_component/test_salary_component.py b/erpnext/payroll/doctype/salary_component/test_salary_component.py
deleted file mode 100644
index cd729e8..0000000
--- a/erpnext/payroll/doctype/salary_component/test_salary_component.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-import frappe
-
-# test_records = frappe.get_test_records('Salary Component')
-
-
-class TestSalaryComponent(unittest.TestCase):
-	pass
-
-
-def create_salary_component(component_name, **args):
-	if not frappe.db.exists("Salary Component", component_name):
-		frappe.get_doc(
-			{
-				"doctype": "Salary Component",
-				"salary_component": component_name,
-				"type": args.get("type") or "Earning",
-				"is_tax_applicable": args.get("is_tax_applicable") or 1,
-			}
-		).insert()
diff --git a/erpnext/payroll/doctype/salary_detail/__init__.py b/erpnext/payroll/doctype/salary_detail/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/doctype/salary_detail/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/doctype/salary_detail/salary_detail.json b/erpnext/payroll/doctype/salary_detail/salary_detail.json
deleted file mode 100644
index 665f0a8..0000000
--- a/erpnext/payroll/doctype/salary_detail/salary_detail.json
+++ /dev/null
@@ -1,260 +0,0 @@
-{
- "actions": [],
- "creation": "2016-06-30 15:32:36.385111",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "salary_component",
-  "abbr",
-  "column_break_3",
-  "amount",
-  "year_to_date",
-  "section_break_5",
-  "additional_salary",
-  "is_recurring_additional_salary",
-  "statistical_component",
-  "depends_on_payment_days",
-  "exempted_from_income_tax",
-  "is_tax_applicable",
-  "column_break_11",
-  "is_flexible_benefit",
-  "variable_based_on_taxable_salary",
-  "do_not_include_in_total",
-  "deduct_full_tax_on_selected_payroll_date",
-  "section_break_2",
-  "condition",
-  "column_break_18",
-  "amount_based_on_formula",
-  "formula",
-  "section_break_19",
-  "default_amount",
-  "additional_amount",
-  "column_break_24",
-  "tax_on_flexible_benefit",
-  "tax_on_additional_salary"
- ],
- "fields": [
-  {
-   "fieldname": "salary_component",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Component",
-   "options": "Salary Component",
-   "reqd": 1
-  },
-  {
-   "columns": 1,
-   "depends_on": "eval:doc.parenttype=='Salary Structure'",
-   "fetch_from": "salary_component.salary_component_abbr",
-   "fieldname": "abbr",
-   "fieldtype": "Data",
-   "in_list_view": 1,
-   "label": "Abbr",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break_3",
-   "fieldtype": "Column Break"
-  },
-  {
-   "default": "0",
-   "description": "If selected, the value specified or calculated in this component will not contribute to the earnings or deductions. However, it's value can be referenced by other components that can be added or deducted. ",
-   "fetch_from": "salary_component.statistical_component",
-   "fieldname": "statistical_component",
-   "fieldtype": "Check",
-   "in_list_view": 1,
-   "label": "Statistical Component"
-  },
-  {
-   "default": "0",
-   "depends_on": "eval:doc.parentfield=='earnings'",
-   "fetch_from": "salary_component.is_tax_applicable",
-   "fieldname": "is_tax_applicable",
-   "fieldtype": "Check",
-   "label": "Is Tax Applicable",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "default": "0",
-   "depends_on": "eval:doc.parentfield=='earnings'",
-   "fetch_from": "salary_component.is_flexible_benefit",
-   "fieldname": "is_flexible_benefit",
-   "fieldtype": "Check",
-   "label": "Is Flexible Benefit",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "default": "0",
-   "depends_on": "eval:doc.parentfield=='deductions'",
-   "fetch_from": "salary_component.variable_based_on_taxable_salary",
-   "fieldname": "variable_based_on_taxable_salary",
-   "fieldtype": "Check",
-   "label": "Variable Based On Taxable Salary",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "default": "0",
-   "fetch_from": "salary_component.depends_on_payment_days",
-   "fieldname": "depends_on_payment_days",
-   "fieldtype": "Check",
-   "label": "Depends on Payment Days",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "default": "0",
-   "fieldname": "deduct_full_tax_on_selected_payroll_date",
-   "fieldtype": "Check",
-   "label": "Deduct Full Tax on Selected Payroll Date",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "collapsible": 1,
-   "depends_on": "eval:doc.is_flexible_benefit != 1",
-   "fieldname": "section_break_2",
-   "fieldtype": "Section Break",
-   "label": "Condition and formula"
-  },
-  {
-   "allow_on_submit": 1,
-   "depends_on": "eval:doc.parenttype=='Salary Structure'",
-   "fieldname": "condition",
-   "fieldtype": "Code",
-   "label": "Condition"
-  },
-  {
-   "default": "0",
-   "depends_on": "eval:doc.parenttype=='Salary Structure'",
-   "fieldname": "amount_based_on_formula",
-   "fieldtype": "Check",
-   "label": "Amount based on formula"
-  },
-  {
-   "allow_on_submit": 1,
-   "depends_on": "eval:doc.amount_based_on_formula!==0 && doc.parenttype==='Salary Structure'",
-   "fieldname": "formula",
-   "fieldtype": "Code",
-   "in_list_view": 1,
-   "label": "Formula"
-  },
-  {
-   "depends_on": "eval:doc.amount_based_on_formula!==1 || doc.parenttype==='Salary Slip'",
-   "fieldname": "amount",
-   "fieldtype": "Currency",
-   "in_list_view": 1,
-   "label": "Amount",
-   "options": "currency"
-  },
-  {
-   "default": "0",
-   "fieldname": "do_not_include_in_total",
-   "fieldtype": "Check",
-   "label": "Do not include in total"
-  },
-  {
-   "depends_on": "eval:doc.parenttype=='Salary Structure'",
-   "fieldname": "default_amount",
-   "fieldtype": "Currency",
-   "label": "Default Amount",
-   "options": "currency",
-   "print_hide": 1
-  },
-  {
-   "fieldname": "additional_amount",
-   "fieldtype": "Currency",
-   "hidden": 1,
-   "label": "Additional Amount",
-   "no_copy": 1,
-   "options": "currency",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "depends_on": "eval:doc.parenttype=='Salary Slip' && doc.parentfield=='deductions' && doc.variable_based_on_taxable_salary == 1",
-   "fieldname": "tax_on_flexible_benefit",
-   "fieldtype": "Currency",
-   "label": "Tax on flexible benefit",
-   "options": "currency",
-   "read_only": 1
-  },
-  {
-   "depends_on": "eval:doc.parenttype=='Salary Slip' && doc.parentfield=='deductions' && doc.variable_based_on_taxable_salary == 1",
-   "fieldname": "tax_on_additional_salary",
-   "fieldtype": "Currency",
-   "label": "Tax on additional salary",
-   "options": "currency",
-   "read_only": 1
-  },
-  {
-   "fieldname": "additional_salary",
-   "fieldtype": "Link",
-   "label": "Additional Salary ",
-   "options": "Additional Salary",
-   "read_only": 1
-  },
-  {
-   "default": "0",
-   "depends_on": "eval:doc.parentfield=='deductions'",
-   "fetch_from": "salary_component.exempted_from_income_tax",
-   "fieldname": "exempted_from_income_tax",
-   "fieldtype": "Check",
-   "label": "Exempted from Income Tax",
-   "read_only": 1
-  },
-  {
-   "collapsible": 1,
-   "fieldname": "section_break_5",
-   "fieldtype": "Section Break",
-   "label": "Component properties and references "
-  },
-  {
-   "fieldname": "column_break_11",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "section_break_19",
-   "fieldtype": "Section Break"
-  },
-  {
-   "fieldname": "column_break_18",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "column_break_24",
-   "fieldtype": "Column Break"
-  },
-  {
-   "description": "Total salary booked against this component for this employee from the beginning of the year (payroll period or fiscal year) up to the current salary slip's end date.",
-   "fieldname": "year_to_date",
-   "fieldtype": "Currency",
-   "label": "Year To Date",
-   "options": "currency",
-   "read_only": 1
-  },
-  {
-    "default": "0",
-    "depends_on": "eval:doc.parenttype=='Salary Slip' && doc.additional_salary",
-    "fieldname": "is_recurring_additional_salary",
-    "fieldtype": "Check",
-    "label": "Is Recurring Additional Salary",
-    "read_only": 1
-   }
- ],
- "istable": 1,
- "links": [],
- "modified": "2021-08-30 13:39:15.847158",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Salary Detail",
- "owner": "Administrator",
- "permissions": [],
- "quick_entry": 1,
- "sort_field": "modified",
- "sort_order": "DESC"
-}
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/salary_detail/salary_detail.py b/erpnext/payroll/doctype/salary_detail/salary_detail.py
deleted file mode 100644
index c74bd54..0000000
--- a/erpnext/payroll/doctype/salary_detail/salary_detail.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-from frappe.model.document import Document
-
-
-class SalaryDetail(Document):
-	pass
diff --git a/erpnext/payroll/doctype/salary_slip/README.md b/erpnext/payroll/doctype/salary_slip/README.md
deleted file mode 100644
index 736550e..0000000
--- a/erpnext/payroll/doctype/salary_slip/README.md
+++ /dev/null
@@ -1 +0,0 @@
-Details of monthly salary paid for an Employee.
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/salary_slip/__init__.py b/erpnext/payroll/doctype/salary_slip/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/doctype/salary_slip/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/doctype/salary_slip/salary_slip.js b/erpnext/payroll/doctype/salary_slip/salary_slip.js
deleted file mode 100644
index 3ef9762..0000000
--- a/erpnext/payroll/doctype/salary_slip/salary_slip.js
+++ /dev/null
@@ -1,293 +0,0 @@
-// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-// License: GNU General Public License v3. See license.txt
-
-cur_frm.add_fetch('employee', 'company', 'company');
-cur_frm.add_fetch('time_sheet', 'total_hours', 'working_hours');
-
-frappe.ui.form.on("Salary Slip", {
-	setup: function(frm) {
-		$.each(["earnings", "deductions"], function(i, table_fieldname) {
-			frm.get_field(table_fieldname).grid.editable_fields = [
-				{fieldname: 'salary_component', columns: 6},
-				{fieldname: 'amount', columns: 4}
-			];
-		});
-
-		frm.fields_dict["timesheets"].grid.get_field("time_sheet").get_query = function() {
-			return {
-				filters: {
-					employee: frm.doc.employee
-				}
-			};
-		};
-
-		frm.set_query("salary_component", "earnings", function() {
-			return {
-				filters: {
-					type: "earning"
-				}
-			};
-		});
-
-		frm.set_query("salary_component", "deductions", function() {
-			return {
-				filters: {
-					type: "deduction"
-				}
-			};
-		});
-
-		frm.set_query("employee", function() {
-			return {
-				query: "erpnext.controllers.queries.employee_query",
-				filters: {
-					company: frm.doc.company
-				}
-			};
-		});
-	},
-
-	start_date: function(frm) {
-		if (frm.doc.start_date) {
-			frm.trigger("set_end_date");
-		}
-	},
-
-	end_date: function(frm) {
-		frm.events.get_emp_and_working_day_details(frm);
-	},
-
-	set_end_date: function(frm) {
-		frappe.call({
-			method: 'erpnext.payroll.doctype.payroll_entry.payroll_entry.get_end_date',
-			args: {
-				frequency: frm.doc.payroll_frequency,
-				start_date: frm.doc.start_date
-			},
-			callback: function (r) {
-				if (r.message) {
-					frm.set_value('end_date', r.message.end_date);
-				}
-			}
-		});
-	},
-
-	company: function(frm) {
-		var company = locals[':Company'][frm.doc.company];
-		if (!frm.doc.letter_head && company.default_letter_head) {
-			frm.set_value('letter_head', company.default_letter_head);
-		}
-	},
-
-	currency: function(frm) {
-		frm.trigger("set_dynamic_labels");
-	},
-
-	set_dynamic_labels: function(frm) {
-		var company_currency = frm.doc.company? erpnext.get_currency(frm.doc.company): frappe.defaults.get_default("currency");
-		if (frm.doc.employee && frm.doc.currency) {
-			frappe.run_serially([
-				() => 	frm.events.set_exchange_rate(frm, company_currency),
-				() => 	frm.events.change_form_labels(frm, company_currency),
-				() => 	frm.events.change_grid_labels(frm),
-				() => 	frm.refresh_fields()
-			]);
-		}
-	},
-
-	set_exchange_rate: function(frm, company_currency) {
-		if (frm.doc.docstatus === 0) {
-			if (frm.doc.currency) {
-				var from_currency = frm.doc.currency;
-				if (from_currency != company_currency) {
-					frm.events.hide_loan_section(frm);
-					frappe.call({
-						method: "erpnext.setup.utils.get_exchange_rate",
-						args: {
-							from_currency: from_currency,
-							to_currency: company_currency,
-						},
-						callback: function(r) {
-							if (r.message) {
-								frm.set_value("exchange_rate", flt(r.message));
-								frm.set_df_property('exchange_rate', 'hidden', 0);
-								frm.set_df_property("exchange_rate", "description", "1 " + frm.doc.currency
-									+ " = [?] " + company_currency);
-							}
-						}
-					});
-				} else {
-					frm.set_value("exchange_rate", 1.0);
-					frm.set_df_property('exchange_rate', 'hidden', 1);
-					frm.set_df_property("exchange_rate", "description", "" );
-				}
-			}
-		}
-	},
-
-	exchange_rate: function(frm) {
-		set_totals(frm);
-	},
-
-	hide_loan_section: function(frm) {
-		frm.set_df_property('section_break_43', 'hidden', 1);
-	},
-
-	change_form_labels: function(frm, company_currency) {
-		frm.set_currency_labels(["base_hour_rate", "base_gross_pay", "base_total_deduction",
-			"base_net_pay", "base_rounded_total", "base_total_in_words", "base_year_to_date", "base_month_to_date", "gross_base_year_to_date"],
-		company_currency);
-
-		frm.set_currency_labels(["hour_rate", "gross_pay", "total_deduction", "net_pay", "rounded_total", "total_in_words", "year_to_date", "month_to_date", "gross_year_to_date"],
-			frm.doc.currency);
-
-		// toggle fields
-		frm.toggle_display(["exchange_rate", "base_hour_rate", "base_gross_pay", "base_total_deduction",
-			"base_net_pay", "base_rounded_total", "base_total_in_words", "base_year_to_date", "base_month_to_date", "base_gross_year_to_date"],
-		frm.doc.currency != company_currency);
-	},
-
-	change_grid_labels: function(frm) {
-		let fields = ["amount", "year_to_date", "default_amount", "additional_amount", "tax_on_flexible_benefit",
-			"tax_on_additional_salary"];
-
-		frm.set_currency_labels(fields, frm.doc.currency, "earnings");
-		frm.set_currency_labels(fields, frm.doc.currency, "deductions");
-	},
-
-	refresh: function(frm) {
-		frm.trigger("toggle_fields");
-
-		var salary_detail_fields = ["formula", "abbr", "statistical_component", "variable_based_on_taxable_salary"];
-		frm.fields_dict['earnings'].grid.set_column_disp(salary_detail_fields, false);
-		frm.fields_dict['deductions'].grid.set_column_disp(salary_detail_fields, false);
-		frm.trigger("set_dynamic_labels");
-	},
-
-	salary_slip_based_on_timesheet: function(frm) {
-		frm.trigger("toggle_fields");
-		frm.events.get_emp_and_working_day_details(frm);
-	},
-
-	payroll_frequency: function(frm) {
-		frm.trigger("toggle_fields");
-		frm.set_value('end_date', '');
-	},
-
-	employee: function(frm) {
-		frm.events.get_emp_and_working_day_details(frm);
-	},
-
-	leave_without_pay: function(frm) {
-		if (frm.doc.employee && frm.doc.start_date && frm.doc.end_date) {
-			return frappe.call({
-				method: 'process_salary_based_on_working_days',
-				doc: frm.doc,
-				callback: function() {
-					frm.refresh();
-				}
-			});
-		}
-	},
-
-	toggle_fields: function(frm) {
-		frm.toggle_display(['hourly_wages', 'timesheets'], cint(frm.doc.salary_slip_based_on_timesheet)===1);
-
-		frm.toggle_display(['payment_days', 'total_working_days', 'leave_without_pay'],
-			frm.doc.payroll_frequency != "");
-	},
-
-	get_emp_and_working_day_details: function(frm) {
-		if (frm.doc.employee) {
-			return frappe.call({
-				method: 'get_emp_and_working_day_details',
-				doc: frm.doc,
-				callback: function(r) {
-					if (r.message[1] !== "Leave" && r.message[0]) {
-						frm.fields_dict.absent_days.set_description(__("Unmarked Days is treated as {0}. You can can change this in {1}", [r.message, frappe.utils.get_form_link("Payroll Settings", "Payroll Settings", true)]));
-					}
-					frm.refresh();
-				}
-			});
-		}
-	}
-});
-
-frappe.ui.form.on('Salary Slip Timesheet', {
-	time_sheet: function(frm) {
-		set_totals(frm);
-	},
-	timesheets_remove: function(frm) {
-		set_totals(frm);
-	}
-});
-
-var set_totals = function(frm) {
-	if (frm.doc.docstatus === 0 && frm.doc.doctype === "Salary Slip") {
-		if (frm.doc.earnings || frm.doc.deductions) {
-			frappe.call({
-				method: "set_totals",
-				doc: frm.doc,
-				callback: function() {
-					frm.refresh_fields();
-				}
-			});
-		}
-	}
-};
-
-frappe.ui.form.on('Salary Detail', {
-	amount: function(frm) {
-		set_totals(frm);
-	},
-
-	earnings_remove: function(frm) {
-		set_totals(frm);
-	},
-
-	deductions_remove: function(frm) {
-		set_totals(frm);
-	},
-
-	salary_component: function(frm, cdt, cdn) {
-		var child = locals[cdt][cdn];
-		if (child.salary_component) {
-			frappe.call({
-				method: "frappe.client.get",
-				args: {
-					doctype: "Salary Component",
-					name: child.salary_component
-				},
-				callback: function(data) {
-					if (data.message) {
-						var result = data.message;
-						frappe.model.set_value(cdt, cdn, 'condition', result.condition);
-						frappe.model.set_value(cdt, cdn, 'amount_based_on_formula', result.amount_based_on_formula);
-						if (result.amount_based_on_formula === 1) {
-							frappe.model.set_value(cdt, cdn, 'formula', result.formula);
-						} else {
-							frappe.model.set_value(cdt, cdn, 'amount', result.amount);
-						}
-						frappe.model.set_value(cdt, cdn, 'statistical_component', result.statistical_component);
-						frappe.model.set_value(cdt, cdn, 'depends_on_payment_days', result.depends_on_payment_days);
-						frappe.model.set_value(cdt, cdn, 'do_not_include_in_total', result.do_not_include_in_total);
-						frappe.model.set_value(cdt, cdn, 'variable_based_on_taxable_salary', result.variable_based_on_taxable_salary);
-						frappe.model.set_value(cdt, cdn, 'is_tax_applicable', result.is_tax_applicable);
-						frappe.model.set_value(cdt, cdn, 'is_flexible_benefit', result.is_flexible_benefit);
-						refresh_field("earnings");
-						refresh_field("deductions");
-					}
-				}
-			});
-		}
-	},
-
-	amount_based_on_formula: function(frm, cdt, cdn) {
-		var child = locals[cdt][cdn];
-		if (child.amount_based_on_formula === 1) {
-			frappe.model.set_value(cdt, cdn, 'amount', null);
-		} else {
-			frappe.model.set_value(cdt, cdn, 'formula', null);
-		}
-	}
-});
diff --git a/erpnext/payroll/doctype/salary_slip/salary_slip.json b/erpnext/payroll/doctype/salary_slip/salary_slip.json
deleted file mode 100644
index fe8e22c..0000000
--- a/erpnext/payroll/doctype/salary_slip/salary_slip.json
+++ /dev/null
@@ -1,683 +0,0 @@
-{
- "actions": [],
- "allow_import": 1,
- "creation": "2013-01-10 16:34:15",
- "doctype": "DocType",
- "document_type": "Setup",
- "engine": "InnoDB",
- "field_order": [
-  "posting_date",
-  "employee",
-  "employee_name",
-  "department",
-  "designation",
-  "branch",
-  "column_break1",
-  "status",
-  "journal_entry",
-  "payroll_entry",
-  "company",
-  "currency",
-  "exchange_rate",
-  "letter_head",
-  "section_break_10",
-  "start_date",
-  "end_date",
-  "salary_structure",
-  "column_break_18",
-  "salary_slip_based_on_timesheet",
-  "payroll_frequency",
-  "section_break_20",
-  "total_working_days",
-  "unmarked_days",
-  "leave_without_pay",
-  "column_break_24",
-  "absent_days",
-  "payment_days",
-  "hourly_wages",
-  "timesheets",
-  "column_break_20",
-  "total_working_hours",
-  "hour_rate",
-  "base_hour_rate",
-  "section_break_26",
-  "bank_name",
-  "bank_account_no",
-  "mode_of_payment",
-  "section_break_32",
-  "deduct_tax_for_unclaimed_employee_benefits",
-  "deduct_tax_for_unsubmitted_tax_exemption_proof",
-  "earning_deduction",
-  "earning",
-  "earnings",
-  "deduction",
-  "deductions",
-  "totals",
-  "gross_pay",
-  "base_gross_pay",
-  "gross_year_to_date",
-  "base_gross_year_to_date",
-  "column_break_25",
-  "total_deduction",
-  "base_total_deduction",
-  "loan_repayment",
-  "loans",
-  "section_break_43",
-  "total_principal_amount",
-  "total_interest_amount",
-  "column_break_45",
-  "total_loan_repayment",
-  "net_pay_info",
-  "net_pay",
-  "base_net_pay",
-  "year_to_date",
-  "base_year_to_date",
-  "column_break_53",
-  "rounded_total",
-  "base_rounded_total",
-  "month_to_date",
-  "base_month_to_date",
-  "section_break_55",
-  "total_in_words",
-  "column_break_69",
-  "base_total_in_words",
-  "leave_details_section",
-  "leave_details",
-  "section_break_75",
-  "amended_from"
- ],
- "fields": [
-  {
-   "default": "Today",
-   "fieldname": "posting_date",
-   "fieldtype": "Date",
-   "in_list_view": 1,
-   "label": "Posting Date",
-   "reqd": 1
-  },
-  {
-   "fieldname": "employee",
-   "fieldtype": "Link",
-   "in_global_search": 1,
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Employee",
-   "oldfieldname": "employee",
-   "oldfieldtype": "Link",
-   "options": "Employee",
-   "reqd": 1,
-   "search_index": 1
-  },
-  {
-   "fetch_from": "employee.employee_name",
-   "fieldname": "employee_name",
-   "fieldtype": "Read Only",
-   "in_global_search": 1,
-   "in_list_view": 1,
-   "label": "Employee Name",
-   "oldfieldname": "employee_name",
-   "oldfieldtype": "Data",
-   "reqd": 1
-  },
-  {
-   "fetch_from": "employee.department",
-   "fieldname": "department",
-   "fieldtype": "Link",
-   "in_standard_filter": 1,
-   "label": "Department",
-   "oldfieldname": "department",
-   "oldfieldtype": "Link",
-   "options": "Department",
-   "read_only": 1
-  },
-  {
-   "depends_on": "eval:doc.designation",
-   "fetch_from": "employee.designation",
-   "fieldname": "designation",
-   "fieldtype": "Link",
-   "label": "Designation",
-   "oldfieldname": "designation",
-   "oldfieldtype": "Link",
-   "options": "Designation",
-   "read_only": 1
-  },
-  {
-   "fetch_from": "employee.branch",
-   "fieldname": "branch",
-   "fieldtype": "Link",
-   "in_standard_filter": 1,
-   "label": "Branch",
-   "oldfieldname": "branch",
-   "oldfieldtype": "Link",
-   "options": "Branch",
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break1",
-   "fieldtype": "Column Break",
-   "oldfieldtype": "Column Break",
-   "width": "50%"
-  },
-  {
-   "fieldname": "status",
-   "fieldtype": "Select",
-   "label": "Status",
-   "options": "Draft\nSubmitted\nCancelled",
-   "read_only": 1
-  },
-  {
-   "fieldname": "journal_entry",
-   "fieldtype": "Link",
-   "label": "Journal Entry",
-   "options": "Journal Entry",
-   "read_only": 1
-  },
-  {
-   "fieldname": "payroll_entry",
-   "fieldtype": "Link",
-   "label": "Payroll Entry",
-   "options": "Payroll Entry",
-   "read_only": 1
-  },
-  {
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Company",
-   "options": "Company",
-   "remember_last_selected_value": 1,
-   "reqd": 1
-  },
-  {
-   "allow_on_submit": 1,
-   "fieldname": "letter_head",
-   "fieldtype": "Link",
-   "ignore_user_permissions": 1,
-   "label": "Letter Head",
-   "options": "Letter Head",
-   "print_hide": 1
-  },
-  {
-   "fieldname": "section_break_10",
-   "fieldtype": "Section Break"
-  },
-  {
-   "default": "0",
-   "fieldname": "salary_slip_based_on_timesheet",
-   "fieldtype": "Check",
-   "label": "Salary Slip Based on Timesheet",
-   "read_only": 1
-  },
-  {
-   "fieldname": "start_date",
-   "fieldtype": "Date",
-   "label": "Start Date"
-  },
-  {
-   "fieldname": "end_date",
-   "fieldtype": "Date",
-   "label": "End Date"
-  },
-  {
-   "fieldname": "salary_structure",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Salary Structure",
-   "options": "Salary Structure",
-   "read_only": 1,
-   "reqd": 1,
-   "search_index": 1
-  },
-  {
-   "depends_on": "eval:(!doc.salary_slip_based_on_timesheet)",
-   "fieldname": "payroll_frequency",
-   "fieldtype": "Select",
-   "label": "Payroll Frequency",
-   "options": "\nMonthly\nFortnightly\nBimonthly\nWeekly\nDaily"
-  },
-  {
-   "fieldname": "total_working_days",
-   "fieldtype": "Float",
-   "label": "Working Days",
-   "oldfieldname": "total_days_in_month",
-   "oldfieldtype": "Int",
-   "read_only": 1,
-   "reqd": 1
-  },
-  {
-   "fieldname": "leave_without_pay",
-   "fieldtype": "Float",
-   "label": "Leave Without Pay",
-   "oldfieldname": "leave_without_pay",
-   "oldfieldtype": "Currency"
-  },
-  {
-   "fieldname": "payment_days",
-   "fieldtype": "Float",
-   "label": "Payment Days",
-   "oldfieldname": "payment_days",
-   "oldfieldtype": "Float",
-   "read_only": 1,
-   "reqd": 1
-  },
-  {
-   "fieldname": "hourly_wages",
-   "fieldtype": "Section Break"
-  },
-  {
-   "fieldname": "timesheets",
-   "fieldtype": "Table",
-   "label": "Salary Slip Timesheet",
-   "options": "Salary Slip Timesheet"
-  },
-  {
-   "fieldname": "column_break_20",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "total_working_hours",
-   "fieldtype": "Float",
-   "label": "Total Working Hours",
-   "print_hide_if_no_value": 1
-  },
-  {
-   "fieldname": "hour_rate",
-   "fieldtype": "Currency",
-   "label": "Hour Rate",
-   "options": "currency",
-   "print_hide_if_no_value": 1
-  },
-  {
-   "fieldname": "section_break_26",
-   "fieldtype": "Section Break"
-  },
-  {
-   "fieldname": "bank_name",
-   "fieldtype": "Data",
-   "label": "Bank Name",
-   "oldfieldname": "bank_name",
-   "oldfieldtype": "Data",
-   "read_only": 1
-  },
-  {
-   "fieldname": "bank_account_no",
-   "fieldtype": "Data",
-   "label": "Bank Account No.",
-   "oldfieldname": "bank_account_no",
-   "oldfieldtype": "Data",
-   "read_only": 1
-  },
-  {
-   "fieldname": "section_break_32",
-   "fieldtype": "Section Break"
-  },
-  {
-   "default": "0",
-   "fieldname": "deduct_tax_for_unclaimed_employee_benefits",
-   "fieldtype": "Check",
-   "label": "Deduct Tax For Unclaimed Employee Benefits"
-  },
-  {
-   "default": "0",
-   "fieldname": "deduct_tax_for_unsubmitted_tax_exemption_proof",
-   "fieldtype": "Check",
-   "label": "Deduct Tax For Unsubmitted Tax Exemption Proof"
-  },
-  {
-   "fieldname": "earning_deduction",
-   "fieldtype": "Section Break",
-   "label": "Earnings & Deductions",
-   "oldfieldtype": "Section Break"
-  },
-  {
-   "fieldname": "earning",
-   "fieldtype": "Column Break",
-   "oldfieldtype": "Column Break",
-   "width": "50%"
-  },
-  {
-   "fieldname": "earnings",
-   "fieldtype": "Table",
-   "label": "Earnings",
-   "oldfieldname": "earning_details",
-   "oldfieldtype": "Table",
-   "options": "Salary Detail"
-  },
-  {
-   "fieldname": "deduction",
-   "fieldtype": "Column Break",
-   "oldfieldtype": "Column Break",
-   "width": "50%"
-  },
-  {
-   "fieldname": "deductions",
-   "fieldtype": "Table",
-   "label": "Deductions",
-   "oldfieldname": "deduction_details",
-   "oldfieldtype": "Table",
-   "options": "Salary Detail"
-  },
-  {
-   "fieldname": "totals",
-   "fieldtype": "Section Break",
-   "oldfieldtype": "Section Break"
-  },
-  {
-   "fieldname": "gross_pay",
-   "fieldtype": "Currency",
-   "label": "Gross Pay",
-   "options": "currency",
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break_25",
-   "fieldtype": "Column Break"
-  },
-  {
-   "depends_on": "total_loan_repayment",
-   "fieldname": "loan_repayment",
-   "fieldtype": "Section Break",
-   "label": "Loan Repayment"
-  },
-  {
-   "fieldname": "loans",
-   "fieldtype": "Table",
-   "label": "Employee Loan",
-   "options": "Salary Slip Loan",
-   "print_hide": 1
-  },
-  {
-   "depends_on": "eval:doc.docstatus != 0",
-   "fieldname": "section_break_43",
-   "fieldtype": "Section Break"
-  },
-  {
-   "default": "0",
-   "fieldname": "total_principal_amount",
-   "fieldtype": "Currency",
-   "label": "Total Principal Amount",
-   "options": "Company:company:default_currency",
-   "read_only": 1
-  },
-  {
-   "default": "0",
-   "fieldname": "total_interest_amount",
-   "fieldtype": "Currency",
-   "label": "Total Interest Amount",
-   "options": "Company:company:default_currency",
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break_45",
-   "fieldtype": "Column Break"
-  },
-  {
-   "default": "0",
-   "fieldname": "total_loan_repayment",
-   "fieldtype": "Currency",
-   "label": "Total Loan Repayment",
-   "options": "Company:company:default_currency",
-   "read_only": 1
-  },
-  {
-   "fieldname": "net_pay_info",
-   "fieldtype": "Section Break",
-   "label": "Net Pay Info"
-  },
-  {
-   "fieldname": "net_pay",
-   "fieldtype": "Currency",
-   "label": "Net Pay",
-   "options": "currency",
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break_53",
-   "fieldtype": "Column Break"
-  },
-  {
-   "bold": 1,
-   "fieldname": "rounded_total",
-   "fieldtype": "Currency",
-   "label": "Rounded Total",
-   "options": "currency",
-   "read_only": 1
-  },
-  {
-   "fieldname": "section_break_55",
-   "fieldtype": "Section Break"
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "ignore_user_permissions": 1,
-   "label": "Amended From",
-   "no_copy": 1,
-   "oldfieldname": "amended_from",
-   "oldfieldtype": "Data",
-   "options": "Salary Slip",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "fieldname": "mode_of_payment",
-   "fieldtype": "Select",
-   "label": "Mode Of Payment",
-   "read_only": 1
-  },
-  {
-   "fieldname": "absent_days",
-   "fieldtype": "Float",
-   "label": "Absent Days",
-   "read_only": 1
-  },
-  {
-   "fieldname": "unmarked_days",
-   "fieldtype": "Float",
-   "hidden": 1,
-   "label": "Unmarked days"
-  },
-  {
-   "fieldname": "section_break_20",
-   "fieldtype": "Section Break"
-  },
-  {
-   "fieldname": "column_break_24",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "column_break_18",
-   "fieldtype": "Column Break"
-  },
-  {
-   "depends_on": "eval:(doc.docstatus==1 || doc.salary_structure)",
-   "fetch_from": "salary_structure.currency",
-   "fieldname": "currency",
-   "fieldtype": "Link",
-   "label": "Currency",
-   "options": "Currency",
-   "print_hide": 1,
-   "read_only": 1,
-   "reqd": 1
-  },
-  {
-   "fieldname": "total_deduction",
-   "fieldtype": "Currency",
-   "label": "Total Deduction",
-   "options": "currency",
-   "read_only": 1
-  },
-  {
-   "fieldname": "total_in_words",
-   "fieldtype": "Data",
-   "label": "Total in words",
-   "length": 240,
-   "read_only": 1
-  },
-  {
-   "fieldname": "section_break_75",
-   "fieldtype": "Section Break"
-  },
-  {
-   "fieldname": "base_hour_rate",
-   "fieldtype": "Currency",
-   "label": "Hour Rate (Company Currency)",
-   "options": "Company:company:default_currency",
-   "print_hide_if_no_value": 1
-  },
-  {
-   "fieldname": "base_gross_pay",
-   "fieldtype": "Currency",
-   "label": "Gross Pay (Company Currency)",
-   "options": "Company:company:default_currency",
-   "read_only": 1
-  },
-  {
-   "default": "1.0",
-   "fieldname": "exchange_rate",
-   "fieldtype": "Float",
-   "hidden": 1,
-   "label": "Exchange Rate",
-   "print_hide": 1,
-   "reqd": 1
-  },
-  {
-   "fieldname": "base_total_deduction",
-   "fieldtype": "Currency",
-   "label": "Total Deduction (Company Currency)",
-   "options": "Company:company:default_currency",
-   "read_only": 1
-  },
-  {
-   "fieldname": "base_net_pay",
-   "fieldtype": "Currency",
-   "label": "Net Pay (Company Currency)",
-   "options": "Company:company:default_currency",
-   "read_only": 1
-  },
-  {
-   "bold": 1,
-   "fieldname": "base_rounded_total",
-   "fieldtype": "Currency",
-   "label": "Rounded Total (Company Currency)",
-   "options": "Company:company:default_currency",
-   "read_only": 1
-  },
-  {
-   "fieldname": "base_total_in_words",
-   "fieldtype": "Data",
-   "label": "Total in words (Company Currency)",
-   "length": 240,
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break_69",
-   "fieldtype": "Column Break"
-  },
-  {
-   "description": "Total salary booked for this employee from the beginning of the year (payroll period or fiscal year) up to the current salary slip's end date.",
-   "fieldname": "year_to_date",
-   "fieldtype": "Currency",
-   "label": "Year To Date",
-   "options": "currency",
-   "read_only": 1
-  },
-  {
-   "description": "Total salary booked for this employee from the beginning of the month up to the current salary slip's end date.",
-   "fieldname": "month_to_date",
-   "fieldtype": "Currency",
-   "label": "Month To Date",
-   "options": "currency",
-   "read_only": 1
-  },
-  {
-   "fieldname": "base_year_to_date",
-   "fieldtype": "Currency",
-   "label": "Year To Date(Company Currency)",
-   "options": "Company:company:default_currency",
-   "read_only": 1
-  },
-  {
-   "fieldname": "base_month_to_date",
-   "fieldtype": "Currency",
-   "label": "Month To Date(Company Currency)",
-   "options": "Company:company:default_currency",
-   "read_only": 1
-  },
-  {
-   "fieldname": "leave_details_section",
-   "fieldtype": "Section Break",
-   "label": "Leave Details"
-  },
-  {
-   "fieldname": "leave_details",
-   "fieldtype": "Table",
-   "label": "Leave Details",
-   "options": "Salary Slip Leave",
-   "read_only": 1
-  },
-  {
-   "fieldname": "gross_year_to_date",
-   "fieldtype": "Currency",
-   "label": "Gross Year To Date",
-   "options": "currency",
-   "read_only": 1
-  },
-  {
-   "fieldname": "base_gross_year_to_date",
-   "fieldtype": "Currency",
-   "label": "Gross Year To Date(Company Currency)",
-   "options": "Company:company:default_currency",
-   "read_only": 1
-  }
- ],
- "icon": "fa fa-file-text",
- "idx": 9,
- "is_submittable": 1,
- "links": [],
- "modified": "2022-01-19 12:45:54.999345",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Salary Slip",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "email": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "read": 1,
-   "role": "Employee"
-  }
- ],
- "search_fields": "employee_name",
- "show_name_in_global_search": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": [],
- "timeline_field": "employee",
- "title_field": "employee_name"
-}
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/salary_slip/salary_slip.py b/erpnext/payroll/doctype/salary_slip/salary_slip.py
deleted file mode 100644
index 6a35985..0000000
--- a/erpnext/payroll/doctype/salary_slip/salary_slip.py
+++ /dev/null
@@ -1,1764 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-
-import datetime
-import math
-
-import frappe
-from frappe import _, msgprint
-from frappe.model.naming import make_autoname
-from frappe.utils import (
-	add_days,
-	cint,
-	cstr,
-	date_diff,
-	flt,
-	formatdate,
-	get_first_day,
-	getdate,
-	money_in_words,
-	rounded,
-)
-from frappe.utils.background_jobs import enqueue
-
-import erpnext
-from erpnext.accounts.utils import get_fiscal_year
-from erpnext.hr.utils import get_holiday_dates_for_employee, validate_active_employee
-from erpnext.loan_management.doctype.loan_repayment.loan_repayment import (
-	calculate_amounts,
-	create_repayment_entry,
-)
-from erpnext.loan_management.doctype.process_loan_interest_accrual.process_loan_interest_accrual import (
-	process_loan_interest_accrual_for_term_loans,
-)
-from erpnext.payroll.doctype.additional_salary.additional_salary import get_additional_salaries
-from erpnext.payroll.doctype.employee_benefit_application.employee_benefit_application import (
-	get_benefit_component_amount,
-)
-from erpnext.payroll.doctype.employee_benefit_claim.employee_benefit_claim import (
-	get_benefit_claim_amount,
-	get_last_payroll_period_benefits,
-)
-from erpnext.payroll.doctype.payroll_entry.payroll_entry import get_start_end_dates
-from erpnext.payroll.doctype.payroll_period.payroll_period import (
-	get_payroll_period,
-	get_period_factor,
-)
-from erpnext.utilities.transaction_base import TransactionBase
-
-
-class SalarySlip(TransactionBase):
-	def __init__(self, *args, **kwargs):
-		super(SalarySlip, self).__init__(*args, **kwargs)
-		self.series = "Sal Slip/{0}/.#####".format(self.employee)
-		self.whitelisted_globals = {
-			"int": int,
-			"float": float,
-			"long": int,
-			"round": round,
-			"date": datetime.date,
-			"getdate": getdate,
-		}
-
-	def autoname(self):
-		self.name = make_autoname(self.series)
-
-	def validate(self):
-		self.status = self.get_status()
-		validate_active_employee(self.employee)
-		self.validate_dates()
-		self.check_existing()
-		if not self.salary_slip_based_on_timesheet:
-			self.get_date_details()
-
-		if not (len(self.get("earnings")) or len(self.get("deductions"))):
-			# get details from salary structure
-			self.get_emp_and_working_day_details()
-		else:
-			self.get_working_days_details(lwp=self.leave_without_pay)
-
-		self.calculate_net_pay()
-		self.compute_year_to_date()
-		self.compute_month_to_date()
-		self.compute_component_wise_year_to_date()
-		self.add_leave_balances()
-
-		if frappe.db.get_single_value("Payroll Settings", "max_working_hours_against_timesheet"):
-			max_working_hours = frappe.db.get_single_value(
-				"Payroll Settings", "max_working_hours_against_timesheet"
-			)
-			if self.salary_slip_based_on_timesheet and (self.total_working_hours > int(max_working_hours)):
-				frappe.msgprint(
-					_("Total working hours should not be greater than max working hours {0}").format(
-						max_working_hours
-					),
-					alert=True,
-				)
-
-	def set_net_total_in_words(self):
-		doc_currency = self.currency
-		company_currency = erpnext.get_company_currency(self.company)
-		total = self.net_pay if self.is_rounding_total_disabled() else self.rounded_total
-		base_total = self.base_net_pay if self.is_rounding_total_disabled() else self.base_rounded_total
-		self.total_in_words = money_in_words(total, doc_currency)
-		self.base_total_in_words = money_in_words(base_total, company_currency)
-
-	def on_submit(self):
-		if self.net_pay < 0:
-			frappe.throw(_("Net Pay cannot be less than 0"))
-		else:
-			self.set_status()
-			self.update_status(self.name)
-			self.make_loan_repayment_entry()
-			if (
-				frappe.db.get_single_value("Payroll Settings", "email_salary_slip_to_employee")
-			) and not frappe.flags.via_payroll_entry:
-				self.email_salary_slip()
-
-		self.update_payment_status_for_gratuity()
-
-	def update_payment_status_for_gratuity(self):
-		additional_salary = frappe.db.get_all(
-			"Additional Salary",
-			filters={
-				"payroll_date": ("between", [self.start_date, self.end_date]),
-				"employee": self.employee,
-				"ref_doctype": "Gratuity",
-				"docstatus": 1,
-			},
-			fields=["ref_docname", "name"],
-			limit=1,
-		)
-
-		if additional_salary:
-			status = "Paid" if self.docstatus == 1 else "Unpaid"
-			if additional_salary[0].name in [entry.additional_salary for entry in self.earnings]:
-				frappe.db.set_value("Gratuity", additional_salary[0].ref_docname, "status", status)
-
-	def on_cancel(self):
-		self.set_status()
-		self.update_status()
-		self.update_payment_status_for_gratuity()
-		self.cancel_loan_repayment_entry()
-
-	def on_trash(self):
-		from frappe.model.naming import revert_series_if_last
-
-		revert_series_if_last(self.series, self.name)
-
-	def get_status(self):
-		if self.docstatus == 0:
-			status = "Draft"
-		elif self.docstatus == 1:
-			status = "Submitted"
-		elif self.docstatus == 2:
-			status = "Cancelled"
-		return status
-
-	def validate_dates(self, joining_date=None, relieving_date=None):
-		if date_diff(self.end_date, self.start_date) < 0:
-			frappe.throw(_("To date cannot be before From date"))
-
-		if not joining_date:
-			joining_date, relieving_date = frappe.get_cached_value(
-				"Employee", self.employee, ("date_of_joining", "relieving_date")
-			)
-
-		if date_diff(self.end_date, joining_date) < 0:
-			frappe.throw(_("Cannot create Salary Slip for Employee joining after Payroll Period"))
-
-		if relieving_date and date_diff(relieving_date, self.start_date) < 0:
-			frappe.throw(_("Cannot create Salary Slip for Employee who has left before Payroll Period"))
-
-	def is_rounding_total_disabled(self):
-		return cint(frappe.db.get_single_value("Payroll Settings", "disable_rounded_total"))
-
-	def check_existing(self):
-		if not self.salary_slip_based_on_timesheet:
-			cond = ""
-			if self.payroll_entry:
-				cond += "and payroll_entry = '{0}'".format(self.payroll_entry)
-			ret_exist = frappe.db.sql(
-				"""select name from `tabSalary Slip`
-						where start_date = %s and end_date = %s and docstatus != 2
-						and employee = %s and name != %s {0}""".format(
-					cond
-				),
-				(self.start_date, self.end_date, self.employee, self.name),
-			)
-			if ret_exist:
-				frappe.throw(
-					_("Salary Slip of employee {0} already created for this period").format(self.employee)
-				)
-		else:
-			for data in self.timesheets:
-				if frappe.db.get_value("Timesheet", data.time_sheet, "status") == "Payrolled":
-					frappe.throw(
-						_("Salary Slip of employee {0} already created for time sheet {1}").format(
-							self.employee, data.time_sheet
-						)
-					)
-
-	def get_date_details(self):
-		if not self.end_date:
-			date_details = get_start_end_dates(self.payroll_frequency, self.start_date or self.posting_date)
-			self.start_date = date_details.start_date
-			self.end_date = date_details.end_date
-
-	@frappe.whitelist()
-	def get_emp_and_working_day_details(self):
-		"""First time, load all the components from salary structure"""
-		if self.employee:
-			self.set("earnings", [])
-			self.set("deductions", [])
-
-			if not self.salary_slip_based_on_timesheet:
-				self.get_date_details()
-
-			joining_date, relieving_date = frappe.get_cached_value(
-				"Employee", self.employee, ("date_of_joining", "relieving_date")
-			)
-
-			self.validate_dates(joining_date, relieving_date)
-
-			# getin leave details
-			self.get_working_days_details(joining_date, relieving_date)
-			struct = self.check_sal_struct(joining_date, relieving_date)
-
-			if struct:
-				self._salary_structure_doc = frappe.get_doc("Salary Structure", struct)
-				self.salary_slip_based_on_timesheet = (
-					self._salary_structure_doc.salary_slip_based_on_timesheet or 0
-				)
-				self.set_time_sheet()
-				self.pull_sal_struct()
-				ps = frappe.db.get_value(
-					"Payroll Settings", None, ["payroll_based_on", "consider_unmarked_attendance_as"], as_dict=1
-				)
-				return [ps.payroll_based_on, ps.consider_unmarked_attendance_as]
-
-	def set_time_sheet(self):
-		if self.salary_slip_based_on_timesheet:
-			self.set("timesheets", [])
-			timesheets = frappe.db.sql(
-				""" select * from `tabTimesheet` where employee = %(employee)s and start_date BETWEEN %(start_date)s AND %(end_date)s and (status = 'Submitted' or
-				status = 'Billed')""",
-				{"employee": self.employee, "start_date": self.start_date, "end_date": self.end_date},
-				as_dict=1,
-			)
-
-			for data in timesheets:
-				self.append("timesheets", {"time_sheet": data.name, "working_hours": data.total_hours})
-
-	def check_sal_struct(self, joining_date, relieving_date):
-		cond = """and sa.employee=%(employee)s and (sa.from_date <= %(start_date)s or
-				sa.from_date <= %(end_date)s or sa.from_date <= %(joining_date)s)"""
-		if self.payroll_frequency:
-			cond += """and ss.payroll_frequency = '%(payroll_frequency)s'""" % {
-				"payroll_frequency": self.payroll_frequency
-			}
-
-		st_name = frappe.db.sql(
-			"""
-			select sa.salary_structure
-			from `tabSalary Structure Assignment` sa join `tabSalary Structure` ss
-			where sa.salary_structure=ss.name
-				and sa.docstatus = 1 and ss.docstatus = 1 and ss.is_active ='Yes' %s
-			order by sa.from_date desc
-			limit 1
-		"""
-			% cond,
-			{
-				"employee": self.employee,
-				"start_date": self.start_date,
-				"end_date": self.end_date,
-				"joining_date": joining_date,
-			},
-		)
-
-		if st_name:
-			self.salary_structure = st_name[0][0]
-			return self.salary_structure
-
-		else:
-			self.salary_structure = None
-			frappe.msgprint(
-				_("No active or default Salary Structure found for employee {0} for the given dates").format(
-					self.employee
-				),
-				title=_("Salary Structure Missing"),
-			)
-
-	def pull_sal_struct(self):
-		from erpnext.payroll.doctype.salary_structure.salary_structure import make_salary_slip
-
-		if self.salary_slip_based_on_timesheet:
-			self.salary_structure = self._salary_structure_doc.name
-			self.hour_rate = self._salary_structure_doc.hour_rate
-			self.base_hour_rate = flt(self.hour_rate) * flt(self.exchange_rate)
-			self.total_working_hours = sum([d.working_hours or 0.0 for d in self.timesheets]) or 0.0
-			wages_amount = self.hour_rate * self.total_working_hours
-
-			self.add_earning_for_hourly_wages(
-				self, self._salary_structure_doc.salary_component, wages_amount
-			)
-
-		make_salary_slip(self._salary_structure_doc.name, self)
-
-	def get_working_days_details(
-		self, joining_date=None, relieving_date=None, lwp=None, for_preview=0
-	):
-		payroll_based_on = frappe.db.get_value("Payroll Settings", None, "payroll_based_on")
-		include_holidays_in_total_working_days = frappe.db.get_single_value(
-			"Payroll Settings", "include_holidays_in_total_working_days"
-		)
-
-		working_days = date_diff(self.end_date, self.start_date) + 1
-		if for_preview:
-			self.total_working_days = working_days
-			self.payment_days = working_days
-			return
-
-		holidays = self.get_holidays_for_employee(self.start_date, self.end_date)
-
-		if not cint(include_holidays_in_total_working_days):
-			working_days -= len(holidays)
-			if working_days < 0:
-				frappe.throw(_("There are more holidays than working days this month."))
-
-		if not payroll_based_on:
-			frappe.throw(_("Please set Payroll based on in Payroll settings"))
-
-		if payroll_based_on == "Attendance":
-			actual_lwp, absent = self.calculate_lwp_ppl_and_absent_days_based_on_attendance(holidays)
-			self.absent_days = absent
-		else:
-			actual_lwp = self.calculate_lwp_or_ppl_based_on_leave_application(holidays, working_days)
-
-		if not lwp:
-			lwp = actual_lwp
-		elif lwp != actual_lwp:
-			frappe.msgprint(
-				_("Leave Without Pay does not match with approved {} records").format(payroll_based_on)
-			)
-
-		self.leave_without_pay = lwp
-		self.total_working_days = working_days
-
-		payment_days = self.get_payment_days(
-			joining_date, relieving_date, include_holidays_in_total_working_days
-		)
-
-		if flt(payment_days) > flt(lwp):
-			self.payment_days = flt(payment_days) - flt(lwp)
-
-			if payroll_based_on == "Attendance":
-				self.payment_days -= flt(absent)
-
-			consider_unmarked_attendance_as = (
-				frappe.db.get_value("Payroll Settings", None, "consider_unmarked_attendance_as") or "Present"
-			)
-
-			if payroll_based_on == "Attendance" and consider_unmarked_attendance_as == "Absent":
-				unmarked_days = self.get_unmarked_days(include_holidays_in_total_working_days)
-				self.absent_days += unmarked_days  # will be treated as absent
-				self.payment_days -= unmarked_days
-		else:
-			self.payment_days = 0
-
-	def get_unmarked_days(self, include_holidays_in_total_working_days):
-		unmarked_days = self.total_working_days
-		joining_date, relieving_date = frappe.get_cached_value(
-			"Employee", self.employee, ["date_of_joining", "relieving_date"]
-		)
-		start_date = self.start_date
-		end_date = self.end_date
-
-		if joining_date and (getdate(self.start_date) < joining_date <= getdate(self.end_date)):
-			start_date = joining_date
-			unmarked_days = self.get_unmarked_days_based_on_doj_or_relieving(
-				unmarked_days,
-				include_holidays_in_total_working_days,
-				self.start_date,
-				add_days(joining_date, -1),
-			)
-
-		if relieving_date and (getdate(self.start_date) <= relieving_date < getdate(self.end_date)):
-			end_date = relieving_date
-			unmarked_days = self.get_unmarked_days_based_on_doj_or_relieving(
-				unmarked_days,
-				include_holidays_in_total_working_days,
-				add_days(relieving_date, 1),
-				self.end_date,
-			)
-
-		# exclude days for which attendance has been marked
-		unmarked_days -= frappe.get_all(
-			"Attendance",
-			filters={
-				"attendance_date": ["between", [start_date, end_date]],
-				"employee": self.employee,
-				"docstatus": 1,
-			},
-			fields=["COUNT(*) as marked_days"],
-		)[0].marked_days
-
-		return unmarked_days
-
-	def get_unmarked_days_based_on_doj_or_relieving(
-		self, unmarked_days, include_holidays_in_total_working_days, start_date, end_date
-	):
-		"""
-		Exclude days before DOJ or after
-		Relieving Date from unmarked days
-		"""
-		from erpnext.hr.doctype.employee.employee import is_holiday
-
-		if include_holidays_in_total_working_days:
-			unmarked_days -= date_diff(end_date, start_date) + 1
-		else:
-			# exclude only if not holidays
-			for days in range(date_diff(end_date, start_date) + 1):
-				date = add_days(end_date, -days)
-				if not is_holiday(self.employee, date):
-					unmarked_days -= 1
-
-		return unmarked_days
-
-	def get_payment_days(self, joining_date, relieving_date, include_holidays_in_total_working_days):
-		if not joining_date:
-			joining_date, relieving_date = frappe.get_cached_value(
-				"Employee", self.employee, ["date_of_joining", "relieving_date"]
-			)
-
-		start_date = getdate(self.start_date)
-		if joining_date:
-			if getdate(self.start_date) <= joining_date <= getdate(self.end_date):
-				start_date = joining_date
-			elif joining_date > getdate(self.end_date):
-				return
-
-		end_date = getdate(self.end_date)
-		if relieving_date:
-			if getdate(self.start_date) <= relieving_date <= getdate(self.end_date):
-				end_date = relieving_date
-			elif relieving_date < getdate(self.start_date):
-				frappe.throw(_("Employee relieved on {0} must be set as 'Left'").format(relieving_date))
-
-		payment_days = date_diff(end_date, start_date) + 1
-
-		if not cint(include_holidays_in_total_working_days):
-			holidays = self.get_holidays_for_employee(start_date, end_date)
-			payment_days -= len(holidays)
-
-		return payment_days
-
-	def get_holidays_for_employee(self, start_date, end_date):
-		return get_holiday_dates_for_employee(self.employee, start_date, end_date)
-
-	def calculate_lwp_or_ppl_based_on_leave_application(self, holidays, working_days):
-		lwp = 0
-		holidays = "','".join(holidays)
-		daily_wages_fraction_for_half_day = (
-			flt(frappe.db.get_value("Payroll Settings", None, "daily_wages_fraction_for_half_day")) or 0.5
-		)
-
-		for d in range(working_days):
-			date = add_days(cstr(getdate(self.start_date)), d)
-			leave = get_lwp_or_ppl_for_date(date, self.employee, holidays)
-
-			if leave:
-				equivalent_lwp_count = 0
-				is_half_day_leave = cint(leave[0].is_half_day)
-				is_partially_paid_leave = cint(leave[0].is_ppl)
-				fraction_of_daily_salary_per_leave = flt(leave[0].fraction_of_daily_salary_per_leave)
-
-				equivalent_lwp_count = (1 - daily_wages_fraction_for_half_day) if is_half_day_leave else 1
-
-				if is_partially_paid_leave:
-					equivalent_lwp_count *= (
-						fraction_of_daily_salary_per_leave if fraction_of_daily_salary_per_leave else 1
-					)
-
-				lwp += equivalent_lwp_count
-
-		return lwp
-
-	def calculate_lwp_ppl_and_absent_days_based_on_attendance(self, holidays):
-		lwp = 0
-		absent = 0
-
-		daily_wages_fraction_for_half_day = (
-			flt(frappe.db.get_value("Payroll Settings", None, "daily_wages_fraction_for_half_day")) or 0.5
-		)
-
-		leave_types = frappe.get_all(
-			"Leave Type",
-			or_filters=[["is_ppl", "=", 1], ["is_lwp", "=", 1]],
-			fields=["name", "is_lwp", "is_ppl", "fraction_of_daily_salary_per_leave", "include_holiday"],
-		)
-
-		leave_type_map = {}
-		for leave_type in leave_types:
-			leave_type_map[leave_type.name] = leave_type
-
-		attendances = frappe.db.sql(
-			"""
-			SELECT attendance_date, status, leave_type
-			FROM `tabAttendance`
-			WHERE
-				status in ("Absent", "Half Day", "On leave")
-				AND employee = %s
-				AND docstatus = 1
-				AND attendance_date between %s and %s
-		""",
-			values=(self.employee, self.start_date, self.end_date),
-			as_dict=1,
-		)
-
-		for d in attendances:
-			if (
-				d.status in ("Half Day", "On Leave")
-				and d.leave_type
-				and d.leave_type not in leave_type_map.keys()
-			):
-				continue
-
-			if formatdate(d.attendance_date, "yyyy-mm-dd") in holidays:
-				if d.status == "Absent" or (
-					d.leave_type
-					and d.leave_type in leave_type_map.keys()
-					and not leave_type_map[d.leave_type]["include_holiday"]
-				):
-					continue
-
-			if d.leave_type:
-				fraction_of_daily_salary_per_leave = leave_type_map[d.leave_type][
-					"fraction_of_daily_salary_per_leave"
-				]
-
-			if d.status == "Half Day":
-				equivalent_lwp = 1 - daily_wages_fraction_for_half_day
-
-				if d.leave_type in leave_type_map.keys() and leave_type_map[d.leave_type]["is_ppl"]:
-					equivalent_lwp *= (
-						fraction_of_daily_salary_per_leave if fraction_of_daily_salary_per_leave else 1
-					)
-				lwp += equivalent_lwp
-			elif d.status == "On Leave" and d.leave_type and d.leave_type in leave_type_map.keys():
-				equivalent_lwp = 1
-				if leave_type_map[d.leave_type]["is_ppl"]:
-					equivalent_lwp *= (
-						fraction_of_daily_salary_per_leave if fraction_of_daily_salary_per_leave else 1
-					)
-				lwp += equivalent_lwp
-			elif d.status == "Absent":
-				absent += 1
-		return lwp, absent
-
-	def add_earning_for_hourly_wages(self, doc, salary_component, amount):
-		row_exists = False
-		for row in doc.earnings:
-			if row.salary_component == salary_component:
-				row.amount = amount
-				row_exists = True
-				break
-
-		if not row_exists:
-			wages_row = {
-				"salary_component": salary_component,
-				"abbr": frappe.db.get_value("Salary Component", salary_component, "salary_component_abbr"),
-				"amount": self.hour_rate * self.total_working_hours,
-				"default_amount": 0.0,
-				"additional_amount": 0.0,
-			}
-			doc.append("earnings", wages_row)
-
-	def calculate_net_pay(self):
-		if self.salary_structure:
-			self.calculate_component_amounts("earnings")
-		self.gross_pay = self.get_component_totals("earnings", depends_on_payment_days=1)
-		self.base_gross_pay = flt(
-			flt(self.gross_pay) * flt(self.exchange_rate), self.precision("base_gross_pay")
-		)
-
-		if self.salary_structure:
-			self.calculate_component_amounts("deductions")
-
-		self.set_loan_repayment()
-		self.set_precision_for_component_amounts()
-		self.set_net_pay()
-
-	def set_net_pay(self):
-		self.total_deduction = self.get_component_totals("deductions")
-		self.base_total_deduction = flt(
-			flt(self.total_deduction) * flt(self.exchange_rate), self.precision("base_total_deduction")
-		)
-		self.net_pay = flt(self.gross_pay) - (flt(self.total_deduction) + flt(self.total_loan_repayment))
-		self.rounded_total = rounded(self.net_pay)
-		self.base_net_pay = flt(
-			flt(self.net_pay) * flt(self.exchange_rate), self.precision("base_net_pay")
-		)
-		self.base_rounded_total = flt(rounded(self.base_net_pay), self.precision("base_net_pay"))
-		if self.hour_rate:
-			self.base_hour_rate = flt(
-				flt(self.hour_rate) * flt(self.exchange_rate), self.precision("base_hour_rate")
-			)
-		self.set_net_total_in_words()
-
-	def calculate_component_amounts(self, component_type):
-		if not getattr(self, "_salary_structure_doc", None):
-			self._salary_structure_doc = frappe.get_doc("Salary Structure", self.salary_structure)
-
-		payroll_period = get_payroll_period(self.start_date, self.end_date, self.company)
-
-		self.add_structure_components(component_type)
-		self.add_additional_salary_components(component_type)
-		if component_type == "earnings":
-			self.add_employee_benefits(payroll_period)
-		else:
-			self.add_tax_components(payroll_period)
-
-	def add_structure_components(self, component_type):
-		data = self.get_data_for_eval()
-		for struct_row in self._salary_structure_doc.get(component_type):
-			amount = self.eval_condition_and_formula(struct_row, data)
-			if amount and struct_row.statistical_component == 0:
-				self.update_component_row(struct_row, amount, component_type)
-
-	def get_data_for_eval(self):
-		"""Returns data for evaluating formula"""
-		data = frappe._dict()
-		employee = frappe.get_doc("Employee", self.employee).as_dict()
-
-		start_date = getdate(self.start_date)
-		date_to_validate = (
-			employee.date_of_joining if employee.date_of_joining > start_date else start_date
-		)
-
-		salary_structure_assignment = frappe.get_value(
-			"Salary Structure Assignment",
-			{
-				"employee": self.employee,
-				"salary_structure": self.salary_structure,
-				"from_date": ("<=", date_to_validate),
-				"docstatus": 1,
-			},
-			"*",
-			order_by="from_date desc",
-			as_dict=True,
-		)
-
-		if not salary_structure_assignment:
-			frappe.throw(
-				_(
-					"Please assign a Salary Structure for Employee {0} " "applicable from or before {1} first"
-				).format(
-					frappe.bold(self.employee_name),
-					frappe.bold(formatdate(date_to_validate)),
-				)
-			)
-
-		data.update(salary_structure_assignment)
-		data.update(employee)
-		data.update(self.as_dict())
-
-		# set values for components
-		salary_components = frappe.get_all("Salary Component", fields=["salary_component_abbr"])
-		for sc in salary_components:
-			data.setdefault(sc.salary_component_abbr, 0)
-
-		for key in ("earnings", "deductions"):
-			for d in self.get(key):
-				data[d.abbr] = d.amount
-
-		return data
-
-	def eval_condition_and_formula(self, d, data):
-		try:
-			condition = d.condition.strip().replace("\n", " ") if d.condition else None
-			if condition:
-				if not frappe.safe_eval(condition, self.whitelisted_globals, data):
-					return None
-			amount = d.amount
-			if d.amount_based_on_formula:
-				formula = d.formula.strip().replace("\n", " ") if d.formula else None
-				if formula:
-					amount = flt(frappe.safe_eval(formula, self.whitelisted_globals, data), d.precision("amount"))
-			if amount:
-				data[d.abbr] = amount
-
-			return amount
-
-		except NameError as err:
-			frappe.throw(
-				_("{0} <br> This error can be due to missing or deleted field.").format(err),
-				title=_("Name error"),
-			)
-		except SyntaxError as err:
-			frappe.throw(_("Syntax error in formula or condition: {0}").format(err))
-		except Exception as e:
-			frappe.throw(_("Error in formula or condition: {0}").format(e))
-			raise
-
-	def add_employee_benefits(self, payroll_period):
-		for struct_row in self._salary_structure_doc.get("earnings"):
-			if struct_row.is_flexible_benefit == 1:
-				if (
-					frappe.db.get_value(
-						"Salary Component", struct_row.salary_component, "pay_against_benefit_claim"
-					)
-					!= 1
-				):
-					benefit_component_amount = get_benefit_component_amount(
-						self.employee,
-						self.start_date,
-						self.end_date,
-						struct_row.salary_component,
-						self._salary_structure_doc,
-						self.payroll_frequency,
-						payroll_period,
-					)
-					if benefit_component_amount:
-						self.update_component_row(struct_row, benefit_component_amount, "earnings")
-				else:
-					benefit_claim_amount = get_benefit_claim_amount(
-						self.employee, self.start_date, self.end_date, struct_row.salary_component
-					)
-					if benefit_claim_amount:
-						self.update_component_row(struct_row, benefit_claim_amount, "earnings")
-
-		self.adjust_benefits_in_last_payroll_period(payroll_period)
-
-	def adjust_benefits_in_last_payroll_period(self, payroll_period):
-		if payroll_period:
-			if getdate(payroll_period.end_date) <= getdate(self.end_date):
-				last_benefits = get_last_payroll_period_benefits(
-					self.employee, self.start_date, self.end_date, payroll_period, self._salary_structure_doc
-				)
-				if last_benefits:
-					for last_benefit in last_benefits:
-						last_benefit = frappe._dict(last_benefit)
-						amount = last_benefit.amount
-						self.update_component_row(frappe._dict(last_benefit.struct_row), amount, "earnings")
-
-	def add_additional_salary_components(self, component_type):
-		additional_salaries = get_additional_salaries(
-			self.employee, self.start_date, self.end_date, component_type
-		)
-
-		for additional_salary in additional_salaries:
-			self.update_component_row(
-				get_salary_component_data(additional_salary.component),
-				additional_salary.amount,
-				component_type,
-				additional_salary,
-				is_recurring=additional_salary.is_recurring,
-			)
-
-	def add_tax_components(self, payroll_period):
-		# Calculate variable_based_on_taxable_salary after all components updated in salary slip
-		tax_components, other_deduction_components = [], []
-		for d in self._salary_structure_doc.get("deductions"):
-			if d.variable_based_on_taxable_salary == 1 and not d.formula and not flt(d.amount):
-				tax_components.append(d.salary_component)
-			else:
-				other_deduction_components.append(d.salary_component)
-
-		if not tax_components:
-			tax_components = [
-				d.name
-				for d in frappe.get_all("Salary Component", filters={"variable_based_on_taxable_salary": 1})
-				if d.name not in other_deduction_components
-			]
-
-		for d in tax_components:
-			tax_amount = self.calculate_variable_based_on_taxable_salary(d, payroll_period)
-			tax_row = get_salary_component_data(d)
-			self.update_component_row(tax_row, tax_amount, "deductions")
-
-	def update_component_row(
-		self, component_data, amount, component_type, additional_salary=None, is_recurring=0
-	):
-		component_row = None
-		for d in self.get(component_type):
-			if d.salary_component != component_data.salary_component:
-				continue
-
-			if (not d.additional_salary and (not additional_salary or additional_salary.overwrite)) or (
-				additional_salary and additional_salary.name == d.additional_salary
-			):
-				component_row = d
-				break
-
-		if additional_salary and additional_salary.overwrite:
-			# Additional Salary with overwrite checked, remove default rows of same component
-			self.set(
-				component_type,
-				[
-					d
-					for d in self.get(component_type)
-					if d.salary_component != component_data.salary_component
-					or (d.additional_salary and additional_salary.name != d.additional_salary)
-					or d == component_row
-				],
-			)
-
-		if not component_row:
-			if not amount:
-				return
-
-			component_row = self.append(component_type)
-			for attr in (
-				"depends_on_payment_days",
-				"salary_component",
-				"abbr",
-				"do_not_include_in_total",
-				"is_tax_applicable",
-				"is_flexible_benefit",
-				"variable_based_on_taxable_salary",
-				"exempted_from_income_tax",
-			):
-				component_row.set(attr, component_data.get(attr))
-
-		if additional_salary:
-			if additional_salary.overwrite:
-				component_row.additional_amount = flt(
-					flt(amount) - flt(component_row.get("default_amount", 0)),
-					component_row.precision("additional_amount"),
-				)
-			else:
-				component_row.default_amount = 0
-				component_row.additional_amount = amount
-
-			component_row.is_recurring_additional_salary = is_recurring
-			component_row.additional_salary = additional_salary.name
-			component_row.deduct_full_tax_on_selected_payroll_date = (
-				additional_salary.deduct_full_tax_on_selected_payroll_date
-			)
-		else:
-			component_row.default_amount = amount
-			component_row.additional_amount = 0
-			component_row.deduct_full_tax_on_selected_payroll_date = (
-				component_data.deduct_full_tax_on_selected_payroll_date
-			)
-
-		component_row.amount = amount
-
-		self.update_component_amount_based_on_payment_days(component_row)
-
-	def update_component_amount_based_on_payment_days(self, component_row):
-		joining_date, relieving_date = self.get_joining_and_relieving_dates()
-		component_row.amount = self.get_amount_based_on_payment_days(
-			component_row, joining_date, relieving_date
-		)[0]
-
-	def set_precision_for_component_amounts(self):
-		for component_type in ("earnings", "deductions"):
-			for component_row in self.get(component_type):
-				component_row.amount = flt(component_row.amount, component_row.precision("amount"))
-
-	def calculate_variable_based_on_taxable_salary(self, tax_component, payroll_period):
-		if not payroll_period:
-			frappe.msgprint(
-				_("Start and end dates not in a valid Payroll Period, cannot calculate {0}.").format(
-					tax_component
-				)
-			)
-			return
-
-		# Deduct taxes forcefully for unsubmitted tax exemption proof and unclaimed benefits in the last period
-		if payroll_period.end_date <= getdate(self.end_date):
-			self.deduct_tax_for_unsubmitted_tax_exemption_proof = 1
-			self.deduct_tax_for_unclaimed_employee_benefits = 1
-
-		return self.calculate_variable_tax(payroll_period, tax_component)
-
-	def calculate_variable_tax(self, payroll_period, tax_component):
-		# get Tax slab from salary structure assignment for the employee and payroll period
-		tax_slab = self.get_income_tax_slabs(payroll_period)
-
-		# get remaining numbers of sub-period (period for which one salary is processed)
-		remaining_sub_periods = get_period_factor(
-			self.employee, self.start_date, self.end_date, self.payroll_frequency, payroll_period
-		)[1]
-		# get taxable_earnings, paid_taxes for previous period
-		previous_taxable_earnings = self.get_taxable_earnings_for_prev_period(
-			payroll_period.start_date, self.start_date, tax_slab.allow_tax_exemption
-		)
-		previous_total_paid_taxes = self.get_tax_paid_in_period(
-			payroll_period.start_date, self.start_date, tax_component
-		)
-
-		# get taxable_earnings for current period (all days)
-		current_taxable_earnings = self.get_taxable_earnings(
-			tax_slab.allow_tax_exemption, payroll_period=payroll_period
-		)
-		future_structured_taxable_earnings = current_taxable_earnings.taxable_earnings * (
-			math.ceil(remaining_sub_periods) - 1
-		)
-
-		# get taxable_earnings, addition_earnings for current actual payment days
-		current_taxable_earnings_for_payment_days = self.get_taxable_earnings(
-			tax_slab.allow_tax_exemption, based_on_payment_days=1, payroll_period=payroll_period
-		)
-		current_structured_taxable_earnings = current_taxable_earnings_for_payment_days.taxable_earnings
-		current_additional_earnings = current_taxable_earnings_for_payment_days.additional_income
-		current_additional_earnings_with_full_tax = (
-			current_taxable_earnings_for_payment_days.additional_income_with_full_tax
-		)
-
-		# Get taxable unclaimed benefits
-		unclaimed_taxable_benefits = 0
-		if self.deduct_tax_for_unclaimed_employee_benefits:
-			unclaimed_taxable_benefits = self.calculate_unclaimed_taxable_benefits(payroll_period)
-			unclaimed_taxable_benefits += current_taxable_earnings_for_payment_days.flexi_benefits
-
-		# Total exemption amount based on tax exemption declaration
-		total_exemption_amount = self.get_total_exemption_amount(payroll_period, tax_slab)
-
-		# Employee Other Incomes
-		other_incomes = self.get_income_form_other_sources(payroll_period) or 0.0
-
-		# Total taxable earnings including additional and other incomes
-		total_taxable_earnings = (
-			previous_taxable_earnings
-			+ current_structured_taxable_earnings
-			+ future_structured_taxable_earnings
-			+ current_additional_earnings
-			+ other_incomes
-			+ unclaimed_taxable_benefits
-			- total_exemption_amount
-		)
-
-		# Total taxable earnings without additional earnings with full tax
-		total_taxable_earnings_without_full_tax_addl_components = (
-			total_taxable_earnings - current_additional_earnings_with_full_tax
-		)
-
-		# Structured tax amount
-		eval_locals = self.get_data_for_eval()
-		total_structured_tax_amount = calculate_tax_by_tax_slab(
-			total_taxable_earnings_without_full_tax_addl_components,
-			tax_slab,
-			self.whitelisted_globals,
-			eval_locals,
-		)
-		current_structured_tax_amount = (
-			total_structured_tax_amount - previous_total_paid_taxes
-		) / remaining_sub_periods
-
-		# Total taxable earnings with additional earnings with full tax
-		full_tax_on_additional_earnings = 0.0
-		if current_additional_earnings_with_full_tax:
-			total_tax_amount = calculate_tax_by_tax_slab(
-				total_taxable_earnings, tax_slab, self.whitelisted_globals, eval_locals
-			)
-			full_tax_on_additional_earnings = total_tax_amount - total_structured_tax_amount
-
-		current_tax_amount = current_structured_tax_amount + full_tax_on_additional_earnings
-		if flt(current_tax_amount) < 0:
-			current_tax_amount = 0
-
-		return current_tax_amount
-
-	def get_income_tax_slabs(self, payroll_period):
-		income_tax_slab, ss_assignment_name = frappe.db.get_value(
-			"Salary Structure Assignment",
-			{"employee": self.employee, "salary_structure": self.salary_structure, "docstatus": 1},
-			["income_tax_slab", "name"],
-		)
-
-		if not income_tax_slab:
-			frappe.throw(
-				_("Income Tax Slab not set in Salary Structure Assignment: {0}").format(ss_assignment_name)
-			)
-
-		income_tax_slab_doc = frappe.get_doc("Income Tax Slab", income_tax_slab)
-		if income_tax_slab_doc.disabled:
-			frappe.throw(_("Income Tax Slab: {0} is disabled").format(income_tax_slab))
-
-		if getdate(income_tax_slab_doc.effective_from) > getdate(payroll_period.start_date):
-			frappe.throw(
-				_("Income Tax Slab must be effective on or before Payroll Period Start Date: {0}").format(
-					payroll_period.start_date
-				)
-			)
-
-		return income_tax_slab_doc
-
-	def get_taxable_earnings_for_prev_period(self, start_date, end_date, allow_tax_exemption=False):
-		taxable_earnings = frappe.db.sql(
-			"""
-			select sum(sd.amount)
-			from
-				`tabSalary Detail` sd join `tabSalary Slip` ss on sd.parent=ss.name
-			where
-				sd.parentfield='earnings'
-				and sd.is_tax_applicable=1
-				and is_flexible_benefit=0
-				and ss.docstatus=1
-				and ss.employee=%(employee)s
-				and ss.start_date between %(from_date)s and %(to_date)s
-				and ss.end_date between %(from_date)s and %(to_date)s
-			""",
-			{"employee": self.employee, "from_date": start_date, "to_date": end_date},
-		)
-		taxable_earnings = flt(taxable_earnings[0][0]) if taxable_earnings else 0
-
-		exempted_amount = 0
-		if allow_tax_exemption:
-			exempted_amount = frappe.db.sql(
-				"""
-				select sum(sd.amount)
-				from
-					`tabSalary Detail` sd join `tabSalary Slip` ss on sd.parent=ss.name
-				where
-					sd.parentfield='deductions'
-					and sd.exempted_from_income_tax=1
-					and is_flexible_benefit=0
-					and ss.docstatus=1
-					and ss.employee=%(employee)s
-					and ss.start_date between %(from_date)s and %(to_date)s
-					and ss.end_date between %(from_date)s and %(to_date)s
-				""",
-				{"employee": self.employee, "from_date": start_date, "to_date": end_date},
-			)
-			exempted_amount = flt(exempted_amount[0][0]) if exempted_amount else 0
-
-		return taxable_earnings - exempted_amount
-
-	def get_tax_paid_in_period(self, start_date, end_date, tax_component):
-		# find total_tax_paid, tax paid for benefit, additional_salary
-		total_tax_paid = flt(
-			frappe.db.sql(
-				"""
-			select
-				sum(sd.amount)
-			from
-				`tabSalary Detail` sd join `tabSalary Slip` ss on sd.parent=ss.name
-			where
-				sd.parentfield='deductions'
-				and sd.salary_component=%(salary_component)s
-				and sd.variable_based_on_taxable_salary=1
-				and ss.docstatus=1
-				and ss.employee=%(employee)s
-				and ss.start_date between %(from_date)s and %(to_date)s
-				and ss.end_date between %(from_date)s and %(to_date)s
-		""",
-				{
-					"salary_component": tax_component,
-					"employee": self.employee,
-					"from_date": start_date,
-					"to_date": end_date,
-				},
-			)[0][0]
-		)
-
-		return total_tax_paid
-
-	def get_taxable_earnings(
-		self, allow_tax_exemption=False, based_on_payment_days=0, payroll_period=None
-	):
-		joining_date, relieving_date = self.get_joining_and_relieving_dates()
-
-		taxable_earnings = 0
-		additional_income = 0
-		additional_income_with_full_tax = 0
-		flexi_benefits = 0
-
-		for earning in self.earnings:
-			if based_on_payment_days:
-				amount, additional_amount = self.get_amount_based_on_payment_days(
-					earning, joining_date, relieving_date
-				)
-			else:
-				if earning.additional_amount:
-					amount, additional_amount = earning.amount, earning.additional_amount
-				else:
-					amount, additional_amount = earning.default_amount, earning.additional_amount
-
-			if earning.is_tax_applicable:
-				if earning.is_flexible_benefit:
-					flexi_benefits += amount
-				else:
-					taxable_earnings += amount - additional_amount
-					additional_income += additional_amount
-
-					# Get additional amount based on future recurring additional salary
-					if additional_amount and earning.is_recurring_additional_salary:
-						additional_income += self.get_future_recurring_additional_amount(
-							earning.additional_salary, earning.additional_amount, payroll_period
-						)  # Used earning.additional_amount to consider the amount for the full month
-
-					if earning.deduct_full_tax_on_selected_payroll_date:
-						additional_income_with_full_tax += additional_amount
-
-		if allow_tax_exemption:
-			for ded in self.deductions:
-				if ded.exempted_from_income_tax:
-					amount, additional_amount = ded.amount, ded.additional_amount
-					if based_on_payment_days:
-						amount, additional_amount = self.get_amount_based_on_payment_days(
-							ded, joining_date, relieving_date
-						)
-
-					taxable_earnings -= flt(amount - additional_amount)
-					additional_income -= additional_amount
-
-					if additional_amount and ded.is_recurring_additional_salary:
-						additional_income -= self.get_future_recurring_additional_amount(
-							ded.additional_salary, ded.additional_amount, payroll_period
-						)  # Used ded.additional_amount to consider the amount for the full month
-
-		return frappe._dict(
-			{
-				"taxable_earnings": taxable_earnings,
-				"additional_income": additional_income,
-				"additional_income_with_full_tax": additional_income_with_full_tax,
-				"flexi_benefits": flexi_benefits,
-			}
-		)
-
-	def get_future_recurring_additional_amount(
-		self, additional_salary, monthly_additional_amount, payroll_period
-	):
-		future_recurring_additional_amount = 0
-		to_date = frappe.db.get_value("Additional Salary", additional_salary, "to_date")
-
-		# future month count excluding current
-		from_date, to_date = getdate(self.start_date), getdate(to_date)
-
-		# If recurring period end date is beyond the payroll period,
-		# last day of payroll period should be considered for recurring period calculation
-		if getdate(to_date) > getdate(payroll_period.end_date):
-			to_date = getdate(payroll_period.end_date)
-
-		future_recurring_period = ((to_date.year - from_date.year) * 12) + (
-			to_date.month - from_date.month
-		)
-
-		if future_recurring_period > 0:
-			future_recurring_additional_amount = (
-				monthly_additional_amount * future_recurring_period
-			)  # Used earning.additional_amount to consider the amount for the full month
-		return future_recurring_additional_amount
-
-	def get_amount_based_on_payment_days(self, row, joining_date, relieving_date):
-		amount, additional_amount = row.amount, row.additional_amount
-		timesheet_component = frappe.db.get_value(
-			"Salary Structure", self.salary_structure, "salary_component"
-		)
-
-		if (
-			self.salary_structure
-			and cint(row.depends_on_payment_days)
-			and cint(self.total_working_days)
-			and not (
-				row.additional_salary and row.default_amount
-			)  # to identify overwritten additional salary
-			and (
-				row.salary_component != timesheet_component
-				or getdate(self.start_date) < joining_date
-				or (relieving_date and getdate(self.end_date) > relieving_date)
-			)
-		):
-			additional_amount = flt(
-				(flt(row.additional_amount) * flt(self.payment_days) / cint(self.total_working_days)),
-				row.precision("additional_amount"),
-			)
-			amount = (
-				flt(
-					(flt(row.default_amount) * flt(self.payment_days) / cint(self.total_working_days)),
-					row.precision("amount"),
-				)
-				+ additional_amount
-			)
-
-		elif (
-			not self.payment_days
-			and row.salary_component != timesheet_component
-			and cint(row.depends_on_payment_days)
-		):
-			amount, additional_amount = 0, 0
-		elif not row.amount:
-			amount = flt(row.default_amount) + flt(row.additional_amount)
-
-		# apply rounding
-		if frappe.get_cached_value(
-			"Salary Component", row.salary_component, "round_to_the_nearest_integer"
-		):
-			amount, additional_amount = rounded(amount or 0), rounded(additional_amount or 0)
-
-		return amount, additional_amount
-
-	def calculate_unclaimed_taxable_benefits(self, payroll_period):
-		# get total sum of benefits paid
-		total_benefits_paid = flt(
-			frappe.db.sql(
-				"""
-			select sum(sd.amount)
-			from `tabSalary Detail` sd join `tabSalary Slip` ss on sd.parent=ss.name
-			where
-				sd.parentfield='earnings'
-				and sd.is_tax_applicable=1
-				and is_flexible_benefit=1
-				and ss.docstatus=1
-				and ss.employee=%(employee)s
-				and ss.start_date between %(start_date)s and %(end_date)s
-				and ss.end_date between %(start_date)s and %(end_date)s
-		""",
-				{
-					"employee": self.employee,
-					"start_date": payroll_period.start_date,
-					"end_date": self.start_date,
-				},
-			)[0][0]
-		)
-
-		# get total benefits claimed
-		total_benefits_claimed = flt(
-			frappe.db.sql(
-				"""
-			select sum(claimed_amount)
-			from `tabEmployee Benefit Claim`
-			where
-				docstatus=1
-				and employee=%s
-				and claim_date between %s and %s
-		""",
-				(self.employee, payroll_period.start_date, self.end_date),
-			)[0][0]
-		)
-
-		return total_benefits_paid - total_benefits_claimed
-
-	def get_total_exemption_amount(self, payroll_period, tax_slab):
-		total_exemption_amount = 0
-		if tax_slab.allow_tax_exemption:
-			if self.deduct_tax_for_unsubmitted_tax_exemption_proof:
-				exemption_proof = frappe.db.get_value(
-					"Employee Tax Exemption Proof Submission",
-					{"employee": self.employee, "payroll_period": payroll_period.name, "docstatus": 1},
-					["exemption_amount"],
-				)
-				if exemption_proof:
-					total_exemption_amount = exemption_proof
-			else:
-				declaration = frappe.db.get_value(
-					"Employee Tax Exemption Declaration",
-					{"employee": self.employee, "payroll_period": payroll_period.name, "docstatus": 1},
-					["total_exemption_amount"],
-				)
-				if declaration:
-					total_exemption_amount = declaration
-
-			total_exemption_amount += flt(tax_slab.standard_tax_exemption_amount)
-
-		return total_exemption_amount
-
-	def get_income_form_other_sources(self, payroll_period):
-		return frappe.get_all(
-			"Employee Other Income",
-			filters={
-				"employee": self.employee,
-				"payroll_period": payroll_period.name,
-				"company": self.company,
-				"docstatus": 1,
-			},
-			fields="SUM(amount) as total_amount",
-		)[0].total_amount
-
-	def get_component_totals(self, component_type, depends_on_payment_days=0):
-		joining_date, relieving_date = frappe.get_cached_value(
-			"Employee", self.employee, ["date_of_joining", "relieving_date"]
-		)
-
-		total = 0.0
-		for d in self.get(component_type):
-			if not d.do_not_include_in_total:
-				if depends_on_payment_days:
-					amount = self.get_amount_based_on_payment_days(d, joining_date, relieving_date)[0]
-				else:
-					amount = flt(d.amount, d.precision("amount"))
-				total += amount
-		return total
-
-	def get_joining_and_relieving_dates(self):
-		joining_date, relieving_date = frappe.get_cached_value(
-			"Employee", self.employee, ["date_of_joining", "relieving_date"]
-		)
-
-		if not relieving_date:
-			relieving_date = getdate(self.end_date)
-
-		if not joining_date:
-			frappe.throw(
-				_("Please set the Date Of Joining for employee {0}").format(frappe.bold(self.employee_name))
-			)
-
-		return joining_date, relieving_date
-
-	def set_loan_repayment(self):
-		self.total_loan_repayment = 0
-		self.total_interest_amount = 0
-		self.total_principal_amount = 0
-
-		if not self.get("loans"):
-			for loan in self.get_loan_details():
-
-				amounts = calculate_amounts(loan.name, self.posting_date, "Regular Payment")
-
-				if amounts["interest_amount"] or amounts["payable_principal_amount"]:
-					self.append(
-						"loans",
-						{
-							"loan": loan.name,
-							"total_payment": amounts["interest_amount"] + amounts["payable_principal_amount"],
-							"interest_amount": amounts["interest_amount"],
-							"principal_amount": amounts["payable_principal_amount"],
-							"loan_account": loan.loan_account,
-							"interest_income_account": loan.interest_income_account,
-						},
-					)
-
-		for payment in self.get("loans"):
-			amounts = calculate_amounts(payment.loan, self.posting_date, "Regular Payment")
-			total_amount = amounts["interest_amount"] + amounts["payable_principal_amount"]
-			if payment.total_payment > total_amount:
-				frappe.throw(
-					_(
-						"""Row {0}: Paid amount {1} is greater than pending accrued amount {2} against loan {3}"""
-					).format(
-						payment.idx,
-						frappe.bold(payment.total_payment),
-						frappe.bold(total_amount),
-						frappe.bold(payment.loan),
-					)
-				)
-
-			self.total_interest_amount += payment.interest_amount
-			self.total_principal_amount += payment.principal_amount
-
-			self.total_loan_repayment += payment.total_payment
-
-	def get_loan_details(self):
-		loan_details = frappe.get_all(
-			"Loan",
-			fields=["name", "interest_income_account", "loan_account", "loan_type", "is_term_loan"],
-			filters={
-				"applicant": self.employee,
-				"docstatus": 1,
-				"repay_from_salary": 1,
-				"company": self.company,
-			},
-		)
-
-		if loan_details:
-			for loan in loan_details:
-				if loan.is_term_loan:
-					process_loan_interest_accrual_for_term_loans(
-						posting_date=self.posting_date, loan_type=loan.loan_type, loan=loan.name
-					)
-
-		return loan_details
-
-	def make_loan_repayment_entry(self):
-		payroll_payable_account = get_payroll_payable_account(self.company, self.payroll_entry)
-		for loan in self.loans:
-			if loan.total_payment:
-				repayment_entry = create_repayment_entry(
-					loan.loan,
-					self.employee,
-					self.company,
-					self.posting_date,
-					loan.loan_type,
-					"Regular Payment",
-					loan.interest_amount,
-					loan.principal_amount,
-					loan.total_payment,
-					payroll_payable_account=payroll_payable_account,
-				)
-
-				repayment_entry.save()
-				repayment_entry.submit()
-
-				frappe.db.set_value(
-					"Salary Slip Loan", loan.name, "loan_repayment_entry", repayment_entry.name
-				)
-
-	def cancel_loan_repayment_entry(self):
-		for loan in self.loans:
-			if loan.loan_repayment_entry:
-				repayment_entry = frappe.get_doc("Loan Repayment", loan.loan_repayment_entry)
-				repayment_entry.cancel()
-
-	def email_salary_slip(self):
-		receiver = frappe.db.get_value("Employee", self.employee, "prefered_email")
-		payroll_settings = frappe.get_single("Payroll Settings")
-		message = "Please see attachment"
-		password = None
-		if payroll_settings.encrypt_salary_slips_in_emails:
-			password = generate_password_for_pdf(payroll_settings.password_policy, self.employee)
-			message += """<br>Note: Your salary slip is password protected,
-				the password to unlock the PDF is of the format {0}. """.format(
-				payroll_settings.password_policy
-			)
-
-		if receiver:
-			email_args = {
-				"recipients": [receiver],
-				"message": _(message),
-				"subject": "Salary Slip - from {0} to {1}".format(self.start_date, self.end_date),
-				"attachments": [
-					frappe.attach_print(self.doctype, self.name, file_name=self.name, password=password)
-				],
-				"reference_doctype": self.doctype,
-				"reference_name": self.name,
-			}
-			if not frappe.flags.in_test:
-				enqueue(method=frappe.sendmail, queue="short", timeout=300, is_async=True, **email_args)
-			else:
-				frappe.sendmail(**email_args)
-		else:
-			msgprint(_("{0}: Employee email not found, hence email not sent").format(self.employee_name))
-
-	def update_status(self, salary_slip=None):
-		for data in self.timesheets:
-			if data.time_sheet:
-				timesheet = frappe.get_doc("Timesheet", data.time_sheet)
-				timesheet.salary_slip = salary_slip
-				timesheet.flags.ignore_validate_update_after_submit = True
-				timesheet.set_status()
-				timesheet.save()
-
-	def set_status(self, status=None):
-		"""Get and update status"""
-		if not status:
-			status = self.get_status()
-		self.db_set("status", status)
-
-	def process_salary_structure(self, for_preview=0):
-		"""Calculate salary after salary structure details have been updated"""
-		if not self.salary_slip_based_on_timesheet:
-			self.get_date_details()
-		self.pull_emp_details()
-		self.get_working_days_details(for_preview=for_preview)
-		self.calculate_net_pay()
-
-	def pull_emp_details(self):
-		emp = frappe.db.get_value(
-			"Employee", self.employee, ["bank_name", "bank_ac_no", "salary_mode"], as_dict=1
-		)
-		if emp:
-			self.mode_of_payment = emp.salary_mode
-			self.bank_name = emp.bank_name
-			self.bank_account_no = emp.bank_ac_no
-
-	@frappe.whitelist()
-	def process_salary_based_on_working_days(self):
-		self.get_working_days_details(lwp=self.leave_without_pay)
-		self.calculate_net_pay()
-
-	@frappe.whitelist()
-	def set_totals(self):
-		self.gross_pay = 0.0
-		if self.salary_slip_based_on_timesheet == 1:
-			self.calculate_total_for_salary_slip_based_on_timesheet()
-		else:
-			self.total_deduction = 0.0
-			if hasattr(self, "earnings"):
-				for earning in self.earnings:
-					self.gross_pay += flt(earning.amount, earning.precision("amount"))
-			if hasattr(self, "deductions"):
-				for deduction in self.deductions:
-					self.total_deduction += flt(deduction.amount, deduction.precision("amount"))
-			self.net_pay = flt(self.gross_pay) - flt(self.total_deduction) - flt(self.total_loan_repayment)
-		self.set_base_totals()
-
-	def set_base_totals(self):
-		self.base_gross_pay = flt(self.gross_pay) * flt(self.exchange_rate)
-		self.base_total_deduction = flt(self.total_deduction) * flt(self.exchange_rate)
-		self.rounded_total = rounded(self.net_pay or 0)
-		self.base_net_pay = flt(self.net_pay) * flt(self.exchange_rate)
-		self.base_rounded_total = rounded(self.base_net_pay or 0)
-		self.set_net_total_in_words()
-
-	# calculate total working hours, earnings based on hourly wages and totals
-	def calculate_total_for_salary_slip_based_on_timesheet(self):
-		if self.timesheets:
-			self.total_working_hours = 0
-			for timesheet in self.timesheets:
-				if timesheet.working_hours:
-					self.total_working_hours += timesheet.working_hours
-
-		wages_amount = self.total_working_hours * self.hour_rate
-		self.base_hour_rate = flt(self.hour_rate) * flt(self.exchange_rate)
-		salary_component = frappe.db.get_value(
-			"Salary Structure", {"name": self.salary_structure}, "salary_component"
-		)
-		if self.earnings:
-			for i, earning in enumerate(self.earnings):
-				if earning.salary_component == salary_component:
-					self.earnings[i].amount = wages_amount
-				self.gross_pay += flt(self.earnings[i].amount, earning.precision("amount"))
-		self.net_pay = flt(self.gross_pay) - flt(self.total_deduction)
-
-	def compute_year_to_date(self):
-		year_to_date = 0
-		period_start_date, period_end_date = self.get_year_to_date_period()
-
-		salary_slip_sum = frappe.get_list(
-			"Salary Slip",
-			fields=["sum(net_pay) as net_sum", "sum(gross_pay) as gross_sum"],
-			filters={
-				"employee": self.employee,
-				"start_date": [">=", period_start_date],
-				"end_date": ["<", period_end_date],
-				"name": ["!=", self.name],
-				"docstatus": 1,
-			},
-		)
-
-		year_to_date = flt(salary_slip_sum[0].net_sum) if salary_slip_sum else 0.0
-		gross_year_to_date = flt(salary_slip_sum[0].gross_sum) if salary_slip_sum else 0.0
-
-		year_to_date += self.net_pay
-		gross_year_to_date += self.gross_pay
-		self.year_to_date = year_to_date
-		self.gross_year_to_date = gross_year_to_date
-
-	def compute_month_to_date(self):
-		month_to_date = 0
-		first_day_of_the_month = get_first_day(self.start_date)
-		salary_slip_sum = frappe.get_list(
-			"Salary Slip",
-			fields=["sum(net_pay) as sum"],
-			filters={
-				"employee": self.employee,
-				"start_date": [">=", first_day_of_the_month],
-				"end_date": ["<", self.start_date],
-				"name": ["!=", self.name],
-				"docstatus": 1,
-			},
-		)
-
-		month_to_date = flt(salary_slip_sum[0].sum) if salary_slip_sum else 0.0
-
-		month_to_date += self.net_pay
-		self.month_to_date = month_to_date
-
-	def compute_component_wise_year_to_date(self):
-		period_start_date, period_end_date = self.get_year_to_date_period()
-
-		for key in ("earnings", "deductions"):
-			for component in self.get(key):
-				year_to_date = 0
-				component_sum = frappe.db.sql(
-					"""
-					SELECT sum(detail.amount) as sum
-					FROM `tabSalary Detail` as detail
-					INNER JOIN `tabSalary Slip` as salary_slip
-					ON detail.parent = salary_slip.name
-					WHERE
-						salary_slip.employee = %(employee)s
-						AND detail.salary_component = %(component)s
-						AND salary_slip.start_date >= %(period_start_date)s
-						AND salary_slip.end_date < %(period_end_date)s
-						AND salary_slip.name != %(docname)s
-						AND salary_slip.docstatus = 1""",
-					{
-						"employee": self.employee,
-						"component": component.salary_component,
-						"period_start_date": period_start_date,
-						"period_end_date": period_end_date,
-						"docname": self.name,
-					},
-				)
-
-				year_to_date = flt(component_sum[0][0]) if component_sum else 0.0
-				year_to_date += component.amount
-				component.year_to_date = year_to_date
-
-	def get_year_to_date_period(self):
-		payroll_period = get_payroll_period(self.start_date, self.end_date, self.company)
-
-		if payroll_period:
-			period_start_date = payroll_period.start_date
-			period_end_date = payroll_period.end_date
-		else:
-			# get dates based on fiscal year if no payroll period exists
-			fiscal_year = get_fiscal_year(date=self.start_date, company=self.company, as_dict=1)
-			period_start_date = fiscal_year.year_start_date
-			period_end_date = fiscal_year.year_end_date
-
-		return period_start_date, period_end_date
-
-	def add_leave_balances(self):
-		self.set("leave_details", [])
-
-		if frappe.db.get_single_value("Payroll Settings", "show_leave_balances_in_salary_slip"):
-			from erpnext.hr.doctype.leave_application.leave_application import get_leave_details
-
-			leave_details = get_leave_details(self.employee, self.end_date)
-
-			for leave_type, leave_values in leave_details["leave_allocation"].items():
-				self.append(
-					"leave_details",
-					{
-						"leave_type": leave_type,
-						"total_allocated_leaves": flt(leave_values.get("total_leaves")),
-						"expired_leaves": flt(leave_values.get("expired_leaves")),
-						"used_leaves": flt(leave_values.get("leaves_taken")),
-						"pending_leaves": flt(leave_values.get("leaves_pending_approval")),
-						"available_leaves": flt(leave_values.get("remaining_leaves")),
-					},
-				)
-
-
-def unlink_ref_doc_from_salary_slip(ref_no):
-	linked_ss = frappe.db.sql_list(
-		"""select name from `tabSalary Slip`
-	where journal_entry=%s and docstatus < 2""",
-		(ref_no),
-	)
-	if linked_ss:
-		for ss in linked_ss:
-			ss_doc = frappe.get_doc("Salary Slip", ss)
-			frappe.db.set_value("Salary Slip", ss_doc.name, "journal_entry", "")
-
-
-def generate_password_for_pdf(policy_template, employee):
-	employee = frappe.get_doc("Employee", employee)
-	return policy_template.format(**employee.as_dict())
-
-
-def get_salary_component_data(component):
-	return frappe.get_value(
-		"Salary Component",
-		component,
-		[
-			"name as salary_component",
-			"depends_on_payment_days",
-			"salary_component_abbr as abbr",
-			"do_not_include_in_total",
-			"is_tax_applicable",
-			"is_flexible_benefit",
-			"variable_based_on_taxable_salary",
-		],
-		as_dict=1,
-	)
-
-
-def get_payroll_payable_account(company, payroll_entry):
-	if payroll_entry:
-		payroll_payable_account = frappe.db.get_value(
-			"Payroll Entry", payroll_entry, "payroll_payable_account"
-		)
-	else:
-		payroll_payable_account = frappe.db.get_value(
-			"Company", company, "default_payroll_payable_account"
-		)
-
-	return payroll_payable_account
-
-
-def calculate_tax_by_tax_slab(
-	annual_taxable_earning, tax_slab, eval_globals=None, eval_locals=None
-):
-	eval_locals.update({"annual_taxable_earning": annual_taxable_earning})
-	tax_amount = 0
-	for slab in tax_slab.slabs:
-		cond = cstr(slab.condition).strip()
-		if cond and not eval_tax_slab_condition(cond, eval_globals, eval_locals):
-			continue
-		if not slab.to_amount and annual_taxable_earning >= slab.from_amount:
-			tax_amount += (annual_taxable_earning - slab.from_amount + 1) * slab.percent_deduction * 0.01
-			continue
-		if annual_taxable_earning >= slab.from_amount and annual_taxable_earning < slab.to_amount:
-			tax_amount += (annual_taxable_earning - slab.from_amount + 1) * slab.percent_deduction * 0.01
-		elif annual_taxable_earning >= slab.from_amount and annual_taxable_earning >= slab.to_amount:
-			tax_amount += (slab.to_amount - slab.from_amount + 1) * slab.percent_deduction * 0.01
-
-	# other taxes and charges on income tax
-	for d in tax_slab.other_taxes_and_charges:
-		if flt(d.min_taxable_income) and flt(d.min_taxable_income) > annual_taxable_earning:
-			continue
-
-		if flt(d.max_taxable_income) and flt(d.max_taxable_income) < annual_taxable_earning:
-			continue
-
-		tax_amount += tax_amount * flt(d.percent) / 100
-
-	return tax_amount
-
-
-def eval_tax_slab_condition(condition, eval_globals=None, eval_locals=None):
-	if not eval_globals:
-		eval_globals = {
-			"int": int,
-			"float": float,
-			"long": int,
-			"round": round,
-			"date": datetime.date,
-			"getdate": getdate,
-		}
-
-	try:
-		condition = condition.strip()
-		if condition:
-			return frappe.safe_eval(condition, eval_globals, eval_locals)
-	except NameError as err:
-		frappe.throw(
-			_("{0} <br> This error can be due to missing or deleted field.").format(err),
-			title=_("Name error"),
-		)
-	except SyntaxError as err:
-		frappe.throw(_("Syntax error in condition: {0} in Income Tax Slab").format(err))
-	except Exception as e:
-		frappe.throw(_("Error in formula or condition: {0} in Income Tax Slab").format(e))
-		raise
-
-
-def get_lwp_or_ppl_for_date(date, employee, holidays):
-	LeaveApplication = frappe.qb.DocType("Leave Application")
-	LeaveType = frappe.qb.DocType("Leave Type")
-
-	is_half_day = (
-		frappe.qb.terms.Case()
-		.when(
-			(
-				(LeaveApplication.half_day_date == date)
-				| (LeaveApplication.from_date == LeaveApplication.to_date)
-			),
-			LeaveApplication.half_day,
-		)
-		.else_(0)
-	).as_("is_half_day")
-
-	query = (
-		frappe.qb.from_(LeaveApplication)
-		.inner_join(LeaveType)
-		.on((LeaveType.name == LeaveApplication.leave_type))
-		.select(
-			LeaveApplication.name,
-			LeaveType.is_ppl,
-			LeaveType.fraction_of_daily_salary_per_leave,
-			(is_half_day),
-		)
-		.where(
-			(((LeaveType.is_lwp == 1) | (LeaveType.is_ppl == 1)))
-			& (LeaveApplication.docstatus == 1)
-			& (LeaveApplication.status == "Approved")
-			& (LeaveApplication.employee == employee)
-			& ((LeaveApplication.salary_slip.isnull()) | (LeaveApplication.salary_slip == ""))
-			& ((LeaveApplication.from_date <= date) & (date <= LeaveApplication.to_date))
-		)
-	)
-
-	# if it's a holiday only include if leave type has "include holiday" enabled
-	if date in holidays:
-		query = query.where((LeaveType.include_holiday == "1"))
-
-	return query.run(as_dict=True)
diff --git a/erpnext/payroll/doctype/salary_slip/salary_slip_list.js b/erpnext/payroll/doctype/salary_slip/salary_slip_list.js
deleted file mode 100644
index 33d5bd7..0000000
--- a/erpnext/payroll/doctype/salary_slip/salary_slip_list.js
+++ /dev/null
@@ -1,3 +0,0 @@
-frappe.listview_settings['Salary Slip'] = {
-	add_fields: ["employee", "employee_name"],
-};
diff --git a/erpnext/payroll/doctype/salary_slip/test_salary_slip.py b/erpnext/payroll/doctype/salary_slip/test_salary_slip.py
deleted file mode 100644
index a8b6bb5..0000000
--- a/erpnext/payroll/doctype/salary_slip/test_salary_slip.py
+++ /dev/null
@@ -1,1556 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-import calendar
-import random
-import unittest
-
-import frappe
-from frappe.model.document import Document
-from frappe.tests.utils import change_settings
-from frappe.utils import (
-	add_days,
-	add_months,
-	cstr,
-	date_diff,
-	flt,
-	get_first_day,
-	get_last_day,
-	getdate,
-	nowdate,
-)
-from frappe.utils.make_random import get_random
-
-import erpnext
-from erpnext.accounts.utils import get_fiscal_year
-from erpnext.hr.doctype.attendance.attendance import mark_attendance
-from erpnext.hr.doctype.employee.test_employee import make_employee
-from erpnext.hr.doctype.leave_allocation.test_leave_allocation import create_leave_allocation
-from erpnext.hr.doctype.leave_type.test_leave_type import create_leave_type
-from erpnext.payroll.doctype.employee_tax_exemption_declaration.test_employee_tax_exemption_declaration import (
-	create_exemption_category,
-	create_payroll_period,
-)
-from erpnext.payroll.doctype.payroll_entry.payroll_entry import get_month_details
-from erpnext.payroll.doctype.salary_structure.salary_structure import make_salary_slip
-
-
-class TestSalarySlip(unittest.TestCase):
-	def setUp(self):
-		setup_test()
-		frappe.flags.pop("via_payroll_entry", None)
-
-	def tearDown(self):
-		frappe.db.rollback()
-		frappe.db.set_value("Payroll Settings", None, "include_holidays_in_total_working_days", 0)
-		frappe.set_user("Administrator")
-
-	@change_settings(
-		"Payroll Settings", {"payroll_based_on": "Attendance", "daily_wages_fraction_for_half_day": 0.75}
-	)
-	def test_payment_days_based_on_attendance(self):
-		no_of_days = get_no_of_days()
-
-		emp_id = make_employee("test_payment_days_based_on_attendance@salary.com")
-		frappe.db.set_value("Employee", emp_id, {"relieving_date": None, "status": "Active"})
-
-		frappe.db.set_value("Leave Type", "Leave Without Pay", "include_holiday", 0)
-
-		month_start_date = get_first_day(nowdate())
-		month_end_date = get_last_day(nowdate())
-
-		first_sunday = frappe.db.sql(
-			"""
-			select holiday_date from `tabHoliday`
-			where parent = 'Salary Slip Test Holiday List'
-				and holiday_date between %s and %s
-			order by holiday_date
-		""",
-			(month_start_date, month_end_date),
-		)[0][0]
-
-		mark_attendance(emp_id, first_sunday, "Absent", ignore_validate=True)  # invalid lwp
-		mark_attendance(
-			emp_id, add_days(first_sunday, 1), "Absent", ignore_validate=True
-		)  # counted as absent
-		mark_attendance(
-			emp_id,
-			add_days(first_sunday, 2),
-			"Half Day",
-			leave_type="Leave Without Pay",
-			ignore_validate=True,
-		)  # valid 0.75 lwp
-		mark_attendance(
-			emp_id,
-			add_days(first_sunday, 3),
-			"On Leave",
-			leave_type="Leave Without Pay",
-			ignore_validate=True,
-		)  # valid lwp
-		mark_attendance(
-			emp_id, add_days(first_sunday, 4), "On Leave", leave_type="Casual Leave", ignore_validate=True
-		)  # invalid lwp
-		mark_attendance(
-			emp_id,
-			add_days(first_sunday, 7),
-			"On Leave",
-			leave_type="Leave Without Pay",
-			ignore_validate=True,
-		)  # invalid lwp
-
-		ss = make_employee_salary_slip(
-			"test_payment_days_based_on_attendance@salary.com",
-			"Monthly",
-			"Test Payment Based On Attendence",
-		)
-
-		self.assertEqual(ss.leave_without_pay, 1.25)
-		self.assertEqual(ss.absent_days, 1)
-
-		days_in_month = no_of_days[0]
-		no_of_holidays = no_of_days[1]
-
-		self.assertEqual(ss.payment_days, days_in_month - no_of_holidays - 2.25)
-
-		# Gross pay calculation based on attendances
-		gross_pay = 78000 - (
-			(78000 / (days_in_month - no_of_holidays)) * flt(ss.leave_without_pay + ss.absent_days)
-		)
-
-		self.assertEqual(ss.gross_pay, gross_pay)
-
-	@change_settings(
-		"Payroll Settings",
-		{
-			"payroll_based_on": "Attendance",
-			"consider_unmarked_attendance_as": "Absent",
-			"include_holidays_in_total_working_days": True,
-		},
-	)
-	def test_payment_days_for_mid_joinee_including_holidays(self):
-		no_of_days = get_no_of_days()
-		month_start_date, month_end_date = get_first_day(nowdate()), get_last_day(nowdate())
-
-		new_emp_id = make_employee("test_payment_days_based_on_joining_date@salary.com")
-		joining_date, relieving_date = add_days(month_start_date, 3), add_days(month_end_date, -5)
-
-		for days in range(date_diff(month_end_date, month_start_date) + 1):
-			date = add_days(month_start_date, days)
-			mark_attendance(new_emp_id, date, "Present", ignore_validate=True)
-
-		# Case 1: relieving in mid month
-		frappe.db.set_value(
-			"Employee",
-			new_emp_id,
-			{"date_of_joining": month_start_date, "relieving_date": relieving_date, "status": "Active"},
-		)
-
-		new_ss = make_employee_salary_slip(
-			"test_payment_days_based_on_joining_date@salary.com",
-			"Monthly",
-			"Test Payment Based On Attendence",
-		)
-		self.assertEqual(new_ss.payment_days, no_of_days[0] - 5)
-
-		# Case 2: joining in mid month
-		frappe.db.set_value(
-			"Employee",
-			new_emp_id,
-			{"date_of_joining": joining_date, "relieving_date": month_end_date, "status": "Active"},
-		)
-
-		frappe.delete_doc("Salary Slip", new_ss.name, force=True)
-		new_ss = make_employee_salary_slip(
-			"test_payment_days_based_on_joining_date@salary.com",
-			"Monthly",
-			"Test Payment Based On Attendence",
-		)
-		self.assertEqual(new_ss.payment_days, no_of_days[0] - 3)
-
-		# Case 3: joining and relieving in mid-month
-		frappe.db.set_value(
-			"Employee",
-			new_emp_id,
-			{"date_of_joining": joining_date, "relieving_date": relieving_date, "status": "Left"},
-		)
-
-		frappe.delete_doc("Salary Slip", new_ss.name, force=True)
-		new_ss = make_employee_salary_slip(
-			"test_payment_days_based_on_joining_date@salary.com",
-			"Monthly",
-			"Test Payment Based On Attendence",
-		)
-
-		self.assertEqual(new_ss.total_working_days, no_of_days[0])
-		self.assertEqual(new_ss.payment_days, no_of_days[0] - 8)
-
-	@change_settings(
-		"Payroll Settings",
-		{
-			"payroll_based_on": "Attendance",
-			"consider_unmarked_attendance_as": "Absent",
-			"include_holidays_in_total_working_days": True,
-		},
-	)
-	def test_payment_days_for_mid_joinee_including_holidays_and_unmarked_days(self):
-		# tests mid month joining and relieving along with unmarked days
-		from erpnext.hr.doctype.holiday_list.holiday_list import is_holiday
-
-		no_of_days = get_no_of_days()
-		month_start_date, month_end_date = get_first_day(nowdate()), get_last_day(nowdate())
-
-		new_emp_id = make_employee("test_payment_days_based_on_joining_date@salary.com")
-		joining_date, relieving_date = add_days(month_start_date, 3), add_days(month_end_date, -5)
-		holidays = 0
-
-		for days in range(date_diff(relieving_date, joining_date) + 1):
-			date = add_days(joining_date, days)
-			if not is_holiday("Salary Slip Test Holiday List", date):
-				mark_attendance(new_emp_id, date, "Present", ignore_validate=True)
-			else:
-				holidays += 1
-
-		frappe.db.set_value(
-			"Employee",
-			new_emp_id,
-			{"date_of_joining": joining_date, "relieving_date": relieving_date, "status": "Left"},
-		)
-
-		new_ss = make_employee_salary_slip(
-			"test_payment_days_based_on_joining_date@salary.com",
-			"Monthly",
-			"Test Payment Based On Attendence",
-		)
-
-		self.assertEqual(new_ss.total_working_days, no_of_days[0])
-		self.assertEqual(new_ss.payment_days, no_of_days[0] - holidays - 8)
-
-	@change_settings(
-		"Payroll Settings",
-		{
-			"payroll_based_on": "Attendance",
-			"consider_unmarked_attendance_as": "Absent",
-			"include_holidays_in_total_working_days": False,
-		},
-	)
-	def test_payment_days_for_mid_joinee_excluding_holidays(self):
-		from erpnext.hr.doctype.holiday_list.holiday_list import is_holiday
-
-		no_of_days = get_no_of_days()
-		month_start_date, month_end_date = get_first_day(nowdate()), get_last_day(nowdate())
-
-		new_emp_id = make_employee("test_payment_days_based_on_joining_date@salary.com")
-		joining_date, relieving_date = add_days(month_start_date, 3), add_days(month_end_date, -5)
-		frappe.db.set_value(
-			"Employee",
-			new_emp_id,
-			{"date_of_joining": joining_date, "relieving_date": relieving_date, "status": "Left"},
-		)
-
-		holidays = 0
-
-		for days in range(date_diff(relieving_date, joining_date) + 1):
-			date = add_days(joining_date, days)
-			if not is_holiday("Salary Slip Test Holiday List", date):
-				mark_attendance(new_emp_id, date, "Present", ignore_validate=True)
-			else:
-				holidays += 1
-
-		new_ss = make_employee_salary_slip(
-			"test_payment_days_based_on_joining_date@salary.com",
-			"Monthly",
-			"Test Payment Based On Attendence",
-		)
-
-		self.assertEqual(new_ss.total_working_days, no_of_days[0] - no_of_days[1])
-		self.assertEqual(new_ss.payment_days, no_of_days[0] - holidays - 8)
-
-	@change_settings("Payroll Settings", {"payroll_based_on": "Leave"})
-	def test_payment_days_based_on_leave_application(self):
-		no_of_days = get_no_of_days()
-
-		emp_id = make_employee("test_payment_days_based_on_leave_application@salary.com")
-		frappe.db.set_value("Employee", emp_id, {"relieving_date": None, "status": "Active"})
-
-		frappe.db.set_value("Leave Type", "Leave Without Pay", "include_holiday", 0)
-
-		month_start_date = get_first_day(nowdate())
-		month_end_date = get_last_day(nowdate())
-
-		first_sunday = frappe.db.sql(
-			"""
-			select holiday_date from `tabHoliday`
-			where parent = 'Salary Slip Test Holiday List'
-				and holiday_date between %s and %s
-			order by holiday_date
-		""",
-			(month_start_date, month_end_date),
-		)[0][0]
-
-		make_leave_application(emp_id, first_sunday, add_days(first_sunday, 3), "Leave Without Pay")
-
-		leave_type_ppl = create_leave_type(leave_type_name="Test Partially Paid Leave", is_ppl=1)
-		leave_type_ppl.save()
-
-		alloc = create_leave_allocation(
-			employee=emp_id,
-			from_date=add_days(first_sunday, 4),
-			to_date=add_days(first_sunday, 10),
-			new_leaves_allocated=3,
-			leave_type="Test Partially Paid Leave",
-		)
-		alloc.save()
-		alloc.submit()
-
-		# two day leave ppl with fraction_of_daily_salary_per_leave = 0.5 equivalent to single day lwp
-		make_leave_application(
-			emp_id, add_days(first_sunday, 4), add_days(first_sunday, 5), "Test Partially Paid Leave"
-		)
-
-		ss = make_employee_salary_slip(
-			"test_payment_days_based_on_leave_application@salary.com",
-			"Monthly",
-			"Test Payment Based On Leave Application",
-		)
-
-		self.assertEqual(ss.leave_without_pay, 4)
-
-		days_in_month = no_of_days[0]
-		no_of_holidays = no_of_days[1]
-
-		self.assertEqual(ss.payment_days, days_in_month - no_of_holidays - 4)
-
-	@change_settings("Payroll Settings", {"payroll_based_on": "Attendance"})
-	def test_payment_days_in_salary_slip_based_on_timesheet(self):
-		from erpnext.hr.doctype.attendance.attendance import mark_attendance
-		from erpnext.projects.doctype.timesheet.test_timesheet import (
-			make_salary_structure_for_timesheet,
-			make_timesheet,
-		)
-		from erpnext.projects.doctype.timesheet.timesheet import (
-			make_salary_slip as make_salary_slip_for_timesheet,
-		)
-
-		emp = make_employee(
-			"test_employee_timesheet@salary.com",
-			company="_Test Company",
-			holiday_list="Salary Slip Test Holiday List",
-		)
-		frappe.db.set_value("Employee", emp, {"relieving_date": None, "status": "Active"})
-
-		# mark attendance
-		month_start_date = get_first_day(nowdate())
-		month_end_date = get_last_day(nowdate())
-
-		first_sunday = frappe.db.sql(
-			"""
-			select holiday_date from `tabHoliday`
-			where parent = 'Salary Slip Test Holiday List'
-				and holiday_date between %s and %s
-			order by holiday_date
-		""",
-			(month_start_date, month_end_date),
-		)[0][0]
-
-		mark_attendance(
-			emp, add_days(first_sunday, 1), "Absent", ignore_validate=True
-		)  # counted as absent
-
-		# salary structure based on timesheet
-		make_salary_structure_for_timesheet(emp)
-		timesheet = make_timesheet(emp, simulate=True, is_billable=1)
-		salary_slip = make_salary_slip_for_timesheet(timesheet.name)
-		salary_slip.start_date = month_start_date
-		salary_slip.end_date = month_end_date
-		salary_slip.save()
-		salary_slip.submit()
-		salary_slip.reload()
-
-		no_of_days = get_no_of_days()
-		days_in_month = no_of_days[0]
-		no_of_holidays = no_of_days[1]
-
-		self.assertEqual(salary_slip.payment_days, days_in_month - no_of_holidays - 1)
-
-		# gross pay calculation based on attendance (payment days)
-		gross_pay = 78100 - (
-			(78000 / (days_in_month - no_of_holidays))
-			* flt(salary_slip.leave_without_pay + salary_slip.absent_days)
-		)
-
-		self.assertEqual(salary_slip.gross_pay, flt(gross_pay, 2))
-
-	@change_settings("Payroll Settings", {"payroll_based_on": "Attendance"})
-	def test_component_amount_dependent_on_another_payment_days_based_component(self):
-		from erpnext.hr.doctype.attendance.attendance import mark_attendance
-		from erpnext.payroll.doctype.salary_structure.test_salary_structure import (
-			create_salary_structure_assignment,
-		)
-
-		salary_structure = make_salary_structure_for_payment_days_based_component_dependency()
-		employee = make_employee("test_payment_days_based_component@salary.com", company="_Test Company")
-
-		# base = 50000
-		create_salary_structure_assignment(
-			employee, salary_structure.name, company="_Test Company", currency="INR"
-		)
-
-		# mark employee absent for a day since this case works fine if payment days are equal to working days
-		month_start_date = get_first_day(nowdate())
-		month_end_date = get_last_day(nowdate())
-
-		first_sunday = frappe.db.sql(
-			"""
-			select holiday_date from `tabHoliday`
-			where parent = 'Salary Slip Test Holiday List'
-				and holiday_date between %s and %s
-			order by holiday_date
-		""",
-			(month_start_date, month_end_date),
-		)[0][0]
-
-		mark_attendance(
-			employee, add_days(first_sunday, 1), "Absent", ignore_validate=True
-		)  # counted as absent
-
-		# make salary slip and assert payment days
-		ss = make_salary_slip_for_payment_days_dependency_test(
-			"test_payment_days_based_component@salary.com", salary_structure.name
-		)
-		self.assertEqual(ss.absent_days, 1)
-
-		ss.reload()
-		payment_days_based_comp_amount = 0
-		for component in ss.earnings:
-			if component.salary_component == "HRA - Payment Days":
-				payment_days_based_comp_amount = flt(component.amount, component.precision("amount"))
-				break
-
-		# check if the dependent component is calculated using the amount updated after payment days
-		actual_amount = 0
-		precision = 0
-		for component in ss.deductions:
-			if component.salary_component == "P - Employee Provident Fund":
-				precision = component.precision("amount")
-				actual_amount = flt(component.amount, precision)
-				break
-
-		expected_amount = flt((flt(ss.gross_pay) - payment_days_based_comp_amount) * 0.12, precision)
-
-		self.assertEqual(actual_amount, expected_amount)
-
-	@change_settings("Payroll Settings", {"include_holidays_in_total_working_days": 1})
-	def test_salary_slip_with_holidays_included(self):
-		no_of_days = get_no_of_days()
-		make_employee("test_salary_slip_with_holidays_included@salary.com")
-		frappe.db.set_value(
-			"Employee",
-			frappe.get_value(
-				"Employee", {"employee_name": "test_salary_slip_with_holidays_included@salary.com"}, "name"
-			),
-			"relieving_date",
-			None,
-		)
-		frappe.db.set_value(
-			"Employee",
-			frappe.get_value(
-				"Employee", {"employee_name": "test_salary_slip_with_holidays_included@salary.com"}, "name"
-			),
-			"status",
-			"Active",
-		)
-		ss = make_employee_salary_slip(
-			"test_salary_slip_with_holidays_included@salary.com",
-			"Monthly",
-			"Test Salary Slip With Holidays Included",
-		)
-
-		self.assertEqual(ss.total_working_days, no_of_days[0])
-		self.assertEqual(ss.payment_days, no_of_days[0])
-		self.assertEqual(ss.earnings[0].amount, 50000)
-		self.assertEqual(ss.earnings[1].amount, 3000)
-		self.assertEqual(ss.gross_pay, 78000)
-
-	@change_settings("Payroll Settings", {"include_holidays_in_total_working_days": 0})
-	def test_salary_slip_with_holidays_excluded(self):
-		no_of_days = get_no_of_days()
-		make_employee("test_salary_slip_with_holidays_excluded@salary.com")
-		frappe.db.set_value(
-			"Employee",
-			frappe.get_value(
-				"Employee", {"employee_name": "test_salary_slip_with_holidays_excluded@salary.com"}, "name"
-			),
-			"relieving_date",
-			None,
-		)
-		frappe.db.set_value(
-			"Employee",
-			frappe.get_value(
-				"Employee", {"employee_name": "test_salary_slip_with_holidays_excluded@salary.com"}, "name"
-			),
-			"status",
-			"Active",
-		)
-		ss = make_employee_salary_slip(
-			"test_salary_slip_with_holidays_excluded@salary.com",
-			"Monthly",
-			"Test Salary Slip With Holidays Excluded",
-		)
-
-		self.assertEqual(ss.total_working_days, no_of_days[0] - no_of_days[1])
-		self.assertEqual(ss.payment_days, no_of_days[0] - no_of_days[1])
-		self.assertEqual(ss.earnings[0].amount, 50000)
-		self.assertEqual(ss.earnings[0].default_amount, 50000)
-		self.assertEqual(ss.earnings[1].amount, 3000)
-		self.assertEqual(ss.gross_pay, 78000)
-
-	@change_settings("Payroll Settings", {"include_holidays_in_total_working_days": 1})
-	def test_payment_days(self):
-		from erpnext.payroll.doctype.salary_structure.test_salary_structure import (
-			create_salary_structure_assignment,
-		)
-
-		no_of_days = get_no_of_days()
-
-		# set joinng date in the same month
-		employee = make_employee("test_payment_days@salary.com")
-		if getdate(nowdate()).day >= 15:
-			relieving_date = getdate(add_days(nowdate(), -10))
-			date_of_joining = getdate(add_days(nowdate(), -10))
-		elif getdate(nowdate()).day < 15 and getdate(nowdate()).day >= 5:
-			date_of_joining = getdate(add_days(nowdate(), -3))
-			relieving_date = getdate(add_days(nowdate(), -3))
-		elif getdate(nowdate()).day < 5 and not getdate(nowdate()).day == 1:
-			date_of_joining = getdate(add_days(nowdate(), -1))
-			relieving_date = getdate(add_days(nowdate(), -1))
-		elif getdate(nowdate()).day == 1:
-			date_of_joining = getdate(nowdate())
-			relieving_date = getdate(nowdate())
-
-		frappe.db.set_value(
-			"Employee",
-			employee,
-			{"date_of_joining": date_of_joining, "relieving_date": None, "status": "Active"},
-		)
-
-		salary_structure = "Test Payment Days"
-		ss = make_employee_salary_slip("test_payment_days@salary.com", "Monthly", salary_structure)
-
-		self.assertEqual(ss.total_working_days, no_of_days[0])
-		self.assertEqual(ss.payment_days, (no_of_days[0] - getdate(date_of_joining).day + 1))
-
-		# set relieving date in the same month
-		frappe.db.set_value(
-			"Employee",
-			employee,
-			{
-				"date_of_joining": add_days(nowdate(), -60),
-				"relieving_date": relieving_date,
-				"status": "Left",
-			},
-		)
-
-		if date_of_joining.day > 1:
-			self.assertRaises(frappe.ValidationError, ss.save)
-
-		create_salary_structure_assignment(employee, salary_structure)
-		ss.reload()
-		ss.save()
-
-		self.assertEqual(ss.total_working_days, no_of_days[0])
-		self.assertEqual(ss.payment_days, getdate(relieving_date).day)
-
-		frappe.db.set_value(
-			"Employee",
-			frappe.get_value("Employee", {"employee_name": "test_payment_days@salary.com"}, "name"),
-			"relieving_date",
-			None,
-		)
-		frappe.db.set_value(
-			"Employee",
-			frappe.get_value("Employee", {"employee_name": "test_payment_days@salary.com"}, "name"),
-			"status",
-			"Active",
-		)
-
-	def test_employee_salary_slip_read_permission(self):
-		make_employee("test_employee_salary_slip_read_permission@salary.com")
-
-		salary_slip_test_employee = make_employee_salary_slip(
-			"test_employee_salary_slip_read_permission@salary.com",
-			"Monthly",
-			"Test Employee Salary Slip Read Permission",
-		)
-		frappe.set_user("test_employee_salary_slip_read_permission@salary.com")
-		self.assertTrue(salary_slip_test_employee.has_permission("read"))
-
-	@change_settings("Payroll Settings", {"email_salary_slip_to_employee": 1})
-	def test_email_salary_slip(self):
-		frappe.db.delete("Email Queue")
-
-		user_id = "test_email_salary_slip@salary.com"
-
-		make_employee(user_id, company="_Test Company")
-		ss = make_employee_salary_slip(user_id, "Monthly", "Test Salary Slip Email")
-		ss.company = "_Test Company"
-		ss.save()
-		ss.submit()
-
-		email_queue = frappe.db.a_row_exists("Email Queue")
-		self.assertTrue(email_queue)
-
-	def test_loan_repayment_salary_slip(self):
-		from erpnext.loan_management.doctype.loan.test_loan import (
-			create_loan,
-			create_loan_accounts,
-			create_loan_type,
-			make_loan_disbursement_entry,
-		)
-		from erpnext.loan_management.doctype.process_loan_interest_accrual.process_loan_interest_accrual import (
-			process_loan_interest_accrual_for_term_loans,
-		)
-		from erpnext.payroll.doctype.salary_structure.test_salary_structure import make_salary_structure
-
-		applicant = make_employee("test_loan_repayment_salary_slip@salary.com", company="_Test Company")
-
-		create_loan_accounts()
-
-		create_loan_type(
-			"Car Loan",
-			500000,
-			8.4,
-			is_term_loan=1,
-			mode_of_payment="Cash",
-			disbursement_account="Disbursement Account - _TC",
-			payment_account="Payment Account - _TC",
-			loan_account="Loan Account - _TC",
-			interest_income_account="Interest Income Account - _TC",
-			penalty_income_account="Penalty Income Account - _TC",
-		)
-
-		payroll_period = create_payroll_period(name="_Test Payroll Period 1", company="_Test Company")
-
-		make_salary_structure(
-			"Test Loan Repayment Salary Structure",
-			"Monthly",
-			employee=applicant,
-			currency="INR",
-			payroll_period=payroll_period,
-		)
-
-		frappe.db.sql(
-			"delete from tabLoan where applicant = 'test_loan_repayment_salary_slip@salary.com'"
-		)
-		loan = create_loan(
-			applicant,
-			"Car Loan",
-			11000,
-			"Repay Over Number of Periods",
-			20,
-			posting_date=add_months(nowdate(), -1),
-		)
-		loan.repay_from_salary = 1
-		loan.submit()
-
-		make_loan_disbursement_entry(
-			loan.name, loan.loan_amount, disbursement_date=add_months(nowdate(), -1)
-		)
-
-		process_loan_interest_accrual_for_term_loans(posting_date=nowdate())
-
-		ss = make_employee_salary_slip(
-			"test_loan_repayment_salary_slip@salary.com", "Monthly", "Test Loan Repayment Salary Structure"
-		)
-		ss.submit()
-
-		self.assertEqual(ss.total_loan_repayment, 592)
-		self.assertEqual(
-			ss.net_pay, (flt(ss.gross_pay) - (flt(ss.total_deduction) + flt(ss.total_loan_repayment)))
-		)
-
-	def test_payroll_frequency(self):
-		fiscal_year = get_fiscal_year(nowdate(), company=erpnext.get_default_company())[0]
-		month = "%02d" % getdate(nowdate()).month
-		m = get_month_details(fiscal_year, month)
-
-		for payroll_frequency in ["Monthly", "Bimonthly", "Fortnightly", "Weekly", "Daily"]:
-			make_employee(payroll_frequency + "_test_employee@salary.com")
-			ss = make_employee_salary_slip(
-				payroll_frequency + "_test_employee@salary.com",
-				payroll_frequency,
-				payroll_frequency + "_Test Payroll Frequency",
-			)
-			if payroll_frequency == "Monthly":
-				self.assertEqual(ss.end_date, m["month_end_date"])
-			elif payroll_frequency == "Bimonthly":
-				if getdate(ss.start_date).day <= 15:
-					self.assertEqual(ss.end_date, m["month_mid_end_date"])
-				else:
-					self.assertEqual(ss.end_date, m["month_end_date"])
-			elif payroll_frequency == "Fortnightly":
-				self.assertEqual(ss.end_date, add_days(nowdate(), 13))
-			elif payroll_frequency == "Weekly":
-				self.assertEqual(ss.end_date, add_days(nowdate(), 6))
-			elif payroll_frequency == "Daily":
-				self.assertEqual(ss.end_date, nowdate())
-
-	def test_multi_currency_salary_slip(self):
-		from erpnext.payroll.doctype.salary_structure.test_salary_structure import make_salary_structure
-
-		applicant = make_employee("test_multi_currency_salary_slip@salary.com", company="_Test Company")
-		frappe.db.sql(
-			"""delete from `tabSalary Structure` where name='Test Multi Currency Salary Slip'"""
-		)
-		salary_structure = make_salary_structure(
-			"Test Multi Currency Salary Slip",
-			"Monthly",
-			employee=applicant,
-			company="_Test Company",
-			currency="USD",
-		)
-		salary_slip = make_salary_slip(salary_structure.name, employee=applicant)
-		salary_slip.exchange_rate = 70
-		salary_slip.calculate_net_pay()
-
-		self.assertEqual(salary_slip.gross_pay, 78000)
-		self.assertEqual(salary_slip.base_gross_pay, 78000 * 70)
-
-	def test_year_to_date_computation(self):
-		from erpnext.payroll.doctype.salary_structure.test_salary_structure import make_salary_structure
-
-		applicant = make_employee("test_ytd@salary.com", company="_Test Company")
-
-		payroll_period = create_payroll_period(name="_Test Payroll Period 1", company="_Test Company")
-
-		create_tax_slab(
-			payroll_period,
-			allow_tax_exemption=True,
-			currency="INR",
-			effective_date=getdate("2019-04-01"),
-			company="_Test Company",
-		)
-
-		salary_structure = make_salary_structure(
-			"Monthly Salary Structure Test for Salary Slip YTD",
-			"Monthly",
-			employee=applicant,
-			company="_Test Company",
-			currency="INR",
-			payroll_period=payroll_period,
-		)
-
-		# clear salary slip for this employee
-		frappe.db.sql("DELETE FROM `tabSalary Slip` where employee_name = 'test_ytd@salary.com'")
-
-		create_salary_slips_for_payroll_period(
-			applicant, salary_structure.name, payroll_period, deduct_random=False, num=6
-		)
-
-		salary_slips = frappe.get_all(
-			"Salary Slip",
-			fields=["year_to_date", "net_pay"],
-			filters={"employee_name": "test_ytd@salary.com"},
-			order_by="posting_date",
-		)
-
-		year_to_date = 0
-		for slip in salary_slips:
-			year_to_date += flt(slip.net_pay)
-			self.assertEqual(slip.year_to_date, year_to_date)
-
-	def test_component_wise_year_to_date_computation(self):
-		from erpnext.payroll.doctype.salary_structure.test_salary_structure import make_salary_structure
-
-		employee_name = "test_component_wise_ytd@salary.com"
-		applicant = make_employee(employee_name, company="_Test Company")
-
-		payroll_period = create_payroll_period(name="_Test Payroll Period 1", company="_Test Company")
-
-		create_tax_slab(
-			payroll_period,
-			allow_tax_exemption=True,
-			currency="INR",
-			effective_date=getdate("2019-04-01"),
-			company="_Test Company",
-		)
-
-		salary_structure = make_salary_structure(
-			"Monthly Salary Structure Test for Salary Slip YTD",
-			"Monthly",
-			employee=applicant,
-			company="_Test Company",
-			currency="INR",
-			payroll_period=payroll_period,
-		)
-
-		# clear salary slip for this employee
-		frappe.db.sql("DELETE FROM `tabSalary Slip` where employee_name = '%s'" % employee_name)
-
-		create_salary_slips_for_payroll_period(
-			applicant, salary_structure.name, payroll_period, deduct_random=False, num=3
-		)
-
-		salary_slips = frappe.get_all(
-			"Salary Slip",
-			fields=["name"],
-			filters={"employee_name": employee_name},
-			order_by="posting_date",
-		)
-
-		year_to_date = dict()
-		for slip in salary_slips:
-			doc = frappe.get_doc("Salary Slip", slip.name)
-			for entry in doc.get("earnings"):
-				if not year_to_date.get(entry.salary_component):
-					year_to_date[entry.salary_component] = 0
-
-				year_to_date[entry.salary_component] += entry.amount
-				self.assertEqual(year_to_date[entry.salary_component], entry.year_to_date)
-
-	def test_tax_for_payroll_period(self):
-		data = {}
-		# test the impact of tax exemption declaration, tax exemption proof submission
-		# and deduct check boxes in annual tax calculation
-		# as per assigned salary structure 40500 in monthly salary so 236000*5/100/12
-		frappe.db.sql("""delete from `tabPayroll Period`""")
-		frappe.db.sql("""delete from `tabSalary Component`""")
-
-		payroll_period = create_payroll_period()
-
-		create_tax_slab(payroll_period, allow_tax_exemption=True)
-
-		employee = make_employee("test_tax@salary.slip")
-		delete_docs = [
-			"Salary Slip",
-			"Additional Salary",
-			"Employee Tax Exemption Declaration",
-			"Employee Tax Exemption Proof Submission",
-			"Employee Benefit Claim",
-			"Salary Structure Assignment",
-		]
-		for doc in delete_docs:
-			frappe.db.sql("delete from `tab%s` where employee='%s'" % (doc, employee))
-
-		from erpnext.payroll.doctype.salary_structure.test_salary_structure import make_salary_structure
-
-		salary_structure = make_salary_structure(
-			"Stucture to test tax",
-			"Monthly",
-			other_details={"max_benefits": 100000},
-			test_tax=True,
-			include_flexi_benefits=True,
-			employee=employee,
-			payroll_period=payroll_period,
-		)
-
-		# create salary slip for whole period deducting tax only on last period
-		# to find the total tax amount paid
-		create_salary_slips_for_payroll_period(
-			employee, salary_structure.name, payroll_period, deduct_random=False
-		)
-		tax_paid = get_tax_paid_in_period(employee)
-
-		annual_tax = 113589.0
-		try:
-			self.assertEqual(tax_paid, annual_tax)
-		except AssertionError:
-			print("\nSalary Slip - Annual tax calculation failed\n")
-			raise
-		frappe.db.sql("""delete from `tabSalary Slip` where employee=%s""", (employee))
-
-		# create exemption declaration so the tax amount varies
-		create_exemption_declaration(employee, payroll_period.name)
-
-		# create for payroll deducting in random months
-		data["deducted_dates"] = create_salary_slips_for_payroll_period(
-			employee, salary_structure.name, payroll_period
-		)
-		tax_paid = get_tax_paid_in_period(employee)
-
-		# No proof, benefit claim sumitted, total tax paid, should not change
-		try:
-			self.assertEqual(tax_paid, annual_tax)
-		except AssertionError:
-			print("\nSalary Slip - Tax calculation failed on following case\n", data, "\n")
-			raise
-
-		# Submit proof for total 120000
-		data["proof"] = create_proof_submission(employee, payroll_period, 120000)
-
-		# Submit benefit claim for total 50000
-		data["benefit-1"] = create_benefit_claim(employee, payroll_period, 15000, "Medical Allowance")
-		data["benefit-2"] = create_benefit_claim(
-			employee, payroll_period, 35000, "Leave Travel Allowance"
-		)
-
-		frappe.db.sql("""delete from `tabSalary Slip` where employee=%s""", (employee))
-		data["deducted_dates"] = create_salary_slips_for_payroll_period(
-			employee, salary_structure.name, payroll_period
-		)
-		tax_paid = get_tax_paid_in_period(employee)
-
-		# total taxable income 416000, 166000 @ 5% ie. 8300
-		try:
-			self.assertEqual(tax_paid, 82389.0)
-		except AssertionError:
-			print("\nSalary Slip - Tax calculation failed on following case\n", data, "\n")
-			raise
-
-		# create additional salary of 150000
-		frappe.db.sql("""delete from `tabSalary Slip` where employee=%s""", (employee))
-		data["additional-1"] = create_additional_salary(employee, payroll_period, 150000)
-		data["deducted_dates"] = create_salary_slips_for_payroll_period(
-			employee, salary_structure.name, payroll_period
-		)
-
-		# total taxable income 566000, 250000 @ 5%, 66000 @ 20%, 12500 + 13200
-		tax_paid = get_tax_paid_in_period(employee)
-		try:
-			self.assertEqual(tax_paid, annual_tax)
-		except AssertionError:
-			print("\nSalary Slip - Tax calculation failed on following case\n", data, "\n")
-			raise
-		frappe.db.sql("""delete from `tabAdditional Salary` where employee=%s""", (employee))
-
-		# undelete fixture data
-		frappe.db.rollback()
-
-	def test_tax_for_recurring_additional_salary(self):
-		frappe.db.sql("""delete from `tabPayroll Period`""")
-		frappe.db.sql("""delete from `tabSalary Component`""")
-
-		payroll_period = create_payroll_period()
-
-		create_tax_slab(payroll_period, allow_tax_exemption=True)
-
-		employee = make_employee("test_tax@salary.slip")
-		delete_docs = [
-			"Salary Slip",
-			"Additional Salary",
-			"Employee Tax Exemption Declaration",
-			"Employee Tax Exemption Proof Submission",
-			"Employee Benefit Claim",
-			"Salary Structure Assignment",
-		]
-		for doc in delete_docs:
-			frappe.db.sql("delete from `tab%s` where employee='%s'" % (doc, employee))
-
-		from erpnext.payroll.doctype.salary_structure.test_salary_structure import make_salary_structure
-
-		salary_structure = make_salary_structure(
-			"Stucture to test tax",
-			"Monthly",
-			other_details={"max_benefits": 100000},
-			test_tax=True,
-			include_flexi_benefits=True,
-			employee=employee,
-			payroll_period=payroll_period,
-		)
-
-		create_salary_slips_for_payroll_period(
-			employee, salary_structure.name, payroll_period, deduct_random=False, num=3
-		)
-
-		tax_paid = get_tax_paid_in_period(employee)
-
-		annual_tax = 23196.0
-		self.assertEqual(tax_paid, annual_tax)
-
-		frappe.db.sql("""delete from `tabSalary Slip` where employee=%s""", (employee))
-
-		# ------------------------------------
-		# Recurring additional salary
-		start_date = add_months(payroll_period.start_date, 3)
-		end_date = add_months(payroll_period.start_date, 5)
-		create_recurring_additional_salary(employee, "Performance Bonus", 20000, start_date, end_date)
-
-		frappe.db.sql("""delete from `tabSalary Slip` where employee=%s""", (employee))
-
-		create_salary_slips_for_payroll_period(
-			employee, salary_structure.name, payroll_period, deduct_random=False, num=4
-		)
-
-		tax_paid = get_tax_paid_in_period(employee)
-
-		annual_tax = 32315.0
-		self.assertEqual(tax_paid, annual_tax)
-
-		frappe.db.rollback()
-
-	def make_activity_for_employee(self):
-		activity_type = frappe.get_doc("Activity Type", "_Test Activity Type")
-		activity_type.billing_rate = 50
-		activity_type.costing_rate = 20
-		activity_type.wage_rate = 25
-		activity_type.save()
-
-
-def get_no_of_days():
-	no_of_days_in_month = calendar.monthrange(getdate(nowdate()).year, getdate(nowdate()).month)
-	no_of_holidays_in_month = len(
-		[
-			1
-			for i in calendar.monthcalendar(getdate(nowdate()).year, getdate(nowdate()).month)
-			if i[6] != 0
-		]
-	)
-
-	return [no_of_days_in_month[1], no_of_holidays_in_month]
-
-
-def make_employee_salary_slip(user, payroll_frequency, salary_structure=None, posting_date=None):
-	from erpnext.payroll.doctype.salary_structure.test_salary_structure import make_salary_structure
-
-	if not salary_structure:
-		salary_structure = payroll_frequency + " Salary Structure Test for Salary Slip"
-
-	employee = frappe.db.get_value(
-		"Employee", {"user_id": user}, ["name", "company", "employee_name"], as_dict=True
-	)
-
-	salary_structure_doc = make_salary_structure(
-		salary_structure,
-		payroll_frequency,
-		employee=employee.name,
-		company=employee.company,
-		from_date=posting_date,
-	)
-	salary_slip_name = frappe.db.get_value(
-		"Salary Slip", {"employee": frappe.db.get_value("Employee", {"user_id": user})}
-	)
-
-	if not salary_slip_name:
-		salary_slip = make_salary_slip(salary_structure_doc.name, employee=employee.name)
-		salary_slip.employee_name = employee.employee_name
-		salary_slip.payroll_frequency = payroll_frequency
-		salary_slip.posting_date = posting_date or nowdate()
-		salary_slip.insert()
-	else:
-		salary_slip = frappe.get_doc("Salary Slip", salary_slip_name)
-
-	return salary_slip
-
-
-def make_salary_component(salary_components, test_tax, company_list=None):
-	for salary_component in salary_components:
-		if frappe.db.exists("Salary Component", salary_component["salary_component"]):
-			continue
-
-		if test_tax:
-			if salary_component["type"] == "Earning":
-				salary_component["is_tax_applicable"] = 1
-			elif salary_component["salary_component"] == "TDS":
-				salary_component["variable_based_on_taxable_salary"] = 1
-				salary_component["amount_based_on_formula"] = 0
-				salary_component["amount"] = 0
-				salary_component["formula"] = ""
-				salary_component["condition"] = ""
-
-		salary_component["salary_component_abbr"] = salary_component["abbr"]
-		doc = frappe.new_doc("Salary Component")
-		doc.update(salary_component)
-		doc.insert()
-
-		set_salary_component_account(doc, company_list)
-
-
-def set_salary_component_account(sal_comp, company_list=None):
-	company = erpnext.get_default_company()
-
-	if company_list and company not in company_list:
-		company_list.append(company)
-
-	if not isinstance(sal_comp, Document):
-		sal_comp = frappe.get_doc("Salary Component", sal_comp)
-
-	if not sal_comp.get("accounts"):
-		for d in company_list:
-			company_abbr = frappe.get_cached_value("Company", d, "abbr")
-
-			if sal_comp.type == "Earning":
-				account_name = "Salary"
-				parent_account = "Indirect Expenses - " + company_abbr
-			else:
-				account_name = "Salary Deductions"
-				parent_account = "Current Liabilities - " + company_abbr
-
-			sal_comp.append(
-				"accounts", {"company": d, "account": create_account(account_name, d, parent_account)}
-			)
-			sal_comp.save()
-
-
-def create_account(account_name, company, parent_account, account_type=None):
-	company_abbr = frappe.get_cached_value("Company", company, "abbr")
-	account = frappe.db.get_value("Account", account_name + " - " + company_abbr)
-	if not account:
-		frappe.get_doc(
-			{
-				"doctype": "Account",
-				"account_name": account_name,
-				"parent_account": parent_account,
-				"company": company,
-			}
-		).insert()
-	return account
-
-
-def make_earning_salary_component(
-	setup=False, test_tax=False, company_list=None, include_flexi_benefits=False
-):
-	data = [
-		{
-			"salary_component": "Basic Salary",
-			"abbr": "BS",
-			"condition": "base > 10000",
-			"formula": "base",
-			"type": "Earning",
-			"amount_based_on_formula": 1,
-		},
-		{"salary_component": "HRA", "abbr": "H", "amount": 3000, "type": "Earning"},
-		{
-			"salary_component": "Special Allowance",
-			"abbr": "SA",
-			"condition": "H < 10000",
-			"formula": "BS*.5",
-			"type": "Earning",
-			"amount_based_on_formula": 1,
-		},
-		{"salary_component": "Leave Encashment", "abbr": "LE", "type": "Earning"},
-	]
-	if include_flexi_benefits:
-		data.extend(
-			[
-				{
-					"salary_component": "Leave Travel Allowance",
-					"abbr": "B",
-					"is_flexible_benefit": 1,
-					"type": "Earning",
-					"pay_against_benefit_claim": 1,
-					"max_benefit_amount": 100000,
-					"depends_on_payment_days": 0,
-				},
-				{
-					"salary_component": "Medical Allowance",
-					"abbr": "B",
-					"is_flexible_benefit": 1,
-					"pay_against_benefit_claim": 0,
-					"type": "Earning",
-					"max_benefit_amount": 15000,
-					"depends_on_payment_days": 1,
-				},
-			]
-		)
-	if test_tax:
-		data.extend(
-			[
-				{"salary_component": "Performance Bonus", "abbr": "B", "type": "Earning"},
-			]
-		)
-
-	if setup or test_tax:
-		make_salary_component(data, test_tax, company_list)
-
-	data.append(
-		{
-			"salary_component": "Basic Salary",
-			"abbr": "BS",
-			"condition": "base < 10000",
-			"formula": "base*.2",
-			"type": "Earning",
-			"amount_based_on_formula": 1,
-		}
-	)
-	return data
-
-
-def make_deduction_salary_component(setup=False, test_tax=False, company_list=None):
-	data = [
-		{
-			"salary_component": "Professional Tax",
-			"abbr": "PT",
-			"type": "Deduction",
-			"amount": 200,
-			"exempted_from_income_tax": 1,
-		}
-	]
-	if not test_tax:
-		data.append(
-			{
-				"salary_component": "TDS",
-				"abbr": "T",
-				"condition": 'employment_type=="Intern"',
-				"type": "Deduction",
-				"round_to_the_nearest_integer": 1,
-			}
-		)
-	else:
-		data.append(
-			{
-				"salary_component": "TDS",
-				"abbr": "T",
-				"type": "Deduction",
-				"depends_on_payment_days": 0,
-				"variable_based_on_taxable_salary": 1,
-				"round_to_the_nearest_integer": 1,
-			}
-		)
-	if setup or test_tax:
-		make_salary_component(data, test_tax, company_list)
-
-	return data
-
-
-def get_tax_paid_in_period(employee):
-	tax_paid_amount = frappe.db.sql(
-		"""select sum(sd.amount) from `tabSalary Detail`
-		sd join `tabSalary Slip` ss where ss.name=sd.parent and ss.employee=%s
-		and ss.docstatus=1 and sd.salary_component='TDS'""",
-		(employee),
-	)
-	return tax_paid_amount[0][0]
-
-
-def create_exemption_declaration(employee, payroll_period):
-	create_exemption_category()
-	declaration = frappe.get_doc(
-		{
-			"doctype": "Employee Tax Exemption Declaration",
-			"employee": employee,
-			"payroll_period": payroll_period,
-			"company": erpnext.get_default_company(),
-			"currency": erpnext.get_default_currency(),
-		}
-	)
-	declaration.append(
-		"declarations",
-		{
-			"exemption_sub_category": "_Test Sub Category",
-			"exemption_category": "_Test Category",
-			"amount": 100000,
-		},
-	)
-	declaration.submit()
-
-
-def create_proof_submission(employee, payroll_period, amount):
-	submission_date = add_months(payroll_period.start_date, random.randint(0, 11))
-	proof_submission = frappe.get_doc(
-		{
-			"doctype": "Employee Tax Exemption Proof Submission",
-			"employee": employee,
-			"payroll_period": payroll_period.name,
-			"submission_date": submission_date,
-			"currency": erpnext.get_default_currency(),
-		}
-	)
-	proof_submission.append(
-		"tax_exemption_proofs",
-		{
-			"exemption_sub_category": "_Test Sub Category",
-			"exemption_category": "_Test Category",
-			"type_of_proof": "Test",
-			"amount": amount,
-		},
-	)
-	proof_submission.submit()
-	return submission_date
-
-
-def create_benefit_claim(employee, payroll_period, amount, component):
-	claim_date = add_months(payroll_period.start_date, random.randint(0, 11))
-	frappe.get_doc(
-		{
-			"doctype": "Employee Benefit Claim",
-			"employee": employee,
-			"claimed_amount": amount,
-			"claim_date": claim_date,
-			"earning_component": component,
-			"currency": erpnext.get_default_currency(),
-		}
-	).submit()
-	return claim_date
-
-
-def create_tax_slab(
-	payroll_period,
-	effective_date=None,
-	allow_tax_exemption=False,
-	dont_submit=False,
-	currency=None,
-	company=None,
-):
-	if not currency:
-		currency = erpnext.get_default_currency()
-
-	if company:
-		currency = erpnext.get_company_currency(company)
-
-	slabs = [
-		{
-			"from_amount": 250000,
-			"to_amount": 500000,
-			"percent_deduction": 5,
-			"condition": "annual_taxable_earning > 500000",
-		},
-		{"from_amount": 500001, "to_amount": 1000000, "percent_deduction": 20},
-		{"from_amount": 1000001, "percent_deduction": 30},
-	]
-
-	income_tax_slab_name = frappe.db.get_value("Income Tax Slab", {"currency": currency})
-	if not income_tax_slab_name:
-		income_tax_slab = frappe.new_doc("Income Tax Slab")
-		income_tax_slab.name = "Tax Slab: " + payroll_period.name + " " + cstr(currency)
-		income_tax_slab.effective_from = effective_date or add_days(payroll_period.start_date, -2)
-		income_tax_slab.company = company or ""
-		income_tax_slab.currency = currency
-
-		if allow_tax_exemption:
-			income_tax_slab.allow_tax_exemption = 1
-			income_tax_slab.standard_tax_exemption_amount = 50000
-
-		for item in slabs:
-			income_tax_slab.append("slabs", item)
-
-		income_tax_slab.append("other_taxes_and_charges", {"description": "cess", "percent": 4})
-
-		income_tax_slab.save()
-		if not dont_submit:
-			income_tax_slab.submit()
-
-		return income_tax_slab.name
-	else:
-		return income_tax_slab_name
-
-
-def create_salary_slips_for_payroll_period(
-	employee, salary_structure, payroll_period, deduct_random=True, num=12
-):
-	deducted_dates = []
-	i = 0
-	while i < num:
-		slip = frappe.get_doc(
-			{
-				"doctype": "Salary Slip",
-				"employee": employee,
-				"salary_structure": salary_structure,
-				"frequency": "Monthly",
-			}
-		)
-		if i == 0:
-			posting_date = add_days(payroll_period.start_date, 25)
-		else:
-			posting_date = add_months(posting_date, 1)
-		if i == 11:
-			slip.deduct_tax_for_unsubmitted_tax_exemption_proof = 1
-			slip.deduct_tax_for_unclaimed_employee_benefits = 1
-		if deduct_random and not random.randint(0, 2):
-			slip.deduct_tax_for_unsubmitted_tax_exemption_proof = 1
-			deducted_dates.append(posting_date)
-		slip.posting_date = posting_date
-		slip.start_date = get_first_day(posting_date)
-		slip.end_date = get_last_day(posting_date)
-		doc = make_salary_slip(salary_structure, slip, employee)
-		doc.submit()
-		i += 1
-	return deducted_dates
-
-
-def create_additional_salary(employee, payroll_period, amount):
-	salary_date = add_months(payroll_period.start_date, random.randint(0, 11))
-	frappe.get_doc(
-		{
-			"doctype": "Additional Salary",
-			"employee": employee,
-			"company": erpnext.get_default_company(),
-			"salary_component": "Performance Bonus",
-			"payroll_date": salary_date,
-			"amount": amount,
-			"type": "Earning",
-			"currency": erpnext.get_default_currency(),
-		}
-	).submit()
-	return salary_date
-
-
-def make_leave_application(
-	employee,
-	from_date,
-	to_date,
-	leave_type,
-	company=None,
-	half_day=False,
-	half_day_date=None,
-	submit=True,
-):
-	leave_application = frappe.get_doc(
-		dict(
-			doctype="Leave Application",
-			employee=employee,
-			leave_type=leave_type,
-			from_date=from_date,
-			to_date=to_date,
-			half_day=half_day,
-			half_day_date=half_day_date,
-			company=company or erpnext.get_default_company() or "_Test Company",
-			status="Approved",
-			leave_approver="test@example.com",
-		)
-	).insert()
-
-	if submit:
-		leave_application.submit()
-
-	return leave_application
-
-
-def setup_test():
-	make_earning_salary_component(setup=True, company_list=["_Test Company"])
-	make_deduction_salary_component(setup=True, company_list=["_Test Company"])
-
-	for dt in [
-		"Leave Application",
-		"Leave Allocation",
-		"Salary Slip",
-		"Attendance",
-		"Additional Salary",
-	]:
-		frappe.db.sql("delete from `tab%s`" % dt)
-
-	make_holiday_list()
-
-	frappe.db.set_value(
-		"Company", erpnext.get_default_company(), "default_holiday_list", "Salary Slip Test Holiday List"
-	)
-	frappe.db.set_value("Payroll Settings", None, "email_salary_slip_to_employee", 0)
-	frappe.db.set_value("HR Settings", None, "leave_status_notification_template", None)
-	frappe.db.set_value("HR Settings", None, "leave_approval_notification_template", None)
-
-
-def make_holiday_list(list_name=None, from_date=None, to_date=None):
-	fiscal_year = get_fiscal_year(nowdate(), company=erpnext.get_default_company())
-	name = list_name or "Salary Slip Test Holiday List"
-
-	frappe.delete_doc_if_exists("Holiday List", name, force=True)
-
-	holiday_list = frappe.get_doc(
-		{
-			"doctype": "Holiday List",
-			"holiday_list_name": name,
-			"from_date": from_date or fiscal_year[1],
-			"to_date": to_date or fiscal_year[2],
-			"weekly_off": "Sunday",
-		}
-	).insert()
-	holiday_list.get_weekly_off_dates()
-	holiday_list.save()
-	holiday_list = holiday_list.name
-
-	return holiday_list
-
-
-def make_salary_structure_for_payment_days_based_component_dependency():
-	earnings = [
-		{
-			"salary_component": "Basic Salary - Payment Days",
-			"abbr": "P_BS",
-			"type": "Earning",
-			"formula": "base",
-			"amount_based_on_formula": 1,
-		},
-		{
-			"salary_component": "HRA - Payment Days",
-			"abbr": "P_HRA",
-			"type": "Earning",
-			"depends_on_payment_days": 1,
-			"amount_based_on_formula": 1,
-			"formula": "base * 0.20",
-		},
-	]
-
-	make_salary_component(earnings, False, company_list=["_Test Company"])
-
-	deductions = [
-		{
-			"salary_component": "P - Professional Tax",
-			"abbr": "P_PT",
-			"type": "Deduction",
-			"depends_on_payment_days": 1,
-			"amount": 200.00,
-		},
-		{
-			"salary_component": "P - Employee Provident Fund",
-			"abbr": "P_EPF",
-			"type": "Deduction",
-			"exempted_from_income_tax": 1,
-			"amount_based_on_formula": 1,
-			"depends_on_payment_days": 0,
-			"formula": "(gross_pay - P_HRA) * 0.12",
-		},
-	]
-
-	make_salary_component(deductions, False, company_list=["_Test Company"])
-
-	salary_structure = "Salary Structure with PF"
-	if frappe.db.exists("Salary Structure", salary_structure):
-		frappe.db.delete("Salary Structure", salary_structure)
-
-	details = {
-		"doctype": "Salary Structure",
-		"name": salary_structure,
-		"company": "_Test Company",
-		"payroll_frequency": "Monthly",
-		"payment_account": get_random("Account", filters={"account_currency": "INR"}),
-		"currency": "INR",
-	}
-
-	salary_structure_doc = frappe.get_doc(details)
-
-	for entry in earnings:
-		salary_structure_doc.append("earnings", entry)
-
-	for entry in deductions:
-		salary_structure_doc.append("deductions", entry)
-
-	salary_structure_doc.insert()
-	salary_structure_doc.submit()
-
-	return salary_structure_doc
-
-
-def make_salary_slip_for_payment_days_dependency_test(employee, salary_structure):
-	employee = frappe.db.get_value(
-		"Employee", {"user_id": employee}, ["name", "company", "employee_name"], as_dict=True
-	)
-
-	salary_slip_name = frappe.db.get_value("Salary Slip", {"employee": employee.name})
-
-	if not salary_slip_name:
-		salary_slip = make_salary_slip(salary_structure, employee=employee.name)
-		salary_slip.employee_name = employee.employee_name
-		salary_slip.payroll_frequency = "Monthly"
-		salary_slip.posting_date = nowdate()
-		salary_slip.insert()
-	else:
-		salary_slip = frappe.get_doc("Salary Slip", salary_slip_name)
-
-	return salary_slip
-
-
-def create_recurring_additional_salary(
-	employee, salary_component, amount, from_date, to_date, company=None
-):
-	frappe.get_doc(
-		{
-			"doctype": "Additional Salary",
-			"employee": employee,
-			"company": company or erpnext.get_default_company(),
-			"salary_component": salary_component,
-			"is_recurring": 1,
-			"from_date": from_date,
-			"to_date": to_date,
-			"amount": amount,
-			"type": "Earning",
-			"currency": erpnext.get_default_currency(),
-		}
-	).submit()
diff --git a/erpnext/payroll/doctype/salary_slip_leave/__init__.py b/erpnext/payroll/doctype/salary_slip_leave/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/doctype/salary_slip_leave/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/doctype/salary_slip_leave/salary_slip_leave.json b/erpnext/payroll/doctype/salary_slip_leave/salary_slip_leave.json
deleted file mode 100644
index 60ed453..0000000
--- a/erpnext/payroll/doctype/salary_slip_leave/salary_slip_leave.json
+++ /dev/null
@@ -1,79 +0,0 @@
-{
- "actions": [],
- "creation": "2021-02-19 11:45:18.173417",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "leave_type",
-  "total_allocated_leaves",
-  "expired_leaves",
-  "used_leaves",
-  "pending_leaves",
-  "available_leaves"
- ],
- "fields": [
-  {
-   "fieldname": "leave_type",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Leave Type",
-   "no_copy": 1,
-   "options": "Leave Type",
-   "read_only": 1
-  },
-  {
-   "fieldname": "total_allocated_leaves",
-   "fieldtype": "Float",
-   "in_list_view": 1,
-   "label": "Total Allocated Leave(s)",
-   "no_copy": 1,
-   "read_only": 1
-  },
-  {
-   "fieldname": "expired_leaves",
-   "fieldtype": "Float",
-   "in_list_view": 1,
-   "label": "Expired Leave(s)",
-   "no_copy": 1,
-   "read_only": 1
-  },
-  {
-   "fieldname": "used_leaves",
-   "fieldtype": "Float",
-   "in_list_view": 1,
-   "label": "Used Leave(s)",
-   "no_copy": 1,
-   "read_only": 1
-  },
-  {
-   "fieldname": "pending_leaves",
-   "fieldtype": "Float",
-   "in_list_view": 1,
-   "label": "Leave(s) Pending Approval",
-   "no_copy": 1,
-   "read_only": 1
-  },
-  {
-   "fieldname": "available_leaves",
-   "fieldtype": "Float",
-   "in_list_view": 1,
-   "label": "Available Leave(s)",
-   "no_copy": 1,
-   "read_only": 1
-  }
- ],
- "index_web_pages_for_search": 1,
- "istable": 1,
- "links": [],
- "modified": "2022-02-28 14:01:32.327204",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Salary Slip Leave",
- "owner": "Administrator",
- "permissions": [],
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": [],
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/salary_slip_leave/salary_slip_leave.py b/erpnext/payroll/doctype/salary_slip_leave/salary_slip_leave.py
deleted file mode 100644
index b29a60b..0000000
--- a/erpnext/payroll/doctype/salary_slip_leave/salary_slip_leave.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-# import frappe
-from frappe.model.document import Document
-
-
-class SalarySlipLeave(Document):
-	pass
diff --git a/erpnext/payroll/doctype/salary_slip_timesheet/__init__.py b/erpnext/payroll/doctype/salary_slip_timesheet/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/doctype/salary_slip_timesheet/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/doctype/salary_slip_timesheet/salary_slip_timesheet.json b/erpnext/payroll/doctype/salary_slip_timesheet/salary_slip_timesheet.json
deleted file mode 100644
index 9930c53..0000000
--- a/erpnext/payroll/doctype/salary_slip_timesheet/salary_slip_timesheet.json
+++ /dev/null
@@ -1,40 +0,0 @@
-{
- "actions": [],
- "creation": "2016-06-14 19:22:29.811658",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "time_sheet",
-  "working_hours"
- ],
- "fields": [
-  {
-   "fieldname": "time_sheet",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Time Sheet",
-   "options": "Timesheet",
-   "reqd": 1
-  },
-  {
-   "fieldname": "working_hours",
-   "fieldtype": "Float",
-   "in_list_view": 1,
-   "label": "Working Hours",
-   "no_copy": 1,
-   "read_only": 1
-  }
- ],
- "istable": 1,
- "links": [],
- "modified": "2020-06-22 23:27:43.463532",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Salary Slip Timesheet",
- "owner": "Administrator",
- "permissions": [],
- "quick_entry": 1,
- "sort_field": "modified",
- "sort_order": "DESC"
-}
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/salary_slip_timesheet/salary_slip_timesheet.py b/erpnext/payroll/doctype/salary_slip_timesheet/salary_slip_timesheet.py
deleted file mode 100644
index 022eba0..0000000
--- a/erpnext/payroll/doctype/salary_slip_timesheet/salary_slip_timesheet.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-# import frappe
-from frappe.model.document import Document
-
-
-class SalarySlipTimesheet(Document):
-	pass
diff --git a/erpnext/payroll/doctype/salary_structure/README.md b/erpnext/payroll/doctype/salary_structure/README.md
deleted file mode 100644
index 3795971..0000000
--- a/erpnext/payroll/doctype/salary_structure/README.md
+++ /dev/null
@@ -1 +0,0 @@
-Salary Template for an Employee, basis of which monthly Salary is calculated.
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/salary_structure/__init__.py b/erpnext/payroll/doctype/salary_structure/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/doctype/salary_structure/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/doctype/salary_structure/condition_and_formula_help.html b/erpnext/payroll/doctype/salary_structure/condition_and_formula_help.html
deleted file mode 100644
index 0f6cc37..0000000
--- a/erpnext/payroll/doctype/salary_structure/condition_and_formula_help.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<h3>Variables</h3>
-<ul>
-    <li>
-        Variables from Salary Structure Assignment:<br>
-        <code>base = Base</code>, <code>variable = Variable</code> etc.
-    </li>
-    <li>
-        Variables from Employee:<br> <code>Employment Type = employment_type</code>, <code>Branch = branch</code> etc.
-    </li>
-    <li>
-        Variables from Salary Slip:<br>
-        <code>Payment Days = payment_days</code>, <code>Leave without pay = leave_without_pay</code> etc.
-    </li>
-    <li>
-        Abbreviation from Salary Component:<br>
-        <code>BS = Basic Salary</code> etc.
-    </li>
-    <li>
-        Some additional variable:<br>
-        <code>gross_pay</code> and <code>annual_taxable_earning</code> can also be used.
-    </li>
-        <li>Direct Amount can also be used</li>
-</ul>
-
-<h3>Examples for Conditions and formula</h3>
-<ul>
-    <li>
-        Calculating Basic Salary based on <code>base</code>
-        <pre><code>Condition: base &lt; 10000</code></pre>
-        <pre><code>Formula: base * .2</code></pre>
-    </li>
-    <li>
-        Calculating HRA based on Basic Salary<code>BS</code>
-        <pre><code>Condition: BS &gt; 2000</code></pre>
-        <pre><code>Formula: BS * .1</code></pre>
-    </li>
-    <li>
-        Calculating TDS based on Employment Type<code>employment_type</code>
-        <pre><code>Condition: employment_type=="Intern"</code></pre>
-        <pre><code>Amount: 1000</code></pre>
-    </li>
-    <li>
-        Calculating Income Tax based on <code>annual_taxable_earning </code>
-        <pre><code>Condition: annual_taxable_earning > 20000000</code></pre>
-        <pre><code>Formula: annual_taxable_earning * 0.10 </code></pre>
-    </li>
-</ul>
diff --git a/erpnext/payroll/doctype/salary_structure/salary_structure.js b/erpnext/payroll/doctype/salary_structure/salary_structure.js
deleted file mode 100755
index 7853b48..0000000
--- a/erpnext/payroll/doctype/salary_structure/salary_structure.js
+++ /dev/null
@@ -1,349 +0,0 @@
-// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-// License: GNU General Public License v3. See license.txt
-{% include "erpnext/public/js/controllers/accounts.js" %}
-
-cur_frm.add_fetch('company', 'default_letter_head', 'letter_head');
-
-
-cur_frm.cscript.onload = function(doc, dt, dn){
-	var e_tbl = doc.earnings || [];
-	var d_tbl = doc.deductions || [];
-	if (e_tbl.length == 0 && d_tbl.length == 0)
-		return function(r, rt) { refresh_many(['earnings', 'deductions']);};
-}
-
-frappe.ui.form.on('Salary Structure', {
-	onload: function(frm) {
-
-		let help_button = $(`<a class = 'control-label'>
-			${__("Condition and Formula Help")}
-		</a>`).click(()=>{
-
-			let d = new frappe.ui.Dialog({
-				title: __('Condition and Formula Help'),
-				fields: [
-					{
-						fieldname: 'msg_wrapper',
-						fieldtype: 'HTML'
-					}
-				]
-			});
-
-			let message_html = frappe.render_template("condition_and_formula_help")
-
-			d.fields_dict.msg_wrapper.$wrapper.append(message_html)
-
-			d.show()
-		});
-		let help_button_wrapper = frm.get_field("conditions_and_formula_variable_and_example").$wrapper;
-		help_button_wrapper.empty();
-		help_button_wrapper.append(frm.doc.filters_html).append(help_button)
-
-		frm.toggle_reqd(['payroll_frequency'], !frm.doc.salary_slip_based_on_timesheet)
-
-		frm.set_query("payment_account", function () {
-			var account_types = ["Bank", "Cash"];
-			return {
-				filters: {
-					"account_type": ["in", account_types],
-					"is_group": 0,
-					"company": frm.doc.company
-				}
-			};
-		});
-		frm.trigger('set_earning_deduction_component');
-	},
-
-	set_earning_deduction_component: function(frm) {
-		if(!frm.doc.company) return;
-		frm.set_query("salary_component", "earnings", function() {
-			return {
-				filters: {type: "earning", company: frm.doc.company}
-			};
-		});
-		frm.set_query("salary_component", "deductions", function() {
-			return {
-				filters: {type: "deduction", company: frm.doc.company}
-			};
-		});
-	},
-
-	company: function(frm) {
-		frm.trigger('set_earning_deduction_component');
-	},
-
-	currency: function(frm) {
-		calculate_totals(frm.doc);
-		frm.trigger("set_dynamic_labels")
-		frm.refresh()
-	},
-
-	set_dynamic_labels: function(frm) {
-		frm.set_currency_labels(["net_pay","hour_rate", "leave_encashment_amount_per_day", "max_benefits", "total_earning",
-			"total_deduction"], frm.doc.currency);
-
-		frm.set_currency_labels(["amount", "additional_amount", "tax_on_flexible_benefit", "tax_on_additional_salary"],
-			frm.doc.currency, "earnings");
-
-		frm.set_currency_labels(["amount", "additional_amount", "tax_on_flexible_benefit", "tax_on_additional_salary"],
-			frm.doc.currency, "deductions");
-
-		frm.refresh_fields();
-	},
-
-	refresh: function(frm) {
-		frm.trigger("set_dynamic_labels")
-		frm.trigger("toggle_fields");
-		frm.fields_dict['earnings'].grid.set_column_disp("default_amount", false);
-		frm.fields_dict['deductions'].grid.set_column_disp("default_amount", false);
-
-		if(frm.doc.docstatus === 1) {
-			frm.add_custom_button(__("Preview Salary Slip"), function() {
-				frm.trigger('preview_salary_slip');
-			});
-		}
-
-		if(frm.doc.docstatus==1) {
-			frm.add_custom_button(__("Assign Salary Structure"), function() {
-				var doc = frappe.model.get_new_doc('Salary Structure Assignment');
-				doc.salary_structure = frm.doc.name;
-				doc.company = frm.doc.company;
-				frappe.set_route('Form', 'Salary Structure Assignment', doc.name);
-			});
-			frm.add_custom_button(__("Assign to Employees"),function () {
-				frm.trigger('assign_to_employees')
-			})
-		}
-
-		// set columns read-only
-		let fields_read_only = ["is_tax_applicable", "is_flexible_benefit", "variable_based_on_taxable_salary"];
-		fields_read_only.forEach(function(field) {
-			frm.fields_dict.earnings.grid.update_docfield_property(
-				field, 'read_only', 1
-			);
-			frm.fields_dict.deductions.grid.update_docfield_property(
-				field, 'read_only', 1
-			);
-		});
-		frm.trigger('set_earning_deduction_component');
-	},
-
-	assign_to_employees:function (frm) {
-		var d = new frappe.ui.Dialog({
-			title: __("Assign to Employees"),
-			fields: [
-				{fieldname: "sec_break", fieldtype: "Section Break", label: __("Filter Employees By (Optional)")},
-				{fieldname: "grade", fieldtype: "Link", options: "Employee Grade", label: __("Employee Grade")},
-				{fieldname:'department', fieldtype:'Link', options: 'Department', label: __('Department')},
-				{fieldname:'designation', fieldtype:'Link', options: 'Designation', label: __('Designation')},
-				{fieldname:"employee", fieldtype: "Link", options: "Employee", label: __("Employee")},
-				{fieldname:"payroll_payable_account", fieldtype: "Link", options: "Account", filters: {"company": frm.doc.company, "root_type": "Liability", "is_group": 0, "account_currency": frm.doc.currency}, label: __("Payroll Payable Account")},
-				{fieldname:'base_variable', fieldtype:'Section Break'},
-				{fieldname:'from_date', fieldtype:'Date', label: __('From Date'), "reqd": 1},
-				{fieldname:'income_tax_slab', fieldtype:'Link', label: __('Income Tax Slab'), options: 'Income Tax Slab'},
-				{fieldname:'base_col_br', fieldtype:'Column Break'},
-				{fieldname:'base', fieldtype:'Currency', label: __('Base')},
-				{fieldname:'variable', fieldtype:'Currency', label: __('Variable')}
-			],
-			primary_action: function() {
-				var data = d.get_values();
-				delete data.company
-				delete data.currency
-				frappe.call({
-					doc: frm.doc,
-					method: "assign_salary_structure",
-					args: data,
-					callback: function(r) {
-						if(!r.exc) {
-							d.hide();
-							frm.reload_doc();
-						}
-					}
-				});
-			},
-			primary_action_label: __('Assign')
-		});
-
-		d.fields_dict.grade.df.onchange = function() {
-			const grade = d.fields_dict.grade.value;
-			if (grade) {
-				frappe.db.get_value('Employee Grade', grade, 'default_base_pay')
-					.then(({ message }) => {
-						d.set_value('base', message.default_base_pay);
-					});
-			}
-		};
-
-		d.show();
-	},
-
-	salary_slip_based_on_timesheet: function(frm) {
-		frm.trigger("toggle_fields")
-	},
-
-	preview_salary_slip: function(frm) {
-		frappe.call({
-			method: "erpnext.payroll.doctype.salary_structure.salary_structure.get_employees",
-			args: {
-				salary_structure: frm.doc.name
-			},
-			callback: function(r) {
-				var employees = r.message;
-				if(!employees) return;
-				if (employees.length == 1){
-					frm.events.open_salary_slip(frm, employees[0]);
-				} else {
-						var d = new frappe.ui.Dialog({
-						title: __("Preview Salary Slip"),
-						fields: [
-							{
-								"label":__("Employee"),
-								"fieldname":"employee",
-								"fieldtype":"Select",
-								"reqd": true,
-								options: employees
-							}, {
-								fieldname:"fetch",
-								"label":__("Show Salary Slip"),
-								"fieldtype":"Button"
-							}
-						]
-					});
-					d.get_input("fetch").on("click", function() {
-						var values = d.get_values();
-						if(!values) return;
-							frm.events.open_salary_slip(frm, values.employee)
-
-					});
-					d.show();
-				}
-			}
-		});
-	},
-
-	open_salary_slip: function(frm, employee){
-		var print_format = frm.doc.salary_slip_based_on_timesheet ? "Salary Slip based on Timesheet" : "Salary Slip Standard";
-		frappe.call({
-			method: "erpnext.payroll.doctype.salary_structure.salary_structure.make_salary_slip",
-			args: {
-				source_name: frm.doc.name,
-				employee: employee,
-				as_print: 1,
-				print_format: print_format,
-				for_preview: 1
-			},
-			callback: function(r) {
-				var new_window = window.open();
-				new_window.document.write(r.message);
-			}
-		});
-	},
-
-	toggle_fields: function(frm) {
-		frm.toggle_display(['salary_component', 'hour_rate'], frm.doc.salary_slip_based_on_timesheet);
-		frm.toggle_reqd(['salary_component', 'hour_rate'], frm.doc.salary_slip_based_on_timesheet);
-		frm.toggle_reqd(['payroll_frequency'], !frm.doc.salary_slip_based_on_timesheet);
-	}
-});
-
-var validate_date = function(frm, cdt, cdn) {
-	var doc = locals[cdt][cdn];
-	if(doc.to_date && doc.from_date) {
-		var from_date = frappe.datetime.str_to_obj(doc.from_date);
-		var to_date = frappe.datetime.str_to_obj(doc.to_date);
-
-		if(to_date < from_date) {
-			frappe.model.set_value(cdt, cdn, "to_date", "");
-			frappe.throw(__("From Date cannot be greater than To Date"));
-		}
-	}
-}
-
-
-cur_frm.cscript.amount = function(doc, cdt, cdn){
-	calculate_totals(doc, cdt, cdn);
-};
-
-var calculate_totals = function(doc) {
-	var tbl1 = doc.earnings || [];
-	var tbl2 = doc.deductions || [];
-
-	var total_earn = 0; var total_ded = 0;
-	for(var i = 0; i < tbl1.length; i++){
-		total_earn += flt(tbl1[i].amount);
-	}
-	for(var j = 0; j < tbl2.length; j++){
-		total_ded += flt(tbl2[j].amount);
-	}
-	doc.total_earning = total_earn;
-	doc.total_deduction = total_ded;
-	doc.net_pay = 0.0
-	if(doc.salary_slip_based_on_timesheet == 0){
-		doc.net_pay = flt(total_earn) - flt(total_ded);
-	}
-
-	refresh_many(['total_earning', 'total_deduction', 'net_pay']);
-}
-
-cur_frm.cscript.validate = function(doc, cdt, cdn) {
-	calculate_totals(doc);
-}
-
-
-frappe.ui.form.on('Salary Detail', {
-	amount: function(frm) {
-		calculate_totals(frm.doc);
-	},
-
-	earnings_remove: function(frm) {
-		calculate_totals(frm.doc);
-	},
-
-	deductions_remove: function(frm) {
-		calculate_totals(frm.doc);
-	},
-
-	salary_component: function(frm, cdt, cdn) {
-		var child = locals[cdt][cdn];
-		if(child.salary_component){
-			frappe.call({
-				method: "frappe.client.get",
-				args: {
-					doctype: "Salary Component",
-					name: child.salary_component
-				},
-				callback: function(data) {
-					if(data.message){
-						var result = data.message;
-						frappe.model.set_value(cdt, cdn, 'condition', result.condition);
-						frappe.model.set_value(cdt, cdn, 'amount_based_on_formula', result.amount_based_on_formula);
-						if(result.amount_based_on_formula == 1){
-							frappe.model.set_value(cdt, cdn, 'formula', result.formula);
-						}
-						else{
-							frappe.model.set_value(cdt, cdn, 'amount', result.amount);
-						}
-						frappe.model.set_value(cdt, cdn, 'statistical_component', result.statistical_component);
-						frappe.model.set_value(cdt, cdn, 'depends_on_payment_days', result.depends_on_payment_days);
-						frappe.model.set_value(cdt, cdn, 'do_not_include_in_total', result.do_not_include_in_total);
-						frappe.model.set_value(cdt, cdn, 'variable_based_on_taxable_salary', result.variable_based_on_taxable_salary);
-						frappe.model.set_value(cdt, cdn, 'is_tax_applicable', result.is_tax_applicable);
-						frappe.model.set_value(cdt, cdn, 'is_flexible_benefit', result.is_flexible_benefit);
-						refresh_field("earnings");
-						refresh_field("deductions");
-					}
-				}
-			});
-		}
-	},
-
-	amount_based_on_formula: function(frm, cdt, cdn) {
-		var child = locals[cdt][cdn];
-		if(child.amount_based_on_formula == 1){
-			frappe.model.set_value(cdt, cdn, 'amount', null);
-		}
-		else{
-			frappe.model.set_value(cdt, cdn, 'formula', null);
-		}
-	}
-})
diff --git a/erpnext/payroll/doctype/salary_structure/salary_structure.json b/erpnext/payroll/doctype/salary_structure/salary_structure.json
deleted file mode 100644
index 8df9957..0000000
--- a/erpnext/payroll/doctype/salary_structure/salary_structure.json
+++ /dev/null
@@ -1,278 +0,0 @@
-{
- "actions": [],
- "allow_import": 1,
- "allow_rename": 1,
- "autoname": "Prompt",
- "creation": "2013-03-07 18:50:29",
- "doctype": "DocType",
- "document_type": "Document",
- "engine": "InnoDB",
- "field_order": [
-  "company",
-  "letter_head",
-  "column_break1",
-  "is_active",
-  "payroll_frequency",
-  "currency",
-  "is_default",
-  "time_sheet_earning_detail",
-  "salary_slip_based_on_timesheet",
-  "column_break_17",
-  "salary_component",
-  "hour_rate",
-  "leave_encashment_amount_per_day",
-  "max_benefits",
-  "earning_deduction",
-  "earnings",
-  "deductions",
-  "conditions_and_formula_variable_and_example",
-  "net_pay_detail",
-  "total_earning",
-  "total_deduction",
-  "column_break2",
-  "net_pay",
-  "account",
-  "mode_of_payment",
-  "column_break_28",
-  "payment_account",
-  "amended_from"
- ],
- "fields": [
-  {
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "label": "Company",
-   "options": "Company",
-   "remember_last_selected_value": 1,
-   "reqd": 1
-  },
-  {
-   "fieldname": "letter_head",
-   "fieldtype": "Link",
-   "label": "Letter Head",
-   "options": "Letter Head"
-  },
-  {
-   "fieldname": "column_break1",
-   "fieldtype": "Column Break",
-   "width": "50%"
-  },
-  {
-   "allow_on_submit": 1,
-   "default": "Yes",
-   "fieldname": "is_active",
-   "fieldtype": "Select",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Is Active",
-   "oldfieldname": "is_active",
-   "oldfieldtype": "Select",
-   "options": "\nYes\nNo",
-   "reqd": 1
-  },
-  {
-   "default": "Monthly",
-   "depends_on": "eval:(!doc.salary_slip_based_on_timesheet)",
-   "fieldname": "payroll_frequency",
-   "fieldtype": "Select",
-   "label": "Payroll Frequency",
-   "options": "\nMonthly\nFortnightly\nBimonthly\nWeekly\nDaily"
-  },
-  {
-   "default": "No",
-   "fieldname": "is_default",
-   "fieldtype": "Select",
-   "hidden": 1,
-   "label": "Is Default",
-   "no_copy": 1,
-   "options": "Yes\nNo",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "fieldname": "time_sheet_earning_detail",
-   "fieldtype": "Section Break"
-  },
-  {
-   "default": "0",
-   "fieldname": "salary_slip_based_on_timesheet",
-   "fieldtype": "Check",
-   "label": "Salary Slip Based on Timesheet"
-  },
-  {
-   "fieldname": "column_break_17",
-   "fieldtype": "Column Break"
-  },
-  {
-   "description": "Salary Component for timesheet based payroll.",
-   "fieldname": "salary_component",
-   "fieldtype": "Link",
-   "label": "Salary Component",
-   "options": "Salary Component"
-  },
-  {
-   "fieldname": "hour_rate",
-   "fieldtype": "Currency",
-   "label": "Hour Rate",
-   "options": "currency"
-  },
-  {
-   "fieldname": "leave_encashment_amount_per_day",
-   "fieldtype": "Currency",
-   "label": "Leave Encashment Amount Per Day",
-   "options": "currency"
-  },
-  {
-   "fieldname": "max_benefits",
-   "fieldtype": "Currency",
-   "label": "Max Benefits (Amount)",
-   "options": "currency"
-  },
-  {
-   "description": "Salary breakup based on Earning and Deduction.",
-   "fieldname": "earning_deduction",
-   "fieldtype": "Section Break",
-   "oldfieldname": "earning_deduction",
-   "oldfieldtype": "Section Break",
-   "precision": "2"
-  },
-  {
-   "fieldname": "earnings",
-   "fieldtype": "Table",
-   "label": "Earnings",
-   "oldfieldname": "earning_details",
-   "oldfieldtype": "Table",
-   "options": "Salary Detail"
-  },
-  {
-   "fieldname": "deductions",
-   "fieldtype": "Table",
-   "label": "Deductions",
-   "oldfieldname": "deduction_details",
-   "oldfieldtype": "Table",
-   "options": "Salary Detail"
-  },
-  {
-   "fieldname": "net_pay_detail",
-   "fieldtype": "Section Break",
-   "options": "Simple"
-  },
-  {
-   "fieldname": "column_break2",
-   "fieldtype": "Column Break",
-   "width": "50%"
-  },
-  {
-   "fieldname": "total_earning",
-   "fieldtype": "Currency",
-   "hidden": 1,
-   "label": "Total Earning",
-   "options": "currency",
-   "read_only": 1
-  },
-  {
-   "fieldname": "total_deduction",
-   "fieldtype": "Currency",
-   "hidden": 1,
-   "label": "Total Deduction",
-   "options": "currency",
-   "read_only": 1
-  },
-  {
-   "fieldname": "net_pay",
-   "fieldtype": "Currency",
-   "hidden": 1,
-   "label": "Net Pay",
-   "options": "currency",
-   "read_only": 1
-  },
-  {
-   "fieldname": "account",
-   "fieldtype": "Section Break",
-   "label": "Account"
-  },
-  {
-   "fieldname": "mode_of_payment",
-   "fieldtype": "Link",
-   "label": "Mode of Payment",
-   "options": "Mode of Payment"
-  },
-  {
-   "fieldname": "column_break_28",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "payment_account",
-   "fieldtype": "Link",
-   "label": "Payment Account",
-   "options": "Account"
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "Salary Structure",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "fieldname": "conditions_and_formula_variable_and_example",
-   "fieldtype": "HTML",
-   "label": "Conditions and Formula variable and example"
-  },
-  {
-   "fieldname": "currency",
-   "fieldtype": "Link",
-   "label": "Currency",
-   "options": "Currency",
-   "reqd": 1
-  }
- ],
- "icon": "fa fa-file-text",
- "idx": 1,
- "is_submittable": 1,
- "links": [],
- "modified": "2022-02-03 23:50:10.205676",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Salary Structure",
- "naming_rule": "Set by user",
- "owner": "Administrator",
- "permissions": [
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "import": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  }
- ],
- "show_name_in_global_search": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": []
-}
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/salary_structure/salary_structure.py b/erpnext/payroll/doctype/salary_structure/salary_structure.py
deleted file mode 100644
index edf17db..0000000
--- a/erpnext/payroll/doctype/salary_structure/salary_structure.py
+++ /dev/null
@@ -1,319 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.model.mapper import get_mapped_doc
-from frappe.utils import cint, cstr, flt
-
-import erpnext
-
-
-class SalaryStructure(Document):
-	def validate(self):
-		self.set_missing_values()
-		self.validate_amount()
-		self.strip_condition_and_formula_fields()
-		self.validate_max_benefits_with_flexi()
-		self.validate_component_based_on_tax_slab()
-
-	def set_missing_values(self):
-		overwritten_fields = [
-			"depends_on_payment_days",
-			"variable_based_on_taxable_salary",
-			"is_tax_applicable",
-			"is_flexible_benefit",
-		]
-		overwritten_fields_if_missing = ["amount_based_on_formula", "formula", "amount"]
-		for table in ["earnings", "deductions"]:
-			for d in self.get(table):
-				component_default_value = frappe.db.get_value(
-					"Salary Component",
-					cstr(d.salary_component),
-					overwritten_fields + overwritten_fields_if_missing,
-					as_dict=1,
-				)
-				if component_default_value:
-					for fieldname in overwritten_fields:
-						value = component_default_value.get(fieldname)
-						if d.get(fieldname) != value:
-							d.set(fieldname, value)
-
-					if not (d.get("amount") or d.get("formula")):
-						for fieldname in overwritten_fields_if_missing:
-							d.set(fieldname, component_default_value.get(fieldname))
-
-	def validate_component_based_on_tax_slab(self):
-		for row in self.deductions:
-			if row.variable_based_on_taxable_salary and (row.amount or row.formula):
-				frappe.throw(
-					_(
-						"Row #{0}: Cannot set amount or formula for Salary Component {1} with Variable Based On Taxable Salary"
-					).format(row.idx, row.salary_component)
-				)
-
-	def validate_amount(self):
-		if flt(self.net_pay) < 0 and self.salary_slip_based_on_timesheet:
-			frappe.throw(_("Net pay cannot be negative"))
-
-	def strip_condition_and_formula_fields(self):
-		# remove whitespaces from condition and formula fields
-		for row in self.earnings:
-			row.condition = row.condition.strip() if row.condition else ""
-			row.formula = row.formula.strip() if row.formula else ""
-
-		for row in self.deductions:
-			row.condition = row.condition.strip() if row.condition else ""
-			row.formula = row.formula.strip() if row.formula else ""
-
-	def validate_max_benefits_with_flexi(self):
-		have_a_flexi = False
-		if self.earnings:
-			flexi_amount = 0
-			for earning_component in self.earnings:
-				if earning_component.is_flexible_benefit == 1:
-					have_a_flexi = True
-					max_of_component = frappe.db.get_value(
-						"Salary Component", earning_component.salary_component, "max_benefit_amount"
-					)
-					flexi_amount += max_of_component
-
-			if have_a_flexi and flt(self.max_benefits) == 0:
-				frappe.throw(_("Max benefits should be greater than zero to dispense benefits"))
-			if have_a_flexi and flexi_amount and flt(self.max_benefits) > flexi_amount:
-				frappe.throw(
-					_(
-						"Total flexible benefit component amount {0} should not be less than max benefits {1}"
-					).format(flexi_amount, self.max_benefits)
-				)
-		if not have_a_flexi and flt(self.max_benefits) > 0:
-			frappe.throw(
-				_("Salary Structure should have flexible benefit component(s) to dispense benefit amount")
-			)
-
-	def get_employees(self, **kwargs):
-		conditions, values = [], []
-		for field, value in kwargs.items():
-			if value:
-				conditions.append("{0}=%s".format(field))
-				values.append(value)
-
-		condition_str = " and " + " and ".join(conditions) if conditions else ""
-
-		employees = frappe.db.sql_list(
-			"select name from tabEmployee where status='Active' {condition}".format(
-				condition=condition_str
-			),
-			tuple(values),
-		)
-
-		return employees
-
-	@frappe.whitelist()
-	def assign_salary_structure(
-		self,
-		grade=None,
-		department=None,
-		designation=None,
-		employee=None,
-		payroll_payable_account=None,
-		from_date=None,
-		base=None,
-		variable=None,
-		income_tax_slab=None,
-	):
-		employees = self.get_employees(
-			company=self.company, grade=grade, department=department, designation=designation, name=employee
-		)
-
-		if employees:
-			if len(employees) > 20:
-				frappe.enqueue(
-					assign_salary_structure_for_employees,
-					timeout=600,
-					employees=employees,
-					salary_structure=self,
-					payroll_payable_account=payroll_payable_account,
-					from_date=from_date,
-					base=base,
-					variable=variable,
-					income_tax_slab=income_tax_slab,
-				)
-			else:
-				assign_salary_structure_for_employees(
-					employees,
-					self,
-					payroll_payable_account=payroll_payable_account,
-					from_date=from_date,
-					base=base,
-					variable=variable,
-					income_tax_slab=income_tax_slab,
-				)
-		else:
-			frappe.msgprint(_("No Employee Found"))
-
-
-def assign_salary_structure_for_employees(
-	employees,
-	salary_structure,
-	payroll_payable_account=None,
-	from_date=None,
-	base=None,
-	variable=None,
-	income_tax_slab=None,
-):
-	salary_structures_assignments = []
-	existing_assignments_for = get_existing_assignments(employees, salary_structure, from_date)
-	count = 0
-	for employee in employees:
-		if employee in existing_assignments_for:
-			continue
-		count += 1
-
-		salary_structures_assignment = create_salary_structures_assignment(
-			employee, salary_structure, payroll_payable_account, from_date, base, variable, income_tax_slab
-		)
-		salary_structures_assignments.append(salary_structures_assignment)
-		frappe.publish_progress(
-			count * 100 / len(set(employees) - set(existing_assignments_for)),
-			title=_("Assigning Structures..."),
-		)
-
-	if salary_structures_assignments:
-		frappe.msgprint(_("Structures have been assigned successfully"))
-
-
-def create_salary_structures_assignment(
-	employee,
-	salary_structure,
-	payroll_payable_account,
-	from_date,
-	base,
-	variable,
-	income_tax_slab=None,
-):
-	if not payroll_payable_account:
-		payroll_payable_account = frappe.db.get_value(
-			"Company", salary_structure.company, "default_payroll_payable_account"
-		)
-		if not payroll_payable_account:
-			frappe.throw(_('Please set "Default Payroll Payable Account" in Company Defaults'))
-	payroll_payable_account_currency = frappe.db.get_value(
-		"Account", payroll_payable_account, "account_currency"
-	)
-	company_curency = erpnext.get_company_currency(salary_structure.company)
-	if (
-		payroll_payable_account_currency != salary_structure.currency
-		and payroll_payable_account_currency != company_curency
-	):
-		frappe.throw(
-			_("Invalid Payroll Payable Account. The account currency must be {0} or {1}").format(
-				salary_structure.currency, company_curency
-			)
-		)
-
-	assignment = frappe.new_doc("Salary Structure Assignment")
-	assignment.employee = employee
-	assignment.salary_structure = salary_structure.name
-	assignment.company = salary_structure.company
-	assignment.currency = salary_structure.currency
-	assignment.payroll_payable_account = payroll_payable_account
-	assignment.from_date = from_date
-	assignment.base = base
-	assignment.variable = variable
-	assignment.income_tax_slab = income_tax_slab
-	assignment.save(ignore_permissions=True)
-	assignment.submit()
-	return assignment.name
-
-
-def get_existing_assignments(employees, salary_structure, from_date):
-	salary_structures_assignments = frappe.db.sql_list(
-		"""
-		select distinct employee from `tabSalary Structure Assignment`
-		where salary_structure=%s and employee in (%s)
-		and from_date=%s  and company= %s and docstatus=1
-	"""
-		% ("%s", ", ".join(["%s"] * len(employees)), "%s", "%s"),
-		[salary_structure.name] + employees + [from_date] + [salary_structure.company],
-	)
-	if salary_structures_assignments:
-		frappe.msgprint(
-			_(
-				"Skipping Salary Structure Assignment for the following employees, as Salary Structure Assignment records already exists against them. {0}"
-			).format("\n".join(salary_structures_assignments))
-		)
-	return salary_structures_assignments
-
-
-@frappe.whitelist()
-def make_salary_slip(
-	source_name,
-	target_doc=None,
-	employee=None,
-	posting_date=None,
-	as_print=False,
-	print_format=None,
-	for_preview=0,
-	ignore_permissions=False,
-):
-	def postprocess(source, target):
-		if employee:
-			employee_details = frappe.db.get_value(
-				"Employee", employee, ["employee_name", "branch", "designation", "department"], as_dict=1
-			)
-			target.employee = employee
-			target.employee_name = employee_details.employee_name
-			target.branch = employee_details.branch
-			target.designation = employee_details.designation
-			target.department = employee_details.department
-
-			if posting_date:
-				target.posting_date = posting_date
-
-		target.run_method("process_salary_structure", for_preview=for_preview)
-
-	doc = get_mapped_doc(
-		"Salary Structure",
-		source_name,
-		{
-			"Salary Structure": {
-				"doctype": "Salary Slip",
-				"field_map": {
-					"total_earning": "gross_pay",
-					"name": "salary_structure",
-					"currency": "currency",
-				},
-			}
-		},
-		target_doc,
-		postprocess,
-		ignore_child_tables=True,
-		ignore_permissions=ignore_permissions,
-	)
-
-	if cint(as_print):
-		doc.name = "Preview for {0}".format(employee)
-		return frappe.get_print(doc.doctype, doc.name, doc=doc, print_format=print_format)
-	else:
-		return doc
-
-
-@frappe.whitelist()
-def get_employees(salary_structure):
-	employees = frappe.get_list(
-		"Salary Structure Assignment",
-		filters={"salary_structure": salary_structure, "docstatus": 1},
-		fields=["employee"],
-	)
-
-	if not employees:
-		frappe.throw(
-			_(
-				"There's no Employee with Salary Structure: {0}. Assign {1} to an Employee to preview Salary Slip"
-			).format(salary_structure, salary_structure)
-		)
-
-	return list(set([d.employee for d in employees]))
diff --git a/erpnext/payroll/doctype/salary_structure/salary_structure_dashboard.py b/erpnext/payroll/doctype/salary_structure/salary_structure_dashboard.py
deleted file mode 100644
index cf363b4..0000000
--- a/erpnext/payroll/doctype/salary_structure/salary_structure_dashboard.py
+++ /dev/null
@@ -1,9 +0,0 @@
-def get_data():
-	return {
-		"fieldname": "salary_structure",
-		"non_standard_fieldnames": {"Employee Grade": "default_salary_structure"},
-		"transactions": [
-			{"items": ["Salary Structure Assignment", "Salary Slip"]},
-			{"items": ["Employee Grade"]},
-		],
-	}
diff --git a/erpnext/payroll/doctype/salary_structure/test_salary_structure.py b/erpnext/payroll/doctype/salary_structure/test_salary_structure.py
deleted file mode 100644
index 8cc2ea3..0000000
--- a/erpnext/payroll/doctype/salary_structure/test_salary_structure.py
+++ /dev/null
@@ -1,283 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and Contributors
-# See license.txt
-
-import unittest
-
-import frappe
-from frappe.tests.utils import FrappeTestCase
-from frappe.utils import add_years, date_diff, get_first_day, nowdate
-from frappe.utils.make_random import get_random
-
-import erpnext
-from erpnext.hr.doctype.employee.test_employee import make_employee
-from erpnext.payroll.doctype.employee_tax_exemption_declaration.test_employee_tax_exemption_declaration import (
-	create_payroll_period,
-)
-from erpnext.payroll.doctype.salary_slip.test_salary_slip import (
-	create_tax_slab,
-	make_deduction_salary_component,
-	make_earning_salary_component,
-	make_employee_salary_slip,
-)
-from erpnext.payroll.doctype.salary_structure.salary_structure import make_salary_slip
-
-test_dependencies = ["Fiscal Year"]
-
-
-class TestSalaryStructure(FrappeTestCase):
-	def setUp(self):
-		for dt in ["Salary Slip", "Salary Structure", "Salary Structure Assignment"]:
-			frappe.db.sql("delete from `tab%s`" % dt)
-
-		self.make_holiday_list()
-		frappe.db.set_value(
-			"Company",
-			erpnext.get_default_company(),
-			"default_holiday_list",
-			"Salary Structure Test Holiday List",
-		)
-		make_employee("test_employee@salary.com")
-		make_employee("test_employee_2@salary.com")
-
-	def make_holiday_list(self):
-		if not frappe.db.get_value("Holiday List", "Salary Structure Test Holiday List"):
-			holiday_list = frappe.get_doc(
-				{
-					"doctype": "Holiday List",
-					"holiday_list_name": "Salary Structure Test Holiday List",
-					"from_date": nowdate(),
-					"to_date": add_years(nowdate(), 1),
-					"weekly_off": "Sunday",
-				}
-			).insert()
-			holiday_list.get_weekly_off_dates()
-			holiday_list.save()
-
-	def test_salary_structure_deduction_based_on_gross_pay(self):
-
-		emp = make_employee("test_employee_3@salary.com")
-
-		sal_struct = make_salary_structure("Salary Structure 2", "Monthly", dont_submit=True)
-
-		sal_struct.earnings = [sal_struct.earnings[0]]
-		sal_struct.earnings[0].amount_based_on_formula = 1
-		sal_struct.earnings[0].formula = "base"
-
-		sal_struct.deductions = [sal_struct.deductions[0]]
-
-		sal_struct.deductions[0].amount_based_on_formula = 1
-		sal_struct.deductions[0].condition = "gross_pay > 100"
-		sal_struct.deductions[0].formula = "gross_pay * 0.2"
-
-		sal_struct.submit()
-
-		assignment = create_salary_structure_assignment(emp, "Salary Structure 2")
-		ss = make_salary_slip(sal_struct.name, employee=emp)
-
-		self.assertEqual(assignment.base * 0.2, ss.deductions[0].amount)
-
-	def test_amount_totals(self):
-		frappe.db.set_value("Payroll Settings", None, "include_holidays_in_total_working_days", 0)
-		sal_slip = frappe.get_value("Salary Slip", {"employee_name": "test_employee_2@salary.com"})
-		if not sal_slip:
-			sal_slip = make_employee_salary_slip(
-				"test_employee_2@salary.com", "Monthly", "Salary Structure Sample"
-			)
-			self.assertEqual(sal_slip.get("salary_structure"), "Salary Structure Sample")
-			self.assertEqual(sal_slip.get("earnings")[0].amount, 50000)
-			self.assertEqual(sal_slip.get("earnings")[1].amount, 3000)
-			self.assertEqual(sal_slip.get("earnings")[2].amount, 25000)
-			self.assertEqual(sal_slip.get("gross_pay"), 78000)
-			self.assertEqual(sal_slip.get("deductions")[0].amount, 200)
-			self.assertEqual(sal_slip.get("net_pay"), 78000 - sal_slip.get("total_deduction"))
-
-	def test_whitespaces_in_formula_conditions_fields(self):
-		salary_structure = make_salary_structure("Salary Structure Sample", "Monthly", dont_submit=True)
-
-		for row in salary_structure.earnings:
-			row.formula = "\n%s\n\n" % row.formula
-			row.condition = "\n%s\n\n" % row.condition
-
-		for row in salary_structure.deductions:
-			row.formula = "\n%s\n\n" % row.formula
-			row.condition = "\n%s\n\n" % row.condition
-
-		salary_structure.save()
-
-		for row in salary_structure.earnings:
-			self.assertFalse("\n" in row.formula or "\n" in row.condition)
-
-		for row in salary_structure.deductions:
-			self.assertFalse(("\n" in row.formula) or ("\n" in row.condition))
-
-	def test_salary_structures_assignment(self):
-		company_currency = erpnext.get_default_currency()
-		salary_structure = make_salary_structure(
-			"Salary Structure Sample", "Monthly", currency=company_currency
-		)
-		employee = "test_assign_stucture@salary.com"
-		employee_doc_name = make_employee(employee)
-		# clear the already assigned stuctures
-		frappe.db.sql(
-			"""delete from `tabSalary Structure Assignment` where employee=%s and salary_structure=%s """,
-			("test_assign_stucture@salary.com", salary_structure.name),
-		)
-		# test structure_assignment
-		salary_structure.assign_salary_structure(
-			employee=employee_doc_name, from_date="2013-01-01", base=5000, variable=200
-		)
-		salary_structure_assignment = frappe.get_doc(
-			"Salary Structure Assignment", {"employee": employee_doc_name, "from_date": "2013-01-01"}
-		)
-		self.assertEqual(salary_structure_assignment.docstatus, 1)
-		self.assertEqual(salary_structure_assignment.base, 5000)
-		self.assertEqual(salary_structure_assignment.variable, 200)
-
-	def test_employee_grade_defaults(self):
-		salary_structure = make_salary_structure(
-			"Salary Structure - Lead", "Monthly", currency="INR", company="_Test Company"
-		)
-		create_employee_grade("Lead", salary_structure.name)
-		employee = make_employee("test_employee_grade@salary.com", company="_Test Company", grade="Lead")
-
-		# structure assignment should have the default salary structure and base pay
-		salary_structure.assign_salary_structure(employee=employee, from_date=nowdate())
-		structure, base = frappe.db.get_value(
-			"Salary Structure Assignment",
-			{"employee": employee, "salary_structure": salary_structure.name, "from_date": nowdate()},
-			["salary_structure", "base"],
-		)
-		self.assertEqual(structure, salary_structure.name)
-		self.assertEqual(base, 50000)
-
-	def test_multi_currency_salary_structure(self):
-		make_employee("test_muti_currency_employee@salary.com")
-		sal_struct = make_salary_structure("Salary Structure Multi Currency", "Monthly", currency="USD")
-		self.assertEqual(sal_struct.currency, "USD")
-
-
-def make_salary_structure(
-	salary_structure,
-	payroll_frequency,
-	employee=None,
-	from_date=None,
-	dont_submit=False,
-	other_details=None,
-	test_tax=False,
-	company=None,
-	currency=erpnext.get_default_currency(),
-	payroll_period=None,
-	include_flexi_benefits=False,
-):
-	if frappe.db.exists("Salary Structure", salary_structure):
-		frappe.db.delete("Salary Structure", salary_structure)
-
-	details = {
-		"doctype": "Salary Structure",
-		"name": salary_structure,
-		"company": company or erpnext.get_default_company(),
-		"earnings": make_earning_salary_component(
-			setup=True,
-			test_tax=test_tax,
-			company_list=["_Test Company"],
-			include_flexi_benefits=include_flexi_benefits,
-		),
-		"deductions": make_deduction_salary_component(
-			setup=True, test_tax=test_tax, company_list=["_Test Company"]
-		),
-		"payroll_frequency": payroll_frequency,
-		"payment_account": get_random("Account", filters={"account_currency": currency}),
-		"currency": currency,
-	}
-	if other_details and isinstance(other_details, dict):
-		details.update(other_details)
-	salary_structure_doc = frappe.get_doc(details)
-	salary_structure_doc.insert()
-	if not dont_submit:
-		salary_structure_doc.submit()
-
-	filters = {"employee": employee, "docstatus": 1}
-	if not from_date and payroll_period:
-		from_date = payroll_period.start_date
-
-	if from_date:
-		filters["from_date"] = from_date
-
-	if (
-		employee
-		and not frappe.db.get_value("Salary Structure Assignment", filters)
-		and salary_structure_doc.docstatus == 1
-	):
-		create_salary_structure_assignment(
-			employee,
-			salary_structure,
-			from_date=from_date,
-			company=company,
-			currency=currency,
-			payroll_period=payroll_period,
-		)
-
-	return salary_structure_doc
-
-
-def create_salary_structure_assignment(
-	employee,
-	salary_structure,
-	from_date=None,
-	company=None,
-	currency=erpnext.get_default_currency(),
-	payroll_period=None,
-	base=None,
-	allow_duplicate=False,
-):
-	if not allow_duplicate and frappe.db.exists(
-		"Salary Structure Assignment", {"employee": employee}
-	):
-		frappe.db.sql("""delete from `tabSalary Structure Assignment` where employee=%s""", (employee))
-
-	if not payroll_period:
-		payroll_period = create_payroll_period()
-
-	income_tax_slab = frappe.db.get_value("Income Tax Slab", {"currency": currency})
-
-	if not income_tax_slab:
-		income_tax_slab = create_tax_slab(payroll_period, allow_tax_exemption=True, currency=currency)
-
-	salary_structure_assignment = frappe.new_doc("Salary Structure Assignment")
-	salary_structure_assignment.employee = employee
-	salary_structure_assignment.base = base or 50000
-	salary_structure_assignment.variable = 5000
-
-	if not from_date:
-		from_date = get_first_day(nowdate())
-		joining_date = frappe.get_cached_value("Employee", employee, "date_of_joining")
-		if date_diff(joining_date, from_date) > 0:
-			from_date = joining_date
-
-	salary_structure_assignment.from_date = from_date
-	salary_structure_assignment.salary_structure = salary_structure
-	salary_structure_assignment.currency = currency
-	salary_structure_assignment.payroll_payable_account = get_payable_account(company)
-	salary_structure_assignment.company = company or erpnext.get_default_company()
-	salary_structure_assignment.save(ignore_permissions=True)
-	salary_structure_assignment.income_tax_slab = income_tax_slab
-	salary_structure_assignment.submit()
-	return salary_structure_assignment
-
-
-def get_payable_account(company=None):
-	if not company:
-		company = erpnext.get_default_company()
-	return frappe.db.get_value("Company", company, "default_payroll_payable_account")
-
-
-def create_employee_grade(grade, default_structure=None):
-	if not frappe.db.exists("Employee Grade", grade):
-		frappe.get_doc(
-			{
-				"doctype": "Employee Grade",
-				"__newname": grade,
-				"default_salary_structure": default_structure,
-				"default_base_pay": 50000,
-			}
-		).insert()
diff --git a/erpnext/payroll/doctype/salary_structure_assignment/__init__.py b/erpnext/payroll/doctype/salary_structure_assignment/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/doctype/salary_structure_assignment/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/doctype/salary_structure_assignment/salary_structure_assignment.js b/erpnext/payroll/doctype/salary_structure_assignment/salary_structure_assignment.js
deleted file mode 100644
index 220bfbf..0000000
--- a/erpnext/payroll/doctype/salary_structure_assignment/salary_structure_assignment.js
+++ /dev/null
@@ -1,76 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Salary Structure Assignment', {
-	setup: function(frm) {
-		frm.set_query("employee", function() {
-			return {
-				query: "erpnext.controllers.queries.employee_query",
-			}
-		});
-		frm.set_query("salary_structure", function() {
-			return {
-				filters: {
-					company: frm.doc.company,
-					docstatus: 1,
-					is_active: "Yes"
-				}
-			}
-		});
-
-		frm.set_query("income_tax_slab", function() {
-			return {
-				filters: {
-					company: frm.doc.company,
-					docstatus: 1,
-					disabled: 0,
-					currency: frm.doc.currency
-				}
-			};
-		});
-
-		frm.set_query("payroll_payable_account", function() {
-			var company_currency = erpnext.get_currency(frm.doc.company);
-			return {
-				filters: {
-					"company": frm.doc.company,
-					"root_type": "Liability",
-					"is_group": 0,
-					"account_currency": ["in", [frm.doc.currency, company_currency]],
-				}
-			}
-		});
-
-		frm.set_query("cost_center", "payroll_cost_centers", function() {
-			return {
-				filters: {
-					"company": frm.doc.company,
-					"is_group": 0
-				}
-			};
-		});
-	},
-
-	employee: function(frm) {
-		if (frm.doc.employee) {
-			frappe.call({
-				method: "set_payroll_cost_centers",
-				doc: frm.doc,
-				callback: function(data) {
-					refresh_field("payroll_cost_centers");
-				}
-			});
-		}
-		else {
-			frm.set_value("payroll_cost_centers", []);
-		}
-	},
-
-	company: function(frm) {
-		if (frm.doc.company) {
-			frappe.db.get_value("Company", frm.doc.company, "default_payroll_payable_account", (r) => {
-				frm.set_value("payroll_payable_account", r.default_payroll_payable_account);
-			});
-		}
-	}
-});
diff --git a/erpnext/payroll/doctype/salary_structure_assignment/salary_structure_assignment.json b/erpnext/payroll/doctype/salary_structure_assignment/salary_structure_assignment.json
deleted file mode 100644
index 91d49a0..0000000
--- a/erpnext/payroll/doctype/salary_structure_assignment/salary_structure_assignment.json
+++ /dev/null
@@ -1,231 +0,0 @@
-{
- "actions": [],
- "allow_import": 1,
- "autoname": "HR-SSA-.YY.-.MM.-.#####",
- "creation": "2018-04-13 16:38:41.769237",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "employee",
-  "employee_name",
-  "department",
-  "grade",
-  "company",
-  "payroll_payable_account",
-  "column_break_6",
-  "designation",
-  "salary_structure",
-  "from_date",
-  "income_tax_slab",
-  "currency",
-  "section_break_7",
-  "base",
-  "column_break_9",
-  "variable",
-  "amended_from",
-  "section_break_17",
-  "payroll_cost_centers"
- ],
- "fields": [
-  {
-   "fieldname": "employee",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Employee",
-   "options": "Employee",
-   "reqd": 1,
-   "search_index": 1
-  },
-  {
-   "fetch_from": "employee.employee_name",
-   "fieldname": "employee_name",
-   "fieldtype": "Data",
-   "label": "Employee Name",
-   "read_only": 1
-  },
-  {
-   "fetch_from": "employee.department",
-   "fieldname": "department",
-   "fieldtype": "Link",
-   "in_standard_filter": 1,
-   "label": "Department",
-   "options": "Department",
-   "read_only": 1
-  },
-  {
-   "fetch_from": "employee.designation",
-   "fieldname": "designation",
-   "fieldtype": "Link",
-   "in_standard_filter": 1,
-   "label": "Designation",
-   "options": "Designation",
-   "read_only": 1
-  },
-  {
-   "fieldname": "column_break_6",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fetch_from": "grade.default_salary_structure",
-   "fetch_if_empty": 1,
-   "fieldname": "salary_structure",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Salary Structure",
-   "options": "Salary Structure",
-   "reqd": 1,
-   "search_index": 1
-  },
-  {
-   "fieldname": "from_date",
-   "fieldtype": "Date",
-   "label": "From Date",
-   "reqd": 1
-  },
-  {
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "label": "Company",
-   "options": "Company",
-   "read_only": 1,
-   "reqd": 1
-  },
-  {
-   "fieldname": "section_break_7",
-   "fieldtype": "Section Break",
-   "label": "Base & Variable"
-  },
-  {
-   "fetch_from": "grade.default_base_pay",
-   "fetch_if_empty": 1,
-   "fieldname": "base",
-   "fieldtype": "Currency",
-   "label": "Base",
-   "options": "currency"
-  },
-  {
-   "fieldname": "column_break_9",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "variable",
-   "fieldtype": "Currency",
-   "label": "Variable",
-   "options": "currency"
-  },
-  {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "Salary Structure Assignment",
-   "print_hide": 1,
-   "read_only": 1
-  },
-  {
-   "depends_on": "salary_structure",
-   "fieldname": "income_tax_slab",
-   "fieldtype": "Link",
-   "label": "Income Tax Slab",
-   "options": "Income Tax Slab"
-  },
-  {
-   "depends_on": "eval:(doc.docstatus==1 || doc.salary_structure)",
-   "fetch_from": "salary_structure.currency",
-   "fieldname": "currency",
-   "fieldtype": "Link",
-   "label": "Currency",
-   "options": "Currency",
-   "print_hide": 1,
-   "read_only": 1,
-   "reqd": 1
-  },
-  {
-   "depends_on": "employee",
-   "fieldname": "payroll_payable_account",
-   "fieldtype": "Link",
-   "label": "Payroll Payable Account",
-   "options": "Account"
-  },
-  {
-   "collapsible": 1,
-   "depends_on": "employee",
-   "fieldname": "section_break_17",
-   "fieldtype": "Section Break",
-   "label": "Payroll Cost Centers"
-  },
-  {
-   "allow_on_submit": 1,
-   "fieldname": "payroll_cost_centers",
-   "fieldtype": "Table",
-   "label": "Cost Centers",
-   "options": "Employee Cost Center"
-  },
-  {
-   "fetch_from": "employee.grade",
-   "fieldname": "grade",
-   "fieldtype": "Link",
-   "label": "Grade",
-   "options": "Employee Grade",
-   "read_only": 1
-  }
- ],
- "is_submittable": 1,
- "links": [],
- "modified": "2022-05-06 12:18:36.972336",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Salary Structure Assignment",
- "naming_rule": "Expression (old style)",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "amend": 1,
-   "cancel": 1,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR Manager",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "share": 1,
-   "submit": 1,
-   "write": 1
-  }
- ],
- "search_fields": "employee_name, salary_structure",
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": [],
- "title_field": "employee_name",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/salary_structure_assignment/salary_structure_assignment.py b/erpnext/payroll/doctype/salary_structure_assignment/salary_structure_assignment.py
deleted file mode 100644
index 28b5eb1..0000000
--- a/erpnext/payroll/doctype/salary_structure_assignment/salary_structure_assignment.py
+++ /dev/null
@@ -1,134 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.utils import flt, getdate
-
-
-class DuplicateAssignment(frappe.ValidationError):
-	pass
-
-
-class SalaryStructureAssignment(Document):
-	def validate(self):
-		self.validate_dates()
-		self.validate_income_tax_slab()
-		self.set_payroll_payable_account()
-		if not self.get("payroll_cost_centers"):
-			self.set_payroll_cost_centers()
-
-		self.validate_cost_center_distribution()
-
-	def validate_dates(self):
-		joining_date, relieving_date = frappe.db.get_value(
-			"Employee", self.employee, ["date_of_joining", "relieving_date"]
-		)
-
-		if self.from_date:
-			if frappe.db.exists(
-				"Salary Structure Assignment",
-				{"employee": self.employee, "from_date": self.from_date, "docstatus": 1},
-			):
-				frappe.throw(_("Salary Structure Assignment for Employee already exists"), DuplicateAssignment)
-
-			if joining_date and getdate(self.from_date) < joining_date:
-				frappe.throw(
-					_("From Date {0} cannot be before employee's joining Date {1}").format(
-						self.from_date, joining_date
-					)
-				)
-
-			# flag - old_employee is for migrating the old employees data via patch
-			if relieving_date and getdate(self.from_date) > relieving_date and not self.flags.old_employee:
-				frappe.throw(
-					_("From Date {0} cannot be after employee's relieving Date {1}").format(
-						self.from_date, relieving_date
-					)
-				)
-
-	def validate_income_tax_slab(self):
-		if not self.income_tax_slab:
-			return
-
-		income_tax_slab_currency = frappe.db.get_value(
-			"Income Tax Slab", self.income_tax_slab, "currency"
-		)
-		if self.currency != income_tax_slab_currency:
-			frappe.throw(
-				_("Currency of selected Income Tax Slab should be {0} instead of {1}").format(
-					self.currency, income_tax_slab_currency
-				)
-			)
-
-	def set_payroll_payable_account(self):
-		if not self.payroll_payable_account:
-			payroll_payable_account = frappe.db.get_value(
-				"Company", self.company, "default_payroll_payable_account"
-			)
-			if not payroll_payable_account:
-				payroll_payable_account = frappe.db.get_value(
-					"Account",
-					{
-						"account_name": _("Payroll Payable"),
-						"company": self.company,
-						"account_currency": frappe.db.get_value("Company", self.company, "default_currency"),
-						"is_group": 0,
-					},
-				)
-			self.payroll_payable_account = payroll_payable_account
-
-	@frappe.whitelist()
-	def set_payroll_cost_centers(self):
-		self.payroll_cost_centers = []
-		default_payroll_cost_center = self.get_payroll_cost_center()
-		if default_payroll_cost_center:
-			self.append(
-				"payroll_cost_centers", {"cost_center": default_payroll_cost_center, "percentage": 100}
-			)
-
-	def get_payroll_cost_center(self):
-		payroll_cost_center = frappe.db.get_value("Employee", self.employee, "payroll_cost_center")
-		if not payroll_cost_center and self.department:
-			payroll_cost_center = frappe.db.get_value("Department", self.department, "payroll_cost_center")
-
-		return payroll_cost_center
-
-	def validate_cost_center_distribution(self):
-		if self.get("payroll_cost_centers"):
-			total_percentage = sum([flt(d.percentage) for d in self.get("payroll_cost_centers", [])])
-			if total_percentage != 100:
-				frappe.throw(_("Total percentage against cost centers should be 100"))
-
-
-def get_assigned_salary_structure(employee, on_date):
-	if not employee or not on_date:
-		return None
-	salary_structure = frappe.db.sql(
-		"""
-		select salary_structure from `tabSalary Structure Assignment`
-		where employee=%(employee)s
-		and docstatus = 1
-		and %(on_date)s >= from_date order by from_date desc limit 1""",
-		{
-			"employee": employee,
-			"on_date": on_date,
-		},
-	)
-	return salary_structure[0][0] if salary_structure else None
-
-
-@frappe.whitelist()
-def get_employee_currency(employee):
-	employee_currency = frappe.db.get_value(
-		"Salary Structure Assignment", {"employee": employee}, "currency"
-	)
-	if not employee_currency:
-		frappe.throw(
-			_("There is no Salary Structure assigned to {0}. First assign a Salary Stucture.").format(
-				employee
-			)
-		)
-	return employee_currency
diff --git a/erpnext/payroll/doctype/salary_structure_assignment/test_salary_structure_assignment.py b/erpnext/payroll/doctype/salary_structure_assignment/test_salary_structure_assignment.py
deleted file mode 100644
index 56dd0d0..0000000
--- a/erpnext/payroll/doctype/salary_structure_assignment/test_salary_structure_assignment.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-
-class TestSalaryStructureAssignment(unittest.TestCase):
-	pass
diff --git a/erpnext/payroll/doctype/taxable_salary_slab/__init__.py b/erpnext/payroll/doctype/taxable_salary_slab/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/doctype/taxable_salary_slab/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/doctype/taxable_salary_slab/taxable_salary_slab.json b/erpnext/payroll/doctype/taxable_salary_slab/taxable_salary_slab.json
deleted file mode 100644
index 65d3824..0000000
--- a/erpnext/payroll/doctype/taxable_salary_slab/taxable_salary_slab.json
+++ /dev/null
@@ -1,68 +0,0 @@
-{
- "actions": [],
- "creation": "2018-04-13 17:42:13.516032",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "from_amount",
-  "to_amount",
-  "percent_deduction",
-  "condition",
-  "column_break_5",
-  "html_6"
- ],
- "fields": [
-  {
-   "default": "0",
-   "fieldname": "from_amount",
-   "fieldtype": "Currency",
-   "in_list_view": 1,
-   "label": "From Amount",
-   "options": "currency",
-   "reqd": 1
-  },
-  {
-   "fieldname": "to_amount",
-   "fieldtype": "Currency",
-   "in_list_view": 1,
-   "label": "To Amount",
-   "options": "currency"
-  },
-  {
-   "default": "0",
-   "fieldname": "percent_deduction",
-   "fieldtype": "Percent",
-   "in_list_view": 1,
-   "label": "Percent Deduction",
-   "reqd": 1
-  },
-  {
-   "fieldname": "condition",
-   "fieldtype": "Code",
-   "in_list_view": 1,
-   "label": "Condition"
-  },
-  {
-   "fieldname": "column_break_5",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "html_6",
-   "fieldtype": "HTML",
-   "options": "<h4>Condition Examples</h4>\n<ol>\n<li>Applying tax if employee born between 31-12-1937 and 01-01-1958 (Employees aged 60 to 80)<br>\n<code>Condition: date_of_birth&gt;date(1937, 12, 31) and date_of_birth&lt;date(1958, 01, 01)</code></li><br><li>Applying tax by employee gender<br>\n<code>Condition: gender==\"Male\"</code></li><br>\n<li>Applying tax by Salary Component<br>\n<code>Condition: base &gt; 10000</code></li></ol>"
-  }
- ],
- "istable": 1,
- "links": [],
- "modified": "2020-10-19 13:44:39.549337",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Taxable Salary Slab",
- "owner": "Administrator",
- "permissions": [],
- "quick_entry": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/taxable_salary_slab/taxable_salary_slab.py b/erpnext/payroll/doctype/taxable_salary_slab/taxable_salary_slab.py
deleted file mode 100644
index d1ccbe3..0000000
--- a/erpnext/payroll/doctype/taxable_salary_slab/taxable_salary_slab.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-# import frappe
-from frappe.model.document import Document
-
-
-class TaxableSalarySlab(Document):
-	pass
diff --git a/erpnext/payroll/module_onboarding/payroll/payroll.json b/erpnext/payroll/module_onboarding/payroll/payroll.json
deleted file mode 100644
index b5226b2..0000000
--- a/erpnext/payroll/module_onboarding/payroll/payroll.json
+++ /dev/null
@@ -1,50 +0,0 @@
-{
- "allow_roles": [
-  {
-   "role": "HR Manager"
-  },
-  {
-   "role": "HR User"
-  }
- ],
- "creation": "2020-06-01 12:10:52.560472",
- "docstatus": 0,
- "doctype": "Module Onboarding",
- "documentation_url": "https://docs.erpnext.com/docs/user/manual/en/human-resources/payroll-entry",
- "idx": 0,
- "is_complete": 0,
- "modified": "2020-07-08 14:06:13.994310",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Payroll",
- "owner": "Administrator",
- "steps": [
-  {
-   "step": "Create Employee"
-  },
-  {
-   "step": "Create Salary Component"
-  },
-  {
-   "step": "Create Payroll Period"
-  },
-  {
-   "step": "Create Income Tax Slab"
-  },
-  {
-   "step": "Create Salary Structure"
-  },
-  {
-   "step": "Assign Salary Structure"
-  },
-  {
-   "step": "Create Salary Slip"
-  },
-  {
-   "step": "Payroll Settings"
-  }
- ],
- "subtitle": "Salary, Compensation, and more.",
- "success_message": "The Payroll Module is all set up!",
- "title": "Let's Set Up the Payroll Module. "
-}
\ No newline at end of file
diff --git a/erpnext/payroll/notification/as b/erpnext/payroll/notification/as
deleted file mode 100644
index 05c2c1b..0000000
--- a/erpnext/payroll/notification/as
+++ /dev/null
@@ -1 +0,0 @@
-update from `tabNotification` set module='Payroll' where name = "Retention Bonus"
diff --git a/erpnext/payroll/notification/retention_bonus/__init__.py b/erpnext/payroll/notification/retention_bonus/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/notification/retention_bonus/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/notification/retention_bonus/retention_bonus.json b/erpnext/payroll/notification/retention_bonus/retention_bonus.json
deleted file mode 100644
index 37381fa..0000000
--- a/erpnext/payroll/notification/retention_bonus/retention_bonus.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "attach_print": 0,
- "channel": "Email",
- "condition": "doc.docstatus==1",
- "creation": "2018-05-15 18:52:36.362838",
- "date_changed": "bonus_payment_date",
- "days_in_advance": 14,
- "docstatus": 0,
- "doctype": "Notification",
- "document_type": "Retention Bonus",
- "enabled": 1,
- "event": "Days Before",
- "idx": 0,
- "is_standard": 1,
- "message": "<p>{{ _(\"Hello\") }},</p>\n\n<p> {{ _(\"Retention Bonus for\") }} {{ doc.employee_name }} {{ _(\"due on\") }} {{ doc.bonus_payment_date }}</p>",
- "modified": "2018-05-15 19:00:24.294418",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Retention Bonus",
- "owner": "Administrator",
- "recipients": [
-  {
-   "email_by_role": "HR Manager"
-  }
- ],
- "subject": "Retention Bonus alert for {{ doc.employee }}"
-}
\ No newline at end of file
diff --git a/erpnext/payroll/notification/retention_bonus/retention_bonus.md b/erpnext/payroll/notification/retention_bonus/retention_bonus.md
deleted file mode 100644
index 8f48193..0000000
--- a/erpnext/payroll/notification/retention_bonus/retention_bonus.md
+++ /dev/null
@@ -1,3 +0,0 @@
-<p>{{ _("Hello") }},</p>
-
-<p> {{ _("Retention Bonus for") }} {{ doc.employee_name }} {{ _("due on") }} {{ doc.bonus_payment_date }}</p>
\ No newline at end of file
diff --git a/erpnext/payroll/notification/retention_bonus/retention_bonus.py b/erpnext/payroll/notification/retention_bonus/retention_bonus.py
deleted file mode 100644
index 02e3e93..0000000
--- a/erpnext/payroll/notification/retention_bonus/retention_bonus.py
+++ /dev/null
@@ -1,3 +0,0 @@
-def get_context(context):
-	# do your magic here
-	pass
diff --git a/erpnext/payroll/number_card/total_declaration_submitted/total_declaration_submitted.json b/erpnext/payroll/number_card/total_declaration_submitted/total_declaration_submitted.json
deleted file mode 100644
index fa5739b..0000000
--- a/erpnext/payroll/number_card/total_declaration_submitted/total_declaration_submitted.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "creation": "2020-07-22 11:56:34.575627",
- "docstatus": 0,
- "doctype": "Number Card",
- "document_type": "Employee Tax Exemption Declaration",
- "dynamic_filters_json": "[[\"Employee Tax Exemption Declaration\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]",
- "filters_json": "[[\"Employee Tax Exemption Declaration\",\"creation\",\"Timespan\",\"last year\",false],[\"Employee Tax Exemption Declaration\",\"docstatus\",\"=\",\"1\",false]]",
- "function": "Count",
- "idx": 0,
- "is_public": 1,
- "is_standard": 1,
- "label": "Total Declaration Submitted",
- "modified": "2020-07-22 13:22:46.001099",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Total Declaration Submitted",
- "owner": "Administrator",
- "show_percentage_stats": 1,
- "stats_time_interval": "Monthly",
- "type": "Document Type"
-}
\ No newline at end of file
diff --git "a/erpnext/payroll/number_card/total_incentive_given\050last_month\051/total_incentive_given\050last_month\051.json" "b/erpnext/payroll/number_card/total_incentive_given\050last_month\051/total_incentive_given\050last_month\051.json"
deleted file mode 100644
index 2106706..0000000
--- "a/erpnext/payroll/number_card/total_incentive_given\050last_month\051/total_incentive_given\050last_month\051.json"
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "aggregate_function_based_on": "incentive_amount",
- "creation": "2020-07-22 11:56:34.599047",
- "docstatus": 0,
- "doctype": "Number Card",
- "document_type": "Employee Incentive",
- "dynamic_filters_json": "",
- "filters_json": "[[\"Employee Incentive\",\"docstatus\",\"=\",\"1\",false],[\"Employee Incentive\",\"payroll_date\",\"Timespan\",\"last year\",false]]",
- "function": "Sum",
- "idx": 0,
- "is_public": 1,
- "is_standard": 1,
- "label": "Total Incentive Given(Last month)",
- "modified": "2020-07-23 12:05:26.963616",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Total Incentive Given(Last month)",
- "owner": "Administrator",
- "show_percentage_stats": 1,
- "stats_time_interval": "Monthly",
- "type": "Document Type"
-}
\ No newline at end of file
diff --git "a/erpnext/payroll/number_card/total_outgoing_salary\050last_month\051/total_outgoing_salary\050last_month\051.json" "b/erpnext/payroll/number_card/total_outgoing_salary\050last_month\051/total_outgoing_salary\050last_month\051.json"
deleted file mode 100644
index 44ee722..0000000
--- "a/erpnext/payroll/number_card/total_outgoing_salary\050last_month\051/total_outgoing_salary\050last_month\051.json"
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "aggregate_function_based_on": "rounded_total",
- "creation": "2020-07-22 11:56:34.626019",
- "docstatus": 0,
- "doctype": "Number Card",
- "document_type": "Salary Slip",
- "dynamic_filters_json": "[[\"Salary Slip\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]",
- "filters_json": "[[\"Salary Slip\",\"docstatus\",\"=\",\"1\",false],[\"Salary Slip\",\"start_date\",\"Timespan\",\"last month\",false]]",
- "function": "Sum",
- "idx": 0,
- "is_public": 1,
- "is_standard": 1,
- "label": "Total Outgoing Salary(Last month)",
- "modified": "2020-07-22 13:54:14.678954",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Total Outgoing Salary(Last month)",
- "owner": "Administrator",
- "show_percentage_stats": 1,
- "stats_time_interval": "Monthly",
- "type": "Document Type"
-}
\ No newline at end of file
diff --git a/erpnext/payroll/number_card/total_salary_structure/total_salary_structure.json b/erpnext/payroll/number_card/total_salary_structure/total_salary_structure.json
deleted file mode 100644
index 030935f..0000000
--- a/erpnext/payroll/number_card/total_salary_structure/total_salary_structure.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "creation": "2020-07-22 11:56:34.688843",
- "docstatus": 0,
- "doctype": "Number Card",
- "document_type": "Salary Structure",
- "dynamic_filters_json": "[[\"Salary Structure\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]",
- "filters_json": "[[\"Salary Structure\",\"docstatus\",\"=\",\"1\",false]]",
- "function": "Count",
- "idx": 0,
- "is_public": 1,
- "is_standard": 1,
- "label": "Total Salary Structure",
- "modified": "2020-07-22 13:24:03.938846",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Total Salary Structure",
- "owner": "Administrator",
- "show_percentage_stats": 1,
- "stats_time_interval": "Monthly",
- "type": "Document Type"
-}
\ No newline at end of file
diff --git a/erpnext/payroll/onboarding_step/assign_salary_structure/assign_salary_structure.json b/erpnext/payroll/onboarding_step/assign_salary_structure/assign_salary_structure.json
deleted file mode 100644
index 8a07b10..0000000
--- a/erpnext/payroll/onboarding_step/assign_salary_structure/assign_salary_structure.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "action": "Create Entry",
- "creation": "2020-06-01 11:58:43.927590",
- "docstatus": 0,
- "doctype": "Onboarding Step",
- "idx": 0,
- "is_complete": 0,
- "is_mandatory": 1,
- "is_single": 0,
- "is_skipped": 0,
- "modified": "2020-06-01 11:58:43.927590",
- "modified_by": "Administrator",
- "name": "Assign Salary Structure",
- "owner": "Administrator",
- "reference_document": "Salary Structure Assignment",
- "show_full_form": 1,
- "title": "Assign Salary Structure",
- "validate_action": 1
-}
\ No newline at end of file
diff --git a/erpnext/payroll/onboarding_step/create_employee/create_employee.json b/erpnext/payroll/onboarding_step/create_employee/create_employee.json
deleted file mode 100644
index 3aa33c6..0000000
--- a/erpnext/payroll/onboarding_step/create_employee/create_employee.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "action": "Create Entry",
- "creation": "2020-05-14 11:43:25.561152",
- "docstatus": 0,
- "doctype": "Onboarding Step",
- "idx": 0,
- "is_complete": 0,
- "is_mandatory": 1,
- "is_single": 0,
- "is_skipped": 0,
- "modified": "2020-05-14 12:26:28.629074",
- "modified_by": "Administrator",
- "name": "Create Employee",
- "owner": "Administrator",
- "reference_document": "Employee",
- "show_full_form": 0,
- "title": "Create Employee",
- "validate_action": 0
-}
\ No newline at end of file
diff --git a/erpnext/payroll/onboarding_step/create_income_tax_slab/create_income_tax_slab.json b/erpnext/payroll/onboarding_step/create_income_tax_slab/create_income_tax_slab.json
deleted file mode 100644
index faada7e..0000000
--- a/erpnext/payroll/onboarding_step/create_income_tax_slab/create_income_tax_slab.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "action": "Create Entry",
- "creation": "2020-06-01 11:54:54.823796",
- "docstatus": 0,
- "doctype": "Onboarding Step",
- "idx": 0,
- "is_complete": 0,
- "is_mandatory": 0,
- "is_single": 0,
- "is_skipped": 0,
- "modified": "2020-06-01 11:54:54.823796",
- "modified_by": "Administrator",
- "name": "Create Income Tax Slab",
- "owner": "Administrator",
- "reference_document": "Income Tax Slab",
- "show_full_form": 1,
- "title": "Create Income Tax Slab",
- "validate_action": 1
-}
\ No newline at end of file
diff --git a/erpnext/payroll/onboarding_step/create_payroll_period/create_payroll_period.json b/erpnext/payroll/onboarding_step/create_payroll_period/create_payroll_period.json
deleted file mode 100644
index b1a7cc2..0000000
--- a/erpnext/payroll/onboarding_step/create_payroll_period/create_payroll_period.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "action": "Create Entry",
- "creation": "2020-06-01 11:53:54.553947",
- "docstatus": 0,
- "doctype": "Onboarding Step",
- "idx": 0,
- "is_complete": 0,
- "is_mandatory": 1,
- "is_single": 0,
- "is_skipped": 0,
- "modified": "2020-06-29 11:53:54.553947",
- "modified_by": "Administrator",
- "name": "Create Payroll Period",
- "owner": "Administrator",
- "reference_document": "Payroll Period",
- "show_full_form": 0,
- "title": "Create Payroll Period",
- "validate_action": 1
-}
\ No newline at end of file
diff --git a/erpnext/payroll/onboarding_step/create_salary_component/create_salary_component.json b/erpnext/payroll/onboarding_step/create_salary_component/create_salary_component.json
deleted file mode 100644
index 002d819..0000000
--- a/erpnext/payroll/onboarding_step/create_salary_component/create_salary_component.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "action": "Create Entry",
- "creation": "2020-06-01 11:57:04.002073",
- "docstatus": 0,
- "doctype": "Onboarding Step",
- "idx": 0,
- "is_complete": 0,
- "is_mandatory": 0,
- "is_single": 0,
- "is_skipped": 0,
- "modified": "2020-06-01 11:57:04.002073",
- "modified_by": "Administrator",
- "name": "Create Salary Component",
- "owner": "Administrator",
- "reference_document": "Salary Component",
- "show_full_form": 1,
- "title": "Create Salary Component",
- "validate_action": 1
-}
\ No newline at end of file
diff --git a/erpnext/payroll/onboarding_step/create_salary_slip/create_salary_slip.json b/erpnext/payroll/onboarding_step/create_salary_slip/create_salary_slip.json
deleted file mode 100644
index 2aa31f4..0000000
--- a/erpnext/payroll/onboarding_step/create_salary_slip/create_salary_slip.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "action": "Create Entry",
- "creation": "2020-06-01 11:59:29.972393",
- "docstatus": 0,
- "doctype": "Onboarding Step",
- "idx": 0,
- "is_complete": 0,
- "is_mandatory": 1,
- "is_single": 0,
- "is_skipped": 0,
- "modified": "2020-06-01 11:59:29.972393",
- "modified_by": "Administrator",
- "name": "Create Salary Slip",
- "owner": "Administrator",
- "reference_document": "Salary Slip",
- "show_full_form": 1,
- "title": "Create Salary Slip",
- "validate_action": 1
-}
\ No newline at end of file
diff --git a/erpnext/payroll/onboarding_step/create_salary_structure/create_salary_structure.json b/erpnext/payroll/onboarding_step/create_salary_structure/create_salary_structure.json
deleted file mode 100644
index 11d8327..0000000
--- a/erpnext/payroll/onboarding_step/create_salary_structure/create_salary_structure.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "action": "Create Entry",
- "creation": "2020-06-01 11:57:54.527808",
- "docstatus": 0,
- "doctype": "Onboarding Step",
- "idx": 0,
- "is_complete": 0,
- "is_mandatory": 1,
- "is_single": 0,
- "is_skipped": 0,
- "modified": "2020-06-01 11:57:54.527808",
- "modified_by": "Administrator",
- "name": "Create Salary Structure",
- "owner": "Administrator",
- "reference_document": "Salary Structure",
- "show_full_form": 1,
- "title": "Create Salary Structure",
- "validate_action": 1
-}
\ No newline at end of file
diff --git a/erpnext/payroll/onboarding_step/payroll_settings/payroll_settings.json b/erpnext/payroll/onboarding_step/payroll_settings/payroll_settings.json
deleted file mode 100644
index a7cf7bf..0000000
--- a/erpnext/payroll/onboarding_step/payroll_settings/payroll_settings.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "action": "Update Settings",
- "creation": "2020-06-04 16:34:29.664917",
- "docstatus": 0,
- "doctype": "Onboarding Step",
- "idx": 0,
- "is_complete": 0,
- "is_mandatory": 0,
- "is_single": 1,
- "is_skipped": 0,
- "modified": "2020-06-29 16:34:29.664917",
- "modified_by": "Administrator",
- "name": "Payroll Settings",
- "owner": "Administrator",
- "reference_document": "Payroll Settings",
- "show_full_form": 0,
- "title": "Payroll Settings",
- "validate_action": 0
-}
\ No newline at end of file
diff --git a/erpnext/payroll/payroll_dashboard/payroll/payroll.json b/erpnext/payroll/payroll_dashboard/payroll/payroll.json
deleted file mode 100644
index fb49d88..0000000
--- a/erpnext/payroll/payroll_dashboard/payroll/payroll.json
+++ /dev/null
@@ -1,42 +0,0 @@
-{
- "cards": [
-  {
-   "card": "Total Declaration Submitted"
-  },
-  {
-   "card": "Total Salary Structure"
-  },
-  {
-   "card": "Total Incentive Given(Last month)"
-  },
-  {
-   "card": "Total Outgoing Salary(Last month)"
-  }
- ],
- "charts": [
-  {
-   "chart": "Outgoing Salary",
-   "width": "Full"
-  },
-  {
-   "chart": "Designation Wise Salary(Last Month)",
-   "width": "Half"
-  },
-  {
-   "chart": "Department Wise Salary(Last Month)",
-   "width": "Half"
-  }
- ],
- "creation": "2020-07-22 11:56:34.727185",
- "dashboard_name": "Payroll",
- "docstatus": 0,
- "doctype": "Dashboard",
- "idx": 0,
- "is_default": 1,
- "is_standard": 1,
- "modified": "2020-07-22 13:20:18.608969",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Payroll",
- "owner": "Administrator"
-}
\ No newline at end of file
diff --git a/erpnext/payroll/print_format/__init__.py b/erpnext/payroll/print_format/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/print_format/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/print_format/salary_slip_based_on_timesheet/__init__.py b/erpnext/payroll/print_format/salary_slip_based_on_timesheet/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/print_format/salary_slip_based_on_timesheet/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/print_format/salary_slip_based_on_timesheet/salary_slip_based_on_timesheet.json b/erpnext/payroll/print_format/salary_slip_based_on_timesheet/salary_slip_based_on_timesheet.json
deleted file mode 100644
index d5fee6b..0000000
--- a/erpnext/payroll/print_format/salary_slip_based_on_timesheet/salary_slip_based_on_timesheet.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "creation": "2016-07-07 12:38:32.447281",
- "custom_format": 0,
- "disabled": 0,
- "doc_type": "Salary Slip",
- "docstatus": 0,
- "doctype": "Print Format",
- "font": "Default",
- "format_data": "[{\"fieldname\": \"print_heading_template\", \"fieldtype\": \"HTML\", \"options\": \"  <h3 style=\\\"text-align: right;\\\">{{doc.name}}</h3><div><hr></div>  \"}, {\"fieldtype\": \"Section Break\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"employee\"}, {\"print_hide\": 0, \"fieldname\": \"employee_name\"}, {\"print_hide\": 0, \"fieldname\": \"department\"}, {\"print_hide\": 0, \"fieldname\": \"designation\"}, {\"print_hide\": 0, \"fieldname\": \"branch\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"start_date\"}, {\"print_hide\": 0, \"fieldname\": \"end_date\"}, {\"print_hide\": 0, \"fieldname\": \"total_working_hours\"}, {\"print_hide\": 0, \"fieldname\": \"hour_rate\"}, {\"fieldtype\": \"Section Break\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"time_sheet\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"working_hours\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"timesheets\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Section Break\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"salary_component\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"depends_on_payment_days\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"earnings\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"salary_component\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"depends_on_payment_days\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"deductions\"}, {\"fieldtype\": \"Section Break\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"gross_pay\"}, {\"print_hide\": 0, \"fieldname\": \"total_deduction\"}, {\"print_hide\": 0, \"fieldname\": \"net_pay\"}, {\"print_hide\": 0, \"fieldname\": \"rounded_total\"}, {\"print_hide\": 0, \"fieldname\": \"total_in_words\"}]",
- "idx": 0,
- "modified": "2016-08-21 21:02:59.896033",
- "modified_by": "Administrator",
- "name": "Salary Slip based on Timesheet",
- "owner": "Administrator",
- "print_format_builder": 1,
- "print_format_type": "Jinja",
- "standard": "Yes"
-}
\ No newline at end of file
diff --git a/erpnext/payroll/print_format/salary_slip_standard/__init__.py b/erpnext/payroll/print_format/salary_slip_standard/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/print_format/salary_slip_standard/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/print_format/salary_slip_standard/salary_slip_standard.json b/erpnext/payroll/print_format/salary_slip_standard/salary_slip_standard.json
deleted file mode 100644
index 98a4435..0000000
--- a/erpnext/payroll/print_format/salary_slip_standard/salary_slip_standard.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "align_labels_right": 0,
- "creation": "2016-07-07 11:45:14.872204",
- "custom_format": 0,
- "disabled": 0,
- "doc_type": "Salary Slip",
- "docstatus": 0,
- "doctype": "Print Format",
- "font": "Default",
- "format_data": "[{\"fieldname\": \"print_heading_template\", \"fieldtype\": \"Custom HTML\", \"options\": \"   <h3 style=\\\"text-align: right;\\\"><span style=\\\"line-height: 1.42857;\\\">{{doc.name}}</span></h3>\\n<div>\\n    <hr style=\\\"text-align: center;\\\">\\n</div>   \"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"employee\", \"label\": \"Employee\"}, {\"print_hide\": 0, \"fieldname\": \"company\", \"label\": \"Company\"}, {\"print_hide\": 0, \"fieldname\": \"employee_name\", \"label\": \"Employee Name\"}, {\"print_hide\": 0, \"fieldname\": \"department\", \"label\": \"Department\"}, {\"print_hide\": 0, \"fieldname\": \"designation\", \"label\": \"Designation\"}, {\"print_hide\": 0, \"fieldname\": \"branch\", \"label\": \"Branch\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"start_date\", \"label\": \"Start Date\"}, {\"print_hide\": 0, \"fieldname\": \"end_date\", \"label\": \"End Date\"}, {\"print_hide\": 0, \"fieldname\": \"total_working_days\", \"label\": \"Working Days\"}, {\"print_hide\": 0, \"fieldname\": \"leave_without_pay\", \"label\": \"Leave Without Pay\"}, {\"print_hide\": 0, \"fieldname\": \"payment_days\", \"label\": \"Payment Days\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"salary_component\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"earnings\", \"label\": \"Earnings\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"salary_component\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"depends_on_payment_days\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"deductions\", \"label\": \"Deductions\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"gross_pay\", \"label\": \"Gross Pay\"}, {\"print_hide\": 0, \"fieldname\": \"total_deduction\", \"label\": \"Total Deduction\"}, {\"print_hide\": 0, \"fieldname\": \"net_pay\", \"label\": \"Net Pay\"}, {\"print_hide\": 0, \"fieldname\": \"rounded_total\", \"label\": \"Rounded Total\"}, {\"print_hide\": 0, \"fieldname\": \"total_in_words\", \"label\": \"Total in words\"}]",
- "idx": 0,
- "line_breaks": 0,
- "modified": "2018-07-24 19:31:39.040701",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Salary Slip Standard",
- "owner": "Administrator",
- "print_format_builder": 1,
- "print_format_type": "Jinja",
- "show_section_headings": 0,
- "standard": "Yes"
-}
\ No newline at end of file
diff --git a/erpnext/payroll/print_format/salary_slip_with_year_to_date/__init__.py b/erpnext/payroll/print_format/salary_slip_with_year_to_date/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/print_format/salary_slip_with_year_to_date/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/print_format/salary_slip_with_year_to_date/salary_slip_with_year_to_date.json b/erpnext/payroll/print_format/salary_slip_with_year_to_date/salary_slip_with_year_to_date.json
deleted file mode 100644
index 71ba37f..0000000
--- a/erpnext/payroll/print_format/salary_slip_with_year_to_date/salary_slip_with_year_to_date.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "absolute_value": 0,
- "align_labels_right": 0,
- "creation": "2021-01-14 09:56:42.393623",
- "custom_format": 0,
- "default_print_language": "en",
- "disabled": 0,
- "doc_type": "Salary Slip",
- "docstatus": 0,
- "doctype": "Print Format",
- "font": "Default",
- "format_data": "[{\"fieldname\": \"print_heading_template\", \"fieldtype\": \"Custom HTML\", \"options\": \"   <h3 style=\\\"text-align: right;\\\"><span style=\\\"line-height: 1.42857;\\\">{{doc.name}}</span></h3>\\n<div>\\n    <hr style=\\\"text-align: center;\\\">\\n</div>   \"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldname\": \"employee\", \"print_hide\": 0, \"label\": \"Employee\"}, {\"fieldname\": \"company\", \"print_hide\": 0, \"label\": \"Company\"}, {\"fieldname\": \"employee_name\", \"print_hide\": 0, \"label\": \"Employee Name\"}, {\"fieldname\": \"department\", \"print_hide\": 0, \"label\": \"Department\"}, {\"fieldname\": \"designation\", \"print_hide\": 0, \"label\": \"Designation\"}, {\"fieldname\": \"branch\", \"print_hide\": 0, \"label\": \"Branch\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldname\": \"start_date\", \"print_hide\": 0, \"label\": \"Start Date\"}, {\"fieldname\": \"end_date\", \"print_hide\": 0, \"label\": \"End Date\"}, {\"fieldname\": \"total_working_days\", \"print_hide\": 0, \"label\": \"Working Days\"}, {\"fieldname\": \"leave_without_pay\", \"print_hide\": 0, \"label\": \"Leave Without Pay\"}, {\"fieldname\": \"payment_days\", \"print_hide\": 0, \"label\": \"Payment Days\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldname\": \"earnings\", \"print_hide\": 0, \"label\": \"Earnings\", \"visible_columns\": [{\"fieldname\": \"salary_component\", \"print_width\": \"\", \"print_hide\": 0}, {\"fieldname\": \"amount\", \"print_width\": \"\", \"print_hide\": 0}, {\"fieldname\": \"year_to_date\", \"print_width\": \"\", \"print_hide\": 0}]}, {\"fieldtype\": \"Column Break\"}, {\"fieldname\": \"deductions\", \"print_hide\": 0, \"label\": \"Deductions\", \"visible_columns\": [{\"fieldname\": \"salary_component\", \"print_width\": \"\", \"print_hide\": 0}, {\"fieldname\": \"amount\", \"print_width\": \"\", \"print_hide\": 0}, {\"fieldname\": \"year_to_date\", \"print_width\": \"\", \"print_hide\": 0}, {\"fieldname\": \"depends_on_payment_days\", \"print_width\": \"\", \"print_hide\": 0}]}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldname\": \"gross_pay\", \"print_hide\": 0, \"label\": \"Gross Pay\"}, {\"fieldname\": \"total_deduction\", \"print_hide\": 0, \"label\": \"Total Deduction\"}, {\"fieldname\": \"net_pay\", \"print_hide\": 0, \"label\": \"Net Pay\"}, {\"fieldname\": \"rounded_total\", \"print_hide\": 0, \"label\": \"Rounded Total\"}, {\"fieldname\": \"total_in_words\", \"print_hide\": 0, \"label\": \"Total in words\"}, {\"fieldtype\": \"Section Break\", \"label\": \"net pay info\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldname\": \"year_to_date\", \"print_hide\": 0, \"label\": \"Year To Date\"}, {\"fieldname\": \"month_to_date\", \"print_hide\": 0, \"label\": \"Month To Date\"}]",
- "idx": 0,
- "line_breaks": 0,
- "modified": "2021-01-14 10:03:45.283725",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Salary Slip with Year to Date",
- "owner": "Administrator",
- "print_format_builder": 0,
- "print_format_type": "Jinja",
- "raw_printing": 0,
- "show_section_headings": 0,
- "standard": "Yes"
-}
\ No newline at end of file
diff --git a/erpnext/payroll/report/__init__.py b/erpnext/payroll/report/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/report/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/report/bank_remittance/__init__.py b/erpnext/payroll/report/bank_remittance/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/report/bank_remittance/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/report/bank_remittance/bank_remittance.js b/erpnext/payroll/report/bank_remittance/bank_remittance.js
deleted file mode 100644
index 8b75b4f..0000000
--- a/erpnext/payroll/report/bank_remittance/bank_remittance.js
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-/* eslint-disable */
-
-frappe.query_reports["Bank Remittance"] = {
-	"filters": [
-		{
-			fieldname:"company",
-			label: __("Company"),
-			fieldtype: "Link",
-			options: "Company",
-			default: frappe.defaults.get_user_default("Company"),
-			reqd: 1
-		},
-		{
-			fieldname:"from_date",
-			label: __("From Date"),
-			fieldtype: "Date",
-		},
-		{
-			fieldname:"to_date",
-			label: __("To Date"),
-			fieldtype: "Date",
-		},
-
-	]
-}
diff --git a/erpnext/payroll/report/bank_remittance/bank_remittance.json b/erpnext/payroll/report/bank_remittance/bank_remittance.json
deleted file mode 100644
index 2a697b2..0000000
--- a/erpnext/payroll/report/bank_remittance/bank_remittance.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "add_total_row": 0,
- "creation": "2019-03-26 16:57:52.558895",
- "disable_prepared_report": 0,
- "disabled": 0,
- "docstatus": 0,
- "doctype": "Report",
- "idx": 0,
- "is_standard": "Yes",
- "modified": "2020-05-28 00:08:08.097494",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Bank Remittance",
- "owner": "Administrator",
- "prepared_report": 0,
- "ref_doctype": "Payroll Entry",
- "report_name": "Bank Remittance",
- "report_type": "Script Report",
- "roles": [
-  {
-   "role": "HR Manager"
-  }
- ]
-}
\ No newline at end of file
diff --git a/erpnext/payroll/report/bank_remittance/bank_remittance.py b/erpnext/payroll/report/bank_remittance/bank_remittance.py
deleted file mode 100644
index 9d8efff..0000000
--- a/erpnext/payroll/report/bank_remittance/bank_remittance.py
+++ /dev/null
@@ -1,173 +0,0 @@
-# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _, get_all
-
-
-def execute(filters=None):
-	columns = [
-		{
-			"label": _("Payroll Number"),
-			"fieldtype": "Link",
-			"fieldname": "payroll_no",
-			"options": "Payroll Entry",
-			"width": 150,
-		},
-		{
-			"label": _("Debit A/C Number"),
-			"fieldtype": "Int",
-			"fieldname": "debit_account",
-			"hidden": 1,
-			"width": 200,
-		},
-		{"label": _("Payment Date"), "fieldtype": "Data", "fieldname": "payment_date", "width": 100},
-		{
-			"label": _("Employee Name"),
-			"fieldtype": "Link",
-			"fieldname": "employee_name",
-			"options": "Employee",
-			"width": 200,
-		},
-		{"label": _("Bank Name"), "fieldtype": "Data", "fieldname": "bank_name", "width": 50},
-		{
-			"label": _("Employee A/C Number"),
-			"fieldtype": "Int",
-			"fieldname": "employee_account_no",
-			"width": 50,
-		},
-	]
-
-	if frappe.db.has_column("Employee", "ifsc_code"):
-		columns.append(
-			{"label": _("IFSC Code"), "fieldtype": "Data", "fieldname": "bank_code", "width": 100}
-		)
-
-	columns += [
-		{"label": _("Currency"), "fieldtype": "Data", "fieldname": "currency", "width": 50},
-		{
-			"label": _("Net Salary Amount"),
-			"fieldtype": "Currency",
-			"options": "currency",
-			"fieldname": "amount",
-			"width": 100,
-		},
-	]
-
-	data = []
-
-	accounts = get_bank_accounts()
-	payroll_entries = get_payroll_entries(accounts, filters)
-	salary_slips = get_salary_slips(payroll_entries)
-
-	if frappe.db.has_column("Employee", "ifsc_code"):
-		get_emp_bank_ifsc_code(salary_slips)
-
-	for salary in salary_slips:
-		if (
-			salary.bank_name
-			and salary.bank_account_no
-			and salary.debit_acc_no
-			and salary.status in ["Submitted", "Paid"]
-		):
-			row = {
-				"payroll_no": salary.payroll_entry,
-				"debit_account": salary.debit_acc_no,
-				"payment_date": frappe.utils.formatdate(salary.modified.strftime("%Y-%m-%d")),
-				"bank_name": salary.bank_name,
-				"employee_account_no": salary.bank_account_no,
-				"bank_code": salary.ifsc_code,
-				"employee_name": salary.employee + ": " + salary.employee_name,
-				"currency": frappe.get_cached_value("Company", filters.company, "default_currency"),
-				"amount": salary.net_pay,
-			}
-			data.append(row)
-
-	return columns, data
-
-
-def get_bank_accounts():
-	accounts = [d.name for d in get_all("Account", filters={"account_type": "Bank"})]
-	return accounts
-
-
-def get_payroll_entries(accounts, filters):
-	payroll_filter = [
-		("payment_account", "IN", accounts),
-		("number_of_employees", ">", 0),
-		("Company", "=", filters.company),
-	]
-	if filters.to_date:
-		payroll_filter.append(("posting_date", "<", filters.to_date))
-
-	if filters.from_date:
-		payroll_filter.append(("posting_date", ">", filters.from_date))
-
-	entries = get_all("Payroll Entry", payroll_filter, ["name", "payment_account"])
-
-	payment_accounts = [d.payment_account for d in entries]
-	entries = set_company_account(payment_accounts, entries)
-	return entries
-
-
-def get_salary_slips(payroll_entries):
-	payroll = [d.name for d in payroll_entries]
-	salary_slips = get_all(
-		"Salary Slip",
-		filters=[("payroll_entry", "IN", payroll)],
-		fields=[
-			"modified",
-			"net_pay",
-			"bank_name",
-			"bank_account_no",
-			"payroll_entry",
-			"employee",
-			"employee_name",
-			"status",
-		],
-	)
-
-	payroll_entry_map = {}
-	for entry in payroll_entries:
-		payroll_entry_map[entry.name] = entry
-
-	# appending company debit accounts
-	for slip in salary_slips:
-		if slip.payroll_entry:
-			slip["debit_acc_no"] = payroll_entry_map[slip.payroll_entry]["company_account"]
-		else:
-			slip["debit_acc_no"] = None
-
-	return salary_slips
-
-
-def get_emp_bank_ifsc_code(salary_slips):
-	emp_names = [d.employee for d in salary_slips]
-	ifsc_codes = get_all("Employee", [("name", "IN", emp_names)], ["ifsc_code", "name"])
-
-	ifsc_codes_map = {}
-	for code in ifsc_codes:
-		ifsc_codes_map[code.name] = code
-
-	for slip in salary_slips:
-		slip["ifsc_code"] = ifsc_codes_map[code.name]["ifsc_code"]
-
-	return salary_slips
-
-
-def set_company_account(payment_accounts, payroll_entries):
-	company_accounts = get_all(
-		"Bank Account", [("account", "in", payment_accounts)], ["account", "bank_account_no"]
-	)
-	company_accounts_map = {}
-	for acc in company_accounts:
-		company_accounts_map[acc.account] = acc
-
-	for entry in payroll_entries:
-		company_account = ""
-		if entry.payment_account in company_accounts_map:
-			company_account = company_accounts_map[entry.payment_account]["bank_account_no"]
-		entry["company_account"] = company_account
-
-	return payroll_entries
diff --git a/erpnext/payroll/report/income_tax_computation/__init__.py b/erpnext/payroll/report/income_tax_computation/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/report/income_tax_computation/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/report/income_tax_computation/income_tax_computation.js b/erpnext/payroll/report/income_tax_computation/income_tax_computation.js
deleted file mode 100644
index 26e463f..0000000
--- a/erpnext/payroll/report/income_tax_computation/income_tax_computation.js
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-/* eslint-disable */
-
-frappe.query_reports["Income Tax Computation"] = {
-	"filters": [
-		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company"),
-			"width": "100px",
-			"reqd": 1
-		},
-		{
-			"fieldname":"payroll_period",
-			"label": __("Payroll Period"),
-			"fieldtype": "Link",
-			"options": "Payroll Period",
-			"width": "100px",
-			"reqd": 1
-		},
-		{
-			"fieldname":"employee",
-			"label": __("Employee"),
-			"fieldtype": "Link",
-			"options": "Employee",
-			"width": "100px"
-		},
-		{
-			"fieldname":"department",
-			"label": __("Department"),
-			"fieldtype": "Link",
-			"options": "Department",
-			"width": "100px",
-		},
-		{
-			"fieldname":"consider_tax_exemption_declaration",
-			"label": __("Consider Tax Exemption Declaration"),
-			"fieldtype": "Check",
-			"width": "180px"
-		}
-	]
-};
-
-
diff --git a/erpnext/payroll/report/income_tax_computation/income_tax_computation.json b/erpnext/payroll/report/income_tax_computation/income_tax_computation.json
deleted file mode 100644
index 7cb5b22..0000000
--- a/erpnext/payroll/report/income_tax_computation/income_tax_computation.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
- "add_total_row": 0,
- "columns": [],
- "creation": "2022-02-17 17:19:30.921422",
- "disable_prepared_report": 0,
- "disabled": 0,
- "docstatus": 0,
- "doctype": "Report",
- "filters": [],
- "idx": 0,
- "is_standard": "Yes",
- "letter_head": "",
- "modified": "2022-02-23 13:07:30.347861",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Income Tax Computation",
- "owner": "Administrator",
- "prepared_report": 0,
- "ref_doctype": "Salary Slip",
- "report_name": "Income Tax Computation",
- "report_type": "Script Report",
- "roles": [
-  {
-   "role": "Employee"
-  },
-  {
-   "role": "HR User"
-  },
-  {
-   "role": "HR Manager"
-  },
-  {
-   "role": "Employee Self Service"
-  }
- ]
-}
\ No newline at end of file
diff --git a/erpnext/payroll/report/income_tax_computation/income_tax_computation.py b/erpnext/payroll/report/income_tax_computation/income_tax_computation.py
deleted file mode 100644
index 739ed8e..0000000
--- a/erpnext/payroll/report/income_tax_computation/income_tax_computation.py
+++ /dev/null
@@ -1,513 +0,0 @@
-# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-import frappe
-from frappe import _, scrub
-from frappe.query_builder.functions import Sum
-from frappe.utils import add_days, flt, getdate, rounded
-
-from erpnext.payroll.doctype.payroll_entry.payroll_entry import get_start_end_dates
-from erpnext.payroll.doctype.salary_slip.salary_slip import calculate_tax_by_tax_slab
-
-
-def execute(filters=None):
-	return IncomeTaxComputationReport(filters).run()
-
-
-class IncomeTaxComputationReport(object):
-	def __init__(self, filters=None):
-		self.filters = frappe._dict(filters or {})
-		self.columns = []
-		self.data = []
-		self.employees = frappe._dict()
-		self.payroll_period_start_date = None
-		self.payroll_period_end_date = None
-		if self.filters.payroll_period:
-			self.payroll_period_start_date, self.payroll_period_end_date = frappe.db.get_value(
-				"Payroll Period", self.filters.payroll_period, ["start_date", "end_date"]
-			)
-
-	def run(self):
-		self.get_fixed_columns()
-		self.get_data()
-		return self.columns, self.data
-
-	def get_data(self):
-		self.get_employee_details()
-		self.get_future_salary_slips()
-		self.get_ctc()
-		self.get_tax_exempted_earnings_and_deductions()
-		self.get_employee_tax_exemptions()
-		self.get_hra()
-		self.get_standard_tax_exemption()
-		self.get_total_taxable_amount()
-		self.get_applicable_tax()
-		self.get_total_deducted_tax()
-		self.get_payable_tax()
-
-		self.data = list(self.employees.values())
-
-	def get_employee_details(self):
-		filters, or_filters = self.get_employee_filters()
-		fields = [
-			"name as employee",
-			"employee_name",
-			"department",
-			"designation",
-			"date_of_joining",
-			"relieving_date",
-		]
-
-		employees = frappe.get_all("Employee", filters=filters, or_filters=or_filters, fields=fields)
-		ss_assignments = self.get_ss_assignments([d.employee for d in employees])
-
-		for d in employees:
-			if d.employee in list(ss_assignments.keys()):
-				d.update(ss_assignments[d.employee])
-				self.employees.setdefault(d.employee, d)
-
-		if not self.employees:
-			frappe.throw(_("No employees found with selected filters and active salary structure"))
-
-	def get_employee_filters(self):
-		filters = {"company": self.filters.company}
-		or_filters = {
-			"status": "Active",
-			"relieving_date": ["between", [self.payroll_period_start_date, self.payroll_period_end_date]],
-		}
-		if self.filters.employee:
-			filters = {"name": self.filters.employee}
-		elif self.filters.department:
-			filters.update({"department": self.filters.department})
-
-		return filters, or_filters
-
-	def get_ss_assignments(self, employees):
-		ss_assignments = frappe.get_all(
-			"Salary Structure Assignment",
-			filters={
-				"employee": ["in", employees],
-				"docstatus": 1,
-				"salary_structure": ["is", "set"],
-				"income_tax_slab": ["is", "set"],
-			},
-			fields=["employee", "income_tax_slab", "salary_structure"],
-			order_by="from_date desc",
-		)
-
-		employee_ss_assignments = frappe._dict()
-		for d in ss_assignments:
-			if d.employee not in list(employee_ss_assignments.keys()):
-				tax_slab = frappe.get_cached_value(
-					"Income Tax Slab", d.income_tax_slab, ["allow_tax_exemption", "disabled"], as_dict=1
-				)
-
-				if tax_slab and not tax_slab.disabled:
-					employee_ss_assignments.setdefault(
-						d.employee,
-						{
-							"salary_structure": d.salary_structure,
-							"income_tax_slab": d.income_tax_slab,
-							"allow_tax_exemption": tax_slab.allow_tax_exemption,
-						},
-					)
-		return employee_ss_assignments
-
-	def get_future_salary_slips(self):
-		self.future_salary_slips = frappe._dict()
-		for employee in list(self.employees.keys()):
-			last_ss = self.get_last_salary_slip(employee)
-			if last_ss and last_ss.end_date == self.payroll_period_end_date:
-				continue
-
-			relieving_date = self.employees[employee].get("relieving_date", "")
-			if last_ss:
-				ss_start_date = add_days(last_ss.end_date, 1)
-			else:
-				ss_start_date = self.payroll_period_start_date
-				last_ss = frappe._dict(
-					{
-						"payroll_frequency": "Monthly",
-						"salary_structure": self.employees[employee].get("salary_structure"),
-					}
-				)
-
-			while getdate(ss_start_date) < getdate(self.payroll_period_end_date) and (
-				not relieving_date or getdate(ss_start_date) < relieving_date
-			):
-				ss_end_date = get_start_end_dates(last_ss.payroll_frequency, ss_start_date).end_date
-
-				ss = frappe.new_doc("Salary Slip")
-				ss.employee = employee
-				ss.start_date = ss_start_date
-				ss.end_date = ss_end_date
-				ss.salary_structure = last_ss.salary_structure
-				ss.payroll_frequency = last_ss.payroll_frequency
-				ss.company = self.filters.company
-				try:
-					ss.process_salary_structure(for_preview=1)
-					self.future_salary_slips.setdefault(employee, []).append(ss.as_dict())
-				except Exception:
-					break
-
-				ss_start_date = add_days(ss_end_date, 1)
-
-	def get_last_salary_slip(self, employee):
-		last_salary_slip = frappe.db.get_value(
-			"Salary Slip",
-			{
-				"employee": employee,
-				"docstatus": 1,
-				"start_date": ["between", [self.payroll_period_start_date, self.payroll_period_end_date]],
-			},
-			["start_date", "end_date", "salary_structure", "payroll_frequency"],
-			order_by="start_date desc",
-			as_dict=1,
-		)
-
-		return last_salary_slip
-
-	def get_ctc(self):
-		# Get total earnings from existing salary slip
-		ss = frappe.qb.DocType("Salary Slip")
-		existing_ss = frappe._dict(
-			(
-				frappe.qb.from_(ss)
-				.select(ss.employee, Sum(ss.base_gross_pay).as_("amount"))
-				.where(ss.docstatus == 1)
-				.where(ss.employee.isin(list(self.employees.keys())))
-				.where(ss.start_date >= self.payroll_period_start_date)
-				.where(ss.end_date <= self.payroll_period_end_date)
-				.groupby(ss.employee)
-			).run()
-		)
-
-		for employee in list(self.employees.keys()):
-			future_ss_earnings = self.get_future_earnings(employee)
-			ctc = flt(existing_ss.get(employee)) + future_ss_earnings
-
-			self.employees[employee].setdefault("ctc", ctc)
-
-	def get_future_earnings(self, employee):
-		future_earnings = 0.0
-		for ss in self.future_salary_slips.get(employee, []):
-			future_earnings += flt(ss.base_gross_pay)
-
-		return future_earnings
-
-	def get_tax_exempted_earnings_and_deductions(self):
-		tax_exempted_components = self.get_tax_exempted_components()
-
-		# Get component totals from existing salary slips
-		ss = frappe.qb.DocType("Salary Slip")
-		ss_comps = frappe.qb.DocType("Salary Detail")
-
-		records = (
-			frappe.qb.from_(ss)
-			.inner_join(ss_comps)
-			.on(ss.name == ss_comps.parent)
-			.select(ss.name, ss.employee, ss_comps.salary_component, Sum(ss_comps.amount).as_("amount"))
-			.where(ss.docstatus == 1)
-			.where(ss.employee.isin(list(self.employees.keys())))
-			.where(ss_comps.salary_component.isin(tax_exempted_components))
-			.where(ss.start_date >= self.payroll_period_start_date)
-			.where(ss.end_date <= self.payroll_period_end_date)
-			.groupby(ss.employee, ss_comps.salary_component)
-		).run(as_dict=True)
-
-		existing_ss_exemptions = frappe._dict()
-		for d in records:
-			existing_ss_exemptions.setdefault(d.employee, {}).setdefault(
-				scrub(d.salary_component), d.amount
-			)
-
-		for employee in list(self.employees.keys()):
-			if not self.employees[employee]["allow_tax_exemption"]:
-				continue
-
-			exemptions = existing_ss_exemptions.get(employee, {})
-			self.add_exemptions_from_future_salary_slips(employee, exemptions)
-			self.employees[employee].update(exemptions)
-
-			total_exemptions = sum(list(exemptions.values()))
-			self.add_to_total_exemption(employee, total_exemptions)
-
-	def add_exemptions_from_future_salary_slips(self, employee, exemptions):
-		for ss in self.future_salary_slips.get(employee, []):
-			for e in ss.earnings:
-				if not e.is_tax_applicable:
-					exemptions.setdefault(scrub(e.salary_component), 0)
-					exemptions[scrub(e.salary_component)] += flt(e.amount)
-
-			for d in ss.deductions:
-				if d.exempted_from_income_tax:
-					exemptions.setdefault(scrub(d.salary_component), 0)
-					exemptions[scrub(d.salary_component)] += flt(d.amount)
-
-		return exemptions
-
-	def get_tax_exempted_components(self):
-		# nontaxable earning components
-		nontaxable_earning_components = [
-			d.name
-			for d in frappe.get_all(
-				"Salary Component", {"type": "Earning", "is_tax_applicable": 0, "disabled": 0}
-			)
-		]
-
-		# tax exempted deduction components
-		tax_exempted_deduction_components = [
-			d.name
-			for d in frappe.get_all(
-				"Salary Component", {"type": "Deduction", "exempted_from_income_tax": 1, "disabled": 0}
-			)
-		]
-
-		tax_exempted_components = nontaxable_earning_components + tax_exempted_deduction_components
-
-		# Add columns
-		for d in tax_exempted_components:
-			self.add_column(d)
-
-		return tax_exempted_components
-
-	def add_to_total_exemption(self, employee, amount):
-		self.employees[employee].setdefault("total_exemption", 0)
-		self.employees[employee]["total_exemption"] += amount
-
-	def get_employee_tax_exemptions(self):
-		# add columns
-		exemption_categories = frappe.get_all("Employee Tax Exemption Category", {"is_active": 1})
-		for d in exemption_categories:
-			self.add_column(d.name)
-
-		self.employees_with_proofs = []
-		self.get_tax_exemptions("Employee Tax Exemption Proof Submission")
-		if self.filters.consider_tax_exemption_declaration:
-			self.get_tax_exemptions("Employee Tax Exemption Declaration")
-
-	def get_tax_exemptions(self, source):
-		# Get category-wise exmeptions based on submitted proofs or declarations
-		if source == "Employee Tax Exemption Proof Submission":
-			child_doctype = "Employee Tax Exemption Proof Submission Detail"
-		else:
-			child_doctype = "Employee Tax Exemption Declaration Category"
-
-		max_exemptions = self.get_max_exemptions_based_on_category()
-
-		par = frappe.qb.DocType(source)
-		child = frappe.qb.DocType(child_doctype)
-
-		records = (
-			frappe.qb.from_(par)
-			.inner_join(child)
-			.on(par.name == child.parent)
-			.select(par.employee, child.exemption_category, Sum(child.amount).as_("amount"))
-			.where(par.docstatus == 1)
-			.where(par.employee.isin(list(self.employees.keys())))
-			.where(par.payroll_period == self.filters.payroll_period)
-			.groupby(par.employee, child.exemption_category)
-		).run(as_dict=True)
-
-		for d in records:
-			if not self.employees[d.employee]["allow_tax_exemption"]:
-				continue
-
-			if source == "Employee Tax Exemption Declaration" and d.employee in self.employees_with_proofs:
-				continue
-
-			amount = flt(d.amount)
-			max_eligible_amount = flt(max_exemptions.get(d.exemption_category))
-			if max_eligible_amount and amount > max_eligible_amount:
-				amount = max_eligible_amount
-
-			self.employees[d.employee].setdefault(scrub(d.exemption_category), amount)
-			self.add_to_total_exemption(d.employee, amount)
-
-			if (
-				source == "Employee Tax Exemption Proof Submission"
-				and d.employee not in self.employees_with_proofs
-			):
-				self.employees_with_proofs.append(d.employee)
-
-	def get_max_exemptions_based_on_category(self):
-		return dict(
-			frappe.get_all(
-				"Employee Tax Exemption Category",
-				filters={"is_active": 1},
-				fields=["name", "max_amount"],
-				as_list=1,
-			)
-		)
-
-	def get_hra(self):
-		if not frappe.get_meta("Employee Tax Exemption Declaration").has_field("monthly_house_rent"):
-			return
-
-		self.add_column("HRA")
-
-		self.employees_with_proofs = []
-		self.get_eligible_hra("Employee Tax Exemption Proof Submission")
-		if self.filters.consider_tax_exemption_declaration:
-			self.get_eligible_hra("Employee Tax Exemption Declaration")
-
-	def get_eligible_hra(self, source):
-		if source == "Employee Tax Exemption Proof Submission":
-			hra_amount_field = "total_eligible_hra_exemption"
-		else:
-			hra_amount_field = "annual_hra_exemption"
-
-		records = frappe.get_all(
-			source,
-			filters={
-				"docstatus": 1,
-				"employee": ["in", list(self.employees.keys())],
-				"payroll_period": self.filters.payroll_period,
-			},
-			fields=["employee", hra_amount_field],
-			as_list=1,
-		)
-
-		for d in records:
-			if not self.employees[d[0]]["allow_tax_exemption"]:
-				continue
-
-			if d[0] not in self.employees_with_proofs:
-				self.employees[d[0]].setdefault("hra", d[1])
-				self.add_to_total_exemption(d[0], d[1])
-				self.employees_with_proofs.append(d[0])
-
-	def get_standard_tax_exemption(self):
-		self.add_column("Standard Tax Exemption")
-
-		standard_exemptions_per_slab = dict(
-			frappe.get_all(
-				"Income Tax Slab",
-				filters={"company": self.filters.company, "docstatus": 1, "disabled": 0},
-				fields=["name", "standard_tax_exemption_amount"],
-				as_list=1,
-			)
-		)
-
-		for emp, emp_details in self.employees.items():
-			if not self.employees[emp]["allow_tax_exemption"]:
-				continue
-
-			income_tax_slab = emp_details.get("income_tax_slab")
-			standard_exemption = standard_exemptions_per_slab.get(income_tax_slab, 0)
-			emp_details["standard_tax_exemption"] = standard_exemption
-			self.add_to_total_exemption(emp, standard_exemption)
-
-		self.add_column("Total Exemption")
-
-	def get_total_taxable_amount(self):
-		self.add_column("Total Taxable Amount")
-		for emp, emp_details in self.employees.items():
-			emp_details["total_taxable_amount"] = flt(emp_details.get("ctc")) - flt(
-				emp_details.get("total_exemption")
-			)
-
-	def get_applicable_tax(self):
-		self.add_column("Applicable Tax")
-
-		is_tax_rounded = frappe.db.get_value(
-			"Salary Component",
-			{"variable_based_on_taxable_salary": 1, "disabled": 0},
-			"round_to_the_nearest_integer",
-		)
-
-		for emp, emp_details in self.employees.items():
-			tax_slab = emp_details.get("income_tax_slab")
-			if tax_slab:
-				tax_slab = frappe.get_cached_doc("Income Tax Slab", tax_slab)
-				employee_dict = frappe.get_doc("Employee", emp).as_dict()
-				tax_amount = calculate_tax_by_tax_slab(
-					emp_details["total_taxable_amount"], tax_slab, eval_globals=None, eval_locals=employee_dict
-				)
-			else:
-				tax_amount = 0.0
-
-			if is_tax_rounded:
-				tax_amount = rounded(tax_amount)
-			emp_details["applicable_tax"] = tax_amount
-
-	def get_total_deducted_tax(self):
-		self.add_column("Total Tax Deducted")
-
-		ss = frappe.qb.DocType("Salary Slip")
-		ss_ded = frappe.qb.DocType("Salary Detail")
-
-		records = (
-			frappe.qb.from_(ss)
-			.inner_join(ss_ded)
-			.on(ss.name == ss_ded.parent)
-			.select(ss.employee, Sum(ss_ded.amount).as_("amount"))
-			.where(ss.docstatus == 1)
-			.where(ss.employee.isin(list(self.employees.keys())))
-			.where(ss_ded.parentfield == "deductions")
-			.where(ss_ded.variable_based_on_taxable_salary == 1)
-			.where(ss.start_date >= self.payroll_period_start_date)
-			.where(ss.end_date <= self.payroll_period_end_date)
-			.groupby(ss.employee)
-		).run(as_dict=True)
-
-		for d in records:
-			self.employees[d.employee].setdefault("total_tax_deducted", d.amount)
-
-	def get_payable_tax(self):
-		self.add_column("Payable Tax")
-
-		for emp, emp_details in self.employees.items():
-			emp_details["payable_tax"] = flt(emp_details.get("applicable_tax")) - flt(
-				emp_details.get("total_tax_deducted")
-			)
-
-	def add_column(self, label, fieldname=None, fieldtype=None, options=None, width=None):
-		col = {
-			"label": _(label),
-			"fieldname": fieldname or scrub(label),
-			"fieldtype": fieldtype or "Currency",
-			"options": options,
-			"width": width or "140px",
-		}
-		self.columns.append(col)
-
-	def get_fixed_columns(self):
-		self.columns = [
-			{
-				"label": _("Employee"),
-				"fieldname": "employee",
-				"fieldtype": "Link",
-				"options": "Employee",
-				"width": "140px",
-			},
-			{
-				"label": _("Employee Name"),
-				"fieldname": "employee_name",
-				"fieldtype": "Data",
-				"width": "160px",
-			},
-			{
-				"label": _("Department"),
-				"fieldname": "department",
-				"fieldtype": "Link",
-				"options": "Department",
-				"width": "140px",
-			},
-			{
-				"label": _("Designation"),
-				"fieldname": "designation",
-				"fieldtype": "Link",
-				"options": "Designation",
-				"width": "140px",
-			},
-			{"label": _("Date of Joining"), "fieldname": "date_of_joining", "fieldtype": "Date"},
-			{
-				"label": _("Income Tax Slab"),
-				"fieldname": "income_tax_slab",
-				"fieldtype": "Link",
-				"options": "Income Tax Slab",
-				"width": "140px",
-			},
-			{"label": _("CTC"), "fieldname": "ctc", "fieldtype": "Currency", "width": "140px"},
-		]
diff --git a/erpnext/payroll/report/income_tax_computation/test_income_tax_computation.py b/erpnext/payroll/report/income_tax_computation/test_income_tax_computation.py
deleted file mode 100644
index 57ca317..0000000
--- a/erpnext/payroll/report/income_tax_computation/test_income_tax_computation.py
+++ /dev/null
@@ -1,115 +0,0 @@
-import unittest
-
-import frappe
-from frappe.utils import getdate
-
-from erpnext.hr.doctype.employee.test_employee import make_employee
-from erpnext.payroll.doctype.employee_tax_exemption_declaration.test_employee_tax_exemption_declaration import (
-	create_payroll_period,
-)
-from erpnext.payroll.doctype.salary_slip.test_salary_slip import (
-	create_exemption_declaration,
-	create_salary_slips_for_payroll_period,
-	create_tax_slab,
-)
-from erpnext.payroll.doctype.salary_structure.test_salary_structure import make_salary_structure
-from erpnext.payroll.report.income_tax_computation.income_tax_computation import execute
-
-
-class TestIncomeTaxComputation(unittest.TestCase):
-	def setUp(self):
-		self.cleanup_records()
-		self.create_records()
-
-	def tearDown(self):
-		frappe.db.rollback()
-
-	def cleanup_records(self):
-		frappe.db.sql("delete from `tabEmployee Tax Exemption Declaration`")
-		frappe.db.sql("delete from `tabPayroll Period`")
-		frappe.db.sql("delete from `tabIncome Tax Slab`")
-		frappe.db.sql("delete from `tabSalary Component`")
-		frappe.db.sql("delete from `tabEmployee Benefit Application`")
-		frappe.db.sql("delete from `tabEmployee Benefit Claim`")
-		frappe.db.sql("delete from `tabEmployee` where company='_Test Company'")
-		frappe.db.sql("delete from `tabSalary Slip`")
-
-	def create_records(self):
-		self.employee = make_employee(
-			"employee_tax_computation@example.com",
-			company="_Test Company",
-			date_of_joining=getdate("01-10-2021"),
-		)
-
-		self.payroll_period = create_payroll_period(
-			name="_Test Payroll Period 1", company="_Test Company"
-		)
-
-		self.income_tax_slab = create_tax_slab(
-			self.payroll_period,
-			allow_tax_exemption=True,
-			effective_date=getdate("2019-04-01"),
-			company="_Test Company",
-		)
-		salary_structure = make_salary_structure(
-			"Monthly Salary Structure Test Income Tax Computation",
-			"Monthly",
-			employee=self.employee,
-			company="_Test Company",
-			currency="INR",
-			payroll_period=self.payroll_period,
-			test_tax=True,
-		)
-
-		create_exemption_declaration(self.employee, self.payroll_period.name)
-
-		create_salary_slips_for_payroll_period(
-			self.employee, salary_structure.name, self.payroll_period, deduct_random=False, num=3
-		)
-
-	def test_report(self):
-		filters = frappe._dict(
-			{
-				"company": "_Test Company",
-				"payroll_period": self.payroll_period.name,
-				"employee": self.employee,
-			}
-		)
-
-		result = execute(filters)
-
-		expected_data = {
-			"employee": self.employee,
-			"employee_name": "employee_tax_computation@example.com",
-			"department": "All Departments",
-			"income_tax_slab": self.income_tax_slab,
-			"ctc": 936000.0,
-			"professional_tax": 2400.0,
-			"standard_tax_exemption": 50000,
-			"total_exemption": 52400.0,
-			"total_taxable_amount": 883600.0,
-			"applicable_tax": 92789.0,
-			"total_tax_deducted": 17997.0,
-			"payable_tax": 74792,
-		}
-
-		for key, val in expected_data.items():
-			self.assertEqual(result[1][0].get(key), val)
-
-		# Run report considering tax exemption declaration
-		filters.consider_tax_exemption_declaration = 1
-
-		result = execute(filters)
-
-		expected_data.update(
-			{
-				"_test_category": 100000.0,
-				"total_exemption": 152400.0,
-				"total_taxable_amount": 783600.0,
-				"applicable_tax": 71989.0,
-				"payable_tax": 53992.0,
-			}
-		)
-
-		for key, val in expected_data.items():
-			self.assertEqual(result[1][0].get(key), val)
diff --git a/erpnext/payroll/report/income_tax_deductions/__init__.py b/erpnext/payroll/report/income_tax_deductions/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/report/income_tax_deductions/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/report/income_tax_deductions/income_tax_deductions.js b/erpnext/payroll/report/income_tax_deductions/income_tax_deductions.js
deleted file mode 100644
index 6ecf2b1..0000000
--- a/erpnext/payroll/report/income_tax_deductions/income_tax_deductions.js
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-/* eslint-disable */
-
-frappe.require("assets/erpnext/js/salary_slip_deductions_report_filters.js", function() {
-	frappe.query_reports["Income Tax Deductions"] = erpnext.salary_slip_deductions_report_filters;
-});
diff --git a/erpnext/payroll/report/income_tax_deductions/income_tax_deductions.json b/erpnext/payroll/report/income_tax_deductions/income_tax_deductions.json
deleted file mode 100644
index cf80398..0000000
--- a/erpnext/payroll/report/income_tax_deductions/income_tax_deductions.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "add_total_row": 0,
- "creation": "2020-05-30 00:07:56.744372",
- "disable_prepared_report": 0,
- "disabled": 0,
- "docstatus": 0,
- "doctype": "Report",
- "idx": 0,
- "is_standard": "Yes",
- "modified": "2020-05-30 00:07:56.744372",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Income Tax Deductions",
- "owner": "Administrator",
- "prepared_report": 0,
- "ref_doctype": "Salary Slip",
- "report_name": "Income Tax Deductions",
- "report_type": "Script Report",
- "roles": [
-  {
-   "role": "HR User"
-  },
-  {
-   "role": "HR Manager"
-  },
-  {
-   "role": "Employee"
-  }
- ]
-}
\ No newline at end of file
diff --git a/erpnext/payroll/report/income_tax_deductions/income_tax_deductions.py b/erpnext/payroll/report/income_tax_deductions/income_tax_deductions.py
deleted file mode 100644
index ccf1656..0000000
--- a/erpnext/payroll/report/income_tax_deductions/income_tax_deductions.py
+++ /dev/null
@@ -1,136 +0,0 @@
-# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-
-import erpnext
-
-
-def execute(filters=None):
-	data = get_data(filters)
-	columns = get_columns(filters) if len(data) else []
-
-	return columns, data
-
-
-def get_columns(filters):
-	columns = [
-		{
-			"label": _("Employee"),
-			"options": "Employee",
-			"fieldname": "employee",
-			"fieldtype": "Link",
-			"width": 200,
-		},
-		{
-			"label": _("Employee Name"),
-			"options": "Employee",
-			"fieldname": "employee_name",
-			"fieldtype": "Link",
-			"width": 160,
-		},
-	]
-
-	if erpnext.get_region() == "India":
-		columns.append(
-			{"label": _("PAN Number"), "fieldname": "pan_number", "fieldtype": "Data", "width": 140}
-		)
-
-	columns += [
-		{"label": _("Income Tax Component"), "fieldname": "it_comp", "fieldtype": "Data", "width": 170},
-		{
-			"label": _("Income Tax Amount"),
-			"fieldname": "it_amount",
-			"fieldtype": "Currency",
-			"options": "currency",
-			"width": 140,
-		},
-		{
-			"label": _("Gross Pay"),
-			"fieldname": "gross_pay",
-			"fieldtype": "Currency",
-			"options": "currency",
-			"width": 140,
-		},
-		{"label": _("Posting Date"), "fieldname": "posting_date", "fieldtype": "Date", "width": 140},
-	]
-
-	return columns
-
-
-def get_conditions(filters):
-	conditions = [""]
-
-	if filters.get("department"):
-		conditions.append("sal.department = '%s' " % (filters["department"]))
-
-	if filters.get("branch"):
-		conditions.append("sal.branch = '%s' " % (filters["branch"]))
-
-	if filters.get("company"):
-		conditions.append("sal.company = '%s' " % (filters["company"]))
-
-	if filters.get("month"):
-		conditions.append("month(sal.start_date) = '%s' " % (filters["month"]))
-
-	if filters.get("year"):
-		conditions.append("year(start_date) = '%s' " % (filters["year"]))
-
-	return " and ".join(conditions)
-
-
-def get_data(filters):
-
-	data = []
-
-	if erpnext.get_region() == "India":
-		employee_pan_dict = frappe._dict(
-			frappe.db.sql(""" select employee, pan_number from `tabEmployee`""")
-		)
-
-	component_types = frappe.db.sql(
-		""" select name from `tabSalary Component`
-		where is_income_tax_component = 1 """
-	)
-
-	component_types = [comp_type[0] for comp_type in component_types]
-
-	if not len(component_types):
-		return []
-
-	conditions = get_conditions(filters)
-
-	entry = frappe.db.sql(
-		""" select sal.employee, sal.employee_name, sal.posting_date, ded.salary_component, ded.amount,sal.gross_pay
-		from `tabSalary Slip` sal, `tabSalary Detail` ded
-		where sal.name = ded.parent
-		and ded.parentfield = 'deductions'
-		and ded.parenttype = 'Salary Slip'
-		and sal.docstatus = 1 %s
-		and ded.salary_component in (%s)
-	"""
-		% (conditions, ", ".join(["%s"] * len(component_types))),
-		tuple(component_types),
-		as_dict=1,
-	)
-
-	for d in entry:
-
-		employee = {
-			"employee": d.employee,
-			"employee_name": d.employee_name,
-			"it_comp": d.salary_component,
-			"posting_date": d.posting_date,
-			# "pan_number": employee_pan_dict.get(d.employee),
-			"it_amount": d.amount,
-			"gross_pay": d.gross_pay,
-		}
-
-		if erpnext.get_region() == "India":
-			employee["pan_number"] = employee_pan_dict.get(d.employee)
-
-		data.append(employee)
-
-	return data
diff --git a/erpnext/payroll/report/salary_payments_based_on_payment_mode/__init__.py b/erpnext/payroll/report/salary_payments_based_on_payment_mode/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/report/salary_payments_based_on_payment_mode/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/report/salary_payments_based_on_payment_mode/salary_payments_based_on_payment_mode.js b/erpnext/payroll/report/salary_payments_based_on_payment_mode/salary_payments_based_on_payment_mode.js
deleted file mode 100644
index 9b82954..0000000
--- a/erpnext/payroll/report/salary_payments_based_on_payment_mode/salary_payments_based_on_payment_mode.js
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-/* eslint-disable */
-
-frappe.require("assets/erpnext/js/salary_slip_deductions_report_filters.js", function() {
-	frappe.query_reports["Salary Payments Based On Payment Mode"] = erpnext.salary_slip_deductions_report_filters;
-});
diff --git a/erpnext/payroll/report/salary_payments_based_on_payment_mode/salary_payments_based_on_payment_mode.json b/erpnext/payroll/report/salary_payments_based_on_payment_mode/salary_payments_based_on_payment_mode.json
deleted file mode 100644
index c04cc32..0000000
--- a/erpnext/payroll/report/salary_payments_based_on_payment_mode/salary_payments_based_on_payment_mode.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "add_total_row": 0,
- "creation": "2020-06-16 18:43:43.107246",
- "disable_prepared_report": 0,
- "disabled": 0,
- "docstatus": 0,
- "doctype": "Report",
- "idx": 0,
- "is_standard": "Yes",
- "modified": "2020-06-16 18:43:43.107246",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Salary Payments Based On Payment Mode",
- "owner": "Administrator",
- "prepared_report": 0,
- "ref_doctype": "Salary Slip",
- "report_name": "Salary Payments Based On Payment Mode",
- "report_type": "Script Report",
- "roles": [
-  {
-   "role": "HR User"
-  },
-  {
-   "role": "HR Manager"
-  },
-  {
-   "role": "Employee"
-  }
- ]
-}
\ No newline at end of file
diff --git a/erpnext/payroll/report/salary_payments_based_on_payment_mode/salary_payments_based_on_payment_mode.py b/erpnext/payroll/report/salary_payments_based_on_payment_mode/salary_payments_based_on_payment_mode.py
deleted file mode 100644
index 4223f9d..0000000
--- a/erpnext/payroll/report/salary_payments_based_on_payment_mode/salary_payments_based_on_payment_mode.py
+++ /dev/null
@@ -1,180 +0,0 @@
-# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-
-import erpnext
-from erpnext.regional.report.provident_fund_deductions.provident_fund_deductions import (
-	get_conditions,
-)
-
-
-def execute(filters=None):
-	mode_of_payments = get_payment_modes()
-
-	if not len(mode_of_payments):
-		return [], []
-
-	columns = get_columns(filters, mode_of_payments)
-	data, total_rows, report_summary = get_data(filters, mode_of_payments)
-	chart = get_chart(mode_of_payments, total_rows)
-
-	return columns, data, None, chart, report_summary
-
-
-def get_columns(filters, mode_of_payments):
-	columns = [
-		{
-			"label": _("Branch"),
-			"options": "Branch",
-			"fieldname": "branch",
-			"fieldtype": "Link",
-			"width": 200,
-		}
-	]
-
-	for mode in mode_of_payments:
-		columns.append({"label": _(mode), "fieldname": mode, "fieldtype": "Currency", "width": 160})
-
-	columns.append({"label": _("Total"), "fieldname": "total", "fieldtype": "Currency", "width": 140})
-
-	return columns
-
-
-def get_payment_modes():
-	mode_of_payments = frappe.db.sql_list(
-		"""
-		select distinct mode_of_payment from `tabSalary Slip` where docstatus = 1
-	"""
-	)
-	return mode_of_payments
-
-
-def prepare_data(entry):
-	branch_wise_entries = {}
-	gross_pay = 0
-
-	for d in entry:
-		gross_pay += d.gross_pay
-		if branch_wise_entries.get(d.branch):
-			branch_wise_entries[d.branch][d.mode_of_payment] = d.net_pay
-		else:
-			branch_wise_entries.setdefault(d.branch, {}).setdefault(d.mode_of_payment, d.net_pay)
-
-	return branch_wise_entries, gross_pay
-
-
-def get_data(filters, mode_of_payments):
-	data = []
-
-	conditions = get_conditions(filters)
-
-	entry = frappe.db.sql(
-		"""
-		select branch, mode_of_payment, sum(net_pay) as net_pay, sum(gross_pay) as gross_pay
-		from `tabSalary Slip` sal
-		where docstatus = 1 %s
-		group by branch, mode_of_payment
-		"""
-		% (conditions),
-		as_dict=1,
-	)
-
-	branch_wise_entries, gross_pay = prepare_data(entry)
-
-	branches = frappe.db.sql_list(
-		"""
-		select distinct branch from `tabSalary Slip` sal
-		where docstatus = 1 %s
-	"""
-		% (conditions)
-	)
-
-	total_row = {"total": 0, "branch": "Total"}
-
-	for branch in branches:
-		total = 0
-		row = {"branch": branch}
-		for mode in mode_of_payments:
-			if branch_wise_entries.get(branch).get(mode):
-				row[mode] = branch_wise_entries.get(branch).get(mode)
-				total += branch_wise_entries.get(branch).get(mode)
-
-		row["total"] = total
-		data.append(row)
-
-	total_row = get_total_based_on_mode_of_payment(data, mode_of_payments)
-	total_deductions = gross_pay - total_row.get("total")
-
-	report_summary = []
-
-	if data:
-		data.append(total_row)
-		data.append({})
-		data.append({"branch": "<b>Total Gross Pay</b>", mode_of_payments[0]: gross_pay})
-		data.append({"branch": "<b>Total Deductions</b>", mode_of_payments[0]: total_deductions})
-		data.append({"branch": "<b>Total Net Pay</b>", mode_of_payments[0]: total_row.get("total")})
-
-		currency = erpnext.get_company_currency(filters.company)
-		report_summary = get_report_summary(
-			gross_pay, total_deductions, total_row.get("total"), currency
-		)
-
-	return data, total_row, report_summary
-
-
-def get_total_based_on_mode_of_payment(data, mode_of_payments):
-
-	total = 0
-	total_row = {"branch": "<b>Total</b>"}
-	for mode in mode_of_payments:
-		sum_of_payment = sum([detail[mode] for detail in data if mode in detail.keys()])
-		total_row[mode] = sum_of_payment
-		total += sum_of_payment
-
-	total_row["total"] = total
-	return total_row
-
-
-def get_report_summary(gross_pay, total_deductions, net_pay, currency):
-	return [
-		{
-			"value": gross_pay,
-			"label": _("Total Gross Pay"),
-			"indicator": "Green",
-			"datatype": "Currency",
-			"currency": currency,
-		},
-		{
-			"value": total_deductions,
-			"label": _("Total Deduction"),
-			"datatype": "Currency",
-			"indicator": "Red",
-			"currency": currency,
-		},
-		{
-			"value": net_pay,
-			"label": _("Total Net Pay"),
-			"datatype": "Currency",
-			"indicator": "Blue",
-			"currency": currency,
-		},
-	]
-
-
-def get_chart(mode_of_payments, data):
-	if data:
-		values = []
-		labels = []
-
-		for mode in mode_of_payments:
-			values.append(data[mode])
-			labels.append([mode])
-
-		chart = {
-			"data": {"labels": labels, "datasets": [{"name": "Mode Of Payments", "values": values}]}
-		}
-		chart["type"] = "bar"
-		return chart
diff --git a/erpnext/payroll/report/salary_payments_via_ecs/__init__.py b/erpnext/payroll/report/salary_payments_via_ecs/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/report/salary_payments_via_ecs/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/report/salary_payments_via_ecs/salary_payments_via_ecs.js b/erpnext/payroll/report/salary_payments_via_ecs/salary_payments_via_ecs.js
deleted file mode 100644
index e49fc11..0000000
--- a/erpnext/payroll/report/salary_payments_via_ecs/salary_payments_via_ecs.js
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-/* eslint-disable */
-
-frappe.require("assets/erpnext/js/salary_slip_deductions_report_filters.js", function() {
-
-	let ecs_checklist_filter = erpnext.salary_slip_deductions_report_filters
-	ecs_checklist_filter['filters'].push({
-		fieldname: "type",
-		label: __("Type"),
-		fieldtype: "Select",
-		options:["", "Bank", "Cash", "Cheque"]
-	})
-
-	frappe.query_reports["Salary Payments via ECS"] = ecs_checklist_filter
-});
diff --git a/erpnext/payroll/report/salary_payments_via_ecs/salary_payments_via_ecs.json b/erpnext/payroll/report/salary_payments_via_ecs/salary_payments_via_ecs.json
deleted file mode 100644
index dd0ac7c..0000000
--- a/erpnext/payroll/report/salary_payments_via_ecs/salary_payments_via_ecs.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "add_total_row": 0,
- "creation": "2020-06-16 18:35:30.508143",
- "disable_prepared_report": 0,
- "disabled": 0,
- "docstatus": 0,
- "doctype": "Report",
- "idx": 0,
- "is_standard": "Yes",
- "modified": "2020-06-16 18:38:23.680185",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Salary Payments via ECS",
- "owner": "Administrator",
- "prepared_report": 0,
- "ref_doctype": "Salary Slip",
- "report_name": "Salary Payments via ECS",
- "report_type": "Script Report",
- "roles": [
-  {
-   "role": "HR Manager"
-  },
-  {
-   "role": "HR User"
-  }
- ]
-}
\ No newline at end of file
diff --git a/erpnext/payroll/report/salary_payments_via_ecs/salary_payments_via_ecs.py b/erpnext/payroll/report/salary_payments_via_ecs/salary_payments_via_ecs.py
deleted file mode 100644
index 4f9370b..0000000
--- a/erpnext/payroll/report/salary_payments_via_ecs/salary_payments_via_ecs.py
+++ /dev/null
@@ -1,140 +0,0 @@
-# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-
-import erpnext
-
-
-def execute(filters=None):
-	columns = get_columns(filters)
-	data = get_data(filters)
-
-	return columns, data
-
-
-def get_columns(filters):
-	columns = [
-		{
-			"label": _("Branch"),
-			"options": "Branch",
-			"fieldname": "branch",
-			"fieldtype": "Link",
-			"width": 200,
-		},
-		{
-			"label": _("Employee Name"),
-			"options": "Employee",
-			"fieldname": "employee_name",
-			"fieldtype": "Link",
-			"width": 160,
-		},
-		{
-			"label": _("Employee"),
-			"options": "Employee",
-			"fieldname": "employee",
-			"fieldtype": "Link",
-			"width": 140,
-		},
-		{
-			"label": _("Gross Pay"),
-			"fieldname": "gross_pay",
-			"fieldtype": "Currency",
-			"options": "currency",
-			"width": 140,
-		},
-		{"label": _("Bank"), "fieldname": "bank", "fieldtype": "Data", "width": 140},
-		{"label": _("Account No"), "fieldname": "account_no", "fieldtype": "Data", "width": 140},
-	]
-	if erpnext.get_region() == "India":
-		columns += [
-			{"label": _("IFSC"), "fieldname": "ifsc", "fieldtype": "Data", "width": 140},
-			{"label": _("MICR"), "fieldname": "micr", "fieldtype": "Data", "width": 140},
-		]
-
-	return columns
-
-
-def get_conditions(filters):
-	conditions = [""]
-
-	if filters.get("department"):
-		conditions.append("department = '%s' " % (filters["department"]))
-
-	if filters.get("branch"):
-		conditions.append("branch = '%s' " % (filters["branch"]))
-
-	if filters.get("company"):
-		conditions.append("company = '%s' " % (filters["company"]))
-
-	if filters.get("month"):
-		conditions.append("month(start_date) = '%s' " % (filters["month"]))
-
-	if filters.get("year"):
-		conditions.append("year(start_date) = '%s' " % (filters["year"]))
-
-	return " and ".join(conditions)
-
-
-def get_data(filters):
-
-	data = []
-
-	fields = ["employee", "branch", "bank_name", "bank_ac_no", "salary_mode"]
-	if erpnext.get_region() == "India":
-		fields += ["ifsc_code", "micr_code"]
-
-	employee_details = frappe.get_list("Employee", fields=fields)
-	employee_data_dict = {}
-
-	for d in employee_details:
-		employee_data_dict.setdefault(
-			d.employee,
-			{
-				"bank_ac_no": d.bank_ac_no,
-				"ifsc_code": d.ifsc_code or None,
-				"micr_code": d.micr_code or None,
-				"branch": d.branch,
-				"salary_mode": d.salary_mode,
-				"bank_name": d.bank_name,
-			},
-		)
-
-	conditions = get_conditions(filters)
-
-	entry = frappe.db.sql(
-		""" select employee, employee_name, gross_pay
-		from `tabSalary Slip`
-		where docstatus = 1 %s """
-		% (conditions),
-		as_dict=1,
-	)
-
-	for d in entry:
-
-		employee = {
-			"branch": employee_data_dict.get(d.employee).get("branch"),
-			"employee_name": d.employee_name,
-			"employee": d.employee,
-			"gross_pay": d.gross_pay,
-		}
-
-		if employee_data_dict.get(d.employee).get("salary_mode") == "Bank":
-			employee["bank"] = employee_data_dict.get(d.employee).get("bank_name")
-			employee["account_no"] = employee_data_dict.get(d.employee).get("bank_ac_no")
-			if erpnext.get_region() == "India":
-				employee["ifsc"] = employee_data_dict.get(d.employee).get("ifsc_code")
-				employee["micr"] = employee_data_dict.get(d.employee).get("micr_code")
-		else:
-			employee["account_no"] = employee_data_dict.get(d.employee).get("salary_mode")
-
-		if filters.get("type") and employee_data_dict.get(d.employee).get("salary_mode") == filters.get(
-			"type"
-		):
-			data.append(employee)
-		elif not filters.get("type"):
-			data.append(employee)
-
-	return data
diff --git a/erpnext/payroll/report/salary_register/__init__.py b/erpnext/payroll/report/salary_register/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/payroll/report/salary_register/__init__.py
+++ /dev/null
diff --git a/erpnext/payroll/report/salary_register/salary_register.html b/erpnext/payroll/report/salary_register/salary_register.html
deleted file mode 100644
index 3abc3a0..0000000
--- a/erpnext/payroll/report/salary_register/salary_register.html
+++ /dev/null
@@ -1,40 +0,0 @@
-{%
-	var report_columns = report.get_columns_for_print();
-%}
-<div style="margin-bottom: 7px;" class="text-center">
-	{%= frappe.boot.letter_heads[filters.letter_head || frappe.defaults.get_default("letter_head")].header %}
-</div>
-<h2 class="text-center">{%= __(report.report_name) %}</h2>
-<h5 class="text-center">{{ __("From") }} {%= filters.from_date %} {{ __("to") }} {%= filters.to_date %}</h5>
-<hr>
-<table class="table table-bordered">
-	<thead>
-		<tr>
-			{% for(var i=1, l=report_columns.length; i<l; i++) { %}
-				<th class="text-right">{%= report_columns[i].label %}</th>
-			{% } %}
-		</tr>
-	</thead>
-	<tbody>
-		{% for(var j=0, k=data.length; j<k; j++) { %}
-			{%
-				var row = data[j];
-			%}
-			<tr>
-				{% for(var i=1, l=report_columns.length; i<l; i++) { %}
-					<td class="text-right">
-						{% var fieldname = report_columns[i].fieldname; %}
-						{% if (report_columns[i].fieldtype=='Currency' && !isNaN(row[fieldname])) { %}
-							{%= format_currency(row[fieldname]) %}
-						{% } else { %}
-							{% if (!is_null(row[fieldname])) { %}
-								{%= row[fieldname] %}
-							{% } %}
-						{% } %}
-					</td>
-				{% } %}
-			</tr>
-		{% } %}
-	</tbody>
-</table>
-<p class="text-right text-muted">{{ __("Printed On") }} {%= frappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string()) %}</p>
diff --git a/erpnext/payroll/report/salary_register/salary_register.js b/erpnext/payroll/report/salary_register/salary_register.js
deleted file mode 100644
index eb4acb9..0000000
--- a/erpnext/payroll/report/salary_register/salary_register.js
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.query_reports["Salary Register"] = {
-	"filters": [
-		{
-			"fieldname":"from_date",
-			"label": __("From"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.add_months(frappe.datetime.get_today(),-1),
-			"reqd": 1,
-			"width": "100px"
-		},
-		{
-			"fieldname":"to_date",
-			"label": __("To"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.get_today(),
-			"reqd": 1,
-			"width": "100px"
-		},
-		{
-			"fieldname": "currency",
-			"fieldtype": "Link",
-			"options": "Currency",
-			"label": __("Currency"),
-			"default": erpnext.get_currency(frappe.defaults.get_default("Company")),
-			"width": "50px"
-		},
-		{
-			"fieldname":"employee",
-			"label": __("Employee"),
-			"fieldtype": "Link",
-			"options": "Employee",
-			"width": "100px"
-		},
-		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company"),
-			"width": "100px",
-			"reqd": 1
-		},
-		{
-			"fieldname":"docstatus",
-			"label":__("Document Status"),
-			"fieldtype":"Select",
-			"options":["Draft", "Submitted", "Cancelled"],
-			"default": "Submitted",
-			"width": "100px"
-		}
-	]
-}
diff --git a/erpnext/payroll/report/salary_register/salary_register.json b/erpnext/payroll/report/salary_register/salary_register.json
deleted file mode 100644
index 5a70c32..0000000
--- a/erpnext/payroll/report/salary_register/salary_register.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "add_total_row": 1,
- "creation": "2017-01-10 17:36:58.153863",
- "disable_prepared_report": 0,
- "disabled": 0,
- "docstatus": 0,
- "doctype": "Report",
- "idx": 2,
- "is_standard": "Yes",
- "modified": "2020-05-28 00:07:18.576661",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Salary Register",
- "owner": "Administrator",
- "prepared_report": 0,
- "ref_doctype": "Salary Slip",
- "report_name": "Salary Register",
- "report_type": "Script Report",
- "roles": [
-  {
-   "role": "HR User"
-  },
-  {
-   "role": "HR Manager"
-  }
- ]
-}
\ No newline at end of file
diff --git a/erpnext/payroll/report/salary_register/salary_register.py b/erpnext/payroll/report/salary_register/salary_register.py
deleted file mode 100644
index 0a62b43..0000000
--- a/erpnext/payroll/report/salary_register/salary_register.py
+++ /dev/null
@@ -1,229 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-
-import frappe
-from frappe import _
-from frappe.utils import flt
-
-import erpnext
-
-
-def execute(filters=None):
-	if not filters:
-		filters = {}
-	currency = None
-	if filters.get("currency"):
-		currency = filters.get("currency")
-	company_currency = erpnext.get_company_currency(filters.get("company"))
-	salary_slips = get_salary_slips(filters, company_currency)
-	if not salary_slips:
-		return [], []
-
-	columns, earning_types, ded_types = get_columns(salary_slips)
-	ss_earning_map = get_ss_earning_map(salary_slips, currency, company_currency)
-	ss_ded_map = get_ss_ded_map(salary_slips, currency, company_currency)
-	doj_map = get_employee_doj_map()
-
-	data = []
-	for ss in salary_slips:
-		row = [
-			ss.name,
-			ss.employee,
-			ss.employee_name,
-			doj_map.get(ss.employee),
-			ss.branch,
-			ss.department,
-			ss.designation,
-			ss.company,
-			ss.start_date,
-			ss.end_date,
-			ss.leave_without_pay,
-			ss.payment_days,
-		]
-
-		if ss.branch is not None:
-			columns[3] = columns[3].replace("-1", "120")
-		if ss.department is not None:
-			columns[4] = columns[4].replace("-1", "120")
-		if ss.designation is not None:
-			columns[5] = columns[5].replace("-1", "120")
-		if ss.leave_without_pay is not None:
-			columns[9] = columns[9].replace("-1", "130")
-
-		for e in earning_types:
-			row.append(ss_earning_map.get(ss.name, {}).get(e))
-
-		if currency == company_currency:
-			row += [flt(ss.gross_pay) * flt(ss.exchange_rate)]
-		else:
-			row += [ss.gross_pay]
-
-		for d in ded_types:
-			row.append(ss_ded_map.get(ss.name, {}).get(d))
-
-		row.append(ss.total_loan_repayment)
-
-		if currency == company_currency:
-			row += [
-				flt(ss.total_deduction) * flt(ss.exchange_rate),
-				flt(ss.net_pay) * flt(ss.exchange_rate),
-			]
-		else:
-			row += [ss.total_deduction, ss.net_pay]
-		row.append(currency or company_currency)
-		data.append(row)
-
-	return columns, data
-
-
-def get_columns(salary_slips):
-	"""
-	columns = [
-	        _("Salary Slip ID") + ":Link/Salary Slip:150",
-	        _("Employee") + ":Link/Employee:120",
-	        _("Employee Name") + "::140",
-	        _("Date of Joining") + "::80",
-	        _("Branch") + ":Link/Branch:120",
-	        _("Department") + ":Link/Department:120",
-	        _("Designation") + ":Link/Designation:120",
-	        _("Company") + ":Link/Company:120",
-	        _("Start Date") + "::80",
-	        _("End Date") + "::80",
-	        _("Leave Without Pay") + ":Float:130",
-	        _("Payment Days") + ":Float:120",
-	        _("Currency") + ":Link/Currency:80"
-	]
-	"""
-	columns = [
-		_("Salary Slip ID") + ":Link/Salary Slip:150",
-		_("Employee") + ":Link/Employee:120",
-		_("Employee Name") + "::140",
-		_("Date of Joining") + "::80",
-		_("Branch") + ":Link/Branch:-1",
-		_("Department") + ":Link/Department:-1",
-		_("Designation") + ":Link/Designation:120",
-		_("Company") + ":Link/Company:120",
-		_("Start Date") + "::80",
-		_("End Date") + "::80",
-		_("Leave Without Pay") + ":Float:50",
-		_("Payment Days") + ":Float:120",
-	]
-
-	salary_components = {_("Earning"): [], _("Deduction"): []}
-
-	for component in frappe.db.sql(
-		"""select distinct sd.salary_component, sc.type
-		from `tabSalary Detail` sd, `tabSalary Component` sc
-		where sc.name=sd.salary_component and sd.amount != 0 and sd.parent in (%s)"""
-		% (", ".join(["%s"] * len(salary_slips))),
-		tuple([d.name for d in salary_slips]),
-		as_dict=1,
-	):
-		salary_components[_(component.type)].append(component.salary_component)
-
-	columns = (
-		columns
-		+ [(e + ":Currency:120") for e in salary_components[_("Earning")]]
-		+ [_("Gross Pay") + ":Currency:120"]
-		+ [(d + ":Currency:120") for d in salary_components[_("Deduction")]]
-		+ [
-			_("Loan Repayment") + ":Currency:120",
-			_("Total Deduction") + ":Currency:120",
-			_("Net Pay") + ":Currency:120",
-		]
-	)
-
-	return columns, salary_components[_("Earning")], salary_components[_("Deduction")]
-
-
-def get_salary_slips(filters, company_currency):
-	filters.update({"from_date": filters.get("from_date"), "to_date": filters.get("to_date")})
-	conditions, filters = get_conditions(filters, company_currency)
-	salary_slips = frappe.db.sql(
-		"""select * from `tabSalary Slip` where %s
-		order by employee"""
-		% conditions,
-		filters,
-		as_dict=1,
-	)
-
-	return salary_slips or []
-
-
-def get_conditions(filters, company_currency):
-	conditions = ""
-	doc_status = {"Draft": 0, "Submitted": 1, "Cancelled": 2}
-
-	if filters.get("docstatus"):
-		conditions += "docstatus = {0}".format(doc_status[filters.get("docstatus")])
-
-	if filters.get("from_date"):
-		conditions += " and start_date >= %(from_date)s"
-	if filters.get("to_date"):
-		conditions += " and end_date <= %(to_date)s"
-	if filters.get("company"):
-		conditions += " and company = %(company)s"
-	if filters.get("employee"):
-		conditions += " and employee = %(employee)s"
-	if filters.get("currency") and filters.get("currency") != company_currency:
-		conditions += " and currency = %(currency)s"
-
-	return conditions, filters
-
-
-def get_employee_doj_map():
-	return frappe._dict(
-		frappe.db.sql(
-			"""
-				SELECT
-					employee,
-					date_of_joining
-				FROM `tabEmployee`
-				"""
-		)
-	)
-
-
-def get_ss_earning_map(salary_slips, currency, company_currency):
-	ss_earnings = frappe.db.sql(
-		"""select sd.parent, sd.salary_component, sd.amount, ss.exchange_rate, ss.name
-		from `tabSalary Detail` sd, `tabSalary Slip` ss where sd.parent=ss.name and sd.parent in (%s)"""
-		% (", ".join(["%s"] * len(salary_slips))),
-		tuple([d.name for d in salary_slips]),
-		as_dict=1,
-	)
-
-	ss_earning_map = {}
-	for d in ss_earnings:
-		ss_earning_map.setdefault(d.parent, frappe._dict()).setdefault(d.salary_component, 0.0)
-		if currency == company_currency:
-			ss_earning_map[d.parent][d.salary_component] += flt(d.amount) * flt(
-				d.exchange_rate if d.exchange_rate else 1
-			)
-		else:
-			ss_earning_map[d.parent][d.salary_component] += flt(d.amount)
-
-	return ss_earning_map
-
-
-def get_ss_ded_map(salary_slips, currency, company_currency):
-	ss_deductions = frappe.db.sql(
-		"""select sd.parent, sd.salary_component, sd.amount, ss.exchange_rate, ss.name
-		from `tabSalary Detail` sd, `tabSalary Slip` ss where sd.parent=ss.name and sd.parent in (%s)"""
-		% (", ".join(["%s"] * len(salary_slips))),
-		tuple([d.name for d in salary_slips]),
-		as_dict=1,
-	)
-
-	ss_ded_map = {}
-	for d in ss_deductions:
-		ss_ded_map.setdefault(d.parent, frappe._dict()).setdefault(d.salary_component, 0.0)
-		if currency == company_currency:
-			ss_ded_map[d.parent][d.salary_component] += flt(d.amount) * flt(
-				d.exchange_rate if d.exchange_rate else 1
-			)
-		else:
-			ss_ded_map[d.parent][d.salary_component] += flt(d.amount)
-
-	return ss_ded_map
diff --git a/erpnext/payroll/workspace/payroll/payroll.json b/erpnext/payroll/workspace/payroll/payroll.json
deleted file mode 100644
index 5629e63..0000000
--- a/erpnext/payroll/workspace/payroll/payroll.json
+++ /dev/null
@@ -1,372 +0,0 @@
-{
- "charts": [
-  {
-   "chart_name": "Outgoing Salary",
-   "label": "Outgoing Salary"
-  }
- ],
- "content": "[{\"type\":\"onboarding\",\"data\":{\"onboarding_name\":\"Payroll\",\"col\":12}},{\"type\":\"chart\",\"data\":{\"chart_name\":\"Outgoing Salary\",\"col\":12}},{\"type\":\"spacer\",\"data\":{\"col\":12}},{\"type\":\"header\",\"data\":{\"text\":\"<span class=\\\"h4\\\"><b>Your Shortcuts</b></span>\",\"col\":12}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Salary Structure\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Payroll Entry\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Salary Slip\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Income Tax Slab\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Salary Register\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Dashboard\",\"col\":3}},{\"type\":\"spacer\",\"data\":{\"col\":12}},{\"type\":\"header\",\"data\":{\"text\":\"<span class=\\\"h4\\\"><b>Reports & Masters</b></span>\",\"col\":12}},{\"type\":\"card\",\"data\":{\"card_name\":\"Payroll\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Taxation\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Compensations\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Reports\",\"col\":4}}]",
- "creation": "2020-05-27 19:54:23.405607",
- "docstatus": 0,
- "doctype": "Workspace",
- "for_user": "",
- "hide_custom": 0,
- "icon": "money-coins-1",
- "idx": 0,
- "label": "Payroll",
- "links": [
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Payroll",
-   "link_count": 0,
-   "onboard": 0,
-   "type": "Card Break"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Salary Component",
-   "link_count": 0,
-   "link_to": "Salary Component",
-   "link_type": "DocType",
-   "onboard": 1,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Salary Structure",
-   "link_count": 0,
-   "link_to": "Salary Structure",
-   "link_type": "DocType",
-   "onboard": 1,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Salary Structure Assignment",
-   "link_count": 0,
-   "link_to": "Salary Structure Assignment",
-   "link_type": "DocType",
-   "onboard": 1,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Payroll Entry",
-   "link_count": 0,
-   "link_to": "Payroll Entry",
-   "link_type": "DocType",
-   "onboard": 1,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Salary Slip",
-   "link_count": 0,
-   "link_to": "Salary Slip",
-   "link_type": "DocType",
-   "onboard": 1,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Taxation",
-   "link_count": 0,
-   "onboard": 0,
-   "type": "Card Break"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Payroll Period",
-   "link_count": 0,
-   "link_to": "Payroll Period",
-   "link_type": "DocType",
-   "onboard": 1,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Income Tax Slab",
-   "link_count": 0,
-   "link_to": "Income Tax Slab",
-   "link_type": "DocType",
-   "onboard": 1,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Other Income",
-   "link_count": 0,
-   "link_to": "Employee Other Income",
-   "link_type": "DocType",
-   "onboard": 1,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Tax Exemption Declaration",
-   "link_count": 0,
-   "link_to": "Employee Tax Exemption Declaration",
-   "link_type": "DocType",
-   "onboard": 1,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Tax Exemption Proof Submission",
-   "link_count": 0,
-   "link_to": "Employee Tax Exemption Proof Submission",
-   "link_type": "DocType",
-   "onboard": 1,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Tax Exemption Category",
-   "link_count": 0,
-   "link_to": "Employee Tax Exemption Category",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Tax Exemption Sub Category",
-   "link_count": 0,
-   "link_to": "Employee Tax Exemption Sub Category",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Compensations",
-   "link_count": 0,
-   "onboard": 0,
-   "type": "Card Break"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Additional Salary",
-   "link_count": 0,
-   "link_to": "Additional Salary",
-   "link_type": "DocType",
-   "onboard": 1,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Retention Bonus",
-   "link_count": 0,
-   "link_to": "Retention Bonus",
-   "link_type": "DocType",
-   "onboard": 1,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Incentive",
-   "link_count": 0,
-   "link_to": "Employee Incentive",
-   "link_type": "DocType",
-   "onboard": 1,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Benefit Application",
-   "link_count": 0,
-   "link_to": "Employee Benefit Application",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "",
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Employee Benefit Claim",
-   "link_count": 0,
-   "link_to": "Employee Benefit Claim",
-   "link_type": "DocType",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "hidden": 0,
-   "is_query_report": 0,
-   "label": "Reports",
-   "link_count": 0,
-   "onboard": 0,
-   "type": "Card Break"
-  },
-  {
-   "dependencies": "Salary Slip",
-   "hidden": 0,
-   "is_query_report": 1,
-   "label": "Salary Register",
-   "link_count": 0,
-   "link_to": "Salary Register",
-   "link_type": "Report",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-    "dependencies": "Salary Structure",
-    "hidden": 0,
-    "is_query_report": 1,
-    "label": "Income Tax Computation",
-    "link_count": 0,
-    "link_to": "Income Tax Computation",
-    "link_type": "Report",
-    "onboard": 0,
-    "type": "Link"
-   },
-  {
-   "dependencies": "Salary Slip",
-   "hidden": 0,
-   "is_query_report": 1,
-   "label": "Salary Payments Based On Payment Mode",
-   "link_count": 0,
-   "link_to": "Salary Payments Based On Payment Mode",
-   "link_type": "Report",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Salary Slip",
-   "hidden": 0,
-   "is_query_report": 1,
-   "label": "Salary Payments via ECS",
-   "link_count": 0,
-   "link_to": "Salary Payments via ECS",
-   "link_type": "Report",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Salary Slip",
-   "hidden": 0,
-   "is_query_report": 1,
-   "label": "Income Tax Deductions",
-   "link_count": 0,
-   "link_to": "Income Tax Deductions",
-   "link_type": "Report",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Salary Slip",
-   "hidden": 0,
-   "is_query_report": 1,
-   "label": "Professional Tax Deductions",
-   "link_count": 0,
-   "link_to": "Professional Tax Deductions",
-   "link_type": "Report",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Salary Slip",
-   "hidden": 0,
-   "is_query_report": 1,
-   "label": "Provident Fund Deductions",
-   "link_count": 0,
-   "link_to": "Provident Fund Deductions",
-   "link_type": "Report",
-   "onboard": 0,
-   "type": "Link"
-  },
-  {
-   "dependencies": "Payroll Entry",
-   "hidden": 0,
-   "is_query_report": 1,
-   "label": "Bank Remittance",
-   "link_count": 0,
-   "link_to": "Bank Remittance",
-   "link_type": "Report",
-   "onboard": 0,
-   "type": "Link"
-  }
- ],
- "modified": "2022-02-23 17:41:19.098813",
- "modified_by": "Administrator",
- "module": "Payroll",
- "name": "Payroll",
- "owner": "Administrator",
- "parent_page": "",
- "public": 1,
- "restrict_to_domain": "",
- "roles": [],
- "sequence_id": 19.0,
- "shortcuts": [
-  {
-   "label": "Salary Structure",
-   "link_to": "Salary Structure",
-   "type": "DocType"
-  },
-  {
-   "label": "Payroll Entry",
-   "link_to": "Payroll Entry",
-   "type": "DocType"
-  },
-  {
-   "color": "",
-   "format": "{} Pending",
-   "label": "Salary Slip",
-   "link_to": "Salary Slip",
-   "stats_filter": "{\"status\": \"Draft\"}",
-   "type": "DocType"
-  },
-  {
-   "label": "Income Tax Slab",
-   "link_to": "Income Tax Slab",
-   "type": "DocType"
-  },
-  {
-   "label": "Salary Register",
-   "link_to": "Salary Register",
-   "type": "Report"
-  },
-  {
-   "label": "Dashboard",
-   "link_to": "Payroll",
-   "type": "Dashboard"
-  }
- ],
- "title": "Payroll"
-}
\ No newline at end of file
