Leave Application Enchancement
This commit is contained in:
parent
8ad26c7d26
commit
26b79f108a
@ -23,6 +23,10 @@ frappe.ui.form.on("Leave Application", {
|
||||
|
||||
},
|
||||
|
||||
validate: function(frm) {
|
||||
frm.toggle_reqd("half_day_date", frm.doc.half_day == 1);
|
||||
},
|
||||
|
||||
refresh: function(frm) {
|
||||
if (frm.is_new()) {
|
||||
frm.set_value("status", "Open");
|
||||
@ -45,28 +49,38 @@ frappe.ui.form.on("Leave Application", {
|
||||
},
|
||||
|
||||
half_day: function(frm) {
|
||||
if (frm.doc.from_date) {
|
||||
frm.set_value("to_date", frm.doc.from_date);
|
||||
frm.trigger("calculate_total_days");
|
||||
if (frm.doc.from_date == frm.doc.to_date) {
|
||||
frm.set_value("half_day_date", frm.doc.from_date);
|
||||
}
|
||||
else {
|
||||
frm.trigger("half_day_datepicker");
|
||||
}
|
||||
frm.trigger("calculate_total_days");
|
||||
},
|
||||
|
||||
from_date: function(frm) {
|
||||
if (cint(frm.doc.half_day)==1) {
|
||||
frm.set_value("to_date", frm.doc.from_date);
|
||||
}
|
||||
frm.trigger("half_day_datepicker");
|
||||
frm.trigger("calculate_total_days");
|
||||
},
|
||||
|
||||
to_date: function(frm) {
|
||||
if (cint(frm.doc.half_day)==1 && cstr(frm.doc.from_date) && frm.doc.from_date != frm.doc.to_date) {
|
||||
msgprint(__("To Date should be same as From Date for Half Day leave"));
|
||||
frm.set_value("to_date", frm.doc.from_date);
|
||||
}
|
||||
|
||||
frm.trigger("half_day_datepicker");
|
||||
frm.trigger("calculate_total_days");
|
||||
},
|
||||
|
||||
half_day_date(frm) {
|
||||
frm.trigger("calculate_total_days");
|
||||
},
|
||||
|
||||
half_day_datepicker: function(frm) {
|
||||
frm.set_value('half_day_date', '');
|
||||
var half_day_datepicker = frm.fields_dict.half_day_date.datepicker;
|
||||
half_day_datepicker.update({
|
||||
minDate: frappe.datetime.str_to_obj(frm.doc.from_date),
|
||||
maxDate: frappe.datetime.str_to_obj(frm.doc.to_date)
|
||||
})
|
||||
},
|
||||
|
||||
get_leave_balance: function(frm) {
|
||||
if(frm.doc.docstatus==0 && frm.doc.employee && frm.doc.leave_type && frm.doc.from_date) {
|
||||
return frappe.call({
|
||||
@ -87,10 +101,7 @@ frappe.ui.form.on("Leave Application", {
|
||||
},
|
||||
|
||||
calculate_total_days: function(frm) {
|
||||
if(frm.doc.from_date && frm.doc.to_date) {
|
||||
if (cint(frm.doc.half_day)==1) {
|
||||
frm.set_value("total_leave_days", 0.5);
|
||||
} else if (frm.doc.employee && frm.doc.leave_type){
|
||||
if(frm.doc.from_date && frm.doc.to_date && frm.doc.employee && frm.doc.leave_type) {
|
||||
// server call is done to include holidays in leave days calculations
|
||||
return frappe.call({
|
||||
method: 'erpnext.hr.doctype.leave_application.leave_application.get_number_of_leave_days',
|
||||
@ -99,7 +110,8 @@ frappe.ui.form.on("Leave Application", {
|
||||
"leave_type": frm.doc.leave_type,
|
||||
"from_date": frm.doc.from_date,
|
||||
"to_date": frm.doc.to_date,
|
||||
"half_day": frm.doc.half_day
|
||||
"half_day": frm.doc.half_day,
|
||||
"half_day_date": frm.doc.half_day_date,
|
||||
},
|
||||
callback: function(r) {
|
||||
if (r && r.message) {
|
||||
@ -109,7 +121,5 @@ frappe.ui.form.on("Leave Application", {
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
});
|
||||
|
@ -269,6 +269,36 @@
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "eval:doc.half_day && (doc.from_date != doc.to_date)",
|
||||
"fieldname": "half_day_date",
|
||||
"fieldtype": "Date",
|
||||
"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": "Half Day Date",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
@ -287,6 +317,7 @@
|
||||
"length": 0,
|
||||
"no_copy": 1,
|
||||
"permlevel": 0,
|
||||
"precision": "1",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
@ -738,7 +769,7 @@
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 3,
|
||||
"modified": "2017-02-17 17:09:38.828496",
|
||||
"modified": "2017-02-24 07:33:08.907824",
|
||||
"modified_by": "Administrator",
|
||||
"module": "HR",
|
||||
"name": "Leave Application",
|
||||
|
@ -64,6 +64,9 @@ class LeaveApplication(Document):
|
||||
if self.from_date and self.to_date and (getdate(self.to_date) < getdate(self.from_date)):
|
||||
frappe.throw(_("To date cannot be before from date"))
|
||||
|
||||
if self.half_day and (getdate(self.half_day_date) < getdate(self.from_date) or (getdate(self.half_day_date) > getdate(self.to_date))):
|
||||
frappe.throw(_("Half Day Date should be between From Date and To Date"))
|
||||
|
||||
if not is_lwp(self.leave_type):
|
||||
self.validate_dates_acorss_allocation()
|
||||
self.validate_back_dated_application()
|
||||
@ -129,7 +132,7 @@ class LeaveApplication(Document):
|
||||
def validate_balance_leaves(self):
|
||||
if self.from_date and self.to_date:
|
||||
self.total_leave_days = get_number_of_leave_days(self.employee, self.leave_type,
|
||||
self.from_date, self.to_date, self.half_day)
|
||||
self.from_date, self.to_date, self.half_day, self.half_day_date)
|
||||
|
||||
if self.total_leave_days == 0:
|
||||
frappe.throw(_("The day(s) on which you are applying for leave are holidays. You need not apply for leave."))
|
||||
@ -294,13 +297,18 @@ def get_approvers(doctype, txt, searchfield, start, page_len, filters):
|
||||
return approvers_list
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_number_of_leave_days(employee, leave_type, from_date, to_date, half_day=None):
|
||||
if half_day==1:
|
||||
return 0.5
|
||||
def get_number_of_leave_days(employee, leave_type, from_date, to_date, half_day = None, half_day_date = None):
|
||||
number_of_days = 0
|
||||
if half_day == 1:
|
||||
if from_date == to_date:
|
||||
number_of_days = 0.5
|
||||
else:
|
||||
number_of_days = date_diff(to_date, from_date) + .5
|
||||
else:
|
||||
number_of_days = date_diff(to_date, from_date) + 1
|
||||
|
||||
if not frappe.db.get_value("Leave Type", leave_type, "include_holiday"):
|
||||
number_of_days = flt(number_of_days) - flt(get_holidays(employee, from_date, to_date))
|
||||
|
||||
return number_of_days
|
||||
|
||||
@frappe.whitelist()
|
||||
|
Loading…
x
Reference in New Issue
Block a user