feat: sending Exit Questionnaire
diff --git a/erpnext/hr/doctype/exit_interview/exit_interview.js b/erpnext/hr/doctype/exit_interview/exit_interview.js
index d8ce701..31c9610 100644
--- a/erpnext/hr/doctype/exit_interview/exit_interview.js
+++ b/erpnext/hr/doctype/exit_interview/exit_interview.js
@@ -3,12 +3,16 @@
frappe.ui.form.on('Exit Interview', {
refresh: function(frm) {
-
+ if (!frm.doc.__islocal && !frm.doc.questionnaire_email_sent) {
+ frm.add_custom_button(__('Send Exit Questionnaire'), function () {
+ frm.trigger('send_exit_questionnaire');
+ });
+ }
},
employee: function(frm) {
- frappe.db.get_value('Employee', frm.doc.employee, 'relieving_date').then(({ relieving_date }) => {
- if (!relieving_date) {
+ frappe.db.get_value('Employee', frm.doc.employee, 'relieving_date', (message) => {
+ if (!message.relieving_date) {
frappe.throw({
message: __('Please set the relieving date for employee {0}',
['<a href="/app/employee/' + frm.doc.employee +'">' + frm.doc.employee + '</a>']),
@@ -16,5 +20,33 @@
});
}
});
+ },
+
+ send_exit_questionnaire: function(frm) {
+ frappe.db.get_value('HR Settings', 'HR Settings',
+ ['exit_questionnaire_web_form', 'exit_questionnaire_notification_template'], (r) => {
+ if (!r.exit_questionnaire_web_form || !r.exit_questionnaire_notification_template) {
+ frappe.throw({
+ message: __('Please set {0} and {1} in {2}.',
+ ['Exit Questionnaire Web Form'.bold(),
+ 'Notification Template'.bold(),
+ '<a href="/app/hr-settings" target="_blank">HR Settings</a>']
+ ),
+ title: __('Settings Missing')
+ });
+ } else {
+ frappe.call({
+ method: 'erpnext.hr.doctype.exit_interview.exit_interview.send_exit_questionnaire',
+ args: {
+ 'exit_interview': frm.doc.name
+ },
+ callback: function(r) {
+ if (!r.exc) {
+ frm.refresh_field('questionnaire_email_sent');
+ }
+ }
+ });
+ }
+ });
}
});
diff --git a/erpnext/hr/doctype/exit_interview/exit_interview.json b/erpnext/hr/doctype/exit_interview/exit_interview.json
index 696820e..0712b3d 100644
--- a/erpnext/hr/doctype/exit_interview/exit_interview.json
+++ b/erpnext/hr/doctype/exit_interview/exit_interview.json
@@ -5,11 +5,13 @@
"creation": "2021-12-05 13:56:36.241690",
"doctype": "DocType",
"editable_grid": 1,
+ "email_append_to": 1,
"engine": "InnoDB",
"field_order": [
"naming_series",
"employee",
"employee_name",
+ "email",
"column_break_5",
"company",
"date",
@@ -22,6 +24,7 @@
"relieving_date",
"exit_questionnaire_section",
"ref_doctype",
+ "questionnaire_email_sent",
"column_break_10",
"reference_document_name",
"interview_summary_section",
@@ -130,6 +133,7 @@
"read_only": 1
},
{
+ "fetch_from": "employee.reports_to",
"fieldname": "reports_to",
"fieldtype": "Link",
"in_standard_filter": 1,
@@ -159,11 +163,25 @@
"fieldtype": "Select",
"label": "Naming Series",
"options": "HR-EXIT-INT-"
+ },
+ {
+ "default": "0",
+ "fieldname": "questionnaire_email_sent",
+ "fieldtype": "Check",
+ "label": "Questionnaire Email Sent",
+ "read_only": 1
+ },
+ {
+ "fieldname": "email",
+ "fieldtype": "Data",
+ "label": "Email ID",
+ "options": "Email",
+ "read_only": 1
}
],
"index_web_pages_for_search": 1,
"links": [],
- "modified": "2021-12-05 14:25:40.416023",
+ "modified": "2021-12-05 16:50:05.933394",
"modified_by": "Administrator",
"module": "HR",
"name": "Exit Interview",
@@ -183,6 +201,7 @@
"write": 1
}
],
+ "sender_field": "email",
"sort_field": "modified",
"sort_order": "DESC",
"title_field": "employee_name",
diff --git a/erpnext/hr/doctype/exit_interview/exit_interview.py b/erpnext/hr/doctype/exit_interview/exit_interview.py
index 677141b..a59146a 100644
--- a/erpnext/hr/doctype/exit_interview/exit_interview.py
+++ b/erpnext/hr/doctype/exit_interview/exit_interview.py
@@ -6,12 +6,48 @@
from frappe.model.document import Document
from frappe.utils import get_link_to_form
+from erpnext.hr.doctype.employee.employee import get_employee_email
+
+
class ExitInterview(Document):
def validate(self):
self.validate_relieving_date()
+ self.set_employee_email()
def validate_relieving_date(self):
if not frappe.db.get_value('Employee', self.employee, 'relieving_date'):
frappe.throw(_('Please set the relieving date for employee {0}').format(
get_link_to_form('Employee', self.employee)),
title=_('Relieving Date Missing'))
+
+ def set_employee_email(self):
+ employee = frappe.get_doc('Employee', self.employee)
+ self.email = get_employee_email(employee)
+
+
+@frappe.whitelist()
+def send_exit_questionnaire(exit_interview):
+ exit_interview = frappe.get_doc('Exit Interview', exit_interview)
+ context = exit_interview.as_dict()
+
+ employee = frappe.get_doc('Employee', exit_interview.employee)
+ context.update(employee.as_dict())
+
+ email = get_employee_email(employee)
+ template_name = frappe.db.get_single_value('HR Settings', 'exit_questionnaire_notification_template')
+ template = frappe.get_doc('Email Template', template_name)
+
+ if email:
+ frappe.sendmail(
+ recipients=email,
+ subject=template.subject,
+ message=frappe.render_template(template.response, context),
+ reference_doctype=exit_interview.doctype,
+ reference_name=exit_interview.name
+ )
+ frappe.msgprint(_('Exit Questionnaire sent to {0}').format(email),
+ title='Success', indicator='green')
+ exit_interview.db_set('questionnaire_email_sent', True)
+ exit_interview.notify_update()
+ else:
+ frappe.msgprint(_('Email IDs for employee not found.'))
\ No newline at end of file
diff --git a/erpnext/hr/doctype/hr_settings/hr_settings.json b/erpnext/hr/doctype/hr_settings/hr_settings.json
index 5148435..f9a3e05 100644
--- a/erpnext/hr/doctype/hr_settings/hr_settings.json
+++ b/erpnext/hr/doctype/hr_settings/hr_settings.json
@@ -36,7 +36,11 @@
"remind_before",
"column_break_4",
"send_interview_feedback_reminder",
- "feedback_reminder_notification_template"
+ "feedback_reminder_notification_template",
+ "employee_exit_section",
+ "exit_questionnaire_web_form",
+ "column_break_34",
+ "exit_questionnaire_notification_template"
],
"fields": [
{
@@ -226,13 +230,34 @@
"fieldname": "check_vacancies",
"fieldtype": "Check",
"label": "Check Vacancies On Job Offer Creation"
+ },
+ {
+ "fieldname": "employee_exit_section",
+ "fieldtype": "Section Break",
+ "label": "Employee Exit Settings"
+ },
+ {
+ "fieldname": "exit_questionnaire_web_form",
+ "fieldtype": "Link",
+ "label": "Exit Questionnaire Web Form",
+ "options": "Web Form"
+ },
+ {
+ "fieldname": "exit_questionnaire_notification_template",
+ "fieldtype": "Link",
+ "label": "Exit Questionnaire Notification Template",
+ "options": "Email Template"
+ },
+ {
+ "fieldname": "column_break_34",
+ "fieldtype": "Column Break"
}
],
"icon": "fa fa-cog",
"idx": 1,
"issingle": 1,
"links": [],
- "modified": "2021-10-01 23:46:11.098236",
+ "modified": "2021-12-05 14:48:10.884253",
"modified_by": "Administrator",
"module": "HR",
"name": "HR Settings",