diff --git a/erpnext/hr/doctype/employee/employee.py b/erpnext/hr/doctype/employee/employee.py index 0f116399ae..4cf28a16ec 100755 --- a/erpnext/hr/doctype/employee/employee.py +++ b/erpnext/hr/doctype/employee/employee.py @@ -156,6 +156,9 @@ class Employee(NestedSet): def on_trash(self): self.update_nsm_model() delete_events(self.doctype, self.name) + if frappe.db.exists("Employee Transfer", {'new_employee_id': self.name, 'docstatus': 1}): + emp_transfer = frappe.get_doc("Employee Transfer", {'new_employee_id': self.name, 'docstatus': 1}) + emp_transfer.db_set("new_employee_id", '') def validate_preferred_email(self): if self.prefered_contact_email and not self.get(scrub(self.prefered_contact_email)): diff --git a/erpnext/hr/doctype/employee_promotion/employee_promotion.py b/erpnext/hr/doctype/employee_promotion/employee_promotion.py index 564f1ad6ac..5fcceedac2 100644 --- a/erpnext/hr/doctype/employee_promotion/employee_promotion.py +++ b/erpnext/hr/doctype/employee_promotion/employee_promotion.py @@ -4,7 +4,27 @@ from __future__ import unicode_literals import frappe +from frappe import _ from frappe.model.document import Document +from frappe.utils import getdate +from erpnext.hr.utils import update_employee class EmployeePromotion(Document): - pass + def validate(self): + if frappe.get_value("Employee", self.employee, "status") == "Left": + frappe.throw(_("Cannot promote Employee with status Left")) + + def before_submit(self): + if getdate(self.promotion_date) > getdate(): + frappe.throw(_("Employee Promotion cannot be submitted before Promotion Date "), + frappe.DocstatusTransitionError) + + def on_submit(self): + employee = frappe.get_doc("Employee", self.employee) + employee = update_employee(employee, self.promotion_details) + employee.save() + + def on_cancel(self): + employee = frappe.get_doc("Employee", self.employee) + employee = update_employee(employee, self.promotion_details, True) + employee.save() diff --git a/erpnext/hr/doctype/employee_transfer/employee_transfer.py b/erpnext/hr/doctype/employee_transfer/employee_transfer.py index 96645c4d69..d80e293bbb 100644 --- a/erpnext/hr/doctype/employee_transfer/employee_transfer.py +++ b/erpnext/hr/doctype/employee_transfer/employee_transfer.py @@ -4,7 +4,59 @@ from __future__ import unicode_literals import frappe +from frappe import _ from frappe.model.document import Document +from frappe.utils import getdate +from erpnext.hr.utils import update_employee class EmployeeTransfer(Document): - pass + def validate(self): + if frappe.get_value("Employee", self.employee, "status") == "Left": + frappe.throw(_("Cannot transfer Employee with status Left")) + + def before_submit(self): + if getdate(self.transfer_date) > getdate(): + frappe.throw(_("Employee Transfer cannot be submitted before Transfer Date "), + frappe.DocstatusTransitionError) + + def on_submit(self): + employee = frappe.get_doc("Employee", self.employee) + if self.create_new_employee_id: + new_employee = frappe.copy_doc(employee) + new_employee = update_employee(new_employee, self.transfer_details) + if self.new_company: + new_employee.company = self.new_company + #move user_id to new employee before insert + if employee.user_id and not self.validate_user_in_details(): + new_employee.user_id = employee.user_id + employee.db_set("user_id", "") + new_employee.insert() + self.db_set("new_employee_id", new_employee.name) + #relieve the old employee + employee.db_set("relieving_date", self.transfer_date) + employee.db_set("status", "Left") + else: + employee = update_employee(employee, self.transfer_details) + if self.new_company: + employee.company = self.new_company + employee.save() + + def on_cancel(self): + employee = frappe.get_doc("Employee", self.employee) + if self.create_new_employee_id: + if self.new_employee_id: + frappe.throw(_("Please delete the Employee {0}\ + to cancel this document").format(self.new_employee_id)) + #mark the employee as active + employee.status = "Active" + employee.relieving_date = '' + employee.save() + else: + employee = update_employee(employee, self.transfer_details, True) + employee.save() + + def validate_user_in_details(self): + for item in self.transfer_details: + if item.fieldname == "user_id" and item.new != item.current: + return True + return False