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,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"); | ||||
| 					} | ||||
| 				}); | ||||
| 			} | ||||
| 				} | ||||
| 			}); | ||||
| 		} | ||||
| 	}, | ||||
| 
 | ||||
| }); | ||||
|  | ||||
| @ -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",  | ||||
|  | ||||
| @ -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() | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user