Employee Promotion, Transfer - validate, submit, cancel workflow

This commit is contained in:
Ranjith 2018-05-05 13:41:48 +05:30
parent fddfffd3e6
commit 56b58017d1
3 changed files with 77 additions and 2 deletions

View File

@ -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)):

View File

@ -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()

View File

@ -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 <a href='#Form/Employee/{0}'>{0}</a>\
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