Salary Slip - read permission for Employee. Fixes #1553
diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.json b/erpnext/hr/doctype/salary_slip/salary_slip.json
index 2896f11..e0d0585 100644
--- a/erpnext/hr/doctype/salary_slip/salary_slip.json
+++ b/erpnext/hr/doctype/salary_slip/salary_slip.json
@@ -1,5 +1,5 @@
 {
- "creation": "2013-01-10 16:34:15.000000", 
+ "creation": "2013-01-10 16:34:15", 
  "docstatus": 0, 
  "doctype": "DocType", 
  "fields": [
@@ -355,7 +355,7 @@
  "icon": "icon-file-text", 
  "idx": 1, 
  "is_submittable": 1, 
- "modified": "2014-01-20 17:49:18.000000", 
+ "modified": "2014-05-01 04:31:14.543092", 
  "modified_by": "Administrator", 
  "module": "HR", 
  "name": "Salary Slip", 
@@ -387,6 +387,12 @@
    "role": "HR Manager", 
    "submit": 1, 
    "write": 1
+  }, 
+  {
+   "permlevel": 0, 
+   "read": 1, 
+   "restricted": 0, 
+   "role": "Employee"
   }
  ]
 }
\ No newline at end of file
diff --git a/erpnext/hr/doctype/salary_slip/test_salary_slip.py b/erpnext/hr/doctype/salary_slip/test_salary_slip.py
index e3f713c..c7b4059 100644
--- a/erpnext/hr/doctype/salary_slip/test_salary_slip.py
+++ b/erpnext/hr/doctype/salary_slip/test_salary_slip.py
@@ -1,8 +1,11 @@
 # Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
 # License: GNU General Public License v3. See license.txt
 
-import frappe
 import unittest
+import frappe
+from frappe.utils import today
+from erpnext.hr.doctype.employee.employee import make_salary_structure
+from erpnext.hr.doctype.salary_structure.salary_structure import make_salary_slip
 
 class TestSalarySlip(unittest.TestCase):
 	def setUp(self):
@@ -16,6 +19,7 @@
 
 	def tearDown(self):
 		frappe.db.set_value("HR Settings", "HR Settings", "include_holidays_in_total_working_days", 0)
+		frappe.set_user("Administrator")
 
 	def test_salary_slip_with_holidays_included(self):
 		frappe.db.set_value("HR Settings", "HR Settings", "include_holidays_in_total_working_days", 1)
@@ -42,6 +46,62 @@
 		self.assertEquals(ss.gross_pay, 15000)
 		self.assertEquals(ss.net_pay, 14851.67)
 
+	def test_employee_salary_slip_read_permission(self):
+		self.make_employee("test_employee@example.com")
+		self.make_employee("test_employee_2@example.com")
+
+		salary_slip_test_employee = frappe.get_doc("Salary Slip",
+			self.make_employee_salary_slip("test_employee@example.com"))
+
+		salary_slip_test_employee_2 = frappe.get_doc("Salary Slip",
+			self.make_employee_salary_slip("test_employee_2@example.com"))
+
+		frappe.set_user("test_employee@example.com")
+		self.assertTrue(salary_slip_test_employee.has_permission("read"))
+		self.assertFalse(salary_slip_test_employee_2.has_permission("read"))
+
+	def make_employee(self, user):
+		if not frappe.db.get_value("User", user):
+			frappe.get_doc({
+				"doctype": "User",
+				"email": user,
+				"first_name": user,
+				"new_password": "password",
+				"user_roles": [{"doctype": "UserRole", "role": "Employee"}]
+			}).insert()
+
+		if not frappe.db.get_value("Employee", {"user_id": user}):
+			frappe.get_doc({
+				"doctype": "Employee",
+				"naming_series": "_T-Employee-",
+				"employee_name": user,
+				"user_id": user,
+				"company": "_Test Company",
+				"date_of_birth": "1990-05-08",
+				"date_of_joining": "2013-01-01",
+				"department": "_Test Department 1",
+				"gender": "Female",
+				"status": "Active"
+			}).insert()
+
+	def make_employee_salary_slip(self, user):
+		employee = frappe.db.get_value("Employee", {"user_id": user})
+		salary_structure = frappe.db.get_value("Salary Structure", {"employee": employee})
+		if not salary_structure:
+			salary_structure = make_salary_structure(employee)
+			salary_structure.from_date = today()
+			salary_structure.insert()
+			salary_structure = salary_structure.name
+
+		salary_slip = frappe.db.get_value("Salary Slip", {"employee": employee})
+		if not salary_slip:
+			salary_slip = make_salary_slip(salary_structure)
+			salary_slip.insert()
+			salary_slip.submit()
+			salary_slip = salary_slip.name
+
+		return salary_slip
+
 test_dependencies = ["Leave Application"]
 
 test_records = frappe.get_test_records('Salary Slip')
diff --git a/erpnext/hr/doctype/salary_structure/salary_structure.py b/erpnext/hr/doctype/salary_structure/salary_structure.py
index a57a0ce..f46df7a 100644
--- a/erpnext/hr/doctype/salary_structure/salary_structure.py
+++ b/erpnext/hr/doctype/salary_structure/salary_structure.py
@@ -7,8 +7,7 @@
 from frappe.utils import cstr, flt
 from frappe.model.naming import make_autoname
 from frappe import _
-
-
+from frappe.model.mapper import get_mapped_doc
 from frappe.model.document import Document
 
 class SalaryStructure(Document):
@@ -70,11 +69,6 @@
 
 @frappe.whitelist()
 def make_salary_slip(source_name, target_doc=None):
-	return get_mapped_doc(source_name, target_doc).as_dict()
-
-def get_mapped_doc(source_name, target_doc=None):
-	from frappe.model.mapper import get_mapped_doc
-
 	def postprocess(source, target):
 		target.run_method("pull_emp_details")
 		target.run_method("get_leave_details")