[fix] Check Salary Structure validity
diff --git a/erpnext/hr/doctype/expense_claim/expense_claim.json b/erpnext/hr/doctype/expense_claim/expense_claim.json
index a8d56fb..a5e3972 100644
--- a/erpnext/hr/doctype/expense_claim/expense_claim.json
+++ b/erpnext/hr/doctype/expense_claim/expense_claim.json
@@ -19,7 +19,7 @@
"ignore_user_permissions": 0,
"in_filter": 0,
"in_list_view": 0,
- "label": "Series",
+ "label": "Series",
"no_copy": 1,
"options": "EXP",
"permlevel": 0,
@@ -44,7 +44,7 @@
"ignore_user_permissions": 0,
"in_filter": 1,
"in_list_view": 0,
- "label": "Approval Status",
+ "label": "Approval Status",
"no_copy": 1,
"oldfieldname": "approval_status",
"oldfieldtype": "Select",
@@ -536,7 +536,7 @@
"is_submittable": 1,
"issingle": 0,
"istable": 0,
- "modified": "2015-10-02 07:38:50.191920",
+ "modified": "2015-11-14 12:11:13.213073",
"modified_by": "Administrator",
"module": "HR",
"name": "Expense Claim",
@@ -564,7 +564,7 @@
},
{
"amend": 0,
- "apply_user_permissions": 0,
+ "apply_user_permissions": 1,
"cancel": 0,
"create": 1,
"delete": 0,
@@ -580,6 +580,7 @@
"set_user_permissions": 0,
"share": 1,
"submit": 0,
+ "user_permission_doctypes": "[\"Employee\"]",
"write": 1
},
{
diff --git a/erpnext/hr/doctype/process_payroll/process_payroll.py b/erpnext/hr/doctype/process_payroll/process_payroll.py
index 3658e65..b6b76c9 100644
--- a/erpnext/hr/doctype/process_payroll/process_payroll.py
+++ b/erpnext/hr/doctype/process_payroll/process_payroll.py
@@ -41,7 +41,7 @@
def get_joining_releiving_condition(self):
- m = self.get_month_details(self.fiscal_year, self.month)
+ m = get_month_details(self.fiscal_year, self.month)
cond = """
and ifnull(t1.date_of_joining, '0000-00-00') <= '%(month_end_date)s'
and ifnull(t1.relieving_date, '2199-12-31') >= '%(month_start_date)s'
@@ -54,24 +54,6 @@
if not self.get(f):
frappe.throw(_("Please set {0}").format(f))
- def get_month_details(self, year, month):
- ysd = frappe.db.get_value("Fiscal Year", year, "year_start_date")
- if ysd:
- from dateutil.relativedelta import relativedelta
- import calendar, datetime
- diff_mnt = cint(month)-cint(ysd.month)
- if diff_mnt<0:
- diff_mnt = 12-int(ysd.month)+cint(month)
- msd = ysd + relativedelta(months=diff_mnt) # month start date
- month_days = cint(calendar.monthrange(cint(msd.year) ,cint(month))[1]) # days in month
- med = datetime.date(msd.year, cint(month), month_days) # month end date
- return {
- 'year': msd.year,
- 'month_start_date': msd,
- 'month_end_date': med,
- 'month_days': month_days
- }
-
def create_sal_slip(self):
"""
Creates salary slip for selected employees if already not created
@@ -205,3 +187,22 @@
])
return journal_entry.as_dict()
+
+
+def get_month_details(year, month):
+ ysd = frappe.db.get_value("Fiscal Year", year, "year_start_date")
+ if ysd:
+ from dateutil.relativedelta import relativedelta
+ import calendar, datetime
+ diff_mnt = cint(month)-cint(ysd.month)
+ if diff_mnt<0:
+ diff_mnt = 12-int(ysd.month)+cint(month)
+ msd = ysd + relativedelta(months=diff_mnt) # month start date
+ month_days = cint(calendar.monthrange(cint(msd.year) ,cint(month))[1]) # days in month
+ med = datetime.date(msd.year, cint(month), month_days) # month end date
+ return frappe._dict({
+ 'year': msd.year,
+ 'month_start_date': msd,
+ 'month_end_date': med,
+ 'month_days': month_days
+ })
\ No newline at end of file
diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.py b/erpnext/hr/doctype/salary_slip/salary_slip.py
index 12fdc20..9a06c36 100644
--- a/erpnext/hr/doctype/salary_slip/salary_slip.py
+++ b/erpnext/hr/doctype/salary_slip/salary_slip.py
@@ -10,6 +10,7 @@
from frappe import msgprint, _
from erpnext.setup.utils import get_company_currency
from erpnext.hr.utils import set_employee_name
+from erpnext.hr.doctype.process_payroll.process_payroll import get_month_details
from erpnext.utilities.transaction_base import TransactionBase
@@ -25,11 +26,17 @@
self.pull_sal_struct(struct)
def check_sal_struct(self):
+ m = get_month_details(self.fiscal_year, self.month)
struct = frappe.db.sql("""select name from `tabSalary Structure`
- where employee=%s and is_active = 'Yes'""", self.employee)
+ where employee=%s and is_active = 'Yes'
+ and from_date <= %s and (to_date is null or to_date >= %s)""",
+ (self.employee, m.month_start_date, m.month_end_date))
+
if not struct:
- msgprint(_("Please create Salary Structure for employee {0}").format(self.employee))
+ msgprint(_("No active Salary Structure found for employee {0} and the month")
+ .format(self.employee))
self.employee = None
+
return struct and struct[0][0] or ''
def pull_sal_struct(self, struct):
@@ -49,7 +56,7 @@
if not self.month:
self.month = "%02d" % getdate(nowdate()).month
- m = frappe.get_doc('Process Payroll').get_month_details(self.fiscal_year, self.month)
+ m = get_month_details(self.fiscal_year, self.month)
holidays = self.get_holidays_for_employee(m)
if not cint(frappe.db.get_value("HR Settings", "HR Settings",