mirror of
https://github.com/frappe/erpnext.git
synced 2026-06-06 21:59:13 +00:00
Job Opening - get planned opening, validate vacancies by Staffing Plan
This commit is contained in:
@@ -0,0 +1,39 @@
|
|||||||
|
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
|
||||||
|
// For license information, please see license.txt
|
||||||
|
|
||||||
|
frappe.ui.form.on('Job Opening', {
|
||||||
|
designation: function(frm) {
|
||||||
|
if(frm.doc.designation && frm.doc.company){
|
||||||
|
frappe.call({
|
||||||
|
"method": "erpnext.hr.doctype.staffing_plan.staffing_plan.get_active_staffing_plan_and_vacancies",
|
||||||
|
args: {
|
||||||
|
company: frm.doc.company,
|
||||||
|
designation: frm.doc.designation,
|
||||||
|
department: frm.doc.department,
|
||||||
|
date: frappe.datetime.now_date() // ToDo - Date in Job Opening?
|
||||||
|
},
|
||||||
|
callback: function (data) {
|
||||||
|
if(data.message){
|
||||||
|
frm.set_value('staffing_plan', data.message[0]);
|
||||||
|
frm.set_value('planned_vacancies', data.message[1]);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
frm.set_value('staffing_plan', "");
|
||||||
|
frm.set_value('planned_vacancies', 0);
|
||||||
|
frappe.show_alert({
|
||||||
|
indicator: 'orange',
|
||||||
|
message: __('No Staffing Plans found for this Designation')
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
frm.set_value('staffing_plan', "");
|
||||||
|
frm.set_value('planned_vacancies', 0);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
company: function(frm) {
|
||||||
|
frm.set_value('designation', "");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|||||||
@@ -224,7 +224,38 @@
|
|||||||
"precision": "",
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 1,
|
||||||
|
"remember_last_selected_value": 0,
|
||||||
|
"report_hide": 0,
|
||||||
|
"reqd": 0,
|
||||||
|
"search_index": 0,
|
||||||
|
"set_only_once": 0,
|
||||||
|
"translatable": 0,
|
||||||
|
"unique": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_on_submit": 0,
|
||||||
|
"bold": 0,
|
||||||
|
"collapsible": 0,
|
||||||
|
"columns": 0,
|
||||||
|
"fieldname": "planned_vacancies",
|
||||||
|
"fieldtype": "Int",
|
||||||
|
"hidden": 0,
|
||||||
|
"ignore_user_permissions": 0,
|
||||||
|
"ignore_xss_filter": 0,
|
||||||
|
"in_filter": 0,
|
||||||
|
"in_global_search": 0,
|
||||||
|
"in_list_view": 0,
|
||||||
|
"in_standard_filter": 0,
|
||||||
|
"label": "Planned number of Positions",
|
||||||
|
"length": 0,
|
||||||
|
"no_copy": 0,
|
||||||
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
|
"print_hide": 0,
|
||||||
|
"print_hide_if_no_value": 0,
|
||||||
|
"read_only": 1,
|
||||||
"remember_last_selected_value": 0,
|
"remember_last_selected_value": 0,
|
||||||
"report_hide": 0,
|
"report_hide": 0,
|
||||||
"reqd": 0,
|
"reqd": 0,
|
||||||
@@ -369,7 +400,7 @@
|
|||||||
"issingle": 0,
|
"issingle": 0,
|
||||||
"istable": 0,
|
"istable": 0,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"modified": "2018-04-13 18:52:56.109392",
|
"modified": "2018-04-18 19:27:15.004385",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "HR",
|
"module": "HR",
|
||||||
"name": "Job Opening",
|
"name": "Job Opening",
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import frappe
|
|||||||
|
|
||||||
from frappe.website.website_generator import WebsiteGenerator
|
from frappe.website.website_generator import WebsiteGenerator
|
||||||
from frappe import _
|
from frappe import _
|
||||||
|
from erpnext.hr.doctype.staffing_plan.staffing_plan import get_current_employee_count, get_active_staffing_plan_and_vacancies
|
||||||
|
|
||||||
class JobOpening(WebsiteGenerator):
|
class JobOpening(WebsiteGenerator):
|
||||||
website = frappe._dict(
|
website = frappe._dict(
|
||||||
@@ -20,6 +21,20 @@ class JobOpening(WebsiteGenerator):
|
|||||||
if not self.route:
|
if not self.route:
|
||||||
self.route = frappe.scrub(self.job_title).replace('_', '-')
|
self.route = frappe.scrub(self.job_title).replace('_', '-')
|
||||||
|
|
||||||
|
if self.staffing_plan:
|
||||||
|
self.validate_current_vacancies()
|
||||||
|
|
||||||
|
def validate_current_vacancies(self):
|
||||||
|
current_count = get_current_employee_count(self.designation)
|
||||||
|
current_count+= frappe.db.sql("""select count(*) from `tabJob Opening` \
|
||||||
|
where designation = '{0}' and status='Open'""".format(self.designation))[0][0]
|
||||||
|
|
||||||
|
vacancies = get_active_staffing_plan_and_vacancies(self.company, self.designation, self.department)[1]
|
||||||
|
# set staffing_plan too?
|
||||||
|
if vacancies and vacancies <= current_count:
|
||||||
|
frappe.throw(_("Job Openings for designation {0} already opened or hiring \
|
||||||
|
completed as per Staffing Plan {1}".format(self.designation, self.staffing_plan)))
|
||||||
|
|
||||||
def get_context(self, context):
|
def get_context(self, context):
|
||||||
context.parents = [{'route': 'jobs', 'title': _('All Jobs') }]
|
context.parents = [{'route': 'jobs', 'title': _('All Jobs') }]
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user