fix: autoname generated for Job Applicant is too long (#29260)
* fix: autoname generated for Job Applicant is too long
- autoname based on email and append number if exists instead of concatenating name, email, title
- add more search fields for context during selection
* test: Job applicant naming and fix related tests
diff --git a/erpnext/hr/doctype/employee_onboarding/test_employee_onboarding.py b/erpnext/hr/doctype/employee_onboarding/test_employee_onboarding.py
index cb1b560..2d129c8 100644
--- a/erpnext/hr/doctype/employee_onboarding/test_employee_onboarding.py
+++ b/erpnext/hr/doctype/employee_onboarding/test_employee_onboarding.py
@@ -19,7 +19,7 @@
if frappe.db.exists('Employee Onboarding', {'employee_name': 'Test Researcher'}):
frappe.delete_doc('Employee Onboarding', {'employee_name': 'Test Researcher'})
- project = "Employee Onboarding : Test Researcher - test@researcher.com"
+ project = "Employee Onboarding : test@researcher.com"
frappe.db.sql("delete from tabProject where name=%s", project)
frappe.db.sql("delete from tabTask where project=%s", project)
@@ -27,7 +27,7 @@
onboarding = create_employee_onboarding()
project_name = frappe.db.get_value('Project', onboarding.project, 'project_name')
- self.assertEqual(project_name, 'Employee Onboarding : Test Researcher - test@researcher.com')
+ self.assertEqual(project_name, 'Employee Onboarding : test@researcher.com')
# don't allow making employee if onboarding is not complete
self.assertRaises(IncompleteTaskError, make_employee, onboarding.name)
@@ -64,8 +64,8 @@
def get_job_applicant():
- if frappe.db.exists('Job Applicant', 'Test Researcher - test@researcher.com'):
- return frappe.get_doc('Job Applicant', 'Test Researcher - test@researcher.com')
+ if frappe.db.exists('Job Applicant', 'test@researcher.com'):
+ return frappe.get_doc('Job Applicant', 'test@researcher.com')
applicant = frappe.new_doc('Job Applicant')
applicant.applicant_name = 'Test Researcher'
applicant.email_id = 'test@researcher.com'
diff --git a/erpnext/hr/doctype/job_applicant/job_applicant.json b/erpnext/hr/doctype/job_applicant/job_applicant.json
index 200f675..66b609c 100644
--- a/erpnext/hr/doctype/job_applicant/job_applicant.json
+++ b/erpnext/hr/doctype/job_applicant/job_applicant.json
@@ -192,10 +192,11 @@
"idx": 1,
"index_web_pages_for_search": 1,
"links": [],
- "modified": "2021-09-29 23:06:10.904260",
+ "modified": "2022-01-12 16:28:53.196881",
"modified_by": "Administrator",
"module": "HR",
"name": "Job Applicant",
+ "naming_rule": "Expression (old style)",
"owner": "Administrator",
"permissions": [
{
@@ -210,10 +211,11 @@
"write": 1
}
],
- "search_fields": "applicant_name",
+ "search_fields": "applicant_name, email_id, job_title, phone_number",
"sender_field": "email_id",
"sort_field": "modified",
"sort_order": "ASC",
+ "states": [],
"subject_field": "notes",
"title_field": "applicant_name"
}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/job_applicant/job_applicant.py b/erpnext/hr/doctype/job_applicant/job_applicant.py
index abaa50c..5b3d9bf 100644
--- a/erpnext/hr/doctype/job_applicant/job_applicant.py
+++ b/erpnext/hr/doctype/job_applicant/job_applicant.py
@@ -7,6 +7,7 @@
import frappe
from frappe import _
from frappe.model.document import Document
+from frappe.model.naming import append_number_if_name_exists
from frappe.utils import validate_email_address
from erpnext.hr.doctype.interview.interview import get_interviewers
@@ -21,10 +22,11 @@
self.get("__onload").job_offer = job_offer[0].name
def autoname(self):
- keys = filter(None, (self.applicant_name, self.email_id, self.job_title))
- if not keys:
- frappe.throw(_("Name or Email is mandatory"), frappe.NameError)
- self.name = " - ".join(keys)
+ self.name = self.email_id
+
+ # applicant can apply more than once for a different job title or reapply
+ if frappe.db.exists("Job Applicant", self.name):
+ self.name = append_number_if_name_exists("Job Applicant", self.name)
def validate(self):
if self.email_id:
diff --git a/erpnext/hr/doctype/job_applicant/test_job_applicant.py b/erpnext/hr/doctype/job_applicant/test_job_applicant.py
index 36dcf6b..bf16220 100644
--- a/erpnext/hr/doctype/job_applicant/test_job_applicant.py
+++ b/erpnext/hr/doctype/job_applicant/test_job_applicant.py
@@ -9,7 +9,26 @@
class TestJobApplicant(unittest.TestCase):
- pass
+ def test_job_applicant_naming(self):
+ applicant = frappe.get_doc({
+ "doctype": "Job Applicant",
+ "status": "Open",
+ "applicant_name": "_Test Applicant",
+ "email_id": "job_applicant_naming@example.com"
+ }).insert()
+ self.assertEqual(applicant.name, 'job_applicant_naming@example.com')
+
+ applicant = frappe.get_doc({
+ "doctype": "Job Applicant",
+ "status": "Open",
+ "applicant_name": "_Test Applicant",
+ "email_id": "job_applicant_naming@example.com"
+ }).insert()
+ self.assertEqual(applicant.name, 'job_applicant_naming@example.com-1')
+
+ def tearDown(self):
+ frappe.db.rollback()
+
def create_job_applicant(**args):
args = frappe._dict(args)