fix: skip expired leaves on allocation end date
This commit is contained in:
		
							parent
							
								
									bd999b0908
								
							
						
					
					
						commit
						0d4db95d99
					
				| @ -521,8 +521,39 @@ def get_remaining_leaves(allocation, leaves_taken, date, expiry): | |||||||
| 		return _get_remaining_leaves(allocation.total_leaves_allocated, allocation.to_date) | 		return _get_remaining_leaves(allocation.total_leaves_allocated, allocation.to_date) | ||||||
| 
 | 
 | ||||||
| def get_leaves_for_period(employee, leave_type, from_date, to_date): | def get_leaves_for_period(employee, leave_type, from_date, to_date): | ||||||
| 	leave_entries = frappe.db.sql(""" | 	leave_entries = get_leave_entries(employee, leave_type, from_date, to_date) | ||||||
| 		select employee, leave_type, from_date, to_date, leaves, transaction_type | 	leave_days = 0 | ||||||
|  | 
 | ||||||
|  | 	for leave_entry in leave_entries: | ||||||
|  | 		inclusive_period = leave_entry.from_date >= getdate(from_date) and leave_entry.to_date <= getdate(to_date) | ||||||
|  | 
 | ||||||
|  | 		if  inclusive_period and leave_entry.transaction_type == 'Leave Encashment': | ||||||
|  | 			leave_days += leave_entry.leaves | ||||||
|  | 
 | ||||||
|  | 		elif inclusive_period and leave_entry.transaction_type == 'Leave Allocation' \ | ||||||
|  | 			and not skip_expiry_leaves(leave_entry, to_date): | ||||||
|  | 			leave_days += leave_entry.leaves | ||||||
|  | 
 | ||||||
|  | 		else: | ||||||
|  | 			if leave_entry.from_date < getdate(from_date): | ||||||
|  | 				leave_entry.from_date = from_date | ||||||
|  | 			if leave_entry.to_date > getdate(to_date): | ||||||
|  | 				leave_entry.to_date = to_date | ||||||
|  | 
 | ||||||
|  | 			leave_days += get_number_of_leave_days(employee, leave_type, | ||||||
|  | 				leave_entry.from_date, leave_entry.to_date) * -1 | ||||||
|  | 
 | ||||||
|  | 	return leave_days | ||||||
|  | 
 | ||||||
|  | def skip_expiry_leaves(leave_entry, date): | ||||||
|  | 	''' Checks whether the expired leaves coincide with the to_date of leave balance check ''' | ||||||
|  | 	end_date = frappe.db.get_value("Leave Allocation", {'name': leave_entry.transaction_name}, ['to_date']) | ||||||
|  | 	return True if end_date == date and not leave_entry.is_carry_forward else False | ||||||
|  | 
 | ||||||
|  | def get_leave_entries(employee, leave_type, from_date, to_date): | ||||||
|  | 	''' Returns leave entries between from_date and to_date ''' | ||||||
|  | 	return frappe.db.sql(""" | ||||||
|  | 		select employee, leave_type, from_date, to_date, leaves, transaction_type, is_carry_forward | ||||||
| 		from `tabLeave Ledger Entry` | 		from `tabLeave Ledger Entry` | ||||||
| 		where employee=%(employee)s and leave_type=%(leave_type)s | 		where employee=%(employee)s and leave_type=%(leave_type)s | ||||||
| 			and docstatus=1 | 			and docstatus=1 | ||||||
| @ -536,22 +567,6 @@ def get_leaves_for_period(employee, leave_type, from_date, to_date): | |||||||
| 		"employee": employee, | 		"employee": employee, | ||||||
| 		"leave_type": leave_type | 		"leave_type": leave_type | ||||||
| 	}, as_dict=1) | 	}, as_dict=1) | ||||||
| 	leave_days = 0 |  | ||||||
| 
 |  | ||||||
| 	for leave_entry in leave_entries: |  | ||||||
| 		if leave_entry.from_date >= getdate(from_date) and leave_entry.to_date <= getdate(to_date) \ |  | ||||||
| 			and leave_entry.transaction_type in ('Leave Encashment', 'Leave Allocation'): |  | ||||||
| 			leave_days += leave_entry.leaves |  | ||||||
| 		else: |  | ||||||
| 			if leave_entry.from_date < getdate(from_date): |  | ||||||
| 				leave_entry.from_date = from_date |  | ||||||
| 			if leave_entry.to_date > getdate(to_date): |  | ||||||
| 				leave_entry.to_date = to_date |  | ||||||
| 
 |  | ||||||
| 			leave_days += get_number_of_leave_days(employee, leave_type, |  | ||||||
| 				leave_entry.from_date, leave_entry.to_date) * -1 |  | ||||||
| 
 |  | ||||||
| 	return leave_days |  | ||||||
| 
 | 
 | ||||||
| @frappe.whitelist() | @frappe.whitelist() | ||||||
| def get_holidays(employee, from_date, to_date): | def get_holidays(employee, from_date, to_date): | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user