diff --git a/erpnext/hr/doctype/job_offer/job_offer.py b/erpnext/hr/doctype/job_offer/job_offer.py
index e7e1a37480..3d68bc8d8e 100644
--- a/erpnext/hr/doctype/job_offer/job_offer.py
+++ b/erpnext/hr/doctype/job_offer/job_offer.py
@@ -24,8 +24,13 @@ class JobOffer(Document):
check_vacancies = frappe.get_single("HR Settings").check_vacancies
if staffing_plan and check_vacancies:
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))))
+
+ if not staffing_plan.get("vacancies") or staffing_plan.vacancies - len(job_offers) <= 0:
+ error_variable = 'for ' + frappe.bold(self.designation)
+ if staffing_plan.get("parent"):
+ error_variable = frappe.bold(get_link_to_form("Staffing Plan", staffing_plan.parent))
+
+ frappe.throw(_("There are no vacancies under staffing plan {0}").format(error_variable))
def on_change(self):
update_job_applicant(self.status, self.job_applicant)
diff --git a/erpnext/payroll/doctype/salary_detail/salary_detail.json b/erpnext/payroll/doctype/salary_detail/salary_detail.json
index adb54f26c6..cc87caeae1 100644
--- a/erpnext/payroll/doctype/salary_detail/salary_detail.json
+++ b/erpnext/payroll/doctype/salary_detail/salary_detail.json
@@ -7,27 +7,30 @@
"field_order": [
"salary_component",
"abbr",
- "statistical_component",
"column_break_3",
- "deduct_full_tax_on_selected_payroll_date",
+ "amount",
+ "section_break_5",
+ "additional_salary",
+ "statistical_component",
"depends_on_payment_days",
- "is_tax_applicable",
"exempted_from_income_tax",
+ "is_tax_applicable",
+ "column_break_11",
"is_flexible_benefit",
"variable_based_on_taxable_salary",
+ "do_not_include_in_total",
+ "deduct_full_tax_on_selected_payroll_date",
"section_break_2",
"condition",
+ "column_break_18",
"amount_based_on_formula",
"formula",
- "amount",
- "do_not_include_in_total",
+ "section_break_19",
"default_amount",
"additional_amount",
+ "column_break_24",
"tax_on_flexible_benefit",
- "tax_on_additional_salary",
- "section_break_11",
- "additional_salary",
- "condition_and_formula_help"
+ "tax_on_additional_salary"
],
"fields": [
{
@@ -110,9 +113,11 @@
"read_only": 1
},
{
+ "collapsible": 1,
"depends_on": "eval:doc.is_flexible_benefit != 1",
"fieldname": "section_break_2",
- "fieldtype": "Section Break"
+ "fieldtype": "Section Break",
+ "label": "Condtion and formula"
},
{
"allow_on_submit": 1,
@@ -181,23 +186,12 @@
"label": "Tax on additional salary",
"read_only": 1
},
- {
- "depends_on": "eval:doc.parenttype=='Salary Structure'",
- "fieldname": "section_break_11",
- "fieldtype": "Column Break"
- },
- {
- "depends_on": "eval:doc.parenttype=='Salary Structure'",
- "fieldname": "condition_and_formula_help",
- "fieldtype": "HTML",
- "label": "Condition and Formula Help",
- "options": "
Condition and Formula Help
\n\nNotes:
\n\n\n- Use field
base
for using base salary of the Employee \n- Use Salary Component abbreviations in conditions and formulas.
BS = Basic Salary
\n- Use field name for employee details in conditions and formulas.
Employment Type = employment_type
Branch = branch
\n- Use field name from Salary Slip in conditions and formulas.
Payment Days = payment_days
Leave without pay = leave_without_pay
\n- Direct Amount can also be entered based on Condtion. See example 3
\n\nExamples
\n\n- Calculating Basic Salary based on
base
\nCondition: base < 10000
\nFormula: base * .2
\n- Calculating HRA based on Basic Salary
BS
\nCondition: BS > 2000
\nFormula: BS * .1
\n- Calculating TDS based on Employment Type
employment_type
\nCondition: employment_type==\"Intern\"
\nAmount: 1000
\n
"
- },
{
"fieldname": "additional_salary",
"fieldtype": "Link",
"label": "Additional Salary ",
- "options": "Additional Salary"
+ "options": "Additional Salary",
+ "read_only": 1
},
{
"default": "0",
@@ -207,11 +201,43 @@
"fieldtype": "Check",
"label": "Exempted from Income Tax",
"read_only": 1
+ },
+ {
+ "collapsible": 1,
+ "fieldname": "section_break_5",
+ "fieldtype": "Section Break",
+ "label": "Component properties and references ",
+ "show_days": 1,
+ "show_seconds": 1
+ },
+ {
+ "fieldname": "column_break_11",
+ "fieldtype": "Column Break",
+ "show_days": 1,
+ "show_seconds": 1
+ },
+ {
+ "fieldname": "section_break_19",
+ "fieldtype": "Section Break",
+ "show_days": 1,
+ "show_seconds": 1
+ },
+ {
+ "fieldname": "column_break_18",
+ "fieldtype": "Column Break",
+ "show_days": 1,
+ "show_seconds": 1
+ },
+ {
+ "fieldname": "column_break_24",
+ "fieldtype": "Column Break",
+ "show_days": 1,
+ "show_seconds": 1
}
],
"istable": 1,
"links": [],
- "modified": "2020-06-22 23:21:26.300951",
+ "modified": "2020-07-01 12:13:41.956495",
"modified_by": "Administrator",
"module": "Payroll",
"name": "Salary Detail",
diff --git a/erpnext/payroll/doctype/salary_slip/salary_slip.js b/erpnext/payroll/doctype/salary_slip/salary_slip.js
index 4b623e57b4..7b69dbe8d6 100644
--- a/erpnext/payroll/doctype/salary_slip/salary_slip.js
+++ b/erpnext/payroll/doctype/salary_slip/salary_slip.js
@@ -123,13 +123,13 @@ frappe.ui.form.on("Salary Slip", {
doc: frm.doc,
callback: function(r, rt) {
frm.refresh();
- if (frm.doc.absent_days){
+ if (r.message){
frm.fields_dict.absent_days.set_description("Unmarked Days is treated as "+ r.message +". You can can change this in " + frappe.utils.get_form_link("Payroll Settings", "Payroll Settings", true));
}
}
});
}
-})
+});
frappe.ui.form.on('Salary Slip Timesheet', {
time_sheet: function(frm, dt, dn) {
diff --git a/erpnext/payroll/doctype/salary_slip/salary_slip.json b/erpnext/payroll/doctype/salary_slip/salary_slip.json
index 27a974ac83..619c45fa4a 100644
--- a/erpnext/payroll/doctype/salary_slip/salary_slip.json
+++ b/erpnext/payroll/doctype/salary_slip/salary_slip.json
@@ -20,15 +20,17 @@
"company",
"letter_head",
"section_break_10",
- "salary_slip_based_on_timesheet",
"start_date",
"end_date",
"salary_structure",
+ "column_break_18",
+ "salary_slip_based_on_timesheet",
"payroll_frequency",
- "column_break_15",
+ "section_break_20",
"total_working_days",
"unmarked_days",
"leave_without_pay",
+ "column_break_24",
"absent_days",
"payment_days",
"hourly_wages",
@@ -200,10 +202,6 @@
"fieldtype": "Date",
"label": "End Date"
},
- {
- "fieldname": "column_break_15",
- "fieldtype": "Column Break"
- },
{
"fieldname": "salary_structure",
"fieldtype": "Link",
@@ -490,13 +488,25 @@
"fieldtype": "Float",
"hidden": 1,
"label": "Unmarked days"
+ },
+ {
+ "fieldname": "section_break_20",
+ "fieldtype": "Section Break"
+ },
+ {
+ "fieldname": "column_break_24",
+ "fieldtype": "Column Break"
+ },
+ {
+ "fieldname": "column_break_18",
+ "fieldtype": "Column Break"
}
],
"icon": "fa fa-file-text",
"idx": 9,
"is_submittable": 1,
"links": [],
- "modified": "2020-07-22 12:41:03.659422",
+ "modified": "2020-08-11 17:37:54.274384",
"modified_by": "Administrator",
"module": "Payroll",
"name": "Salary Slip",