fix: Employee Onboarding and Separation UX (#29504)

This commit is contained in:
Rucha Mahabal 2022-01-29 15:27:36 +05:30 committed by GitHub
parent 43bd88e741
commit 36882f3734
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 48 additions and 18 deletions

View File

@ -132,13 +132,17 @@ class EmployeeBoardingController(Document):
def on_cancel(self): def on_cancel(self):
# delete task project # delete task project
for task in frappe.get_all('Task', filters={'project': self.project}): project = self.project
for task in frappe.get_all('Task', filters={'project': project}):
frappe.delete_doc('Task', task.name, force=1) frappe.delete_doc('Task', task.name, force=1)
frappe.delete_doc('Project', self.project, force=1) frappe.delete_doc('Project', project, force=1)
self.db_set('project', '') self.db_set('project', '')
for activity in self.activities: for activity in self.activities:
activity.db_set('task', '') activity.db_set('task', '')
frappe.msgprint(_('Linked Project {} and Tasks deleted.').format(
project), alert=True, indicator='blue')
@frappe.whitelist() @frappe.whitelist()
def get_onboarding_details(parent, parenttype): def get_onboarding_details(parent, parenttype):

View File

@ -21,7 +21,7 @@ def get_data():
}, },
{ {
'label': _('Lifecycle'), 'label': _('Lifecycle'),
'items': ['Employee Transfer', 'Employee Promotion', 'Employee Grievance'] 'items': ['Employee Onboarding', 'Employee Transfer', 'Employee Promotion', 'Employee Grievance']
}, },
{ {
'label': _('Exit'), 'label': _('Exit'),

View File

@ -62,6 +62,7 @@
}, },
{ {
"default": "0", "default": "0",
"depends_on": "eval:['Employee Onboarding', 'Employee Onboarding Template'].includes(doc.parenttype)",
"description": "Applicable in the case of Employee Onboarding", "description": "Applicable in the case of Employee Onboarding",
"fieldname": "required_for_employee_creation", "fieldname": "required_for_employee_creation",
"fieldtype": "Check", "fieldtype": "Check",
@ -93,7 +94,7 @@
], ],
"istable": 1, "istable": 1,
"links": [], "links": [],
"modified": "2021-07-30 15:55:22.470102", "modified": "2022-01-29 14:05:00.543122",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "HR", "module": "HR",
"name": "Employee Boarding Activity", "name": "Employee Boarding Activity",
@ -102,5 +103,6 @@
"quick_entry": 1, "quick_entry": 1,
"sort_field": "modified", "sort_field": "modified",
"sort_order": "DESC", "sort_order": "DESC",
"states": [],
"track_changes": 1 "track_changes": 1
} }

View File

@ -3,12 +3,6 @@
frappe.ui.form.on('Employee Onboarding', { frappe.ui.form.on('Employee Onboarding', {
setup: function(frm) { setup: function(frm) {
frm.add_fetch("employee_onboarding_template", "company", "company");
frm.add_fetch("employee_onboarding_template", "department", "department");
frm.add_fetch("employee_onboarding_template", "designation", "designation");
frm.add_fetch("employee_onboarding_template", "employee_grade", "employee_grade");
frm.set_query("job_applicant", function () { frm.set_query("job_applicant", function () {
return { return {
filters:{ filters:{
@ -71,5 +65,19 @@ frappe.ui.form.on('Employee Onboarding', {
} }
}); });
} }
},
job_applicant: function(frm) {
if (frm.doc.job_applicant) {
frappe.db.get_value('Employee', {'job_applicant': frm.doc.job_applicant}, 'name', (r) => {
if (r.name) {
frm.set_value('employee', r.name);
} else {
frm.set_value('employee', '');
}
});
} else {
frm.set_value('employee', '');
}
} }
}); });

View File

@ -92,6 +92,7 @@
"options": "Employee Onboarding Template" "options": "Employee Onboarding Template"
}, },
{ {
"fetch_from": "employee_onboarding_template.company",
"fieldname": "company", "fieldname": "company",
"fieldtype": "Link", "fieldtype": "Link",
"label": "Company", "label": "Company",
@ -99,6 +100,7 @@
"reqd": 1 "reqd": 1
}, },
{ {
"fetch_from": "employee_onboarding_template.department",
"fieldname": "department", "fieldname": "department",
"fieldtype": "Link", "fieldtype": "Link",
"in_list_view": 1, "in_list_view": 1,
@ -106,6 +108,7 @@
"options": "Department" "options": "Department"
}, },
{ {
"fetch_from": "employee_onboarding_template.designation",
"fieldname": "designation", "fieldname": "designation",
"fieldtype": "Link", "fieldtype": "Link",
"in_list_view": 1, "in_list_view": 1,
@ -113,6 +116,7 @@
"options": "Designation" "options": "Designation"
}, },
{ {
"fetch_from": "employee_onboarding_template.employee_grade",
"fieldname": "employee_grade", "fieldname": "employee_grade",
"fieldtype": "Link", "fieldtype": "Link",
"label": "Employee Grade", "label": "Employee Grade",
@ -170,10 +174,11 @@
], ],
"is_submittable": 1, "is_submittable": 1,
"links": [], "links": [],
"modified": "2021-07-30 14:55:04.560683", "modified": "2022-01-29 12:33:57.120384",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "HR", "module": "HR",
"name": "Employee Onboarding", "name": "Employee Onboarding",
"naming_rule": "Expression (old style)",
"owner": "Administrator", "owner": "Administrator",
"permissions": [ "permissions": [
{ {
@ -194,6 +199,7 @@
], ],
"sort_field": "modified", "sort_field": "modified",
"sort_order": "DESC", "sort_order": "DESC",
"states": [],
"title_field": "employee_name", "title_field": "employee_name",
"track_changes": 1 "track_changes": 1
} }

View File

@ -14,10 +14,15 @@ class IncompleteTaskError(frappe.ValidationError): pass
class EmployeeOnboarding(EmployeeBoardingController): class EmployeeOnboarding(EmployeeBoardingController):
def validate(self): def validate(self):
super(EmployeeOnboarding, self).validate() super(EmployeeOnboarding, self).validate()
self.set_employee()
self.validate_duplicate_employee_onboarding() self.validate_duplicate_employee_onboarding()
def set_employee(self):
if not self.employee:
self.employee = frappe.db.get_value('Employee', {'job_applicant': self.job_applicant}, 'name')
def validate_duplicate_employee_onboarding(self): def validate_duplicate_employee_onboarding(self):
emp_onboarding = frappe.db.exists("Employee Onboarding", {"job_applicant": self.job_applicant}) emp_onboarding = frappe.db.exists("Employee Onboarding", {"job_applicant": self.job_applicant, "docstatus": ("!=", 2)})
if emp_onboarding and emp_onboarding != self.name: if emp_onboarding and emp_onboarding != self.name:
frappe.throw(_("Employee Onboarding: {0} already exists for Job Applicant: {1}").format(frappe.bold(emp_onboarding), frappe.bold(self.job_applicant))) frappe.throw(_("Employee Onboarding: {0} already exists for Job Applicant: {1}").format(frappe.bold(emp_onboarding), frappe.bold(self.job_applicant)))

View File

@ -78,6 +78,7 @@ def make_employee(source_name, target_doc=None):
"doctype": "Employee", "doctype": "Employee",
"field_map": { "field_map": {
"applicant_name": "employee_name", "applicant_name": "employee_name",
"offer_date": "scheduled_confirmation_date"
}} }}
}, target_doc, set_missing_values) }, target_doc, set_missing_values)
return doc return doc

View File

@ -235,13 +235,13 @@
{ {
"fieldname": "actual_start_date", "fieldname": "actual_start_date",
"fieldtype": "Data", "fieldtype": "Data",
"label": "Actual Start Date", "label": "Actual Start Date (via Time Sheet)",
"read_only": 1 "read_only": 1
}, },
{ {
"fieldname": "actual_time", "fieldname": "actual_time",
"fieldtype": "Float", "fieldtype": "Float",
"label": "Actual Time (in Hours)", "label": "Actual Time (in Hours via Time Sheet)",
"read_only": 1 "read_only": 1
}, },
{ {
@ -251,7 +251,7 @@
{ {
"fieldname": "actual_end_date", "fieldname": "actual_end_date",
"fieldtype": "Date", "fieldtype": "Date",
"label": "Actual End Date", "label": "Actual End Date (via Time Sheet)",
"oldfieldname": "act_completion_date", "oldfieldname": "act_completion_date",
"oldfieldtype": "Date", "oldfieldtype": "Date",
"read_only": 1 "read_only": 1
@ -458,10 +458,11 @@
"index_web_pages_for_search": 1, "index_web_pages_for_search": 1,
"links": [], "links": [],
"max_attachments": 4, "max_attachments": 4,
"modified": "2021-04-28 16:36:11.654632", "modified": "2022-01-29 13:58:27.712714",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Projects", "module": "Projects",
"name": "Project", "name": "Project",
"naming_rule": "By \"Naming Series\" field",
"owner": "Administrator", "owner": "Administrator",
"permissions": [ "permissions": [
{ {
@ -499,6 +500,7 @@
"show_name_in_global_search": 1, "show_name_in_global_search": 1,
"sort_field": "modified", "sort_field": "modified",
"sort_order": "DESC", "sort_order": "DESC",
"states": [],
"timeline_field": "customer", "timeline_field": "customer",
"title_field": "project_name", "title_field": "project_name",
"track_seen": 1 "track_seen": 1

View File

@ -249,7 +249,7 @@
{ {
"fieldname": "actual_time", "fieldname": "actual_time",
"fieldtype": "Float", "fieldtype": "Float",
"label": "Actual Time (in hours)", "label": "Actual Time (in Hours via Time Sheet)",
"read_only": 1 "read_only": 1
}, },
{ {
@ -397,10 +397,11 @@
"is_tree": 1, "is_tree": 1,
"links": [], "links": [],
"max_attachments": 5, "max_attachments": 5,
"modified": "2021-04-16 12:46:51.556741", "modified": "2022-01-29 13:58:47.005241",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Projects", "module": "Projects",
"name": "Task", "name": "Task",
"naming_rule": "Expression (old style)",
"nsm_parent_field": "parent_task", "nsm_parent_field": "parent_task",
"owner": "Administrator", "owner": "Administrator",
"permissions": [ "permissions": [
@ -421,6 +422,7 @@
"show_preview_popup": 1, "show_preview_popup": 1,
"sort_field": "modified", "sort_field": "modified",
"sort_order": "DESC", "sort_order": "DESC",
"states": [],
"timeline_field": "project", "timeline_field": "project",
"title_field": "subject", "title_field": "subject",
"track_seen": 1 "track_seen": 1