restructured erpnext and deleted unwanted
diff --git a/hr/Deduction Type/Income Tax/Income Tax.txt b/hr/Deduction Type/Income Tax/Income Tax.txt
new file mode 100644
index 0000000..182c9b1
--- /dev/null
+++ b/hr/Deduction Type/Income Tax/Income Tax.txt
@@ -0,0 +1 @@
+[{'modified_by': 'harshada@webnotestech.com', 'name': 'Income Tax', 'parent': None, 'description': 'Income Tax', 'creation': '2010-04-02 10:33:23', 'is_active': 'Yes', 'modified': '2010-04-05 12:53:07', 'module': 'Payroll', 'doctype': 'Deduction Type', 'idx': None, 'parenttype': None, 'deduction_name': 'Income Tax', 'trash_reason': None, 'owner': 'Administrator', 'docstatus': 0, 'parentfield': None}]
\ No newline at end of file
diff --git a/hr/Deduction Type/Professional Tax/Professional Tax.txt b/hr/Deduction Type/Professional Tax/Professional Tax.txt
new file mode 100644
index 0000000..b5e886c
--- /dev/null
+++ b/hr/Deduction Type/Professional Tax/Professional Tax.txt
@@ -0,0 +1 @@
+[{'modified_by': 'harshada@webnotestech.com', 'name': 'Professional Tax', 'parent': None, 'description': 'Professional Tax', 'creation': '2010-04-02 10:34:14', 'is_active': 'Yes', 'modified': '2010-04-05 12:52:59', 'module': 'Payroll', 'doctype': 'Deduction Type', 'idx': None, 'parenttype': None, 'deduction_name': 'Professional Tax', 'trash_reason': None, 'owner': 'Administrator', 'docstatus': 0, 'parentfield': None}]
\ No newline at end of file
diff --git a/hr/Deduction Type/Provident Fund/Provident Fund.txt b/hr/Deduction Type/Provident Fund/Provident Fund.txt
new file mode 100644
index 0000000..77fd26f
--- /dev/null
+++ b/hr/Deduction Type/Provident Fund/Provident Fund.txt
@@ -0,0 +1 @@
+[{'modified_by': 'harshada@webnotestech.com', 'name': 'Provident Fund', 'parent': None, 'description': 'Provident fund', 'creation': '2010-04-02 10:32:23', 'is_active': 'Yes', 'modified': '2010-04-05 12:52:52', 'module': 'Payroll', 'doctype': 'Deduction Type', 'idx': None, 'parenttype': None, 'deduction_name': 'Provident Fund', 'trash_reason': None, 'owner': 'Administrator', 'docstatus': 0, 'parentfield': None}]
\ No newline at end of file
diff --git a/hr/DocType Mapper/KRA Template-Appraisal/KRA Template-Appraisal.txt b/hr/DocType Mapper/KRA Template-Appraisal/KRA Template-Appraisal.txt
new file mode 100644
index 0000000..9e193d6
--- /dev/null
+++ b/hr/DocType Mapper/KRA Template-Appraisal/KRA Template-Appraisal.txt
@@ -0,0 +1 @@
+[{'modified_by': 'ashwini@webnotestech.com', 'name': 'KRA Template-Appraisal', 'parent': None, 'to_doctype': 'Appraisal', 'creation': '2010-08-30 15:45:32', 'modified': '2010-09-01 14:25:40', 'module': 'Mapper', 'doctype': 'DocType Mapper', 'idx': None, 'parenttype': None, 'ref_doc_submitted': None, 'owner': 'ashwini@webnotestech.com', 'docstatus': 0, 'from_doctype': 'KRA Template', 'parentfield': None}, {'map': 'Yes', 'modified_by': 'ashwini@webnotestech.com', 'name': 'FMD/00901', 'parent': 'KRA Template-Appraisal', 'to_field': 'kra', 'creation': '2010-08-30 15:45:32', 'modified': '2010-09-01 14:25:40', 'doctype': 'Field Mapper Detail', 'match_id': 0, 'idx': 1, 'parenttype': 'DocType Mapper', 'checking_operator': None, 'check_reference_value': None, 'owner': 'ashwini@webnotestech.com', 'docstatus': 0, 'from_field': 'kra', 'parentfield': 'field_mapper_details'}, {'map': 'Yes', 'modified_by': 'ashwini@webnotestech.com', 'name': 'FMD/00902', 'parent': 'KRA Template-Appraisal', 'to_field': 'per_weightage', 'creation': '2010-08-30 15:45:32', 'modified': '2010-09-01 14:25:40', 'doctype': 'Field Mapper Detail', 'match_id': 0, 'idx': 2, 'parenttype': 'DocType Mapper', 'checking_operator': None, 'check_reference_value': None, 'owner': 'ashwini@webnotestech.com', 'docstatus': 0, 'from_field': 'per_weightage', 'parentfield': 'field_mapper_details'}, {'reference_key': '', 'modified_by': 'ashwini@webnotestech.com', 'name': 'TMD/0000090', 'parent': 'KRA Template-Appraisal', 'is_reference_table': None, 'to_field': 'appraisal_details', 'creation': '2010-08-30 15:45:32', 'reference_doctype_key': '', 'modified': '2010-09-01 14:25:40', 'doctype': 'Table Mapper Detail', 'match_id': 0, 'idx': 1, 'parenttype': 'DocType Mapper', 'from_table': 'KRA Sheet', 'owner': 'ashwini@webnotestech.com', 'docstatus': 0, 'to_table': 'Appraisal Detail', 'from_field': 'kra_sheet', 'validation_logic': 'name is not Null', 'parentfield': 'table_mapper_details'}]
\ No newline at end of file
diff --git a/hr/DocType Mapper/Salary Structure-Salary Slip/Salary Structure-Salary Slip.txt b/hr/DocType Mapper/Salary Structure-Salary Slip/Salary Structure-Salary Slip.txt
new file mode 100644
index 0000000..ebabada
--- /dev/null
+++ b/hr/DocType Mapper/Salary Structure-Salary Slip/Salary Structure-Salary Slip.txt
@@ -0,0 +1,388 @@
+[
+	{
+		'creation': '2010-12-14 10:23:25',
+		'docstatus': 0,
+		'doctype': 'DocType Mapper',
+		'from_doctype': 'Salary Structure',
+		'idx': None,
+		'modified': '2011-02-12 18:31:40',
+		'modified_by': 'Administrator',
+		'module': 'Mapper',
+		'name': 'Salary Structure-Salary Slip',
+		'owner': 'harshada@webnotestech.com',
+		'parent': None,
+		'parentfield': None,
+		'parenttype': None,
+		'ref_doc_submitted': None,
+		'to_doctype': 'Salary Slip'
+	},
+	{
+		'checking_operator': None,
+		'creation': '2010-12-14 10:23:25',
+		'docstatus': 0,
+		'doctype': 'Field Mapper Detail',
+		'from_field': 'employee',
+		'idx': 1,
+		'map': 'Yes',
+		'match_id': 0,
+		'modified': '2011-02-12 18:31:40',
+		'modified_by': 'Administrator',
+		'name': 'FMD/00598',
+		'owner': 'harshada@webnotestech.com',
+		'parent': 'Salary Structure-Salary Slip',
+		'parentfield': 'field_mapper_details',
+		'parenttype': 'DocType Mapper',
+		'to_field': 'employee'
+	},
+	{
+		'checking_operator': None,
+		'creation': '2010-12-14 10:23:25',
+		'docstatus': 0,
+		'doctype': 'Field Mapper Detail',
+		'from_field': 'employee_name',
+		'idx': 2,
+		'map': 'Yes',
+		'match_id': 0,
+		'modified': '2011-02-12 18:31:40',
+		'modified_by': 'Administrator',
+		'name': 'FMD/00599',
+		'owner': 'harshada@webnotestech.com',
+		'parent': 'Salary Structure-Salary Slip',
+		'parentfield': 'field_mapper_details',
+		'parenttype': 'DocType Mapper',
+		'to_field': 'employee_name'
+	},
+	{
+		'checking_operator': None,
+		'creation': '2010-12-14 10:23:25',
+		'docstatus': 0,
+		'doctype': 'Field Mapper Detail',
+		'from_field': 'department',
+		'idx': 3,
+		'map': 'Yes',
+		'match_id': 0,
+		'modified': '2011-02-12 18:31:40',
+		'modified_by': 'Administrator',
+		'name': 'FMD/00600',
+		'owner': 'harshada@webnotestech.com',
+		'parent': 'Salary Structure-Salary Slip',
+		'parentfield': 'field_mapper_details',
+		'parenttype': 'DocType Mapper',
+		'to_field': 'department'
+	},
+	{
+		'checking_operator': None,
+		'creation': '2010-12-14 10:23:25',
+		'docstatus': 0,
+		'doctype': 'Field Mapper Detail',
+		'from_field': 'designation',
+		'idx': 4,
+		'map': 'Yes',
+		'match_id': 0,
+		'modified': '2011-02-12 18:31:40',
+		'modified_by': 'Administrator',
+		'name': 'FMD/00601',
+		'owner': 'harshada@webnotestech.com',
+		'parent': 'Salary Structure-Salary Slip',
+		'parentfield': 'field_mapper_details',
+		'parenttype': 'DocType Mapper',
+		'to_field': 'designation'
+	},
+	{
+		'checking_operator': None,
+		'creation': '2010-12-14 10:23:25',
+		'docstatus': 0,
+		'doctype': 'Field Mapper Detail',
+		'from_field': 'branch',
+		'idx': 5,
+		'map': 'Yes',
+		'match_id': 0,
+		'modified': '2011-02-12 18:31:40',
+		'modified_by': 'Administrator',
+		'name': 'FMD/00602',
+		'owner': 'harshada@webnotestech.com',
+		'parent': 'Salary Structure-Salary Slip',
+		'parentfield': 'field_mapper_details',
+		'parenttype': 'DocType Mapper',
+		'to_field': 'branch'
+	},
+	{
+		'checking_operator': None,
+		'creation': '2010-12-14 10:23:25',
+		'docstatus': 0,
+		'doctype': 'Field Mapper Detail',
+		'from_field': 'grade',
+		'idx': 6,
+		'map': 'Yes',
+		'match_id': 0,
+		'modified': '2011-02-12 18:31:40',
+		'modified_by': 'Administrator',
+		'name': 'FMD/00603',
+		'owner': 'harshada@webnotestech.com',
+		'parent': 'Salary Structure-Salary Slip',
+		'parentfield': 'field_mapper_details',
+		'parenttype': 'DocType Mapper',
+		'to_field': 'grade'
+	},
+	{
+		'checking_operator': None,
+		'creation': '2011-02-10 15:57:32',
+		'docstatus': 0,
+		'doctype': 'Field Mapper Detail',
+		'from_field': 'total_earning',
+		'idx': 7,
+		'map': 'Yes',
+		'match_id': 0,
+		'modified': '2011-02-12 18:31:40',
+		'modified_by': 'Administrator',
+		'name': 'FMD/00657',
+		'owner': 'Administrator',
+		'parent': 'Salary Structure-Salary Slip',
+		'parentfield': 'field_mapper_details',
+		'parenttype': 'DocType Mapper',
+		'to_field': 'gross_pay'
+	},
+	{
+		'checking_operator': None,
+		'creation': '2011-02-10 15:57:32',
+		'docstatus': 0,
+		'doctype': 'Field Mapper Detail',
+		'from_field': 'total_deduction',
+		'idx': 8,
+		'map': 'Yes',
+		'match_id': 0,
+		'modified': '2011-02-12 18:31:40',
+		'modified_by': 'Administrator',
+		'name': 'FMD/00656',
+		'owner': 'Administrator',
+		'parent': 'Salary Structure-Salary Slip',
+		'parentfield': 'field_mapper_details',
+		'parenttype': 'DocType Mapper',
+		'to_field': 'total_deduction'
+	},
+	{
+		'checking_operator': None,
+		'creation': '2011-02-10 15:57:32',
+		'docstatus': 0,
+		'doctype': 'Field Mapper Detail',
+		'from_field': 'net_pay',
+		'idx': 9,
+		'map': 'Yes',
+		'match_id': 0,
+		'modified': '2011-02-12 18:31:40',
+		'modified_by': 'Administrator',
+		'name': 'FMD/00658',
+		'owner': 'Administrator',
+		'parent': 'Salary Structure-Salary Slip',
+		'parentfield': 'field_mapper_details',
+		'parenttype': 'DocType Mapper',
+		'to_field': 'net_pay'
+	},
+	{
+		'checking_operator': None,
+		'creation': '2010-12-14 10:23:25',
+		'docstatus': 0,
+		'doctype': 'Field Mapper Detail',
+		'from_field': 'e_type',
+		'idx': 10,
+		'map': 'Yes',
+		'match_id': 1,
+		'modified': '2011-02-12 18:31:40',
+		'modified_by': 'Administrator',
+		'name': 'FMD/00604',
+		'owner': 'harshada@webnotestech.com',
+		'parent': 'Salary Structure-Salary Slip',
+		'parentfield': 'field_mapper_details',
+		'parenttype': 'DocType Mapper',
+		'to_field': 'e_type'
+	},
+	{
+		'checking_operator': None,
+		'creation': '2010-12-14 10:23:25',
+		'docstatus': 0,
+		'doctype': 'Field Mapper Detail',
+		'from_field': 'modified_value',
+		'idx': 11,
+		'map': 'Yes',
+		'match_id': 1,
+		'modified': '2011-02-12 18:31:40',
+		'modified_by': 'Administrator',
+		'name': 'FMD/00605',
+		'owner': 'harshada@webnotestech.com',
+		'parent': 'Salary Structure-Salary Slip',
+		'parentfield': 'field_mapper_details',
+		'parenttype': 'DocType Mapper',
+		'to_field': 'e_amount'
+	},
+	{
+		'checking_operator': None,
+		'creation': '2011-02-10 15:57:32',
+		'docstatus': 0,
+		'doctype': 'Field Mapper Detail',
+		'from_field': 'modified_value',
+		'idx': 12,
+		'map': 'Yes',
+		'match_id': 1,
+		'modified': '2011-02-12 18:31:40',
+		'modified_by': 'Administrator',
+		'name': 'FMD/00660',
+		'owner': 'Administrator',
+		'parent': 'Salary Structure-Salary Slip',
+		'parentfield': 'field_mapper_details',
+		'parenttype': 'DocType Mapper',
+		'to_field': 'e_modified_amount'
+	},
+	{
+		'checking_operator': None,
+		'creation': '2011-02-11 12:50:51',
+		'docstatus': 0,
+		'doctype': 'Field Mapper Detail',
+		'from_field': 'depend_on_lwp',
+		'idx': 13,
+		'map': 'Yes',
+		'match_id': 1,
+		'modified': '2011-02-12 18:31:40',
+		'modified_by': 'Administrator',
+		'name': 'FMD/00661',
+		'owner': 'Administrator',
+		'parent': 'Salary Structure-Salary Slip',
+		'parentfield': 'field_mapper_details',
+		'parenttype': 'DocType Mapper',
+		'to_field': 'e_depends_on_lwp'
+	},
+	{
+		'checking_operator': None,
+		'creation': '2010-12-14 10:23:25',
+		'docstatus': 0,
+		'doctype': 'Field Mapper Detail',
+		'from_field': 'd_type',
+		'idx': 14,
+		'map': 'Yes',
+		'match_id': 2,
+		'modified': '2011-02-12 18:31:40',
+		'modified_by': 'Administrator',
+		'name': 'FMD/00606',
+		'owner': 'harshada@webnotestech.com',
+		'parent': 'Salary Structure-Salary Slip',
+		'parentfield': 'field_mapper_details',
+		'parenttype': 'DocType Mapper',
+		'to_field': 'd_type'
+	},
+	{
+		'checking_operator': None,
+		'creation': '2010-12-14 10:23:25',
+		'docstatus': 0,
+		'doctype': 'Field Mapper Detail',
+		'from_field': 'd_modified_amt',
+		'idx': 15,
+		'map': 'Yes',
+		'match_id': 2,
+		'modified': '2011-02-12 18:31:40',
+		'modified_by': 'Administrator',
+		'name': 'FMD/00607',
+		'owner': 'harshada@webnotestech.com',
+		'parent': 'Salary Structure-Salary Slip',
+		'parentfield': 'field_mapper_details',
+		'parenttype': 'DocType Mapper',
+		'to_field': 'd_amount'
+	},
+	{
+		'checking_operator': None,
+		'creation': '2011-02-10 15:57:32',
+		'docstatus': 0,
+		'doctype': 'Field Mapper Detail',
+		'from_field': 'd_modified_amt',
+		'idx': 16,
+		'map': 'Yes',
+		'match_id': 2,
+		'modified': '2011-02-12 18:31:40',
+		'modified_by': 'Administrator',
+		'name': 'FMD/00659',
+		'owner': 'Administrator',
+		'parent': 'Salary Structure-Salary Slip',
+		'parentfield': 'field_mapper_details',
+		'parenttype': 'DocType Mapper',
+		'to_field': 'd_modified_amount'
+	},
+	{
+		'checking_operator': None,
+		'creation': '2011-02-11 12:50:51',
+		'docstatus': 0,
+		'doctype': 'Field Mapper Detail',
+		'from_field': 'depend_on_lwp',
+		'idx': 17,
+		'map': 'Yes',
+		'match_id': 2,
+		'modified': '2011-02-12 18:31:40',
+		'modified_by': 'Administrator',
+		'name': 'FMD/00662',
+		'owner': 'Administrator',
+		'parent': 'Salary Structure-Salary Slip',
+		'parentfield': 'field_mapper_details',
+		'parenttype': 'DocType Mapper',
+		'to_field': 'd_depends_on_lwp'
+	},
+	{
+		'creation': '2010-12-14 10:23:25',
+		'docstatus': 0,
+		'doctype': 'Table Mapper Detail',
+		'from_field': None,
+		'from_table': 'Salary Structure',
+		'idx': 1,
+		'match_id': 0,
+		'modified': '2011-02-12 18:31:40',
+		'modified_by': 'Administrator',
+		'name': 'TMD/0000063',
+		'owner': 'harshada@webnotestech.com',
+		'parent': 'Salary Structure-Salary Slip',
+		'parentfield': 'table_mapper_details',
+		'parenttype': 'DocType Mapper',
+		'reference_doctype_key': None,
+		'reference_key': None,
+		'to_field': None,
+		'to_table': 'Salary Slip',
+		'validation_logic': 'name is not null'
+	},
+	{
+		'creation': '2010-12-14 10:23:25',
+		'docstatus': 0,
+		'doctype': 'Table Mapper Detail',
+		'from_field': 'earning_details',
+		'from_table': 'Earning Detail',
+		'idx': 2,
+		'match_id': 1,
+		'modified': '2011-02-12 18:31:40',
+		'modified_by': 'Administrator',
+		'name': 'TMD/0000064',
+		'owner': 'harshada@webnotestech.com',
+		'parent': 'Salary Structure-Salary Slip',
+		'parentfield': 'table_mapper_details',
+		'parenttype': 'DocType Mapper',
+		'reference_doctype_key': None,
+		'reference_key': None,
+		'to_field': 'earning_details',
+		'to_table': 'SS Earning Detail',
+		'validation_logic': 'name is not null'
+	},
+	{
+		'creation': '2010-12-14 10:23:25',
+		'docstatus': 0,
+		'doctype': 'Table Mapper Detail',
+		'from_field': 'deduction_details',
+		'from_table': 'Deduction Detail',
+		'idx': 3,
+		'match_id': 2,
+		'modified': '2011-02-12 18:31:40',
+		'modified_by': 'Administrator',
+		'name': 'TMD/0000065',
+		'owner': 'harshada@webnotestech.com',
+		'parent': 'Salary Structure-Salary Slip',
+		'parentfield': 'table_mapper_details',
+		'parenttype': 'DocType Mapper',
+		'reference_doctype_key': None,
+		'reference_key': None,
+		'to_field': 'deduction_details',
+		'to_table': 'SS Deduction Detail',
+		'validation_logic': 'name is not null'
+	}
+]
\ No newline at end of file
diff --git a/hr/Earning Type/Basic/Basic.txt b/hr/Earning Type/Basic/Basic.txt
new file mode 100644
index 0000000..e0243f5
--- /dev/null
+++ b/hr/Earning Type/Basic/Basic.txt
@@ -0,0 +1 @@
+[{'modified_by': 'harshada@webnotestech.com', 'name': 'Basic', 'parent': None, 'description': 'Basic', 'creation': '2010-04-02 10:29:08', 'is_active': 'Yes', 'modified': '2010-04-05 12:52:35', 'earning_name': 'Basic', 'doctype': 'Earning Type', 'taxable': 'Yes', 'idx': None, 'parenttype': None, 'trash_reason': None, 'module': 'Payroll', 'exemption_limit': None, 'owner': 'Administrator', 'docstatus': 0, 'parentfield': None}]
\ No newline at end of file
diff --git a/hr/Earning Type/House Rent Allowance/House Rent Allowance.txt b/hr/Earning Type/House Rent Allowance/House Rent Allowance.txt
new file mode 100644
index 0000000..760c4d8
--- /dev/null
+++ b/hr/Earning Type/House Rent Allowance/House Rent Allowance.txt
@@ -0,0 +1 @@
+[{'modified_by': 'harshada@webnotestech.com', 'name': 'House Rent Allowance', 'parent': None, 'description': 'House Rent Allowance', 'creation': '2010-04-02 10:29:29', 'is_active': 'Yes', 'modified': '2010-04-05 12:33:19', 'earning_name': 'House Rent Allowance', 'doctype': 'Earning Type', 'taxable': 'No', 'idx': None, 'parenttype': None, 'trash_reason': None, 'module': 'Payroll', 'exemption_limit': None, 'owner': 'Administrator', 'docstatus': 0, 'parentfield': None}]
\ No newline at end of file
diff --git a/hr/Expense Type/Calls/Calls.txt b/hr/Expense Type/Calls/Calls.txt
new file mode 100644
index 0000000..2cd19e1
--- /dev/null
+++ b/hr/Expense Type/Calls/Calls.txt
@@ -0,0 +1 @@
+[{'modified_by': 'harshada@webnotestech.com', 'name': 'Calls', 'parent': None, 'description': None, 'creation': '2010-08-23 18:26:38', 'modified': '2010-08-23 18:26:38', 'module': 'Payroll', 'doctype': 'Expense Type', 'idx': None, 'parenttype': None, 'owner': 'harshada@webnotestech.com', 'docstatus': 0, 'expense_type': 'Calls', 'parentfield': None}]
\ No newline at end of file
diff --git a/hr/Expense Type/Food/Food.txt b/hr/Expense Type/Food/Food.txt
new file mode 100644
index 0000000..d0266ad
--- /dev/null
+++ b/hr/Expense Type/Food/Food.txt
@@ -0,0 +1 @@
+[{'modified_by': 'harshada@webnotestech.com', 'name': 'Food', 'parent': None, 'description': None, 'creation': '2010-08-23 18:26:30', 'modified': '2010-08-23 18:26:30', 'module': 'Payroll', 'doctype': 'Expense Type', 'idx': None, 'parenttype': None, 'owner': 'harshada@webnotestech.com', 'docstatus': 0, 'expense_type': 'Food', 'parentfield': None}]
\ No newline at end of file
diff --git a/hr/Expense Type/Medical/Medical.txt b/hr/Expense Type/Medical/Medical.txt
new file mode 100644
index 0000000..4e84862
--- /dev/null
+++ b/hr/Expense Type/Medical/Medical.txt
@@ -0,0 +1 @@
+[{'modified_by': 'harshada@webnotestech.com', 'name': 'Medical', 'parent': None, 'description': None, 'creation': '2010-08-23 18:26:49', 'modified': '2010-08-23 18:26:49', 'module': 'Payroll', 'doctype': 'Expense Type', 'idx': None, 'parenttype': None, 'owner': 'harshada@webnotestech.com', 'docstatus': 0, 'expense_type': 'Medical', 'parentfield': None}]
\ No newline at end of file
diff --git a/hr/Expense Type/Others/Others.txt b/hr/Expense Type/Others/Others.txt
new file mode 100644
index 0000000..13a6af3
--- /dev/null
+++ b/hr/Expense Type/Others/Others.txt
@@ -0,0 +1 @@
+[{'modified_by': 'harshada@webnotestech.com', 'name': 'Others', 'parent': None, 'description': None, 'creation': '2010-09-20 12:16:45', 'modified': '2010-09-20 12:16:45', 'module': 'Payroll', 'doctype': 'Expense Type', 'idx': None, 'parenttype': None, 'owner': 'harshada@webnotestech.com', 'docstatus': 0, 'expense_type': 'Others', 'parentfield': None}]
\ No newline at end of file
diff --git a/hr/Expense Type/Travel/Travel.txt b/hr/Expense Type/Travel/Travel.txt
new file mode 100644
index 0000000..966c2ea
--- /dev/null
+++ b/hr/Expense Type/Travel/Travel.txt
@@ -0,0 +1 @@
+[{'modified_by': 'harshada@webnotestech.com', 'name': 'Travel', 'parent': None, 'description': None, 'creation': '2010-09-20 12:16:45', 'modified': '2010-09-20 12:16:45', 'module': 'Payroll', 'doctype': 'Expense Type', 'idx': None, 'parenttype': None, 'owner': 'harshada@webnotestech.com', 'docstatus': 0, 'expense_type': 'Travel', 'parentfield': None}]
\ No newline at end of file
diff --git a/hr/Leave Type/Casual Leave/Casual Leave.txt b/hr/Leave Type/Casual Leave/Casual Leave.txt
new file mode 100644
index 0000000..fbd55a5
--- /dev/null
+++ b/hr/Leave Type/Casual Leave/Casual Leave.txt
@@ -0,0 +1 @@
+[{'leave_type_name': 'Casual Leave', 'modified_by': 'Administrator', 'name': 'Casual Leave', 'parent': None, 'is_encash': 1, 'creation': '2010-04-02 10:52:32', 'is_active': 'Yes', 'modified': '2010-04-02 10:52:32', 'is_carry_forward': 1, 'doctype': 'Leave Type', 'max_days_allowed': '3', 'idx': None, 'parenttype': None, 'trash_reason': None, 'module': 'Payroll', 'owner': 'Administrator', 'docstatus': 0, 'parentfield': None}]
\ No newline at end of file
diff --git a/hr/Leave Type/Compensatory Off/Compensatory Off.txt b/hr/Leave Type/Compensatory Off/Compensatory Off.txt
new file mode 100644
index 0000000..896b3e2
--- /dev/null
+++ b/hr/Leave Type/Compensatory Off/Compensatory Off.txt
@@ -0,0 +1 @@
+[{'leave_type_name': 'Compensatory Off', 'modified_by': 'Administrator', 'name': 'Compensatory Off', 'parent': None, 'is_encash': None, 'creation': '2010-04-02 10:59:30', 'is_active': 'Yes', 'modified': '2010-04-02 10:59:30', 'is_carry_forward': None, 'doctype': 'Leave Type', 'max_days_allowed': None, 'idx': None, 'parenttype': None, 'trash_reason': None, 'module': 'Payroll', 'owner': 'Administrator', 'docstatus': 0, 'parentfield': None}]
\ No newline at end of file
diff --git a/hr/Leave Type/Leave Without Pay/Leave Without Pay.txt b/hr/Leave Type/Leave Without Pay/Leave Without Pay.txt
new file mode 100644
index 0000000..04fa707
--- /dev/null
+++ b/hr/Leave Type/Leave Without Pay/Leave Without Pay.txt
@@ -0,0 +1 @@
+[{'leave_type_name': 'Leave Without Pay', 'modified_by': 'Administrator', 'name': 'Leave Without Pay', 'parent': None, 'is_encash': None, 'creation': '2010-04-02 10:57:37', 'is_active': 'Yes', 'modified': '2010-04-02 10:57:37', 'is_carry_forward': None, 'doctype': 'Leave Type', 'max_days_allowed': None, 'idx': None, 'parenttype': None, 'trash_reason': None, 'module': 'Payroll', 'owner': 'Administrator', 'docstatus': 0, 'parentfield': None}]
\ No newline at end of file
diff --git a/hr/Leave Type/Privilege Leave/Privilege Leave.txt b/hr/Leave Type/Privilege Leave/Privilege Leave.txt
new file mode 100644
index 0000000..7024c50
--- /dev/null
+++ b/hr/Leave Type/Privilege Leave/Privilege Leave.txt
@@ -0,0 +1 @@
+[{'leave_type_name': 'Privilege Leave', 'modified_by': 'Administrator', 'name': 'Privilege Leave', 'parent': None, 'is_encash': 1, 'creation': '2010-04-02 10:53:16', 'is_active': 'Yes', 'modified': '2010-04-02 10:53:16', 'is_carry_forward': None, 'doctype': 'Leave Type', 'max_days_allowed': None, 'idx': None, 'parenttype': None, 'trash_reason': None, 'module': 'Payroll', 'owner': 'Administrator', 'docstatus': 0, 'parentfield': None}]
\ No newline at end of file
diff --git a/hr/Leave Type/Sick Leave/Sick Leave.txt b/hr/Leave Type/Sick Leave/Sick Leave.txt
new file mode 100644
index 0000000..2ccb3ba
--- /dev/null
+++ b/hr/Leave Type/Sick Leave/Sick Leave.txt
@@ -0,0 +1 @@
+[{'leave_type_name': 'Sick Leave', 'modified_by': 'Administrator', 'name': 'Sick Leave', 'parent': None, 'is_encash': None, 'creation': '2010-04-02 10:54:12', 'is_active': 'Yes', 'modified': '2010-04-02 10:54:12', 'is_carry_forward': None, 'doctype': 'Leave Type', 'max_days_allowed': None, 'idx': None, 'parenttype': None, 'trash_reason': None, 'module': 'Payroll', 'owner': 'Administrator', 'docstatus': 0, 'parentfield': None}]
\ No newline at end of file
diff --git a/hr/Module Def/HR/HR.txt b/hr/Module Def/HR/HR.txt
new file mode 100644
index 0000000..5ad5e54
--- /dev/null
+++ b/hr/Module Def/HR/HR.txt
@@ -0,0 +1,603 @@
+[
+	{
+		'_last_update': None,
+		'creation': '2011-06-30 15:51:33',
+		'disabled': 'No',
+		'docstatus': 0,
+		'doctype': u'Module Def',
+		'doctype_list': None,
+		'file_list': None,
+		'idx': None,
+		'is_hidden': 'No',
+		'last_updated_date': None,
+		'modified': '2011-06-30 15:51:33',
+		'modified_by': 'Administrator',
+		'module_desc': 'Human Resource Management - Employee Database, Salaries etc.',
+		'module_icon': 'HR.gif',
+		'module_label': 'HR',
+		'module_name': 'HR',
+		'module_page': None,
+		'module_seq': 9,
+		'name': 'HR',
+		'owner': 'Administrator',
+		'parent': None,
+		'parentfield': None,
+		'parenttype': None,
+		'trash_reason': None,
+		'widget_code': None
+	},
+	{
+		'click_function': None,
+		'creation': '2011-06-30 15:51:33',
+		'description': 'Your Employee Database',
+		'display_name': 'Employee',
+		'doc_name': 'Employee',
+		'doc_type': 'Forms',
+		'docstatus': 0,
+		'doctype': 'Module Def Item',
+		'fields': 'employee_name\nemployment_type\nstatus\nbranch\ndesignation\ndepartment\ngrade\nreports_to',
+		'hide': None,
+		'icon': None,
+		'idx': 1,
+		'modified': '2011-06-30 15:51:33',
+		'modified_by': 'Administrator',
+		'name': 'MDI01335',
+		'owner': 'Administrator',
+		'parent': 'HR',
+		'parentfield': 'items',
+		'parenttype': 'Module Def'
+	},
+	{
+		'click_function': None,
+		'creation': '2011-06-30 15:51:33',
+		'description': 'Employees Daily Attendance Tracking Form',
+		'display_name': 'Attendance',
+		'doc_name': 'Attendance',
+		'doc_type': 'Forms',
+		'docstatus': 0,
+		'doctype': 'Module Def Item',
+		'fields': 'employee\nemployee_name\nstatus\natt_date\nfiscal_year\ncompany',
+		'hide': None,
+		'icon': None,
+		'idx': 2,
+		'modified': '2011-06-30 15:51:33',
+		'modified_by': 'Administrator',
+		'name': 'MDI01336',
+		'owner': 'Administrator',
+		'parent': 'HR',
+		'parentfield': 'items',
+		'parenttype': 'Module Def'
+	},
+	{
+		'click_function': None,
+		'creation': '2011-06-30 15:51:33',
+		'description': 'Upload Attendance data',
+		'display_name': 'Attendance Control Panel',
+		'doc_name': 'Attendance Control Panel',
+		'doc_type': 'Single DocType',
+		'docstatus': 0,
+		'doctype': 'Module Def Item',
+		'fields': None,
+		'hide': None,
+		'icon': None,
+		'idx': 3,
+		'modified': '2011-06-30 15:51:33',
+		'modified_by': 'Administrator',
+		'name': 'MDI01337',
+		'owner': 'Administrator',
+		'parent': 'HR',
+		'parentfield': 'items',
+		'parenttype': 'Module Def'
+	},
+	{
+		'click_function': None,
+		'creation': '2011-06-30 15:51:33',
+		'description': 'Leave allocation for selected employees at a time',
+		'display_name': 'Leave Control Panel',
+		'doc_name': 'Leave Control Panel',
+		'doc_type': 'Single DocType',
+		'docstatus': 0,
+		'doctype': 'Module Def Item',
+		'fields': None,
+		'hide': None,
+		'icon': None,
+		'idx': 4,
+		'modified': '2011-06-30 15:51:33',
+		'modified_by': 'Administrator',
+		'name': 'MDI01338',
+		'owner': 'Administrator',
+		'parent': 'HR',
+		'parentfield': 'items',
+		'parenttype': 'Module Def'
+	},
+	{
+		'click_function': None,
+		'creation': '2011-06-30 15:51:33',
+		'description': 'Allocate leave for fiscal year',
+		'display_name': 'Leave Allocation',
+		'doc_name': 'Leave Allocation',
+		'doc_type': 'Forms',
+		'docstatus': 0,
+		'doctype': 'Module Def Item',
+		'fields': 'employee\nleave_type\nfiscal_year\ntotal_leaves_allocated\nposting_date',
+		'hide': None,
+		'icon': None,
+		'idx': 5,
+		'modified': '2011-06-30 15:51:33',
+		'modified_by': 'Administrator',
+		'name': 'MDI01339',
+		'owner': 'Administrator',
+		'parent': 'HR',
+		'parentfield': 'items',
+		'parenttype': 'Module Def'
+	},
+	{
+		'click_function': None,
+		'creation': '2011-06-30 15:51:33',
+		'description': 'Apply Leave',
+		'display_name': 'Leave Application',
+		'doc_name': 'Leave Application',
+		'doc_type': 'Forms',
+		'docstatus': 0,
+		'doctype': 'Module Def Item',
+		'fields': 'employee\nleave_type\nfiscal_year\nfrom_date\nto_date\ntotal_leave_days',
+		'hide': None,
+		'icon': None,
+		'idx': 6,
+		'modified': '2011-06-30 15:51:33',
+		'modified_by': 'Administrator',
+		'name': 'MDI01340',
+		'owner': 'Administrator',
+		'parent': 'HR',
+		'parentfield': 'items',
+		'parenttype': 'Module Def'
+	},
+	{
+		'click_function': None,
+		'creation': '2011-06-30 15:51:33',
+		'description': 'Submit Employees Expenses',
+		'display_name': 'Expense Voucher',
+		'doc_name': 'Expense Voucher',
+		'doc_type': 'Forms',
+		'docstatus': 0,
+		'doctype': 'Module Def Item',
+		'fields': 'status\nemployee\nemployee_name\nposting_date\ntotal_claimed_amount\ntotal_sanctioned_amount\nexp_approver',
+		'hide': None,
+		'icon': None,
+		'idx': 7,
+		'modified': '2011-06-30 15:51:33',
+		'modified_by': 'Administrator',
+		'name': 'MDI01341',
+		'owner': 'Administrator',
+		'parent': 'HR',
+		'parentfield': 'items',
+		'parenttype': 'Module Def'
+	},
+	{
+		'click_function': None,
+		'creation': '2011-06-30 15:51:33',
+		'description': 'Assign Responsibilities to employee and evaluate',
+		'display_name': 'Appraisal',
+		'doc_name': 'Appraisal',
+		'doc_type': 'Forms',
+		'docstatus': 0,
+		'doctype': 'Module Def Item',
+		'fields': 'status\nemployee\nemployee_name\nstart_date\nend_date\ntotal_score\nkra_approver',
+		'hide': None,
+		'icon': None,
+		'idx': 8,
+		'modified': '2011-06-30 15:51:33',
+		'modified_by': 'Administrator',
+		'name': 'MDI01342',
+		'owner': 'Administrator',
+		'parent': 'HR',
+		'parentfield': 'items',
+		'parenttype': 'Module Def'
+	},
+	{
+		'click_function': None,
+		'creation': '2011-06-30 15:51:33',
+		'description': 'Generate Salary Structure heads for an employee',
+		'display_name': 'Salary Structure',
+		'doc_name': 'Salary Structure',
+		'doc_type': 'Forms',
+		'docstatus': 0,
+		'doctype': 'Module Def Item',
+		'fields': 'employee\nis_active\nfiscal_year\nfrom_date\nctc\ntotal_earning\ntotal_deduction\ntotal',
+		'hide': None,
+		'icon': None,
+		'idx': 9,
+		'modified': '2011-06-30 15:51:33',
+		'modified_by': 'Administrator',
+		'name': 'MDI01343',
+		'owner': 'Administrator',
+		'parent': 'HR',
+		'parentfield': 'items',
+		'parenttype': 'Module Def'
+	},
+	{
+		'click_function': None,
+		'creation': '2011-06-30 15:51:33',
+		'description': 'Generate Salary Slip for an employee',
+		'display_name': 'Salary Slip',
+		'doc_name': 'Salary Slip',
+		'doc_type': 'Forms',
+		'docstatus': 0,
+		'doctype': 'Module Def Item',
+		'fields': 'month\nyear\nemployee\nemployee_name\npayment_days\narrear_amount\nencashment_amount\ngross_pay\ntotal_deduction\nnet_pay',
+		'hide': None,
+		'icon': None,
+		'idx': 10,
+		'modified': '2011-06-30 15:51:33',
+		'modified_by': 'Administrator',
+		'name': 'MDI01344',
+		'owner': 'Administrator',
+		'parent': 'HR',
+		'parentfield': 'items',
+		'parenttype': 'Module Def'
+	},
+	{
+		'click_function': None,
+		'creation': '2011-06-30 15:51:33',
+		'description': 'Generate Salary Slip for all employee at a time',
+		'display_name': 'Salary Slip Control Panel',
+		'doc_name': 'Salary Slip Control Panel',
+		'doc_type': 'Single DocType',
+		'docstatus': 0,
+		'doctype': 'Module Def Item',
+		'fields': None,
+		'hide': None,
+		'icon': None,
+		'idx': 11,
+		'modified': '2011-06-30 15:51:33',
+		'modified_by': 'Administrator',
+		'name': 'MDI01345',
+		'owner': 'Administrator',
+		'parent': 'HR',
+		'parentfield': 'items',
+		'parenttype': 'Module Def'
+	},
+	{
+		'click_function': None,
+		'creation': '2011-06-30 15:51:33',
+		'description': 'Job Applications received for various positions',
+		'display_name': 'Job Application',
+		'doc_name': 'Job Application',
+		'doc_type': 'Forms',
+		'docstatus': 0,
+		'doctype': 'Module Def Item',
+		'fields': 'applicant_name\nemail\nposition',
+		'hide': None,
+		'icon': None,
+		'idx': 12,
+		'modified': '2011-06-30 15:51:33',
+		'modified_by': 'Administrator',
+		'name': 'MDI01346',
+		'owner': 'Administrator',
+		'parent': 'HR',
+		'parentfield': 'items',
+		'parenttype': 'Module Def'
+	},
+	{
+		'click_function': None,
+		'creation': '2011-06-30 15:51:33',
+		'description': None,
+		'display_name': 'Employee Information',
+		'doc_name': 'Employee',
+		'doc_type': 'Reports',
+		'docstatus': 0,
+		'doctype': 'Module Def Item',
+		'fields': None,
+		'hide': None,
+		'icon': None,
+		'idx': 13,
+		'modified': '2011-06-30 15:51:33',
+		'modified_by': 'Administrator',
+		'name': 'MDI01347',
+		'owner': 'Administrator',
+		'parent': 'HR',
+		'parentfield': 'items',
+		'parenttype': 'Module Def'
+	},
+	{
+		'click_function': None,
+		'creation': '2011-06-30 15:51:33',
+		'description': None,
+		'display_name': "Employee's Birthday",
+		'doc_name': 'Employee',
+		'doc_type': 'Reports',
+		'docstatus': 0,
+		'doctype': 'Module Def Item',
+		'fields': None,
+		'hide': None,
+		'icon': None,
+		'idx': 14,
+		'modified': '2011-06-30 15:51:33',
+		'modified_by': 'Administrator',
+		'name': 'MDI01348',
+		'owner': 'Administrator',
+		'parent': 'HR',
+		'parentfield': 'items',
+		'parenttype': 'Module Def'
+	},
+	{
+		'click_function': None,
+		'creation': '2011-06-30 15:51:33',
+		'description': None,
+		'display_name': 'New or left employees for a month',
+		'doc_name': 'Employee',
+		'doc_type': 'Reports',
+		'docstatus': 0,
+		'doctype': 'Module Def Item',
+		'fields': None,
+		'hide': None,
+		'icon': None,
+		'idx': 15,
+		'modified': '2011-06-30 15:51:33',
+		'modified_by': 'Administrator',
+		'name': 'MDI01349',
+		'owner': 'Administrator',
+		'parent': 'HR',
+		'parentfield': 'items',
+		'parenttype': 'Module Def'
+	},
+	{
+		'click_function': None,
+		'creation': '2011-06-30 15:51:33',
+		'description': None,
+		'display_name': 'Monthly Attendance Details',
+		'doc_name': 'Attendance',
+		'doc_type': 'Reports',
+		'docstatus': 0,
+		'doctype': 'Module Def Item',
+		'fields': None,
+		'hide': None,
+		'icon': None,
+		'idx': 16,
+		'modified': '2011-06-30 15:51:33',
+		'modified_by': 'Administrator',
+		'name': 'MDI01350',
+		'owner': 'Administrator',
+		'parent': 'HR',
+		'parentfield': 'items',
+		'parenttype': 'Module Def'
+	},
+	{
+		'click_function': None,
+		'creation': '2011-06-30 15:51:33',
+		'description': None,
+		'display_name': 'Leave Application Details',
+		'doc_name': 'Leave Application',
+		'doc_type': 'Reports',
+		'docstatus': 0,
+		'doctype': 'Module Def Item',
+		'fields': None,
+		'hide': None,
+		'icon': None,
+		'idx': 17,
+		'modified': '2011-06-30 15:51:33',
+		'modified_by': 'Administrator',
+		'name': 'MDI01351',
+		'owner': 'Administrator',
+		'parent': 'HR',
+		'parentfield': 'items',
+		'parenttype': 'Module Def'
+	},
+	{
+		'click_function': None,
+		'creation': '2011-06-30 15:51:34',
+		'description': None,
+		'display_name': 'Leave Allocation Details',
+		'doc_name': 'Leave Allocation',
+		'doc_type': 'Reports',
+		'docstatus': 0,
+		'doctype': 'Module Def Item',
+		'fields': None,
+		'hide': None,
+		'icon': None,
+		'idx': 18,
+		'modified': '2011-06-30 15:51:34',
+		'modified_by': 'Administrator',
+		'name': 'MDI01352',
+		'owner': 'Administrator',
+		'parent': 'HR',
+		'parentfield': 'items',
+		'parenttype': 'Module Def'
+	},
+	{
+		'click_function': None,
+		'creation': '2011-06-30 15:51:34',
+		'description': None,
+		'display_name': 'Employee Leave Balance Report',
+		'doc_name': 'Employee',
+		'doc_type': 'Reports',
+		'docstatus': 0,
+		'doctype': 'Module Def Item',
+		'fields': None,
+		'hide': None,
+		'icon': None,
+		'idx': 19,
+		'modified': '2011-06-30 15:51:34',
+		'modified_by': 'Administrator',
+		'name': 'MDI01353',
+		'owner': 'Administrator',
+		'parent': 'HR',
+		'parentfield': 'items',
+		'parenttype': 'Module Def'
+	},
+	{
+		'click_function': None,
+		'creation': '2011-06-30 15:51:34',
+		'description': None,
+		'display_name': 'Salary Structure Details',
+		'doc_name': 'Salary Structure',
+		'doc_type': 'Reports',
+		'docstatus': 0,
+		'doctype': 'Module Def Item',
+		'fields': None,
+		'hide': None,
+		'icon': None,
+		'idx': 20,
+		'modified': '2011-06-30 15:51:34',
+		'modified_by': 'Administrator',
+		'name': 'MDI01354',
+		'owner': 'Administrator',
+		'parent': 'HR',
+		'parentfield': 'items',
+		'parenttype': 'Module Def'
+	},
+	{
+		'click_function': None,
+		'creation': '2011-06-30 15:51:34',
+		'description': None,
+		'display_name': 'Salary Register',
+		'doc_name': 'Salary Slip',
+		'doc_type': 'Reports',
+		'docstatus': 0,
+		'doctype': 'Module Def Item',
+		'fields': None,
+		'hide': None,
+		'icon': None,
+		'idx': 21,
+		'modified': '2011-06-30 15:51:34',
+		'modified_by': 'Administrator',
+		'name': 'MDI01355',
+		'owner': 'Administrator',
+		'parent': 'HR',
+		'parentfield': 'items',
+		'parenttype': 'Module Def'
+	},
+	{
+		'click_function': None,
+		'creation': '2011-06-30 15:51:34',
+		'description': None,
+		'display_name': 'Salary Slips',
+		'doc_name': 'Salary Slip',
+		'doc_type': 'Reports',
+		'docstatus': 0,
+		'doctype': 'Module Def Item',
+		'fields': None,
+		'hide': None,
+		'icon': None,
+		'idx': 22,
+		'modified': '2011-06-30 15:51:34',
+		'modified_by': 'Administrator',
+		'name': 'MDI01356',
+		'owner': 'Administrator',
+		'parent': 'HR',
+		'parentfield': 'items',
+		'parenttype': 'Module Def'
+	},
+	{
+		'click_function': None,
+		'creation': '2011-06-30 15:51:34',
+		'description': None,
+		'display_name': 'Pending Appraisals',
+		'doc_name': 'Appraisal',
+		'doc_type': 'Reports',
+		'docstatus': 0,
+		'doctype': 'Module Def Item',
+		'fields': None,
+		'hide': None,
+		'icon': None,
+		'idx': 23,
+		'modified': '2011-06-30 15:51:34',
+		'modified_by': 'Administrator',
+		'name': 'MDI01357',
+		'owner': 'Administrator',
+		'parent': 'HR',
+		'parentfield': 'items',
+		'parenttype': 'Module Def'
+	},
+	{
+		'click_function': None,
+		'creation': '2011-06-30 15:51:34',
+		'description': None,
+		'display_name': 'Employee Appraisals',
+		'doc_name': 'Appraisal',
+		'doc_type': 'Reports',
+		'docstatus': 0,
+		'doctype': 'Module Def Item',
+		'fields': None,
+		'hide': None,
+		'icon': None,
+		'idx': 24,
+		'modified': '2011-06-30 15:51:34',
+		'modified_by': 'Administrator',
+		'name': 'MDI01358',
+		'owner': 'Administrator',
+		'parent': 'HR',
+		'parentfield': 'items',
+		'parenttype': 'Module Def'
+	},
+	{
+		'click_function': None,
+		'creation': '2011-06-30 15:51:34',
+		'description': None,
+		'display_name': 'Pending Expense Vouchers',
+		'doc_name': 'Expense Voucher',
+		'doc_type': 'Reports',
+		'docstatus': 0,
+		'doctype': 'Module Def Item',
+		'fields': None,
+		'hide': None,
+		'icon': None,
+		'idx': 25,
+		'modified': '2011-06-30 15:51:34',
+		'modified_by': 'Administrator',
+		'name': 'MDI01359',
+		'owner': 'Administrator',
+		'parent': 'HR',
+		'parentfield': 'items',
+		'parenttype': 'Module Def'
+	},
+	{
+		'click_function': None,
+		'creation': '2011-06-30 15:51:34',
+		'description': None,
+		'display_name': 'Expense Vouchers',
+		'doc_name': 'Expense Voucher',
+		'doc_type': 'Reports',
+		'docstatus': 0,
+		'doctype': 'Module Def Item',
+		'fields': None,
+		'hide': None,
+		'icon': None,
+		'idx': 26,
+		'modified': '2011-06-30 15:51:34',
+		'modified_by': 'Administrator',
+		'name': 'MDI01360',
+		'owner': 'Administrator',
+		'parent': 'HR',
+		'parentfield': 'items',
+		'parenttype': 'Module Def'
+	},
+	{
+		'creation': '2011-06-30 15:51:34',
+		'docstatus': 0,
+		'doctype': 'Module Def Role',
+		'idx': 1,
+		'modified': '2011-06-30 15:51:34',
+		'modified_by': 'Administrator',
+		'name': 'MDR00340',
+		'owner': 'Administrator',
+		'parent': 'HR',
+		'parentfield': 'roles',
+		'parenttype': 'Module Def',
+		'role': 'HR Manager'
+	},
+	{
+		'creation': '2011-06-30 15:51:34',
+		'docstatus': 0,
+		'doctype': 'Module Def Role',
+		'idx': 2,
+		'modified': '2011-06-30 15:51:34',
+		'modified_by': 'Administrator',
+		'name': 'MDR00341',
+		'owner': 'Administrator',
+		'parent': 'HR',
+		'parentfield': 'roles',
+		'parenttype': 'Module Def',
+		'role': 'HR User'
+	}
+]
\ No newline at end of file
diff --git a/hr/Role/Employee/Employee.txt b/hr/Role/Employee/Employee.txt
new file mode 100644
index 0000000..4b73c1a
--- /dev/null
+++ b/hr/Role/Employee/Employee.txt
@@ -0,0 +1,17 @@
+[
+	{
+		'creation': '2011-02-12 15:07:26',
+		'docstatus': 0,
+		'doctype': 'Role',
+		'idx': None,
+		'modified': '2011-02-14 14:05:55',
+		'modified_by': 'Administrator',
+		'module': 'Roles',
+		'name': 'Employee',
+		'owner': 'Administrator',
+		'parent': None,
+		'parentfield': None,
+		'parenttype': None,
+		'role_name': 'Employee'
+	}
+]
\ No newline at end of file
diff --git a/hr/Role/HR Manager/HR Manager.txt b/hr/Role/HR Manager/HR Manager.txt
new file mode 100644
index 0000000..db31afc
--- /dev/null
+++ b/hr/Role/HR Manager/HR Manager.txt
@@ -0,0 +1 @@
+[{'modified_by': 'Administrator', 'name': 'HR Manager', 'parent': None, 'creation': '2010-04-01 14:14:39', 'modified': '2010-04-01 10:19:09', 'module': 'Roles', 'doctype': 'Role', 'idx': None, 'parenttype': None, 'role_name': 'HR Manager', 'owner': 'Administrator', 'docstatus': 0, 'parentfield': None}]
\ No newline at end of file
diff --git a/hr/Role/HR User/HR User.txt b/hr/Role/HR User/HR User.txt
new file mode 100644
index 0000000..e7134c5
--- /dev/null
+++ b/hr/Role/HR User/HR User.txt
@@ -0,0 +1 @@
+[{'modified_by': 'Administrator', 'name': 'HR User', 'parent': None, 'creation': '2010-04-01 14:14:39', 'modified': '2010-04-01 10:18:55', 'module': 'Roles', 'doctype': 'Role', 'idx': None, 'parenttype': None, 'role_name': 'HR User', 'owner': 'Administrator', 'docstatus': 0, 'parentfield': None}]
\ No newline at end of file
diff --git a/hr/__init__.py b/hr/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/__init__.py
diff --git a/hr/doctype/__init__.py b/hr/doctype/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/__init__.py
diff --git a/hr/doctype/absent_days_detail/__init__.py b/hr/doctype/absent_days_detail/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/absent_days_detail/__init__.py
diff --git a/hr/doctype/absent_days_detail/absent_days_detail.txt b/hr/doctype/absent_days_detail/absent_days_detail.txt
new file mode 100644
index 0000000..2e6f58a
--- /dev/null
+++ b/hr/doctype/absent_days_detail/absent_days_detail.txt
@@ -0,0 +1,137 @@
+# DocType, Absent Days Detail
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-08-08 17:08:51',
+		'docstatus': 0,
+		'modified': '2010-09-20 14:06:57',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'istable': 1,
+		'module': 'HR',
+		'name': '__common__',
+		'section_style': 'Simple',
+		'show_in_menu': 0,
+		'version': 5
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Absent Days Detail',
+		'parentfield': 'fields',
+		'parenttype': 'DocType',
+		'permlevel': 0
+	},
+
+	# These values are common for all DocPerm
+	{
+		'create': 1,
+		'doctype': 'DocPerm',
+		'idx': 1,
+		'name': '__common__',
+		'parent': 'Absent Days Detail',
+		'parentfield': 'permissions',
+		'parenttype': 'DocType',
+		'permlevel': 0,
+		'read': 1,
+		'write': 1
+	},
+
+	# DocType, Absent Days Detail
+	{
+		'doctype': 'DocType',
+		'name': 'Absent Days Detail'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'leave_type',
+		'fieldtype': 'Select',
+		'idx': 1,
+		'label': 'Leave Type',
+		'oldfieldname': 'leave_type',
+		'oldfieldtype': 'Select',
+		'options': 'link:Leave Type'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'no_of_leave_days',
+		'fieldtype': 'Data',
+		'idx': 2,
+		'label': 'No of leave days',
+		'oldfieldname': 'no_of_leave_days',
+		'oldfieldtype': 'Data'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'from_date',
+		'fieldtype': 'Date',
+		'idx': 3,
+		'label': 'From Date',
+		'oldfieldname': 'from_date',
+		'oldfieldtype': 'Date'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'to_date',
+		'fieldtype': 'Date',
+		'idx': 4,
+		'label': 'To Date',
+		'oldfieldname': 'to_date',
+		'oldfieldtype': 'Date'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'previous_balance',
+		'fieldtype': 'Data',
+		'idx': 5,
+		'label': 'Previous Balance',
+		'oldfieldname': 'previous_balance',
+		'oldfieldtype': 'Data'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'current_balance',
+		'fieldtype': 'Data',
+		'idx': 6,
+		'label': 'Current Balance',
+		'oldfieldname': 'current_balance',
+		'oldfieldtype': 'Data'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'max_allowed',
+		'fieldtype': 'Data',
+		'idx': 7,
+		'label': 'Max. Allowed',
+		'oldfieldname': 'max_allowed',
+		'oldfieldtype': 'Data'
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/appraisal/__init__.py b/hr/doctype/appraisal/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/appraisal/__init__.py
diff --git a/hr/doctype/appraisal/appraisal.js b/hr/doctype/appraisal/appraisal.js
new file mode 100644
index 0000000..ed53141
--- /dev/null
+++ b/hr/doctype/appraisal/appraisal.js
@@ -0,0 +1,145 @@
+cur_frm.add_fetch('employee', 'company', 'company');
+
+cur_frm.cscript.onload = function(doc,cdt,cdn){
+  if(!doc.status) set_multiple(dt,dn,{status:'Draft'});
+  if(doc.employee) cur_frm.cscript.employee(doc,cdt,cdn);
+  if(doc.amended_from && doc.__islocal) cur_frm.cscript.refresh_appraisal_details(doc, cdt, cdn);
+}
+
+cur_frm.cscript.refresh = function(doc,cdt,cdn){
+  if(user == doc.kra_approver && doc.status == 'Submitted') unhide_field(['Update', 'Declare Completed', 'Calculate Total Score']);
+  else hide_field(['Update', 'Declare Completed', 'Calculate Total Score']);
+  
+  if(!doc.docstatus) unhide_field('Fetch Template');
+  else hide_field('Fetch Template');
+}
+
+
+cur_frm.cscript.refresh_appraisal_details = function(doc, cdt, cdn){
+  var val = getchildren('Appraisal Detail', doc.name, 'appraisal_details', doc.doctype);
+  for(var i = 0; i<val.length; i++){
+    set_multiple('Appraisal Detail', val[i].name, {'target_achieved':'', 'score':'', 'scored_earned':''}, 'appraisal_details');
+  }
+  doc.total_score = '';
+  refresh_field('appraisal_details');
+  refresh_field('total_score');
+}
+
+cur_frm.cscript.employee = function(doc,cdt,cdn){
+  if(doc.employee){
+    $c_obj(make_doclist(doc.doctype, doc.name),'set_approver','', function(r,rt){
+      if(r.message){
+        doc.employee_name = r.message['emp_nm'];
+        get_field(doc.doctype, 'kra_approver' , doc.name).options = r.message['app_lst'];        
+        refresh_many(['kra_approver','employee_name']);
+      }    
+    });
+  }
+}
+
+cur_frm.cscript['Calculate Total Score'] = function(doc,cdt,cdn){
+  //get_server_fields('calculate_total','','',doc,cdt,cdn,1);
+  var val = getchildren('Appraisal Detail', doc.name, 'appraisal_details', doc.doctype);
+  var total =0;
+  for(var i = 0; i<val.length; i++){
+    total = flt(total)+flt(val[i].score_earned)
+  }
+  doc.total_score = flt(total)
+  refresh_field('total_score')
+}
+
+/*cur_frm.cscript['Declare Completed'] = function(doc,cdt,cdn){
+  $c_obj(make_doclist(doc.doctype, doc.name),'declare_completed','', function(r,rt){
+    if(r.message){
+      refresh_field('Status');
+      cur_frm.cscript.refresh(doc,cdt,cdn);
+    }
+  });
+}*/
+
+cur_frm.cscript['Declare Completed'] = function(doc,cdt,cdn){
+  var declare_completed_dialog;
+  
+  set_declare_completed_dialog = function() {
+    declare_completed_dialog = new Dialog(400, 200, 'Declare Completed');
+    declare_completed_dialog.make_body([
+      ['HTML', 'Message', '<div class = "comment">You wont be able to do any changes after declaring this Appraisal as completed. Are you sure, you want to declare it as completed ?</div>'],
+      ['HTML', 'Response', '<div class = "comment" id="declare_completed_dialog_response"></div>'],
+      ['HTML', 'Declare Completed', '<div></div>']
+    ]);
+    
+    var declare_completed_btn1 = $a($i(declare_completed_dialog.widgets['Declare Completed']), 'button', 'button');
+    declare_completed_btn1.innerHTML = 'Yes';
+    declare_completed_btn1.onclick = function(){ declare_completed_dialog.add(); }
+    
+    var declare_completed_btn2 = $a($i(declare_completed_dialog.widgets['Declare Completed']), 'button', 'button');
+    declare_completed_btn2.innerHTML = 'No';
+    $y(declare_completed_btn2,{marginLeft:'4px'});
+    declare_completed_btn2.onclick = function(){ declare_completed_dialog.hide();}
+    
+    declare_completed_dialog.onshow = function() {
+      $i('declare_completed_dialog_response').innerHTML = '';
+    }
+    
+    declare_completed_dialog.refresh_dt = function(){
+      cur_frm.cscript.refresh(this.doc, this.cdt, this.cdn);
+      msgprint("refersh done");
+      $c('webnotes.widgets.form.form_header.refresh_labels',this.doc,function(r,rt){});
+    }
+    
+    declare_completed_dialog.add = function() {
+      // sending...
+      $i('declare_completed_dialog_response').innerHTML = 'Processing...';
+      var m_arg = user+ '~~' + this.msg_nm_lst;
+      
+      $c_obj(make_doclist(this.doc.doctype, this.doc.name),'declare_completed','', function(r,rt){
+        
+        if(r.message.status == 'Completed'){
+          $i('declare_completed_dialog_response').innerHTML = 'Done';
+          refresh_field('status');
+          declare_completed_dialog.refresh_dt();
+          hide_field(['Update', 'Declare Completed', 'Calculate Total Score']);
+          declare_completed_dialog.hide();
+        }
+        else if(r.message.status == 'Incomplete'){
+          $i('declare_completed_dialog_response').innerHTML = 'Incomplete Appraisal';
+        }
+        else if(r.message.status == 'No Score'){
+          $i('declare_completed_dialog_response').innerHTML = 'Calculate total score';
+        }
+      });
+    }
+  }  
+  
+  if(!declare_completed_dialog){
+    set_declare_completed_dialog();
+  }  
+  declare_completed_dialog.doc = doc;
+  declare_completed_dialog.cdt = cdt;
+  declare_completed_dialog.cdn = cdn;
+  declare_completed_dialog.show();
+}
+
+cur_frm.cscript.score = function(doc,cdt,cdn){
+  var d = locals[cdt][cdn];
+  if (d.score){
+    total = flt(d.per_weightage*d.score)/100;
+    d.score_earned = total.toPrecision(2);
+    refresh_field('score_earned', d.name, 'appraisal_details');
+  }
+  else{
+    d.score_earned = '';
+    refresh_field('score_earned', d.name, 'appraisal_details');
+  }
+  cur_frm.cscript.calculate_total(doc,cdt,cdn);
+}
+
+cur_frm.cscript.calculate_total = function(doc,cdt,cdn){
+  var val = getchildren('Appraisal Detail', doc.name, 'appraisal_details', doc.doctype);
+  var total =0;
+  for(var i = 0; i<val.length; i++){
+    total = flt(total)+flt(val[i].score_earned);
+  }
+  doc.total_score = flt(total);
+  refresh_field('total_score');
+}
diff --git a/hr/doctype/appraisal/appraisal.py b/hr/doctype/appraisal/appraisal.py
new file mode 100644
index 0000000..1731559
--- /dev/null
+++ b/hr/doctype/appraisal/appraisal.py
@@ -0,0 +1,147 @@
+# Please edit this list and import only required elements
+import webnotes
+
+from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, generate_hash, getTraceback, get_defaults, get_first_day, get_last_day, getdate, has_common, month_name, now, nowdate, replace_newlines, sendmail, set_default, str_esc_quote, user_format, validate_email_add
+from webnotes.model import db_exists
+from webnotes.model.doc import Document, addchild, removechild, getchildren, make_autoname, SuperDocType
+from webnotes.model.doclist import getlist, copy_doclist
+from webnotes.model.code import get_obj, get_server_obj, run_server_obj, updatedb, check_syntax
+from webnotes import session, form, is_testing, msgprint, errprint
+
+set = webnotes.conn.set
+sql = webnotes.conn.sql
+get_value = webnotes.conn.get_value
+in_transaction = webnotes.conn.in_transaction
+convert_to_lists = webnotes.conn.convert_to_lists
+	
+# -----------------------------------------------------------------------------------------
+
+
+class DocType:
+  def __init__(self, doc, doclist=[]):
+    self.doc = doc
+    self.doclist = doclist
+  
+  def get_employee_name(self):
+    emp_nm = sql("select employee_name from `tabEmployee` where name=%s", self.doc.employee)
+    emp_nm= emp_nm and emp_nm[0][0] or ''
+    self.doc.employee_name = emp_nm
+    return cstr(emp_nm)
+  
+  def fetch_kra(self):
+    if not self.doc.kra_template:
+      msgprint("Please select KRA Template to be be fetched")
+      raise Exception
+    self.doc.clear_table(self.doclist,'appraisal_details')
+    get_obj('DocType Mapper', 'KRA Template-Appraisal').dt_map('KRA Template', 'Appraisal', self.doc.kra_template, self.doc, self.doclist, "[['KRA Template','Appraisal'],['KRA Sheet', 'Appraisal Detail']]")
+  
+  def validate_dates(self):
+    if getdate(self.doc.start_date) > getdate(self.doc.end_date):
+      msgprint("End Date can not be less than Start Date")
+      raise Exception
+  
+  def validate_existing_appraisal(self):
+    chk = 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.doc.employee,self.doc.start_date,self.doc.end_date,self.doc.start_date,self.doc.end_date))
+    if chk:
+      msgprint("You have already created Appraisal "+cstr(chk[0][0])+" in the current date range for employee "+cstr(self.doc.employee_name))
+      raise Exception
+  
+  def validate_curr_appraisal(self):
+    for d in getlist(self.doclist, 'appraisal_details'):
+      if d.target_achieved or d.score:
+        if self.doc.status == 'Draft':
+          msgprint("Target achieved or Score can be added only for submitted Appraisal")
+          raise Exception
+        elif self.doc.status == 'Submitted' and session['user'] != self.doc.kra_approver:
+          msgprint("Target achieved or Score can be added only by Appraisal Approver")
+          raise Exception
+  
+  def validate_fiscal_year(self):
+    fy=sql("select year_start_date from `tabFiscal Year` where name='%s'"%self.doc.fiscal_year)
+    ysd=fy and fy[0][0] or ""
+    yed=add_days(str(ysd),365)
+    if str(self.doc.start_date) < str(ysd) or str(self.doc.start_date) > str(yed) or str(self.doc.end_date) < str(ysd) or str(self.doc.end_date) > str(yed):
+      msgprint("Appraisal date range is not within the Fiscal Year selected")
+      raise Exception
+  
+  def validate(self):
+    self.validate_dates()
+    self.validate_existing_appraisal()
+    self.validate_curr_appraisal()
+    self.validate_fiscal_year()
+  
+  def set_approver(self):
+    ret={}
+    approver_lst =[]
+    emp_nm = self.get_employee_name()
+    approver_lst1 = get_obj('Authorization Control').get_approver_name(self.doc.doctype,0,self)
+    if approver_lst1:
+      approver_lst=approver_lst1
+    else:
+      approver_lst = [x[0] for x in sql("select distinct name from `tabProfile` where enabled=1 and name!='Administrator' and name!='Guest' and docstatus!=2")]
+    ret = {'app_lst':"\n" + "\n".join(approver_lst), 'emp_nm':cstr(emp_nm)}
+    return ret
+  
+  def calculate_total(self):
+    total = 0
+    for d in getlist(self.doclist, 'appraisal_details'):
+      if d.score:
+        total = total + flt(d.score_earned)
+    ret={'total_score':flt(total)}
+    return cstr(ret)
+  
+  def declare_completed(self):
+    ret={}
+    for d in getlist(self.doclist, 'appraisal_details'):
+      if not d.target_achieved or not d.score or not d.score_earned:
+        msgprint("Please add 'Target Achieved' and 'Score' for all KPI")
+        ret = {'status':'Incomplete'}
+        return ret
+    
+    if not self.doc.total_score:
+      msgprint("Please calculate total score using button 'Calculate Total Score'")
+      ret = {'status':'No Score'}
+      return ret
+    self.update_appraisal()
+    #set(self.doc, 'status', 'Completed')
+    ret = {'status':'Completed'}
+    return ret
+  
+  def update_appraisal(self):
+    for d in getlist(self.doclist, 'appraisal_details'):
+      if not d.kra or not d.per_weightage:
+        msgprint("Please remove the extra blank row added")
+        raise Exception
+      d.save()
+    if self.doc.total_score:
+      set(self.doc,'total_score',self.doc.total_score)
+  
+  def on_update(self):
+    set(self.doc, 'status', 'Draft')
+  
+  def validate_total_weightage(self):
+    total_w = 0
+    for d in getlist(self.doclist, 'appraisal_details'):
+      total_w = flt(total_w) + flt(d.per_weightage)
+    
+    if flt(total_w)>100 or flt(total_w)<100:
+      msgprint("Total of weightage assigned to KPI is "+cstr(total_w)+".It should be 100(%)")
+      raise Exception
+  
+  def validate_appraisal_detail(self):
+    if not self.doc.kra_approver:
+      msgprint("Please mention the name of Approver")
+      raise Exception
+    
+    if not getlist(self.doclist, 'appraisal_details'):
+      msgprint("Please add KRA Details")
+      raise Exception    
+    
+    self.validate_total_weightage()
+  
+  def on_submit(self):
+    self.validate_appraisal_detail()
+    set(self.doc, 'status', 'Submitted')
+  
+  def on_cancel(self): 
+    set(self.doc, 'status', 'Cancelled')
\ No newline at end of file
diff --git a/hr/doctype/appraisal/appraisal.txt b/hr/doctype/appraisal/appraisal.txt
new file mode 100644
index 0000000..3521c6f
--- /dev/null
+++ b/hr/doctype/appraisal/appraisal.txt
@@ -0,0 +1,415 @@
+# DocType, Appraisal
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-09-01 15:48:05',
+		'docstatus': 0,
+		'modified': '2011-06-27 14:39:10',
+		'modified_by': 'Administrator',
+		'owner': 'ashwini@webnotestech.com'
+	},
+
+	# These values are common for all DocType
+	{
+		'_last_update': '1308808105',
+		'autoname': 'APRSL.#####',
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'module': 'HR',
+		'name': '__common__',
+		'search_fields': 'status, employee, employee_name',
+		'section_style': 'Simple',
+		'server_code_error': ' ',
+		'show_in_menu': 0,
+		'version': 160
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Appraisal',
+		'parentfield': 'fields',
+		'parenttype': 'DocType'
+	},
+
+	# These values are common for all DocPerm
+	{
+		'doctype': 'DocPerm',
+		'name': '__common__',
+		'parent': 'Appraisal',
+		'parentfield': 'permissions',
+		'parenttype': 'DocType',
+		'read': 1
+	},
+
+	# DocType, Appraisal
+	{
+		'doctype': 'DocType',
+		'name': 'Appraisal'
+	},
+
+	# DocPerm
+	{
+		'amend': 1,
+		'cancel': 1,
+		'create': 1,
+		'doctype': 'DocPerm',
+		'idx': 1,
+		'permlevel': 0,
+		'role': 'System Manager',
+		'submit': 1,
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 2,
+		'permlevel': 1,
+		'role': 'System Manager'
+	},
+
+	# DocPerm
+	{
+		'amend': 1,
+		'cancel': 1,
+		'create': 1,
+		'doctype': 'DocPerm',
+		'idx': 3,
+		'permlevel': 0,
+		'role': 'System Manager',
+		'submit': 1,
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 4,
+		'permlevel': 1,
+		'role': 'System Manager'
+	},
+
+	# DocPerm
+	{
+		'amend': 1,
+		'cancel': 1,
+		'create': 1,
+		'doctype': 'DocPerm',
+		'idx': 5,
+		'permlevel': 0,
+		'role': 'HR Manager',
+		'submit': 1,
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'amend': 1,
+		'cancel': 1,
+		'create': 1,
+		'doctype': 'DocPerm',
+		'idx': 6,
+		'permlevel': 0,
+		'role': 'HR User',
+		'submit': 1,
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 7,
+		'permlevel': 1,
+		'role': 'HR Manager'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 8,
+		'permlevel': 1,
+		'role': 'HR User'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'idx': 1,
+		'label': 'Employee Details',
+		'oldfieldtype': 'Section Break',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'default': 'Draft',
+		'doctype': 'DocField',
+		'fieldname': 'status',
+		'fieldtype': 'Select',
+		'idx': 2,
+		'in_filter': 1,
+		'label': 'Status',
+		'oldfieldname': 'status',
+		'oldfieldtype': 'Select',
+		'options': '\nDraft\nSubmitted\nCompleted\nCancelled',
+		'permlevel': 1,
+		'reqd': 1,
+		'search_index': 1
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'employee',
+		'fieldtype': 'Link',
+		'idx': 3,
+		'in_filter': 1,
+		'label': 'Employee',
+		'oldfieldname': 'employee',
+		'oldfieldtype': 'Link',
+		'options': 'Employee',
+		'permlevel': 0,
+		'reqd': 1,
+		'search_index': 1,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'employee_name',
+		'fieldtype': 'Data',
+		'idx': 4,
+		'in_filter': 1,
+		'label': 'Employee Name',
+		'oldfieldname': 'employee_name',
+		'oldfieldtype': 'Data',
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'fiscal_year',
+		'fieldtype': 'Select',
+		'idx': 5,
+		'in_filter': 1,
+		'label': 'Fiscal Year',
+		'oldfieldname': 'fiscal_year',
+		'oldfieldtype': 'Select',
+		'options': 'link:Fiscal Year',
+		'permlevel': 0,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'company',
+		'fieldtype': 'Select',
+		'idx': 6,
+		'in_filter': 1,
+		'label': 'Company',
+		'oldfieldname': 'company',
+		'oldfieldtype': 'Link',
+		'options': 'link:Company',
+		'permlevel': 0,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break',
+		'idx': 7,
+		'oldfieldtype': 'Column Break',
+		'permlevel': 0,
+		'width': '50%'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'start_date',
+		'fieldtype': 'Date',
+		'idx': 8,
+		'in_filter': 1,
+		'label': 'Start Date',
+		'oldfieldname': 'start_date',
+		'oldfieldtype': 'Date',
+		'permlevel': 0,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'end_date',
+		'fieldtype': 'Date',
+		'idx': 9,
+		'in_filter': 1,
+		'label': 'End Date',
+		'oldfieldname': 'end_date',
+		'oldfieldtype': 'Date',
+		'permlevel': 0,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'kra_approver',
+		'fieldtype': 'Select',
+		'idx': 10,
+		'in_filter': 0,
+		'label': 'Approver',
+		'oldfieldname': 'kra_approver',
+		'oldfieldtype': 'Select',
+		'permlevel': 0,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'amended_from',
+		'fieldtype': 'Data',
+		'hidden': 1,
+		'idx': 11,
+		'label': 'Amended From',
+		'no_copy': 1,
+		'oldfieldname': 'amended_from',
+		'oldfieldtype': 'Data',
+		'permlevel': 1,
+		'print_hide': 1,
+		'report_hide': 1,
+		'width': '150px'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'amendment_date',
+		'fieldtype': 'Date',
+		'hidden': 1,
+		'idx': 12,
+		'label': 'Amendment Date',
+		'no_copy': 1,
+		'oldfieldname': 'amendment_date',
+		'oldfieldtype': 'Date',
+		'permlevel': 1,
+		'print_hide': 1,
+		'report_hide': 1,
+		'width': '160px'
+	},
+
+	# DocField
+	{
+		'allow_on_submit': 1,
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldtype': 'Button',
+		'idx': 13,
+		'label': 'Declare Completed',
+		'oldfieldtype': 'Button',
+		'permlevel': 0,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'idx': 14,
+		'oldfieldtype': 'Section Break',
+		'options': 'Simple',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'Select template from which you want to fetch KRA',
+		'doctype': 'DocField',
+		'fieldname': 'kra_template',
+		'fieldtype': 'Link',
+		'idx': 15,
+		'label': 'KRA Template',
+		'oldfieldname': 'kra_template',
+		'oldfieldtype': 'Link',
+		'options': 'KRA Template',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Button',
+		'idx': 16,
+		'label': 'Fetch Template',
+		'oldfieldtype': 'Button',
+		'options': 'fetch_kra',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'allow_on_submit': 1,
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldtype': 'Button',
+		'hidden': 1,
+		'idx': 17,
+		'label': 'Update',
+		'oldfieldtype': 'Button',
+		'permlevel': 0,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'allow_on_submit': 1,
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'appraisal_details',
+		'fieldtype': 'Table',
+		'idx': 18,
+		'label': 'Appraisal Details',
+		'oldfieldname': 'appraisal_details',
+		'oldfieldtype': 'Table',
+		'options': 'Appraisal Detail',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'allow_on_submit': 1,
+		'doctype': 'DocField',
+		'fieldtype': 'Button',
+		'idx': 19,
+		'label': 'Calculate Total Score',
+		'oldfieldtype': 'Button',
+		'options': 'calculate_total',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'total_score',
+		'fieldtype': 'Currency',
+		'idx': 20,
+		'label': 'Total Score',
+		'no_copy': 1,
+		'oldfieldname': 'total_score',
+		'oldfieldtype': 'Currency',
+		'permlevel': 1
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/appraisal_detail/__init__.py b/hr/doctype/appraisal_detail/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/appraisal_detail/__init__.py
diff --git a/hr/doctype/appraisal_detail/appraisal_detail.txt b/hr/doctype/appraisal_detail/appraisal_detail.txt
new file mode 100644
index 0000000..fa57bef
--- /dev/null
+++ b/hr/doctype/appraisal_detail/appraisal_detail.txt
@@ -0,0 +1,112 @@
+# DocType, Appraisal Detail
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-09-01 15:48:05',
+		'docstatus': 0,
+		'modified': '2010-09-20 14:06:57',
+		'modified_by': 'rahul@webnotestech.com',
+		'owner': 'ashwini@webnotestech.com'
+	},
+
+	# These values are common for all DocType
+	{
+		'autoname': 'APRSLD.#####',
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'istable': 1,
+		'module': 'HR',
+		'name': '__common__',
+		'section_style': 'Simple',
+		'server_code_error': ' ',
+		'version': 13
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Appraisal Detail',
+		'parentfield': 'fields',
+		'parenttype': 'DocType'
+	},
+
+	# DocType, Appraisal Detail
+	{
+		'doctype': 'DocType',
+		'name': 'Appraisal Detail'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'Key Responsibility Area',
+		'doctype': 'DocField',
+		'fieldname': 'kra',
+		'fieldtype': 'Small Text',
+		'idx': 1,
+		'label': 'KRA',
+		'oldfieldname': 'kra',
+		'oldfieldtype': 'Small Text',
+		'permlevel': 0,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'per_weightage',
+		'fieldtype': 'Currency',
+		'idx': 2,
+		'label': 'Weightage (%)',
+		'oldfieldname': 'per_weightage',
+		'oldfieldtype': 'Currency',
+		'permlevel': 0,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'allow_on_submit': 1,
+		'doctype': 'DocField',
+		'fieldname': 'target_achieved',
+		'fieldtype': 'Small Text',
+		'idx': 3,
+		'label': 'Target Achieved',
+		'no_copy': 1,
+		'oldfieldname': 'target_achieved',
+		'oldfieldtype': 'Small Text',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'allow_on_submit': 1,
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'score',
+		'fieldtype': 'Select',
+		'idx': 4,
+		'label': 'Score (0-5)',
+		'no_copy': 1,
+		'oldfieldname': 'score',
+		'oldfieldtype': 'Select',
+		'options': '\n0\n1\n2\n3\n4\n5',
+		'permlevel': 0,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'score_earned',
+		'fieldtype': 'Currency',
+		'idx': 5,
+		'label': 'Score Earned',
+		'no_copy': 1,
+		'oldfieldname': 'score_earned',
+		'oldfieldtype': 'Currency',
+		'permlevel': 1
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/attendance/__init__.py b/hr/doctype/attendance/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/attendance/__init__.py
diff --git a/hr/doctype/attendance/attendance.js b/hr/doctype/attendance/attendance.js
new file mode 100644
index 0000000..d95c579
--- /dev/null
+++ b/hr/doctype/attendance/attendance.js
@@ -0,0 +1,14 @@
+cur_frm.add_fetch('employee', 'company', 'company');	
+
+//get employee's name based on employee id selected
+cur_frm.cscript.employee = function(doc,cdt,cdn){
+  if(doc.employee) get_server_fields('get_emp_name', '', '', doc, cdt, cdn, 1);
+  refresh_field('employee_name'); 
+}
+
+
+//Employee
+//-----------------------------
+cur_frm.fields_dict['employee'].get_query = function(doc,cdt,cdn) {
+  return 'SELECT `tabEmployee`.`name` FROM `tabEmployee` WHERE `tabEmployee`.status = "Active" AND `tabEmployee`.`docstatus`!= 2 AND `tabEmployee`.%(key)s LIKE "%s"  ORDER BY `tabEmployee`.`name` ASC LIMIT 50';
+}
diff --git a/hr/doctype/attendance/attendance.py b/hr/doctype/attendance/attendance.py
new file mode 100644
index 0000000..d64a8e3
--- /dev/null
+++ b/hr/doctype/attendance/attendance.py
@@ -0,0 +1,130 @@
+# Please edit this list and import only required elements
+import webnotes
+
+from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, generate_hash, getTraceback, get_defaults, get_first_day, get_last_day, getdate, has_common, month_name, now, nowdate, replace_newlines, sendmail, set_default, str_esc_quote, user_format, validate_email_add
+from webnotes.model import db_exists
+from webnotes.model.doc import Document, addchild, removechild, getchildren, make_autoname, SuperDocType
+from webnotes.model.doclist import getlist, copy_doclist
+from webnotes.model.code import get_obj, get_server_obj, run_server_obj, updatedb, check_syntax
+from webnotes import session, form, is_testing, msgprint, errprint
+
+set = webnotes.conn.set
+sql = webnotes.conn.sql
+get_value = webnotes.conn.get_value
+in_transaction = webnotes.conn.in_transaction
+convert_to_lists = webnotes.conn.convert_to_lists
+	
+# -----------------------------------------------------------------------------------------
+
+
+class DocType:
+  def __init__(self, doc, doclist=[]):
+    self.doc = doc
+    self.doclist = doclist
+    
+  #autoname function
+  def autoname(self):
+    self.doc.name = make_autoname(self.doc.naming_series+'.#####')
+  
+  #get employee name based on employee id selected 
+  def get_emp_name(self):
+    emp_nm = sql("select employee_name from `tabEmployee` where name=%s", self.doc.employee)
+
+    #this is done because sometimes user entered wrong employee name while uploading employee attendance
+    set(self.doc, 'employee_name', emp_nm and emp_nm[0][0] or '')
+
+    ret = { 'employee_name' : emp_nm and emp_nm[0][0] or ''}
+    return str(ret)
+  
+  #validation for duplicate record
+  def validate_duplicate_record(self):   
+    res = sql("select name from `tabAttendance` where employee = '%s' and att_date = '%s' and not name = '%s' and docstatus = 1"%(self.doc.employee,self.doc.att_date, self.doc.name))
+    if res:
+      msgprint("Employee's attendance already marked.")
+      raise Exception
+      
+  #validation - leave_type is mandatory for status absent/ half day else not required to entered.
+  def validate_status(self):
+    if self.doc.status == 'Present' and self.doc.leave_type:
+      msgprint("You can not enter leave type for attendance status 'Present'")
+      raise Exception
+
+    elif (self.doc.status == 'Absent' or self.doc.status == 'Half Day') and not self.doc.leave_type:
+      msgprint("Please enter leave type for attendance status 'Absent'")
+      raise Exception
+  
+  #check for already record present in leave transaction for same date
+  def check_leave_record(self):
+    if self.doc.status == 'Present':
+      chk = sql("select name from `tabLeave Transaction` where employee=%s and (from_date <= %s and to_date >= %s) and status = 'Submitted' and leave_transaction_type = 'Deduction' and docstatus!=2", (self.doc.employee, self.doc.att_date, self.doc.att_date))
+      if chk:
+        msgprint("Leave Application created for employee "+self.doc.employee+" whom you are trying to mark as 'Present' ")
+        raise Exception
+  
+  #For absent/ half day record - check for leave balances of the employees 
+  def validate_leave_type(self):
+    if not self.doc.status =='Present' and self.doc.leave_type not in ('Leave Without Pay','Compensatory Off'):
+      #check for leave allocated to employee from leave transaction
+      ret = sql("select name from `tabLeave Transaction` where employee = '%s' and leave_type = '%s' and leave_transaction_type = 'Allocation' and fiscal_year = '%s'"%(self.doc.employee,self.doc.leave_type,self.doc.fiscal_year))   
+      
+      #if leave allocation is present then calculate leave balance i.e. sum(allocation) - sum(deduction) 
+      if ret:
+        q1 = 'SUM(CASE WHEN leave_transaction_type = "Allocation" THEN total_leave ELSE 0 END)-SUM(CASE WHEN leave_transaction_type = "Deduction" THEN total_leave ELSE 0 END)'
+        q2 = "select %s from `tabLeave Transaction` where employee = '%s' and leave_type = '%s' and fiscal_year = '%s' and docstatus = 1"
+        
+        res = sql(q2%(q1,self.doc.employee,self.doc.leave_type,self.doc.fiscal_year))
+       
+        if res:
+          if self.doc.status == 'Absent' and flt(res[0][0]) < 1:
+            msgprint("%s balances are insufficient to cover a day absence, please select other leave type."%self.doc.leave_type)
+            raise Exception
+          if self.doc.status == 'Half Day' and flt(res[0][0]) < 0.5:
+            msgprint("%s balances are insufficient to cover a half day absence, please select other leave type."%self.doc.leave_type)
+            raise Exception
+
+      else:
+        msgprint("Leave Allocation for employee %s not done.\n You can allocate leaves from HR -> Leave Transaction OR HR -> Leave Control Panel."%self.doc.employee)
+        raise Exception
+         
+  def validate_fiscal_year(self):
+    fy=sql("select year_start_date from `tabFiscal Year` where name='%s'"% self.doc.fiscal_year)
+    ysd=fy and fy[0][0] or ""
+    yed=add_days(str(ysd),365)
+    if str(self.doc.att_date) < str(ysd) or str(self.doc.att_date) > str(yed):
+      msgprint("'%s' Not Within The Fiscal Year selected"%(self.doc.att_date))
+      raise Exception
+  
+  def validate_att_date(self):
+    import datetime
+    if getdate(self.doc.att_date)>getdate(datetime.datetime.now().date().strftime('%Y-%m-%d')):
+      msgprint("Attendance can not be marked for future dates")
+      raise Exception
+
+  # Validate employee
+  #-------------------
+  def validate_employee(self):
+    emp = sql("select name, status from `tabEmployee` where name = '%s'" % self.doc.employee)
+    if not emp:
+      msgprint("Employee: %s does not exists in the system" % self.doc.employee, raise_exception=1)
+    elif emp[0][1] != 'Active':
+      msgprint("Employee: %s is not Active" % self.doc.employee, raise_exception=1)
+      
+  # validate...
+  def validate(self):
+    self.validate_fiscal_year()
+    self.validate_att_date()
+    #self.validate_leave_type()
+    self.validate_duplicate_record()
+    #self.validate_status()
+    self.check_leave_record()
+    
+  def on_update(self):
+    #self.validate()
+    
+    #this is done because sometimes user entered wrong employee name while uploading employee attendance
+    x=self.get_emp_name()
+
+  def on_submit(self):
+    #this is done because while uploading attendance chnage docstatus to 1 i.e. submit
+    set(self.doc,'docstatus',1)
+    pass
diff --git a/hr/doctype/attendance/attendance.txt b/hr/doctype/attendance/attendance.txt
new file mode 100644
index 0000000..a52225e
--- /dev/null
+++ b/hr/doctype/attendance/attendance.txt
@@ -0,0 +1,226 @@
+# DocType, Attendance
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-09-23 10:26:03',
+		'docstatus': 0,
+		'modified': '2011-06-27 14:39:08',
+		'modified_by': 'Administrator',
+		'owner': 'ashwini@webnotestech.com'
+	},
+
+	# These values are common for all DocType
+	{
+		'_last_update': '1308808105',
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'document_type': 'Master',
+		'module': 'HR',
+		'name': '__common__',
+		'search_fields': 'employee, employee_name, att_date, status',
+		'section_style': 'Simple',
+		'server_code_error': ' ',
+		'show_in_menu': 0,
+		'version': 74
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Attendance',
+		'parentfield': 'fields',
+		'parenttype': 'DocType',
+		'permlevel': 0
+	},
+
+	# These values are common for all DocPerm
+	{
+		'cancel': 1,
+		'create': 1,
+		'doctype': 'DocPerm',
+		'name': '__common__',
+		'parent': 'Attendance',
+		'parentfield': 'permissions',
+		'parenttype': 'DocType',
+		'permlevel': 0,
+		'read': 1,
+		'submit': 1,
+		'write': 1
+	},
+
+	# DocType, Attendance
+	{
+		'doctype': 'DocType',
+		'name': 'Attendance'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'role': 'HR User'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'role': 'HR Manager'
+	},
+
+	# DocPerm
+	{
+		'amend': 0,
+		'doctype': 'DocPerm',
+		'idx': 1,
+		'role': 'System Manager'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'idx': 1,
+		'label': 'Attendance Details',
+		'oldfieldtype': 'Section Break',
+		'options': 'Simple'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'naming_series',
+		'fieldtype': 'Select',
+		'idx': 2,
+		'label': 'Naming Series',
+		'no_copy': 1,
+		'oldfieldname': 'naming_series',
+		'oldfieldtype': 'Select',
+		'options': 'ATT',
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'employee',
+		'fieldtype': 'Link',
+		'idx': 3,
+		'in_filter': 1,
+		'label': 'Employee',
+		'oldfieldname': 'employee',
+		'oldfieldtype': 'Link',
+		'options': 'Employee',
+		'reqd': 1,
+		'search_index': 1,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'employee_name',
+		'fieldtype': 'Data',
+		'idx': 4,
+		'label': 'Employee Name',
+		'oldfieldname': 'employee_name',
+		'oldfieldtype': 'Data'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'status',
+		'fieldtype': 'Select',
+		'idx': 5,
+		'in_filter': 1,
+		'label': 'Status',
+		'oldfieldname': 'status',
+		'oldfieldtype': 'Select',
+		'options': '\nPresent\nAbsent\nHalf Day',
+		'reqd': 1,
+		'search_index': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'shifts',
+		'fieldtype': 'Select',
+		'idx': 6,
+		'label': 'Shifts',
+		'oldfieldname': 'shifts',
+		'oldfieldtype': 'Select',
+		'options': '\nDay\nNight',
+		'reqd': 0
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'leave_type',
+		'fieldtype': 'Link',
+		'hidden': 1,
+		'idx': 7,
+		'label': 'Leave Type',
+		'oldfieldname': 'leave_type',
+		'oldfieldtype': 'Link',
+		'options': 'Leave Type',
+		'print_hide': 1,
+		'report_hide': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break',
+		'idx': 8,
+		'oldfieldtype': 'Column Break',
+		'width': '50%'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'att_date',
+		'fieldtype': 'Date',
+		'idx': 9,
+		'in_filter': 1,
+		'label': 'Attendance Date',
+		'oldfieldname': 'att_date',
+		'oldfieldtype': 'Date',
+		'reqd': 1,
+		'search_index': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'fiscal_year',
+		'fieldtype': 'Select',
+		'idx': 10,
+		'in_filter': 1,
+		'label': 'Fiscal Year',
+		'oldfieldname': 'fiscal_year',
+		'oldfieldtype': 'Select',
+		'options': 'link:Fiscal Year',
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'company',
+		'fieldtype': 'Select',
+		'idx': 11,
+		'in_filter': 1,
+		'label': 'Company',
+		'oldfieldname': 'company',
+		'oldfieldtype': 'Link',
+		'options': 'link:Company',
+		'reqd': 1
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/attendance_control_panel/__init__.py b/hr/doctype/attendance_control_panel/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/attendance_control_panel/__init__.py
diff --git a/hr/doctype/attendance_control_panel/attendance_control_panel.js b/hr/doctype/attendance_control_panel/attendance_control_panel.js
new file mode 100644
index 0000000..c36a72a
--- /dev/null
+++ b/hr/doctype/attendance_control_panel/attendance_control_panel.js
@@ -0,0 +1,50 @@
+cur_frm.cscript.onload = function(doc,cdt,cdn){
+  cur_frm.log_div = $a(cur_frm.fields_dict['Import Log1'].wrapper,'div','',{border:'1px solid #CCC', backgroundColor:'#DDD',width : '100%', height : '300px', overflow : 'auto'});
+  hide_field('Import Log1')
+  doc.att_fr_date = get_today();
+  doc.file_list = '';
+  doc.overwrite = 0;
+  refresh_many(['att_fr_date','file_list','overwrite']);
+
+
+}
+
+//download attendance template - csv file
+cur_frm.cscript['Get Template'] = function(doc,cdt,cdn){
+
+  if(doc.att_to_date && !doc.att_fr_date)
+    alert("Please enter 'Attendance To Date'");
+  else if(doc.att_to_date && doc.att_fr_date && doc.att_to_date < doc.att_fr_date)
+    alert("Attendance to date cannot be less than from date.");
+  else
+    $c_obj_csv(make_doclist(cdt,cdn),'get_att_list','');
+}
+
+//---------------------------------------------------------
+cur_frm.cscript['Import'] = function(doc,cdt,cdn){
+  if(!doc.file_list){
+    alert("Please upload attendance data CSV file");
+  }
+  else{
+    var call_back = function(r,rt){
+      cur_frm.log_div.innerHTML = '';
+      if(r.message)
+        cur_frm.log_div.innerHTML = r.message;
+         
+      cur_frm.cscript.refresh(doc,cdt,cdn);
+    }
+
+    $c_obj(make_doclist(cdt,cdn),'import_att_data','',call_back);
+  }
+  cur_frm.cscript.refresh(doc,cdt,cdn);
+}
+
+//====================================================
+cur_frm.cscript.refresh = function(doc,cdt,cdn){
+  if(cur_frm.log_div.innerHTML == '')
+    hide_field('Import Log1');
+  else
+    unhide_field('Import Log1');
+  refresh_field('Import Log1');
+
+}
\ No newline at end of file
diff --git a/hr/doctype/attendance_control_panel/attendance_control_panel.py b/hr/doctype/attendance_control_panel/attendance_control_panel.py
new file mode 100644
index 0000000..febcd91
--- /dev/null
+++ b/hr/doctype/attendance_control_panel/attendance_control_panel.py
@@ -0,0 +1,105 @@
+# Please edit this list and import only required elements
+import webnotes
+
+from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, generate_hash, getTraceback, get_defaults, get_first_day, get_last_day, getdate, has_common, month_name, now, nowdate, replace_newlines, sendmail, set_default, str_esc_quote, user_format, validate_email_add
+from webnotes.model import db_exists
+from webnotes.model.doc import Document, addchild, removechild, getchildren, make_autoname, SuperDocType
+from webnotes.model.doclist import getlist, copy_doclist
+from webnotes.model.code import get_obj, get_server_obj, run_server_obj, updatedb, check_syntax
+from webnotes import session, form, is_testing, msgprint, errprint
+
+set = webnotes.conn.set
+sql = webnotes.conn.sql
+get_value = webnotes.conn.get_value
+in_transaction = webnotes.conn.in_transaction
+convert_to_lists = webnotes.conn.convert_to_lists
+	
+# -----------------------------------------------------------------------------------------
+
+
+class DocType:
+  def __init__(self,d,dt):
+    self.doc, self.doclist = d,dt
+    
+  #==========================================================================
+  def get_att_list(self):
+    
+    lst = [['Attendance','','','Please fill columns which are Mandatory.',' Please do not modify the structure','',''],['','','','','','',''],['[Mandatory]','','[Mandatory]','[Mandatory]','[Mandatory]','[Mandatory]','[Mandatory]'],['Employee','Employee Name','Attendance Date','Status','Fiscal Year','Company','Naming Series']]
+    
+    dt = self.date_diff_list()          # get date list inbetween from date and to date
+    
+    att_dt = self.get_att_data()        # get default attendance data like fiscal yr, company, naming series
+      
+    fy, comp, sr = att_dt['fy'], att_dt['comp'], att_dt['sr']
+   
+    res = sql("select name, employee_name from `tabEmployee` where status = 'Active' and docstatus !=2") 
+   
+    for d in dt:
+      for r in res:       
+        lst.append([r[0],r[1],d,'',fy,comp,sr])
+
+    return lst
+  
+  #------------------------------------------------------------------------------
+  # get date list inbetween from date and to date
+  def date_diff_list(self):
+    import datetime
+    #get from date 
+    att_fr_date = self.doc.att_fr_date and self.doc.att_fr_date or ''
+    
+    #get to date
+    att_to_date = self.doc.att_to_date and self.doc.att_to_date or ''
+
+    if att_to_date:
+      r = (getdate(self.doc.att_to_date)+datetime.timedelta(days=1)-getdate(self.doc.att_fr_date)).days
+    else:
+      r = 1
+    dateList = [getdate(self.doc.att_fr_date)+datetime.timedelta(days=i) for i in range(0,r)]
+    dt=([str(date) for date in dateList])
+    
+    return dt
+
+  #------------------------------------------------------------------------------
+  def get_att_data(self):
+    
+    fy = get_defaults()['fiscal_year']    #get default fiscal year 
+
+    comp = get_defaults()['company']    #get default company
+    
+    #get naming series of attendance
+    #sr = sql("select series_options from `tabNaming Series Options` where doc_type='Attendance'")
+    sr = sql("select options from `tabDocField` where parent = 'Attendance' and fieldname = 'naming_series'")
+    if not sr:
+      msgprint("Please create naming series for Attendance.\nGo to Setup--> Manage Series.")
+      raise Exception
+    else:
+      sr = sr and sr[0][0]
+    
+    return {'fy':fy,'comp':comp,'sr':sr}
+
+  #=================================================================================  
+  def import_att_data(self):
+    filename = self.doc.file_list.split(',')
+
+    if not filename:
+      msgprint("Please attach a .CSV File.")
+      raise Exception
+    
+    if filename[0].find('.csv') < 0:
+      raise Exception
+    
+    if not filename and filename[0] and file[1]:
+      msgprint("Please Attach File. ")
+      raise Exception
+      
+    from webnotes.utils import file_manager
+    fn, content = file_manager.get_file(filename[1])
+    
+    if not type(content) == str:
+      content = content.tostring()
+
+    import webnotes.model.import_docs
+    im = webnotes.model.import_docs.CSVImport()
+    out = im.import_csv(content,self.doc.import_date_format, cint(self.doc.overwrite))
+    return out
+
diff --git a/hr/doctype/attendance_control_panel/attendance_control_panel.txt b/hr/doctype/attendance_control_panel/attendance_control_panel.txt
new file mode 100644
index 0000000..af30e04
--- /dev/null
+++ b/hr/doctype/attendance_control_panel/attendance_control_panel.txt
@@ -0,0 +1,229 @@
+# DocType, Attendance Control Panel
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-10-19 11:19:24',
+		'docstatus': 0,
+		'modified': '2011-01-04 13:33:33',
+		'modified_by': 'rahul@webnotestech.com',
+		'owner': 'harshada@webnotestech.com'
+	},
+
+	# These values are common for all DocType
+	{
+		'_last_update': '1294312182',
+		'allow_attach': 1,
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'issingle': 1,
+		'max_attachments': 1,
+		'module': 'HR',
+		'name': '__common__',
+		'section_style': 'Simple',
+		'server_code_error': ' ',
+		'version': 122
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Attendance Control Panel',
+		'parentfield': 'fields',
+		'parenttype': 'DocType'
+	},
+
+	# These values are common for all DocPerm
+	{
+		'doctype': 'DocPerm',
+		'name': '__common__',
+		'parent': 'Attendance Control Panel',
+		'parentfield': 'permissions',
+		'parenttype': 'DocType',
+		'read': 1
+	},
+
+	# DocType, Attendance Control Panel
+	{
+		'doctype': 'DocType',
+		'name': 'Attendance Control Panel'
+	},
+
+	# DocPerm
+	{
+		'create': 1,
+		'doctype': 'DocPerm',
+		'idx': 1,
+		'permlevel': 0,
+		'role': 'System Manager',
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'create': 1,
+		'doctype': 'DocPerm',
+		'idx': 2,
+		'permlevel': 0,
+		'role': 'HR User',
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'create': 1,
+		'doctype': 'DocPerm',
+		'idx': 3,
+		'permlevel': 0,
+		'role': 'HR Manager',
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 4,
+		'permlevel': 1,
+		'role': 'HR User'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 5,
+		'permlevel': 1,
+		'role': 'HR Manager'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': "Get the template of the Attendance for which you want to import in CSV (Comma seperated values) format.\nFill data in the template. Save the template in CSV format.\nAll attendance dates inbetween 'Attendance From Date' and 'Attendance To Date' will come in the template with employees list.",
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'idx': 1,
+		'label': 'Download Template',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'Selected Attendance date will comes in the attendance template.',
+		'doctype': 'DocField',
+		'fieldname': 'att_fr_date',
+		'fieldtype': 'Date',
+		'idx': 2,
+		'label': 'Attendance From Date',
+		'oldfieldname': 'attenadnce_date',
+		'oldfieldtype': 'Date',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldtype': 'Button',
+		'idx': 3,
+		'label': 'Get Template',
+		'oldfieldtype': 'Button',
+		'permlevel': 0,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break',
+		'idx': 4,
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'All attendance dates inbetween selected Attendance From Date and Attendance To Date will come in the template with employees list.',
+		'doctype': 'DocField',
+		'fieldname': 'att_to_date',
+		'fieldtype': 'Date',
+		'idx': 5,
+		'label': 'Attendance To Date',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'To import attendance data, click on "Add" button, select the saved CSV file and click on "Upload".\nSelect the date format as attendance date format in CSV file.\nClick on "Import".',
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'idx': 6,
+		'label': 'Upload Attendance Data',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'import_date_format',
+		'fieldtype': 'Select',
+		'idx': 7,
+		'label': 'Import Date Format ',
+		'options': 'yyyy-mm-dd\nmm/dd/yyyy\nmm/dd/yy\ndd-mm-yyyy\ndd/mm/yyyy',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'overwrite',
+		'fieldtype': 'Check',
+		'idx': 8,
+		'label': 'Overwrite',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldtype': 'Button',
+		'idx': 9,
+		'label': 'Import',
+		'permlevel': 0,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'file_list',
+		'fieldtype': 'Text',
+		'hidden': 1,
+		'idx': 10,
+		'label': 'File List',
+		'permlevel': 1,
+		'print_hide': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'idx': 11,
+		'label': 'Import Log',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'HTML',
+		'idx': 12,
+		'label': 'Import Log1',
+		'permlevel': 0
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/branch/__init__.py b/hr/doctype/branch/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/branch/__init__.py
diff --git a/hr/doctype/branch/branch.js b/hr/doctype/branch/branch.js
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/branch/branch.js
diff --git a/hr/doctype/branch/branch.txt b/hr/doctype/branch/branch.txt
new file mode 100644
index 0000000..f402474
--- /dev/null
+++ b/hr/doctype/branch/branch.txt
@@ -0,0 +1,104 @@
+# DocType, Branch
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-08-08 17:08:53',
+		'docstatus': 0,
+		'modified': '2011-05-30 15:24:02',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'allow_trash': 1,
+		'autoname': 'field:branch',
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'document_type': 'Master',
+		'module': 'HR',
+		'name': '__common__',
+		'section_style': 'Simple',
+		'server_code_error': ' ',
+		'show_in_menu': 0,
+		'version': 11
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Branch',
+		'parentfield': 'fields',
+		'parenttype': 'DocType'
+	},
+
+	# These values are common for all DocPerm
+	{
+		'amend': 0,
+		'cancel': 1,
+		'create': 1,
+		'doctype': 'DocPerm',
+		'name': '__common__',
+		'parent': 'Branch',
+		'parentfield': 'permissions',
+		'parenttype': 'DocType',
+		'permlevel': 0,
+		'read': 1,
+		'submit': 0,
+		'write': 1
+	},
+
+	# DocType, Branch
+	{
+		'doctype': 'DocType',
+		'name': 'Branch'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 1,
+		'role': 'System Manager'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 2,
+		'role': 'HR User'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 3,
+		'role': 'HR Manager'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'trash_reason',
+		'fieldtype': 'Small Text',
+		'idx': 1,
+		'label': 'Trash Reason',
+		'oldfieldname': 'trash_reason',
+		'oldfieldtype': 'Small Text',
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'branch',
+		'fieldtype': 'Data',
+		'idx': 2,
+		'label': 'Branch',
+		'oldfieldname': 'branch',
+		'oldfieldtype': 'Data',
+		'permlevel': 0,
+		'reqd': 1
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/chapter_vi_a_detail/__init__.py b/hr/doctype/chapter_vi_a_detail/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/chapter_vi_a_detail/__init__.py
diff --git a/hr/doctype/chapter_vi_a_detail/chapter_vi_a_detail.txt b/hr/doctype/chapter_vi_a_detail/chapter_vi_a_detail.txt
new file mode 100644
index 0000000..60ce4b3
--- /dev/null
+++ b/hr/doctype/chapter_vi_a_detail/chapter_vi_a_detail.txt
@@ -0,0 +1,145 @@
+# DocType, Chapter VI A Detail
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-08-08 17:08:54',
+		'docstatus': 0,
+		'modified': '2010-09-20 14:06:57',
+		'modified_by': 'umair@iwebnotes.com',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'istable': 1,
+		'module': 'HR',
+		'name': '__common__',
+		'section_style': 'Simple',
+		'server_code_error': ' ',
+		'show_in_menu': 0,
+		'version': 9
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Chapter VI A Detail',
+		'parentfield': 'fields',
+		'parenttype': 'DocType'
+	},
+
+	# These values are common for all DocPerm
+	{
+		'doctype': 'DocPerm',
+		'name': '__common__',
+		'parent': 'Chapter VI A Detail',
+		'parentfield': 'permissions',
+		'parenttype': 'DocType',
+		'read': 1,
+		'role': 'System Manager'
+	},
+
+	# DocType, Chapter VI A Detail
+	{
+		'doctype': 'DocType',
+		'name': 'Chapter VI A Detail'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 1,
+		'permlevel': 0,
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 2,
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'particulars3',
+		'fieldtype': 'Small Text',
+		'idx': 1,
+		'label': 'Particulars',
+		'oldfieldname': 'particulars3',
+		'oldfieldtype': 'Small Text',
+		'permlevel': 1,
+		'reqd': 1,
+		'width': '300px'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'under_section3',
+		'fieldtype': 'Data',
+		'idx': 2,
+		'label': 'Under Section',
+		'oldfieldname': 'under_section3',
+		'oldfieldtype': 'Data',
+		'permlevel': 1,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'max_limit3',
+		'fieldtype': 'Currency',
+		'idx': 3,
+		'label': 'Max. Limit',
+		'oldfieldname': 'max_limit3',
+		'oldfieldtype': 'Currency',
+		'permlevel': 1,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'actual_amount3',
+		'fieldtype': 'Currency',
+		'idx': 4,
+		'label': 'Actual Amount',
+		'oldfieldname': 'actual_amount3',
+		'oldfieldtype': 'Currency',
+		'permlevel': 0,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'eligible_amount3',
+		'fieldtype': 'Currency',
+		'idx': 5,
+		'label': 'Eligible Amount',
+		'oldfieldname': 'eligible_amount3',
+		'oldfieldtype': 'Currency',
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'modified_amount3',
+		'fieldtype': 'Currency',
+		'idx': 6,
+		'label': 'Modified Amount',
+		'oldfieldname': 'modified_amount3',
+		'oldfieldtype': 'Currency',
+		'permlevel': 0
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/declaration_detail/__init__.py b/hr/doctype/declaration_detail/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/declaration_detail/__init__.py
diff --git a/hr/doctype/declaration_detail/declaration_detail.txt b/hr/doctype/declaration_detail/declaration_detail.txt
new file mode 100644
index 0000000..3c06cfd
--- /dev/null
+++ b/hr/doctype/declaration_detail/declaration_detail.txt
@@ -0,0 +1,144 @@
+# DocType, Declaration Detail
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-08-08 17:08:57',
+		'docstatus': 0,
+		'modified': '2010-09-20 14:06:57',
+		'modified_by': 'umair@iwebnotes.com',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'istable': 1,
+		'module': 'HR',
+		'name': '__common__',
+		'section_style': 'Simple',
+		'server_code_error': ' ',
+		'show_in_menu': 0,
+		'version': 7
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Declaration Detail',
+		'parentfield': 'fields',
+		'parenttype': 'DocType'
+	},
+
+	# These values are common for all DocPerm
+	{
+		'doctype': 'DocPerm',
+		'name': '__common__',
+		'parent': 'Declaration Detail',
+		'parentfield': 'permissions',
+		'parenttype': 'DocType',
+		'read': 1,
+		'role': 'System Manager'
+	},
+
+	# DocType, Declaration Detail
+	{
+		'doctype': 'DocType',
+		'name': 'Declaration Detail'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 1,
+		'permlevel': 0,
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 2,
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'particulars1',
+		'fieldtype': 'Small Text',
+		'idx': 1,
+		'label': 'Particulars',
+		'oldfieldname': 'particulars1',
+		'oldfieldtype': 'Small Text',
+		'permlevel': 1,
+		'reqd': 1,
+		'width': '200px'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'under_section1',
+		'fieldtype': 'Data',
+		'idx': 2,
+		'label': 'Under Section',
+		'oldfieldname': 'under_section1',
+		'oldfieldtype': 'Data',
+		'permlevel': 1,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'max_limit1',
+		'fieldtype': 'Currency',
+		'idx': 3,
+		'label': 'Max. Limit',
+		'oldfieldname': 'max_limit1',
+		'oldfieldtype': 'Currency',
+		'permlevel': 1,
+		'reqd': 0
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'actual_amount1',
+		'fieldtype': 'Currency',
+		'idx': 4,
+		'label': 'Actual Amount',
+		'oldfieldname': 'actual_amount1',
+		'oldfieldtype': 'Currency',
+		'permlevel': 0,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'eligible_amount1',
+		'fieldtype': 'Currency',
+		'idx': 5,
+		'label': 'Eligible Amount',
+		'oldfieldname': 'eligible_amount1',
+		'oldfieldtype': 'Currency',
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'modified_amount1',
+		'fieldtype': 'Currency',
+		'idx': 6,
+		'label': 'Modified Amount',
+		'oldfieldname': 'modified_amount1',
+		'oldfieldtype': 'Currency',
+		'permlevel': 0
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/deduction_detail/__init__.py b/hr/doctype/deduction_detail/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/deduction_detail/__init__.py
diff --git a/hr/doctype/deduction_detail/deduction_detail.txt b/hr/doctype/deduction_detail/deduction_detail.txt
new file mode 100644
index 0000000..ee24d79
--- /dev/null
+++ b/hr/doctype/deduction_detail/deduction_detail.txt
@@ -0,0 +1,77 @@
+# DocType, Deduction Detail
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-08-08 17:08:57',
+		'docstatus': 0,
+		'modified': '2010-11-02 20:44:58',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'istable': 1,
+		'module': 'HR',
+		'name': '__common__',
+		'section_style': 'Simple',
+		'server_code_error': ' ',
+		'show_in_menu': 0,
+		'version': 14
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Deduction Detail',
+		'parentfield': 'fields',
+		'parenttype': 'DocType',
+		'permlevel': 0
+	},
+
+	# DocType, Deduction Detail
+	{
+		'doctype': 'DocType',
+		'name': 'Deduction Detail'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'd_type',
+		'fieldtype': 'Link',
+		'idx': 1,
+		'label': 'Type',
+		'oldfieldname': 'd_type',
+		'oldfieldtype': 'Select',
+		'options': 'Deduction Type',
+		'reqd': 1,
+		'width': '200px'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'd_modified_amt',
+		'fieldtype': 'Currency',
+		'idx': 3,
+		'label': 'Amount',
+		'oldfieldname': 'd_modified_amt',
+		'oldfieldtype': 'Currency'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'depend_on_lwp',
+		'fieldtype': 'Check',
+		'idx': 4,
+		'label': 'Depend on LWP',
+		'oldfieldname': 'depend_on_lwp',
+		'oldfieldtype': 'Check'
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/deduction_type/__init__.py b/hr/doctype/deduction_type/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/deduction_type/__init__.py
diff --git a/hr/doctype/deduction_type/deduction_type.js b/hr/doctype/deduction_type/deduction_type.js
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/deduction_type/deduction_type.js
diff --git a/hr/doctype/deduction_type/deduction_type.txt b/hr/doctype/deduction_type/deduction_type.txt
new file mode 100644
index 0000000..c54836f
--- /dev/null
+++ b/hr/doctype/deduction_type/deduction_type.txt
@@ -0,0 +1,115 @@
+# DocType, Deduction Type
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-08-08 17:08:57',
+		'docstatus': 0,
+		'modified': '2010-10-12 17:19:47',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'allow_trash': 1,
+		'autoname': 'field:deduction_name',
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'document_type': 'Master',
+		'module': 'HR',
+		'name': '__common__',
+		'section_style': 'Simple',
+		'server_code_error': ' ',
+		'show_in_menu': 0,
+		'version': 10
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Deduction Type',
+		'parentfield': 'fields',
+		'parenttype': 'DocType'
+	},
+
+	# These values are common for all DocPerm
+	{
+		'cancel': 1,
+		'create': 1,
+		'doctype': 'DocPerm',
+		'name': '__common__',
+		'parent': 'Deduction Type',
+		'parentfield': 'permissions',
+		'parenttype': 'DocType',
+		'permlevel': 0,
+		'read': 1,
+		'write': 1
+	},
+
+	# DocType, Deduction Type
+	{
+		'doctype': 'DocType',
+		'name': 'Deduction Type'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 1,
+		'role': 'System Manager'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 2,
+		'role': 'HR User'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 3,
+		'role': 'HR Manager'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'trash_reason',
+		'fieldtype': 'Small Text',
+		'idx': 1,
+		'label': 'Trash Reason',
+		'oldfieldname': 'trash_reason',
+		'oldfieldtype': 'Small Text',
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'deduction_name',
+		'fieldtype': 'Data',
+		'idx': 2,
+		'label': 'Name',
+		'oldfieldname': 'deduction_name',
+		'oldfieldtype': 'Data',
+		'permlevel': 0,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'description',
+		'fieldtype': 'Small Text',
+		'idx': 3,
+		'label': 'Description',
+		'oldfieldname': 'description',
+		'oldfieldtype': 'Small Text',
+		'permlevel': 0,
+		'width': '300px'
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/department/__init__.py b/hr/doctype/department/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/department/__init__.py
diff --git a/hr/doctype/department/department.js b/hr/doctype/department/department.js
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/department/department.js
diff --git a/hr/doctype/department/department.txt b/hr/doctype/department/department.txt
new file mode 100644
index 0000000..aae0127
--- /dev/null
+++ b/hr/doctype/department/department.txt
@@ -0,0 +1,102 @@
+# DocType, Department
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-08-08 17:08:58',
+		'docstatus': 0,
+		'modified': '2010-09-20 14:06:57',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'allow_trash': 1,
+		'autoname': 'field:department_name',
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'document_type': 'Master',
+		'module': 'HR',
+		'name': '__common__',
+		'section_style': 'Simple',
+		'server_code_error': ' ',
+		'show_in_menu': 0,
+		'version': 7
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Department',
+		'parentfield': 'fields',
+		'parenttype': 'DocType'
+	},
+
+	# These values are common for all DocPerm
+	{
+		'cancel': 1,
+		'create': 1,
+		'doctype': 'DocPerm',
+		'name': '__common__',
+		'parent': 'Department',
+		'parentfield': 'permissions',
+		'parenttype': 'DocType',
+		'permlevel': 0,
+		'read': 1,
+		'write': 1
+	},
+
+	# DocType, Department
+	{
+		'doctype': 'DocType',
+		'name': 'Department'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 1,
+		'role': 'System Manager'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 2,
+		'role': 'HR User'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 3,
+		'role': 'HR Manager'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'trash_reason',
+		'fieldtype': 'Small Text',
+		'idx': 1,
+		'label': 'Trash Reason',
+		'oldfieldname': 'trash_reason',
+		'oldfieldtype': 'Small Text',
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'department_name',
+		'fieldtype': 'Data',
+		'idx': 2,
+		'label': 'Department',
+		'oldfieldname': 'department_name',
+		'oldfieldtype': 'Data',
+		'permlevel': 0,
+		'reqd': 1
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/designation/__init__.py b/hr/doctype/designation/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/designation/__init__.py
diff --git a/hr/doctype/designation/designation.js b/hr/doctype/designation/designation.js
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/designation/designation.js
diff --git a/hr/doctype/designation/designation.txt b/hr/doctype/designation/designation.txt
new file mode 100644
index 0000000..8a8f4d3
--- /dev/null
+++ b/hr/doctype/designation/designation.txt
@@ -0,0 +1,102 @@
+# DocType, Designation
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-08-08 17:08:58',
+		'docstatus': 0,
+		'modified': '2010-09-20 14:06:57',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'allow_trash': 1,
+		'autoname': 'field:designation_name',
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'document_type': 'Master',
+		'module': 'HR',
+		'name': '__common__',
+		'section_style': 'Simple',
+		'server_code_error': ' ',
+		'show_in_menu': 0,
+		'version': 7
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Designation',
+		'parentfield': 'fields',
+		'parenttype': 'DocType'
+	},
+
+	# These values are common for all DocPerm
+	{
+		'cancel': 1,
+		'create': 1,
+		'doctype': 'DocPerm',
+		'name': '__common__',
+		'parent': 'Designation',
+		'parentfield': 'permissions',
+		'parenttype': 'DocType',
+		'permlevel': 0,
+		'read': 1,
+		'write': 1
+	},
+
+	# DocType, Designation
+	{
+		'doctype': 'DocType',
+		'name': 'Designation'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 1,
+		'role': 'System Manager'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 2,
+		'role': 'HR User'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 3,
+		'role': 'HR Manager'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'trash_reason',
+		'fieldtype': 'Small Text',
+		'idx': 1,
+		'label': 'Trash Reason',
+		'oldfieldname': 'trash_reason',
+		'oldfieldtype': 'Small Text',
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'designation_name',
+		'fieldtype': 'Data',
+		'idx': 2,
+		'label': 'Designation',
+		'oldfieldname': 'designation_name',
+		'oldfieldtype': 'Data',
+		'permlevel': 0,
+		'reqd': 1
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/earn_deduction_detail/__init__.py b/hr/doctype/earn_deduction_detail/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/earn_deduction_detail/__init__.py
diff --git a/hr/doctype/earn_deduction_detail/earn_deduction_detail.txt b/hr/doctype/earn_deduction_detail/earn_deduction_detail.txt
new file mode 100644
index 0000000..8b05961
--- /dev/null
+++ b/hr/doctype/earn_deduction_detail/earn_deduction_detail.txt
@@ -0,0 +1,116 @@
+# DocType, Earn Deduction Detail
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-08-08 17:08:59',
+		'docstatus': 0,
+		'modified': '2010-09-20 14:06:57',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'istable': 1,
+		'module': 'HR',
+		'name': '__common__',
+		'section_style': 'Simple',
+		'show_in_menu': 0,
+		'version': 4
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Earn Deduction Detail',
+		'parentfield': 'fields',
+		'parenttype': 'DocType',
+		'permlevel': 0
+	},
+
+	# These values are common for all DocPerm
+	{
+		'create': 1,
+		'doctype': 'DocPerm',
+		'idx': 1,
+		'name': '__common__',
+		'parent': 'Earn Deduction Detail',
+		'parentfield': 'permissions',
+		'parenttype': 'DocType',
+		'permlevel': 0,
+		'read': 1,
+		'role': 'All',
+		'write': 1
+	},
+
+	# DocType, Earn Deduction Detail
+	{
+		'doctype': 'DocType',
+		'name': 'Earn Deduction Detail'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'earn_deduction_name',
+		'fieldtype': 'Data',
+		'idx': 1,
+		'label': 'Earn/Deduction Name',
+		'oldfieldname': 'earn_deduction_name',
+		'oldfieldtype': 'Data'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'mode',
+		'fieldtype': 'Select',
+		'idx': 2,
+		'label': 'Mode',
+		'oldfieldname': 'mode',
+		'oldfieldtype': 'Select',
+		'options': '\n%\nRs'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'per',
+		'fieldtype': 'Data',
+		'idx': 3,
+		'label': 'Per.(%)',
+		'oldfieldname': 'per',
+		'oldfieldtype': 'Data'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'amount',
+		'fieldtype': 'Data',
+		'idx': 4,
+		'label': 'Amount',
+		'oldfieldname': 'amount',
+		'oldfieldtype': 'Data'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'type',
+		'fieldtype': 'Data',
+		'idx': 5,
+		'label': 'Type',
+		'oldfieldname': 'type',
+		'oldfieldtype': 'Data'
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/earning_detail/__init__.py b/hr/doctype/earning_detail/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/earning_detail/__init__.py
diff --git a/hr/doctype/earning_detail/earning_detail.txt b/hr/doctype/earning_detail/earning_detail.txt
new file mode 100644
index 0000000..399c6cb
--- /dev/null
+++ b/hr/doctype/earning_detail/earning_detail.txt
@@ -0,0 +1,80 @@
+# DocType, Earning Detail
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-08-08 17:08:59',
+		'docstatus': 0,
+		'modified': '2011-02-09 13:02:55',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'hide_heading': 0,
+		'hide_toolbar': 0,
+		'istable': 1,
+		'module': 'HR',
+		'name': '__common__',
+		'section_style': 'Simple',
+		'server_code_error': ' ',
+		'show_in_menu': 0,
+		'version': 26
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Earning Detail',
+		'parentfield': 'fields',
+		'parenttype': 'DocType',
+		'permlevel': 0
+	},
+
+	# DocType, Earning Detail
+	{
+		'doctype': 'DocType',
+		'name': 'Earning Detail'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'e_type',
+		'fieldtype': 'Link',
+		'idx': 1,
+		'label': 'Type',
+		'oldfieldname': 'e_type',
+		'oldfieldtype': 'Data',
+		'options': 'Earning Type',
+		'reqd': 1,
+		'width': '200px'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'modified_value',
+		'fieldtype': 'Currency',
+		'idx': 2,
+		'label': 'Amount',
+		'oldfieldname': 'modified_value',
+		'oldfieldtype': 'Currency',
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'depend_on_lwp',
+		'fieldtype': 'Check',
+		'idx': 3,
+		'label': 'Depend on LWP',
+		'oldfieldname': 'depend_on_lwp',
+		'oldfieldtype': 'Check'
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/earning_type/__init__.py b/hr/doctype/earning_type/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/earning_type/__init__.py
diff --git a/hr/doctype/earning_type/earning_type.js b/hr/doctype/earning_type/earning_type.js
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/earning_type/earning_type.js
diff --git a/hr/doctype/earning_type/earning_type.txt b/hr/doctype/earning_type/earning_type.txt
new file mode 100644
index 0000000..203f8b5
--- /dev/null
+++ b/hr/doctype/earning_type/earning_type.txt
@@ -0,0 +1,147 @@
+# DocType, Earning Type
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-08-08 17:08:59',
+		'docstatus': 0,
+		'modified': '2010-10-12 17:15:46',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'allow_trash': 1,
+		'autoname': 'field:earning_name',
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'document_type': 'Master',
+		'module': 'HR',
+		'name': '__common__',
+		'section_style': 'Simple',
+		'server_code_error': ' ',
+		'show_in_menu': 0,
+		'version': 13
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Earning Type',
+		'parentfield': 'fields',
+		'parenttype': 'DocType'
+	},
+
+	# These values are common for all DocPerm
+	{
+		'cancel': 1,
+		'create': 1,
+		'doctype': 'DocPerm',
+		'name': '__common__',
+		'parent': 'Earning Type',
+		'parentfield': 'permissions',
+		'parenttype': 'DocType',
+		'permlevel': 0,
+		'read': 1,
+		'write': 1
+	},
+
+	# DocType, Earning Type
+	{
+		'doctype': 'DocType',
+		'name': 'Earning Type'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 1,
+		'role': 'System Manager'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 2,
+		'role': 'HR User'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 3,
+		'role': 'HR Manager'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'trash_reason',
+		'fieldtype': 'Small Text',
+		'idx': 1,
+		'label': 'Trash Reason',
+		'oldfieldname': 'trash_reason',
+		'oldfieldtype': 'Small Text',
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'earning_name',
+		'fieldtype': 'Data',
+		'idx': 2,
+		'label': 'Name',
+		'oldfieldname': 'earning_name',
+		'oldfieldtype': 'Data',
+		'permlevel': 0,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'description',
+		'fieldtype': 'Small Text',
+		'idx': 3,
+		'label': 'Description',
+		'oldfieldname': 'description',
+		'oldfieldtype': 'Small Text',
+		'permlevel': 0,
+		'reqd': 0,
+		'width': '300px'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'taxable',
+		'fieldtype': 'Select',
+		'idx': 4,
+		'label': 'Taxable',
+		'oldfieldname': 'taxable',
+		'oldfieldtype': 'Select',
+		'options': '\nYes\nNo',
+		'permlevel': 0,
+		'reqd': 1,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'depends_on': "eval:doc.taxable=='No'",
+		'doctype': 'DocField',
+		'fieldname': 'exemption_limit',
+		'fieldtype': 'Currency',
+		'hidden': 1,
+		'idx': 5,
+		'label': 'Exemption Limit',
+		'oldfieldname': 'exemption_limit',
+		'oldfieldtype': 'Currency',
+		'permlevel': 0
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/educational_qualifications/__init__.py b/hr/doctype/educational_qualifications/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/educational_qualifications/__init__.py
diff --git a/hr/doctype/educational_qualifications/educational_qualifications.txt b/hr/doctype/educational_qualifications/educational_qualifications.txt
new file mode 100644
index 0000000..21f4a9a
--- /dev/null
+++ b/hr/doctype/educational_qualifications/educational_qualifications.txt
@@ -0,0 +1,117 @@
+# DocType, Educational Qualifications
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-08-08 17:08:59',
+		'docstatus': 0,
+		'modified': '2010-09-20 14:06:57',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'istable': 1,
+		'module': 'HR',
+		'name': '__common__',
+		'section_style': 'Simple',
+		'server_code_error': ' ',
+		'show_in_menu': 0,
+		'version': 11
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Educational Qualifications',
+		'parentfield': 'fields',
+		'parenttype': 'DocType',
+		'permlevel': 0
+	},
+
+	# DocType, Educational Qualifications
+	{
+		'doctype': 'DocType',
+		'name': 'Educational Qualifications'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'school_univ',
+		'fieldtype': 'Data',
+		'idx': 1,
+		'label': 'School/University',
+		'oldfieldname': 'school_univ',
+		'oldfieldtype': 'Data'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'qualification',
+		'fieldtype': 'Data',
+		'idx': 2,
+		'label': 'Qualification (Degree/Diploma)',
+		'oldfieldname': 'qualification',
+		'oldfieldtype': 'Data',
+		'reqd': 0,
+		'search_index': 1,
+		'width': '170px'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'level',
+		'fieldtype': 'Select',
+		'idx': 3,
+		'label': 'Level',
+		'oldfieldname': 'level',
+		'oldfieldtype': 'Select',
+		'options': '\nGraduate\nPost Graduate\nUnder Graduate',
+		'reqd': 0,
+		'search_index': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'year_of_passing',
+		'fieldtype': 'Int',
+		'idx': 4,
+		'label': 'Year of Passing',
+		'oldfieldname': 'year_of_passing',
+		'oldfieldtype': 'Int',
+		'reqd': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'class_percent',
+		'fieldtype': 'Data',
+		'idx': 5,
+		'label': 'Class / Percentage',
+		'oldfieldname': 'class_percent',
+		'oldfieldtype': 'Data',
+		'reqd': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'maj_opt_sub',
+		'fieldtype': 'Data',
+		'idx': 6,
+		'label': 'Major / Optional Subject',
+		'oldfieldname': 'maj_opt_sub',
+		'oldfieldtype': 'Data',
+		'reqd': 0,
+		'width': '170px'
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/educational_qualifications_detail/__init__.py b/hr/doctype/educational_qualifications_detail/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/educational_qualifications_detail/__init__.py
diff --git a/hr/doctype/educational_qualifications_detail/educational_qualifications_detail.txt b/hr/doctype/educational_qualifications_detail/educational_qualifications_detail.txt
new file mode 100644
index 0000000..38067e0
--- /dev/null
+++ b/hr/doctype/educational_qualifications_detail/educational_qualifications_detail.txt
@@ -0,0 +1,109 @@
+# DocType, Educational Qualifications Detail
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-08-08 17:08:59',
+		'docstatus': 0,
+		'modified': '2010-09-20 14:06:57',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'istable': 1,
+		'module': 'HR',
+		'name': '__common__',
+		'section_style': 'Simple',
+		'server_code_error': ' ',
+		'show_in_menu': 0,
+		'version': 5
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Educational Qualifications Detail',
+		'parentfield': 'fields',
+		'parenttype': 'DocType',
+		'permlevel': 0
+	},
+
+	# DocType, Educational Qualifications Detail
+	{
+		'doctype': 'DocType',
+		'name': 'Educational Qualifications Detail'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'school_univ',
+		'fieldtype': 'Small Text',
+		'idx': 1,
+		'label': 'School/University',
+		'oldfieldname': 'school_univ',
+		'oldfieldtype': 'Small Text'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'qualification',
+		'fieldtype': 'Data',
+		'idx': 2,
+		'label': 'Qualification',
+		'oldfieldname': 'qualification',
+		'oldfieldtype': 'Data',
+		'width': '100px'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'level',
+		'fieldtype': 'Select',
+		'idx': 3,
+		'label': 'Level',
+		'oldfieldname': 'level',
+		'oldfieldtype': 'Select',
+		'options': 'Graduate\nPost Graduate\nUnder Graduate'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'year_of_passing',
+		'fieldtype': 'Int',
+		'idx': 4,
+		'label': 'Year of Passing',
+		'oldfieldname': 'year_of_passing',
+		'oldfieldtype': 'Int'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'class_per',
+		'fieldtype': 'Data',
+		'idx': 5,
+		'label': 'Class / Percentage',
+		'oldfieldname': 'class_per',
+		'oldfieldtype': 'Data'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'maj_opt_subj',
+		'fieldtype': 'Text',
+		'idx': 6,
+		'label': 'Major/Optional Subjects',
+		'oldfieldname': 'maj_opt_subj',
+		'oldfieldtype': 'Text'
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/employee/__init__.py b/hr/doctype/employee/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/employee/__init__.py
diff --git a/hr/doctype/employee/employee.js b/hr/doctype/employee/employee.js
new file mode 100644
index 0000000..2bd8e1e
--- /dev/null
+++ b/hr/doctype/employee/employee.js
@@ -0,0 +1,51 @@
+// get retirement date
+//========================================================
+cur_frm.cscript.date_of_birth = function(doc, dt, dn) {
+  get_server_fields('get_retirement_date','','',doc,dt,dn,1);
+}
+
+// salutation-gender
+//========================================================
+cur_frm.cscript.salutation = function(doc,dt,dn) {
+  if(doc.salutation){
+    if(doc.salutation=='Mr')
+      doc.gender='Male';
+    else if(doc.salutation=='Ms')
+      doc.gender='Female';
+    refresh_field('gender');
+  }
+}
+
+// On refresh
+//========================================================
+cur_frm.cscript.refresh = function(doc, dt, dn) {
+  if(doc.__islocal!=1){
+    cur_frm.add_custom_button('Make Salary Structure', cur_frm.cscript['Make Salary Structure']);
+  }  
+}
+
+//Make Salary Structure
+//========================================================
+cur_frm.cscript['Make Salary Structure']=function(){
+  $c_obj(make_doclist (doc.doctype,doc.name),'check_sal_structure',cur_frm.doc.name,function(r, rt) {
+    if(r.message)
+      alert("You have already created Active salary structure.\nIf you want to create new one, please ensure that no active salary structure exist.\nTo inactive salary structure select 'Is Active' as 'No'.");
+    else
+      cur_frm.cscript.make_salary_structure(cur_frm.doc); 
+  });
+}
+
+// Load sal structure
+//========================================================
+cur_frm.cscript.make_salary_structure = function(doc,dt,dn,det){
+  var st = LocalDB.create('Salary Structure');
+  st = locals['Salary Structure'][st];
+  st.employee = doc.name;
+  st.employee_name = doc.employee_name;
+  st.branch=doc.branch;
+  st.designation=doc.designation;
+  st.department=doc.department;
+  st.fiscal_year = doc.fiscal_year
+  st.grade=doc.grade;
+  loaddoc('Salary Structure', st.name);
+}
diff --git a/hr/doctype/employee/employee.py b/hr/doctype/employee/employee.py
new file mode 100644
index 0000000..54142db
--- /dev/null
+++ b/hr/doctype/employee/employee.py
@@ -0,0 +1,118 @@
+import webnotes
+
+from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, generate_hash, getTraceback, get_defaults, get_first_day, get_last_day, getdate, has_common, month_name, now, nowdate, replace_newlines, sendmail, set_default, str_esc_quote, user_format, validate_email_add
+from webnotes.model import db_exists
+from webnotes.model.doc import Document, addchild, removechild, getchildren, make_autoname, SuperDocType
+from webnotes.model.doclist import getlist, copy_doclist
+from webnotes.model.code import get_obj, get_server_obj, run_server_obj, updatedb, check_syntax
+from webnotes import session, form, is_testing, msgprint, errprint
+
+sql = webnotes.conn.sql
+get_value = webnotes.conn.get_value
+in_transaction = webnotes.conn.in_transaction
+convert_to_lists = webnotes.conn.convert_to_lists
+
+# -----------------------------------------------------------------------------------------
+
+
+class DocType:
+  def __init__(self,doc,doclist=[]):
+    self.doc = doc
+    self.doclist = doclist
+
+  # Autoname
+  #========================================================================================================
+  def autoname(self):
+    ret = sql("select value from `tabSingles` where doctype = 'Manage Account' and field = 'emp_created_by'")
+    if not ret:
+      msgprint("To Save Employee, please go to Setup -->Global Defaults. Click on HR and select 'Employee Records to be created by'.")
+      raise Exception 
+    else:
+      if ret[0][0]=='Naming Series':
+        self.doc.name = make_autoname(self.doc.naming_series + '.####')
+      elif ret[0][0]=='Employee Number':
+        self.doc.name = make_autoname(self.doc.employee_number)
+        
+  # Get retirement date
+  #========================================================================================================
+  def get_retirement_date(self):    
+    import datetime
+    ret = {}
+    if self.doc.date_of_birth:
+      dt = getdate(self.doc.date_of_birth) + datetime.timedelta(21915)
+      ret = {'date_of_retirement': dt.strftime('%Y-%m-%d')}
+    return str(ret)
+
+  # check if salary structure exists
+  #========================================================================================================
+  def check_sal_structure(self, nm):
+    ret_sal_struct=sql("select name from `tabSalary Structure` where employee='%s' and is_active = 'Yes'"%nm)
+    return ret_sal_struct and ret_sal_struct[0][0] or ''
+
+  #========================================================================================================
+  def validate(self):
+    self.validate_date()
+    self.validate_email()
+    self.validate_name()
+    self.validate_status()
+  
+  # Validate dates
+  #========================================================================================================
+  def validate_date(self):  
+    import datetime
+    if self.doc.date_of_birth and self.doc.date_of_joining and getdate(self.doc.date_of_birth) >= getdate(self.doc.date_of_joining):
+      msgprint('Date of Joining must be greater than Date of Birth')
+      raise Exception
+
+    elif self.doc.scheduled_confirmation_date and self.doc.date_of_joining and (getdate(self.doc.scheduled_confirmation_date) < getdate(self.doc.date_of_joining)):
+      msgprint('Scheduled Confirmation Date must be greater than Date of Joining')
+      raise Exception
+    
+    elif self.doc.final_confirmation_date and self.doc.date_of_joining and (getdate(self.doc.final_confirmation_date) < getdate(self.doc.date_of_joining)):
+      msgprint('Final Confirmation Date must be greater than Date of Joining')
+      raise Exception
+    
+    elif self.doc.date_of_retirement and self.doc.date_of_joining and (getdate(self.doc.date_of_retirement) <= getdate(self.doc.date_of_joining)):
+      msgprint('Date Of Retirement must be greater than Date of Joining')
+      raise Exception
+    
+    elif self.doc.relieving_date and self.doc.date_of_joining and (getdate(self.doc.relieving_date) <= getdate(self.doc.date_of_joining)):
+      msgprint('Relieving Date must be greater than Date of Joining')
+      raise Exception
+    
+    elif self.doc.contract_end_date and self.doc.date_of_joining and (getdate(self.doc.contract_end_date)<=getdate(self.doc.date_of_joining)):
+      msgprint('Contract End Date must be greater than Date of Joining')
+      raise Exception
+   
+  # Validate email id
+  #========================================================================================================
+  def validate_email(self):
+    if self.doc.company_email and not validate_email_add(self.doc.company_email):
+      msgprint("Please enter valid Company Email")
+      raise Exception
+    if self.doc.personal_email and not validate_email_add(self.doc.personal_email):
+      msgprint("Please enter valid Personal Email")
+      raise Exception
+
+  # Validate name
+  #========================================================================================================
+  def validate_name(self):  
+    ret = sql("select value from `tabSingles` where doctype = 'Manage Account' and field = 'emp_created_by'")
+
+    if not ret:
+      msgprint("To Save Employee, please go to Setup -->Global Defaults. Click on HR and select 'Employee Records to be created by'.")
+      raise Exception 
+    else:
+      if ret[0][0]=='Naming Series' and not self.doc.naming_series:
+        msgprint("Please select Naming Series.")
+        raise Exception 
+      elif ret[0][0]=='Employee Number' and not self.doc.employee_number:
+        msgprint("Please enter Employee Number.")
+        raise Exception 
+        
+  # Validate status
+  #========================================================================================================
+  def validate_status(self):
+    if self.doc.status == 'Left' and not self.doc.relieving_date:
+      msgprint("Please enter relieving date.")
+      raise Exception
diff --git a/hr/doctype/employee/employee.txt b/hr/doctype/employee/employee.txt
new file mode 100644
index 0000000..cbe281d
--- /dev/null
+++ b/hr/doctype/employee/employee.txt
@@ -0,0 +1,1105 @@
+# DocType, Employee
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2011-02-17 11:16:08',
+		'docstatus': 0,
+		'modified': '2011-06-27 14:39:04',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'_last_update': '1308918132',
+		'allow_attach': 1,
+		'allow_trash': 1,
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'document_type': 'Master',
+		'module': 'HR',
+		'name': '__common__',
+		'search_fields': 'employee_name',
+		'section_style': 'Tabbed',
+		'server_code_error': ' ',
+		'show_in_menu': 0,
+		'subject': '%(employee_name)s',
+		'tag_fields': 'status',
+		'version': 443
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Employee',
+		'parentfield': 'fields',
+		'parenttype': 'DocType'
+	},
+
+	# These values are common for all DocPerm
+	{
+		'doctype': 'DocPerm',
+		'name': '__common__',
+		'parent': 'Employee',
+		'parentfield': 'permissions',
+		'parenttype': 'DocType',
+		'read': 1
+	},
+
+	# DocType, Employee
+	{
+		'doctype': 'DocType',
+		'name': 'Employee'
+	},
+
+	# DocPerm
+	{
+		'cancel': 1,
+		'create': 1,
+		'doctype': 'DocPerm',
+		'idx': 1,
+		'permlevel': 0,
+		'role': 'System Manager',
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 2,
+		'permlevel': 1,
+		'role': 'All'
+	},
+
+	# DocPerm
+	{
+		'cancel': 1,
+		'create': 1,
+		'doctype': 'DocPerm',
+		'idx': 3,
+		'permlevel': 0,
+		'role': 'HR User',
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'cancel': 1,
+		'create': 1,
+		'doctype': 'DocPerm',
+		'idx': 4,
+		'permlevel': 0,
+		'role': 'HR Manager',
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 5,
+		'permlevel': 1,
+		'role': 'HR User'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 6,
+		'permlevel': 1,
+		'role': 'HR Manager'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'idx': 1,
+		'label': 'Basic Information',
+		'oldfieldtype': 'Section Break',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break',
+		'idx': 2,
+		'permlevel': 0,
+		'width': '50%'
+	},
+
+	# DocField
+	{
+		'description': 'To manage multiple series please go to Setup > Manage Series',
+		'doctype': 'DocField',
+		'fieldname': 'naming_series',
+		'fieldtype': 'Select',
+		'idx': 3,
+		'label': 'Naming Series',
+		'no_copy': 1,
+		'oldfieldname': 'naming_series',
+		'oldfieldtype': 'Select',
+		'options': 'WN-EMP\nEMP/',
+		'permlevel': 0,
+		'reqd': 0
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'salutation',
+		'fieldtype': 'Select',
+		'idx': 4,
+		'label': 'Salutation',
+		'oldfieldname': 'salutation',
+		'oldfieldtype': 'Select',
+		'options': '\nMr\nMs',
+		'permlevel': 0,
+		'search_index': 0,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'employee_name',
+		'fieldtype': 'Data',
+		'idx': 5,
+		'label': 'Employee Name',
+		'oldfieldname': 'employee_name',
+		'oldfieldtype': 'Data',
+		'permlevel': 0,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'employee_number',
+		'fieldtype': 'Data',
+		'idx': 6,
+		'in_filter': 1,
+		'label': 'Employee Number',
+		'oldfieldname': 'employee_number',
+		'oldfieldtype': 'Data',
+		'permlevel': 0,
+		'search_index': 0
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'date_of_joining',
+		'fieldtype': 'Date',
+		'idx': 7,
+		'label': 'Date of Joining',
+		'oldfieldname': 'date_of_joining',
+		'oldfieldtype': 'Date',
+		'permlevel': 0,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'date_of_birth',
+		'fieldtype': 'Date',
+		'idx': 8,
+		'in_filter': 1,
+		'label': 'Date of Birth',
+		'oldfieldname': 'date_of_birth',
+		'oldfieldtype': 'Date',
+		'permlevel': 0,
+		'reqd': 1,
+		'search_index': 0,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'gender',
+		'fieldtype': 'Select',
+		'idx': 9,
+		'in_filter': 1,
+		'label': 'Gender',
+		'oldfieldname': 'gender',
+		'oldfieldtype': 'Select',
+		'options': '\nMale\nFemale',
+		'permlevel': 0,
+		'reqd': 1,
+		'search_index': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'company',
+		'fieldtype': 'Select',
+		'idx': 10,
+		'in_filter': 1,
+		'label': 'Company',
+		'options': 'link:Company',
+		'permlevel': 0,
+		'print_hide': 1,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break',
+		'idx': 11,
+		'permlevel': 0,
+		'width': '50%'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'default': 'Active',
+		'doctype': 'DocField',
+		'fieldname': 'status',
+		'fieldtype': 'Select',
+		'idx': 12,
+		'in_filter': 1,
+		'label': 'Status',
+		'oldfieldname': 'status',
+		'oldfieldtype': 'Select',
+		'options': '\nActive\nLeft',
+		'permlevel': 0,
+		'reqd': 1,
+		'search_index': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'employment_type',
+		'fieldtype': 'Link',
+		'idx': 13,
+		'in_filter': 1,
+		'label': 'Employment Type',
+		'oldfieldname': 'employment_type',
+		'oldfieldtype': 'Link',
+		'options': 'Employment Type',
+		'permlevel': 0,
+		'search_index': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'scheduled_confirmation_date',
+		'fieldtype': 'Date',
+		'idx': 14,
+		'in_filter': 1,
+		'label': 'Scheduled Confirmation Date',
+		'oldfieldname': 'scheduled_confirmation_date',
+		'oldfieldtype': 'Date',
+		'permlevel': 0,
+		'search_index': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'final_confirmation_date',
+		'fieldtype': 'Date',
+		'idx': 15,
+		'label': 'Final Confirmation Date',
+		'oldfieldname': 'final_confirmation_date',
+		'oldfieldtype': 'Date',
+		'permlevel': 0,
+		'search_index': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'contract_end_date',
+		'fieldtype': 'Date',
+		'idx': 16,
+		'in_filter': 1,
+		'label': 'Contract End Date',
+		'oldfieldname': 'contract_end_date',
+		'oldfieldtype': 'Date',
+		'permlevel': 0,
+		'search_index': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'date_of_retirement',
+		'fieldtype': 'Date',
+		'idx': 17,
+		'label': 'Date Of Retirement',
+		'oldfieldname': 'date_of_retirement',
+		'oldfieldtype': 'Date',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'Applicable Holiday List',
+		'doctype': 'DocField',
+		'fieldname': 'holiday_list',
+		'fieldtype': 'Link',
+		'idx': 18,
+		'label': 'Holiday List',
+		'oldfieldname': 'holiday_list',
+		'oldfieldtype': 'Link',
+		'options': 'Holiday List',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'idx': 19,
+		'label': 'Job Profile',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break',
+		'idx': 20,
+		'permlevel': 0,
+		'width': '50%'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'branch',
+		'fieldtype': 'Link',
+		'idx': 21,
+		'in_filter': 1,
+		'label': 'Branch',
+		'oldfieldname': 'branch',
+		'oldfieldtype': 'Link',
+		'options': 'Branch',
+		'permlevel': 0,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'department',
+		'fieldtype': 'Link',
+		'idx': 22,
+		'in_filter': 1,
+		'label': 'Department',
+		'oldfieldname': 'department',
+		'oldfieldtype': 'Link',
+		'options': 'Department',
+		'permlevel': 0,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'designation',
+		'fieldtype': 'Link',
+		'idx': 23,
+		'in_filter': 1,
+		'label': 'Designation',
+		'oldfieldname': 'designation',
+		'oldfieldtype': 'Link',
+		'options': 'Designation',
+		'permlevel': 0,
+		'reqd': 1,
+		'search_index': 1
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'grade',
+		'fieldtype': 'Link',
+		'idx': 24,
+		'in_filter': 1,
+		'label': 'Grade',
+		'oldfieldname': 'grade',
+		'oldfieldtype': 'Link',
+		'options': 'Grade',
+		'permlevel': 0,
+		'reqd': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'reports_to',
+		'fieldtype': 'Link',
+		'idx': 25,
+		'label': 'Reports to',
+		'oldfieldname': 'reports_to',
+		'oldfieldtype': 'Link',
+		'options': 'Employee',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'description': 'Provide email id registered in company',
+		'doctype': 'DocField',
+		'fieldname': 'company_email',
+		'fieldtype': 'Data',
+		'idx': 26,
+		'in_filter': 1,
+		'label': 'Email (By company)',
+		'oldfieldname': 'company_email',
+		'oldfieldtype': 'Data',
+		'permlevel': 0,
+		'reqd': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'is_sales_person',
+		'fieldtype': 'Check',
+		'idx': 27,
+		'label': 'Is Sales Person',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break',
+		'idx': 28,
+		'label': 'Salary Information',
+		'oldfieldtype': 'Section Break',
+		'permlevel': 0,
+		'width': '50%'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'salary_mode',
+		'fieldtype': 'Select',
+		'idx': 29,
+		'label': 'Salary Mode',
+		'oldfieldname': 'salary_mode',
+		'oldfieldtype': 'Select',
+		'options': '\nBank\nCash \nCheque',
+		'permlevel': 0,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'depends_on': "eval:doc.salary_mode == 'Bank'",
+		'doctype': 'DocField',
+		'fieldname': 'bank_name',
+		'fieldtype': 'Data',
+		'hidden': 0,
+		'idx': 30,
+		'in_filter': 1,
+		'label': 'Bank Name',
+		'oldfieldname': 'bank_name',
+		'oldfieldtype': 'Link',
+		'options': 'Suggest',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'depends_on': "eval:doc.salary_mode == 'Bank'",
+		'doctype': 'DocField',
+		'fieldname': 'bank_ac_no',
+		'fieldtype': 'Data',
+		'hidden': 0,
+		'idx': 31,
+		'label': 'Bank A/C No.',
+		'oldfieldname': 'bank_ac_no',
+		'oldfieldtype': 'Data',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'esic_card_no',
+		'fieldtype': 'Data',
+		'idx': 32,
+		'label': 'ESIC CARD No',
+		'oldfieldname': 'esic_card_no',
+		'oldfieldtype': 'Data',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'pf_number',
+		'fieldtype': 'Data',
+		'idx': 33,
+		'label': 'PF Number',
+		'oldfieldname': 'pf_number',
+		'oldfieldtype': 'Data',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'gratuity_lic_id',
+		'fieldtype': 'Data',
+		'idx': 34,
+		'label': 'Gratuity LIC ID',
+		'oldfieldname': 'gratuity_lic_id',
+		'oldfieldtype': 'Data',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'idx': 35,
+		'label': 'Contact Details',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break',
+		'idx': 36,
+		'permlevel': 0,
+		'width': '50%'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'cell_number',
+		'fieldtype': 'Data',
+		'idx': 37,
+		'label': 'Cell Number',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'personal_email',
+		'fieldtype': 'Data',
+		'idx': 38,
+		'label': 'Personal Email',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'notice_number_of_days',
+		'fieldtype': 'Int',
+		'idx': 39,
+		'label': 'Notice - Number of Days',
+		'oldfieldname': 'notice_number_of_days',
+		'oldfieldtype': 'Int',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'HTML',
+		'idx': 40,
+		'label': 'Emergency Contact Details',
+		'options': '<b>Emergency Contact Details</b>',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'person_to_be_contacted',
+		'fieldtype': 'Data',
+		'idx': 41,
+		'label': 'Person To Be Contacted',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'relation',
+		'fieldtype': 'Data',
+		'idx': 42,
+		'label': 'Relation',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'emergency_phone_number',
+		'fieldtype': 'Data',
+		'idx': 43,
+		'label': 'Emergency Phone Number',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break',
+		'idx': 44,
+		'permlevel': 0,
+		'width': '50%'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'permanent_accommodation_type',
+		'fieldtype': 'Select',
+		'idx': 45,
+		'label': 'Permanent Accommodation Type',
+		'options': '\nRented\nOwned',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'permanent_address',
+		'fieldtype': 'Small Text',
+		'idx': 46,
+		'label': 'Permanent Address',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'current_accommodation_type',
+		'fieldtype': 'Select',
+		'idx': 47,
+		'label': 'Current Accommodation Type',
+		'options': '\nRented\nOwned',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'current_address',
+		'fieldtype': 'Small Text',
+		'idx': 48,
+		'label': 'Current Address',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'idx': 49,
+		'label': 'Personal Details',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break',
+		'idx': 50,
+		'permlevel': 0,
+		'width': '50%'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'pan_number',
+		'fieldtype': 'Data',
+		'idx': 51,
+		'label': 'PAN Number',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'passport_number',
+		'fieldtype': 'Data',
+		'idx': 52,
+		'label': 'Passport Number',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldtype': 'Button',
+		'hidden': 1,
+		'idx': 53,
+		'label': 'Employee Profile',
+		'oldfieldtype': 'Button',
+		'permlevel': 0,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'date_of_issue',
+		'fieldtype': 'Date',
+		'idx': 54,
+		'label': 'Date of Issue',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'valid_upto',
+		'fieldtype': 'Date',
+		'idx': 55,
+		'label': 'Valid Upto',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldtype': 'Button',
+		'hidden': 1,
+		'idx': 56,
+		'label': 'Salary Structure',
+		'oldfieldtype': 'Button',
+		'permlevel': 0,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'place_of_issue',
+		'fieldtype': 'Data',
+		'idx': 57,
+		'label': 'Place of Issue',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'marital_status',
+		'fieldtype': 'Select',
+		'idx': 58,
+		'label': 'Marital Status',
+		'options': '\nSingle\nMarried\nDivorced\nWidowed',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'blood_group',
+		'fieldtype': 'Select',
+		'idx': 59,
+		'label': 'Blood Group',
+		'options': '\nA+\nA-\nB+\nB-\nAB+\nAB-\nO+\nO-',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break',
+		'idx': 60,
+		'permlevel': 0,
+		'width': '50%'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'Here you can maintain family details like name and occupation of parent, spouse and children',
+		'doctype': 'DocField',
+		'fieldname': 'family_background',
+		'fieldtype': 'Small Text',
+		'idx': 61,
+		'label': 'Family Background',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'Here you can maintain height, weight, allergies, medical concerns etc',
+		'doctype': 'DocField',
+		'fieldname': 'health_details',
+		'fieldtype': 'Small Text',
+		'idx': 62,
+		'label': 'Health Details',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'idx': 63,
+		'label': 'Educational Qualification',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'educational_qualification_details',
+		'fieldtype': 'Table',
+		'idx': 64,
+		'label': 'Educational Qualification Details',
+		'options': 'Educational Qualifications Detail',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'idx': 65,
+		'label': 'Career History',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'idx': 66,
+		'label': 'Previous Work Experience',
+		'options': 'Simple',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'previous_experience_details',
+		'fieldtype': 'Table',
+		'idx': 67,
+		'label': 'Previous Experience Details',
+		'options': 'Previous Experience Detail',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'idx': 68,
+		'label': 'History In Company',
+		'options': 'Simple',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'experience_in_company_details',
+		'fieldtype': 'Table',
+		'idx': 69,
+		'label': 'Experience In Company Details',
+		'options': 'Experience In Company Detail',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'idx': 70,
+		'label': 'Exit',
+		'oldfieldtype': 'Section Break',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break',
+		'idx': 71,
+		'permlevel': 0,
+		'width': '50%'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'resignation_letter_date',
+		'fieldtype': 'Date',
+		'idx': 72,
+		'label': 'Resignation Letter Date',
+		'oldfieldname': 'resignation_letter_date',
+		'oldfieldtype': 'Date',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'relieving_date',
+		'fieldtype': 'Date',
+		'idx': 73,
+		'in_filter': 1,
+		'label': 'Relieving Date',
+		'oldfieldname': 'relieving_date',
+		'oldfieldtype': 'Date',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'reason_for_leaving',
+		'fieldtype': 'Data',
+		'idx': 74,
+		'label': 'Reason for Leaving',
+		'oldfieldname': 'reason_for_leaving',
+		'oldfieldtype': 'Data',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'leave_encashed',
+		'fieldtype': 'Select',
+		'idx': 75,
+		'label': 'Leave Encashed?',
+		'oldfieldname': 'leave_encashed',
+		'oldfieldtype': 'Select',
+		'options': '\nYes\nNo',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'encashment_date',
+		'fieldtype': 'Date',
+		'idx': 76,
+		'label': 'Encashment Date',
+		'oldfieldname': 'encashment_date',
+		'oldfieldtype': 'Date',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break',
+		'idx': 77,
+		'label': 'Exit Interview Details',
+		'oldfieldname': 'col_brk6',
+		'oldfieldtype': 'Column Break',
+		'permlevel': 0,
+		'width': '50%'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'held_on',
+		'fieldtype': 'Date',
+		'idx': 78,
+		'label': 'Held On',
+		'oldfieldname': 'held_on',
+		'oldfieldtype': 'Date',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'reason_for_resignation',
+		'fieldtype': 'Select',
+		'idx': 79,
+		'label': 'Reason for Resignation',
+		'oldfieldname': 'reason_for_resignation',
+		'oldfieldtype': 'Select',
+		'options': '\nBetter Prospects\nHealth Concerns',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'new_workplace',
+		'fieldtype': 'Data',
+		'idx': 80,
+		'label': 'New Workplace',
+		'oldfieldname': 'new_workplace',
+		'oldfieldtype': 'Data',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'feedback',
+		'fieldtype': 'Small Text',
+		'idx': 81,
+		'label': 'Feedback',
+		'oldfieldname': 'feedback',
+		'oldfieldtype': 'Text',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'file_list',
+		'fieldtype': 'Text',
+		'hidden': 1,
+		'idx': 82,
+		'label': 'File List',
+		'permlevel': 0,
+		'print_hide': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'trash_reason',
+		'fieldtype': 'Small Text',
+		'idx': 83,
+		'label': 'Trash Reason',
+		'oldfieldname': 'trash_reason',
+		'oldfieldtype': 'Small Text',
+		'permlevel': 1
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/employee_profile/__init__.py b/hr/doctype/employee_profile/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/employee_profile/__init__.py
diff --git a/hr/doctype/employee_profile/employee_profile.js b/hr/doctype/employee_profile/employee_profile.js
new file mode 100644
index 0000000..aedfc34
--- /dev/null
+++ b/hr/doctype/employee_profile/employee_profile.js
@@ -0,0 +1,44 @@
+cur_frm.cscript.onload = function(doc, cdt, cdn){
+  $c('runserverobj', args={'method':'cal_tot_exp','docs':compress_doclist (make_doclist (doc.doctype,doc.name))},
+function(r, rt) { refresh_many(['year','months']); });
+}
+
+//===========================================================
+
+cur_frm.cscript.employee = function(doc, cdt, cdn){
+  $c('runserverobj', args={'method':'get_doj','docs':compress_doclist (make_doclist (doc.doctype,doc.name))},
+function(r, rt) { refresh_many(['employee_name','date_of_joining']); });
+}
+
+//===========================================================
+
+cur_frm.cscript.country1 = function(doc, cdt, cdn) {
+  var mydoc=doc;
+  $c('runserverobj', args={'method':'check_state','arg':doc.country1, 'docs':compress_doclist([doc])},
+    function(r,rt){
+
+      if(r.message) {
+        var doc = locals[mydoc.doctype][mydoc.name];
+        doc.state1 = '';
+        get_field(doc.doctype, 'state1' , doc.name).options = r.message;
+        refresh_field('state1');
+      }
+    }  
+  );
+}
+
+//===========================================================
+cur_frm.cscript.country2 = function(doc, cdt, cdn) {
+  var mydoc=doc;
+  $c('runserverobj', args={'method':'check_state', 'arg':doc.country2,'docs':compress_doclist([doc])},
+    function(r,rt){
+
+      if(r.message) {
+        var doc = locals[mydoc.doctype][mydoc.name];
+        doc.state2 = '';
+        get_field(doc.doctype, 'state2' , doc.name).options = r.message;
+        refresh_field('state2');
+      }
+    }  
+  );
+}
\ No newline at end of file
diff --git a/hr/doctype/employee_profile/employee_profile.py b/hr/doctype/employee_profile/employee_profile.py
new file mode 100644
index 0000000..130395d
--- /dev/null
+++ b/hr/doctype/employee_profile/employee_profile.py
@@ -0,0 +1,73 @@
+# Please edit this list and import only required elements
+import webnotes
+
+from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, generate_hash, getTraceback, get_defaults, get_first_day, get_last_day, getdate, has_common, month_name, now, nowdate, replace_newlines, sendmail, set_default, str_esc_quote, user_format, validate_email_add
+from webnotes.model import db_exists
+from webnotes.model.doc import Document, addchild, removechild, getchildren, make_autoname, SuperDocType
+from webnotes.model.doclist import getlist, copy_doclist
+from webnotes.model.code import get_obj, get_server_obj, run_server_obj, updatedb, check_syntax
+from webnotes import session, form, is_testing, msgprint, errprint
+
+set = webnotes.conn.set
+sql = webnotes.conn.sql
+get_value = webnotes.conn.get_value
+in_transaction = webnotes.conn.in_transaction
+convert_to_lists = webnotes.conn.convert_to_lists
+	
+# -----------------------------------------------------------------------------------------
+
+
+class DocType:
+  #init function
+  def __init__(self,doc,doclist=[]):
+    self.doc = doc
+    self.doclist = doclist
+
+
+  #=============================================================
+  def autoname(self):
+    self.doc.name = make_autoname('EMP-'+self.doc.employee)
+
+  #=============================================================
+  def validate(self):
+    if self.doc.personal_email:
+      if not validate_email_add(self.doc.personal_email):
+        msgprint("Please enter valid Personal Email")
+        raise Exception
+    ret = sql("select name from `tabEmployee Profile` where employee = '%s' and name !='%s'"%(self.doc.employee,self.doc.name))
+    if ret:
+      msgprint("Employee Profile is already created for Employee : '%s'"%self.doc.employee)
+      raise Exception
+
+  #=============================================================
+  def get_doj(self):
+    ret_doj = sql("select employee_name,date_of_joining from `tabEmployee` where name = '%s'"%self.doc.employee)
+    if ret_doj:
+      set(self.doc, 'employee_name', cstr(ret_doj[0][0]))
+      set(self.doc,'date_of_joining', ret_doj[0][1].strftime('%Y-%m-%d'))
+
+  #=============================================================
+  #calculate total experience in company - total year and month
+  def cal_tot_exp(self):
+    if not self.doc.date_of_joining:
+      self.get_doj()
+    
+      import datetime
+      today  = nowdate()
+    
+      diff = (getdate(today) - getdate(self.doc.date_of_joining)).days
+      diff1 = cint(diff)/365
+      a = cint(diff)%365
+      diff2 = cint(a)/30
+      if(cint(diff1)<0):
+        set(self.doc,'year', 0)
+      else:
+        set(self.doc,'year', cint(diff1))
+      if(cint(diff1)<0):
+        set(self.doc,'months', 0)
+      else:
+        set(self.doc,'months', cint(diff2)) 
+
+  #=============================================================
+  def check_state(self,country):
+    return "\n" + "\n".join([i[0] for i in sql("select state_name from `tabState` where `tabState`.country='%s' " %country)])
diff --git a/hr/doctype/employee_profile/employee_profile.txt b/hr/doctype/employee_profile/employee_profile.txt
new file mode 100644
index 0000000..2417846
--- /dev/null
+++ b/hr/doctype/employee_profile/employee_profile.txt
@@ -0,0 +1 @@
+[{'section_style': 'Tray', 'is_transaction_doc': None, 'creation': '2010-04-01 14:14:43', 'search_fields': None, 'module': 'Payroll', 'doctype': 'DocType', 'change_log': None, 'print_outline': '', 'owner': 'Administrator', 'in_dialog': None, 'in_create': None, 'read_only': None, 'allow_email': None, 'dt_template': None, 'hide_heading': None, 'issingle': None, 'allow_rename': None, 'smallicon': None, 'allow_attach': None, 'show_in_menu': 0, 'max_attachments': None, 'version': 134, 'menu_index': None, 'docstatus': 0, 'allow_copy': None, 'istable': None, 'description': None, 'parent': None, 'server_code': None, 'allow_trash': 1, 'allow_print': None, 'autoname': '', 'client_script_core': None, 'client_string': None, 'use_template': None, 'modified_by': 'harshada@webnotestech.com', 'document_type': None, 'name': 'Employee Profile', 'idx': None, 'hide_toolbar': None, 'colour': 'Light Blue:DEF', 'client_script': None, 'modified': '2010-09-20 14:06:57', 'server_code_error': ' ', 'name_case': '', 'parenttype': None, 'read_only_onload': None, 'server_code_core': None, 'server_code_compiled': None, 'parent_node': None, 'parentfield': None}, {'cancel': 1, 'amend': None, 'execute': None, 'modified_by': 'harshada@webnotestech.com', 'name': 'PERM00728', 'parent': 'Employee Profile', 'read': 1, 'create': 1, 'creation': '2010-04-01 14:14:43', 'modified': '2010-05-26 12:27:30', 'submit': None, 'doctype': 'DocPerm', 'write': 1, 'idx': 1, 'parenttype': 'DocType', 'role': 'Administrator', 'owner': 'Administrator', 'docstatus': 0, 'permlevel': 0, 'match': None, 'parentfield': 'permissions'}, {'cancel': None, 'amend': None, 'execute': None, 'modified_by': 'harshada@webnotestech.com', 'name': 'PERM00729', 'parent': 'Employee Profile', 'read': 1, 'create': None, 'creation': '2010-04-01 14:14:43', 'modified': '2010-05-26 12:27:30', 'submit': None, 'doctype': 'DocPerm', 'write': None, 'idx': 2, 'parenttype': 'DocType', 'role': 'Administrator', 'owner': 'Administrator', 'docstatus': 0, 'permlevel': 1, 'match': None, 'parentfield': 'permissions'}, {'cancel': 1, 'amend': None, 'execute': None, 'modified_by': 'harshada@webnotestech.com', 'name': 'PERM00809', 'parent': 'Employee Profile', 'read': 1, 'create': 1, 'creation': '2010-04-19 09:57:38', 'modified': '2010-05-26 12:27:30', 'submit': None, 'doctype': 'DocPerm', 'write': 1, 'idx': 3, 'parenttype': 'DocType', 'role': 'HR Manager', 'owner': 'harshada@webnotestech.com', 'docstatus': 0, 'permlevel': 0, 'match': None, 'parentfield': 'permissions'}, {'cancel': None, 'amend': None, 'execute': None, 'modified_by': 'harshada@webnotestech.com', 'name': 'PERM00810', 'parent': 'Employee Profile', 'read': 1, 'create': None, 'creation': '2010-04-19 09:57:38', 'modified': '2010-05-26 12:27:30', 'submit': None, 'doctype': 'DocPerm', 'write': None, 'idx': 4, 'parenttype': 'DocType', 'role': 'HR Manager', 'owner': 'harshada@webnotestech.com', 'docstatus': 0, 'permlevel': 1, 'match': None, 'parentfield': 'permissions'}, {'cancel': 1, 'amend': None, 'execute': None, 'modified_by': 'harshada@webnotestech.com', 'name': 'PERM00811', 'parent': 'Employee Profile', 'read': 1, 'create': 1, 'creation': '2010-04-19 09:57:38', 'modified': '2010-05-26 12:27:30', 'submit': None, 'doctype': 'DocPerm', 'write': 1, 'idx': 5, 'parenttype': 'DocType', 'role': 'HR User', 'owner': 'harshada@webnotestech.com', 'docstatus': 0, 'permlevel': 0, 'match': None, 'parentfield': 'permissions'}, {'cancel': None, 'amend': None, 'execute': None, 'modified_by': 'harshada@webnotestech.com', 'name': 'PERM00812', 'parent': 'Employee Profile', 'read': 1, 'create': None, 'creation': '2010-04-19 09:57:38', 'modified': '2010-05-26 12:27:30', 'submit': None, 'doctype': 'DocPerm', 'write': None, 'idx': 6, 'parenttype': 'DocType', 'role': 'HR User', 'owner': 'harshada@webnotestech.com', 'docstatus': 0, 'permlevel': 1, 'match': None, 'parentfield': 'permissions'}, {'no_copy': None, 'oldfieldtype': 'Small Text', 'creation': '2010-04-20 14:06:44', 'doctype': 'DocField', 'oldfieldname': 'trash_reason', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Trash Reason', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 1, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04843', 'idx': 1, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'trash_reason', 'fieldtype': 'Small Text', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Section Break', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': None, 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Contact', 'width': None, 'trigger': '', 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04302', 'idx': 2, 'default': None, 'colour': 'White:FFF', 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': None, 'fieldtype': 'Section Break', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Column Break', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': '', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Personal Contact Details', 'width': '50%', 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04303', 'idx': 3, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': '', 'fieldtype': 'Column Break', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Link', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': 'employee', 'owner': 'Administrator', 'reqd': 1, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Employee', 'width': None, 'trigger': 'Client', 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04304', 'idx': 4, 'default': None, 'colour': 'White:FFF', 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'employee', 'fieldtype': 'Link', 'options': 'Employee', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Data', 'creation': '2010-05-25 09:59:10', 'doctype': 'DocField', 'oldfieldname': 'employee_name', 'owner': 'harshada@webnotestech.com', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Employee Name', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 1, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL05037', 'idx': 5, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'employee_name', 'fieldtype': 'Data', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Date', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': 'date_of_joining', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Date of Joining', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 1, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04305', 'idx': 6, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'date_of_joining', 'fieldtype': 'Date', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Data', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': 'cell_number', 'owner': 'Administrator', 'reqd': 0, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Cell Number', 'width': None, 'trigger': '', 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04306', 'idx': 7, 'default': None, 'colour': 'White:FFF', 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'cell_number', 'fieldtype': 'Data', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Data', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': 'personal_email', 'owner': 'Administrator', 'reqd': 0, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Personal Email', 'width': None, 'trigger': '', 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04307', 'idx': 8, 'default': None, 'colour': 'White:FFF', 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'personal_email', 'fieldtype': 'Data', 'options': '', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Column Break', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': None, 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Emergency Contact Details', 'width': '50%', 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04308', 'idx': 9, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': None, 'fieldtype': 'Column Break', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Data', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': 'person_to_be_contacted', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Person to be contacted', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04309', 'idx': 10, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'person_to_be_contacted', 'fieldtype': 'Data', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Data', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': 'relation', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Relation', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04310', 'idx': 11, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'relation', 'fieldtype': 'Data', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Data', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': 'emergency_phone_number', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Emergency Phone Number', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04311', 'idx': 12, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'emergency_phone_number', 'fieldtype': 'Data', 'options': 'Phone', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Section Break', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': None, 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Address', 'width': None, 'trigger': '', 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04312', 'idx': 13, 'default': None, 'colour': 'White:FFF', 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': None, 'fieldtype': 'Section Break', 'options': 'Simple', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Column Break', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': None, 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Permanent Address', 'width': '50%', 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04313', 'idx': 14, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': None, 'fieldtype': 'Column Break', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Select', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': 'permanent_accommodation_type', 'owner': 'Administrator', 'reqd': 1, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Permanent Accommodation Type', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04314', 'idx': 15, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'permanent_accommodation_type', 'fieldtype': 'Select', 'options': '\nRented\nOwned', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Data', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': 'permanent_address_line_1', 'owner': 'Administrator', 'reqd': 1, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Permanent Address Line 1', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04315', 'idx': 16, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'permanent_address_line_1', 'fieldtype': 'Data', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Data', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': 'permanent_address_line_2', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Permanent Address Line 2', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04316', 'idx': 17, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'permanent_address_line_2', 'fieldtype': 'Data', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Link', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': 'city1', 'owner': 'Administrator', 'reqd': 0, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'City / Town(P)', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04317', 'idx': 18, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'city1', 'fieldtype': 'Link', 'options': 'City', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Select', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': 'country1', 'owner': 'Administrator', 'reqd': 1, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Country(P)', 'width': None, 'trigger': '', 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04319', 'idx': 19, 'default': None, 'colour': 'White:FFF', 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'country1', 'fieldtype': 'Select', 'options': 'link:Country', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Select', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': 'state1', 'owner': 'Administrator', 'reqd': 0, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'State(P)', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04318', 'idx': 20, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'state1', 'fieldtype': 'Select', 'options': 'link:State', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Data', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': 'phn_no1', 'owner': 'Administrator', 'reqd': 1, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Phone No(P)', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04320', 'idx': 21, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'phn_no1', 'fieldtype': 'Data', 'options': 'Phone', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Data', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': 'pin_code1', 'owner': 'Administrator', 'reqd': 1, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Pin Code (P)', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04321', 'idx': 22, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'pin_code1', 'fieldtype': 'Data', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Column Break', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': '', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Current Address', 'width': '50%', 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04322', 'idx': 23, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': '', 'fieldtype': 'Column Break', 'options': '', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Select', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': 'present_accommodation_type', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Current Accommodation Type', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04323', 'idx': 24, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'present_accommodation_type', 'fieldtype': 'Select', 'options': '\nRented\nOwned', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Data', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': 'present_address_line_1', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Current Address Line 1', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04324', 'idx': 25, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'present_address_line_1', 'fieldtype': 'Data', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Data', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': 'present_address_line_2', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Current Address Line 2', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04325', 'idx': 26, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'present_address_line_2', 'fieldtype': 'Data', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Link', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': 'city2', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'City / Town(C)', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04326', 'idx': 27, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'city2', 'fieldtype': 'Link', 'options': 'City', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Select', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': 'country2', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Country(C)', 'width': None, 'trigger': '', 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04328', 'idx': 28, 'default': None, 'colour': 'White:FFF', 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'country2', 'fieldtype': 'Select', 'options': 'link:Country', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Select', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': 'state2', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'State(C)', 'width': None, 'trigger': '', 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04327', 'idx': 29, 'default': None, 'colour': 'White:FFF', 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'state2', 'fieldtype': 'Select', 'options': 'link:State', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Data', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': 'phn_no2', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Phone No(C)', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04329', 'idx': 30, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'phn_no2', 'fieldtype': 'Data', 'options': 'Phone', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Data', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': 'pin_code2', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Pin Code (C)', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04330', 'idx': 31, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'pin_code2', 'fieldtype': 'Data', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Section Break', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': None, 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Family ', 'width': None, 'trigger': '', 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04331', 'idx': 32, 'default': None, 'colour': 'White:FFF', 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': None, 'fieldtype': 'Section Break', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Data', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': 'fathers_name', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Father Name', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04332', 'idx': 33, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'fathers_name', 'fieldtype': 'Data', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Data', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': 'fathers_occupation', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Father Occupation', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04333', 'idx': 34, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'fathers_occupation', 'fieldtype': 'Data', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Data', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': 'mothers_name', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Mother Name', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04334', 'idx': 35, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'mothers_name', 'fieldtype': 'Data', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Data', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': 'mothers_occupation', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Mother Occupation', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04335', 'idx': 36, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'mothers_occupation', 'fieldtype': 'Data', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Select', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': 'marital_status', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Marital Status', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04336', 'idx': 37, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'marital_status', 'fieldtype': 'Select', 'options': '\nSingle\nMarried\nDivorced\nWidowed', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Data', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': 'spouses_name', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Spouse Name', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04337', 'idx': 38, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'spouses_name', 'fieldtype': 'Data', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Data', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': 'spouses_occupation', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Spouse Occupation', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04338', 'idx': 39, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'spouses_occupation', 'fieldtype': 'Data', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Section Break', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': None, 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Health', 'width': None, 'trigger': '', 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04339', 'idx': 40, 'default': None, 'colour': 'White:FFF', 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': None, 'fieldtype': 'Section Break', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Data', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': 'height_cms', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Height(cms)', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04340', 'idx': 41, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'height_cms', 'fieldtype': 'Data', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Select', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': 'blood_group', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Blood Group', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04341', 'idx': 42, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'blood_group', 'fieldtype': 'Select', 'options': '\nA+\nA-\nB+\nB-\nAB+\nAB-\nO+\nO-', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Data', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': 'weight_kgs', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Weight(kgs)', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04342', 'idx': 43, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'weight_kgs', 'fieldtype': 'Data', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Select', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': 'allergies', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Allergies', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04343', 'idx': 44, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'allergies', 'fieldtype': 'Select', 'options': '\nDiabetes\nBP\nHeart Ailments\nEpilepsy\nOthers', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Data', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': 'other_medical_concerns', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Other Medical Concerns', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04344', 'idx': 45, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'other_medical_concerns', 'fieldtype': 'Data', 'options': '', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Data', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': 'physical_handicap', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Physical Handicap(if any)', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04345', 'idx': 46, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'physical_handicap', 'fieldtype': 'Data', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Section Break', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': None, 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Qualification', 'width': None, 'trigger': '', 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04346', 'idx': 47, 'default': None, 'colour': 'White:FFF', 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': None, 'fieldtype': 'Section Break', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Table', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': 'educational_qualification_details', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Educational Qualification Details', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04347', 'idx': 48, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'educational_qualification_details', 'fieldtype': 'Table', 'options': 'Educational Qualifications Detail', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Section Break', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': None, 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Training / Seminar', 'width': None, 'trigger': '', 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04348', 'idx': 49, 'default': None, 'colour': 'White:FFF', 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': None, 'fieldtype': 'Section Break', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Section Break', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': None, 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Prior to join current company', 'width': None, 'trigger': '', 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04349', 'idx': 50, 'default': None, 'colour': 'White:FFF', 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': None, 'fieldtype': 'Section Break', 'options': 'Simple', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Table', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': 'prior_training', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Prior to join current company1', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04350', 'idx': 51, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'prior_training', 'fieldtype': 'Table', 'options': 'Professional Training Details', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Section Break', 'creation': '2010-04-01 14:14:43', 'doctype': 'DocField', 'oldfieldname': None, 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'In current company', 'width': None, 'trigger': '', 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04351', 'idx': 52, 'default': None, 'colour': 'White:FFF', 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': None, 'fieldtype': 'Section Break', 'options': 'Simple', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Table', 'creation': '2010-04-01 14:14:44', 'doctype': 'DocField', 'oldfieldname': 'in_company', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'In current company1', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04352', 'idx': 53, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'in_company', 'fieldtype': 'Table', 'options': 'Professional Training Details', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Section Break', 'creation': '2010-04-01 14:14:44', 'doctype': 'DocField', 'oldfieldname': None, 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Career History', 'width': None, 'trigger': '', 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04353', 'idx': 54, 'default': None, 'colour': 'White:FFF', 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': None, 'fieldtype': 'Section Break', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'HTML', 'creation': '2010-04-01 14:14:44', 'doctype': 'DocField', 'oldfieldname': None, 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Total Prior Experience', 'width': '40%', 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04354', 'idx': 55, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': None, 'fieldtype': 'HTML', 'options': '<b>Total Prior Experience</b>', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Column Break', 'creation': '2010-04-01 14:14:44', 'doctype': 'DocField', 'oldfieldname': None, 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': '', 'width': '30%', 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04355', 'idx': 56, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': None, 'fieldtype': 'Column Break', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Int', 'creation': '2010-04-01 14:14:44', 'doctype': 'DocField', 'oldfieldname': 'year', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Year', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04356', 'idx': 57, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'year', 'fieldtype': 'Int', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Column Break', 'creation': '2010-04-01 14:14:44', 'doctype': 'DocField', 'oldfieldname': None, 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': '', 'width': '30%', 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04357', 'idx': 58, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': None, 'fieldtype': 'Column Break', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Int', 'creation': '2010-04-01 14:14:44', 'doctype': 'DocField', 'oldfieldname': 'months', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Months', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04358', 'idx': 59, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'months', 'fieldtype': 'Int', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Section Break', 'creation': '2010-04-01 14:14:44', 'doctype': 'DocField', 'oldfieldname': None, 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Previous Work Experience', 'width': None, 'trigger': '', 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04359', 'idx': 60, 'default': None, 'colour': 'White:FFF', 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': None, 'fieldtype': 'Section Break', 'options': 'Simple', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Table', 'creation': '2010-04-01 14:14:44', 'doctype': 'DocField', 'oldfieldname': 'previous_experience_details', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Previous Experience Details', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04360', 'idx': 61, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'previous_experience_details', 'fieldtype': 'Table', 'options': 'Previous Experience Detail', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Section Break', 'creation': '2010-04-01 14:14:44', 'doctype': 'DocField', 'oldfieldname': None, 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'History In Company', 'width': None, 'trigger': '', 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04361', 'idx': 62, 'default': None, 'colour': 'White:FFF', 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': None, 'fieldtype': 'Section Break', 'options': 'Simple', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Table', 'creation': '2010-04-01 14:14:44', 'doctype': 'DocField', 'oldfieldname': 'experience_in_company_details', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Experience In Company Details', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04362', 'idx': 63, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'experience_in_company_details', 'fieldtype': 'Table', 'options': 'Experience In Company Detail', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Section Break', 'creation': '2010-04-01 14:14:44', 'doctype': 'DocField', 'oldfieldname': None, 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Other Info', 'width': None, 'trigger': '', 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04363', 'idx': 64, 'default': None, 'colour': 'Light Blue:DEF', 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': None, 'fieldtype': 'Section Break', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Data', 'creation': '2010-04-01 14:14:44', 'doctype': 'DocField', 'oldfieldname': 'pan_number', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'PAN Number', 'width': None, 'trigger': '', 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04364', 'idx': 65, 'default': None, 'colour': 'White:FFF', 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'pan_number', 'fieldtype': 'Data', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Section Break', 'creation': '2010-04-01 14:14:44', 'doctype': 'DocField', 'oldfieldname': None, 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': '', 'width': None, 'trigger': '', 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04365', 'idx': 66, 'default': None, 'colour': 'White:FFF', 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': None, 'fieldtype': 'Section Break', 'options': 'Simple', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'HTML', 'creation': '2010-04-01 14:14:44', 'doctype': 'DocField', 'oldfieldname': None, 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Passport Info', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04366', 'idx': 67, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': None, 'fieldtype': 'HTML', 'options': '<b>Passport Info</b>', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Data', 'creation': '2010-04-01 14:14:44', 'doctype': 'DocField', 'oldfieldname': 'passport_number', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Passport Number', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04367', 'idx': 68, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'passport_number', 'fieldtype': 'Data', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Data', 'creation': '2010-04-01 14:14:44', 'doctype': 'DocField', 'oldfieldname': 'date_of_issue', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Date of Issue', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04368', 'idx': 69, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'date_of_issue', 'fieldtype': 'Data', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Data', 'creation': '2010-04-01 14:14:44', 'doctype': 'DocField', 'oldfieldname': 'valid_upto', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Valid upto', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04369', 'idx': 70, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'valid_upto', 'fieldtype': 'Data', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Data', 'creation': '2010-04-01 14:14:44', 'doctype': 'DocField', 'oldfieldname': 'place_of_issue', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Place Of Issue', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Employee Profile', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04370', 'idx': 71, 'default': None, 'colour': None, 'modified': '2010-05-26 12:27:30', 'parenttype': 'DocType', 'fieldname': 'place_of_issue', 'fieldtype': 'Data', 'options': None, 'report_hide': None, 'parentfield': 'fields'}]
\ No newline at end of file
diff --git a/hr/doctype/employment_type/__init__.py b/hr/doctype/employment_type/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/employment_type/__init__.py
diff --git a/hr/doctype/employment_type/employment_type.js b/hr/doctype/employment_type/employment_type.js
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/employment_type/employment_type.js
diff --git a/hr/doctype/employment_type/employment_type.txt b/hr/doctype/employment_type/employment_type.txt
new file mode 100644
index 0000000..67d54d1
--- /dev/null
+++ b/hr/doctype/employment_type/employment_type.txt
@@ -0,0 +1,102 @@
+# DocType, Employment Type
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-08-08 17:09:00',
+		'docstatus': 0,
+		'modified': '2010-09-20 14:06:57',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'allow_trash': 1,
+		'autoname': 'field:employee_type_name',
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'document_type': 'Master',
+		'module': 'HR',
+		'name': '__common__',
+		'section_style': 'Simple',
+		'server_code_error': ' ',
+		'show_in_menu': 0,
+		'version': 16
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Employment Type',
+		'parentfield': 'fields',
+		'parenttype': 'DocType'
+	},
+
+	# These values are common for all DocPerm
+	{
+		'cancel': 1,
+		'create': 1,
+		'doctype': 'DocPerm',
+		'name': '__common__',
+		'parent': 'Employment Type',
+		'parentfield': 'permissions',
+		'parenttype': 'DocType',
+		'permlevel': 0,
+		'read': 1,
+		'write': 1
+	},
+
+	# DocType, Employment Type
+	{
+		'doctype': 'DocType',
+		'name': 'Employment Type'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 1,
+		'role': 'System Manager'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 2,
+		'role': 'HR User'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 3,
+		'role': 'HR Manager'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'employee_type_name',
+		'fieldtype': 'Data',
+		'idx': 1,
+		'label': 'Employment Type',
+		'oldfieldname': 'employee_type_name',
+		'oldfieldtype': 'Data',
+		'permlevel': 0,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'trash_reason',
+		'fieldtype': 'Small Text',
+		'idx': 2,
+		'label': 'Trash Reason',
+		'oldfieldname': 'trash_reason',
+		'oldfieldtype': 'Small Text',
+		'permlevel': 1
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/expense_type/__init__.py b/hr/doctype/expense_type/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/expense_type/__init__.py
diff --git a/hr/doctype/expense_type/expense_type.js b/hr/doctype/expense_type/expense_type.js
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/expense_type/expense_type.js
diff --git a/hr/doctype/expense_type/expense_type.txt b/hr/doctype/expense_type/expense_type.txt
new file mode 100644
index 0000000..ddf1104
--- /dev/null
+++ b/hr/doctype/expense_type/expense_type.txt
@@ -0,0 +1,101 @@
+# DocType, Expense Type
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-09-03 16:45:08',
+		'docstatus': 0,
+		'modified': '2010-09-20 14:06:57',
+		'modified_by': 'Administrator',
+		'owner': 'harshada@webnotestech.com'
+	},
+
+	# These values are common for all DocType
+	{
+		'autoname': 'field:expense_type',
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'document_type': 'Master',
+		'module': 'HR',
+		'name': '__common__',
+		'section_style': 'Simple',
+		'server_code_error': ' ',
+		'version': 5
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Expense Type',
+		'parentfield': 'fields',
+		'parenttype': 'DocType',
+		'permlevel': 0
+	},
+
+	# These values are common for all DocPerm
+	{
+		'create': 1,
+		'doctype': 'DocPerm',
+		'name': '__common__',
+		'parent': 'Expense Type',
+		'parentfield': 'permissions',
+		'parenttype': 'DocType',
+		'permlevel': 0,
+		'read': 1,
+		'write': 1
+	},
+
+	# DocType, Expense Type
+	{
+		'doctype': 'DocType',
+		'name': 'Expense Type'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 1,
+		'role': 'System Manager'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 2,
+		'role': 'HR Manager'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 3,
+		'role': 'System Manager'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'expense_type',
+		'fieldtype': 'Data',
+		'idx': 1,
+		'in_filter': 0,
+		'label': 'Expense Type',
+		'oldfieldname': 'expense_type',
+		'oldfieldtype': 'Data',
+		'reqd': 1,
+		'search_index': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'description',
+		'fieldtype': 'Small Text',
+		'idx': 2,
+		'label': 'Description',
+		'oldfieldname': 'description',
+		'oldfieldtype': 'Small Text',
+		'width': '300px'
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/expense_voucher/__init__.py b/hr/doctype/expense_voucher/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/expense_voucher/__init__.py
diff --git a/hr/doctype/expense_voucher/expense_voucher.js b/hr/doctype/expense_voucher/expense_voucher.js
new file mode 100644
index 0000000..8cd66f9
--- /dev/null
+++ b/hr/doctype/expense_voucher/expense_voucher.js
@@ -0,0 +1,213 @@
+cur_frm.add_fetch('employee', 'company', 'company');
+
+cur_frm.cscript.onload = function(doc,cdt,cdn){
+  //cur_frm.cscript.get_tips(doc, cdt, cdn);
+  if(!doc.approval_status) set_multiple(cdt,cdn,{approval_status:'Draft'});
+  if(doc.employee) cur_frm.cscript.employee(doc,cdt,cdn);
+  
+  if (doc.__islocal) {
+    if(doc.amended_from) set_multiple(cdt,cdn,{approval_status:'Draft'});
+    var val = getchildren('Expense Voucher Detail', doc.name, 'expense_voucher_details', doc.doctype);
+    for(var i = 0; i<val.length; i++){
+      val[i].sanctioned_amount ='';
+    }
+    //doc.total_claimed_amount = '';
+    doc.total_sanctioned_amount = '';
+    refresh_many(['sanctioned_amount', 'total_sanctioned_amount']);
+  }
+}
+
+cur_frm.cscript.refresh = function(doc,cdt,cdn){
+  if((user == doc.exp_approver && doc.approval_status == 'Submitted') || doc.docstatus == 0) unhide_field('Calculate Total Amount');
+  else hide_field('Calculate Total Amount');
+  
+  if(user == doc.exp_approver && doc.approval_status == 'Submitted')  unhide_field(['Update Voucher', 'Approve', 'Reject']);
+
+  else hide_field(['Update Voucher', 'Approve', 'Reject']);
+
+  
+  if(user == doc.exp_approver && doc.approval_status == 'Submitted') set_field_permlevel('remark', 0);
+  else set_field_permlevel('remark', 1);
+}
+
+cur_frm.cscript.employee = function(doc,cdt,cdn){
+  if(doc.employee){
+    $c_obj(make_doclist(doc.doctype, doc.name),'set_approver','', function(r,rt){
+      if(r.message){
+        doc.employee_name = r.message['emp_nm'];
+        get_field(doc.doctype, 'exp_approver' , doc.name).options = r.message['app_lst'];        
+        refresh_many(['exp_approver','employee_name']);
+      }    
+    });
+  }
+}
+
+cur_frm.cscript.calculate_total = function(doc,cdt,cdn){
+  if(doc.approval_status == 'Draft'){
+    var val = getchildren('Expense Voucher Detail', doc.name, 'expense_voucher_details', doc.doctype);
+    var total_claim =0;
+    for(var i = 0; i<val.length; i++){
+      total_claim = flt(total_claim)+flt(val[i].claim_amount);
+    }
+    doc.total_claimed_amount = flt(total_claim);
+    refresh_field('total_claimed_amount');
+    
+    $c_obj(make_doclist(doc.doctype, doc.name),'validate_approver','', function(r,rt){
+      if(r.message){
+        if(r.message['valid_approver'] == 'No'){
+          doc.exp_approver ='';
+        }
+        get_field(doc.doctype, 'exp_approver' , doc.name).options = '';
+        get_field(doc.doctype, 'exp_approver' , doc.name).options = r.message['app_lst'];
+        refresh_field('exp_approver');
+      }
+    });
+  }
+  else if(doc.approval_status == 'Submitted'){
+    var val = getchildren('Expense Voucher Detail', doc.name, 'expense_voucher_details', doc.doctype);
+    var total_sanctioned = 0;
+    for(var i = 0; i<val.length; i++){
+      total_sanctioned = flt(total_sanctioned)+flt(val[i].sanctioned_amount);
+    }
+    doc.total_sanctioned_amount = flt(total_sanctioned);
+    refresh_field('total_sanctioned_amount');
+  }
+}
+
+cur_frm.cscript['Calculate Total Amount'] = function(doc,cdt,cdn){
+  cur_frm.cscript.calculate_total(doc,cdt,cdn);
+}
+cur_frm.cscript.claim_amount = function(doc,cdt,cdn){
+  cur_frm.cscript.calculate_total(doc,cdt,cdn);
+}
+cur_frm.cscript.sanctioned_amount = function(doc,cdt,cdn){
+  cur_frm.cscript.calculate_total(doc,cdt,cdn);
+}
+
+cur_frm.cscript['Approve'] = function(doc,cdt,cdn){
+
+  if(user == doc.exp_approver){
+    var approve_voucher_dialog;
+    
+    set_approve_voucher_dialog = function() {
+      approve_voucher_dialog = new Dialog(400, 200, 'Approve Voucher');
+      approve_voucher_dialog.make_body([
+        ['HTML', 'Message', '<div class = "comment">You wont be able to do any changes after approving this expense voucher. Are you sure, you want to approve it ?</div>'],
+        ['HTML', 'Response', '<div class = "comment" id="approve_voucher_dialog_response"></div>'],
+        ['HTML', 'Approve Voucher', '<div></div>']
+      ]);
+      
+      var approve_voucher_btn1 = $a($i(approve_voucher_dialog.widgets['Approve Voucher']), 'button', 'button');
+      approve_voucher_btn1.innerHTML = 'Yes';
+      approve_voucher_btn1.onclick = function(){ approve_voucher_dialog.add(); }
+      
+      var approve_voucher_btn2 = $a($i(approve_voucher_dialog.widgets['Approve Voucher']), 'button', 'button');
+      approve_voucher_btn2.innerHTML = 'No';
+      $y(approve_voucher_btn2,{marginLeft:'4px'});
+      approve_voucher_btn2.onclick = function(){ approve_voucher_dialog.hide();}
+      
+      approve_voucher_dialog.onshow = function() {
+        $i('approve_voucher_dialog_response').innerHTML = '';
+      }
+      
+      approve_voucher_dialog.add = function() {
+        // sending...
+        $i('approve_voucher_dialog_response').innerHTML = 'Processing...';
+        
+        $c_obj(make_doclist(this.doc.doctype, this.doc.name),'approve_voucher','', function(r,rt){
+          if(r.message == 'Approved'){
+            $i('approve_voucher_dialog_response').innerHTML = 'Approved';
+            refresh_field('approval_status');
+            hide_field(['Update Voucher', 'Approve', 'Reject', 'Calculate Total Amount']);
+            approve_voucher_dialog.hide();
+          }
+          else if(r.message == 'Incomplete'){
+            $i('approve_voucher_dialog_response').innerHTML = 'Incomplete Voucher';
+          }
+          else if(r.message == 'No Amount'){
+            $i('approve_voucher_dialog_response').innerHTML = 'Calculate total amount';
+          }
+        });
+      }
+    }  
+    
+    if(!approve_voucher_dialog){
+      set_approve_voucher_dialog();
+    }  
+    approve_voucher_dialog.doc = doc;
+    approve_voucher_dialog.cdt = cdt;
+    approve_voucher_dialog.cdn = cdn;
+    approve_voucher_dialog.show();
+    refresh_field('expense_voucher_details');
+    doc.__unsaved = 0;
+    cur_frm.refresh_header();
+  }else{
+    msgprint("Expense Voucher can be approved by Approver only");
+  }
+}
+
+cur_frm.cscript['Reject'] = function(doc,cdt,cdn){
+  if(user == doc.exp_approver){
+    var reject_voucher_dialog;
+    
+    set_reject_voucher_dialog = function() {
+      reject_voucher_dialog = new Dialog(400, 200, 'Reject Voucher');
+      reject_voucher_dialog.make_body([
+        ['HTML', 'Message', '<div class = "comment">You wont be able to do any changes after rejecting this expense voucher. Are you sure, you want to reject it ?</div>'],
+        ['HTML', 'Response', '<div class = "comment" id="reject_voucher_dialog_response"></div>'],
+        ['HTML', 'Reject Voucher', '<div></div>']
+      ]);
+      
+      var reject_voucher_btn1 = $a($i(reject_voucher_dialog.widgets['Reject Voucher']), 'button', 'button');
+      reject_voucher_btn1.innerHTML = 'Yes';
+      reject_voucher_btn1.onclick = function(){ reject_voucher_dialog.add(); }
+      
+      var reject_voucher_btn2 = $a($i(reject_voucher_dialog.widgets['Reject Voucher']), 'button', 'button');
+      reject_voucher_btn2.innerHTML = 'No';
+      $y(reject_voucher_btn2,{marginLeft:'4px'});
+      reject_voucher_btn2.onclick = function(){ reject_voucher_dialog.hide();}
+      
+      reject_voucher_dialog.onshow = function() {
+        $i('reject_voucher_dialog_response').innerHTML = '';
+      }
+      
+      reject_voucher_dialog.add = function() {
+        // sending...
+        $i('reject_voucher_dialog_response').innerHTML = 'Processing...';
+        
+        $c_obj(make_doclist(this.doc.doctype, this.doc.name),'reject_voucher','', function(r,rt){
+          if(r.message == 'Rejected'){
+            $i('reject_voucher_dialog_response').innerHTML = 'Rejected';
+            refresh_field('approval_status');
+            hide_field(['Update Voucher', 'Approve', 'Reject', 'Calculate Total Amount']);
+            reject_voucher_dialog.hide();
+          }
+        });
+      }
+    }  
+    
+    if(!reject_voucher_dialog){
+      set_reject_voucher_dialog();
+    }  
+    reject_voucher_dialog.doc = doc;
+    reject_voucher_dialog.cdt = cdt;
+    reject_voucher_dialog.cdn = cdn;
+    reject_voucher_dialog.show();
+    refresh_field('expense_voucher_details');
+    doc.__unsaved = 0;
+    cur_frm.refresh_header();
+  }else{
+    msgprint("Expense Voucher can be rejected by Approver only");
+  }
+}
+
+//update follow up
+//=================================================================================
+cur_frm.cscript['Update Voucher'] = function(doc){
+
+  $c_obj(make_doclist(doc.doctype, doc.name),'update_voucher','',function(r, rt){
+    refresh_field('expense_voucher_details');
+    doc.__unsaved = 0;
+    cur_frm.refresh_header();
+  });
+}
diff --git a/hr/doctype/expense_voucher/expense_voucher.py b/hr/doctype/expense_voucher/expense_voucher.py
new file mode 100644
index 0000000..01db068
--- /dev/null
+++ b/hr/doctype/expense_voucher/expense_voucher.py
@@ -0,0 +1,143 @@
+# Please edit this list and import only required elements
+import webnotes
+
+from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, generate_hash, getTraceback, get_defaults, get_first_day, get_last_day, getdate, has_common, month_name, now, nowdate, replace_newlines, sendmail, set_default, str_esc_quote, user_format, validate_email_add
+from webnotes.model import db_exists
+from webnotes.model.doc import Document, addchild, removechild, getchildren, make_autoname, SuperDocType
+from webnotes.model.doclist import getlist, copy_doclist
+from webnotes.model.code import get_obj, get_server_obj, run_server_obj, updatedb, check_syntax
+from webnotes import session, form, is_testing, msgprint, errprint
+
+set = webnotes.conn.set
+sql = webnotes.conn.sql
+get_value = webnotes.conn.get_value
+in_transaction = webnotes.conn.in_transaction
+convert_to_lists = webnotes.conn.convert_to_lists
+	
+# -----------------------------------------------------------------------------------------
+
+
+class DocType:
+  def __init__(self, doc, doclist=[]):
+    self.doc = doc
+    self.doclist = doclist
+
+  def get_employee_name(self):
+    emp_dtl = sql("select employee_name,company_email from `tabEmployee` where name=%s", self.doc.employee)
+    emp_nm = emp_dtl and emp_dtl[0][0] or ''
+    self.doc.employee_name = emp_nm
+    self.doc.email_id = emp_dtl and emp_dtl[0][1] or ''
+
+    return cstr(emp_nm)  
+  
+  def get_approver_lst(self):
+    approver_lst =[]
+    approver_lst1 = get_obj('Authorization Control').get_approver_name(self.doc.doctype,0,self)
+    if approver_lst1:
+      approver_lst=approver_lst1
+    else:
+      approver_lst = [x[0] for x in sql("select distinct name from `tabProfile` where enabled=1 and name!='Administrator' and name!='Guest' and docstatus!=2")]
+    return approver_lst
+
+  def set_approver(self):
+    ret={}
+    approver_lst =[]
+    emp_nm = self.get_employee_name()
+    approver_lst = self.get_approver_lst()    
+    ret = {'app_lst':"\n" + "\n".join(approver_lst), 'emp_nm':cstr(emp_nm)}
+    return ret
+
+  def update_voucher(self):
+    sql("delete from `tabExpense Voucher Detail` where parent = '%s'"%self.doc.name)
+    for d in getlist(self.doclist, 'expense_voucher_details'):
+      if not d.expense_type or not d.claim_amount:
+        msgprint("Please remove the extra blank row added")
+        raise Exception
+      d.save(1)
+    if self.doc.total_sanctioned_amount:
+      set(self.doc,'total_sanctioned_amount',self.doc.total_sanctioned_amount)
+    if self.doc.remark:
+      set(self.doc, 'remark', self.doc.remark)
+  
+  def approve_voucher(self):
+    for d in getlist(self.doclist, 'expense_voucher_details'):
+      if not d.sanctioned_amount:
+        msgprint("Please add 'Sanctioned Amount' for all expenses")
+        return cstr('Incomplete')
+    
+    if not self.doc.total_sanctioned_amount:
+      msgprint("Please calculate total sanctioned amount using button 'Calculate Total Amount'")
+      return cstr('No Amount')
+    self.update_voucher()
+    
+    set(self.doc, 'approval_status', 'Approved')    
+    # on approval notification
+    get_obj('Notification Control').notify_contact('Expense Voucher Approved', self.doc.doctype, self.doc.name, self.doc.email_id, self.doc.employee_name)
+
+    return cstr('Approved')
+  
+  def reject_voucher(self):
+    
+    if self.doc.remark:
+      set(self.doc, 'remark', self.doc.remark)   
+    set(self.doc, 'approval_status', 'Rejected')    
+
+    # on approval notification
+    get_obj('Notification Control').notify_contact('Expense Voucher Rejected', self.doc.doctype, self.doc.name, self.doc.email_id, self.doc.employee_name)
+
+    return cstr('Rejected')
+  
+  def validate_curr_exp(self):
+    for d in getlist(self.doclist, 'expense_voucher_details'):
+      if flt(d.sanctioned_amount) > 0:
+        if self.doc.approval_status == 'Draft':
+          msgprint("Sanctioned amount can be added by Approver person only for submitted Expense Voucher")
+          raise Exception
+        elif self.doc.approval_status == 'Submitted' and session['user'] != self.doc.exp_approver:
+          msgprint("Sanctioned amount can be added only by expense voucher Approver")
+          raise Exception
+  
+  def validate_fiscal_year(self):
+    fy=sql("select year_start_date from `tabFiscal Year` where name='%s'"%self.doc.fiscal_year)
+    ysd=fy and fy[0][0] or ""
+    yed=add_days(str(ysd),365)
+    if str(self.doc.posting_date) < str(ysd) or str(self.doc.posting_date) > str(yed):
+      msgprint("Posting Date is not within the Fiscal Year selected")
+      raise Exception
+    
+  def validate(self):
+    self.validate_curr_exp()
+    self.validate_fiscal_year()
+  
+  def on_update(self):
+    set(self.doc, 'approval_status', 'Draft')
+  
+  def validate_exp_details(self):
+    if not getlist(self.doclist, 'expense_voucher_details'):
+      msgprint("Please add expense voucher details")
+      raise Exception
+    
+    if not self.doc.total_claimed_amount:
+      msgprint("Please calculate Total Claimed Amount")
+      raise Exception
+    
+    if not self.doc.exp_approver:
+      msgprint("Please select Expense Voucher approver")
+      raise Exception
+  
+  def validate_approver(self):
+    app_lst = self.get_approver_lst()
+    if self.doc.exp_approver and self.doc.exp_approver not in app_lst:
+      msgprint("Approver "+self.doc.exp_approver+" is not authorized to approve this expense voucher. Please select another approver")
+      valid_app = 'No'
+    else:
+      valid_app = 'Yes'
+    ret = {'app_lst':("\n" + "\n".join(app_lst)), 'valid_approver':valid_app}
+    return ret
+  
+  def on_submit(self):
+    self.validate_exp_details()
+    set(self.doc, 'approval_status', 'Submitted')
+  
+  def on_cancel(self):
+    set(self.doc, 'approval_status', 'Cancelled')
\ No newline at end of file
diff --git a/hr/doctype/expense_voucher/expense_voucher.txt b/hr/doctype/expense_voucher/expense_voucher.txt
new file mode 100644
index 0000000..0f7812e
--- /dev/null
+++ b/hr/doctype/expense_voucher/expense_voucher.txt
@@ -0,0 +1,439 @@
+# DocType, Expense Voucher
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-09-03 16:45:08',
+		'docstatus': 0,
+		'modified': '2011-06-27 14:39:09',
+		'modified_by': 'Administrator',
+		'owner': 'harshada@webnotestech.com'
+	},
+
+	# These values are common for all DocType
+	{
+		'_last_update': '1308808105',
+		'autoname': 'EXP.######',
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'module': 'HR',
+		'name': '__common__',
+		'search_fields': 'approval_status,employee,employee_name',
+		'section_style': 'Simple',
+		'server_code_error': ' ',
+		'show_in_menu': 0,
+		'subject': 'From %(employee_name)s for %(total_claimed_amount)s (claimed)',
+		'tag_fields': 'approval_status',
+		'version': 134
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Expense Voucher',
+		'parentfield': 'fields',
+		'parenttype': 'DocType'
+	},
+
+	# These values are common for all DocPerm
+	{
+		'doctype': 'DocPerm',
+		'name': '__common__',
+		'parent': 'Expense Voucher',
+		'parentfield': 'permissions',
+		'parenttype': 'DocType',
+		'read': 1
+	},
+
+	# DocType, Expense Voucher
+	{
+		'doctype': 'DocType',
+		'name': 'Expense Voucher'
+	},
+
+	# DocPerm
+	{
+		'amend': 1,
+		'cancel': 1,
+		'create': 1,
+		'doctype': 'DocPerm',
+		'match': 'owner',
+		'permlevel': 0,
+		'submit': 1,
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'amend': 1,
+		'cancel': 1,
+		'create': 1,
+		'doctype': 'DocPerm',
+		'permlevel': 0,
+		'role': 'HR Manager',
+		'submit': 1,
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'amend': 1,
+		'cancel': 1,
+		'create': 1,
+		'doctype': 'DocPerm',
+		'permlevel': 0,
+		'role': 'HR User',
+		'submit': 1,
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'amend': 1,
+		'cancel': 1,
+		'create': 1,
+		'doctype': 'DocPerm',
+		'match': 'owner',
+		'permlevel': 0,
+		'submit': 1,
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'amend': 1,
+		'cancel': 1,
+		'create': 1,
+		'doctype': 'DocPerm',
+		'permlevel': 0,
+		'role': 'HR Manager',
+		'submit': 1,
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'amend': 1,
+		'cancel': 1,
+		'create': 1,
+		'doctype': 'DocPerm',
+		'permlevel': 0,
+		'role': 'HR User',
+		'submit': 1,
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 3,
+		'permlevel': 1,
+		'role': 'All'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'idx': 1,
+		'label': 'Details',
+		'oldfieldtype': 'Section Break',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'default': 'Draft',
+		'doctype': 'DocField',
+		'fieldname': 'approval_status',
+		'fieldtype': 'Select',
+		'idx': 2,
+		'in_filter': 1,
+		'label': 'Approval Status',
+		'no_copy': 1,
+		'oldfieldname': 'approval_status',
+		'oldfieldtype': 'Select',
+		'options': '\nDraft\nSubmitted\nApproved \nRejected\nCancelled',
+		'permlevel': 1,
+		'search_index': 1
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'employee',
+		'fieldtype': 'Link',
+		'idx': 3,
+		'in_filter': 1,
+		'label': 'From Employee',
+		'oldfieldname': 'employee',
+		'oldfieldtype': 'Link',
+		'options': 'Employee',
+		'permlevel': 0,
+		'reqd': 1,
+		'search_index': 1,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'employee_name',
+		'fieldtype': 'Data',
+		'idx': 4,
+		'in_filter': 1,
+		'label': 'Employee Name',
+		'oldfieldname': 'employee_name',
+		'oldfieldtype': 'Data',
+		'permlevel': 1,
+		'search_index': 1,
+		'width': '150px'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'fiscal_year',
+		'fieldtype': 'Select',
+		'idx': 5,
+		'in_filter': 1,
+		'label': 'Fiscal Year',
+		'oldfieldname': 'fiscal_year',
+		'oldfieldtype': 'Select',
+		'options': 'link:Fiscal Year',
+		'permlevel': 0,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'company',
+		'fieldtype': 'Select',
+		'idx': 6,
+		'in_filter': 1,
+		'label': 'Company',
+		'oldfieldname': 'company',
+		'oldfieldtype': 'Link',
+		'options': 'link:Company',
+		'permlevel': 0,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break',
+		'idx': 7,
+		'oldfieldtype': 'Column Break',
+		'permlevel': 0,
+		'width': '50%'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'posting_date',
+		'fieldtype': 'Date',
+		'idx': 8,
+		'in_filter': 1,
+		'label': 'Posting Date',
+		'oldfieldname': 'posting_date',
+		'oldfieldtype': 'Date',
+		'permlevel': 0,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'exp_approver',
+		'fieldtype': 'Select',
+		'idx': 9,
+		'label': 'Approver',
+		'oldfieldname': 'exp_approver',
+		'oldfieldtype': 'Select',
+		'permlevel': 0,
+		'width': '160px'
+	},
+
+	# DocField
+	{
+		'allow_on_submit': 1,
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'remark',
+		'fieldtype': 'Small Text',
+		'idx': 10,
+		'label': 'Remark',
+		'no_copy': 1,
+		'oldfieldname': 'remark',
+		'oldfieldtype': 'Small Text',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'amended_from',
+		'fieldtype': 'Data',
+		'idx': 11,
+		'label': 'Amended From',
+		'no_copy': 1,
+		'oldfieldname': 'amended_from',
+		'oldfieldtype': 'Data',
+		'permlevel': 1,
+		'print_hide': 1,
+		'report_hide': 1,
+		'width': '160px'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'amendment_date',
+		'fieldtype': 'Date',
+		'idx': 12,
+		'label': 'Amendment Date',
+		'no_copy': 1,
+		'oldfieldname': 'amendment_date',
+		'oldfieldtype': 'Date',
+		'permlevel': 1,
+		'print_hide': 1,
+		'report_hide': 1,
+		'width': '160px'
+	},
+
+	# DocField
+	{
+		'allow_on_submit': 1,
+		'doctype': 'DocField',
+		'fieldtype': 'Button',
+		'hidden': 1,
+		'idx': 13,
+		'label': 'Approve',
+		'oldfieldtype': 'Button',
+		'permlevel': 0,
+		'print_hide': 1,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'allow_on_submit': 1,
+		'doctype': 'DocField',
+		'fieldtype': 'Button',
+		'hidden': 1,
+		'idx': 14,
+		'label': 'Reject',
+		'oldfieldtype': 'Button',
+		'permlevel': 0,
+		'print_hide': 1,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'idx': 15,
+		'label': 'Expense Details',
+		'oldfieldtype': 'Section Break',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'allow_on_submit': 1,
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldtype': 'Button',
+		'idx': 16,
+		'label': 'Calculate Total Amount',
+		'oldfieldtype': 'Button',
+		'permlevel': 0,
+		'print_hide': 1,
+		'report_hide': 1,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'total_claimed_amount',
+		'fieldtype': 'Currency',
+		'idx': 17,
+		'in_filter': 0,
+		'label': 'Total Claimed Amount',
+		'no_copy': 1,
+		'oldfieldname': 'total_claimed_amount',
+		'oldfieldtype': 'Currency',
+		'permlevel': 1,
+		'reqd': 0,
+		'width': '160px'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'total_sanctioned_amount',
+		'fieldtype': 'Currency',
+		'idx': 18,
+		'in_filter': 0,
+		'label': 'Total Sanctioned Amount',
+		'no_copy': 1,
+		'oldfieldname': 'total_sanctioned_amount',
+		'oldfieldtype': 'Currency',
+		'permlevel': 1,
+		'width': '160px'
+	},
+
+	# DocField
+	{
+		'allow_on_submit': 1,
+		'doctype': 'DocField',
+		'fieldtype': 'Button',
+		'hidden': 1,
+		'idx': 19,
+		'label': 'Update Voucher',
+		'oldfieldtype': 'Button',
+		'permlevel': 0,
+		'print_hide': 1,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'allow_on_submit': 1,
+		'doctype': 'DocField',
+		'fieldname': 'expense_voucher_details',
+		'fieldtype': 'Table',
+		'idx': 20,
+		'label': 'Expense Voucher Details',
+		'oldfieldname': 'expense_voucher_details',
+		'oldfieldtype': 'Table',
+		'options': 'Expense Voucher Detail',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'email_id',
+		'fieldtype': 'Data',
+		'hidden': 1,
+		'idx': 21,
+		'label': 'Employees Email Id',
+		'oldfieldname': 'email_id',
+		'oldfieldtype': 'Data',
+		'permlevel': 0,
+		'print_hide': 1
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/expense_voucher_detail/__init__.py b/hr/doctype/expense_voucher_detail/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/expense_voucher_detail/__init__.py
diff --git a/hr/doctype/expense_voucher_detail/expense_voucher_detail.txt b/hr/doctype/expense_voucher_detail/expense_voucher_detail.txt
new file mode 100644
index 0000000..d6cb015
--- /dev/null
+++ b/hr/doctype/expense_voucher_detail/expense_voucher_detail.txt
@@ -0,0 +1,108 @@
+# DocType, Expense Voucher Detail
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-09-03 16:45:08',
+		'docstatus': 0,
+		'modified': '2010-09-20 14:06:57',
+		'modified_by': 'Administrator',
+		'owner': 'harshada@webnotestech.com'
+	},
+
+	# These values are common for all DocType
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'istable': 1,
+		'module': 'HR',
+		'name': '__common__',
+		'section_style': 'Simple',
+		'server_code_error': ' ',
+		'version': 5
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Expense Voucher Detail',
+		'parentfield': 'fields',
+		'parenttype': 'DocType',
+		'permlevel': 0
+	},
+
+	# DocType, Expense Voucher Detail
+	{
+		'doctype': 'DocType',
+		'name': 'Expense Voucher Detail'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'expense_date',
+		'fieldtype': 'Date',
+		'idx': 1,
+		'label': 'Expense Date',
+		'oldfieldname': 'expense_date',
+		'oldfieldtype': 'Date',
+		'reqd': 0,
+		'width': '150px'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'expense_type',
+		'fieldtype': 'Link',
+		'idx': 2,
+		'label': 'Expense Type',
+		'oldfieldname': 'expense_type',
+		'oldfieldtype': 'Link',
+		'options': 'Expense Type',
+		'reqd': 1,
+		'width': '150px'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'description',
+		'fieldtype': 'Small Text',
+		'idx': 3,
+		'label': 'Description',
+		'oldfieldname': 'description',
+		'oldfieldtype': 'Small Text',
+		'width': '300px'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'claim_amount',
+		'fieldtype': 'Currency',
+		'idx': 4,
+		'label': 'Claim Amount',
+		'oldfieldname': 'claim_amount',
+		'oldfieldtype': 'Currency',
+		'reqd': 1,
+		'trigger': 'Client',
+		'width': '150px'
+	},
+
+	# DocField
+	{
+		'allow_on_submit': 1,
+		'doctype': 'DocField',
+		'fieldname': 'sanctioned_amount',
+		'fieldtype': 'Currency',
+		'idx': 5,
+		'label': 'Sanctioned Amount',
+		'no_copy': 1,
+		'oldfieldname': 'sanctioned_amount',
+		'oldfieldtype': 'Currency',
+		'trigger': 'Client',
+		'width': '150px'
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/experience_in_company_detail/__init__.py b/hr/doctype/experience_in_company_detail/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/experience_in_company_detail/__init__.py
diff --git a/hr/doctype/experience_in_company_detail/experience_in_company_detail.txt b/hr/doctype/experience_in_company_detail/experience_in_company_detail.txt
new file mode 100644
index 0000000..c1b826b
--- /dev/null
+++ b/hr/doctype/experience_in_company_detail/experience_in_company_detail.txt
@@ -0,0 +1,110 @@
+# DocType, Experience In Company Detail
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-08-08 17:09:01',
+		'docstatus': 0,
+		'modified': '2010-09-20 14:06:57',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'istable': 1,
+		'module': 'HR',
+		'name': '__common__',
+		'section_style': 'Simple',
+		'show_in_menu': 0,
+		'version': 6
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Experience In Company Detail',
+		'parentfield': 'fields',
+		'parenttype': 'DocType',
+		'permlevel': 0
+	},
+
+	# DocType, Experience In Company Detail
+	{
+		'doctype': 'DocType',
+		'name': 'Experience In Company Detail'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'branch',
+		'fieldtype': 'Select',
+		'idx': 1,
+		'label': 'Branch',
+		'oldfieldname': 'branch',
+		'oldfieldtype': 'Select',
+		'options': 'link:Branch'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'department',
+		'fieldtype': 'Select',
+		'idx': 2,
+		'label': 'Department',
+		'oldfieldname': 'department',
+		'oldfieldtype': 'Select',
+		'options': 'link:Department'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'designation',
+		'fieldtype': 'Select',
+		'idx': 3,
+		'label': 'Designation',
+		'oldfieldname': 'designation',
+		'oldfieldtype': 'Select',
+		'options': 'link:Designation'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'grade',
+		'fieldtype': 'Select',
+		'idx': 4,
+		'label': 'Grade',
+		'oldfieldname': 'grade',
+		'oldfieldtype': 'Select',
+		'options': 'link:Grade'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'from_date',
+		'fieldtype': 'Date',
+		'idx': 5,
+		'label': 'From Date',
+		'oldfieldname': 'from_date',
+		'oldfieldtype': 'Date'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'to_date',
+		'fieldtype': 'Date',
+		'idx': 6,
+		'label': 'To Date',
+		'oldfieldname': 'to_date',
+		'oldfieldtype': 'Date'
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/grade/__init__.py b/hr/doctype/grade/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/grade/__init__.py
diff --git a/hr/doctype/grade/grade.js b/hr/doctype/grade/grade.js
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/grade/grade.js
diff --git a/hr/doctype/grade/grade.txt b/hr/doctype/grade/grade.txt
new file mode 100644
index 0000000..afa74ad
--- /dev/null
+++ b/hr/doctype/grade/grade.txt
@@ -0,0 +1,103 @@
+# DocType, Grade
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-08-08 17:09:03',
+		'docstatus': 0,
+		'modified': '2010-09-20 14:06:57',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'allow_trash': 1,
+		'autoname': 'field:grade_name',
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'document_type': 'Master',
+		'module': 'HR',
+		'name': '__common__',
+		'section_style': 'Simple',
+		'server_code_error': ' ',
+		'show_in_menu': 0,
+		'version': 7
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Grade',
+		'parentfield': 'fields',
+		'parenttype': 'DocType'
+	},
+
+	# These values are common for all DocPerm
+	{
+		'cancel': 1,
+		'create': 1,
+		'doctype': 'DocPerm',
+		'name': '__common__',
+		'parent': 'Grade',
+		'parentfield': 'permissions',
+		'parenttype': 'DocType',
+		'permlevel': 0,
+		'read': 1,
+		'write': 1
+	},
+
+	# DocType, Grade
+	{
+		'doctype': 'DocType',
+		'name': 'Grade'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 1,
+		'role': 'System Manager'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 2,
+		'role': 'HR User',
+		'submit': 0
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 3,
+		'role': 'HR Manager'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'trash_reason',
+		'fieldtype': 'Small Text',
+		'idx': 1,
+		'label': 'Trash Reason',
+		'oldfieldname': 'trash_reason',
+		'oldfieldtype': 'Small Text',
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'grade_name',
+		'fieldtype': 'Data',
+		'idx': 2,
+		'label': 'Grade',
+		'oldfieldname': 'grade_name',
+		'oldfieldtype': 'Data',
+		'permlevel': 0,
+		'reqd': 1
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/holiday_list/__init__.py b/hr/doctype/holiday_list/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/holiday_list/__init__.py
diff --git a/hr/doctype/holiday_list/holiday_list.js b/hr/doctype/holiday_list/holiday_list.js
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/holiday_list/holiday_list.js
diff --git a/hr/doctype/holiday_list/holiday_list.py b/hr/doctype/holiday_list/holiday_list.py
new file mode 100644
index 0000000..afafcec
--- /dev/null
+++ b/hr/doctype/holiday_list/holiday_list.py
@@ -0,0 +1,116 @@
+# Please edit this list and import only required elements
+import webnotes
+
+from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, generate_hash, getTraceback, get_defaults, get_first_day, get_last_day, getdate, has_common, month_name, now, nowdate, replace_newlines, sendmail, set_default, str_esc_quote, user_format, validate_email_add
+from webnotes.model import db_exists
+from webnotes.model.doc import Document, addchild, removechild, getchildren, make_autoname, SuperDocType
+from webnotes.model.doclist import getlist, copy_doclist
+from webnotes.model.code import get_obj, get_server_obj, run_server_obj, updatedb, check_syntax
+from webnotes import session, form, is_testing, msgprint, errprint
+
+set = webnotes.conn.set
+sql = webnotes.conn.sql
+get_value = webnotes.conn.get_value
+in_transaction = webnotes.conn.in_transaction
+convert_to_lists = webnotes.conn.convert_to_lists
+
+import datetime
+	
+# -----------------------------------------------------------------------------------------
+
+
+class DocType:
+  def __init__(self,doc,doclist=[]):
+    self.doc = doc
+    self.doclist = doclist
+
+  # ---------
+  # autoname
+  # ---------
+  def autoname(self):
+    self.doc.name = make_autoname(self.doc.fiscal_year +"/"+ self.doc.holiday_list_name+"/.###")
+
+
+# *************************************************** utilities ***********************************************
+  # ----------------
+  # validate values
+  # ----------------
+  def validate_values(self):
+    if not self.doc.fiscal_year:
+      msgprint("Please select Fiscal Year")
+      raise Exception
+    if not self.doc.weekly_off:
+      msgprint("Please select weekly off day")
+      raise Exception
+
+
+  # ------------------------------------
+  # get fiscal year start and end dates
+  # ------------------------------------
+  def get_fy_start_end_dates(self):
+    st_date = sql("select year_start_date from `tabFiscal Year` where name = '%s'" %(self.doc.fiscal_year))
+    st_date = st_date and st_date[0][0].strftime('%Y-%m-%d') or ''
+    ed_date = add_days(add_years(st_date,1), -1)
+    return st_date, ed_date
+
+  # -------------------------
+  # get weekly off date list
+  # -------------------------
+  def get_weekly_off_date_list(self, yr_start_date, yr_end_date):
+    days_dict, dt_list, lst_st = {'Monday':0,'Tuesday':1,'Wednesday':2,'Thursday':3,'Friday':4,'Saturday':5,'Sunday':6}, [], ''
+
+    w = cint(days_dict[self.doc.weekly_off])    # Weekly Off Day No.
+
+    st_dt_weekday = getdate(yr_start_date).weekday()    # Year Start Date weekday()
+
+    if w == st_dt_weekday:     # Get Start Date
+      lst_st = yr_start_date
+      dt_list.append(lst_st)
+    elif w > st_dt_weekday:
+      lst_st = add_days(yr_start_date,w - st_dt_weekday)
+      dt_list.append(lst_st)
+    else:
+      lst_st = add_days(yr_start_date,6 - st_dt_weekday + 1)
+      dt_list.append(lst_st)
+
+    while getdate(lst_st) < getdate(yr_end_date):    # Get list of dates
+      lst_st = add_days(lst_st,7)
+      if getdate(lst_st) > getdate(yr_end_date):
+        break
+      dt_list.append(lst_st)
+
+    return dt_list
+
+  # ---------------------
+  # get weekly off dates
+  # ---------------------
+  def get_weekly_off_dates(self):
+    self.validate_values()
+    yr_start_date, yr_end_date = self.get_fy_start_end_dates()
+    date_list = self.get_weekly_off_date_list(yr_start_date, yr_end_date)
+    for d in date_list:
+      ch = addchild(self.doc, 'holiday_list_details', 'Holiday List Detail', 1, self.doclist)
+      ch.description = self.doc.weekly_off
+      ch.holiday_date = d
+
+  # ------------
+  # clear table
+  # ------------
+  def clear_table(self):
+    self.doc.clear_table(self.doclist,'holiday_list_details')
+
+
+# ***************************************** validate *************************************************
+
+  # ---------------------------
+  # check default holiday list
+  # ---------------------------
+  def update_default_holiday_list(self):
+    sql("update `tabHoliday List` set is_default = 0 where ifnull(is_default, 0) = 1 and fiscal_year = '%s'" % (self.doc.fiscal_year))
+
+
+  # ---------
+  # validate
+  # ---------
+  def validate(self):
+    self.update_default_holiday_list()
diff --git a/hr/doctype/holiday_list/holiday_list.txt b/hr/doctype/holiday_list/holiday_list.txt
new file mode 100644
index 0000000..f9407e3
--- /dev/null
+++ b/hr/doctype/holiday_list/holiday_list.txt
@@ -0,0 +1,167 @@
+# DocType, Holiday List
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-08-08 17:09:03',
+		'docstatus': 0,
+		'modified': '2011-02-12 13:37:12',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'allow_trash': 1,
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'document_type': 'Master',
+		'module': 'HR',
+		'name': '__common__',
+		'section_style': 'Simple',
+		'server_code_error': ' ',
+		'show_in_menu': 0,
+		'version': 17
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Holiday List',
+		'parentfield': 'fields',
+		'parenttype': 'DocType'
+	},
+
+	# These values are common for all DocPerm
+	{
+		'doctype': 'DocPerm',
+		'name': '__common__',
+		'parent': 'Holiday List',
+		'parentfield': 'permissions',
+		'parenttype': 'DocType',
+		'read': 1,
+		'role': 'HR Manager'
+	},
+
+	# DocType, Holiday List
+	{
+		'doctype': 'DocType',
+		'name': 'Holiday List'
+	},
+
+	# DocPerm
+	{
+		'cancel': 1,
+		'create': 1,
+		'doctype': 'DocPerm',
+		'idx': 1,
+		'permlevel': 0,
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 2,
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'trash_reason',
+		'fieldtype': 'Small Text',
+		'idx': 1,
+		'label': 'Trash Reason',
+		'oldfieldname': 'trash_reason',
+		'oldfieldtype': 'Small Text',
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'holiday_list_name',
+		'fieldtype': 'Data',
+		'idx': 2,
+		'label': 'Holiday List Name',
+		'oldfieldname': 'holiday_list_name',
+		'oldfieldtype': 'Data',
+		'permlevel': 0,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'is_default',
+		'fieldtype': 'Check',
+		'idx': 3,
+		'label': 'Default',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'fiscal_year',
+		'fieldtype': 'Select',
+		'idx': 4,
+		'in_filter': 1,
+		'label': 'Fiscal Year',
+		'oldfieldname': 'fiscal_year',
+		'oldfieldtype': 'Link',
+		'options': 'link:Fiscal Year',
+		'permlevel': 0,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'weekly_off',
+		'fieldtype': 'Select',
+		'idx': 5,
+		'label': 'Weekly Off',
+		'no_copy': 1,
+		'options': '\nSunday\nMonday\nTuesday\nWednesday\nThursday\nFriday\nSaturday',
+		'permlevel': 0,
+		'print_hide': 1,
+		'report_hide': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Button',
+		'idx': 6,
+		'label': 'Get Weekly Off Dates',
+		'options': 'get_weekly_off_dates',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'holiday_list_details',
+		'fieldtype': 'Table',
+		'idx': 7,
+		'label': 'Holiday List Details',
+		'oldfieldname': 'holiday_list_details',
+		'oldfieldtype': 'Table',
+		'options': 'Holiday List Detail',
+		'permlevel': 0,
+		'reqd': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Button',
+		'idx': 8,
+		'label': 'Clear Table',
+		'options': 'clear_table',
+		'permlevel': 0
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/holiday_list_detail/__init__.py b/hr/doctype/holiday_list_detail/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/holiday_list_detail/__init__.py
diff --git a/hr/doctype/holiday_list_detail/holiday_list_detail.txt b/hr/doctype/holiday_list_detail/holiday_list_detail.txt
new file mode 100644
index 0000000..89f1b04
--- /dev/null
+++ b/hr/doctype/holiday_list_detail/holiday_list_detail.txt
@@ -0,0 +1,65 @@
+# DocType, Holiday List Detail
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-08-08 17:09:03',
+		'docstatus': 0,
+		'modified': '2011-02-11 14:23:09',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'istable': 1,
+		'module': 'HR',
+		'name': '__common__',
+		'section_style': 'Simple',
+		'server_code_error': ' ',
+		'show_in_menu': 0,
+		'version': 4
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Holiday List Detail',
+		'parentfield': 'fields',
+		'parenttype': 'DocType',
+		'permlevel': 0
+	},
+
+	# DocType, Holiday List Detail
+	{
+		'doctype': 'DocType',
+		'name': 'Holiday List Detail'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'description',
+		'fieldtype': 'Small Text',
+		'idx': 1,
+		'label': 'Description',
+		'oldfieldname': 'holiday_name',
+		'oldfieldtype': 'Data',
+		'width': '300px'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'holiday_date',
+		'fieldtype': 'Date',
+		'idx': 2,
+		'label': 'Date',
+		'oldfieldname': 'holiday_date',
+		'oldfieldtype': 'Date',
+		'width': '100px'
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/invest_80_declaration_detail/__init__.py b/hr/doctype/invest_80_declaration_detail/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/invest_80_declaration_detail/__init__.py
diff --git a/hr/doctype/invest_80_declaration_detail/invest_80_declaration_detail.txt b/hr/doctype/invest_80_declaration_detail/invest_80_declaration_detail.txt
new file mode 100644
index 0000000..841b21e
--- /dev/null
+++ b/hr/doctype/invest_80_declaration_detail/invest_80_declaration_detail.txt
@@ -0,0 +1,143 @@
+# DocType, Invest 80 Declaration Detail
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-08-08 17:09:05',
+		'docstatus': 0,
+		'modified': '2010-09-20 14:06:57',
+		'modified_by': 'umair@iwebnotes.com',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'istable': 1,
+		'module': 'HR',
+		'name': '__common__',
+		'section_style': 'Simple',
+		'server_code_error': ' ',
+		'show_in_menu': 0,
+		'version': 10
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Invest 80 Declaration Detail',
+		'parentfield': 'fields',
+		'parenttype': 'DocType'
+	},
+
+	# These values are common for all DocPerm
+	{
+		'doctype': 'DocPerm',
+		'name': '__common__',
+		'parent': 'Invest 80 Declaration Detail',
+		'parentfield': 'permissions',
+		'parenttype': 'DocType',
+		'read': 1,
+		'role': 'System Manager'
+	},
+
+	# DocType, Invest 80 Declaration Detail
+	{
+		'doctype': 'DocType',
+		'name': 'Invest 80 Declaration Detail'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 1,
+		'permlevel': 0,
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 2,
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'particulars4',
+		'fieldtype': 'Small Text',
+		'idx': 1,
+		'label': 'Particulars',
+		'oldfieldname': 'particulars4',
+		'oldfieldtype': 'Small Text',
+		'permlevel': 1,
+		'reqd': 1,
+		'width': '300px'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'under_section4',
+		'fieldtype': 'Data',
+		'idx': 2,
+		'label': 'Under Section',
+		'oldfieldname': 'under_section4',
+		'oldfieldtype': 'Data',
+		'permlevel': 1,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'max_limit4',
+		'fieldtype': 'Currency',
+		'idx': 3,
+		'label': 'Max. Limit',
+		'oldfieldname': 'max_limit4',
+		'oldfieldtype': 'Currency',
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'actual_amount4',
+		'fieldtype': 'Currency',
+		'idx': 4,
+		'label': 'Actual Amount',
+		'oldfieldname': 'actual_amount4',
+		'oldfieldtype': 'Currency',
+		'permlevel': 0,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'eligible_amount4',
+		'fieldtype': 'Currency',
+		'idx': 5,
+		'label': 'Eligible Amount',
+		'oldfieldname': 'eligible_amount4',
+		'oldfieldtype': 'Currency',
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'modified_amount4',
+		'fieldtype': 'Currency',
+		'idx': 6,
+		'label': 'Modified Amount',
+		'oldfieldname': 'modified_amount4',
+		'oldfieldtype': 'Currency',
+		'permlevel': 0
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/it_checklist/__init__.py b/hr/doctype/it_checklist/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/it_checklist/__init__.py
diff --git a/hr/doctype/it_checklist/it_checklist.js b/hr/doctype/it_checklist/it_checklist.js
new file mode 100644
index 0000000..d30e35a
--- /dev/null
+++ b/hr/doctype/it_checklist/it_checklist.js
@@ -0,0 +1,161 @@
+cur_frm.cscript.onload=function(doc,cdt,cdn){
+
+  if(doc.employee && doc.__islocal ==1){
+    cur_frm.cscript.employee(doc,cdt,cdn);
+  }
+  if(doc.rent_acc == "Yes") unhide_field('ann_rent');
+}
+
+// when user select an employee corresponding basic, gross income and pf is set.
+cur_frm.cscript.employee = function(doc,cdt,cdn){
+  var mydoc=doc;
+  $c('runserverobj', args={'method':'set_values','docs':compress_doclist (make_doclist (doc.doctype,doc.name))},
+      function(r, rt) {
+        var doc = locals[mydoc.doctype][mydoc.name];
+       
+        if(r.message){
+        doc.hra_count = r.message;
+        refresh_field('hra_count')
+        }
+        refresh_many(['employee','employee_name','basic','gross_income','pf']);
+        
+      }
+    );
+}
+
+cur_frm.fields_dict['employee'].get_query = function(doc,dt,dn) {
+   return 'SELECT tabEmployee.name FROM tabEmployee WHERE tabEmployee.status = "Active" AND tabEmployee.docstatus !=2 AND tabEmployee.name LIKE "%s" ORDER BY tabEmployee.name DESC LIMIT 50'
+}
+
+//---------------------------------------------------------
+//if rent accomodation is yes then unhide annual rent paid else unhide.
+cur_frm.cscript.rent_acc = function(doc,cdt,cdn){
+  doc.ann_rent = 0
+  if(doc.rent_acc == 'Yes')
+    unhide_field('ann_rent');
+  else
+    hide_field('ann_rent');
+  refresh_field('ann_rent');
+}
+
+//---------------------------------------------------------
+//On done button click check for all values filled or not, and accordingly add records in child tables
+
+cur_frm.cscript['Done']=function(doc,cdt,cdn){
+  var mydoc=doc;
+
+  if(doc.employee && doc.fiscal_year && doc.metro && doc.sr_citizen && doc.part_sr_citizen && doc.basic && doc.gross_income){
+    if((doc.rent_acc == "Yes" && doc.ann_rent) || (doc.rent_acc == "No")){
+        
+        $c('runserverobj', args={'method':'set_tables', 'arg': doc.hra_count, 'docs':compress_doclist (make_doclist (doc.doctype,doc.name))},
+        function(r, rt) {
+          var doc = locals[mydoc.doctype][mydoc.name];
+          refresh_many(['edu_cess','tax_tot_income','net_tot_tax_income','tax_per_month','applicable_from','rem_months']);
+          refresh_many(['exe_declaration_details','oth_inc_decl_details','chap_via_decl_details','invest_80_decl_details']);
+          }
+        );
+      
+    }
+    
+    else if(doc.rent_acc == "Yes" && !doc.ann_rent)
+      alert("Please enter annual rent");
+  }
+  else
+    alert("please fill up all data");
+}
+
+
+//---------------------------------------------------------
+//change event of actual amount1 field (exemption declaration detail table) : check for values of actual amount & maximum limit, and accordingly do actions.
+cur_frm.cscript.actual_amount1= function(doc,cdt,cdn){
+  
+  var cl = getchildren('Declaration Detail', doc.name, 'exe_declaration_details');
+  for(var c=0; c<cl.length; c++) {
+    if(cl[c].name == cdn){
+      if(((flt(cl[c].actual_amount1) <= flt(cl[c].max_limit1)) || (flt(cl[c].actual_amount1) == 0)) || ((cl[c].particulars1 != 'House Rent Allowance') && (flt(cl[c].max_limit1) == 0.00)) || ((cl[c].particulars1 == 'House Rent Allowance') && (flt(cl[c].max_limit1) != 0.00) && (flt(cl[c].actual_amount1) <= flt(cl[c].max_limit1)))){
+        cl[c].eligible_amount1 =cl[c].actual_amount1
+        cl[c].modified_amount1 =cl[c].actual_amount1
+      } 
+      else {
+        
+        cl[c].eligible_amount1 =cl[c].max_limit1
+        cl[c].modified_amount1 =cl[c].max_limit1
+      } 
+     
+      refresh_field('exe_declaration_details'); 
+    }
+  }
+ 
+}
+
+
+
+//---------------------------------------------------------
+////change event of actual amount2 field (Other Income declaration detail table) : check for values of actual amount & maximum limit, and accordingly do actions.
+cur_frm.cscript.actual_amount2= function(doc,cdt,cdn){
+  var cl = getchildren('Other Income Detail', doc.name, 'oth_inc_decl_details');
+  for(var c=0; c<cl.length; c++) {
+    if(cl[c].name == cdn){
+      if((flt(cl[c].actual_amount2) <= flt(cl[c].max_limit2)) || flt((cl[c].actual_amount2) ==0) || !(cl[c].max_limit2)){
+        cl[c].eligible_amount2 =cl[c].actual_amount2
+        cl[c].modified_amount2 =cl[c].actual_amount2
+          
+      } 
+      else {
+        cl[c].eligible_amount2 =cl[c].max_limit2
+        cl[c].modified_amount2 =cl[c].max_limit2
+      } 
+    
+    
+      refresh_field('oth_inc_decl_details');
+    }
+  }
+}
+
+//---------------------------------------------------------
+//change event of actual amount3 field (Chapter VI A declaration detail table) : check for values of actual amount & maximum limit, and accordingly do actions.
+cur_frm.cscript.actual_amount3= function(doc,cdt,cdn){
+  
+
+  var cl = getchildren('Chapter VI A Detail', doc.name, 'chap_via_decl_details');
+  for(var c=0; c<cl.length; c++) {
+    if(cl[c].name == cdn){
+      if((flt(cl[c].actual_amount3) <= flt(cl[c].max_limit3)) || flt((cl[c].actual_amount3) ==0) || !(cl[c].max_limit3)){
+        cl[c].eligible_amount3 =cl[c].actual_amount3
+        cl[c].modified_amount3 =cl[c].actual_amount3
+          
+      } 
+      else {
+        cl[c].eligible_amount3 =cl[c].max_limit3
+        cl[c].modified_amount3 =cl[c].max_limit3
+      } 
+    
+      refresh_field('chap_via_decl_details');
+    }
+  }
+}
+
+//---------------------------------------------------------
+//change event of actual amount4 field (Invest 80 declaration detail table) : check for values of actual amount & maximum limit, and accordingly do actions.
+cur_frm.cscript.actual_amount4= function(doc,cdt,cdn){
+  
+  var cl = getchildren('Invest 80 Declaration Detail', doc.name, 'invest_80_decl_details');
+  for(var c=0; c<cl.length; c++) {
+    if(cl[c].name == cdn){
+      if((flt(cl[c].actual_amount4) <= flt(cl[c].max_limit4)) || flt((cl[c].actual_amount4) ==0) || !(cl[c].max_limit4)){
+        cl[c].eligible_amount4 =cl[c].actual_amount4
+        cl[c].modified_amount4 =cl[c].actual_amount4
+          
+      } 
+      else {
+        cl[c].eligible_amount4 =cl[c].max_limit4
+        cl[c].modified_amount4 =cl[c].max_limit4
+      } 
+   
+      refresh_field('invest_80_decl_details');
+    }
+  }  
+}
+cur_frm.cscript.refresh=function(doc,cdt,cdn){
+
+}
diff --git a/hr/doctype/it_checklist/it_checklist.py b/hr/doctype/it_checklist/it_checklist.py
new file mode 100644
index 0000000..abed301
--- /dev/null
+++ b/hr/doctype/it_checklist/it_checklist.py
@@ -0,0 +1,419 @@
+# Please edit this list and import only required elements
+import webnotes
+
+from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, generate_hash, getTraceback, get_defaults, get_first_day, get_last_day, getdate, has_common, month_name, now, nowdate, replace_newlines, sendmail, set_default, str_esc_quote, user_format, validate_email_add
+from webnotes.model import db_exists
+from webnotes.model.doc import Document, addchild, removechild, getchildren, make_autoname, SuperDocType
+from webnotes.model.doclist import getlist, copy_doclist
+from webnotes.model.code import get_obj, get_server_obj, run_server_obj, updatedb, check_syntax
+from webnotes import session, form, is_testing, msgprint, errprint
+
+set = webnotes.conn.set
+sql = webnotes.conn.sql
+get_value = webnotes.conn.get_value
+in_transaction = webnotes.conn.in_transaction
+convert_to_lists = webnotes.conn.convert_to_lists
+	
+# -----------------------------------------------------------------------------------------
+
+
+class DocType:
+  #init function
+  def __init__(self,doc,doclist=[]):
+    self.doc = doc
+    self.doclist = doclist  
+  
+  def autoname(self):
+    self.doc.name = make_autoname('IT Check/' +self.doc.employee + '/.#####')
+    
+  #===========================================================
+  #check for already exist IT Checklist for resp. Employee
+  def exist_IT_Check(self):
+    
+    #query for return already exist IT Checklist for respective employee
+    exist_ret = sql("select name from `tabIT Checklist` where is_cheklist_active = 'Yes' and employee = '%s' and name!='%s'"%(self.doc.employee,self.doc.name))
+    
+    # validation - if exist then raise exception 
+    if exist_ret:
+      msgprint("Active IT Checklist '%s' for employee '%s' exist."%(exist_ret[0][0],self.doc.employee))
+      self.doc.employee = ""
+      self.doc.basic = 0
+      self.doc.gross_income = 0
+      self.doc.pf = 0
+      return 0
+    else:
+      flag = self.exist_sal_struct() #check for slaray structure exist or not, if exist then further action can be done.
+      return flag
+      
+  #===========================================================
+  #check for salary structure exist or not, if exist then further action can be done.
+  def exist_sal_struct(self):
+    #query return salary structure for particular employee exist or not
+    exist_salstr=sql("select name from `tabSalary Structure` where employee = '%s' and is_active='Yes'"%self.doc.employee)
+    if not exist_salstr:
+      msgprint("Please first create salary structure for employee '%s'"%self.doc.employee)
+      self.doc.employee = ''
+      return 0
+    else:
+      return 1
+    
+  #===========================================================
+  #get previous salary slip gross income and basic amount
+  def get_info(self):
+    ret_sal_slip = sql("select count(name), sum(gross_pay) from `tabSalary Slip` where docstatus =1 and fiscal_year = '%s' and employee = '%s'"%(self.doc.fiscal_year,self.doc.employee))
+    
+    sum_basic = sum_pf = 0
+    
+    if ret_sal_slip:
+      #get name of salary slip of resp. employee 
+      ret_name =convert_to_lists(sql("select name from `tabSalary Slip` where docstatus =1 and fiscal_year = '%s' and employee = '%s' "%(self.doc.fiscal_year,self.doc.employee)))
+      
+      if ret_name:
+        for b in ret_name:
+          #get earning amount of basic 
+          ret_basic = sql("select e_amount from `tabSS Earning Detail` where parent = '%s' and e_type = 'Basic'"%(b[0]))
+          sum_basic += ret_basic[0][0] or 0  
+          
+          #get deduction amount of Provident Fund
+          ret_pf = sql("select d_amount from `tabSS Deduction Detail` where parent = '%s' and d_type = 'Provident Fund'"%(b[0]))
+          
+          sum_pf += ret_pf[0][0] or 0
+                  
+    ret_list = [ret_sal_slip[0][0] or 0,ret_sal_slip[0][1] or 0, sum_basic, sum_pf]
+    return ret_list  
+  
+  #-------------------------------------------
+  def get_basic_gross(self,ret_list0,ret_list1,ret_list2):
+   
+    self.doc.basic = self.doc.gross_income = 0
+    #query return list of earning types and resp. modified amount
+    ret = convert_to_lists(sql("select e.e_type, e.modified_value from `tabEarning Detail` e , `tabSalary Structure` s where s.is_active = 'Yes' and s.employee='%s' and e.parent = s.name" %(self.doc.employee)))
+    hra_count=1
+    if ret:
+      count = 0.0
+      for i in ret:
+        if i[0] == 'Basic':
+          if i[1] == 0:  
+            msgprint("Basic is zero in salary structure")
+
+          self.doc.basic = flt(i[1])*(12-int(ret_list0)) + flt(ret_list2)
+        count += flt(i[1])
+        if i[0] =='House Rent Allowance':
+          hra_count = flt(i[1])
+      if count == 0:
+        msgprint("Gross Income is zero in salary structure")    
+
+     
+      self.doc.gross_income = count*(12-int(ret_list0)) + flt(ret_list1)
+
+    if hra_count == 0 or hra_count == "":
+      hra_count=1
+          
+    return hra_count
+    
+  #-------------------------------------------
+  def get_pf(self,ret_list0,ret_list3):
+    self.doc.pf = 0.0    
+              
+    #query returns amount 
+    ret_ded = sql("select d.d_modified_amt from `tabDeduction Detail` d , `tabSalary Structure` s where s.is_active = 'Yes' and s.employee='%s' and d.parent = s.name and d.d_type = 'Provident Fund'" %(self.doc.employee))
+    
+    if not ret_ded:
+      msgprint("PF Amount in Salary Structure is zero")
+    
+    ret_ded = flt(ret_ded[0][0]) or 0
+        
+    #annual pf = salary structure * (12 - remaining month to complete fiscal year)- previous salary slip's total pf for current fiscal year
+    self.doc.pf = (ret_ded*(12 - int(ret_list0)))+flt(ret_list3)  
+    
+    
+  #-------------------------------------------
+  def set_values(self):
+    hra_count=1
+    if not self.doc.fiscal_year:
+      msgprint("Please select Fiscal Year")
+      self.doc.employee = ''
+    
+    elif self.doc.employee:
+      
+      flag = self.exist_IT_Check()   #check for already exist IT Checklist for resp. Employee
+    
+      if flag == 1:
+     
+        ename = sql("select employee_name from `tabEmployee` where name = '%s'"%self.doc.employee)[0][0]
+        set(self.doc,'employee_name',cstr(ename))
+        #call get_info to get values of salary slip's total basic, pf and gross income amount
+        ret_list = self.get_info()
+
+        self.get_pf(ret_list[0],ret_list[3])
+      
+        hra_count = self.get_basic_gross(ret_list[0],ret_list[1],ret_list[2])        
+  
+    return hra_count
+  
+  #===========================================================  
+  #-------------------------------------------
+  def set_tables(self, hra_count):        #set tables values
+    
+    self.set_exemption_table(hra_count)
+    self.set_other_income_table()
+    self.set_deduction_via_table()
+    self.set_invest_80c_table()
+    self.doc.edu_cess = self.doc.tax_tot_income = self.doc.net_tot_tax_income = self.doc.tax_per_month = 0
+    self.doc.applicable_from = self.doc.rem_months=''
+    msgprint("Successful")
+    return ''
+  
+  #-------------------------------------------
+  def get_month_diff(self):
+    #end_month = get_defaults()['end_month']
+      
+    month_dict = {"January" :'01', "February" :'02',"March" :'03',"April":'04',"May":'05',"June":'06',"July":'07',"August":'08',"September":'09',"October":'10',"November":'11',"December":'12'}
+    
+    import datetime
+
+    start_month =  getdate(get_defaults()['year_start_date']).month
+    end_month = cint(start_month) - 1
+    if end_month <= 0:
+      end_month = 12
+    str_end_month = cstr(end_month)
+    
+    if len(str_end_month)==1:
+      str_end_month = '0'+str_end_month
+    
+    
+    to_month = datetime.date.today().strftime("%B")
+    to_year = datetime.date.today().strftime("%Y")
+    
+    fiscal_year = self.doc.fiscal_year
+    
+    str_fy =fiscal_year.split("-")
+    
+    endym=int(str_fy[1]+str_end_month)
+    startym= int(to_year+month_dict[to_month])
+
+    month_diff =sql("SELECT PERIOD_DIFF(%d,%d);" %(endym,startym))[0][0]+1
+    
+    return month_diff
+  
+  
+ 
+  #------------------------------------------- 
+  def set_exemption_values(self,ann_hra):
+    ret = convert_to_lists(sql("select name, exemption_limit from `tabEarning Type` where taxable = 'No' and docstatus !=2"))
+    
+    if ret:
+      for r in ret:
+
+        ch = addchild(self.doc,'exe_declaration_details','Declaration Detail',0, self.doclist)
+        ch.particulars1 = r[0]
+        ch.under_section1 = "U/Sec 10 & 17"
+        
+        if r[0] == 'House Rent Allowance':
+          if (self.doc.ann_rent <= 0.00):
+            ch.max_limit1 = 0.00
+            
+          else:
+            hra1=0.00
+            if(self.doc.metro == 'Yes'):
+              hra1 = flt(self.doc.basic)*50/100
+            elif(self.doc.metro == 'No'):
+              hra1 = flt(self.doc.basic)*40/100
+            hra2 = flt(ann_hra)
+            hra3 = flt(self.doc.ann_rent) - (flt(self.doc.basic)/10)
+
+
+            if hra1 <= 0 or hra2 <=0 or hra3 <=0:
+              ch.max_limit1 = 0
+            else:
+              ch.max_limit1=min(hra1,min(hra2,hra3))
+        else:    
+          ch.max_limit1 = r[1]
+        
+        ch.actual_amount1 = 0.00
+        ch.eligible_amount1 = 0.00
+        ch.modified_amount1 = 0.00
+  
+  #-------------------------------------------    
+  def set_exemption_table(self, hra_count):
+    self.doc.clear_table(self.doclist, 'exe_declaration_details',1)
+    ann_hra = 0
+    if (self.doc.ann_rent > 0):
+    
+      #query return sum of earning types amount where earning type = 'HRA'
+      ret_sal_slip = sql("select sum(e.e_amount) from `tabSS Earning Detail` e , `tabSalary Slip` s where s.fiscal_year = '%s' and s.docstatus = 1 and s.employee='%s' and e.parent = s.name and e.e_type = 'House Rent Allowance'" %(self.doc.fiscal_year,self.doc.employee))
+      if not ret_sal_slip:
+        ret_sal_slip = 0.00
+      else:
+        ret_sal_slip = ret_sal_slip[0][0]      
+     
+      month_diff = self.get_month_diff()     
+      
+      #ret_sal_slip = ret_sal_slip[0][0] or 0.00
+      ann_hra = (flt(hra_count)*flt(month_diff))+flt(ret_sal_slip);
+      
+    self.set_exemption_values(ann_hra)
+ 
+  #-------------------------------------------     
+  def set_other_income_table(self):
+    self.doc.clear_table(self.doclist, 'oth_inc_decl_details',1)
+    other_income =[["Income from Housing","----",0.00],["Relief on interest paid on Housing Loan","U/S 24(1)(Vi)",150000],["Any other Income","----",0.00]]
+    
+    for oi in other_income:
+      ch1 = addchild(self.doc,'oth_inc_decl_details','Other Income Detail',0, self.doclist)
+      ch1.particulars2 = oi[0]
+      ch1.under_section2 = oi[1]
+      ch1.max_limit2 = oi[2]
+      ch1.actual_amount2 = 0.00
+      ch1.eligible_amount2 = 0.00
+      ch1.modified_amount2 = 0.00
+  
+  
+  #---------------------------------------  
+  def get_maxlmt_via(self):
+    if(self.doc.part_sr_citizen == 'Yes'): 
+      max_lmt1 = 20000
+    else:
+      max_lmt1 = 15000
+      
+    if(self.doc.per_dep_dis == "Less than 80% disability"):
+      max_lmt2 = 50000
+    elif(self.doc.per_dep_dis == "More than 80% disability"):
+      max_lmt2 = 100000
+    else:
+      max_lmt2 = 0.00
+
+    if(self.doc.per_self_dis == "Less than 80% disability"):
+      max_lmt3 = 50000
+    elif(self.doc.per_self_dis == "More than 80% disability"):
+      max_lmt3 = 75000
+    else:
+      max_lmt3 = 0.00
+    
+    maxlmt_lst=[max_lmt1,max_lmt2,max_lmt3]
+    
+    return maxlmt_lst
+
+  #---------------------------------------     
+  def set_deduction_via_table(self):
+    self.doc.clear_table(self.doclist, 'chap_via_decl_details',1)
+    
+    maxlmt_lst = self.get_maxlmt_via()
+
+    deduct_via = [["Medical Insurance Premium","U/Sec 80D(2A)",15000],["Medical Insurance Premium for parents","U/Sec 80D(2A)", maxlmt_lst[0]],["Medical for handicapped dependents","U/Sec 80DD",maxlmt_lst[1]],["Medical for specified diseases","U/Sec 80DDB",40000],["Higher Education Loan Interest Repayment","U/Sec 80E",0.00],["*Donation to approved Fund and charities","U/sec 80G",0.00],["*Rent deduction only if HRA not received","U/sec 80GG",0.00],["Deduction for permanent disability","U/Sec 80 U",maxlmt_lst[2]],["Any other deductions","----",0.00]]
+   
+    
+    for dv in deduct_via:
+      ch = addchild(self.doc,'chap_via_decl_details','Chapter VI A Detail',0, self.doclist)
+      ch.particulars3 = dv[0]
+      ch.under_section3 = dv[1]
+      ch.max_limit3 = dv[2]
+      ch.actual_amount3 = 0.00
+      ch.eligible_amount3 = 0.00
+      ch.modified_amount3 = 0.00
+    
+   
+  #----------------------------------------   
+  def set_invest_80c_table(self):
+    self.doc.clear_table(self.doclist, 'invest_80_decl_details',1)
+    invest_lst = [["Employees Provident Fund","U/Sec 80C",0.00],["Voluntary Contribution Provident Fund","U/Sec 80C",0.00],["Investment in Pension Scheme","U/Sec 80 CCC",10000],["Housing Loan Principal Repayment","U/Sec 80C",0.00],["Public Provident Fund (PPF)","U/Sec 80C",0.00],["Life Insurance Premium Paid","U/Sec 80C",0.00],["Unit Linked Insurance Plans","U/Sec 80C",0.00],["NSC - National Saving Certificate","U/Sec 80C",0.00],["Deposite in National Saving Scheme (NSS)","U/Sec 80C",0.00],["Infrastructure Investment in approved Shares, Debentures & Bonds","U/Sec 80C",0.00],["Mutual Funds notified under Section 10 (23D)","U/Sec 80C",0.00],["Equity Link Saving Scheme (ELSS) Mutual Funds notified under Section 10 (23D)","U/Sec 80C",0.00],["Term Deposite with a SCH. Bank in a notified Scheme for a team not less than 5 years ","U/Sec 80C",0.00],["Tution Fees Paid (Only full time education tution fees paid to any Indian Univ, College, School)","U/Sec 80C","24000"],["Senior Citizen Savings Scheme Rules, 2004","U/Sec 80C",0.00],["Post Office Time Deposit Rules, 1981 for a term not less than 5 years","U/Sec 80C",0.00]]
+  
+  
+    for il in invest_lst:
+      ch = addchild(self.doc,'invest_80_decl_details','Invest 80 Declaration Detail',0, self.doclist)
+      ch.particulars4 = il[0]
+      ch.under_section4 = il[1]
+      ch.max_limit4 = il[2]
+      ch.actual_amount4 = 0.00
+      ch.eligible_amount4 = 0.00
+      ch.modified_amount4 = 0.00
+      
+      
+  #---------------------------------------
+  def sum_mod_val(self):
+    count = count1 = count2 = 0.0
+    
+    for e in getlist(self.doclist,'exe_declaration_details'):
+      count += flt(e.modified_amount1)
+    
+    count = round(flt(self.doc.gross_income)) - count
+    
+    for oi in getlist(self.doclist,'oth_inc_decl_details'):
+      count += flt(oi.modified_amount2)
+    
+    for vi in getlist(self.doclist,'chap_via_decl_details'):
+      count2 += flt(vi.modified_amount3)
+    
+    count = count - count2
+    
+    for inv in getlist(self.doclist,'invest_80_decl_details'):
+      count1 += flt(inv.modified_amount4)
+      if(count1 >= 100000):
+        break
+      
+    if(count1>100000):
+      count1=100000
+      
+    count_lst = [count,count1]
+    return count_lst
+  
+  #----------------------------------------  
+  def calculate_tax(self):
+    
+    count_lst = self.sum_mod_val()
+    
+    count = round(flt(count_lst[0]) - flt(count_lst[1]))
+    if(count>0):
+      self.doc.net_tot_tax_income = count
+      
+      ret_gender = sql("select gender from `tabEmployee` where name = '%s' "%self.doc.employee)[0][0]
+      
+      if(self.doc.sr_citizen == 'Yes'):
+        self.calc_tax(count,240000)        
+      elif(ret_gender == 'Male'):
+        self.calc_tax(count,160000)
+      elif(ret_gender == 'Female'):
+        self.calc_tax(count,190000)
+    else:
+      self.doc.net_tot_tax_income = 0
+      self.doc.tax_tot_income = 0
+      self.doc.edu_cess = 0
+  #-----------------------------------------------    
+  def calc_tax(self,count,upper_limit):
+    balance = 0
+    tax = 0
+    if(count> upper_limit):
+      balance = count - upper_limit
+      if balance > (500000 - upper_limit):
+        balance = balance - (500000 - upper_limit)
+        tax = round(balance/10)
+        if balance > 300000:
+          balance = balance - 300000
+          tax = round(tax+ 60000)
+          if balance > 0:
+            tax = round(tax + (balance * 30 / 100))
+        else:
+          tax = round(balance * 20 / 100 )
+      else:
+        tax = round(balance /10)
+    else:
+      tax = 0
+    
+    self.doc.tax_tot_income = tax
+    self.doc.edu_cess = round(tax*3/100)
+    
+  #-----------------------------------------------     
+  def calc_tax_pm(self):
+       
+    ret_income_tax = 0
+    ret_income_tax = sql("select sum(d.d_amount) from `tabSS Deduction Detail` d , `tabSalary Slip` s where s.docstatus = 1 and s.fiscal_year = '%s' and s.employee='%s' and d.parent = s.name and d.d_type = 'Income Tax'" %(self.doc.fiscal_year,self.doc.employee))
+    
+    new_tot_income = cint(self.doc.tax_tot_income) + cint(self.doc.edu_cess) - (cint(ret_income_tax[0][0]) or 0)
+    
+    self.doc.tax_per_month = new_tot_income/cint(self.doc.rem_months)
+
+  # on update
+  def on_update(self):
+    obj = get_obj('Feed Control', 'Feed Control')
+   
+    obj.make_feed(self.doc)
\ No newline at end of file
diff --git a/hr/doctype/it_checklist/it_checklist.txt b/hr/doctype/it_checklist/it_checklist.txt
new file mode 100644
index 0000000..b28e9df
--- /dev/null
+++ b/hr/doctype/it_checklist/it_checklist.txt
@@ -0,0 +1,637 @@
+# DocType, IT Checklist
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-08-08 17:09:05',
+		'docstatus': 0,
+		'modified': '2010-12-30 14:53:02',
+		'modified_by': 'umair@iwebnotes.com',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'allow_trash': 1,
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'module': 'HR',
+		'name': '__common__',
+		'section_style': 'Tabbed',
+		'server_code_error': ' ',
+		'show_in_menu': 0,
+		'version': 455
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'IT Checklist',
+		'parentfield': 'fields',
+		'parenttype': 'DocType'
+	},
+
+	# These values are common for all DocPerm
+	{
+		'doctype': 'DocPerm',
+		'name': '__common__',
+		'parent': 'IT Checklist',
+		'parentfield': 'permissions',
+		'parenttype': 'DocType',
+		'read': 1
+	},
+
+	# DocType, IT Checklist
+	{
+		'doctype': 'DocType',
+		'name': 'IT Checklist'
+	},
+
+	# DocPerm
+	{
+		'cancel': 1,
+		'create': 1,
+		'doctype': 'DocPerm',
+		'idx': 1,
+		'permlevel': 0,
+		'role': 'System Manager',
+		'submit': 0,
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'cancel': 1,
+		'create': 1,
+		'doctype': 'DocPerm',
+		'idx': 2,
+		'permlevel': 0,
+		'role': 'HR User',
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'cancel': 1,
+		'create': 1,
+		'doctype': 'DocPerm',
+		'idx': 3,
+		'permlevel': 0,
+		'role': 'HR Manager',
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 4,
+		'permlevel': 1,
+		'role': 'System Manager'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 5,
+		'permlevel': 1,
+		'role': 'HR User'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 6,
+		'permlevel': 1,
+		'role': 'HR Manager'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'trash_reason',
+		'fieldtype': 'Small Text',
+		'idx': 1,
+		'label': 'Trash Reason',
+		'oldfieldname': 'trash_reason',
+		'oldfieldtype': 'Small Text',
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'fiscal_year',
+		'fieldtype': 'Data',
+		'idx': 2,
+		'in_filter': 1,
+		'label': 'Fiscal Year',
+		'oldfieldname': 'fiscal_year',
+		'oldfieldtype': 'Data',
+		'permlevel': 0,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break',
+		'idx': 3,
+		'oldfieldtype': 'Column Break',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'default': 'Yes',
+		'doctype': 'DocField',
+		'fieldname': 'is_cheklist_active',
+		'fieldtype': 'Select',
+		'idx': 4,
+		'label': 'Is IT Cheklist Active?',
+		'oldfieldname': 'is_cheklist_active',
+		'oldfieldtype': 'Select',
+		'options': 'Yes\nNo',
+		'permlevel': 0,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'idx': 5,
+		'label': 'Employee Information',
+		'oldfieldtype': 'Section Break',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break',
+		'idx': 6,
+		'oldfieldtype': 'Column Break',
+		'permlevel': 0,
+		'width': '50%'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'employee',
+		'fieldtype': 'Link',
+		'idx': 7,
+		'label': 'Employee',
+		'oldfieldname': 'employee',
+		'oldfieldtype': 'Link',
+		'options': 'Employee',
+		'permlevel': 0,
+		'reqd': 1,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'employee_name',
+		'fieldtype': 'Data',
+		'idx': 8,
+		'label': 'Employee Name',
+		'oldfieldname': 'employee_name',
+		'oldfieldtype': 'Data',
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'hra_count',
+		'fieldtype': 'Currency',
+		'hidden': 1,
+		'idx': 9,
+		'label': 'HRA Count',
+		'no_copy': 0,
+		'oldfieldname': 'hra_count',
+		'oldfieldtype': 'Currency',
+		'permlevel': 0,
+		'print_hide': 1,
+		'report_hide': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'metro',
+		'fieldtype': 'Select',
+		'idx': 10,
+		'label': 'Is location a metro city?',
+		'oldfieldname': 'metro',
+		'oldfieldtype': 'Select',
+		'options': '\nYes\nNo',
+		'permlevel': 0,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'sr_citizen',
+		'fieldtype': 'Select',
+		'idx': 11,
+		'label': 'Is senior citizen?',
+		'oldfieldname': 'sr_citizen',
+		'oldfieldtype': 'Select',
+		'options': '\nYes\nNo',
+		'permlevel': 0,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'part_sr_citizen',
+		'fieldtype': 'Select',
+		'idx': 12,
+		'label': 'Parents are sr. citizen?',
+		'oldfieldname': 'part_sr_citizen',
+		'oldfieldtype': 'Select',
+		'options': '\nYes\nNo',
+		'permlevel': 0,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'basic',
+		'fieldtype': 'Currency',
+		'idx': 13,
+		'label': 'Annual Basic',
+		'oldfieldname': 'basic',
+		'oldfieldtype': 'Currency',
+		'permlevel': 0,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'sum of earning terms',
+		'doctype': 'DocField',
+		'fieldname': 'gross_income',
+		'fieldtype': 'Currency',
+		'idx': 14,
+		'label': 'Annual Gross Income',
+		'oldfieldname': 'gross_income',
+		'oldfieldtype': 'Currency',
+		'permlevel': 0,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'Please fill up all data then press "Done"',
+		'doctype': 'DocField',
+		'fieldtype': 'Button',
+		'idx': 15,
+		'label': 'Done',
+		'oldfieldtype': 'Button',
+		'permlevel': 0,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break',
+		'idx': 16,
+		'oldfieldtype': 'Column Break',
+		'permlevel': 0,
+		'width': '50%'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'rent_acc',
+		'fieldtype': 'Select',
+		'idx': 17,
+		'label': 'Having rented accomodation?',
+		'oldfieldname': 'rent_acc',
+		'oldfieldtype': 'Select',
+		'options': '\nYes\nNo',
+		'permlevel': 0,
+		'reqd': 1,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'ann_rent',
+		'fieldtype': 'Currency',
+		'hidden': 1,
+		'idx': 18,
+		'label': 'Enter annual rent paid',
+		'oldfieldname': 'ann_rent',
+		'oldfieldtype': 'Currency',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'Disability % of the Handicapped Dependents',
+		'doctype': 'DocField',
+		'fieldname': 'per_dep_dis',
+		'fieldtype': 'Select',
+		'idx': 19,
+		'label': 'Dependents Disability %',
+		'oldfieldname': 'per_dep_dis',
+		'oldfieldtype': 'Select',
+		'options': '\nLess than 80% disability\nMore than 80% disability',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'per_self_dis',
+		'fieldtype': 'Select',
+		'idx': 20,
+		'label': 'Self disability %',
+		'oldfieldname': 'per_self_dis',
+		'oldfieldtype': 'Select',
+		'options': '\nLess than 80% disability\nMore than 80% disability',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'pf',
+		'fieldtype': 'Currency',
+		'idx': 21,
+		'label': 'Annual PF',
+		'oldfieldname': 'pf',
+		'oldfieldtype': 'Currency',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'idx': 22,
+		'label': 'Exemptions',
+		'oldfieldtype': 'Section Break',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'HTML',
+		'idx': 23,
+		'label': 'Exemptions1',
+		'oldfieldtype': 'HTML',
+		'options': '<b>Exemptions under section 10 & 17</b>',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'exe_declaration_details',
+		'fieldtype': 'Table',
+		'idx': 24,
+		'label': 'Exemption Detail',
+		'oldfieldname': 'exe_declaration_details',
+		'oldfieldtype': 'Table',
+		'options': 'Declaration Detail',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'idx': 25,
+		'label': 'Other Income',
+		'oldfieldtype': 'Section Break',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'oth_inc_decl_details',
+		'fieldtype': 'Table',
+		'idx': 26,
+		'label': 'Other Income Details',
+		'oldfieldname': 'oth_inc_decl_details',
+		'oldfieldtype': 'Table',
+		'options': 'Other Income Detail',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'idx': 27,
+		'label': 'Chapter VI A',
+		'oldfieldtype': 'Section Break',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'HTML',
+		'idx': 28,
+		'label': 'deduction chap via',
+		'oldfieldtype': 'HTML',
+		'options': '<b>Deduction under Chapter VI A</b>',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'chap_via_decl_details',
+		'fieldtype': 'Table',
+		'idx': 29,
+		'label': 'Chap VI A Details',
+		'oldfieldname': 'chap_via_decl_details',
+		'oldfieldtype': 'Table',
+		'options': 'Chapter VI A Detail',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'idx': 30,
+		'label': '80 C',
+		'oldfieldtype': 'Section Break',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'HTML',
+		'idx': 31,
+		'label': 'investment 80 C',
+		'oldfieldtype': 'HTML',
+		'options': '<b>Investment under Section 80 C & 80CCC qualifying for deduction upto RS. 1 Lac</b>',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'invest_80_decl_details',
+		'fieldtype': 'Table',
+		'idx': 32,
+		'label': 'Invest 80 Decl Details',
+		'oldfieldname': 'invest_80_decl_details',
+		'oldfieldtype': 'Table',
+		'options': 'Invest 80 Declaration Detail',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'idx': 33,
+		'label': 'Total Taxable Income',
+		'oldfieldtype': 'Section Break',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldtype': 'Button',
+		'idx': 34,
+		'label': 'Calculate',
+		'oldfieldtype': 'Button',
+		'options': 'calculate_tax',
+		'permlevel': 0,
+		'trigger': 'Server'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'net_tot_tax_income',
+		'fieldtype': 'Currency',
+		'idx': 35,
+		'label': 'Net Total Taxable Income',
+		'oldfieldname': 'net_tot_tax_income',
+		'oldfieldtype': 'Currency',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'tax_tot_income',
+		'fieldtype': 'Currency',
+		'idx': 36,
+		'label': 'Tax on Total Income',
+		'oldfieldname': 'tax_tot_income',
+		'oldfieldtype': 'Currency',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'edu_cess',
+		'fieldtype': 'Currency',
+		'idx': 37,
+		'label': 'Education Cess',
+		'oldfieldname': 'edu_cess',
+		'oldfieldtype': 'Currency',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'applicable_from',
+		'fieldtype': 'Select',
+		'idx': 38,
+		'label': 'Applicable from ',
+		'oldfieldname': 'applicable_from',
+		'oldfieldtype': 'Select',
+		'options': '\nJanuary\nFebruary\nMarch\nApril\nMay\nJune\nJuly\nAugust\nSeptember\nOctober\nNovember\nDecember',
+		'permlevel': 0,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'rem_months',
+		'fieldtype': 'Select',
+		'idx': 39,
+		'label': 'Remaining month in year',
+		'oldfieldname': 'rem_months',
+		'oldfieldtype': 'Select',
+		'options': '\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12',
+		'permlevel': 0,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'idx': 40,
+		'label': 'Calculate Tax',
+		'oldfieldtype': 'Section Break',
+		'options': 'Simple',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldtype': 'Button',
+		'idx': 41,
+		'label': 'Calculate Monthly Tax ',
+		'oldfieldtype': 'Button',
+		'options': 'calc_tax_pm',
+		'permlevel': 0,
+		'trigger': 'Server'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'tax_per_month',
+		'fieldtype': 'Currency',
+		'idx': 42,
+		'label': 'Tax per Month',
+		'oldfieldname': 'tax_per_month',
+		'oldfieldtype': 'Currency',
+		'permlevel': 0
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/kra_sheet/__init__.py b/hr/doctype/kra_sheet/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/kra_sheet/__init__.py
diff --git a/hr/doctype/kra_sheet/kra_sheet.txt b/hr/doctype/kra_sheet/kra_sheet.txt
new file mode 100644
index 0000000..a1e466b
--- /dev/null
+++ b/hr/doctype/kra_sheet/kra_sheet.txt
@@ -0,0 +1,68 @@
+# DocType, KRA Sheet
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-09-01 15:48:06',
+		'docstatus': 0,
+		'modified': '2010-09-20 14:06:57',
+		'modified_by': 'Administrator',
+		'owner': 'ashwini@webnotestech.com'
+	},
+
+	# These values are common for all DocType
+	{
+		'autoname': 'KSHEET.#####',
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'istable': 1,
+		'module': 'HR',
+		'name': '__common__',
+		'section_style': 'Simple',
+		'server_code_error': ' ',
+		'version': 6
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'KRA Sheet',
+		'parentfield': 'fields',
+		'parenttype': 'DocType',
+		'permlevel': 0,
+		'reqd': 1
+	},
+
+	# DocType, KRA Sheet
+	{
+		'doctype': 'DocType',
+		'name': 'KRA Sheet'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'Key Performance Area',
+		'doctype': 'DocField',
+		'fieldname': 'kra',
+		'fieldtype': 'Small Text',
+		'idx': 1,
+		'label': 'KRA',
+		'oldfieldname': 'kra',
+		'oldfieldtype': 'Small Text',
+		'width': '200px'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'per_weightage',
+		'fieldtype': 'Currency',
+		'idx': 2,
+		'label': 'Weightage (%)',
+		'oldfieldname': 'per_weightage',
+		'oldfieldtype': 'Currency',
+		'width': '100px'
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/kra_template/__init__.py b/hr/doctype/kra_template/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/kra_template/__init__.py
diff --git a/hr/doctype/kra_template/kra_template.js b/hr/doctype/kra_template/kra_template.js
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/kra_template/kra_template.js
diff --git a/hr/doctype/kra_template/kra_template.txt b/hr/doctype/kra_template/kra_template.txt
new file mode 100644
index 0000000..5518926
--- /dev/null
+++ b/hr/doctype/kra_template/kra_template.txt
@@ -0,0 +1,115 @@
+# DocType, KRA Template
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-09-01 15:48:06',
+		'docstatus': 0,
+		'modified': '2010-09-20 14:06:57',
+		'modified_by': 'Administrator',
+		'owner': 'ashwini@webnotestech.com'
+	},
+
+	# These values are common for all DocType
+	{
+		'autoname': 'field:kra_title',
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'document_type': 'Master',
+		'module': 'HR',
+		'name': '__common__',
+		'section_style': 'Simple',
+		'server_code_error': ' ',
+		'version': 3
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'KRA Template',
+		'parentfield': 'fields',
+		'parenttype': 'DocType',
+		'permlevel': 0
+	},
+
+	# These values are common for all DocPerm
+	{
+		'create': 1,
+		'doctype': 'DocPerm',
+		'name': '__common__',
+		'parent': 'KRA Template',
+		'parentfield': 'permissions',
+		'parenttype': 'DocType',
+		'permlevel': 0,
+		'read': 1,
+		'write': 1
+	},
+
+	# DocType, KRA Template
+	{
+		'doctype': 'DocType',
+		'name': 'KRA Template'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'role': 'HR Manager'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'role': 'HR User'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'role': 'System Manager'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 1,
+		'role': 'System Manager'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'kra_title',
+		'fieldtype': 'Data',
+		'idx': 1,
+		'label': 'KRA Title',
+		'oldfieldname': 'kra_title',
+		'oldfieldtype': 'Data',
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'description',
+		'fieldtype': 'Small Text',
+		'idx': 2,
+		'label': 'Description',
+		'oldfieldname': 'description',
+		'oldfieldtype': 'Small Text',
+		'width': '300px'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'kra_sheet',
+		'fieldtype': 'Table',
+		'idx': 3,
+		'label': 'KRA Sheet',
+		'oldfieldname': 'kra_sheet',
+		'oldfieldtype': 'Table',
+		'options': 'KRA Sheet'
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/leave_allocation/__init__.py b/hr/doctype/leave_allocation/__init__.py
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/leave_allocation/__init__.py
diff --git a/hr/doctype/leave_allocation/leave_allocation.js b/hr/doctype/leave_allocation/leave_allocation.js
new file mode 100755
index 0000000..9b82cf9
--- /dev/null
+++ b/hr/doctype/leave_allocation/leave_allocation.js
@@ -0,0 +1,64 @@
+// ****************************************** onload ********************************************************
+cur_frm.cscript.onload = function(doc, dt, dn) {
+  if(!doc.posting_date) set_multiple(dt,dn,{posting_date:get_today()});
+}
+
+
+// ************************************** client triggers ***************************************************
+// ---------
+// employee
+// ---------
+cur_frm.add_fetch('employee','employee_name','employee_name');
+
+cur_frm.cscript.employee = function(doc, dt, dn) {
+  calculate_total_leaves_allocated(doc, dt, dn);
+}
+
+// -----------
+// leave type
+// -----------
+cur_frm.cscript.leave_type = function(doc, dt, dn) {
+  calculate_total_leaves_allocated(doc, dt, dn);
+}
+
+// ------------
+// fiscal year
+// ------------
+cur_frm.cscript.fiscal_year = function(doc, dt, dn) {
+  calculate_total_leaves_allocated(doc, dt, dn);
+}
+
+// -------------------------------
+// include previous leave balance
+// -------------------------------
+cur_frm.cscript.carry_forward = function(doc, dt, dn) {
+  calculate_total_leaves_allocated(doc, dt, dn);
+}
+
+// -----------------------
+// previous balance leaves
+// -----------------------
+cur_frm.cscript.carry_forwarded_leaves = function(doc, dt, dn) {
+  set_multiple(dt,dn,{total_leaves_allocated : flt(doc.carry_forwarded_leaves)+flt(doc.new_leaves_allocated)});
+}
+
+// ---------------------
+// new leaves allocated
+// ---------------------
+cur_frm.cscript.new_leaves_allocated = function(doc, dt, dn) {
+  set_multiple(dt,dn,{total_leaves_allocated : flt(doc.carry_forwarded_leaves)+flt(doc.new_leaves_allocated)});
+}
+
+
+// ****************************************** utilities ******************************************************
+// ---------------------------------
+// calculate total leaves allocated
+// ---------------------------------
+calculate_total_leaves_allocated = function(doc, dt, dn) {
+  if(cint(doc.carry_forward) == 1 && doc.leave_type && doc.fiscal_year && doc.employee){
+    get_server_fields('get_carry_forwarded_leaves','','', doc, dt, dn, 1);
+	}
+  else if(cint(doc.carry_forward) == 0){
+    set_multiple(dt,dn,{carry_forwarded_leaves : 0,total_leaves_allocated : flt(doc.new_leaves_allocated)});
+  }
+}
diff --git a/hr/doctype/leave_allocation/leave_allocation.py b/hr/doctype/leave_allocation/leave_allocation.py
new file mode 100755
index 0000000..e11a335
--- /dev/null
+++ b/hr/doctype/leave_allocation/leave_allocation.py
@@ -0,0 +1,121 @@
+# Please edit this list and import only required elements
+import webnotes
+
+from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, generate_hash, getTraceback, get_defaults, get_first_day, get_last_day, getdate, has_common, month_name, now, nowdate, replace_newlines, sendmail, set_default, str_esc_quote, user_format, validate_email_add
+from webnotes.model import db_exists
+from webnotes.model.doc import Document, addchild, removechild, getchildren, make_autoname, SuperDocType
+from webnotes.model.doclist import getlist, copy_doclist
+from webnotes.model.code import get_obj, get_server_obj, run_server_obj, updatedb, check_syntax
+from webnotes import session, form, is_testing, msgprint, errprint
+
+set = webnotes.conn.set
+sql = webnotes.conn.sql
+get_value = webnotes.conn.get_value
+in_transaction = webnotes.conn.in_transaction
+convert_to_lists = webnotes.conn.convert_to_lists
+import datetime
+	
+# -----------------------------------------------------------------------------------------
+class DocType:
+  def __init__(self, doc, doclist):
+    self.doc = doc
+    self.doclist = doclist
+
+
+# ************************************************ utilities *************************************************
+  # --------------
+  # get leave bal
+  # --------------
+  def get_leave_bal(self, prev_fyear):
+    # leaves allocates
+    tot_leaves_all = sql("select SUM(total_leaves_allocated) from `tabLeave Allocation` where employee = '%s' and leave_type = '%s' and fiscal_year = '%s' and docstatus = 1 and name != '%s'" % (self.doc.employee, self.doc.leave_type, prev_fyear, self.doc.name))
+    tot_leaves_all = tot_leaves_all and flt(tot_leaves_all[0][0]) or 0
+
+    # leaves applied
+    tot_leaves_app = sql("select SUM(total_leave_days) from `tabLeave Application` where employee = '%s' and leave_type = '%s' and fiscal_year = '%s' and docstatus = 1" % (self.doc.employee, self.doc.leave_type, prev_fyear))
+    tot_leaves_app = tot_leaves_app and flt(tot_leaves_app[0][0]) or 0
+
+    return tot_leaves_all - tot_leaves_app
+
+ 
+# ******************************************** client triggers ***********************************************
+
+  # ------------------------------------------------------------------
+  # check whether carry forward is allowed or not for this leave type
+  # ------------------------------------------------------------------
+  def allow_carry_forward(self):
+    cf = sql("select is_carry_forward from `tabLeave Type` where name = %s" , self.doc.leave_type)
+    cf = cf and cint(cf[0][0]) or 0
+    if not cf:
+      set(self.doc,'carry_forward',0)
+      msgprint("Sorry ! You cannot carry forward %s" % (self.doc.leave_type))
+      raise Exception
+
+  # ---------------------------
+  # get carry forwarded leaves
+  # ---------------------------
+  def get_carry_forwarded_leaves(self):
+    if self.doc.carry_forward: self.allow_carry_forward()
+    prev_fiscal_year = sql("select name from `tabFiscal Year` where name < '%s' order by name desc limit 1" % (self.doc.fiscal_year))
+    prev_fiscal_year = prev_fiscal_year and prev_fiscal_year[0][0] or ''
+    ret = {}
+    prev_bal = 0
+    if prev_fiscal_year and cint(self.doc.carry_forward) == 1:
+      prev_bal = self.get_leave_bal(prev_fiscal_year)
+    ret = {
+      'carry_forwarded_leaves'  :  prev_bal,
+      'total_leaves_allocated'   :  flt(prev_bal) + flt(self.doc.new_leaves_allocated)
+    }
+    return str(ret)
+
+
+# ********************************************** validate *****************************************************
+
+  # ---------------------------
+  # get total allocated leaves
+  # ---------------------------
+  def get_total_allocated_leaves(self):
+    leave_det = eval(self.get_carry_forwarded_leaves())
+    set(self.doc,'carry_forwarded_leaves',flt(leave_det['carry_forwarded_leaves']))
+    set(self.doc,'total_leaves_allocated',flt(leave_det['total_leaves_allocated']))
+
+  # ------------------------------------------------------------------------------------
+  # validate leave (i.e. check whether leave for same type is already allocated or not)
+  # ------------------------------------------------------------------------------------
+  def validate_allocated_leave(self):
+    l = sql("select name from `tabLeave Allocation` where employee = '%s' and leave_type = '%s' and fiscal_year = '%s' and docstatus = 1" % (self.doc.employee, self.doc.leave_type, self.doc.fiscal_year)) 
+    l = l and l[0][0] or ''
+    if l:
+      msgprint("%s is allocated to Employee: %s for Fiscal Year : %s. Please refer Leave Allocation : %s" % (self.doc.leave_type, self.doc.employee, self.doc.fiscal_year, l))
+      raise Exception
+
+  # ---------
+  # validate
+  # ---------
+  def validate(self):
+    self.validate_allocated_leave()
+
+  # ----------
+  # on update
+  # ----------
+  def on_update(self):
+    self.get_total_allocated_leaves()
+
+
+# ********************************************** cancel ********************************************************
+
+  # -------------------------
+  # check for applied leaves
+  # -------------------------
+  def check_for_leave_application(self):
+    chk = sql("select name from `tabLeave Application` where employee = '%s' and leave_type = '%s' and fiscal_year = '%s' and docstatus = 1" % (self.doc.employee, self.doc.leave_type, self.doc.fiscal_year))
+    chk = chk and chk[0][0] or ''
+    if chk:
+      msgprint("Cannot cancel this Leave Allocation as Employee : %s has already applied for %s. Please check Leave Application : %s" % (self.doc.employee, self.doc.leave_type, chk))
+      raise Exception
+
+  # -------
+  # cancel
+  # -------
+  def on_cancel(self):
+    self.check_for_leave_application()
diff --git a/hr/doctype/leave_allocation/leave_allocation.txt b/hr/doctype/leave_allocation/leave_allocation.txt
new file mode 100644
index 0000000..0b0c96c
--- /dev/null
+++ b/hr/doctype/leave_allocation/leave_allocation.txt
@@ -0,0 +1,293 @@
+# DocType, Leave Allocation
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2011-02-10 17:24:59',
+		'docstatus': 0,
+		'modified': '2011-02-17 13:47:13',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'_last_update': '1299063937',
+		'autoname': 'LAL/.#####',
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'module': 'HR',
+		'name': '__common__',
+		'search_fields': 'employee,employee_name,leave_type,total_leaves_allocated,fiscal_year',
+		'section_style': 'Simple',
+		'server_code_error': ' ',
+		'show_in_menu': 0,
+		'version': 1565
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Leave Allocation',
+		'parentfield': 'fields',
+		'parenttype': 'DocType'
+	},
+
+	# These values are common for all DocPerm
+	{
+		'doctype': 'DocPerm',
+		'name': '__common__',
+		'parent': 'Leave Allocation',
+		'parentfield': 'permissions',
+		'parenttype': 'DocType',
+		'read': 1
+	},
+
+	# DocType, Leave Allocation
+	{
+		'doctype': 'DocType',
+		'name': 'Leave Allocation'
+	},
+
+	# DocPerm
+	{
+		'amend': 1,
+		'cancel': 1,
+		'create': 1,
+		'doctype': 'DocPerm',
+		'idx': 1,
+		'match': 'owner',
+		'permlevel': 0,
+		'role': 'HR User',
+		'submit': 1,
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'amend': 0,
+		'cancel': 0,
+		'create': 0,
+		'doctype': 'DocPerm',
+		'idx': 2,
+		'match': 'owner',
+		'permlevel': 0,
+		'role': 'HR User',
+		'submit': 0,
+		'write': 0
+	},
+
+	# DocPerm
+	{
+		'amend': 1,
+		'cancel': 1,
+		'create': 1,
+		'doctype': 'DocPerm',
+		'idx': 3,
+		'permlevel': 0,
+		'role': 'HR Manager',
+		'submit': 1,
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 4,
+		'permlevel': 1,
+		'role': 'HR Manager'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'column_break1',
+		'fieldtype': 'Column Break',
+		'idx': 1,
+		'permlevel': 0,
+		'width': '50%'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'employee',
+		'fieldtype': 'Link',
+		'idx': 2,
+		'in_filter': 1,
+		'label': 'Employee',
+		'oldfieldname': 'employee',
+		'oldfieldtype': 'Link',
+		'options': 'Employee',
+		'permlevel': 0,
+		'reqd': 1,
+		'search_index': 1,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'employee_name',
+		'fieldtype': 'Data',
+		'idx': 3,
+		'in_filter': 1,
+		'label': 'Employee Name',
+		'permlevel': 1,
+		'search_index': 1
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'leave_type',
+		'fieldtype': 'Select',
+		'idx': 4,
+		'in_filter': 1,
+		'label': 'Leave Type',
+		'oldfieldname': 'leave_type',
+		'oldfieldtype': 'Link',
+		'options': '\nCasual Leave\nCompensatory Off\nLeave Without Pay\nPaternity Leave\nPrivilege Leave\nSick Leave',
+		'permlevel': 0,
+		'reqd': 1,
+		'search_index': 1,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'default': 'Today',
+		'doctype': 'DocField',
+		'fieldname': 'posting_date',
+		'fieldtype': 'Date',
+		'hidden': 0,
+		'idx': 5,
+		'label': 'Posting Date',
+		'no_copy': 1,
+		'oldfieldname': 'date',
+		'oldfieldtype': 'Date',
+		'permlevel': 1,
+		'reqd': 1,
+		'search_index': 0
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'fiscal_year',
+		'fieldtype': 'Select',
+		'idx': 6,
+		'in_filter': 1,
+		'label': 'Fiscal Year',
+		'oldfieldname': 'fiscal_year',
+		'oldfieldtype': 'Data',
+		'options': '\n2010-2011\n2011-2012\n2012-2013',
+		'permlevel': 0,
+		'reqd': 1,
+		'search_index': 1,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'description',
+		'fieldtype': 'Small Text',
+		'hidden': 0,
+		'idx': 7,
+		'label': 'Description',
+		'oldfieldname': 'reason',
+		'oldfieldtype': 'Small Text',
+		'permlevel': 0,
+		'width': '300px'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'column_break8',
+		'fieldtype': 'Column Break',
+		'idx': 8,
+		'permlevel': 0,
+		'width': '50%'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'carry_forward',
+		'fieldtype': 'Check',
+		'idx': 9,
+		'label': 'Carry Forward',
+		'permlevel': 0,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'carry_forwarded_leaves',
+		'fieldtype': 'Currency',
+		'idx': 10,
+		'label': 'Carry Forwarded Leaves',
+		'permlevel': 0,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'new_leaves_allocated',
+		'fieldtype': 'Currency',
+		'idx': 11,
+		'label': 'New Leaves Allocated',
+		'permlevel': 0,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'total_leaves_allocated',
+		'fieldtype': 'Currency',
+		'idx': 12,
+		'label': 'Total Leaves Allocated',
+		'permlevel': 1,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'amended_from',
+		'fieldtype': 'Data',
+		'hidden': 0,
+		'idx': 13,
+		'label': 'Amended From',
+		'oldfieldname': 'amended_from',
+		'oldfieldtype': 'Data',
+		'permlevel': 1,
+		'print_hide': 1
+	},
+
+	# DocField
+	{
+		'description': 'The date at which current entry is corrected in the system.',
+		'doctype': 'DocField',
+		'fieldname': 'amendment_date',
+		'fieldtype': 'Date',
+		'hidden': 0,
+		'idx': 14,
+		'label': 'Amendment Date',
+		'oldfieldname': 'amendment_date',
+		'oldfieldtype': 'Date',
+		'permlevel': 1,
+		'print_hide': 1
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/leave_application/__init__.py b/hr/doctype/leave_application/__init__.py
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/leave_application/__init__.py
diff --git a/hr/doctype/leave_application/leave_application.js b/hr/doctype/leave_application/leave_application.js
new file mode 100755
index 0000000..ba00a31
--- /dev/null
+++ b/hr/doctype/leave_application/leave_application.js
@@ -0,0 +1,88 @@
+// ****************************************** onload ********************************************************
+cur_frm.cscript.onload = function(doc, dt, dn) {
+  if(!doc.posting_date) set_multiple(dt,dn,{posting_date:get_today()});
+}
+
+
+// ************************************** client triggers ***************************************************
+// ---------
+// employee
+// ---------
+cur_frm.add_fetch('employee','employee_name','employee_name');
+
+cur_frm.cscript.employee = function (doc, dt, dn){
+  get_leave_balance(doc, dt, dn);
+}
+
+// ------------
+// fiscal_year
+// ------------
+cur_frm.cscript.fiscal_year = function (doc, dt, dn){
+  get_leave_balance(doc, dt, dn);
+}
+
+// -----------
+// leave type
+// -----------
+cur_frm.cscript.leave_type = function (doc, dt, dn){
+  get_leave_balance(doc, dt, dn);
+}
+
+// ---------
+// half day
+// ---------
+cur_frm.cscript.half_day = function(doc, dt, dn) {
+  if(doc.from_date) {
+    set_multiple(dt,dn,{to_date:doc.from_date});
+    calculate_total_days(doc, dt, dn);
+  }
+}
+
+// ---------
+// from date
+// ---------
+cur_frm.cscript.from_date = function(doc, dt, dn) {
+  if(cint(doc.half_day) == 1){
+    set_multiple(dt,dn,{to_date:doc.from_date});
+  }
+  calculate_total_days(doc, dt, dn);
+}
+
+// --------
+// to date
+// --------
+cur_frm.cscript.to_date = function(doc, dt, dn) {
+  if(cint(doc.half_day) == 1 && doc.from_date && doc.from_date != doc.to_date){
+    msgprint("To Date should be same as From Date for Half Day leave");
+    return;
+  }
+  if(cint(doc.half_day) == 1){
+    set_multiple(dt,dn,{to_date:doc.from_date});
+  }
+  calculate_total_days(doc, dt, dn);
+}
+
+
+// ******************************************* utilities ****************************************************
+
+// ------------------
+// get leave balance
+// ------------------
+get_leave_balance = function(doc, dt, dn) {
+  if(doc.employee && doc.leave_type && doc.fiscal_year)
+    get_server_fields('get_leave_balance', '','', doc, dt, dn, 1);
+}
+
+// ---------------
+// calculate days
+// ---------------
+calculate_total_days = function(doc, dt, dn) {
+  if(doc.from_date && doc.to_date){
+    if(cint(doc.half_day) == 1) set_multiple(dt,dn,{total_leave_days:0.5});
+    else{
+      //d = new DateFn();
+      //set_multiple(dt,dn,{total_leave_days:d.get_diff(d.str_to_obj(doc.to_date),d.str_to_obj(doc.from_date))+1});
+      get_server_fields('get_total_leave_days', '', '', doc, dt, dn, 1);
+    }
+  }
+}
diff --git a/hr/doctype/leave_application/leave_application.py b/hr/doctype/leave_application/leave_application.py
new file mode 100755
index 0000000..5f69c63
--- /dev/null
+++ b/hr/doctype/leave_application/leave_application.py
@@ -0,0 +1,124 @@
+# Please edit this list and import only required elements
+import webnotes
+
+from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, generate_hash, getTraceback, get_defaults, get_first_day, get_last_day, getdate, has_common, month_name, now, nowdate, replace_newlines, sendmail, set_default, str_esc_quote, user_format, validate_email_add
+from webnotes.model import db_exists
+from webnotes.model.doc import Document, addchild, removechild, getchildren, make_autoname, SuperDocType
+from webnotes.model.doclist import getlist, copy_doclist
+from webnotes.model.code import get_obj, get_server_obj, run_server_obj, updatedb, check_syntax
+from webnotes import session, form, is_testing, msgprint, errprint
+
+set = webnotes.conn.set
+sql = webnotes.conn.sql
+get_value = webnotes.conn.get_value
+in_transaction = webnotes.conn.in_transaction
+convert_to_lists = webnotes.conn.convert_to_lists
+import datetime
+	
+# -----------------------------------------------------------------------------------------
+class DocType:
+  def __init__(self, doc, doclist):
+    self.doc = doc
+    self.doclist = doclist 
+
+
+# ******************************************** client triggers ***********************************************
+
+  # ------------------
+  # get leave balance
+  # ------------------
+  def get_leave_balance(self):
+    leave_all = sql("select total_leaves_allocated from `tabLeave Allocation` where employee = '%s' and leave_type = '%s' and fiscal_year = '%s' and docstatus = 1" % (self.doc.employee, self.doc.leave_type, self.doc.fiscal_year))
+    leave_all = leave_all and flt(leave_all[0][0]) or 0
+    leave_app = sql("select total_leave_days from `tabLeave Application` where employee = '%s' and leave_type = '%s' and fiscal_year = '%s' and docstatus = 1" % (self.doc.employee, self.doc.leave_type, self.doc.fiscal_year))
+    leave_app = leave_app and flt(leave_app[0][0]) or 0
+    ret = {'leave_balance':leave_all - leave_app}
+    return str(ret)
+
+
+# ************************************************ utilities *************************************************
+
+  # -------------------
+  # get total holidays
+  # -------------------
+  def get_holidays(self):
+    tot_hol = sql("select count(*) from `tabHoliday List Detail` h1, `tabHoliday List` h2, `tabEmployee` e1 where e1.name = '%s' and h1.parent = h2.name and e1.holiday_list = h2.name and h1.holiday_date between '%s' and '%s'"% (self.doc.employee, self.doc.from_date, self.doc.to_date))
+    if not tot_hol:
+      tot_hol = sql("select count(*) from `tabHoliday List Detail` h1, `tabHoliday List` h2 where h1.parent = h2.name and h1.holiday_date between '%s' and '%s' and ifnull(h2.is_default,0) = 1 and h2.fiscal_year = %s"% (self.doc.from_date, self.doc.to_date, self.doc.fiscal_year))
+    return tot_hol and flt(tot_hol[0][0]) or 0
+
+
+  # ---------------------
+  # get total leave days
+  # ---------------------
+  def get_total_leave_days(self):
+    tot_days = date_diff(self.doc.to_date, self.doc.from_date) + 1
+    holidays = self.get_holidays()
+    ret = {'total_leave_days':flt(tot_days)-flt(holidays)}
+    return str(ret)
+
+
+# ************************************************ validate *************************************************
+
+  # -----------------
+  # validate to date
+  # -----------------
+  def validate_to_date(self):
+    if (getdate(self.doc.to_date) < getdate(self.doc.from_date)):
+      msgprint("To date cannot be before from date")
+      raise Exception
+
+  # --------------------------------
+  # check whether leave type is lwp
+  # --------------------------------
+  def is_lwp(self):
+    lwp = sql("select is_lwp from `tabLeave Type` where name = %s", self.doc.leave_type)
+    return lwp and cint(lwp[0][0]) or 0
+
+  # ------------------------
+  # validate balance leaves
+  # ------------------------
+  def validate_balance_leaves(self):
+    if not self.is_lwp():
+      bal = self.get_leave_balance()
+      tot_leaves = self.get_total_leave_days()
+      bal, tot_leaves = eval(bal), eval(tot_leaves)
+      set(self.doc,'leave_balance',flt(bal['leave_balance']))
+      set(self.doc,'total_leave_days',flt(tot_leaves['total_leave_days']))
+      if flt(bal['leave_balance']) < flt(tot_leaves['total_leave_days']):
+        msgprint("Employee : %s cannot apply for %s of more than %s days" % (self.doc.employee, self.doc.leave_type, flt(bal['leave_balance'])))
+        raise Exception
+
+  #
+  # validate overlapping leaves
+  #
+  def validate_leave_overlap(self):
+    for d in sql("""select name, leave_type, posting_date, from_date, to_date 
+      from `tabLeave Application` 
+      where 
+      (from_date <= %(to_date)s and to_date >= %(from_date)s)
+      and employee = %(employee)s
+      and docstatus = 1 
+      and name != %(name)s""", self.doc.fields, as_dict = 1):
+ 
+      msgprint("Employee : %s has already applied for %s between %s and %s on %s. Please refer Leave Application : %s" % (self.doc.employee, cstr(d['leave_type']), formatdate(d['from_date']), formatdate(d['to_date']), formatdate(d['posting_date']), d['name']), raise_exception = 1)
+
+  # ---------------------------------------------------------------------
+  # validate max days for which leave can be applied for particular type
+  # ---------------------------------------------------------------------
+  def validate_max_days(self):
+    max_days = sql("select max_days_allowed from `tabLeave Type` where name = '%s'" %(self.doc.leave_type))
+    max_days = max_days and flt(max_days[0][0]) or 0
+    if max_days and self.doc.total_leave_days > max_days:
+      msgprint("Sorry ! You cannot apply for %s for more than %s days" % (self.doc.leave_type, max_days))
+      raise Exception
+
+
+  # ---------
+  # validate
+  # ---------
+  def validate(self):
+    self.validate_to_date()
+    self.validate_balance_leaves()
+    self.validate_leave_overlap()
+    self.validate_max_days()
diff --git a/hr/doctype/leave_application/leave_application.txt b/hr/doctype/leave_application/leave_application.txt
new file mode 100644
index 0000000..a95f4ce
--- /dev/null
+++ b/hr/doctype/leave_application/leave_application.txt
@@ -0,0 +1,297 @@
+# DocType, Leave Application
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2011-02-10 14:10:08',
+		'docstatus': 0,
+		'modified': '2011-02-17 13:44:37',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'_last_update': '1305714022',
+		'autoname': 'LAP/.#####',
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'document_type': 'Transaction',
+		'module': 'HR',
+		'name': '__common__',
+		'search_fields': 'employee,employee_name,leave_type,from_date,to_date,total_leave_days,fiscal_year',
+		'section_style': 'Simple',
+		'show_in_menu': 0,
+		'subject': 'From %(employee_name)s, %(designation)s',
+		'tag_fields': 'leave_type',
+		'version': 18
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Leave Application',
+		'parentfield': 'fields',
+		'parenttype': 'DocType'
+	},
+
+	# These values are common for all DocPerm
+	{
+		'doctype': 'DocPerm',
+		'name': '__common__',
+		'parent': 'Leave Application',
+		'parentfield': 'permissions',
+		'parenttype': 'DocType',
+		'read': 1
+	},
+
+	# DocType, Leave Application
+	{
+		'doctype': 'DocType',
+		'name': 'Leave Application'
+	},
+
+	# DocPerm
+	{
+		'amend': 1,
+		'cancel': 1,
+		'create': 1,
+		'doctype': 'DocPerm',
+		'idx': 1,
+		'match': 'owner',
+		'permlevel': 0,
+		'submit': 1,
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'amend': 0,
+		'cancel': 0,
+		'create': 0,
+		'doctype': 'DocPerm',
+		'idx': 2,
+		'match': 'owner',
+		'permlevel': 0,
+		'submit': 0,
+		'write': 0
+	},
+
+	# DocPerm
+	{
+		'amend': 1,
+		'cancel': 1,
+		'create': 1,
+		'doctype': 'DocPerm',
+		'idx': 3,
+		'permlevel': 0,
+		'role': 'HR User',
+		'submit': 1,
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'amend': 1,
+		'cancel': 1,
+		'create': 1,
+		'doctype': 'DocPerm',
+		'idx': 4,
+		'permlevel': 0,
+		'role': 'HR Manager',
+		'submit': 1,
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 5,
+		'permlevel': 1,
+		'role': 'HR User'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 6,
+		'permlevel': 1,
+		'role': 'HR Manager'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'column_break1',
+		'fieldtype': 'Column Break',
+		'idx': 1,
+		'permlevel': 0,
+		'width': '50%'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'employee',
+		'fieldtype': 'Link',
+		'idx': 2,
+		'in_filter': 1,
+		'label': 'Employee',
+		'options': 'Employee',
+		'permlevel': 0,
+		'reqd': 1,
+		'search_index': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'employee_name',
+		'fieldtype': 'Data',
+		'idx': 3,
+		'in_filter': 1,
+		'label': 'Employee Name',
+		'permlevel': 1,
+		'search_index': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'leave_type',
+		'fieldtype': 'Select',
+		'idx': 4,
+		'in_filter': 1,
+		'label': 'Leave Type',
+		'options': 'link:Leave Type',
+		'permlevel': 0,
+		'reqd': 1,
+		'search_index': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'leave_balance',
+		'fieldtype': 'Currency',
+		'idx': 5,
+		'label': 'Leave Balance',
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'default': 'Today',
+		'doctype': 'DocField',
+		'fieldname': 'posting_date',
+		'fieldtype': 'Date',
+		'idx': 6,
+		'label': 'Posting Date',
+		'no_copy': 1,
+		'permlevel': 1,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'fiscal_year',
+		'fieldtype': 'Select',
+		'idx': 7,
+		'in_filter': 1,
+		'label': 'Fiscal Year',
+		'options': 'link:Fiscal Year',
+		'permlevel': 0,
+		'reqd': 1,
+		'search_index': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'column_break8',
+		'fieldtype': 'Column Break',
+		'idx': 8,
+		'permlevel': 0,
+		'width': '50%'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'half_day',
+		'fieldtype': 'Check',
+		'idx': 9,
+		'label': 'Half Day',
+		'permlevel': 0,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'from_date',
+		'fieldtype': 'Date',
+		'idx': 10,
+		'label': 'From Date',
+		'permlevel': 0,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'to_date',
+		'fieldtype': 'Date',
+		'idx': 11,
+		'label': 'To Date',
+		'permlevel': 0,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'total_leave_days',
+		'fieldtype': 'Currency',
+		'idx': 12,
+		'label': 'Total Leave Days',
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'description',
+		'fieldtype': 'Small Text',
+		'idx': 13,
+		'label': 'Description',
+		'permlevel': 0,
+		'width': '300px'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'amended_from',
+		'fieldtype': 'Data',
+		'idx': 14,
+		'label': 'Amended From',
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'amendment_date',
+		'fieldtype': 'Date',
+		'idx': 15,
+		'label': 'Amendment Date',
+		'permlevel': 1
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/leave_control_panel/__init__.py b/hr/doctype/leave_control_panel/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/leave_control_panel/__init__.py
diff --git a/hr/doctype/leave_control_panel/leave_control_panel.js b/hr/doctype/leave_control_panel/leave_control_panel.js
new file mode 100644
index 0000000..2e1f695
--- /dev/null
+++ b/hr/doctype/leave_control_panel/leave_control_panel.js
@@ -0,0 +1,28 @@
+cur_frm.cscript.onload = function(doc,dt,dn){
+  if(!doc.posting_date) set_multiple(dt,dn,{posting_date:get_today()});
+  if(!doc.leave_transaction_type) set_multiple(dt,dn,{leave_transaction_type:'Allocation'});
+
+}
+
+
+// Validation For To Date
+// ================================================================================================
+cur_frm.cscript.to_date = function(doc, cdt, cdn) {
+  $c('runserverobj', args={'method':'to_date_validation','docs':compress_doclist([doc])},
+    function(r, rt) {
+    var doc = locals[cdt][cdn];
+    if (r.message) {
+      alert("To date cannot be before from date");
+      doc.to_date = '';
+      refresh_field('to_date');
+    }
+    }
+  ); 
+}
+
+// Allocation Type
+// ================================================================================================
+cur_frm.cscript.allocation_type = function (doc, cdt, cdn){
+  doc.no_of_days = '';
+  refresh_field('no_of_days');
+}
diff --git a/hr/doctype/leave_control_panel/leave_control_panel.py b/hr/doctype/leave_control_panel/leave_control_panel.py
new file mode 100644
index 0000000..164a062
--- /dev/null
+++ b/hr/doctype/leave_control_panel/leave_control_panel.py
@@ -0,0 +1,73 @@
+# Please edit this list and import only required elements
+import webnotes
+
+from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, generate_hash, getTraceback, get_defaults, get_first_day, get_last_day, getdate, has_common, month_name, now, nowdate, replace_newlines, sendmail, set_default, str_esc_quote, user_format, validate_email_add
+from webnotes.model import db_exists
+from webnotes.model.doc import Document, addchild, removechild, getchildren, make_autoname, SuperDocType
+from webnotes.model.doclist import getlist, copy_doclist
+from webnotes.model.code import get_obj, get_server_obj, run_server_obj, updatedb, check_syntax
+from webnotes import session, form, is_testing, msgprint, errprint
+
+set = webnotes.conn.set
+sql = webnotes.conn.sql
+get_value = webnotes.conn.get_value
+in_transaction = webnotes.conn.in_transaction
+convert_to_lists = webnotes.conn.convert_to_lists
+	
+# -----------------------------------------------------------------------------------------
+
+
+class DocType:
+  def __init__(self, doc, doclist):
+    self.doc = doc
+    self.doclist = doclist   
+  
+  # Get Employees
+  # ********************************************************************** 
+  def get_employees(self):    
+    lst1 = [[self.doc.employee_type,"employment_type"],[self.doc.branch,"branch"],[self.doc.designation,"designation"],[self.doc.department, "department"],[self.doc.grade,"grade"]]
+    condition = "where "
+    flag = 0
+    for l in lst1:
+      if(l[0]):
+        if flag == 0:
+          condition += l[1] + "= '" + l[0] +"'"
+        else:
+          condition += " and " + l[1]+ "= '" +l[0] +"'"
+        flag = 1
+    emp_query = "select name from `tabEmployee` "
+    if flag == 1:
+      emp_query += condition 
+    e = sql(emp_query)
+    return e
+
+  # ----------------
+  # validate values
+  # ----------------
+  def validate_values(self):
+    val_dict = {self.doc.fiscal_year:'Fiscal Year', self.doc.leave_type:'Leave Type', self.doc.no_of_days:'New Leaves Allocated'}
+    for d in val_dict:
+      if not d:
+        msgprint("Please enter : "+val_dict[d])
+        raise Exception
+
+
+  # Allocation
+  # ********************************************************************** 
+  def allocate_leave(self):
+    self.validate_values()
+    for d in self.get_employees():
+      la = Document('Leave Allocation')
+      la.employee = cstr(d[0])
+      la.employee_name = get_value('Employee',cstr(d[0]),'employee_name')
+      la.leave_type = self.doc.leave_type
+      la.fiscal_year = self.doc.fiscal_year
+      la.posting_date = nowdate()
+      la.carry_forward = cint(self.doc.carry_forward)
+      la.new_leaves_allocated = flt(self.doc.no_of_days)
+      la_obj = get_obj(doc=la)
+      la_obj.doc.docstatus = 1
+      la_obj.validate()
+      la_obj.on_update()
+      la_obj.doc.save(1)
+    msgprint("Leaves Allocated Successfully")
diff --git a/hr/doctype/leave_control_panel/leave_control_panel.txt b/hr/doctype/leave_control_panel/leave_control_panel.txt
new file mode 100644
index 0000000..29999de
--- /dev/null
+++ b/hr/doctype/leave_control_panel/leave_control_panel.txt
@@ -0,0 +1,244 @@
+# DocType, Leave Control Panel
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-08-08 17:09:08',
+		'docstatus': 0,
+		'modified': '2011-02-12 15:42:00',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'allow_copy': 1,
+		'allow_email': 1,
+		'allow_print': 1,
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'hide_heading': 0,
+		'hide_toolbar': 0,
+		'issingle': 1,
+		'module': 'HR',
+		'name': '__common__',
+		'read_only': 1,
+		'section_style': 'Simple',
+		'server_code_error': ' ',
+		'show_in_menu': 0,
+		'version': 161
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Leave Control Panel',
+		'parentfield': 'fields',
+		'parenttype': 'DocType',
+		'permlevel': 0
+	},
+
+	# These values are common for all DocPerm
+	{
+		'doctype': 'DocPerm',
+		'name': '__common__',
+		'parent': 'Leave Control Panel',
+		'parentfield': 'permissions',
+		'parenttype': 'DocType',
+		'read': 1
+	},
+
+	# DocType, Leave Control Panel
+	{
+		'doctype': 'DocType',
+		'name': 'Leave Control Panel'
+	},
+
+	# DocPerm
+	{
+		'create': 1,
+		'doctype': 'DocPerm',
+		'idx': 1,
+		'permlevel': 0,
+		'role': 'System Manager',
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 2,
+		'permlevel': 1,
+		'role': 'System Manager'
+	},
+
+	# DocPerm
+	{
+		'create': 1,
+		'doctype': 'DocPerm',
+		'idx': 3,
+		'permlevel': 0,
+		'role': 'HR User',
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'create': 1,
+		'doctype': 'DocPerm',
+		'idx': 4,
+		'permlevel': 0,
+		'role': 'HR Manager',
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 5,
+		'permlevel': 1,
+		'role': 'HR User'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 6,
+		'permlevel': 1,
+		'role': 'HR Manager'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'column_break1',
+		'fieldtype': 'Column Break',
+		'idx': 1,
+		'width': '50%'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'Leave blank if considered for all employee types',
+		'doctype': 'DocField',
+		'fieldname': 'employee_type',
+		'fieldtype': 'Select',
+		'idx': 2,
+		'label': 'Employee Type',
+		'options': 'link:Employment Type'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'Leave blank if considered for all branches',
+		'doctype': 'DocField',
+		'fieldname': 'branch',
+		'fieldtype': 'Select',
+		'idx': 3,
+		'label': 'Branch',
+		'options': 'link:Branch'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'Leave blank if considered for all departments',
+		'doctype': 'DocField',
+		'fieldname': 'department',
+		'fieldtype': 'Select',
+		'idx': 4,
+		'label': 'Department',
+		'options': 'link:Department'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'Leave blank if considered for all designations',
+		'doctype': 'DocField',
+		'fieldname': 'designation',
+		'fieldtype': 'Select',
+		'idx': 5,
+		'label': 'Designation',
+		'options': 'link:Designation'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'Leave blank if considered for all grades',
+		'doctype': 'DocField',
+		'fieldname': 'grade',
+		'fieldtype': 'Select',
+		'idx': 6,
+		'label': 'Grade',
+		'options': 'link:Grade'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'column_break7',
+		'fieldtype': 'Column Break',
+		'idx': 7,
+		'width': '50%'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'fiscal_year',
+		'fieldtype': 'Select',
+		'idx': 8,
+		'in_filter': 1,
+		'label': 'Fiscal Year',
+		'options': 'link:Fiscal Year',
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'leave_type',
+		'fieldtype': 'Select',
+		'idx': 9,
+		'label': 'Leave Type',
+		'options': 'link:Leave Type',
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': "Please select Carry Forward if you also want to include previous fiscal year's balance leaves to this fiscal year",
+		'doctype': 'DocField',
+		'fieldname': 'carry_forward',
+		'fieldtype': 'Check',
+		'idx': 10,
+		'label': 'Carry Forward'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'no_of_days',
+		'fieldtype': 'Currency',
+		'idx': 11,
+		'label': 'New Leaves Allocated (In Days)',
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldtype': 'Button',
+		'idx': 12,
+		'label': 'Allocate',
+		'options': 'allocate_leave',
+		'trigger': 'Server'
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/leave_type/__init__.py b/hr/doctype/leave_type/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/leave_type/__init__.py
diff --git a/hr/doctype/leave_type/leave_type.js b/hr/doctype/leave_type/leave_type.js
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/leave_type/leave_type.js
diff --git a/hr/doctype/leave_type/leave_type.txt b/hr/doctype/leave_type/leave_type.txt
new file mode 100644
index 0000000..fb9aafd
--- /dev/null
+++ b/hr/doctype/leave_type/leave_type.txt
@@ -0,0 +1,152 @@
+# DocType, Leave Type
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-08-08 17:09:08',
+		'docstatus': 0,
+		'modified': '2011-02-10 17:05:15',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'allow_trash': 1,
+		'autoname': 'field:leave_type_name',
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'document_type': 'Master',
+		'module': 'HR',
+		'name': '__common__',
+		'section_style': 'Simple',
+		'server_code_error': ' ',
+		'show_in_menu': 0,
+		'version': 23
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Leave Type',
+		'parentfield': 'fields',
+		'parenttype': 'DocType'
+	},
+
+	# These values are common for all DocPerm
+	{
+		'cancel': 1,
+		'create': 1,
+		'doctype': 'DocPerm',
+		'name': '__common__',
+		'parent': 'Leave Type',
+		'parentfield': 'permissions',
+		'parenttype': 'DocType',
+		'permlevel': 0,
+		'read': 1,
+		'write': 1
+	},
+
+	# DocType, Leave Type
+	{
+		'doctype': 'DocType',
+		'name': 'Leave Type'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 1,
+		'role': 'System Manager'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 2,
+		'role': 'HR User'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 3,
+		'role': 'HR Manager'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'trash_reason',
+		'fieldtype': 'Small Text',
+		'idx': 1,
+		'label': 'Trash Reason',
+		'oldfieldname': 'trash_reason',
+		'oldfieldtype': 'Small Text',
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'leave_type_name',
+		'fieldtype': 'Data',
+		'idx': 2,
+		'label': 'Leave Type Name',
+		'oldfieldname': 'leave_type_name',
+		'oldfieldtype': 'Data',
+		'permlevel': 0,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'max_days_allowed',
+		'fieldtype': 'Data',
+		'idx': 3,
+		'label': 'Max Days Leave Allowed',
+		'oldfieldname': 'max_days_allowed',
+		'oldfieldtype': 'Data',
+		'permlevel': 0,
+		'reqd': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'is_carry_forward',
+		'fieldtype': 'Check',
+		'idx': 4,
+		'label': 'Is Carry Forward',
+		'oldfieldname': 'is_carry_forward',
+		'oldfieldtype': 'Check',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'is_encash',
+		'fieldtype': 'Check',
+		'hidden': 1,
+		'idx': 5,
+		'label': 'Is Encash',
+		'oldfieldname': 'is_encash',
+		'oldfieldtype': 'Check',
+		'permlevel': 0,
+		'print_hide': 1,
+		'report_hide': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'is_lwp',
+		'fieldtype': 'Check',
+		'idx': 6,
+		'label': 'Is LWP',
+		'permlevel': 0
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/other_income_detail/__init__.py b/hr/doctype/other_income_detail/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/other_income_detail/__init__.py
diff --git a/hr/doctype/other_income_detail/other_income_detail.txt b/hr/doctype/other_income_detail/other_income_detail.txt
new file mode 100644
index 0000000..232427d
--- /dev/null
+++ b/hr/doctype/other_income_detail/other_income_detail.txt
@@ -0,0 +1,141 @@
+# DocType, Other Income Detail
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-08-08 17:09:11',
+		'docstatus': 0,
+		'modified': '2010-09-20 14:06:57',
+		'modified_by': 'umair@iwebnotes.com',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'istable': 1,
+		'module': 'HR',
+		'name': '__common__',
+		'section_style': 'Simple',
+		'server_code_error': ' ',
+		'show_in_menu': 0,
+		'version': 6
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Other Income Detail',
+		'parentfield': 'fields',
+		'parenttype': 'DocType'
+	},
+
+	# These values are common for all DocPerm
+	{
+		'doctype': 'DocPerm',
+		'name': '__common__',
+		'parent': 'Other Income Detail',
+		'parentfield': 'permissions',
+		'parenttype': 'DocType',
+		'read': 1,
+		'role': 'System Manager'
+	},
+
+	# DocType, Other Income Detail
+	{
+		'doctype': 'DocType',
+		'name': 'Other Income Detail'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 1,
+		'permlevel': 0,
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 2,
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'particulars2',
+		'fieldtype': 'Small Text',
+		'idx': 1,
+		'label': 'Particulars',
+		'oldfieldname': 'particulars2',
+		'oldfieldtype': 'Small Text',
+		'permlevel': 1,
+		'reqd': 1,
+		'width': '200px'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'under_section2',
+		'fieldtype': 'Data',
+		'idx': 2,
+		'label': 'Under Section',
+		'oldfieldname': 'under_section2',
+		'oldfieldtype': 'Data',
+		'permlevel': 1,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'max_limit2',
+		'fieldtype': 'Currency',
+		'idx': 3,
+		'label': 'Max. Limit',
+		'oldfieldname': 'max_limit2',
+		'oldfieldtype': 'Currency',
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'actual_amount2',
+		'fieldtype': 'Currency',
+		'idx': 4,
+		'label': 'Actual Amount',
+		'oldfieldname': 'actual_amount2',
+		'oldfieldtype': 'Currency',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'eligible_amount2',
+		'fieldtype': 'Currency',
+		'idx': 5,
+		'label': 'Eligible Amount',
+		'oldfieldname': 'eligible_amount2',
+		'oldfieldtype': 'Currency',
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'modified_amount2',
+		'fieldtype': 'Currency',
+		'idx': 6,
+		'label': 'Modified Amount',
+		'oldfieldname': 'modified_amount2',
+		'oldfieldtype': 'Currency',
+		'permlevel': 0
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/payroll_rule/__init__.py b/hr/doctype/payroll_rule/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/payroll_rule/__init__.py
diff --git a/hr/doctype/payroll_rule/payroll_rule.js b/hr/doctype/payroll_rule/payroll_rule.js
new file mode 100644
index 0000000..9984ce4
--- /dev/null
+++ b/hr/doctype/payroll_rule/payroll_rule.js
@@ -0,0 +1,95 @@
+//omload function to set values in select field
+cur_frm.cscript.onload = function(doc, cdt, cdn){
+  var mydoc = doc
+  doc.select_master = 'Salary Structure';
+  refresh_field('select_master');
+
+  var call_back_master2 = function(mydoc){
+    $c('runserverobj', args={'method':'get_masters', 'docs':compress_doclist (make_doclist (doc.doctype,doc.name))},
+    function(r, rt) {
+    var doc = locals[mydoc.doctype][mydoc.name];
+     get_field(doc.doctype, 'select_master2' , doc.name).options = r.message;
+     refresh_field('select_master2');
+   
+    }
+  );
+  }
+  $c('runserverobj', args={'method':'maindoc_field', 'arg':doc.select_master,'docs':compress_doclist (make_doclist (doc.doctype,doc.name))},
+    function(r, rt) {
+     var doc = locals[mydoc.doctype][mydoc.name];
+     get_field(doc.doctype, 'select_field' , doc.name).options = r.message;
+     refresh_field('select_field');
+     call_back_master2(mydoc);
+    }
+  );
+}
+
+//select_master2 onchanged event function: it will add values to select_field2 based on select_master2 field 
+cur_frm.cscript.select_master2 = function(doc, cdt, cdn){
+  var mydoc = doc
+  doc.select_field2 ='';
+  refresh_field('select_field2');
+  doc.select_value='';
+  refresh_field('select_value');
+  $c('runserverobj', args={'method':'maindoc_field', 'arg':doc.select_master2, 'docs':compress_doclist (make_doclist (doc.doctype,doc.name))},
+    function(r, rt) {
+     var doc = locals[mydoc.doctype][mydoc.name];
+     get_field(doc.doctype, 'select_field2' , doc.name).options = r.message;
+     refresh_field('select_field2');
+     get_field(doc.doctype, 'select_value' , doc.name).options = '';
+     refresh_field('select_value'); 
+        
+    }
+  );
+}
+
+//select_field2 onchanged event function: used to add records values of selected master & their field_name
+cur_frm.cscript.select_field2 = function(doc, cdt, cdn){
+  var mydoc = doc
+  doc.select_value='';
+  refresh_field('select_value');
+  $c('runserverobj', args={'method':'get_values','docs':compress_doclist (make_doclist (doc.doctype,doc.name))},
+    function(r, rt) {
+     var doc = locals[mydoc.doctype][mydoc.name];
+     get_field(doc.doctype, 'select_value' , doc.name).options = r.message;
+     refresh_field('select_value');
+     
+    }
+  );
+}
+
+//transaction onchanged event function: used to add transaction terms to transaction term field
+cur_frm.cscript.transaction = function(doc, cdt, cdn){
+  var mydoc = doc
+  doc.transaction_term='';
+  refresh_field('transaction_term');
+  if(doc.transaction){
+    $c('runserverobj', args={'method':'add_transaction_terms','docs':compress_doclist (make_doclist (doc.doctype,doc.name))},
+      function(r, rt) {
+       var doc = locals[mydoc.doctype][mydoc.name];
+       get_field(doc.doctype, 'transaction_term' , doc.name).options = r.message;
+       refresh_field('transaction_term');
+     }
+    );
+  }
+}
+
+
+//right operand of condition :hide or unhide 
+cur_frm.cscript.right_operand = function(doc, cdt, cdn){
+  doc.select_master2 = "";
+  doc.select_field2 = "";
+  doc.select_value = "";
+  if(doc.right_operand =='Automatic'){
+    unhide_field('select_master2');
+    unhide_field('select_field2');
+    unhide_field('select_value');
+  }
+  else {
+   hide_field('select_master2');
+   hide_field('select_field2');
+   hide_field('select_value');
+  
+  }
+}
+
diff --git a/hr/doctype/payroll_rule/payroll_rule.py b/hr/doctype/payroll_rule/payroll_rule.py
new file mode 100644
index 0000000..67cbd52
--- /dev/null
+++ b/hr/doctype/payroll_rule/payroll_rule.py
@@ -0,0 +1,311 @@
+# Please edit this list and import only required elements
+import webnotes
+
+from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, generate_hash, getTraceback, get_defaults, get_first_day, get_last_day, getdate, has_common, month_name, now, nowdate, replace_newlines, sendmail, set_default, str_esc_quote, user_format, validate_email_add
+from webnotes.model import db_exists
+from webnotes.model.doc import Document, addchild, removechild, getchildren, make_autoname, SuperDocType
+from webnotes.model.doclist import getlist, copy_doclist
+from webnotes.model.code import get_obj, get_server_obj, run_server_obj, updatedb, check_syntax
+from webnotes import session, form, is_testing, msgprint, errprint
+
+set = webnotes.conn.set
+sql = webnotes.conn.sql
+get_value = webnotes.conn.get_value
+in_transaction = webnotes.conn.in_transaction
+convert_to_lists = webnotes.conn.convert_to_lists
+	
+# -----------------------------------------------------------------------------------------
+
+
+class DocType:
+  def __init__(self, doc, doclist=[]):
+    self.doc, self.doclist = doc, doclist  
+  
+  #----------------------------------------------------
+  # list of master whose module is payroll & isnot table
+  def get_masters(self):
+    master1 = sql("select name from `tabDocType` where module = 'Payroll' and (istable = 0 or istable is null)")
+    ret =''
+    if master1:
+      for i in master1:
+        ret += "\n" + i[0]
+    return ret
+    
+
+  #---------------------------------------------------- 
+  #list of all fields for which conditions can be set
+  def maindoc_field(self, select_form):
+    field_list=[]
+    
+    
+    field_info = sql("select label,fieldtype,options,fieldname from `tabDocField` where parent='%s' and fieldtype not in('Section Break','Column Break','Text','Small Text','Text Editor', 'Time', 'Check', 'Button','Code','HTML','Image','Blob','Password')"%select_form)
+    
+    for f in field_info:
+      sl=[]
+      for x in f:
+        sl.append(x)
+      field_list.append(sl)
+    ret = ''
+    
+    #=====================================================  
+    
+    for fi in field_list:
+      if fi[1] !='Select' or fi[1] !='Link' or fi[1] !='Table':
+        ret += "\n" + cstr(select_form) + ':' + fi[0]
+      elif fi[1] =='Select':
+        op = fi[2].split(':')
+        if op[0] != 'link':
+          ret += "\n" + cstr(select_form) + ':' +fi[0]
+        #========  
+        # linked doctype field list
+    
+    #=====================================================  
+    
+    for fi in field_list:    
+      if fi[1] == 'Link':
+        flist=sql("select label from tabDocField where parent='%s' and fieldtype in ('Data', 'Int', 'Select','Currency','Float','Link')"%fi[2])
+        for f in flist:
+          ret += "\n" + fi[0] + ':' +f[0]
+      elif fi[1] == 'Select':
+        op = fi[2].split(':')
+        if op[0] == 'link':
+          flist=sql("select label from tabDocField where parent='%s' and fieldtype in ('Data', 'Select', 'Int','Currency','Float','Link')"%op[1])
+          for f in flist:
+            ret += "\n" + fi[0] + ':' +f[0]
+
+    return ret
+
+
+  #----------------------------------------------------  
+  # function for finding fieldname,datatype of mentioned label
+  def field_info(self,label,parent):
+    field_name=sql("select fieldname from tabDocField where parent='%s' and label='%s'" %(parent,label))[0][0]
+    if field_name: 
+      datatype=sql("select fieldtype from `tabDocField` where fieldname='%s' and parent='%s'" %(field_name,parent))[0][0]
+      ret={'fieldnm':field_name,'datatype':datatype}
+    
+    return ret
+  
+  #----------------------------------------------------
+  def compare_string(self,first,second,op):
+
+    if op=='Equals':
+      if first.lower()==second.lower():
+        return 'true'
+      else:
+        return 'false'
+    elif op=='Not Equals':
+      if first.lower()!=second.lower():
+        return 'true'
+      else:
+        return 'false'
+    elif op=='Greater than':
+      if first.lower()>second.lower():
+        return 'true'
+      else:
+        return 'false'
+    elif op=='Greater than or Equals':
+      if first.lower()>=second.lower():
+        return 'true'
+      else:
+        return 'false'
+    elif op=='Less than':
+      if first.lower()<second.lower():
+        return 'true'
+      else:
+        return 'false'
+    elif op=='Less than or Equals':
+      if first.lower()<=second.lower():
+        return 'true'
+      else:
+        return 'false'
+ 
+  
+  #----------------------------------------------------
+  #evalute operator
+  def eval_operator(self,op):
+    op_sign =''
+    if op=='Equals':
+      op_sign='=='
+    elif op=='Not Equals':
+      op_sign='!='
+    elif op=='Greater than':
+      op_sign='>'
+    elif op=='Greater than or Equals':
+      op_sign='>='
+    elif op=='Less than':
+      op_sign='<'
+    elif op=='Less than or Equals':
+      op_sign='<='
+    
+    return op_sign
+  
+  #----------------------------------------------------  
+  #evaluation condition
+  def eval_condition(self,field_dict,form_val,value,operator):
+    if field_dict['datatype']=='Data' or field_dict['datatype']=='Select' or field_dict['datatype'] =='Link':
+      
+      if self.compare_string(cstr(form_val),cstr(value),operator)=='false':
+        cond_hold='No'
+      else:
+        cond_hold='Yes'
+    else:
+      op_sign = self.eval_operator(operator)  
+      chk_cond=str(form_val) + str(op_sign) + str(value)
+      errprint(chk_cond)
+      if eval(chk_cond):
+        cond_hold='Yes'
+      else:
+        cond_hold='No'
+   
+    return cond_hold
+  
+  #----------------------------------------------------
+  # fetching the value from the form
+  def find_value(self,fld_nm,tab_nm,rec_nm,child=0):
+    if child == 0:
+      form_val=sql("select %s from `tab%s` where name='%s'"%(fld_nm,tab_nm,rec_nm))
+    
+    elif child == 1:
+      form_val=sql("select %s from `tab%s` where parent='%s'"%(fld_nm,tab_nm,rec_nm))
+    
+    return form_val and form_val[0][0]
+  
+  #----------------------------------------------------
+  # checking with main doctype  
+  def chk_from_main_dt(self,master,label1,value,operator,form_obj):
+    cond_hold = ''
+    field_dict = self.field_info(label1,master) #getting fieldname info
+    form_val=self.find_value(field_dict['fieldnm'],master,form_obj.doc.name) # find value
+   
+    if form_val :
+      cond_hold = self.eval_condition(field_dict,form_val,value,operator)
+    elif not form_val and field_dict['datatype'] =='Currency' or field_dict['datatype'] =='Float' or field_dict['datatype'] =='Int':
+      
+      form_val = 0.0
+      cond_hold = self.eval_condition(field_dict,form_val,value,operator)
+    return cond_hold
+
+  #----------------------------------------------------  
+  #checking with child doctype
+  def chk_from_child_dt(self,first_label,second_label,value,operator,form_obj):
+    cond_hold = ''
+    field_dict = self.field_info(second_label,first_label)
+    form_val=self.find_value(field_dict['fieldnm'],first_label,form_obj.doc.name,1) #fetching the value in current form from a table
+    if form_val or form_val==0:
+      cond_hold = self.eval_condition(field_dict,form_val,value,operator)
+    
+    return cond_hold
+
+  #----------------------------------------------------
+  # if checking is with any linked doctype means first_label field from the doctype for which rule is given and second_label field from the doctype with which first_label is linked  
+  
+  def chk_from_link_dt(self,master,first_label,second_label,form_obj,value,operator):
+    cond_hold=''
+    field_list=[]
+    field_dict_first = self.field_info(first_label,master)
+    field_info = sql("select label,fieldtype,options,fieldname from `tabDocField` where parent='%s' and fieldtype not in('Section Break','Column Break','Text','Small Text','Text Editor', 'Time', 'Check', 'Button','Code','HTML','Image','Blob','Password')"%master)
+    for f in field_info:
+      sl=[]
+      for x in f:
+        sl.append(x)
+      field_list.append(sl)
+    for x in field_list:
+      if x[3] == field_dict_first['fieldnm']:
+        linked_to = x[2]
+    
+    lt = linked_to.split(':')
+    
+    #=================================================
+    if lt[0] == 'link':
+      field_dict_second = self.field_info(second_label,lt[1])
+      link_val=sql("select %s from `tab%s` where name='%s'"%(field_dict_first['fieldnm'],master,form_obj.doc.name))
+      if link_val and link_val[0][0]:
+        form_val = self.find_value(field_dict_second['fieldnm'],lt[1],link_val[0][0])
+        if form_val :
+          cond_hold = self.eval_condition(field_dict_second,form_val,value,operator)
+      
+    else:
+      field_dict_second = self.field_info(second_label,lt[0])
+      link_val=sql("select %s from `tab%s` where name='%s'"%(field_dict_first['fieldnm'],master,form_obj.doc.name))
+      if link_val and link_val[0][0]:
+        form_val = self.find_value(field_dict_second['fieldnm'],lt[0],link_val[0][0])
+        if form_val :
+          cond_hold = self.eval_condition(field_dict_second,form_val,value,operator)
+    
+    return cond_hold
+
+  #----------------------------------------------------
+  def evalute_rule(self,form_obj):
+    
+    all_cond_hold='Yes'
+    for d in getlist(self.doclist,'condition_details'):
+      master = d.rule_master
+      label = d.rule_field.split(':')  #break up checking condition
+      
+      #findout the value with which condition will be checked
+      if d.value:
+        chk_with_value = d.value
+        
+      
+      # label[0] is doctype name for which rule is given, label[1] field name of that doctype
+      if label[0] == master:
+        cond_hold = self.chk_from_main_dt(master,label[1],chk_with_value,d.operator,form_obj) 
+        if cond_hold =='No':
+          all_cond_hold = 'No'
+          break
+        elif cond_hold =='Yes':
+          all_cond_hold ='Yes'
+          
+      #=====================================================   
+      # if checking is with any linked doctype means label[0] field from the doctype for which rule is given and label[1] field from the doctype with which label[0] is linked
+      else:
+        cond_hold=self.chk_from_link_dt(master,label[0],label[1],form_obj,chk_with_value,d.operator)
+        if cond_hold =='No':
+          if d.exception == 'Yes':
+              msgprint(d.message)
+              raise Exception
+          elif d.exception=='No' or d.exception=='':
+              msgprint(d.message)
+          all_cond_hold = 'No'
+          break
+        elif cond_hold =='Yes':
+          all_cond_hold ='Yes'
+   
+    return all_cond_hold
+  
+  #----------------------------------------------------
+  #list of values of label & fieldname of selected master    
+  def get_values(self):
+    op = self.doc.select_field2.split(':')
+    
+    if op[0] == self.doc.master2:
+      field_info = sql("select label,fieldname from `tabDocField` where parent= '%s' AND label = '%s'" %(self.doc.select_master2,op[1]))
+      
+    else:
+      field_info = sql("select label,fieldname from `tabDocField` where parent= '%s' AND label = '%s'" %(op[0],op[1]))
+      
+    comp = sql("SELECT DISTINCT %s FROM `tab%s`" %(field_info[0][1],op[0]))
+    
+    res = ''
+    for i in comp:
+      res +=  "\n" + str(i[0])
+    
+    return cstr(res)
+
+  #----------------------------------------------------  
+  #add_details function add records in condition detail table     
+  def add_details(self):
+    
+    if((self.doc.select_master)  and (self.doc.select_field)):
+      if((self.doc.right_operand=='Automatic') and (self.doc.select_value=='')):
+        msgprint("Please select value")
+      else:
+        ch = addchild(self.doc,'condition_details','Condition Detail',0, self.doclist)
+        ch.rule_master = self.doc.select_master
+        ch.rule_field = self.doc.select_field
+        ch.operator = 'Equals'
+        ch.value = self.doc.select_value
+        ch.save()
+    else:
+      msgprint("Please select form, select field")
\ No newline at end of file
diff --git a/hr/doctype/payroll_rule/payroll_rule.txt b/hr/doctype/payroll_rule/payroll_rule.txt
new file mode 100644
index 0000000..0f6b734
--- /dev/null
+++ b/hr/doctype/payroll_rule/payroll_rule.txt
@@ -0,0 +1 @@
+[{'section_style': 'Tray', 'is_transaction_doc': None, 'creation': '2010-04-01 14:14:46', 'search_fields': None, 'module': 'Payroll', 'doctype': 'DocType', 'change_log': None, 'print_outline': '', 'owner': 'Administrator', 'in_dialog': None, 'in_create': None, 'read_only': None, 'allow_email': None, 'dt_template': None, 'hide_heading': None, 'issingle': None, 'allow_rename': None, 'smallicon': None, 'allow_attach': None, 'show_in_menu': 0, 'max_attachments': None, 'version': 167, 'menu_index': None, 'docstatus': 0, 'allow_copy': None, 'istable': None, 'description': None, 'parent': None, 'server_code': None, 'allow_trash': 1, 'allow_print': None, 'autoname': 'field:rule_name', 'client_script_core': None, 'client_string': None, 'use_template': None, 'modified_by': 'harshada@webnotestech.com', 'document_type': '', 'name': 'Payroll Rule', 'idx': None, 'hide_toolbar': None, 'colour': 'White:FFF', 'client_script': None, 'modified': '2010-10-11 18:22:26', 'server_code_error': ' ', 'name_case': '', 'parenttype': None, 'read_only_onload': None, 'server_code_core': None, 'server_code_compiled': None, 'parent_node': None, 'parentfield': None}, {'cancel': 1, 'amend': None, 'execute': None, 'modified_by': 'harshada@webnotestech.com', 'name': 'PERM00744', 'parent': 'Payroll Rule', 'read': 1, 'create': 1, 'creation': '2010-04-01 14:14:46', 'modified': '2010-10-11 18:22:26', 'submit': 0, 'doctype': 'DocPerm', 'write': 1, 'idx': 1, 'parenttype': 'DocType', 'role': 'Administrator', 'owner': 'Administrator', 'docstatus': 0, 'permlevel': 0, 'match': None, 'parentfield': 'permissions'}, {'cancel': 1, 'amend': None, 'execute': None, 'modified_by': 'harshada@webnotestech.com', 'name': 'PERM00815', 'parent': 'Payroll Rule', 'read': 1, 'create': 1, 'creation': '2010-04-19 09:58:46', 'modified': '2010-10-11 18:22:26', 'submit': None, 'doctype': 'DocPerm', 'write': 1, 'idx': 2, 'parenttype': 'DocType', 'role': 'HR Manager', 'owner': 'harshada@webnotestech.com', 'docstatus': 0, 'permlevel': 0, 'match': None, 'parentfield': 'permissions'}, {'cancel': 1, 'amend': None, 'execute': None, 'modified_by': 'harshada@webnotestech.com', 'name': 'PERM00816', 'parent': 'Payroll Rule', 'read': 1, 'create': 1, 'creation': '2010-04-19 09:58:46', 'modified': '2010-10-11 18:22:26', 'submit': None, 'doctype': 'DocPerm', 'write': 1, 'idx': 3, 'parenttype': 'DocType', 'role': 'HR User', 'owner': 'harshada@webnotestech.com', 'docstatus': 0, 'permlevel': 0, 'match': None, 'parentfield': 'permissions'}, {'cancel': None, 'amend': None, 'execute': None, 'modified_by': 'harshada@webnotestech.com', 'name': 'PERM01117', 'parent': 'Payroll Rule', 'read': 1, 'create': None, 'creation': '2010-08-12 16:33:07', 'modified': '2010-10-11 18:22:26', 'submit': None, 'doctype': 'DocPerm', 'write': None, 'idx': 4, 'parenttype': 'DocType', 'role': 'HR User', 'owner': 'harshada@webnotestech.com', 'docstatus': 0, 'permlevel': 1, 'match': None, 'parentfield': 'permissions'}, {'cancel': None, 'amend': None, 'execute': None, 'modified_by': 'harshada@webnotestech.com', 'name': 'PERM01118', 'parent': 'Payroll Rule', 'read': 1, 'create': None, 'creation': '2010-08-12 16:33:07', 'modified': '2010-10-11 18:22:26', 'submit': None, 'doctype': 'DocPerm', 'write': None, 'idx': 5, 'parenttype': 'DocType', 'role': 'Administrator', 'owner': 'harshada@webnotestech.com', 'docstatus': 0, 'permlevel': 1, 'match': None, 'parentfield': 'permissions'}, {'cancel': None, 'amend': None, 'execute': None, 'modified_by': 'harshada@webnotestech.com', 'name': 'PERM01119', 'parent': 'Payroll Rule', 'read': 1, 'create': None, 'creation': '2010-08-12 16:33:07', 'modified': '2010-10-11 18:22:26', 'submit': None, 'doctype': 'DocPerm', 'write': None, 'idx': 6, 'parenttype': 'DocType', 'role': 'HR Manager', 'owner': 'harshada@webnotestech.com', 'docstatus': 0, 'permlevel': 1, 'match': None, 'parentfield': 'permissions'}, {'no_copy': None, 'oldfieldtype': 'Small Text', 'creation': '2010-04-20 14:06:44', 'doctype': 'DocField', 'oldfieldname': 'trash_reason', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Trash Reason', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 1, 'description': None, 'parent': 'Payroll Rule', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04856', 'idx': 1, 'default': None, 'colour': None, 'modified': '2010-10-11 18:22:26', 'parenttype': 'DocType', 'fieldname': 'trash_reason', 'fieldtype': 'Small Text', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Section Break', 'creation': '2010-04-06 14:20:43', 'doctype': 'DocField', 'oldfieldname': None, 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Payroll Rule', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Payroll Rule', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04635', 'idx': 2, 'default': None, 'colour': None, 'modified': '2010-10-11 18:22:26', 'parenttype': 'DocType', 'fieldname': None, 'fieldtype': 'Section Break', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Data', 'creation': '2010-04-01 14:14:46', 'doctype': 'DocField', 'oldfieldname': 'rule_name', 'owner': 'Administrator', 'reqd': 1, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Rule Name', 'width': None, 'trigger': '', 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Payroll Rule', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04485', 'idx': 3, 'default': None, 'colour': 'White:FFF', 'modified': '2010-10-11 18:22:26', 'parenttype': 'DocType', 'fieldname': 'rule_name', 'fieldtype': 'Data', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Int', 'creation': '2010-04-01 14:14:47', 'doctype': 'DocField', 'oldfieldname': 'rule_priority', 'owner': 'Administrator', 'reqd': 1, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Rule Priority', 'width': None, 'trigger': '', 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': '', 'parent': 'Payroll Rule', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04487', 'idx': 4, 'default': None, 'colour': 'White:FFF', 'modified': '2010-10-11 18:22:26', 'parenttype': 'DocType', 'fieldname': 'rule_priority', 'fieldtype': 'Int', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Section Break', 'creation': '2010-04-01 14:14:47', 'doctype': 'DocField', 'oldfieldname': None, 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Operand', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Payroll Rule', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04488', 'idx': 5, 'default': None, 'colour': None, 'modified': '2010-10-11 18:22:26', 'parenttype': 'DocType', 'fieldname': None, 'fieldtype': 'Section Break', 'options': 'Simple', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Column Break', 'creation': '2010-04-01 14:14:47', 'doctype': 'DocField', 'oldfieldname': None, 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Left Operand', 'width': '50%', 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Payroll Rule', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04489', 'idx': 6, 'default': None, 'colour': None, 'modified': '2010-10-11 18:22:26', 'parenttype': 'DocType', 'fieldname': None, 'fieldtype': 'Column Break', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Data', 'creation': '2010-04-01 14:14:47', 'doctype': 'DocField', 'oldfieldname': 'select_master', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Select Form', 'width': None, 'trigger': '', 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 1, 'description': None, 'parent': 'Payroll Rule', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04490', 'idx': 7, 'default': 'Salary Structure', 'colour': 'White:FFF', 'modified': '2010-10-11 18:22:26', 'parenttype': 'DocType', 'fieldname': 'select_master', 'fieldtype': 'Data', 'options': '', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Select', 'creation': '2010-04-01 14:14:47', 'doctype': 'DocField', 'oldfieldname': 'select_field', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Select Field', 'width': None, 'trigger': '', 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Payroll Rule', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04491', 'idx': 8, 'default': None, 'colour': 'White:FFF', 'modified': '2010-10-11 18:22:26', 'parenttype': 'DocType', 'fieldname': 'select_field', 'fieldtype': 'Select', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Select', 'creation': '2010-04-01 14:14:47', 'doctype': 'DocField', 'oldfieldname': 'right_operand', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Select Right Operand', 'width': None, 'trigger': 'Client', 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Payroll Rule', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04492', 'idx': 9, 'default': '', 'colour': 'White:FFF', 'modified': '2010-10-11 18:22:26', 'parenttype': 'DocType', 'fieldname': 'right_operand', 'fieldtype': 'Select', 'options': '\nManual\nAutomatic', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Button', 'creation': '2010-04-01 14:14:47', 'doctype': 'DocField', 'oldfieldname': 'add_condition', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Add', 'width': None, 'trigger': 'Server', 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': 'first select left operand and/or right operand then press Add Button to add condition in Define Rule.', 'parent': 'Payroll Rule', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04493', 'idx': 10, 'default': '', 'colour': 'White:FFF', 'modified': '2010-10-11 18:22:26', 'parenttype': 'DocType', 'fieldname': 'add_condition', 'fieldtype': 'Button', 'options': 'add_details', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Column Break', 'creation': '2010-04-01 14:14:47', 'doctype': 'DocField', 'oldfieldname': 'right_operand1', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Right Operand', 'width': '50%', 'trigger': '', 'depends_on': None, 'docstatus': 0, 'hidden': 0, 'permlevel': 0, 'description': None, 'parent': 'Payroll Rule', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04494', 'idx': 11, 'default': None, 'colour': 'White:FFF', 'modified': '2010-10-11 18:22:26', 'parenttype': 'DocType', 'fieldname': 'right_operand1', 'fieldtype': 'Column Break', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Select', 'creation': '2010-04-01 14:14:47', 'doctype': 'DocField', 'oldfieldname': 'select_master2', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Select Form', 'width': None, 'trigger': 'Client', 'depends_on': None, 'docstatus': 0, 'hidden': 1, 'permlevel': 0, 'description': None, 'parent': 'Payroll Rule', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04495', 'idx': 12, 'default': None, 'colour': 'White:FFF', 'modified': '2010-10-11 18:22:26', 'parenttype': 'DocType', 'fieldname': 'select_master2', 'fieldtype': 'Select', 'options': '', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Select', 'creation': '2010-04-01 14:14:47', 'doctype': 'DocField', 'oldfieldname': 'select_field2', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Select Field', 'width': None, 'trigger': 'Client', 'depends_on': None, 'docstatus': 0, 'hidden': 1, 'permlevel': 0, 'description': None, 'parent': 'Payroll Rule', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04496', 'idx': 13, 'default': None, 'colour': 'White:FFF', 'modified': '2010-10-11 18:22:26', 'parenttype': 'DocType', 'fieldname': 'select_field2', 'fieldtype': 'Select', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Select', 'creation': '2010-04-01 14:14:47', 'doctype': 'DocField', 'oldfieldname': 'select_value', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Select Value', 'width': None, 'trigger': '', 'depends_on': None, 'docstatus': 0, 'hidden': 1, 'permlevel': 0, 'description': None, 'parent': 'Payroll Rule', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04497', 'idx': 14, 'default': None, 'colour': 'White:FFF', 'modified': '2010-10-11 18:22:26', 'parenttype': 'DocType', 'fieldname': 'select_value', 'fieldtype': 'Select', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Section Break', 'creation': '2010-04-01 14:14:47', 'doctype': 'DocField', 'oldfieldname': None, 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Define Rule', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Payroll Rule', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04498', 'idx': 15, 'default': None, 'colour': None, 'modified': '2010-10-11 18:22:26', 'parenttype': 'DocType', 'fieldname': None, 'fieldtype': 'Section Break', 'options': 'Simple', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Table', 'creation': '2010-04-01 14:14:47', 'doctype': 'DocField', 'oldfieldname': 'condition_details', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Define Rule1', 'width': None, 'trigger': '', 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Payroll Rule', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04499', 'idx': 16, 'default': None, 'colour': 'White:FFF', 'modified': '2010-10-11 18:22:26', 'parenttype': 'DocType', 'fieldname': 'condition_details', 'fieldtype': 'Table', 'options': 'Condition Detail', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Section Break', 'creation': '2010-04-01 14:14:47', 'doctype': 'DocField', 'oldfieldname': None, 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Action Detail', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Payroll Rule', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04500', 'idx': 17, 'default': None, 'colour': None, 'modified': '2010-10-11 18:22:26', 'parenttype': 'DocType', 'fieldname': None, 'fieldtype': 'Section Break', 'options': 'Simple', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'HTML', 'creation': '2010-04-01 14:14:47', 'doctype': 'DocField', 'oldfieldname': None, 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Action html', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Payroll Rule', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04501', 'idx': 18, 'default': None, 'colour': None, 'modified': '2010-10-11 18:22:26', 'parenttype': 'DocType', 'fieldname': None, 'fieldtype': 'HTML', 'options': '<b>Specify actions to be taken  when conditions hold satisfied</b>', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Text', 'creation': '2010-04-01 14:14:47', 'doctype': 'DocField', 'oldfieldname': 'expression', 'owner': 'Administrator', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Expression', 'width': None, 'trigger': '', 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Payroll Rule', 'search_index': 1, 'allow_on_submit': None, 'icon': None, 'name': 'FL04502', 'idx': 19, 'default': None, 'colour': 'White:FFF', 'modified': '2010-10-11 18:22:26', 'parenttype': 'DocType', 'fieldname': 'expression', 'fieldtype': 'Text', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'Section Break', 'creation': '2010-04-05 17:10:06', 'doctype': 'DocField', 'oldfieldname': '', 'owner': 'harshada@webnotestech.com', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Help', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Payroll Rule', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04631', 'idx': 20, 'default': None, 'colour': None, 'modified': '2010-10-11 18:22:26', 'parenttype': 'DocType', 'fieldname': '', 'fieldtype': 'Section Break', 'options': None, 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'HTML', 'creation': '2010-04-05 17:00:57', 'doctype': 'DocField', 'oldfieldname': '', 'owner': 'harshada@webnotestech.com', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Help Rule Priority', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Payroll Rule', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04630', 'idx': 21, 'default': None, 'colour': None, 'modified': '2010-10-11 18:22:26', 'parenttype': 'DocType', 'fieldname': '', 'fieldtype': 'HTML', 'options': '<pre><h4>Rule Priority Help:</h4>\nLower rule priority number executes first. \nSuppose there are 2 rules:\nFirst rule priority: <b>1</b> and second priority: <b>2</b> \nTheir actions are:\nFor rule priority <b>1</b>\nBasic = 900\nhra = basic*0.5\n \nFor rule priority <b>2</b>\nBasic = 1000\n\nThen <b>1</b> priority action executes first and then <b>2</b> priority.\nAccordingly output will be:\nBasic = 1000 and hra = 450\n</pre>', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'HTML', 'creation': '2010-04-05 17:31:28', 'doctype': 'DocField', 'oldfieldname': '', 'owner': 'harshada@webnotestech.com', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Right Operand select help', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Payroll Rule', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04632', 'idx': 22, 'default': None, 'colour': None, 'modified': '2010-10-11 18:22:26', 'parenttype': 'DocType', 'fieldname': '', 'fieldtype': 'HTML', 'options': '<hr><br><pre><h4>Right Operand Select Help:</h4>\nIf you select Manual option then you have to write value in define rule\nIf you select Automatic option then right operand will open to select value</pre> <br>', 'report_hide': None, 'parentfield': 'fields'}, {'no_copy': None, 'oldfieldtype': 'HTML', 'creation': '2010-04-05 17:00:57', 'doctype': 'DocField', 'oldfieldname': None, 'owner': 'harshada@webnotestech.com', 'reqd': None, 'in_filter': None, 'print_hide': None, 'modified_by': 'harshada@webnotestech.com', 'label': 'Expression Help ', 'width': None, 'trigger': None, 'depends_on': None, 'docstatus': 0, 'hidden': None, 'permlevel': 0, 'description': None, 'parent': 'Payroll Rule', 'search_index': None, 'allow_on_submit': None, 'icon': None, 'name': 'FL04629', 'idx': 23, 'default': None, 'colour': None, 'modified': '2010-10-11 18:22:26', 'parenttype': 'DocType', 'fieldname': None, 'fieldtype': 'HTML', 'options': '<hr><br><pre><h4>Expression Help:</h4>\nPlease write all letters in lower case and place underscore in between two words.<br>\n<b>Sample Expression:</b>\nbasic=10000\nhouse_rent_allowance = basic *0.5 \ndearness_allowance = basic*0.2\nprovident_fund = 0.12*basic\ncheck = basic + house_rent_allowance +dearness_allowance\nif check<=3000 and check>0: professional_tax = 0\nif check<=6000 and check>3000: professional_tax = 20\nif check<=9000 and check>6000: professional_tax = 80\nif check<=12000 and check>9000: professional_tax = 150\nelse: professional_tax = 200\nemployees_state_insurance = basic*0.28\n\n<b>Note: Place : (colon) after if condition and after else </b>\n\nif condition:\n  someaction\nelse:\n  otheraction</pre> \n  ', 'report_hide': None, 'parentfield': 'fields'}]
\ No newline at end of file
diff --git a/hr/doctype/previous_experience_detail/__init__.py b/hr/doctype/previous_experience_detail/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/previous_experience_detail/__init__.py
diff --git a/hr/doctype/previous_experience_detail/previous_experience_detail.txt b/hr/doctype/previous_experience_detail/previous_experience_detail.txt
new file mode 100644
index 0000000..4cce723
--- /dev/null
+++ b/hr/doctype/previous_experience_detail/previous_experience_detail.txt
@@ -0,0 +1,127 @@
+# DocType, Previous Experience Detail
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-08-08 17:09:13',
+		'docstatus': 0,
+		'modified': '2010-09-20 14:06:57',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'istable': 1,
+		'module': 'HR',
+		'name': '__common__',
+		'section_style': 'Simple',
+		'server_code_error': ' ',
+		'show_in_menu': 0,
+		'version': 3
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Previous Experience Detail',
+		'parentfield': 'fields',
+		'parenttype': 'DocType',
+		'permlevel': 0
+	},
+
+	# These values are common for all DocPerm
+	{
+		'create': 1,
+		'doctype': 'DocPerm',
+		'idx': 1,
+		'name': '__common__',
+		'parent': 'Previous Experience Detail',
+		'parentfield': 'permissions',
+		'parenttype': 'DocType',
+		'permlevel': 0,
+		'read': 1,
+		'role': 'All',
+		'write': 1
+	},
+
+	# DocType, Previous Experience Detail
+	{
+		'doctype': 'DocType',
+		'name': 'Previous Experience Detail'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'company_name',
+		'fieldtype': 'Data',
+		'idx': 1,
+		'label': 'Company',
+		'oldfieldname': 'company_name',
+		'oldfieldtype': 'Data'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'designation',
+		'fieldtype': 'Data',
+		'idx': 2,
+		'label': 'Designation',
+		'oldfieldname': 'designation',
+		'oldfieldtype': 'Data'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'salary',
+		'fieldtype': 'Currency',
+		'idx': 3,
+		'label': 'Salary',
+		'oldfieldname': 'salary',
+		'oldfieldtype': 'Currency'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'address',
+		'fieldtype': 'Small Text',
+		'idx': 4,
+		'label': 'Address',
+		'oldfieldname': 'address',
+		'oldfieldtype': 'Small Text'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'contact',
+		'fieldtype': 'Data',
+		'idx': 5,
+		'label': 'Contact',
+		'oldfieldname': 'contact',
+		'oldfieldtype': 'Data'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'total_experience',
+		'fieldtype': 'Data',
+		'idx': 6,
+		'label': 'Total Experience',
+		'oldfieldname': 'total_experience',
+		'oldfieldtype': 'Data'
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/professional_training_details/__init__.py b/hr/doctype/professional_training_details/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/professional_training_details/__init__.py
diff --git a/hr/doctype/professional_training_details/professional_training_details.txt b/hr/doctype/professional_training_details/professional_training_details.txt
new file mode 100644
index 0000000..c94c6c5
--- /dev/null
+++ b/hr/doctype/professional_training_details/professional_training_details.txt
@@ -0,0 +1,100 @@
+# DocType, Professional Training Details
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-08-08 17:09:14',
+		'docstatus': 0,
+		'modified': '2010-09-20 14:06:57',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'istable': 1,
+		'module': 'HR',
+		'name': '__common__',
+		'section_style': 'Simple',
+		'server_code_error': ' ',
+		'show_in_menu': 0,
+		'version': 5
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Professional Training Details',
+		'parentfield': 'fields',
+		'parenttype': 'DocType',
+		'permlevel': 0
+	},
+
+	# DocType, Professional Training Details
+	{
+		'doctype': 'DocType',
+		'name': 'Professional Training Details'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'institute',
+		'fieldtype': 'Small Text',
+		'idx': 1,
+		'label': 'Institute / Conducted By',
+		'oldfieldname': 'institute',
+		'oldfieldtype': 'Small Text',
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'nature_of_training',
+		'fieldtype': 'Small Text',
+		'idx': 2,
+		'label': 'Program / Seminar Title',
+		'oldfieldname': 'nature_of_training',
+		'oldfieldtype': 'Small Text',
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'duration',
+		'fieldtype': 'Data',
+		'idx': 3,
+		'label': 'Duration',
+		'oldfieldname': 'duration',
+		'oldfieldtype': 'Data',
+		'reqd': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'loc',
+		'fieldtype': 'Data',
+		'idx': 4,
+		'label': 'Location',
+		'oldfieldname': 'loc',
+		'oldfieldtype': 'Data',
+		'reqd': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'certificate',
+		'fieldtype': 'Small Text',
+		'idx': 5,
+		'label': 'Certificate',
+		'oldfieldname': 'certificate',
+		'oldfieldtype': 'Small Text'
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/salary_slip/__init__.py b/hr/doctype/salary_slip/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/salary_slip/__init__.py
diff --git a/hr/doctype/salary_slip/salary_slip.js b/hr/doctype/salary_slip/salary_slip.js
new file mode 100644
index 0000000..8c76b1e
--- /dev/null
+++ b/hr/doctype/salary_slip/salary_slip.js
@@ -0,0 +1,120 @@
+cur_frm.add_fetch('employee', 'company', 'company');
+
+// On load
+// -------------------------------------------------------------------
+cur_frm.cscript.onload = function(doc,dt,dn){
+  if((cint(doc.__islocal) == 1) && !doc.amended_from){
+    var today=new Date();
+    month = (today.getMonth()+01).toString();
+    if(month.length>1) doc.month = month;
+    else doc.month = '0'+month;
+		doc.fiscal_year = sys_defaults['fiscal_year'];
+    refresh_many(['month', 'fiscal_year']);
+    cur_frm.cscript.fiscal_year(doc, dt, dn);
+  }
+}
+
+// Get leave details
+//---------------------------------------------------------------------
+cur_frm.cscript.fiscal_year = function(doc,dt,dn){
+    $c_obj(make_doclist(doc.doctype,doc.name), 'get_emp_and_leave_details','',function(r, rt) {
+      var doc = locals[dt][dn];
+      cur_frm.refresh();
+      calculate_all(doc, dt, dn);
+    });
+}
+
+cur_frm.cscript.month = cur_frm.cscript.employee = cur_frm.cscript.fiscal_year;
+
+// Calculate total if lwp exists
+// ------------------------------------------------------------------------
+cur_frm.cscript.leave_without_pay = function(doc,dt,dn){
+  doc.payment_days = cint(doc.total_days_in_month) - cint(doc.leave_without_pay);
+  refresh_field('payment_days');
+  calculate_all(doc, dt, dn);
+}
+
+// Calculate all
+// ------------------------------------------------------------------------
+var calculate_all = function(doc, dt, dn) {
+  calculate_earning_total(doc, dt, dn);
+  calculate_ded_total(doc, dt, dn);
+  calculate_net_pay(doc, dt, dn);
+}
+
+// Trigger on earning modified amount and depends on lwp
+// ------------------------------------------------------------------------
+cur_frm.cscript.e_modified_amount = function(doc,dt,dn){
+  calculate_earning_total(doc, dt, dn);
+  calculate_net_pay(doc, dt, dn);
+}
+
+cur_frm.cscript.e_depends_on_lwp = cur_frm.cscript.e_modified_amount;
+
+// Trigger on earning modified amount and depends on lwp
+// ------------------------------------------------------------------------
+cur_frm.cscript.d_modified_amount = function(doc,dt,dn){
+  calculate_ded_total(doc, dt, dn);
+  calculate_net_pay(doc, dt, dn);
+}
+
+cur_frm.cscript.d_depends_on_lwp = cur_frm.cscript.d_modified_amount;
+
+// Calculate earning total
+// ------------------------------------------------------------------------
+var calculate_earning_total = function(doc, dt, dn) {
+  var tbl = getchildren('SS Earning Detail', doc.name, 'earning_details', doc.doctype);
+
+  var total_earn = 0;
+  for(var i = 0; i < tbl.length; i++){
+    if(cint(tbl[i].e_depends_on_lwp) == 1) {
+      tbl[i].e_modified_amount = flt(tbl[i].e_amount)*(flt(doc.payment_days)/cint(doc.total_days_in_month));      
+      refresh_field('e_modified_amount', tbl[i].name, 'earning_details');
+    }
+    total_earn += flt(tbl[i].e_modified_amount);
+  }
+  doc.gross_pay = total_earn + flt(doc.arrear_amount) + flt(doc.leave_encashment_amount);
+  refresh_many(['e_modified_amount', 'gross_pay']);
+}
+
+// Calculate deduction total
+// ------------------------------------------------------------------------
+var calculate_ded_total = function(doc, dt, dn) {
+  var tbl = getchildren('SS Deduction Detail', doc.name, 'deduction_details', doc.doctype);
+
+  var total_ded = 0;
+  for(var i = 0; i < tbl.length; i++){
+    if(cint(tbl[i].d_depends_on_lwp) == 1) {
+      tbl[i].d_modified_amount = flt(tbl[i].d_amount)*(flt(doc.payment_days)/cint(doc.total_days_in_month));
+			refresh_field('d_modified_amount', tbl[i].name, 'deduction_details');
+    }
+    total_ded += flt(tbl[i].d_modified_amount);
+  }
+  doc.total_deduction = total_ded;
+  refresh_field('total_deduction');  
+}
+
+// Calculate net payable amount
+// ------------------------------------------------------------------------
+var calculate_net_pay = function(doc, dt, dn) {
+  doc.net_pay = flt(doc.gross_pay) - flt(doc.total_deduction);
+	doc.rounded_total = Math.round(doc.net_pay);
+  refresh_many(['net_pay', 'rounded_total']);
+}
+
+// trigger on arrear
+// ------------------------------------------------------------------------
+cur_frm.cscript.arrear_amount = function(doc,dt,dn){
+  calculate_earning_total(doc, dt, dn);
+  calculate_net_pay(doc, dt, dn);
+}
+
+// trigger on encashed amount
+// ------------------------------------------------------------------------
+cur_frm.cscript.leave_encashment_amount = cur_frm.cscript.arrear_amount;
+
+// validate
+// ------------------------------------------------------------------------
+cur_frm.cscript.validate = function(doc, dt, dn) {
+  calculate_all(doc, dt, dn);
+}
diff --git a/hr/doctype/salary_slip/salary_slip.py b/hr/doctype/salary_slip/salary_slip.py
new file mode 100644
index 0000000..9c94885
--- /dev/null
+++ b/hr/doctype/salary_slip/salary_slip.py
@@ -0,0 +1,227 @@
+# Please edit this list and import only required elements
+import webnotes
+
+from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, generate_hash, getTraceback, get_defaults, get_first_day, get_last_day, getdate, has_common, month_name, now, nowdate, replace_newlines, sendmail, set_default, str_esc_quote, user_format, validate_email_add
+from webnotes.model import db_exists
+from webnotes.model.doc import Document, addchild, removechild, getchildren, make_autoname, SuperDocType
+from webnotes.model.doclist import getlist, copy_doclist
+from webnotes.model.code import get_obj, get_server_obj, run_server_obj, updatedb, check_syntax
+from webnotes import session, form, is_testing, msgprint, errprint
+
+set = webnotes.conn.set
+sql = webnotes.conn.sql
+get_value = webnotes.conn.get_value
+in_transaction = webnotes.conn.in_transaction
+convert_to_lists = webnotes.conn.convert_to_lists
+	
+# -----------------------------------------------------------------------------------------
+from utilities.transaction_base import TransactionBase
+
+class DocType(TransactionBase):
+  def __init__(self,doc,doclist=[]):
+    self.doc = doc
+    self.doclist = doclist
+    
+    
+  # autoname
+  #=======================================================
+  def autoname(self):
+    self.doc.name = make_autoname('Sal Slip/' +self.doc.employee + '/.#####') 
+
+  # Get employee details
+  #=======================================================
+  def get_emp_and_leave_details(self):
+    # Get payment days
+    if self.doc.fiscal_year and self.doc.month:
+      self.get_leave_details()
+
+    # check sal structure
+    if self.doc.employee:
+      struct = self.check_sal_struct()
+      if struct:
+        self.pull_sal_struct(struct)
+
+
+  # Check sal structure
+  #=======================================================
+  def check_sal_struct(self):
+    struct = sql("select name from `tabSalary Structure` where employee ='%s' and is_active = 'Yes' "%self.doc.employee)
+    if not struct:
+      msgprint("Please create Salary Structure for employee '%s'"%self.doc.employee)
+      self.doc.employee = ''
+    return struct and struct[0][0] or ''
+
+  # Pull struct details
+  #=======================================================
+  def pull_sal_struct(self, struct):
+    self.doc.clear_table(self.doclist, 'earning_details')
+    self.doc.clear_table(self.doclist, 'deduction_details')
+
+    get_obj('DocType Mapper', 'Salary Structure-Salary Slip').dt_map('Salary Structure', 'Salary Slip', struct, self.doc, self.doclist, "[['Salary Structure', 'Salary Slip'],['Earning Detail', 'SS Earning Detail'],['Deduction Detail','SS Deduction Detail']]")
+
+    basic_info = sql("select bank_name, bank_ac_no, esic_card_no, pf_number from `tabEmployee` where name ='%s'" % self.doc.employee)
+    self.doc.bank_name = basic_info[0][0]
+    self.doc.bank_account_no = basic_info[0][1]
+    self.doc.esic_no = basic_info[0][2]
+    self.doc.pf_no = basic_info[0][3]
+
+  # Get leave details
+  #=======================================================
+  def get_leave_details(self):
+    m = self.get_month_details()    
+    lwp = self.calculate_lwp(m)
+    self.doc.total_days_in_month = m[3]
+    self.doc.leave_without_pay = lwp
+    self.doc.payment_days = flt(m[3]) - flt(lwp)
+
+  # Get month details
+  #=======================================================
+  def get_month_details(self):
+    ysd = sql("select year_start_date from `tabFiscal Year` where name ='%s'"%self.doc.fiscal_year)[0][0]
+    if ysd:
+      from dateutil.relativedelta import relativedelta
+      import calendar, datetime
+      mnt = int(self.doc.month)
+      diff_mnt = int(mnt)-int(ysd.month)
+      if diff_mnt<0:
+        diff_mnt = 12-int(ysd.month)+int(mnt)
+      msd = ysd + relativedelta(months=diff_mnt) # month start date
+      month_days = cint(calendar.monthrange(cint(msd.year) ,cint(self.doc.month))[1]) # days in month
+      med = datetime.date(msd.year, cint(self.doc.month), month_days) # month end date
+      return msd.year, msd, med, month_days
+
+  # Calculate LWP
+  #=======================================================
+  def calculate_lwp(self, m):
+    holidays = sql("select t1.holiday_date from `tabHoliday List Detail` t1, tabEmployee t2 where t1.parent = t2.holiday_list and t2.name = '%s' and t1.holiday_date between '%s' and '%s'" % (self.doc.employee, m[1], m[2]))
+    if not holidays:
+      holidays = sql("select t1.holiday_date from `tabHoliday List Detail` t1, `tabHoliday List` t2 where t1.parent = t2.name and ifnull(t2.is_default, 0) = 1 and t2.fiscal_year = '%s'" % self.doc.fiscal_year)
+    holidays = [cstr(i[0]) for i in holidays]
+    lwp = 0
+    for d in range(m[3]):
+      dt = add_days(cstr(m[1]), d)
+      if dt not in holidays:
+        if sql("select t1.name from `tabLeave Application` t1, `tabLeave Type` t2 where t2.name = t1.leave_type and ifnull(t2.is_lwp, 0) = 1 and t1.docstatus = 1 and t1.employee = '%s' and '%s' between from_date and to_date"%(self.doc.employee, dt)):
+          lwp += 1
+    return lwp
+        
+  # Check existing
+  #=======================================================
+  def check_existing(self):
+    ret_exist = sql("select name from `tabSalary Slip` where month = '%s' and fiscal_year = '%s' and docstatus != 2 and employee = '%s' and name !='%s'" % (self.doc.month,self.doc.fiscal_year,self.doc.employee,self.doc.name))
+    if ret_exist:
+      msgprint("Salary Slip of employee '%s' already created for this month" % self.doc.employee)
+      self.doc.employee = ''
+      raise Exception
+
+  # Validate
+  #=======================================================
+  def validate(self):
+    self.check_existing()
+    dcc = TransactionBase().get_company_currency(self.doc.company)
+    self.doc.total_in_words  = get_obj('Sales Common').get_total_in_words(dcc, self.doc.rounded_total)
+    
+  # ON SUBMIT
+  #=======================================================
+  def on_submit(self):
+    if(self.doc.email_check == 1):      
+      self.send_mail_funct()
+
+  # Send mail
+  #=======================================================
+  def send_mail_funct(self):   
+    emailid_ret=sql("select company_email from `tabEmployee` where name = '%s'"%self.doc.employee)
+    if emailid_ret:
+      receiver = cstr(emailid_ret[0][0]) 
+      subj = 'Salary Slip ' + cstr(self.doc.month) +' '+cstr(self.doc.year)
+      earn_ret=sql("select e_type,e_amount from `tabSS Earning Detail` where parent = '%s'"%self.doc.name)
+      ded_ret=sql("select d_type,d_amount from `tabSS Deduction Detail` where parent = '%s'"%self.doc.name)
+     
+      earn_table = ''
+      ded_table = ''
+      if earn_ret:
+      
+        earn_table += "<table cellspacing= '5' cellpadding='5' >"
+        
+        for e in earn_ret:
+          if not e[1]:
+            earn_table +='<tr><td>%s</td><td>0.00</td></tr>'%(cstr(e[0]))
+          else:
+            earn_table +='<tr><td>%s</td><td>%s</td></tr>'%(cstr(e[0]),cstr(e[1]))
+        earn_table += '</table>'
+      
+      if ded_ret:
+      
+        ded_table += "<table cellspacing= '5' cellpadding='5' >"
+        
+        for d in ded_ret:
+          if not d[1]:
+            ded_table +='<tr><td>%s</td><td>0.00</td></tr>'%(cstr(d[0]))
+          else:
+            ded_table +='<tr><td>%s</td><td>%s</td></tr>'%(cstr(d[0]),cstr(d[1]))
+        ded_table += '</table>'
+      
+      letter_head = sql("select value from `tabSingles` where field = 'letter_head' and doctype = 'Control Panel'")
+      
+      if not letter_head:
+        letter_head = ''
+      
+      msg = ''' %s <br>
+      <table cellspacing= "5" cellpadding="5" >
+      <tr>
+        <td colspan = 4><h4>Salary Slip</h4></td>
+      </tr>
+      <tr>
+        <td colspan = 2><b>Employee Code : %s</b></td>
+        <td colspan = 2><b>Employee Name : %s</b></td>
+      </tr>
+      <tr>
+        <td>Month : %s</td>
+        <td>Year : %s</td>
+        <td colspan = 2>Fiscal Year : %s</td>
+      </tr>
+      <tr>
+        <td>Department : %s</td>
+        <td>Branch : %s</td>
+        <td colspan = 2>Designation : %s</td>
+        
+      </tr>
+      <tr>
+        <td>Grade : %s</td>
+        <td>Bank Account No. : %s</td>
+        <td colspan = 2>Bank Name : %s</td>
+        
+      </tr>
+      <tr>
+        <td>PF No. : %s</td>
+        <td>ESIC No. : %s</td>
+        <td colspan = 2>Arrear Amount : <b>%s</b></td>
+      </tr>
+      <tr>
+        <td>Total days in month : %s</td>
+        <td>Leave Without Pay : %s</td>
+        <td colspan = 2>Payment days : %s</td>
+        
+      </tr>
+      <br><br>
+      <tr>
+        <td colspan = 2><b>Earning</b></td>
+        <td colspan = 2><b>Deduction</b></td>
+      </tr>
+      <tr>
+        <td colspan = 2>%s</td>
+        <td colspan = 2>%s</td>
+      </tr>
+      <br>
+      <tr>
+        <td colspan = 2><b>Gross Pay :</b> %s</td>
+        <td colspan = 2><b>Total Deduction :</b> %s</td>
+      </tr>
+      <tr>
+        <td><b>Net Pay : %s</b></td>
+        <td colspan = 3><b>Net Pay (in words) : %s</b></td>
+      </tr>
+      </table>'''%(cstr(letter_head[0][0]),cstr(self.doc.employee),self.doc.employee_name,cstr(self.doc.month),cstr(self.doc.year),cstr(self.doc.fiscal_year),self.doc.department,self.doc.branch,self.doc.designation,self.doc.grade,cstr(self.doc.bank_account_no),self.doc.bank_name,cstr(self.doc.pf_no),cstr(self.doc.esic_no),cstr(self.doc.arrear_amount),cstr(self.doc.total_days_in_month),cstr(self.doc.leave_without_pay),cstr(self.doc.payment_days),earn_table,ded_table,cstr(self.doc.gross_pay),cstr(self.doc.total_deduction),cstr(self.doc.net_pay),cstr(self.doc.net_pay_in_words))
+      sendmail([receiver], sender='automail@webnotestech.com', subject=subj, parts=[['text/plain', msg]])
+    else:
+      msgprint("Company Email ID not found.")
diff --git a/hr/doctype/salary_slip/salary_slip.txt b/hr/doctype/salary_slip/salary_slip.txt
new file mode 100644
index 0000000..c9ba1de
--- /dev/null
+++ b/hr/doctype/salary_slip/salary_slip.txt
@@ -0,0 +1,684 @@
+# DocType, Salary Slip
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-08-08 17:09:20',
+		'docstatus': 0,
+		'modified': '2011-06-27 14:39:16',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'_last_update': '1308808105',
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'module': 'HR',
+		'name': '__common__',
+		'section_style': 'Simple',
+		'server_code_error': ' ',
+		'show_in_menu': 0,
+		'subject': 'For %(employee_name)s, %(designation)s',
+		'version': 388
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Salary Slip',
+		'parentfield': 'fields',
+		'parenttype': 'DocType'
+	},
+
+	# These values are common for all DocPerm
+	{
+		'doctype': 'DocPerm',
+		'name': '__common__',
+		'parent': 'Salary Slip',
+		'parentfield': 'permissions',
+		'parenttype': 'DocType',
+		'read': 1
+	},
+
+	# DocType, Salary Slip
+	{
+		'doctype': 'DocType',
+		'name': 'Salary Slip'
+	},
+
+	# DocPerm
+	{
+		'amend': 0,
+		'cancel': 0,
+		'create': 0,
+		'doctype': 'DocPerm',
+		'match': 'owner',
+		'permlevel': 0,
+		'submit': 0,
+		'write': 0
+	},
+
+	# DocPerm
+	{
+		'amend': 0,
+		'cancel': 0,
+		'create': 0,
+		'doctype': 'DocPerm',
+		'match': 'owner',
+		'permlevel': 0,
+		'submit': 0,
+		'write': 0
+	},
+
+	# DocPerm
+	{
+		'amend': 0,
+		'cancel': 0,
+		'create': 0,
+		'doctype': 'DocPerm',
+		'match': 'owner',
+		'permlevel': 0,
+		'submit': 0,
+		'write': 0
+	},
+
+	# DocPerm
+	{
+		'amend': 0,
+		'cancel': 0,
+		'create': 0,
+		'doctype': 'DocPerm',
+		'match': 'owner',
+		'permlevel': 0,
+		'submit': 0,
+		'write': 0
+	},
+
+	# DocPerm
+	{
+		'amend': 0,
+		'create': 1,
+		'doctype': 'DocPerm',
+		'idx': 3,
+		'permlevel': 0,
+		'role': 'HR User',
+		'submit': 1,
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'amend': 1,
+		'cancel': 1,
+		'create': 1,
+		'doctype': 'DocPerm',
+		'idx': 4,
+		'permlevel': 0,
+		'role': 'HR Manager',
+		'submit': 1,
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 5,
+		'permlevel': 1,
+		'role': 'HR User'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 6,
+		'permlevel': 1,
+		'role': 'HR Manager'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'idx': 1,
+		'label': 'Basic Info',
+		'oldfieldtype': 'Section Break',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break',
+		'idx': 2,
+		'oldfieldtype': 'Column Break',
+		'permlevel': 0,
+		'width': '50%'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'employee',
+		'fieldtype': 'Link',
+		'idx': 3,
+		'in_filter': 1,
+		'label': 'Employee',
+		'oldfieldname': 'employee',
+		'oldfieldtype': 'Link',
+		'options': 'Employee',
+		'permlevel': 0,
+		'reqd': 1,
+		'search_index': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'employee_name',
+		'fieldtype': 'Data',
+		'idx': 4,
+		'in_filter': 1,
+		'label': 'Employee Name',
+		'oldfieldname': 'employee_name',
+		'oldfieldtype': 'Data',
+		'permlevel': 1,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'department',
+		'fieldtype': 'Link',
+		'idx': 5,
+		'in_filter': 1,
+		'label': 'Department',
+		'oldfieldname': 'department',
+		'oldfieldtype': 'Link',
+		'options': 'Department',
+		'permlevel': 1,
+		'reqd': 0,
+		'search_index': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'designation',
+		'fieldtype': 'Link',
+		'idx': 6,
+		'in_filter': 1,
+		'label': 'Designation',
+		'oldfieldname': 'designation',
+		'oldfieldtype': 'Link',
+		'options': 'Designation',
+		'permlevel': 1,
+		'search_index': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'branch',
+		'fieldtype': 'Link',
+		'idx': 7,
+		'in_filter': 1,
+		'label': 'Branch',
+		'oldfieldname': 'branch',
+		'oldfieldtype': 'Link',
+		'options': 'Branch',
+		'permlevel': 1,
+		'search_index': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'grade',
+		'fieldtype': 'Link',
+		'idx': 8,
+		'in_filter': 1,
+		'label': 'Grade',
+		'oldfieldname': 'grade',
+		'oldfieldtype': 'Link',
+		'options': 'Grade',
+		'permlevel': 1,
+		'search_index': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'pf_no',
+		'fieldtype': 'Data',
+		'idx': 9,
+		'label': 'PF No.',
+		'oldfieldname': 'pf_no',
+		'oldfieldtype': 'Data',
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'esic_no',
+		'fieldtype': 'Data',
+		'idx': 10,
+		'label': 'ESIC No.',
+		'oldfieldname': 'esic_no',
+		'oldfieldtype': 'Data',
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'letter_head',
+		'fieldtype': 'Link',
+		'idx': 11,
+		'label': 'Letter Head',
+		'options': 'Letter Head',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'letter_head',
+		'fieldtype': 'Link',
+		'idx': 11,
+		'label': 'Letter Head',
+		'options': 'Letter Head',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'letter_head',
+		'fieldtype': 'Link',
+		'idx': 11,
+		'label': 'Letter Head',
+		'options': 'Letter Head',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break',
+		'idx': 12,
+		'oldfieldtype': 'Column Break',
+		'permlevel': 0,
+		'width': '50%'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'fiscal_year',
+		'fieldtype': 'Link',
+		'idx': 13,
+		'in_filter': 1,
+		'label': 'Fiscal Year',
+		'oldfieldname': 'fiscal_year',
+		'oldfieldtype': 'Data',
+		'options': 'Fiscal Year',
+		'permlevel': 0,
+		'reqd': 1,
+		'search_index': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'company',
+		'fieldtype': 'Select',
+		'idx': 14,
+		'in_filter': 1,
+		'label': 'Company',
+		'options': 'link:Company',
+		'permlevel': 0,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'company',
+		'fieldtype': 'Select',
+		'idx': 14,
+		'in_filter': 1,
+		'label': 'Company',
+		'options': 'link:Company',
+		'permlevel': 0,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'company',
+		'fieldtype': 'Select',
+		'idx': 14,
+		'in_filter': 1,
+		'label': 'Company',
+		'options': 'link:Company',
+		'permlevel': 0,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'month',
+		'fieldtype': 'Select',
+		'idx': 15,
+		'in_filter': 1,
+		'label': 'Month',
+		'oldfieldname': 'month',
+		'oldfieldtype': 'Select',
+		'options': '\n01\n02\n03\n04\n05\n06\n07\n08\n09\n10\n11\n12',
+		'permlevel': 0,
+		'reqd': 1,
+		'search_index': 1,
+		'trigger': 'Client',
+		'width': '37%'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'total_days_in_month',
+		'fieldtype': 'Int',
+		'idx': 16,
+		'label': 'Total days in month',
+		'oldfieldname': 'total_days_in_month',
+		'oldfieldtype': 'Int',
+		'permlevel': 1,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'leave_without_pay',
+		'fieldtype': 'Currency',
+		'idx': 17,
+		'label': 'Leave Without Pay',
+		'oldfieldname': 'leave_without_pay',
+		'oldfieldtype': 'Currency',
+		'permlevel': 0,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'payment_days',
+		'fieldtype': 'Float',
+		'idx': 18,
+		'label': 'Payment days',
+		'oldfieldname': 'payment_days',
+		'oldfieldtype': 'Float',
+		'permlevel': 1,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'bank_name',
+		'fieldtype': 'Data',
+		'idx': 19,
+		'label': 'Bank Name',
+		'oldfieldname': 'bank_name',
+		'oldfieldtype': 'Data',
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'bank_account_no',
+		'fieldtype': 'Data',
+		'idx': 20,
+		'label': 'Bank Account No.',
+		'oldfieldname': 'bank_account_no',
+		'oldfieldtype': 'Data',
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'email_check',
+		'fieldtype': 'Check',
+		'idx': 21,
+		'label': 'Email',
+		'no_copy': 1,
+		'oldfieldname': 'email_check',
+		'oldfieldtype': 'Check',
+		'permlevel': 0,
+		'print_hide': 1,
+		'report_hide': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'amended_from',
+		'fieldtype': 'Data',
+		'hidden': 0,
+		'idx': 22,
+		'label': 'Amended From',
+		'no_copy': 1,
+		'oldfieldname': 'amended_from',
+		'oldfieldtype': 'Data',
+		'permlevel': 0,
+		'print_hide': 1,
+		'report_hide': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'amendment_date',
+		'fieldtype': 'Date',
+		'hidden': 0,
+		'idx': 23,
+		'label': 'Amendment Date',
+		'no_copy': 1,
+		'oldfieldname': 'amendment_date',
+		'oldfieldtype': 'Date',
+		'permlevel': 0,
+		'print_hide': 1,
+		'report_hide': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'idx': 24,
+		'label': 'Earning & Deduction',
+		'oldfieldtype': 'Section Break',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break',
+		'idx': 25,
+		'label': 'Earning',
+		'oldfieldtype': 'Column Break',
+		'permlevel': 0,
+		'reqd': 0,
+		'width': '50%'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'earning_details',
+		'fieldtype': 'Table',
+		'idx': 26,
+		'label': 'Earning Details',
+		'oldfieldname': 'earning_details',
+		'oldfieldtype': 'Table',
+		'options': 'SS Earning Detail',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break',
+		'idx': 27,
+		'label': 'Deduction',
+		'oldfieldtype': 'Column Break',
+		'permlevel': 0,
+		'width': '50%'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'deduction_details',
+		'fieldtype': 'Table',
+		'idx': 28,
+		'label': 'Deduction Details',
+		'oldfieldname': 'deduction_details',
+		'oldfieldtype': 'Table',
+		'options': 'SS Deduction Detail',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'idx': 29,
+		'label': 'Totals',
+		'oldfieldtype': 'Section Break',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break',
+		'idx': 30,
+		'oldfieldtype': 'Column Break',
+		'permlevel': 0,
+		'width': '50%'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'arrear_amount',
+		'fieldtype': 'Currency',
+		'idx': 31,
+		'label': 'Arrear Amount',
+		'oldfieldname': 'arrear_amount',
+		'oldfieldtype': 'Currency',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'leave_encashment_amount',
+		'fieldtype': 'Currency',
+		'idx': 32,
+		'label': 'Leave Encashment Amount',
+		'oldfieldname': 'encashment_amount',
+		'oldfieldtype': 'Currency',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'gross_pay',
+		'fieldtype': 'Currency',
+		'idx': 33,
+		'label': 'Gross Pay',
+		'oldfieldname': 'gross_pay',
+		'oldfieldtype': 'Currency',
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'total_deduction',
+		'fieldtype': 'Currency',
+		'idx': 34,
+		'label': 'Total Deduction',
+		'oldfieldname': 'total_deduction',
+		'oldfieldtype': 'Currency',
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break',
+		'idx': 35,
+		'oldfieldtype': 'Column Break',
+		'permlevel': 0,
+		'width': '50%'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'Gross Pay + Arrear Amount +Encashment Amount - Total Deduction',
+		'doctype': 'DocField',
+		'fieldname': 'net_pay',
+		'fieldtype': 'Currency',
+		'idx': 36,
+		'label': 'Net Pay',
+		'oldfieldname': 'net_pay',
+		'oldfieldtype': 'Currency',
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'rounded_total',
+		'fieldtype': 'Currency',
+		'idx': 37,
+		'label': 'Rounded Total',
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'description': 'Net Pay (in words) will be visible once you save the Salary Slip.',
+		'doctype': 'DocField',
+		'fieldname': 'total_in_words',
+		'fieldtype': 'Data',
+		'idx': 38,
+		'label': 'Total in words',
+		'oldfieldname': 'net_pay_in_words',
+		'oldfieldtype': 'Data',
+		'permlevel': 1
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/salary_slip_control_panel/__init__.py b/hr/doctype/salary_slip_control_panel/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/salary_slip_control_panel/__init__.py
diff --git a/hr/doctype/salary_slip_control_panel/salary_slip_control_panel.js b/hr/doctype/salary_slip_control_panel/salary_slip_control_panel.js
new file mode 100644
index 0000000..5fd80cb
--- /dev/null
+++ b/hr/doctype/salary_slip_control_panel/salary_slip_control_panel.js
@@ -0,0 +1,71 @@
+cur_frm.cscript.onload = function(doc, cdt, cdn) {
+  alert("Salary Slip Control Panel is currently under re-development. It will take around a week time.");
+  hide_field(['Process Payroll', 'Submit Salary Slip', 'Make Bank Voucher']);
+}
+
+cur_frm.cscript['Process Payroll'] = function(doc,cdt,cdn){
+  $c('runserverobj', args={'method':'process_payroll','docs':compress_doclist (make_doclist (doc.doctype,doc.name))},function(r,rt){
+    
+      if(!pscript.ss_html)
+        pscript.ss_html = $a(cur_frm.fields_dict['Salary Slip HTML'].wrapper,'span','',{border:'1px solid #CCC', backgroundColor:'#DDD'});
+      pscript.ss_html.innerHTML = '';
+      pscript.ss_html.innerHTML = r.message;
+      
+    
+    });
+
+}
+
+cur_frm.cscript['Submit Salary Slip'] = function(doc,cdt,cdn){
+  if(doc.month && doc.fiscal_year && doc.year){
+    var check = confirm("DO you really want to Submit all Salary Slip for month : " + doc.month+" and year : "+doc.year);
+    if(check){
+      $c('runserverobj', args={'method':'submit_sal_slip','docs':compress_doclist (make_doclist (doc.doctype,doc.name))},function(r,rt){
+      
+        if(!pscript.ss_html)
+          pscript.ss_html = $a(cur_frm.fields_dict['Salary Slip HTML'].wrapper,'span','',{border:'1px solid #CCC', backgroundColor:'#DDD'});
+        pscript.ss_html.innerHTML = '';
+        pscript.ss_html.innerHTML = r.message;
+        
+      
+      });
+    }
+  }
+  else
+    alert("Please select month, fiscal year and year");
+}
+
+// Make JV
+// --------
+cur_frm.cscript.make_jv = function(doc, dt, dn) {
+  var call_back = function(r,rt){
+    var jv = LocalDB.create('Journal Voucher');
+    jv = locals['Journal Voucher'][jv];
+    jv.voucher_type = 'Bank Voucher';
+    jv.remark = 'Salary - Bank Voucher';
+    jv.fiscal_year = doc.fiscal_year;
+    jv.company = doc.company;
+    
+    // credit to bank
+    var d1 = LocalDB.add_child(jv, 'Journal Voucher Detail', 'entries');
+    d1.account = r.message['default_bank_account'];
+
+    // debit to salary account
+    var d1 = LocalDB.add_child(jv, 'Journal Voucher Detail', 'entries');
+    d1.account = r.message['default_salary_account'];
+    if(!r.message['default_salary_account'] && !r.message['default_bank_account']) alert("To debit salary amount in salary head and credit amount from bank, you need to specify default salary account and default bank account in Global Defaults.\nGo to Setup, click on Company. Select a company.\nSelect Default Salary Account, Default Bank Account from Accounting tab.");
+    else if(!r.message['default_salary_account']) alert("To debit salary amount you need to specify default salary account in Global Defaults.\nGo to Setup, click on Company. Select a company.\nSelect Default Salary Account from Accounting tab.");
+    else if(!r.message['default_bank_account']) alert("To credit salary amount you need to specify default bank account in Global Defaults.\nGo to Setup, click on Company. Select a company.\nSelect Default Bank Account from Accounting tab.");
+    loaddoc('Journal Voucher', jv.name);
+  }
+  $c_obj(make_doclist(dt,dn),'get_acct_dtl','',call_back);
+
+}
+
+
+
+// Make Journal Voucher
+// --------------------
+cur_frm.cscript['Make Bank Voucher'] = function(doc, dt, dn) {
+  cur_frm.cscript.make_jv(doc,dt,dn);
+}
diff --git a/hr/doctype/salary_slip_control_panel/salary_slip_control_panel.py b/hr/doctype/salary_slip_control_panel/salary_slip_control_panel.py
new file mode 100644
index 0000000..3a4fadf
--- /dev/null
+++ b/hr/doctype/salary_slip_control_panel/salary_slip_control_panel.py
@@ -0,0 +1,137 @@
+# Please edit this list and import only required elements
+import webnotes
+
+from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, generate_hash, getTraceback, get_defaults, get_first_day, get_last_day, getdate, has_common, month_name, now, nowdate, replace_newlines, sendmail, set_default, str_esc_quote, user_format, validate_email_add
+from webnotes.model import db_exists
+from webnotes.model.doc import Document, addchild, removechild, getchildren, make_autoname, SuperDocType
+from webnotes.model.doclist import getlist, copy_doclist
+from webnotes.model.code import get_obj, get_server_obj, run_server_obj, updatedb, check_syntax
+from webnotes import session, form, is_testing, msgprint, errprint
+
+set = webnotes.conn.set
+sql = webnotes.conn.sql
+get_value = webnotes.conn.get_value
+in_transaction = webnotes.conn.in_transaction
+convert_to_lists = webnotes.conn.convert_to_lists
+	
+# -----------------------------------------------------------------------------------------
+
+
+class DocType:
+  def __init__(self, doc, doclist):
+    self.doc = doc
+    self.doclist = doclist   
+  
+  # Get Employees
+  # ********************************************************************** 
+  def get_employee(self):    
+    e1 = self.emp_fr_memp()  #get employee list from employee where employee is active
+    e2 = self.emp_fr_salstr(e1)  #get employee list from salary structure whose salary structure is created and is active 
+    e3 = self.emp_fr_salslip(e2)  #get employee list from salary slip whose salary slip not yet created for this month and year
+    return e3
+
+  # ********************************************************************** 
+  def emp_fr_memp(self):
+    lst1 = [[self.doc.employee_type,"employment_type"],[self.doc.branch,"branch"],[self.doc.designation,"designation"],[self.doc.department, "department"],[self.doc.grade,"grade"]]
+    
+    condition = ""
+    #flag = 0
+    for l in lst1:
+      
+      if(l[0]):
+        #if flag == 0:
+        #  condition += l[1] + "= '" + l[0] +"'"
+        #else:
+        condition += " and " + l[1]+ "= '" +l[0] +"'"
+        #flag = 1
+
+    emp_query = "select name from `tabEmployee` where status = 'Active'"
+    #if flag == 1:
+    emp_query += condition
+            
+    e = sql(emp_query)
+    return e
+
+  # ********************************************************************** 
+  def emp_fr_salstr(self,e1):
+    lst = []
+    for r in e1:
+      lst.append(r[0])
+    
+    
+    e_lst = "%s"%lst
+    e_lst=e_lst.replace("[","(")
+    e_lst=e_lst.replace("]",")")
+    cond = ''
+
+    if e1:
+      cond = " and employee in %s"%e_lst
+    
+    el=sql("select employee from `tabSalary Structure` where is_active = 'Yes'"+cond)
+
+    return el
+
+  # ********************************************************************** 
+  def emp_fr_salslip(self,e2):
+    e3 = []
+    for i in e2:
+      ret = sql("select name from `tabSalary Slip` where month = '%s' and year = '%s' and employee = '%s' and docstatus !=2 "%(self.doc.month,self.doc.year,i[0]))
+
+      if not ret:
+        e3.append(i[0])
+    return e3
+    
+  # ********************************************************************** 
+  def process_payroll(self):
+    sal_slip_str = ''
+    if self.doc.month and self.doc.fiscal_year and self.doc.year:
+      e = self.get_employee()
+      if e:
+        self.doc.emp_lst=e
+        sal_slip_str += 'Sucessfully created following salary slips:'
+      for i in e:
+      	ss = Document('Salary Slip')
+        ss.fiscal_year = self.doc.fiscal_year
+        ss.employee = i
+        ss.month = self.doc.month
+        ss.year= self.doc.year
+        ss.arrear_amount = self.doc.arrear_amount    
+        ss.email_check = self.doc.email_check
+        ss.save(1)
+        salary_obj=get_obj("Salary Slip",ss.name,with_children=1)   
+        salary_obj.process_payroll_all()
+        sal_slip_str += "<br/>"+ss.name 
+        
+    else:
+    
+      msgprint("For Process Payroll Fiscal Year, Month, Year fields are mandatory.")
+    if not sal_slip_str: 
+     
+      sal_slip_str = "No record found."
+    return cstr(sal_slip_str)
+
+  # ********************************************************************** 
+  def submit_sal_slip(self):
+  
+    sal_slip_str = ''
+    r = sql("select name from `tabSalary Slip` where month='%s' and year = '%s' and fiscal_year = '%s' and docstatus = 0"%(self.doc.month,self.doc.year,self.doc.fiscal_year))
+
+  
+    ret = sql("update `tabSalary Slip` set docstatus = 1 where month='%s' and year = '%s' and fiscal_year = '%s' and docstatus = 0"%(self.doc.month,self.doc.year,self.doc.fiscal_year))
+    if r:
+      sal_slip_str += 'Sucessfully updated following salary slips:'
+    for i in r:
+      
+      salary_obj=get_obj("Salary Slip",i[0],with_children=1)   
+      salary_obj.on_submit()
+      sal_slip_str += "<br/>"+cstr(i[0]) 
+    if not sal_slip_str: 
+     
+      sal_slip_str = "No record found."
+    return cstr(sal_slip_str)
+  
+  # ********************************************************************** 
+  #get default bank account,default salary acount from company.
+  def get_acct_dtl(self):
+    res = sql("select default_bank_account,default_salary_acount from `tabCompany` where name = '%s'"%get_defaults()['company'], as_dict=1)
+    return res[0]
diff --git a/hr/doctype/salary_slip_control_panel/salary_slip_control_panel.txt b/hr/doctype/salary_slip_control_panel/salary_slip_control_panel.txt
new file mode 100644
index 0000000..b83e0c7
--- /dev/null
+++ b/hr/doctype/salary_slip_control_panel/salary_slip_control_panel.txt
@@ -0,0 +1,286 @@
+# DocType, Salary Slip Control Panel
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-08-08 17:09:20',
+		'docstatus': 0,
+		'modified': '2010-12-29 18:02:38',
+		'modified_by': 'umair@iwebnotes.com',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'_last_update': '1294312182',
+		'allow_copy': 1,
+		'allow_email': 1,
+		'allow_print': 1,
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'hide_heading': 0,
+		'hide_toolbar': 0,
+		'in_create': 0,
+		'issingle': 1,
+		'module': 'HR',
+		'name': '__common__',
+		'read_only': 1,
+		'section_style': 'Simple',
+		'server_code_error': ' ',
+		'show_in_menu': 0,
+		'use_template': 0,
+		'version': 113
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Salary Slip Control Panel',
+		'parentfield': 'fields',
+		'parenttype': 'DocType',
+		'permlevel': 0
+	},
+
+	# These values are common for all DocPerm
+	{
+		'create': 1,
+		'doctype': 'DocPerm',
+		'name': '__common__',
+		'parent': 'Salary Slip Control Panel',
+		'parentfield': 'permissions',
+		'parenttype': 'DocType',
+		'permlevel': 0,
+		'read': 1,
+		'write': 1
+	},
+
+	# DocType, Salary Slip Control Panel
+	{
+		'doctype': 'DocType',
+		'name': 'Salary Slip Control Panel'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 1,
+		'role': 'System Manager'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 2,
+		'role': 'HR User'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 3,
+		'role': 'HR Manager'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'idx': 1,
+		'label': 'Salary Slip Control Panel'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'employee_type',
+		'fieldtype': 'Select',
+		'idx': 2,
+		'label': 'Employment Type',
+		'oldfieldname': 'employee_type',
+		'oldfieldtype': 'Select',
+		'options': 'link:Employment Type'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'grade',
+		'fieldtype': 'Select',
+		'idx': 3,
+		'label': 'Grade',
+		'oldfieldname': 'grade',
+		'oldfieldtype': 'Select',
+		'options': 'link:Grade'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'branch',
+		'fieldtype': 'Select',
+		'idx': 4,
+		'label': 'Branch',
+		'oldfieldname': 'branch',
+		'oldfieldtype': 'Select',
+		'options': 'link:Branch'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'department',
+		'fieldtype': 'Select',
+		'idx': 5,
+		'label': 'Department',
+		'oldfieldname': 'department',
+		'oldfieldtype': 'Select',
+		'options': 'link:Department'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'designation',
+		'fieldtype': 'Select',
+		'idx': 6,
+		'label': 'Designation',
+		'oldfieldname': 'designation',
+		'oldfieldtype': 'Select',
+		'options': 'link:Designation'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break',
+		'idx': 7,
+		'oldfieldtype': 'Column Break'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'fiscal_year',
+		'fieldtype': 'Select',
+		'idx': 8,
+		'in_filter': 1,
+		'label': 'Fiscal Year',
+		'oldfieldname': 'fiscal_year',
+		'oldfieldtype': 'Select',
+		'options': 'link:Fiscal Year'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'month',
+		'fieldtype': 'Select',
+		'idx': 9,
+		'label': 'Month',
+		'oldfieldname': 'month',
+		'oldfieldtype': 'Select',
+		'options': '\n01\n02\n03\n04\n05\n06\n07\n08\n09\n10\n11\n12'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'year',
+		'fieldtype': 'Select',
+		'idx': 10,
+		'label': 'Year',
+		'oldfieldname': 'year',
+		'oldfieldtype': 'Select',
+		'options': '\n2009\n2010\n2011\n2012'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'week_off',
+		'fieldtype': 'Currency',
+		'idx': 11,
+		'label': 'Week Off',
+		'oldfieldname': 'week_off',
+		'oldfieldtype': 'Currency'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'arrear_amount',
+		'fieldtype': 'Currency',
+		'idx': 12,
+		'label': 'Arrear Amount',
+		'oldfieldname': 'arrear_amount',
+		'oldfieldtype': 'Currency'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'email_check',
+		'fieldtype': 'Check',
+		'idx': 13,
+		'label': 'Email',
+		'oldfieldname': 'email_check',
+		'oldfieldtype': 'Check'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'idx': 14,
+		'oldfieldtype': 'Section Break'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldtype': 'Button',
+		'idx': 15,
+		'label': 'Process Payroll',
+		'oldfieldtype': 'Button',
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'HTML',
+		'idx': 16,
+		'label': 'Salary Slip HTML'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break',
+		'idx': 17
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldtype': 'Button',
+		'idx': 18,
+		'label': 'Submit Salary Slip',
+		'oldfieldtype': 'Button',
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Button',
+		'idx': 19,
+		'label': 'Make Bank Voucher',
+		'trigger': 'Client'
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/salary_structure/__init__.py b/hr/doctype/salary_structure/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/salary_structure/__init__.py
diff --git a/hr/doctype/salary_structure/salary_structure.js b/hr/doctype/salary_structure/salary_structure.js
new file mode 100644
index 0000000..8014b69
--- /dev/null
+++ b/hr/doctype/salary_structure/salary_structure.js
@@ -0,0 +1,105 @@
+cur_frm.add_fetch('employee', 'company', 'company');
+
+// On load
+//=======================================================================
+cur_frm.cscript.onload = function(doc, dt, dn){
+  e_tbl = getchildren('Earning Detail', doc.name, 'earning_details', doc.doctype);
+  d_tbl = getchildren('Deduction Detail', doc.name, 'deduction_details', doc.doctype);
+  if (e_tbl.length == 0 && d_tbl.length == 0)
+    $c_obj(make_doclist(doc.doctype,doc.name),'make_earn_ded_table','', function(r, rt) { refresh_many(['earning_details', 'deduction_details']);});
+}
+
+// On refresh
+//=======================================================================
+cur_frm.cscript.refresh = function(doc, dt, dn){
+  if((!doc.__islocal) && (doc.is_active == 'Yes')){
+    cur_frm.add_custom_button('Make IT Checklist', cur_frm.cscript['Make IT Checklist']);
+    cur_frm.add_custom_button('Make Salary Slip', cur_frm.cscript['Make Salary Slip']);
+  
+    get_field(doc.doctype, 'employee', doc.name).permlevel = 1;
+    refresh_field('employee');
+  }
+}
+
+// Make IT checklist
+//=======================================================================
+cur_frm.cscript['Make IT Checklist']=function(){
+  var itc = LocalDB.create('IT Checklist');
+  itc = locals['IT Checklist'][itc];
+  itc.employee = cur_frm.doc.employee;
+  itc.fiscal_year = sys_defaults.fiscal_year;
+  itc.is_cheklist_active='Yes';
+  loaddoc('IT Checklist', itc.name);
+}
+
+// Make Salry Slip
+//=======================================================================
+cur_frm.cscript['Make Salary Slip'] = function(){
+  var doc = cur_frm.doc;  
+  var callback = function(r,rt){
+    ret = r.message;
+    n = createLocal("Salary Slip");
+    $c('dt_map', args={
+      'docs':compress_doclist([locals["Salary Slip"][n]]),
+      'from_doctype':'Salary Structure',
+      'to_doctype':'Salary Slip',
+      'from_docname':doc.name,
+      'from_to_list':"[['Salary Structure', 'Salary Slip'], ['Earning Detail', 'SS Earning Detail'], ['Deduction Detail', 'SS Deduction Detail']]"
+      }, 
+      function(r,rt) {
+        n.fiscal_year = sys_defaults.fiscal_year;
+        n.bank_name = ret['bank_name'];
+        n.bank_account_no = ret['bank_ac_no'];
+        n.esic_no=ret['esic_no'];
+        n.pf_no= ret['pf_no'];
+        loaddoc("Salary Slip", n);
+      }
+    );
+  }
+  $c_obj(make_doclist(doc.doctype,doc.name),'get_ss_values',cur_frm.doc.employee, callback); 
+}
+
+
+// get employee details
+//=======================================================================
+cur_frm.cscript.employee = function(doc, dt, dn){
+  if (doc.employee)
+    get_server_fields('get_employee_details','','',doc,dt,dn);
+}
+
+// calculate earning totals 
+//=======================================================================
+cur_frm.cscript.modified_value = function(doc, cdt, cdn){
+  calculate_totals(doc, cdt, cdn);
+}
+
+// calculate deduction totals
+//=======================================================================
+cur_frm.cscript.d_modified_amt = function(doc, cdt, cdn){
+  calculate_totals(doc, cdt, cdn);
+}
+
+// calculate totals
+//=======================================================================
+var calculate_totals = function(doc, cdt, cdn) {
+  var tbl1 = getchildren('Earning Detail', doc.name, 'earning_details', doc.doctype);
+  var tbl2 = getchildren('Deduction Detail', doc.name, 'deduction_details', doc.doctype);
+  
+  var total_earn = 0; var total_ded = 0;
+  for(var i = 0; i < tbl1.length; i++){
+    total_earn += flt(tbl1[i].modified_value);
+  }
+  for(var j = 0; j < tbl2.length; j++){
+    total_ded += flt(tbl2[j].d_modified_amt);
+  }
+  doc.total_earning = total_earn;
+  doc.total_deduction = total_ded;
+  doc.net_pay = flt(total_earn) - flt(total_ded);
+  refresh_many(['total_earning', 'total_deduction', 'net_pay']);
+}
+
+// validate
+//=======================================================================
+cur_frm.cscript.validate = function(doc, cdt, cdn) {
+  calculate_totals(doc, cdt, cdn);
+}
diff --git a/hr/doctype/salary_structure/salary_structure.py b/hr/doctype/salary_structure/salary_structure.py
new file mode 100644
index 0000000..fd295ea
--- /dev/null
+++ b/hr/doctype/salary_structure/salary_structure.py
@@ -0,0 +1,104 @@
+# Please edit this list and import only required elements
+import webnotes
+
+from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, generate_hash, getTraceback, get_defaults, get_first_day, get_last_day, getdate, has_common, month_name, now, nowdate, replace_newlines, sendmail, set_default, str_esc_quote, user_format, validate_email_add
+from webnotes.model import db_exists
+from webnotes.model.doc import Document, addchild, removechild, getchildren, make_autoname, SuperDocType
+from webnotes.model.doclist import getlist, copy_doclist
+from webnotes.model.code import get_obj, get_server_obj, run_server_obj, updatedb, check_syntax
+from webnotes import session, form, is_testing, msgprint, errprint
+
+set = webnotes.conn.set
+sql = webnotes.conn.sql
+get_value = webnotes.conn.get_value
+in_transaction = webnotes.conn.in_transaction
+convert_to_lists = webnotes.conn.convert_to_lists
+	
+# -----------------------------------------------------------------------------------------
+
+
+class DocType:
+  #init function
+  def __init__(self,doc,doclist=[]):
+    self.doc = doc
+    self.doclist = doclist
+ 
+  #autoname function
+  #---------------------------------------------------------
+  def autoname(self):
+    self.doc.name = make_autoname(self.doc.employee + '/.SST' + '/.#####')
+  
+  #get employee details
+  #---------------------------------------------------------
+  def get_employee_details(self):
+    ret = {}
+    det = sql("select employee_name, branch, designation, department, grade from `tabEmployee` where name = '%s'" %self.doc.employee)
+    if det:
+      ret = {
+        'employee_name'  : cstr(det[0][0]),
+        'branch'         : cstr(det[0][1]),
+        'designation'    : cstr(det[0][2]),
+        'department'     : cstr(det[0][3]),
+        'grade'          : cstr(det[0][4]),
+        'backup_employee': cstr(self.doc.employee)
+      }
+    return cstr(ret)
+    
+
+  # Set Salary structure field values
+  #---------------------------------------------------------
+  def get_ss_values(self,employee):
+    basic_info = sql("select bank_name, bank_ac_no, esic_card_no, pf_number from `tabEmployee` where name ='%s'" % employee)
+    ret = {'bank_name'   : basic_info and basic_info[0][0] or '',
+            'bank_ac_no'  : basic_info and basic_info[0][1] or '',
+            'esic_no'     : basic_info and basic_info[0][2] or '',
+            'pf_no'       : basic_info and basic_info[0][3] or ''}
+    return cstr(ret)
+   
+  # Make earning and deduction table    
+  #---------------------------------------------------------
+  def make_table(self, doct_name, tab_fname, tab_name):
+    list1 = sql("select name from `tab%s` where docstatus != 2" % doct_name)
+    for li in list1:
+      child = addchild(self.doc, tab_fname, tab_name, 1, self.doclist)
+      if(tab_fname == 'earning_details'):
+        child.e_type = cstr(li[0])
+        child.modified_value = 0
+      elif(tab_fname == 'deduction_details'):
+        child.d_type = cstr(li[0])
+        child.d_modified_amt = 0
+    
+  # add earning & deduction types to table 
+  #---------------------------------------------------------   
+  def make_earn_ded_table(self):           
+    #Earning List
+    self.make_table('Earning Type','earning_details','Earning Detail')
+    
+    #Deduction List
+    self.make_table('Deduction Type','deduction_details', 'Deduction Detail')
+    
+
+  # Check if another active ss exists
+  #---------------------------------------------------------
+  def check_existing(self):
+    ret = sql("select name from `tabSalary Structure` where is_active = 'Yes' and employee = '%s' and name!='%s'" %(self.doc.employee,self.doc.name))
+    if ret and self.doc.is_active=='Yes':
+      msgprint("Another Salary Structure '%s' is active for employee '%s'. Please make its status 'Inactive' to proceed."%(cstr(ret), self.doc.employee))
+      raise Exception
+
+  # Validate net pay
+  #---------------------------------------------------------
+  def validate_net_pay(self):
+    if flt(self.doc.net_pay) < 0:
+      msgprint("Net pay can not be negative")
+      raise Exception
+    elif flt(self.doc.net_pay) > flt(self.doc.ctc):
+      msgprint("Net pay can not be greater than CTC")
+      raise Exception      
+
+  # Validate
+  #---------------------------------------------------------
+  def validate(self):   
+    self.check_existing()
+    self.validate_net_pay()
+
diff --git a/hr/doctype/salary_structure/salary_structure.txt b/hr/doctype/salary_structure/salary_structure.txt
new file mode 100644
index 0000000..3dcb8f9
--- /dev/null
+++ b/hr/doctype/salary_structure/salary_structure.txt
@@ -0,0 +1,483 @@
+# DocType, Salary Structure
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-12-14 16:50:05',
+		'docstatus': 0,
+		'modified': '2011-06-27 14:39:11',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'_last_update': '1308808105',
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'module': 'HR',
+		'name': '__common__',
+		'section_style': 'Simple',
+		'server_code_error': ' ',
+		'show_in_menu': 0,
+		'subject': 'For %(employee_name)s',
+		'version': 586
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Salary Structure',
+		'parentfield': 'fields',
+		'parenttype': 'DocType'
+	},
+
+	# These values are common for all DocPerm
+	{
+		'doctype': 'DocPerm',
+		'name': '__common__',
+		'parent': 'Salary Structure',
+		'parentfield': 'permissions',
+		'parenttype': 'DocType'
+	},
+
+	# DocType, Salary Structure
+	{
+		'doctype': 'DocType',
+		'name': 'Salary Structure'
+	},
+
+	# DocPerm
+	{
+		'amend': 0,
+		'cancel': 0,
+		'create': 0,
+		'doctype': 'DocPerm',
+		'match': 'owner',
+		'permlevel': 0,
+		'read': 1,
+		'submit': 0,
+		'write': 0
+	},
+
+	# DocPerm
+	{
+		'amend': 0,
+		'cancel': 0,
+		'create': 0,
+		'doctype': 'DocPerm',
+		'match': 'owner',
+		'permlevel': 0,
+		'read': 1,
+		'submit': 0,
+		'write': 0
+	},
+
+	# DocPerm
+	{
+		'amend': 0,
+		'cancel': 0,
+		'create': 0,
+		'doctype': 'DocPerm',
+		'match': 'owner',
+		'permlevel': 0,
+		'read': 1,
+		'submit': 0,
+		'write': 0
+	},
+
+	# DocPerm
+	{
+		'amend': 0,
+		'cancel': 0,
+		'create': 0,
+		'doctype': 'DocPerm',
+		'match': 'owner',
+		'permlevel': 0,
+		'read': 1,
+		'submit': 0,
+		'write': 0
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'permlevel': 0,
+		'role': 'Sales User'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 2,
+		'permlevel': 1,
+		'read': 1,
+		'role': 'All',
+		'write': 0
+	},
+
+	# DocPerm
+	{
+		'create': 1,
+		'doctype': 'DocPerm',
+		'idx': 3,
+		'permlevel': 0,
+		'read': 1,
+		'role': 'HR User',
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'create': 1,
+		'doctype': 'DocPerm',
+		'idx': 4,
+		'permlevel': 0,
+		'read': 1,
+		'role': 'HR Manager',
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 5,
+		'permlevel': 1,
+		'read': 1,
+		'role': 'HR Manager'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 6,
+		'permlevel': 1,
+		'read': 1,
+		'role': 'HR User'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'idx': 1,
+		'label': 'Basic Info',
+		'oldfieldname': 'basic_info',
+		'oldfieldtype': 'Section Break',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break',
+		'idx': 2,
+		'permlevel': 0,
+		'width': '50%'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'employee',
+		'fieldtype': 'Link',
+		'idx': 3,
+		'in_filter': 1,
+		'label': 'Employee',
+		'oldfieldname': 'employee',
+		'oldfieldtype': 'Link',
+		'options': 'Employee',
+		'permlevel': 0,
+		'reqd': 1,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'employee_name',
+		'fieldtype': 'Data',
+		'idx': 4,
+		'label': 'Employee Name',
+		'oldfieldname': 'employee_name',
+		'oldfieldtype': 'Data',
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'branch',
+		'fieldtype': 'Select',
+		'idx': 5,
+		'in_filter': 1,
+		'label': 'Branch',
+		'oldfieldname': 'branch',
+		'oldfieldtype': 'Select',
+		'options': 'link:Branch',
+		'permlevel': 1,
+		'reqd': 0
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'designation',
+		'fieldtype': 'Select',
+		'idx': 6,
+		'in_filter': 1,
+		'label': 'Designation',
+		'oldfieldname': 'designation',
+		'oldfieldtype': 'Select',
+		'options': 'link:Designation',
+		'permlevel': 1,
+		'reqd': 0
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'department',
+		'fieldtype': 'Select',
+		'idx': 7,
+		'in_filter': 1,
+		'label': 'Department',
+		'oldfieldname': 'department',
+		'oldfieldtype': 'Select',
+		'options': 'link:Department',
+		'permlevel': 1,
+		'reqd': 0
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'grade',
+		'fieldtype': 'Select',
+		'idx': 8,
+		'in_filter': 1,
+		'label': 'Grade',
+		'oldfieldname': 'grade',
+		'oldfieldtype': 'Select',
+		'options': 'link:Grade',
+		'permlevel': 1,
+		'reqd': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break',
+		'idx': 9,
+		'permlevel': 0,
+		'width': '50%'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'default': 'Yes',
+		'doctype': 'DocField',
+		'fieldname': 'is_active',
+		'fieldtype': 'Select',
+		'idx': 10,
+		'in_filter': 1,
+		'label': 'Is Active',
+		'oldfieldname': 'is_active',
+		'oldfieldtype': 'Select',
+		'options': '\nYes\nNo',
+		'permlevel': 0,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'from_date',
+		'fieldtype': 'Date',
+		'idx': 11,
+		'label': 'From Date',
+		'oldfieldname': 'from_date',
+		'oldfieldtype': 'Date',
+		'permlevel': 0,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'to_date',
+		'fieldtype': 'Date',
+		'idx': 12,
+		'label': 'To Date',
+		'oldfieldname': 'to_date',
+		'oldfieldtype': 'Date',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'Cost to Company',
+		'doctype': 'DocField',
+		'fieldname': 'ctc',
+		'fieldtype': 'Currency',
+		'idx': 13,
+		'in_filter': 1,
+		'label': 'CTC',
+		'oldfieldname': 'ctc',
+		'oldfieldtype': 'Currency',
+		'permlevel': 0,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'company',
+		'fieldtype': 'Select',
+		'idx': 14,
+		'in_filter': 1,
+		'label': 'Company',
+		'options': 'link:Company',
+		'permlevel': 0,
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'description': 'You can create more earning and deduction type from Setup --> HR',
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'idx': 15,
+		'label': 'Earning & Deduction',
+		'oldfieldname': 'earning_deduction',
+		'oldfieldtype': 'Section Break',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break',
+		'hidden': 0,
+		'idx': 16,
+		'label': 'Earning',
+		'oldfieldname': 'col_brk2',
+		'oldfieldtype': 'Column Break',
+		'permlevel': 0,
+		'width': '50%'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'earning_details',
+		'fieldtype': 'Table',
+		'hidden': 0,
+		'idx': 17,
+		'label': 'Earning1',
+		'oldfieldname': 'earning_details',
+		'oldfieldtype': 'Table',
+		'options': 'Earning Detail',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break',
+		'hidden': 0,
+		'idx': 18,
+		'label': 'Deduction',
+		'oldfieldname': 'col_brk3',
+		'oldfieldtype': 'Column Break',
+		'permlevel': 0,
+		'width': '50%'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'deduction_details',
+		'fieldtype': 'Table',
+		'hidden': 0,
+		'idx': 19,
+		'label': 'Deduction1',
+		'oldfieldname': 'deduction_details',
+		'oldfieldtype': 'Table',
+		'options': 'Deduction Detail',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'idx': 20,
+		'options': 'Simple',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break',
+		'idx': 21,
+		'permlevel': 0,
+		'width': '50%'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'total_earning',
+		'fieldtype': 'Currency',
+		'idx': 22,
+		'label': 'Total Earning',
+		'oldfieldname': 'total_earning',
+		'oldfieldtype': 'Currency',
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'total_deduction',
+		'fieldtype': 'Currency',
+		'idx': 23,
+		'label': 'Total Deduction',
+		'oldfieldname': 'total_deduction',
+		'oldfieldtype': 'Currency',
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break',
+		'idx': 24,
+		'permlevel': 0,
+		'width': '50%'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'net_pay',
+		'fieldtype': 'Currency',
+		'idx': 25,
+		'label': 'Net Pay',
+		'permlevel': 1
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/ss_deduction_detail/__init__.py b/hr/doctype/ss_deduction_detail/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/ss_deduction_detail/__init__.py
diff --git a/hr/doctype/ss_deduction_detail/ss_deduction_detail.txt b/hr/doctype/ss_deduction_detail/ss_deduction_detail.txt
new file mode 100644
index 0000000..e760226
--- /dev/null
+++ b/hr/doctype/ss_deduction_detail/ss_deduction_detail.txt
@@ -0,0 +1,109 @@
+# DocType, SS Deduction Detail
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-08-08 17:09:24',
+		'docstatus': 0,
+		'modified': '2011-02-12 18:24:31',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'istable': 1,
+		'module': 'HR',
+		'name': '__common__',
+		'section_style': 'Simple',
+		'server_code_error': ' ',
+		'show_in_menu': 0,
+		'version': 9
+	},
+
+	# These values are common for all DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'SS Deduction Detail',
+		'parentfield': 'fields',
+		'parenttype': 'DocType'
+	},
+
+	# These values are common for all DocPerm
+	{
+		'create': 1,
+		'doctype': 'DocPerm',
+		'idx': 1,
+		'name': '__common__',
+		'parent': 'SS Deduction Detail',
+		'parentfield': 'permissions',
+		'parenttype': 'DocType',
+		'permlevel': 0,
+		'read': 1,
+		'role': 'System Manager',
+		'write': 1
+	},
+
+	# DocType, SS Deduction Detail
+	{
+		'doctype': 'DocType',
+		'name': 'SS Deduction Detail'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'd_type',
+		'fieldtype': 'Link',
+		'idx': 1,
+		'label': 'Type',
+		'oldfieldname': 'd_type',
+		'oldfieldtype': 'Data',
+		'options': 'Deduction Type',
+		'permlevel': 0,
+		'width': '200px'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'd_amount',
+		'fieldtype': 'Currency',
+		'idx': 2,
+		'label': 'Amount',
+		'oldfieldname': 'd_amount',
+		'oldfieldtype': 'Currency',
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'd_modified_amount',
+		'fieldtype': 'Currency',
+		'idx': 3,
+		'label': 'Modified Amount',
+		'permlevel': 0,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'd_depends_on_lwp',
+		'fieldtype': 'Check',
+		'idx': 4,
+		'label': 'Depends on LWP',
+		'permlevel': 0,
+		'trigger': 'Client'
+	}
+]
\ No newline at end of file
diff --git a/hr/doctype/ss_earning_detail/__init__.py b/hr/doctype/ss_earning_detail/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/ss_earning_detail/__init__.py
diff --git a/hr/doctype/ss_earning_detail/ss_earning_detail.txt b/hr/doctype/ss_earning_detail/ss_earning_detail.txt
new file mode 100644
index 0000000..10931d1
--- /dev/null
+++ b/hr/doctype/ss_earning_detail/ss_earning_detail.txt
@@ -0,0 +1,110 @@
+# DocType, SS Earning Detail
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2010-08-08 17:09:24',
+		'docstatus': 0,
+		'modified': '2011-02-12 18:24:20',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'istable': 1,
+		'module': 'HR',
+		'name': '__common__',
+		'section_style': 'Simple',
+		'server_code_error': ' ',
+		'show_in_menu': 0,
+		'version': 7
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'SS Earning Detail',
+		'parentfield': 'fields',
+		'parenttype': 'DocType'
+	},
+
+	# These values are common for all DocPerm
+	{
+		'create': 1,
+		'doctype': 'DocPerm',
+		'idx': 1,
+		'name': '__common__',
+		'parent': 'SS Earning Detail',
+		'parentfield': 'permissions',
+		'parenttype': 'DocType',
+		'permlevel': 0,
+		'read': 1,
+		'role': 'System Manager',
+		'write': 1
+	},
+
+	# DocType, SS Earning Detail
+	{
+		'doctype': 'DocType',
+		'name': 'SS Earning Detail'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'e_type',
+		'fieldtype': 'Link',
+		'idx': 1,
+		'label': 'Type',
+		'oldfieldname': 'e_type',
+		'oldfieldtype': 'Data',
+		'options': 'Earning Type',
+		'permlevel': 0,
+		'width': '200px'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'e_amount',
+		'fieldtype': 'Currency',
+		'idx': 2,
+		'label': 'Amount',
+		'oldfieldname': 'e_amount',
+		'oldfieldtype': 'Currency',
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'e_modified_amount',
+		'fieldtype': 'Currency',
+		'idx': 3,
+		'label': 'Modified Amount',
+		'permlevel': 0,
+		'trigger': 'Client'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'e_depends_on_lwp',
+		'fieldtype': 'Check',
+		'idx': 4,
+		'label': 'Depends on LWP',
+		'permlevel': 0,
+		'trigger': 'Client'
+	}
+]
\ No newline at end of file
diff --git a/hr/page/__init__.py b/hr/page/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/page/__init__.py
diff --git a/hr/search_criteria/__init__.py b/hr/search_criteria/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/search_criteria/__init__.py
diff --git a/hr/search_criteria/employee_appraisals/__init__.py b/hr/search_criteria/employee_appraisals/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/search_criteria/employee_appraisals/__init__.py
diff --git a/hr/search_criteria/employee_appraisals/employee_appraisals.txt b/hr/search_criteria/employee_appraisals/employee_appraisals.txt
new file mode 100644
index 0000000..fc1d3e1
--- /dev/null
+++ b/hr/search_criteria/employee_appraisals/employee_appraisals.txt
@@ -0,0 +1,37 @@
+[
+	{
+		'add_col': None,
+		'add_cond': None,
+		'add_tab': None,
+		'columns': 'Appraisal\x01ID,Appraisal\x01Status,Appraisal\x01Employee,Appraisal\x01Employee Name,Appraisal\x01Start Date,Appraisal\x01End Date,Appraisal\x01Approver,Appraisal\x01Total Score',
+		'creation': '2010-09-01 15:47:57',
+		'criteria_name': 'Employee Appraisals',
+		'custom_query': '',
+		'description': None,
+		'dis_filters': None,
+		'disabled': None,
+		'doc_type': 'Appraisal',
+		'docstatus': 0,
+		'doctype': 'Search Criteria',
+		'filters': "{'Appraisal\x01Saved':1,'Appraisal\x01Submitted':1,'Appraisal\x01Status':'','Appraisal\x01Fiscal Year':''}",
+		'graph_series': None,
+		'graph_values': None,
+		'group_by': None,
+		'idx': None,
+		'modified': '2010-09-01 14:18:42',
+		'modified_by': 'Administrator',
+		'module': 'Payroll',
+		'name': 'employee_appraisals',
+		'owner': 'ashwini@webnotestech.com',
+		'page_len': 50,
+		'parent': None,
+		'parent_doc_type': None,
+		'parentfield': None,
+		'parenttype': None,
+		'report_script': '',
+		'server_script': None,
+		'sort_by': '`tabAppraisal`.`name`',
+		'sort_order': 'DESC',
+		'standard': 'Yes'
+	}
+]
\ No newline at end of file
diff --git a/hr/search_criteria/employee_details/__init__.py b/hr/search_criteria/employee_details/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/search_criteria/employee_details/__init__.py
diff --git a/hr/search_criteria/employee_details/employee_details.txt b/hr/search_criteria/employee_details/employee_details.txt
new file mode 100644
index 0000000..08d785b
--- /dev/null
+++ b/hr/search_criteria/employee_details/employee_details.txt
@@ -0,0 +1,37 @@
+[
+	{
+		'add_col': None,
+		'add_cond': None,
+		'add_tab': None,
+		'columns': 'Employee\x01ID,Employee\x01Employee Name,Employee\x01Employee Code,Employee\x01Employee Number,Employee\x01Gender,Employee\x01Employment Type,Employee\x01Date of Joining,Employee\x01Scheduled Confirmation Date,Employee\x01Contract End Date,Employee\x01Status,Employee\x01Branch,Employee\x01Department,Employee\x01Designation,Employee\x01Grade,Employee\x01Company Email,Employee\x01Relieving Date',
+		'creation': '2010-12-14 10:33:09',
+		'criteria_name': 'Employee Details',
+		'custom_query': '',
+		'description': None,
+		'dis_filters': None,
+		'disabled': None,
+		'doc_type': 'Employee',
+		'docstatus': 0,
+		'doctype': 'Search Criteria',
+		'filters': "{'Employee\x01Gender':'','Employee\x01Month of Birth':'','Employee\x01Status':''}",
+		'graph_series': None,
+		'graph_values': None,
+		'group_by': None,
+		'idx': None,
+		'modified': '2010-04-01 14:27:15',
+		'modified_by': 'Administrator',
+		'module': 'Payroll',
+		'name': 'employee_details',
+		'owner': 'Administrator',
+		'page_len': 50,
+		'parent': None,
+		'parent_doc_type': None,
+		'parentfield': None,
+		'parenttype': None,
+		'report_script': '',
+		'server_script': None,
+		'sort_by': 'ID',
+		'sort_order': 'DESC',
+		'standard': 'Yes'
+	}
+]
\ No newline at end of file
diff --git a/hr/search_criteria/employee_in_company_experience/__init__.py b/hr/search_criteria/employee_in_company_experience/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/search_criteria/employee_in_company_experience/__init__.py
diff --git a/hr/search_criteria/employee_in_company_experience/employee_in_company_experience.txt b/hr/search_criteria/employee_in_company_experience/employee_in_company_experience.txt
new file mode 100644
index 0000000..f3e1b48
--- /dev/null
+++ b/hr/search_criteria/employee_in_company_experience/employee_in_company_experience.txt
@@ -0,0 +1,37 @@
+[
+	{
+		'add_col': None,
+		'add_cond': None,
+		'add_tab': None,
+		'columns': 'Employee Profile\x01Employee,Experience In Company Detail\x01Branch,Experience In Company Detail\x01Department,Experience In Company Detail\x01Designation,Experience In Company Detail\x01Grade,Experience In Company Detail\x01From Date,Experience In Company Detail\x01To Date',
+		'creation': '2010-12-14 10:33:09',
+		'criteria_name': 'Employee In Company Experience',
+		'custom_query': '',
+		'description': None,
+		'dis_filters': None,
+		'disabled': 1,
+		'doc_type': 'Experience In Company Detail',
+		'docstatus': 0,
+		'doctype': 'Search Criteria',
+		'filters': '{}',
+		'graph_series': None,
+		'graph_values': None,
+		'group_by': None,
+		'idx': None,
+		'modified': '2010-04-01 14:27:15',
+		'modified_by': 'Administrator',
+		'module': 'Payroll',
+		'name': 'employee_in_company_experience',
+		'owner': 'Administrator',
+		'page_len': 50,
+		'parent': None,
+		'parent_doc_type': 'Employee Profile',
+		'parentfield': None,
+		'parenttype': None,
+		'report_script': '',
+		'server_script': '',
+		'sort_by': 'ID',
+		'sort_order': 'DESC',
+		'standard': 'Yes'
+	}
+]
\ No newline at end of file
diff --git a/hr/search_criteria/employee_information/__init__.py b/hr/search_criteria/employee_information/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/search_criteria/employee_information/__init__.py
diff --git a/hr/search_criteria/employee_information/employee_information.py b/hr/search_criteria/employee_information/employee_information.py
new file mode 100644
index 0000000..74f8282
--- /dev/null
+++ b/hr/search_criteria/employee_information/employee_information.py
@@ -0,0 +1,6 @@
+for c in range(0,len(colnames)):
+  l = (len(colnames[c])*9) 
+  if l < 150 : col_width = '150px'
+  else:  col_width = '%spx'%(l)
+
+  colwidths[c] = col_width
\ No newline at end of file
diff --git a/hr/search_criteria/employee_information/employee_information.txt b/hr/search_criteria/employee_information/employee_information.txt
new file mode 100644
index 0000000..5a96aed
--- /dev/null
+++ b/hr/search_criteria/employee_information/employee_information.txt
@@ -0,0 +1,37 @@
+[
+	{
+		'add_col': None,
+		'add_cond': None,
+		'add_tab': None,
+		'columns': 'Employee\x01ID,Employee\x01Employee Name,Employee\x01Employee Number,Employee\x01Date of Joining,Employee\x01Gender,Employee\x01Date of Birth,Employee\x01Employment Type,Employee\x01Scheduled Confirmation Date,Employee\x01Contract End Date,Employee\x01Status,Employee\x01Branch,Employee\x01Department,Employee\x01Designation,Employee\x01Grade,Employee\x01Reports to,Employee\x01Email (By company),Employee\x01Bank Name,Employee\x01Relieving Date',
+		'creation': '2010-12-14 10:33:09',
+		'criteria_name': 'Employee Information',
+		'custom_query': '',
+		'description': None,
+		'dis_filters': None,
+		'disabled': None,
+		'doc_type': 'Employee',
+		'docstatus': 0,
+		'doctype': 'Search Criteria',
+		'filters': "{'Employee\x01Saved':1,'Employee\x01Submitted':1,'Employee\x01Gender':'','Employee\x01Month of Birth':'','Employee\x01Status':''}",
+		'graph_series': None,
+		'graph_values': None,
+		'group_by': None,
+		'idx': None,
+		'modified': '2010-10-26 12:03:08',
+		'modified_by': 'Administrator',
+		'module': 'Payroll',
+		'name': 'employee_information',
+		'owner': 'harshada@webnotestech.com',
+		'page_len': 50,
+		'parent': None,
+		'parent_doc_type': None,
+		'parentfield': None,
+		'parenttype': None,
+		'report_script': '',
+		'server_script': None,
+		'sort_by': '`tabEmployee`.`name`',
+		'sort_order': 'DESC',
+		'standard': 'Yes'
+	}
+]
\ No newline at end of file
diff --git a/hr/search_criteria/employees_birthday/__init__.py b/hr/search_criteria/employees_birthday/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/search_criteria/employees_birthday/__init__.py
diff --git a/hr/search_criteria/employees_birthday/employees_birthday.txt b/hr/search_criteria/employees_birthday/employees_birthday.txt
new file mode 100644
index 0000000..30932b9
--- /dev/null
+++ b/hr/search_criteria/employees_birthday/employees_birthday.txt
@@ -0,0 +1,37 @@
+[
+	{
+		'add_col': None,
+		'add_cond': None,
+		'add_tab': None,
+		'columns': 'Employee\x01ID,Employee\x01Employee Name,Employee\x01Department,Employee\x01Gender,Employee\x01Date of Birth,Employee\x01Month of Birth',
+		'creation': '2010-12-14 10:33:09',
+		'criteria_name': "Employee's Birthday",
+		'custom_query': '',
+		'description': None,
+		'dis_filters': None,
+		'disabled': None,
+		'doc_type': 'Employee',
+		'docstatus': 0,
+		'doctype': 'Search Criteria',
+		'filters': "{'Employee\x01Saved':1,'Employee\x01Gender':'','Employee\x01Month of Birth':'May','Employee\x01Status':''}",
+		'graph_series': None,
+		'graph_values': None,
+		'group_by': None,
+		'idx': None,
+		'modified': '2010-08-04 13:15:28',
+		'modified_by': 'Administrator',
+		'module': 'Payroll',
+		'name': 'employees_birthday',
+		'owner': 'Administrator',
+		'page_len': 50,
+		'parent': None,
+		'parent_doc_type': None,
+		'parentfield': None,
+		'parenttype': None,
+		'report_script': '',
+		'server_script': None,
+		'sort_by': '`tabEmployee`.`name`',
+		'sort_order': 'DESC',
+		'standard': 'Yes'
+	}
+]
\ No newline at end of file
diff --git a/hr/search_criteria/employeewise_balance_leave_report/__init__.py b/hr/search_criteria/employeewise_balance_leave_report/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/search_criteria/employeewise_balance_leave_report/__init__.py
diff --git a/hr/search_criteria/employeewise_balance_leave_report/employeewise_balance_leave_report.js b/hr/search_criteria/employeewise_balance_leave_report/employeewise_balance_leave_report.js
new file mode 100644
index 0000000..2439ffa
--- /dev/null
+++ b/hr/search_criteria/employeewise_balance_leave_report/employeewise_balance_leave_report.js
@@ -0,0 +1,3 @@
+this.mytabs.items['Select Columns'].hide();
+
+this.mytabs.tabs['More Filters'].hide();
\ No newline at end of file
diff --git a/hr/search_criteria/employeewise_balance_leave_report/employeewise_balance_leave_report.py b/hr/search_criteria/employeewise_balance_leave_report/employeewise_balance_leave_report.py
new file mode 100644
index 0000000..c258d15
--- /dev/null
+++ b/hr/search_criteria/employeewise_balance_leave_report/employeewise_balance_leave_report.py
@@ -0,0 +1,20 @@
+leave_types = sql("select name from `tabLeave Type` where docstatus != 2 and name not in ('Compensatory Off','Leave Without Pay')")
+msgprint(leave_types)
+col=[]
+  
+for e in leave_types:
+  l = (len(e)*9) 
+  if l < 150 : col_width = '150px'
+  else:  col_width = '%spx'%(l)
+  
+  col.append([e,'Currency',col_width,''])
+
+
+col.append(['Total Balance','Currency','150px',''])
+
+for c in col:
+  colnames.append(c[0])
+  coltypes.append(c[1])
+  colwidths.append(c[2])
+  coloptions.append(c[3])
+  col_idx[c[0]] = len(colnames)
diff --git a/hr/search_criteria/employeewise_balance_leave_report/employeewise_balance_leave_report.txt b/hr/search_criteria/employeewise_balance_leave_report/employeewise_balance_leave_report.txt
new file mode 100644
index 0000000..4f8d503
--- /dev/null
+++ b/hr/search_criteria/employeewise_balance_leave_report/employeewise_balance_leave_report.txt
@@ -0,0 +1,37 @@
+[
+	{
+		'add_col': None,
+		'add_cond': None,
+		'add_tab': None,
+		'columns': 'Employee\x01ID',
+		'creation': '2010-12-14 10:33:09',
+		'criteria_name': 'Employeewise Balance Leave Report',
+		'custom_query': '',
+		'description': None,
+		'dis_filters': None,
+		'disabled': None,
+		'doc_type': 'Employee',
+		'docstatus': 0,
+		'doctype': 'Search Criteria',
+		'filters': "{'Employee\x01Saved':1,'Employee\x01Submitted':1,'Employee\x01Gender':'','Employee\x01Month of Birth':'','Employee\x01Status':'Active'}",
+		'graph_series': None,
+		'graph_values': None,
+		'group_by': None,
+		'idx': None,
+		'modified': '2010-12-01 10:39:56',
+		'modified_by': 'Administrator',
+		'module': 'Payroll',
+		'name': 'employeewise_balance_leave_report',
+		'owner': 'harshada@webnotestech.com',
+		'page_len': 100,
+		'parent': None,
+		'parent_doc_type': None,
+		'parentfield': None,
+		'parenttype': None,
+		'report_script': None,
+		'server_script': None,
+		'sort_by': '`tabEmployee`.`name`',
+		'sort_order': 'ASC',
+		'standard': 'Yes'
+	}
+]
\ No newline at end of file
diff --git a/hr/search_criteria/employeewise_leave_transaction_details/__init__.py b/hr/search_criteria/employeewise_leave_transaction_details/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/search_criteria/employeewise_leave_transaction_details/__init__.py
diff --git a/hr/search_criteria/employeewise_leave_transaction_details/employeewise_leave_transaction_details.txt b/hr/search_criteria/employeewise_leave_transaction_details/employeewise_leave_transaction_details.txt
new file mode 100644
index 0000000..67672d6
--- /dev/null
+++ b/hr/search_criteria/employeewise_leave_transaction_details/employeewise_leave_transaction_details.txt
@@ -0,0 +1,37 @@
+[
+	{
+		'add_col': None,
+		'add_cond': None,
+		'add_tab': None,
+		'columns': 'Leave Transaction\x01ID,Leave Transaction\x01Fiscal Year,Leave Transaction\x01Employee,Leave Transaction\x01Leave Type,Leave Transaction\x01Previous Balance,Leave Transaction\x01Leave Transaction Type,Leave Transaction\x01Allocation Type,Leave Transaction\x01Deduction Type,Leave Transaction\x01Half Day,Leave Transaction\x01From Date,Leave Transaction\x01To Date,Leave Transaction\x01Encashment Date,Leave Transaction\x01Total Leave Days,Leave Transaction\x01Status',
+		'creation': '2010-08-08 17:09:32',
+		'criteria_name': 'Employeewise Leave Transaction Details',
+		'custom_query': '',
+		'description': None,
+		'dis_filters': None,
+		'disabled': None,
+		'doc_type': 'Leave Transaction',
+		'docstatus': 0,
+		'doctype': 'Search Criteria',
+		'filters': "{'Leave Transaction\x01Saved':1,'Leave Transaction\x01Submitted':1}",
+		'graph_series': None,
+		'graph_values': None,
+		'group_by': None,
+		'idx': None,
+		'modified': '2010-08-04 08:56:43',
+		'modified_by': 'Administrator',
+		'module': 'Payroll',
+		'name': 'employeewise_leave_transaction_details',
+		'owner': 'Administrator',
+		'page_len': 50,
+		'parent': None,
+		'parent_doc_type': None,
+		'parentfield': None,
+		'parenttype': None,
+		'report_script': '',
+		'server_script': None,
+		'sort_by': '`tabLeave Transaction`.`name`',
+		'sort_order': 'DESC',
+		'standard': 'Yes'
+	}
+]
\ No newline at end of file
diff --git a/hr/search_criteria/expense_vouchers/__init__.py b/hr/search_criteria/expense_vouchers/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/search_criteria/expense_vouchers/__init__.py
diff --git a/hr/search_criteria/expense_vouchers/expense_vouchers.txt b/hr/search_criteria/expense_vouchers/expense_vouchers.txt
new file mode 100644
index 0000000..ffc57cb
--- /dev/null
+++ b/hr/search_criteria/expense_vouchers/expense_vouchers.txt
@@ -0,0 +1,37 @@
+[
+	{
+		'add_col': None,
+		'add_cond': None,
+		'add_tab': None,
+		'columns': 'Expense Voucher\x01ID,Expense Voucher\x01Approval Status,Expense Voucher\x01From Employee,Expense Voucher\x01Employee Name,Expense Voucher\x01Approver,Expense Voucher\x01Posting Date,Expense Voucher\x01Total Claimed Amount,Expense Voucher\x01Total Sanctioned Amount',
+		'creation': '2010-09-03 16:45:06',
+		'criteria_name': 'Expense Vouchers',
+		'custom_query': '',
+		'description': None,
+		'dis_filters': None,
+		'disabled': None,
+		'doc_type': 'Expense Voucher',
+		'docstatus': 0,
+		'doctype': 'Search Criteria',
+		'filters': "{'Expense Voucher\x01Saved':1,'Expense Voucher\x01Submitted':1,'Expense Voucher\x01Approval Status':'','Expense Voucher\x01Fiscal Year':''}",
+		'graph_series': None,
+		'graph_values': None,
+		'group_by': None,
+		'idx': None,
+		'modified': '2010-09-02 11:05:37',
+		'modified_by': 'Administrator',
+		'module': 'Payroll',
+		'name': 'expense_vouchers',
+		'owner': 'ashwini@webnotestech.com',
+		'page_len': 50,
+		'parent': None,
+		'parent_doc_type': None,
+		'parentfield': None,
+		'parenttype': None,
+		'report_script': '',
+		'server_script': None,
+		'sort_by': '`tabExpense Voucher`.`name`',
+		'sort_order': 'DESC',
+		'standard': 'Yes'
+	}
+]
\ No newline at end of file
diff --git a/hr/search_criteria/monthly_attendance_details/__init__.py b/hr/search_criteria/monthly_attendance_details/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/search_criteria/monthly_attendance_details/__init__.py
diff --git a/hr/search_criteria/monthly_attendance_details/monthly_attendance_details.js b/hr/search_criteria/monthly_attendance_details/monthly_attendance_details.js
new file mode 100644
index 0000000..bb74506
--- /dev/null
+++ b/hr/search_criteria/monthly_attendance_details/monthly_attendance_details.js
@@ -0,0 +1,29 @@
+var get_month = function(){
+
+  var dict = {0:'Jan', 1:'Feb',2:'Mar',3:'Apr',4:'May',5:'June',6:'July',7:'Aug',8:'Sept',9:'Oct',10:'Nov',11:'Dec'}
+  var d = new Date();
+  return dict[d.getMonth()]
+
+}
+
+report.customize_filters = function() {
+  this.hide_all_filters();
+  this.add_filter({fieldname:'month', label:'Month', fieldtype:'Select', options:'Jan'+NEWLINE+'Feb'+NEWLINE+'Mar'+NEWLINE+'Apr'+NEWLINE+'May'+NEWLINE+'June'+NEWLINE+'July'+NEWLINE+'Aug'+NEWLINE+'Sept'+NEWLINE+'Oct'+NEWLINE+'Nov'+NEWLINE+'Dec',ignore : 1,parent:'Attendance', single_select:1});
+  
+  this.filter_fields_dict['Attendance'+FILTER_SEP +'Employee'].df.filter_hide = 0;
+  this.filter_fields_dict['Attendance'+FILTER_SEP +'Month'].df.filter_hide = 0;
+  this.filter_fields_dict['Attendance'+FILTER_SEP +'Fiscal Year'].df.filter_hide = 0;
+  this.filter_fields_dict['Attendance'+FILTER_SEP +'Company'].df.filter_hide = 0;
+  
+  this.filter_fields_dict['Attendance'+FILTER_SEP +'Employee'].df.in_first_page = 1;
+  this.filter_fields_dict['Attendance'+FILTER_SEP +'Month'].df.in_first_page = 1;
+  this.filter_fields_dict['Attendance'+FILTER_SEP +'Fiscal Year'].df.in_first_page = 1;
+  this.filter_fields_dict['Attendance'+FILTER_SEP +'Company'].df.in_first_page = 1;
+  
+  this.filter_fields_dict['Attendance'+FILTER_SEP +'Month'].df['report_default'] = get_month();
+  this.filter_fields_dict['Attendance'+FILTER_SEP +'Company'].df['report_default'] = sys_defaults.company;
+  this.filter_fields_dict['Attendance'+FILTER_SEP +'Fiscal Year'].df['report_default'] = sys_defaults.fiscal_year;
+  this.get_filter('Attendance', 'Fiscal Year').set_as_single();
+}
+this.mytabs.items['More Filters'].hide();
+this.mytabs.items['Select Columns'].hide();
\ No newline at end of file
diff --git a/hr/search_criteria/monthly_attendance_details/monthly_attendance_details.py b/hr/search_criteria/monthly_attendance_details/monthly_attendance_details.py
new file mode 100644
index 0000000..55fdef0
--- /dev/null
+++ b/hr/search_criteria/monthly_attendance_details/monthly_attendance_details.py
@@ -0,0 +1,76 @@
+#add column employee, employee name
+#--------------------------------------------------------------------------------------
+col =[['Employee','Link','155px','Employee'],['Employee Name','Data','150px','']]
+
+for c in col:
+  colnames.append(c[0])
+  coltypes.append(c[1])
+  colwidths.append(c[2])
+  coloptions.append(c[3])
+  
+  col_idx[c[0]] = len(colnames)-1
+
+
+#get feb months last day
+#--------------------------------------------------------------------------------------
+fy = filter_values.get('fiscal_year')
+month = filter_values.get('month')
+mdict = {'Jan':'01', 'Feb':'02','Mar':'03','Apr':'04','May':'05','June':'06','July':'07','Aug':'08','Sept':'09','Oct':'10','Nov':'11','Dec':'12'}
+
+import webnotes.utils
+from dateutil.relativedelta import relativedelta
+
+ysd = sql("select year_start_date from `tabFiscal Year` where name = '%s' and docstatus !=2"%fy)[0][0]
+
+last_date = webnotes.utils.get_last_day(ysd + relativedelta(months = (cint(ysd.strftime('%m'))>cint(mdict[month]) and (12-cint(ysd.strftime('%m'))+cint(mdict[month])) or (cint(mdict[month]) - cint(ysd.strftime('%m'))))))
+feb = last_date.strftime('%d')
+
+
+
+#get last day and add columns
+#--------------------------------------------------------------------------------------
+dict = {'Jan': 31,'Feb':cint(feb), 'Mar':31,'Apr':30,'May':31,'June':30,'July':31,'Aug':31,'Sept':30,'Oct':31,'Nov':30,'Dec':31}
+
+for i in range(0,dict[month]):
+  colnames.append(i+1)
+  coltypes.append('Data')
+  colwidths.append('25px')
+  
+  col_idx[c[0]] = len(colnames)-1
+  
+#add total present, absent days  
+#--------------------------------------------------------------------------------------
+tot_col =[['Total Present Days','Data','120px'],['Total Absent Days','Data','120px']]
+
+for c in tot_col:
+  colnames.append(c[0])
+  coltypes.append(c[1])
+  colwidths.append(c[2])
+
+  col_idx[c[0]] = len(colnames)-1  
+  
+#get data
+#--------------------------------------------------------------------------------------  
+
+
+year = last_date.strftime('%Y')
+out = []
+for r in res:
+  p_cnt = a_cnt = 0
+  
+  for i in range(0,dict[month]):
+    new_date = str(year)+'-'+mdict[month]+'-'+((i>=9) and str(i+1) or ('0'+str(i+1)))
+    
+    chk = sql("select status from `tabAttendance` where employee='%s' and att_date = '%s' and docstatus=1"%(r[0],new_date))
+    chk = chk and chk[0][0][0] or '-'
+    if chk=='P':
+      p_cnt +=1
+    elif chk=='A':
+      a_cnt +=1
+    r.append(chk)
+
+  r.append(p_cnt)
+  r.append(a_cnt)
+
+  if p_cnt or a_cnt:
+    out.append(r)
diff --git a/hr/search_criteria/monthly_attendance_details/monthly_attendance_details.sql b/hr/search_criteria/monthly_attendance_details/monthly_attendance_details.sql
new file mode 100644
index 0000000..7487fb4
--- /dev/null
+++ b/hr/search_criteria/monthly_attendance_details/monthly_attendance_details.sql
@@ -0,0 +1 @@
+SELECT DISTINCT `tabAttendance`.employee, `tabAttendance`.employee_name FROM `tabAttendance` WHERE `tabAttendance`.fiscal_year like '%(fiscal_year)s%%' AND `tabAttendance`.`company` like '%(company)s%%' AND `tabAttendance`.`employee` like '%(employee)s%%'
\ No newline at end of file
diff --git a/hr/search_criteria/monthly_attendance_details/monthly_attendance_details.txt b/hr/search_criteria/monthly_attendance_details/monthly_attendance_details.txt
new file mode 100644
index 0000000..5817aa9
--- /dev/null
+++ b/hr/search_criteria/monthly_attendance_details/monthly_attendance_details.txt
@@ -0,0 +1,37 @@
+[
+	{
+		'add_col': None,
+		'add_cond': None,
+		'add_tab': None,
+		'columns': 'Attendance\x01Employee',
+		'creation': '2010-12-14 10:33:09',
+		'criteria_name': 'Monthly Attendance Details',
+		'custom_query': None,
+		'description': None,
+		'dis_filters': None,
+		'disabled': None,
+		'doc_type': 'Attendance',
+		'docstatus': 0,
+		'doctype': 'Search Criteria',
+		'filters': "{'Attendance\x01Status':'','Attendance\x01Fiscal Year':''}",
+		'graph_series': None,
+		'graph_values': None,
+		'group_by': None,
+		'idx': None,
+		'modified': '2010-11-30 18:03:56',
+		'modified_by': 'Administrator',
+		'module': 'Payroll',
+		'name': 'monthly_attendance_details',
+		'owner': 'harshada@webnotestech.com',
+		'page_len': 50,
+		'parent': None,
+		'parent_doc_type': None,
+		'parentfield': None,
+		'parenttype': None,
+		'report_script': None,
+		'server_script': None,
+		'sort_by': '`tabAttendance`.`employee`',
+		'sort_order': 'DESC',
+		'standard': 'Yes'
+	}
+]
\ No newline at end of file
diff --git a/hr/search_criteria/monthly_salary_register/__init__.py b/hr/search_criteria/monthly_salary_register/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/search_criteria/monthly_salary_register/__init__.py
diff --git a/hr/search_criteria/monthly_salary_register/monthly_salary_register.txt b/hr/search_criteria/monthly_salary_register/monthly_salary_register.txt
new file mode 100644
index 0000000..7aa5420
--- /dev/null
+++ b/hr/search_criteria/monthly_salary_register/monthly_salary_register.txt
@@ -0,0 +1,37 @@
+[
+	{
+		'add_col': None,
+		'add_cond': None,
+		'add_tab': None,
+		'columns': 'Salary Slip\x01ID,Salary Slip\x01Employee,Salary Slip\x01Employee Name,Salary Slip\x01Leave Without Pay,Salary Slip\x01Arrear Amount',
+		'creation': '2010-12-14 10:33:09',
+		'criteria_name': 'Monthly Salary Register',
+		'custom_query': '',
+		'description': None,
+		'dis_filters': None,
+		'disabled': None,
+		'doc_type': 'Salary Slip',
+		'docstatus': 0,
+		'doctype': 'Search Criteria',
+		'filters': "{'Salary Slip\x01Month':'','Salary Slip\x01Year':''}",
+		'graph_series': None,
+		'graph_values': None,
+		'group_by': None,
+		'idx': None,
+		'modified': '2010-04-05 14:43:08',
+		'modified_by': 'Administrator',
+		'module': 'Payroll',
+		'name': 'monthly_salary_register',
+		'owner': 'Administrator',
+		'page_len': 50,
+		'parent': None,
+		'parent_doc_type': None,
+		'parentfield': None,
+		'parenttype': None,
+		'report_script': '',
+		'server_script': None,
+		'sort_by': 'ID',
+		'sort_order': 'DESC',
+		'standard': 'Yes'
+	}
+]
\ No newline at end of file
diff --git a/hr/search_criteria/new_or_left_employees_for_a_month/__init__.py b/hr/search_criteria/new_or_left_employees_for_a_month/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/search_criteria/new_or_left_employees_for_a_month/__init__.py
diff --git a/hr/search_criteria/new_or_left_employees_for_a_month/new_or_left_employees_for_a_month.js b/hr/search_criteria/new_or_left_employees_for_a_month/new_or_left_employees_for_a_month.js
new file mode 100644
index 0000000..ee61977
--- /dev/null
+++ b/hr/search_criteria/new_or_left_employees_for_a_month/new_or_left_employees_for_a_month.js
@@ -0,0 +1,50 @@
+report.customize_filters = function() {
+  var d = new Date();
+  
+  var month=["January","February","March","April","May","June","July","August","September","October","November","December"]
+  
+  this.add_filter({fieldname:'month', label:'Month',fieldtype:'Select', options:"January"+NEWLINE+"February"+NEWLINE+"March"+NEWLINE+"April"+NEWLINE+"May"+NEWLINE+"June"+NEWLINE+"July"+NEWLINE+"August"+NEWLINE+"September"+NEWLINE+"October"+NEWLINE+"November"+NEWLINE+"December",report_default : month[d.getMonth()],ignore : 1, parent:'Employee'});
+  
+  this.filter_fields_dict['Employee'+FILTER_SEP +'Month'].df.in_first_page = 1;
+  this.filter_fields_dict['Employee'+FILTER_SEP +'Status'].df.in_first_page = 1;
+  this.filter_fields_dict['Employee'+FILTER_SEP +'Status'].df.report_default = 'Active';
+  
+  this.add_filter({fieldname:'year', label:'Year',fieldtype:'Select', options:"2000"+NEWLINE+"2001"+NEWLINE+"2002"+NEWLINE+"2003"+NEWLINE+"2004"+NEWLINE+"2005"+NEWLINE+"2006"+NEWLINE+"2007"+NEWLINE+"2008"+NEWLINE+"2009"+NEWLINE+"2010"+NEWLINE+"2011",report_default : d.getFullYear(),ignore : 1, parent:'Employee'});
+  
+  this.filter_fields_dict['Employee'+FILTER_SEP +'Year'].df.in_first_page = 1;
+}
+
+report.get_query = function() {
+
+  emp_month = this.filter_fields_dict['Employee'+FILTER_SEP+'Month'].get_value();
+  emp_year = this.filter_fields_dict['Employee'+FILTER_SEP+'Year'].get_value();
+  emp_status = this.filter_fields_dict['Employee'+FILTER_SEP+'Status'].get_value();
+
+  // month and year mandatory
+  if ((emp_month == '') || (emp_year == '')) {
+    alert("Please enter Month and Year");
+    return;
+  }
+
+  month={"January":"1", "February":"2", "March":"3", "April":"4","May":"5", "June":"6", "July":"7","August":"8", "September":"9", "October":"10", "November":"11", "December":"12"}
+  
+  mnt = ''
+  for(m=0; m<emp_month.length;m++){
+    if(mnt== '') mnt = "("+month[emp_month[m]];
+    else mnt +=", "+month[emp_month[m]]; 
+  }
+  mnt +=")"
+  c1 = '(MONTH(t1.date_of_joining) in '+mnt+' AND YEAR(t1.date_of_joining) = "'+emp_year+'")';
+  c2 = '(MONTH(t1.relieving_date) in '+mnt+' AND YEAR(t1.relieving_date) = "'+emp_year+'")';
+
+  if(emp_status == 'Active')
+    cond = c1;  
+  else if (emp_status == 'Left')
+    cond = c2;
+  else
+    cond = c1 + ' OR '+c2;
+  
+  var q = 'SELECT t1.name AS "ID", t1.employee_name AS "Employee Name", t1.employee_number AS "Employee Number" FROM `tabEmployee` t1 WHERE '+cond;
+
+  return q;
+}
diff --git a/hr/search_criteria/new_or_left_employees_for_a_month/new_or_left_employees_for_a_month.py b/hr/search_criteria/new_or_left_employees_for_a_month/new_or_left_employees_for_a_month.py
new file mode 100644
index 0000000..aae4db1
--- /dev/null
+++ b/hr/search_criteria/new_or_left_employees_for_a_month/new_or_left_employees_for_a_month.py
@@ -0,0 +1,43 @@
+status = filter_values.get('status')
+month = filter_values.get('month')
+
+
+if status == 'Active' and not status == 'Left':
+  col = [['Employee', 'Link', 'Employee'], ['Employee Name', 'Data', ''], ['Employee Number', 'Data', ''], ['Employment Type','Link','Employment Type'],['Scheduled Confirmation Date','Data',''],['Final Confirmation Date','Data',''],['Contract End Date','Data',''],['Branch','Link','Branch'],['Department','Link','Department'],['Designation','Link','Designation'],['Reports to','Link','Employee'],['Grade','Link','Grade']]
+
+elif status == 'Left' and not status == 'Active':
+  col = [['Employee', 'Link', 'Employee'], ['Employee Name', 'Data', ''], ['Employee Number', 'Data', ''], ['Resignation Letter Date','Data',''],['Relieving Date','Data',''],['Notice - Number of Days','Data',''],['Reason for Leaving','Data',''],['Leave Encashed?','Data',''],['Encashment Date','Data',''],['Reason for Resignation','Data','']]
+
+else:
+  col = [['Employee', 'Link', 'Employee'], ['Employee Name', 'Data', ''], ['Employee Number', 'Data', ''], ['Employment Type','Link','Employment Type'],['Scheduled Confirmation Date','Data',''],['Final Confirmation Date','Data',''],['Contract End Date','Data',''],['Branch','Link','Branch'],['Department','Link','Department'],['Designation','Link','Designation'],['Reports to','Link','Employee'],['Grade','Link','Grade'],['Resignation Letter Date','Data',''],['Relieving Date','Data',''],['Notice - Number of Days','Data',''],['Reason for Leaving','Data',''],['Leave Encashed?','Data',''],['Encashment Date','Data',''],['Reason for Resignation','Data','']]
+
+for c in col:
+  colnames.append(c[0])
+  coltypes.append(c[1])
+  colwidths.append('150px')
+  coloptions.append(c[2])
+  
+  col_idx[c[0]] = len(colnames)-1
+
+
+for c in range(0,len(colnames)):
+  l = (len(colnames[c])*9) 
+  if l < 150 : col_width = '150px'
+  else:  col_width = '%spx'%(l)
+
+  colwidths[c] = col_width
+
+for r in res:
+
+  if status == 'Active':
+    ret = sql("select employment_type,scheduled_confirmation_date,final_confirmation_date,contract_end_date,branch,department,designation,reports_to,grade from `tabEmployee` where name = %s",r[0])
+
+  elif status == 'Left':
+    ret = sql("select resignation_letter_date,relieving_date,notice_number_of_days,reason_for_leaving,leave_encashed,encashment_date,reason_for_resignation from `tabEmployee` where name =%s",r[0])
+
+  else:
+    ret = sql("select employment_type,scheduled_confirmation_date,final_confirmation_date,contract_end_date,branch,department,designation,reports_to,grade,resignation_letter_date,relieving_date,notice_number_of_days,reason_for_leaving,leave_encashed,encashment_date,reason_for_resignation from `tabEmployee` where name = %s",r[0])
+
+  ret = ret and ret[0] or []
+  for t in ret:
+    r.append(cstr(t))
diff --git a/hr/search_criteria/new_or_left_employees_for_a_month/new_or_left_employees_for_a_month.txt b/hr/search_criteria/new_or_left_employees_for_a_month/new_or_left_employees_for_a_month.txt
new file mode 100644
index 0000000..6074220
--- /dev/null
+++ b/hr/search_criteria/new_or_left_employees_for_a_month/new_or_left_employees_for_a_month.txt
@@ -0,0 +1,37 @@
+[
+	{
+		'add_col': None,
+		'add_cond': None,
+		'add_tab': None,
+		'columns': 'Employee\x01ID',
+		'creation': '2010-12-14 10:33:09',
+		'criteria_name': 'New or left employees for a month',
+		'custom_query': '',
+		'description': None,
+		'dis_filters': None,
+		'disabled': None,
+		'doc_type': 'Employee',
+		'docstatus': 0,
+		'doctype': 'Search Criteria',
+		'filters': "{'Employee\x01Saved':1,'Employee\x01Submitted':1,'Employee\x01Gender':'','Employee\x01Month of Birth':'','Employee\x01Status':''}",
+		'graph_series': None,
+		'graph_values': None,
+		'group_by': None,
+		'idx': None,
+		'modified': '2010-12-01 09:54:34',
+		'modified_by': 'Administrator',
+		'module': 'Payroll',
+		'name': 'new_or_left_employees_for_a_month',
+		'owner': 'harshada@webnotestech.com',
+		'page_len': 50,
+		'parent': None,
+		'parent_doc_type': None,
+		'parentfield': None,
+		'parenttype': None,
+		'report_script': None,
+		'server_script': None,
+		'sort_by': '`tabEmployee`.`name`',
+		'sort_order': 'DESC',
+		'standard': 'Yes'
+	}
+]
\ No newline at end of file
diff --git a/hr/search_criteria/pending_appraisals/__init__.py b/hr/search_criteria/pending_appraisals/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/search_criteria/pending_appraisals/__init__.py
diff --git a/hr/search_criteria/pending_appraisals/pending_appraisals.js b/hr/search_criteria/pending_appraisals/pending_appraisals.js
new file mode 100644
index 0000000..4b5adec
--- /dev/null
+++ b/hr/search_criteria/pending_appraisals/pending_appraisals.js
@@ -0,0 +1,41 @@
+report.customize_filters = function() {
+  this.hide_all_filters();  
+  
+  this.add_filter({fieldname:'approver', label:'Approver', fieldtype:'Link', options:'Profile', ignore : 1, parent:'Appraisal'});  
+  this.filter_fields_dict['Appraisal'+FILTER_SEP +'Approver'].df.in_first_page = 1;
+  
+  this.filter_fields_dict['Appraisal'+FILTER_SEP +'Employee'].df.filter_hide = 0;
+  this.filter_fields_dict['Appraisal'+FILTER_SEP +'Employee Name'].df.filter_hide = 0;
+  this.filter_fields_dict['Appraisal'+FILTER_SEP +'Fiscal Year'].df.filter_hide = 0;  
+  this.filter_fields_dict['Appraisal'+FILTER_SEP +'From Start Date'].df.filter_hide = 0;
+  //this.filter_fields_dict['Appraisal'+FILTER_SEP +'To Start Date'].df.filter_hide = 0;
+  //this.filter_fields_dict['Appraisal'+FILTER_SEP +'From End Date'].df.filter_hide = 0;
+  this.filter_fields_dict['Appraisal'+FILTER_SEP +'To End Date'].df.filter_hide = 0;
+}
+this.mytabs.items['Select Columns'].hide();
+
+report.get_query = function(){
+  //get filter values
+  emp = this.filter_fields_dict['Appraisal'+FILTER_SEP+'Employee'].get_value(); 
+  emp_nm = this.filter_fields_dict['Appraisal'+FILTER_SEP+'Employee Name'].get_value(); 
+  frm_start_date = this.filter_fields_dict['Appraisal'+FILTER_SEP+'From Start Date'].get_value(); 
+  //to_start_date = this.filter_fields_dict['Appraisal'+FILTER_SEP+'To Start Date'].get_value(); 
+  //frm_end_date = this.filter_fields_dict['Appraisal'+FILTER_SEP+'From End Date'].get_value(); 
+  to_end_date = this.filter_fields_dict['Appraisal'+FILTER_SEP+'To End Date'].get_value(); 
+  fiscal_year = this.filter_fields_dict['Appraisal'+FILTER_SEP+'Fiscal Year'].get_value();
+  approver = this.filter_fields_dict['Appraisal'+FILTER_SEP+'Approver'].get_value();
+  
+  var cond = '';
+  if(emp) cond += ' AND `tabAppraisal`.employee = "'+emp+'"';
+  if(emp_nm) cond += ' AND `tabAppraisal`.employee_name = "'+emp_nm+'"';
+  if(frm_start_date) cond += ' AND `tabAppraisal`.start_date >= "'+frm_start_date+'"';
+  //if(to_start_date) cond += ' AND `tabAppraisal`.start_date <= "'+to_start_date+'"';
+  //if(frm_end_date) cond += ' AND `tabAppraisal`.end_date >= "'+frm_end_date+'"';
+  if(to_end_date) cond += ' AND `tabAppraisal`.end_date <= "'+to_end_date+'"';
+  if(fiscal_year !='') cond += ' AND `tabAppraisal`.fiscal_year = "'+fiscal_year+'"';
+  if(approver) cond += ' AND `tabAppraisal`.kra_approver = "'+approver+'"';
+
+  //var q = 'SELECT DISTINCT `tabAppraisal`.name, `tabAppraisal`.status, `tabAppraisal`.employee, `tabAppraisal`.employee_name, `tabAppraisal`.start_date,`tabAppraisal`.end_date,`tabAppraisal`.kra_approver, `tabAppraisal`.total_score FROM `tabAppraisal` WHERE `tabAppraisal`.status= "Submitted" AND `tabAppraisal`.kra_approver = "'+ user+'"'+cond;  
+  var q = 'SELECT DISTINCT `tabAppraisal`.name, `tabAppraisal`.employee, `tabAppraisal`.employee_name, `tabAppraisal`.start_date,`tabAppraisal`.end_date,`tabAppraisal`.kra_approver, `tabAppraisal`.total_score FROM `tabAppraisal` WHERE `tabAppraisal`.status= "Submitted"'+cond;  
+  return q;
+}
\ No newline at end of file
diff --git a/hr/search_criteria/pending_appraisals/pending_appraisals.txt b/hr/search_criteria/pending_appraisals/pending_appraisals.txt
new file mode 100644
index 0000000..f732974
--- /dev/null
+++ b/hr/search_criteria/pending_appraisals/pending_appraisals.txt
@@ -0,0 +1,37 @@
+[
+	{
+		'add_col': None,
+		'add_cond': '',
+		'add_tab': None,
+		'columns': '',
+		'creation': '2010-09-01 15:47:57',
+		'criteria_name': 'Pending Appraisals',
+		'custom_query': '',
+		'description': None,
+		'dis_filters': None,
+		'disabled': 0,
+		'doc_type': 'Appraisal',
+		'docstatus': 0,
+		'doctype': 'Search Criteria',
+		'filters': "{'Appraisal\x01Submitted':1,'Appraisal\x01Status':'Submitted','Appraisal\x01Fiscal Year':'','Appraisal\x01Approver':''}",
+		'graph_series': None,
+		'graph_values': None,
+		'group_by': None,
+		'idx': None,
+		'modified': '2010-09-01 14:19:02',
+		'modified_by': 'Administrator',
+		'module': 'Payroll',
+		'name': 'pending_appraisals',
+		'owner': 'ashwini@webnotestech.com',
+		'page_len': 50,
+		'parent': None,
+		'parent_doc_type': None,
+		'parentfield': None,
+		'parenttype': None,
+		'report_script': None,
+		'server_script': None,
+		'sort_by': '`tabAppraisal`.`name`',
+		'sort_order': 'DESC',
+		'standard': 'Yes'
+	}
+]
\ No newline at end of file
diff --git a/hr/search_criteria/pending_expense_vouchers/__init__.py b/hr/search_criteria/pending_expense_vouchers/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/search_criteria/pending_expense_vouchers/__init__.py
diff --git a/hr/search_criteria/pending_expense_vouchers/pending_expense_vouchers.js b/hr/search_criteria/pending_expense_vouchers/pending_expense_vouchers.js
new file mode 100644
index 0000000..d4c0398
--- /dev/null
+++ b/hr/search_criteria/pending_expense_vouchers/pending_expense_vouchers.js
@@ -0,0 +1,37 @@
+report.customize_filters = function() {
+  this.hide_all_filters();  
+  
+  this.add_filter({fieldname:'approver', label:'Approver', fieldtype:'Link', options:'Profile', ignore : 1, parent:'Expense Voucher'});  
+  this.filter_fields_dict['Expense Voucher'+FILTER_SEP +'Approver'].df.in_first_page = 1;
+  
+  this.filter_fields_dict['Expense Voucher'+FILTER_SEP +'From Employee'].df.filter_hide = 0;
+  this.filter_fields_dict['Expense Voucher'+FILTER_SEP +'Employee Name'].df.filter_hide = 0;
+  this.filter_fields_dict['Expense Voucher'+FILTER_SEP +'Fiscal Year'].df.filter_hide = 0;  
+  this.filter_fields_dict['Expense Voucher'+FILTER_SEP +'From Posting Date'].df.filter_hide = 0;
+  this.filter_fields_dict['Expense Voucher'+FILTER_SEP +'To Posting Date'].df.filter_hide = 0;
+  this.filter_fields_dict['Expense Voucher'+FILTER_SEP +'Company'].df.filter_hide = 0;
+}
+this.mytabs.items['Select Columns'].hide();
+
+report.get_query = function(){
+  //get filter values
+  emp = this.filter_fields_dict['Expense Voucher'+FILTER_SEP+'From Employee'].get_value(); 
+  emp_nm = this.filter_fields_dict['Expense Voucher'+FILTER_SEP+'Employee Name'].get_value(); 
+  frm_start_date = this.filter_fields_dict['Expense Voucher'+FILTER_SEP+'From Posting Date'].get_value(); 
+  to_end_date = this.filter_fields_dict['Expense Voucher'+FILTER_SEP+'To Posting Date'].get_value(); 
+  fiscal_year = this.filter_fields_dict['Expense Voucher'+FILTER_SEP+'Fiscal Year'].get_value();
+  approver = this.filter_fields_dict['Expense Voucher'+FILTER_SEP+'Approver'].get_value();
+  company = this.filter_fields_dict['Expense Voucher'+FILTER_SEP+'Company'].get_value();
+  
+  var cond = '';
+  if(emp) cond += ' AND `tabExpense Voucher`.employee = "'+emp+'"';
+  if(emp_nm) cond += ' AND `tabExpense Voucher`.employee_name = "'+emp_nm+'"';
+  if(frm_start_date) cond += ' AND `tabExpense Voucher`.posting_date >= "'+frm_start_date+'"';
+  if(to_end_date) cond += ' AND `tabExpense Voucher`.posting_date <= "'+to_end_date+'"';
+  if(fiscal_year !='') cond += ' AND `tabExpense Voucher`.fiscal_year = "'+fiscal_year+'"';
+  if(approver) cond += ' AND `tabExpense Voucher`.exp_approver = "'+approver+'"';
+  if(company) cond += ' AND `tabExpense Voucher`.company = "'+company+'"';
+
+  var q = 'SELECT DISTINCT `tabExpense Voucher`.name, `tabExpense Voucher`.employee, `tabExpense Voucher`.employee_name, `tabExpense Voucher`.posting_date,`tabExpense Voucher`.exp_approver, `tabExpense Voucher`.total_claimed_amount, `tabExpense Voucher`.total_sanctioned_amount FROM `tabExpense Voucher` WHERE `tabExpense Voucher`.approval_status= "Submitted"'+cond;  
+  return q;
+}
\ No newline at end of file
diff --git a/hr/search_criteria/pending_expense_vouchers/pending_expense_vouchers.txt b/hr/search_criteria/pending_expense_vouchers/pending_expense_vouchers.txt
new file mode 100644
index 0000000..2a4c809
--- /dev/null
+++ b/hr/search_criteria/pending_expense_vouchers/pending_expense_vouchers.txt
@@ -0,0 +1,37 @@
+[
+	{
+		'add_col': None,
+		'add_cond': None,
+		'add_tab': None,
+		'columns': '',
+		'creation': '2010-09-03 16:45:06',
+		'criteria_name': 'Pending Expense Vouchers',
+		'custom_query': '',
+		'description': None,
+		'dis_filters': None,
+		'disabled': None,
+		'doc_type': 'Expense Voucher',
+		'docstatus': 0,
+		'doctype': 'Search Criteria',
+		'filters': "{'Expense Voucher\x01Approval Status':'','Expense Voucher\x01Fiscal Year':''}",
+		'graph_series': None,
+		'graph_values': None,
+		'group_by': None,
+		'idx': None,
+		'modified': '2010-09-02 11:04:41',
+		'modified_by': 'Administrator',
+		'module': 'Payroll',
+		'name': 'pending_expense_vouchers',
+		'owner': 'ashwini@webnotestech.com',
+		'page_len': 50,
+		'parent': None,
+		'parent_doc_type': None,
+		'parentfield': None,
+		'parenttype': None,
+		'report_script': None,
+		'server_script': None,
+		'sort_by': '',
+		'sort_order': 'DESC',
+		'standard': 'Yes'
+	}
+]
\ No newline at end of file
diff --git a/hr/search_criteria/salary_register/__init__.py b/hr/search_criteria/salary_register/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/search_criteria/salary_register/__init__.py
diff --git a/hr/search_criteria/salary_register/salary_register.js b/hr/search_criteria/salary_register/salary_register.js
new file mode 100644
index 0000000..4119944
--- /dev/null
+++ b/hr/search_criteria/salary_register/salary_register.js
@@ -0,0 +1,9 @@
+report.customize_filters = function() {
+  fld_lst = ['ID','Employee']
+
+  for(var i = 0; i<fld_lst.length; i++){
+    this.filter_fields_dict['Salary Slip'+FILTER_SEP +fld_lst[i]].df.in_first_page = 1;
+  }
+  
+}
+this.mytabs.items['Select Columns'].hide();
\ No newline at end of file
diff --git a/hr/search_criteria/salary_register/salary_register.py b/hr/search_criteria/salary_register/salary_register.py
new file mode 100644
index 0000000..049708a
--- /dev/null
+++ b/hr/search_criteria/salary_register/salary_register.py
@@ -0,0 +1,62 @@
+sal_slips_ids = ''
+for r in res:
+  if not sal_slips_ids == '': sal_slips_ids +=","
+  sal_slips_ids+="'%s'"%r[col_idx['ID']]
+
+earn_heads =[i[0] for i in sql("select distinct e_type from `tabSS Earning Detail` where parent in (%s)"%sal_slips_ids)]
+ded_heads =[i[0] for i in sql("select distinct d_type from `tabSS Deduction Detail` where parent in (%s)"%sal_slips_ids)]
+
+col=[]
+
+for e in earn_heads:
+  l = (len(e)*9) 
+  if l < 150 :
+    col_width = '150px'
+  else:
+    col_width = '%spx'%(l)
+  col.append([e,'Currency',col_width,''])
+
+col.append(['Arrear Amount','Currency','150px',''])
+col.append(['Encashment Amount','Currency','170px',''])
+col.append(['Gross Pay','Currency','150px',''])
+
+for d in ded_heads:
+  l = (len(d)*9) 
+  if l < 150 : col_width = '150px'
+  else:  col_width = '%spx'%(l)
+  col.append([d,'Currency',col_width,''])
+
+col.append(['Total Deduction','Currency','150px',''])
+col.append(['Net Pay','Currency','150px',''])
+
+for c in col:
+  colnames.append(c[0])
+  coltypes.append(c[1])
+  colwidths.append(c[2])
+  coloptions.append(c[3])
+  col_idx[c[0]] = len(colnames)
+
+grand_tot = 0
+for r in res:
+
+  for i in range(6,len(colnames)):
+    if colnames[i] not in ('Arrear Amount','Encashment Amount','Net Pay','Gross Pay','Total Deduction'):
+      amt = sql("select e_modified_amount from `tabSS Earning Detail` where e_type = '%s' and parent = '%s'"%(colnames[i],r[0]))
+      if not amt:
+        amt = sql("select d_modified_amount from `tabSS Deduction Detail` where d_type = '%s' and parent = '%s'"%(colnames[i],r[0]))
+      amt = amt and amt[0][0] or 0
+      r.append(flt(amt))
+      
+    else:
+      fld_nm = cstr(colnames[i]).lower().replace(' ','_')
+      errprint(fld_nm)
+      tot = sql("select %s from `tabSalary Slip` where name ='%s'"%(fld_nm,r[0]))
+      tot = tot and flt(tot[0][0]) or 0
+      if colnames[i] == 'Net Pay':
+        grand_tot += tot
+      r.append(tot)
+    
+gt_row = ['' for i in range(len(colnames))]
+gt_row[col_idx['Employee Name']] = '<b>Grand Totals</b>'
+gt_row[col_idx['Net Pay']-1] = fmt_money(grand_tot)
+res.append(gt_row)
diff --git a/hr/search_criteria/salary_register/salary_register.txt b/hr/search_criteria/salary_register/salary_register.txt
new file mode 100644
index 0000000..87a3752
--- /dev/null
+++ b/hr/search_criteria/salary_register/salary_register.txt
@@ -0,0 +1,37 @@
+[
+	{
+		'add_col': None,
+		'add_cond': None,
+		'add_tab': None,
+		'columns': 'Salary Slip\x01ID,Salary Slip\x01Employee,Salary Slip\x01Employee Name,Salary Slip\x01Year,Salary Slip\x01Month,Salary Slip\x01Total days in month,Salary Slip\x01Payment days',
+		'creation': '2010-12-29 12:30:57',
+		'criteria_name': 'Salary Register',
+		'custom_query': '',
+		'description': None,
+		'dis_filters': None,
+		'disabled': None,
+		'doc_type': 'Salary Slip',
+		'docstatus': 0,
+		'doctype': 'Search Criteria',
+		'filters': "{'Salary Slip\x01Submitted':1,'Salary Slip\x01Month':''}",
+		'graph_series': None,
+		'graph_values': None,
+		'group_by': None,
+		'idx': None,
+		'modified': '2010-12-29 12:11:18',
+		'modified_by': 'Administrator',
+		'module': 'Payroll',
+		'name': 'salary_register',
+		'owner': 'harshada@webnotestech.com',
+		'page_len': 50,
+		'parent': None,
+		'parent_doc_type': None,
+		'parentfield': None,
+		'parenttype': None,
+		'report_script': None,
+		'server_script': None,
+		'sort_by': '`tabSalary Slip`.`name`',
+		'sort_order': 'DESC',
+		'standard': 'Yes'
+	}
+]
\ No newline at end of file
diff --git a/hr/search_criteria/salary_slips/__init__.py b/hr/search_criteria/salary_slips/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/search_criteria/salary_slips/__init__.py
diff --git a/hr/search_criteria/salary_slips/salary_slips.txt b/hr/search_criteria/salary_slips/salary_slips.txt
new file mode 100644
index 0000000..533cfe5
--- /dev/null
+++ b/hr/search_criteria/salary_slips/salary_slips.txt
@@ -0,0 +1,37 @@
+[
+	{
+		'add_col': None,
+		'add_cond': None,
+		'add_tab': None,
+		'columns': 'Salary Slip\x01ID,Salary Slip\x01Fiscal Year,Salary Slip\x01Month,Salary Slip\x01Employee,Salary Slip\x01Employee Name,Salary Slip\x01Department,Salary Slip\x01Designation,Salary Slip\x01Branch,Salary Slip\x01Grade,Salary Slip\x01PF No.,Salary Slip\x01ESIC No.,Salary Slip\x01Leave Without Pay,Salary Slip\x01Bank Name,Salary Slip\x01Bank Account No.,Salary Slip\x01Payment days,Salary Slip\x01Arrear Amount,Salary Slip\x01Encashment Amount,Salary Slip\x01Gross Pay,Salary Slip\x01Total Deduction,Salary Slip\x01Net Pay',
+		'creation': '2010-12-14 10:33:09',
+		'criteria_name': 'Salary Slips',
+		'custom_query': '',
+		'description': None,
+		'dis_filters': None,
+		'disabled': None,
+		'doc_type': 'Salary Slip',
+		'docstatus': 0,
+		'doctype': 'Search Criteria',
+		'filters': "{'Salary Slip\x01Saved':1,'Salary Slip\x01Submitted':1}",
+		'graph_series': None,
+		'graph_values': None,
+		'group_by': None,
+		'idx': None,
+		'modified': '2010-08-04 13:07:29',
+		'modified_by': 'Administrator',
+		'module': 'Payroll',
+		'name': 'salary_slips',
+		'owner': 'Administrator',
+		'page_len': 50,
+		'parent': None,
+		'parent_doc_type': None,
+		'parentfield': None,
+		'parenttype': None,
+		'report_script': '',
+		'server_script': '',
+		'sort_by': '`tabSalary Slip`.`name`',
+		'sort_order': 'DESC',
+		'standard': 'Yes'
+	}
+]
\ No newline at end of file
diff --git a/hr/search_criteria/salary_structure_details/__init__.py b/hr/search_criteria/salary_structure_details/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/search_criteria/salary_structure_details/__init__.py
diff --git a/hr/search_criteria/salary_structure_details/salary_structure_details.txt b/hr/search_criteria/salary_structure_details/salary_structure_details.txt
new file mode 100644
index 0000000..58bc406
--- /dev/null
+++ b/hr/search_criteria/salary_structure_details/salary_structure_details.txt
@@ -0,0 +1,37 @@
+[
+	{
+		'add_col': None,
+		'add_cond': None,
+		'add_tab': None,
+		'columns': 'Salary Structure\x01ID,Salary Structure\x01Employee,Salary Structure\x01From Date,Salary Structure\x01To Date,Salary Structure\x01Fiscal Year,Salary Structure\x01Branch,Salary Structure\x01Designation,Salary Structure\x01Department,Salary Structure\x01Grade,Salary Structure\x01Is Active,Salary Structure\x01Total Earning,Salary Structure\x01Total Deduction,Salary Structure\x01CTC,Salary Structure\x01Total',
+		'creation': '2010-12-14 17:56:47',
+		'criteria_name': 'Salary Structure Details',
+		'custom_query': '',
+		'description': None,
+		'dis_filters': None,
+		'disabled': None,
+		'doc_type': 'Salary Structure',
+		'docstatus': 0,
+		'doctype': 'Search Criteria',
+		'filters': "{'Salary Structure\x01Branch':'','Salary Structure\x01Designation':'','Salary Structure\x01Department':'','Salary Structure\x01Grade':'','Salary Structure\x01Is Active':''}",
+		'graph_series': None,
+		'graph_values': None,
+		'group_by': None,
+		'idx': None,
+		'modified': '2010-08-04 09:19:01',
+		'modified_by': 'Administrator',
+		'module': 'Payroll',
+		'name': 'salary_structure_details',
+		'owner': 'Administrator',
+		'page_len': 50,
+		'parent': None,
+		'parent_doc_type': None,
+		'parentfield': None,
+		'parenttype': None,
+		'report_script': '',
+		'server_script': '',
+		'sort_by': '`tabSalary Structure`.`name`',
+		'sort_order': 'DESC',
+		'standard': 'Yes'
+	}
+]
\ No newline at end of file