Set Employee Name if missing
diff --git a/erpnext/hr/doctype/appraisal/appraisal.py b/erpnext/hr/doctype/appraisal/appraisal.py
index 31ca34c..72bfc1c 100644
--- a/erpnext/hr/doctype/appraisal/appraisal.py
+++ b/erpnext/hr/doctype/appraisal/appraisal.py
@@ -9,12 +9,14 @@
from frappe import _
from frappe.model.mapper import get_mapped_doc
from frappe.model.document import Document
+from erpnext.hr.utils import set_employee_name
class Appraisal(Document):
def validate(self):
if not self.status:
self.status = "Draft"
+ set_employee_name(self)
self.validate_dates()
self.validate_existing_appraisal()
self.calculate_total()
diff --git a/erpnext/hr/doctype/attendance/attendance.py b/erpnext/hr/doctype/attendance/attendance.py
index ea9f271..dbab097 100644
--- a/erpnext/hr/doctype/attendance/attendance.py
+++ b/erpnext/hr/doctype/attendance/attendance.py
@@ -7,6 +7,7 @@
from frappe.utils import getdate, nowdate
from frappe import _
from frappe.model.document import Document
+from erpnext.hr.utils import set_employee_name
class Attendance(Document):
def validate_duplicate_record(self):
@@ -16,6 +17,8 @@
if res:
frappe.throw(_("Attendance for employee {0} is already marked").format(self.employee))
+ set_employee_name(self)
+
def check_leave_record(self):
if self.status == 'Present':
leave = frappe.db.sql("""select name from `tabLeave Application`
diff --git a/erpnext/hr/doctype/expense_claim/expense_claim.py b/erpnext/hr/doctype/expense_claim/expense_claim.py
index 8250e51..fda3cf6 100644
--- a/erpnext/hr/doctype/expense_claim/expense_claim.py
+++ b/erpnext/hr/doctype/expense_claim/expense_claim.py
@@ -5,11 +5,13 @@
import frappe
from frappe import _
from frappe.model.document import Document
+from erpnext.hr.utils import set_employee_name
class ExpenseClaim(Document):
def validate(self):
self.validate_fiscal_year()
self.validate_exp_details()
+ set_employee_name(self)
def on_submit(self):
if self.approval_status=="Draft":
diff --git a/erpnext/hr/doctype/leave_allocation/leave_allocation.py b/erpnext/hr/doctype/leave_allocation/leave_allocation.py
index 32cfd86..ef49eb9 100755
--- a/erpnext/hr/doctype/leave_allocation/leave_allocation.py
+++ b/erpnext/hr/doctype/leave_allocation/leave_allocation.py
@@ -5,8 +5,8 @@
import frappe
from frappe.utils import cint, flt
from frappe import _
-
from frappe.model.document import Document
+from erpnext.hr.utils import set_employee_name
class LeaveAllocation(Document):
def validate(self):
@@ -15,6 +15,8 @@
if not self.total_leaves_allocated:
self.total_leaves_allocated = self.new_leaves_allocated
+ set_employee_name(self)
+
def on_update_after_submit(self):
self.validate_new_leaves_allocated_value()
diff --git a/erpnext/hr/doctype/leave_application/leave_application.py b/erpnext/hr/doctype/leave_application/leave_application.py
index 863b2c6..18c1e11 100755
--- a/erpnext/hr/doctype/leave_application/leave_application.py
+++ b/erpnext/hr/doctype/leave_application/leave_application.py
@@ -8,6 +8,7 @@
from frappe.utils import cint, cstr, date_diff, flt, formatdate, getdate, get_url_to_form, \
comma_or, get_fullname
from frappe import msgprint
+from erpnext.hr.utils import set_employee_name
class LeaveDayBlockedError(frappe.ValidationError): pass
class OverlapError(frappe.ValidationError): pass
@@ -22,6 +23,8 @@
else:
self.previous_doc = None
+ set_employee_name(self)
+
self.validate_to_date()
self.validate_balance_leaves()
self.validate_leave_overlap()
diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.py b/erpnext/hr/doctype/salary_slip/salary_slip.py
index 232d6a9..3f4b5e3 100644
--- a/erpnext/hr/doctype/salary_slip/salary_slip.py
+++ b/erpnext/hr/doctype/salary_slip/salary_slip.py
@@ -9,7 +9,7 @@
from frappe import msgprint, _
from erpnext.setup.utils import get_company_currency
-
+from erpnext.hr.utils import set_employee_name
from erpnext.utilities.transaction_base import TransactionBase
@@ -146,6 +146,8 @@
company_currency = get_company_currency(self.company)
self.total_in_words = money_in_words(self.rounded_total, company_currency)
+ set_employee_name(self)
+
def calculate_earning_total(self):
self.gross_pay = flt(self.arrear_amount) + flt(self.leave_encashment_amount)
for d in self.get("earning_details"):
diff --git a/erpnext/hr/doctype/salary_structure/salary_structure.py b/erpnext/hr/doctype/salary_structure/salary_structure.py
index d170d05..f3d2eb1 100644
--- a/erpnext/hr/doctype/salary_structure/salary_structure.py
+++ b/erpnext/hr/doctype/salary_structure/salary_structure.py
@@ -9,6 +9,7 @@
from frappe import _
from frappe.model.mapper import get_mapped_doc
from frappe.model.document import Document
+from erpnext.hr.utils import set_employee_name
class SalaryStructure(Document):
def autoname(self):
@@ -63,6 +64,7 @@
def validate(self):
self.check_existing()
self.validate_amount()
+ set_employee_name(self)
@frappe.whitelist()
def make_salary_slip(source_name, target_doc=None):
diff --git a/erpnext/hr/utils.py b/erpnext/hr/utils.py
index 87a9e0b..857f936 100644
--- a/erpnext/hr/utils.py
+++ b/erpnext/hr/utils.py
@@ -22,3 +22,7 @@
if not roles:
frappe.msgprint(_("No Expense Approvers. Please assign 'Expense Approver' Role to atleast one user"))
return roles
+
+def set_employee_name(doc):
+ if doc.employee and not doc.employee_name:
+ doc.employee_name = frappe.db.get_value("Employee", doc.employee, "employee_name")