diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.json b/erpnext/hr/doctype/salary_slip/salary_slip.json index 2896f11f50..e0d05853f5 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 e3f713c0ea..c7b4059c7f 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 @@ class TestSalarySlip(unittest.TestCase): 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 @@ class TestSalarySlip(unittest.TestCase): 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 a57a0ce046..f46df7a6e4 100644 --- a/erpnext/hr/doctype/salary_structure/salary_structure.py +++ b/erpnext/hr/doctype/salary_structure/salary_structure.py @@ -7,8 +7,7 @@ import frappe 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 @@ class SalaryStructure(Document): @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")