fix: staffing Plan validation (#22379)
diff --git a/erpnext/hr/doctype/job_offer/job_offer.py b/erpnext/hr/doctype/job_offer/job_offer.py
index 32f1b89..9a2c4c6 100644
--- a/erpnext/hr/doctype/job_offer/job_offer.py
+++ b/erpnext/hr/doctype/job_offer/job_offer.py
@@ -20,10 +20,9 @@
staffing_plan = get_staffing_plan_detail(self.designation, self.company, self.offer_date)
check_vacancies = frappe.get_single("HR Settings").check_vacancies
if staffing_plan and check_vacancies:
- vacancies = frappe.db.get_value("Staffing Plan Detail", filters={"name": staffing_plan.name}, fieldname=['vacancies'])
- job_offers = len(self.get_job_offer(staffing_plan.from_date, staffing_plan.to_date))
- if vacancies - job_offers <= 0:
- frappe.throw(_("There are no vacancies under staffing plan {0}").format(get_link_to_form("Staffing Plan", staffing_plan.parent)))
+ job_offers = self.get_job_offer(staffing_plan.from_date, staffing_plan.to_date)
+ if staffing_plan.vacancies - len(job_offers) <= 0:
+ frappe.throw(_("There are no vacancies under staffing plan {0}").format(frappe.bold(get_link_to_form("Staffing Plan", staffing_plan.parent))))
def on_change(self):
update_job_applicant(self.status, self.job_applicant)
@@ -42,18 +41,22 @@
def get_staffing_plan_detail(designation, company, offer_date):
detail = frappe.db.sql("""
- SELECT spd.name as name,
+ SELECT DISTINCT spd.parent,
sp.from_date as from_date,
sp.to_date as to_date,
- sp.name as parent
+ sp.name,
+ sum(spd.vacancies) as vacancies,
+ spd.designation
FROM `tabStaffing Plan Detail` spd, `tabStaffing Plan` sp
WHERE
sp.docstatus=1
AND spd.designation=%s
AND sp.company=%s
+ AND spd.parent = sp.name
AND %s between sp.from_date and sp.to_date
""", (designation, company, offer_date), as_dict=1)
- return detail[0] if detail else None
+
+ return frappe._dict(detail[0]) if detail else None
@frappe.whitelist()
def make_employee(source_name, target_doc=None):