Leave Application Enchancement

This commit is contained in:
Kanchan Chauhan 2017-02-20 17:59:51 +05:30 committed by Nabin Hait
parent 8ad26c7d26
commit 26b79f108a
3 changed files with 89 additions and 40 deletions

View File

@ -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,29 +101,25 @@ 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',
args: {
"employee": frm.doc.employee,
"leave_type": frm.doc.leave_type,
"from_date": frm.doc.from_date,
"to_date": frm.doc.to_date,
"half_day": frm.doc.half_day
},
callback: function(r) {
if (r && r.message) {
frm.set_value('total_leave_days', r.message);
frm.trigger("get_leave_balance");
}
return frappe.call({
method: 'erpnext.hr.doctype.leave_application.leave_application.get_number_of_leave_days',
args: {
"employee": frm.doc.employee,
"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_date": frm.doc.half_day_date,
},
callback: function(r) {
if (r && r.message) {
frm.set_value('total_leave_days', r.message);
frm.trigger("get_leave_balance");
}
});
}
}
});
}
},
});

View File

@ -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",

View File

@ -63,7 +63,10 @@ class LeaveApplication(Document):
def validate_dates(self):
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
number_of_days = date_diff(to_date, from_date) + 1
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()