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) {
|
refresh: function(frm) {
|
||||||
if (frm.is_new()) {
|
if (frm.is_new()) {
|
||||||
frm.set_value("status", "Open");
|
frm.set_value("status", "Open");
|
||||||
@ -45,28 +49,38 @@ frappe.ui.form.on("Leave Application", {
|
|||||||
},
|
},
|
||||||
|
|
||||||
half_day: function(frm) {
|
half_day: function(frm) {
|
||||||
if (frm.doc.from_date) {
|
if (frm.doc.from_date == frm.doc.to_date) {
|
||||||
frm.set_value("to_date", frm.doc.from_date);
|
frm.set_value("half_day_date", frm.doc.from_date);
|
||||||
frm.trigger("calculate_total_days");
|
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
frm.trigger("half_day_datepicker");
|
||||||
|
}
|
||||||
|
frm.trigger("calculate_total_days");
|
||||||
},
|
},
|
||||||
|
|
||||||
from_date: function(frm) {
|
from_date: function(frm) {
|
||||||
if (cint(frm.doc.half_day)==1) {
|
frm.trigger("half_day_datepicker");
|
||||||
frm.set_value("to_date", frm.doc.from_date);
|
|
||||||
}
|
|
||||||
frm.trigger("calculate_total_days");
|
frm.trigger("calculate_total_days");
|
||||||
},
|
},
|
||||||
|
|
||||||
to_date: function(frm) {
|
to_date: function(frm) {
|
||||||
if (cint(frm.doc.half_day)==1 && cstr(frm.doc.from_date) && frm.doc.from_date != frm.doc.to_date) {
|
frm.trigger("half_day_datepicker");
|
||||||
msgprint(__("To Date should be same as From Date for Half Day leave"));
|
|
||||||
frm.set_value("to_date", frm.doc.from_date);
|
|
||||||
}
|
|
||||||
|
|
||||||
frm.trigger("calculate_total_days");
|
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) {
|
get_leave_balance: function(frm) {
|
||||||
if(frm.doc.docstatus==0 && frm.doc.employee && frm.doc.leave_type && frm.doc.from_date) {
|
if(frm.doc.docstatus==0 && frm.doc.employee && frm.doc.leave_type && frm.doc.from_date) {
|
||||||
return frappe.call({
|
return frappe.call({
|
||||||
@ -87,29 +101,25 @@ frappe.ui.form.on("Leave Application", {
|
|||||||
},
|
},
|
||||||
|
|
||||||
calculate_total_days: function(frm) {
|
calculate_total_days: function(frm) {
|
||||||
if(frm.doc.from_date && frm.doc.to_date) {
|
if(frm.doc.from_date && frm.doc.to_date && frm.doc.employee && frm.doc.leave_type) {
|
||||||
if (cint(frm.doc.half_day)==1) {
|
|
||||||
frm.set_value("total_leave_days", 0.5);
|
|
||||||
} else if (frm.doc.employee && frm.doc.leave_type){
|
|
||||||
// server call is done to include holidays in leave days calculations
|
// server call is done to include holidays in leave days calculations
|
||||||
return frappe.call({
|
return frappe.call({
|
||||||
method: 'erpnext.hr.doctype.leave_application.leave_application.get_number_of_leave_days',
|
method: 'erpnext.hr.doctype.leave_application.leave_application.get_number_of_leave_days',
|
||||||
args: {
|
args: {
|
||||||
"employee": frm.doc.employee,
|
"employee": frm.doc.employee,
|
||||||
"leave_type": frm.doc.leave_type,
|
"leave_type": frm.doc.leave_type,
|
||||||
"from_date": frm.doc.from_date,
|
"from_date": frm.doc.from_date,
|
||||||
"to_date": frm.doc.to_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) {
|
callback: function(r) {
|
||||||
frm.set_value('total_leave_days', r.message);
|
if (r && r.message) {
|
||||||
frm.trigger("get_leave_balance");
|
frm.set_value('total_leave_days', r.message);
|
||||||
}
|
frm.trigger("get_leave_balance");
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
});
|
});
|
||||||
|
@ -269,6 +269,36 @@
|
|||||||
"set_only_once": 0,
|
"set_only_once": 0,
|
||||||
"unique": 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,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
@ -287,6 +317,7 @@
|
|||||||
"length": 0,
|
"length": 0,
|
||||||
"no_copy": 1,
|
"no_copy": 1,
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
"precision": "1",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 1,
|
"read_only": 1,
|
||||||
@ -738,7 +769,7 @@
|
|||||||
"issingle": 0,
|
"issingle": 0,
|
||||||
"istable": 0,
|
"istable": 0,
|
||||||
"max_attachments": 3,
|
"max_attachments": 3,
|
||||||
"modified": "2017-02-17 17:09:38.828496",
|
"modified": "2017-02-24 07:33:08.907824",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "HR",
|
"module": "HR",
|
||||||
"name": "Leave Application",
|
"name": "Leave Application",
|
||||||
|
@ -63,7 +63,10 @@ class LeaveApplication(Document):
|
|||||||
def validate_dates(self):
|
def validate_dates(self):
|
||||||
if self.from_date and self.to_date and (getdate(self.to_date) < getdate(self.from_date)):
|
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"))
|
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):
|
if not is_lwp(self.leave_type):
|
||||||
self.validate_dates_acorss_allocation()
|
self.validate_dates_acorss_allocation()
|
||||||
self.validate_back_dated_application()
|
self.validate_back_dated_application()
|
||||||
@ -129,7 +132,7 @@ class LeaveApplication(Document):
|
|||||||
def validate_balance_leaves(self):
|
def validate_balance_leaves(self):
|
||||||
if self.from_date and self.to_date:
|
if self.from_date and self.to_date:
|
||||||
self.total_leave_days = get_number_of_leave_days(self.employee, self.leave_type,
|
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:
|
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."))
|
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
|
return approvers_list
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def get_number_of_leave_days(employee, leave_type, from_date, to_date, half_day=None):
|
def get_number_of_leave_days(employee, leave_type, from_date, to_date, half_day = None, half_day_date = None):
|
||||||
if half_day==1:
|
number_of_days = 0
|
||||||
return 0.5
|
if half_day == 1:
|
||||||
number_of_days = date_diff(to_date, from_date) + 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"):
|
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))
|
number_of_days = flt(number_of_days) - flt(get_holidays(employee, from_date, to_date))
|
||||||
|
|
||||||
return number_of_days
|
return number_of_days
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user