Compensatory Leave Request - leave allocation create and update - fix
This commit is contained in:
parent
9032c9d91d
commit
b848c51592
@ -5,7 +5,7 @@
|
||||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
from frappe import _
|
||||
from frappe.utils import date_diff
|
||||
from frappe.utils import date_diff, add_days
|
||||
from frappe.model.document import Document
|
||||
from erpnext.hr.utils import validate_dates, validate_overlap, get_leave_period
|
||||
|
||||
@ -20,21 +20,49 @@ class CompensatoryLeaveRequest(Document):
|
||||
frappe.throw(_("Please select a leave type to submit the request"))
|
||||
else:
|
||||
company = frappe.db.get_value("Employee", self.employee, "company")
|
||||
date_difference = date_diff(self.work_end_date, self.work_from_date) + 1
|
||||
leave_period = get_leave_period(self.work_from_date, self.work_end_date, company)
|
||||
if leave_period:
|
||||
self.create_leave_allocation(leave_period)
|
||||
leave_allocation_name = self.exists_allocation_for_period(leave_period)
|
||||
if leave_allocation_name:
|
||||
leave_allocation = frappe.get_doc("Leave Allocation", leave_allocation_name)
|
||||
new_leaves_allocated = leave_allocation.new_leaves_allocated
|
||||
leave_allocation.new_leaves_allocated += date_difference
|
||||
leave_allocation.submit()
|
||||
else:
|
||||
self.create_leave_allocation(leave_period, date_difference)
|
||||
else:
|
||||
frappe.throw(_("There is no leave period in between {0} and {1}").format(self.work_from_date, self.work_end_date))
|
||||
|
||||
def create_leave_allocation(self, leave_period):
|
||||
date_difference = date_diff(self.work_end_date, self.work_from_date) + 1
|
||||
def exists_allocation_for_period(self, leave_period):
|
||||
leave_allocation = frappe.db.sql("""
|
||||
select name
|
||||
from `tabLeave Allocation`
|
||||
where employee=%(employee)s and leave_type=%(leave_type)s
|
||||
and docstatus=1
|
||||
and (from_date between %(from_date)s and %(to_date)s
|
||||
or to_date between %(from_date)s and %(to_date)s
|
||||
or (from_date < %(from_date)s and to_date > %(to_date)s))
|
||||
""", {
|
||||
"from_date": leave_period[0].from_date,
|
||||
"to_date": leave_period[0].to_date,
|
||||
"employee": self.employee,
|
||||
"leave_type": self.leave_type
|
||||
}, as_dict=1)
|
||||
|
||||
if leave_allocation:
|
||||
return leave_allocation[0].name
|
||||
else:
|
||||
False
|
||||
|
||||
def create_leave_allocation(self, leave_period, date_difference):
|
||||
is_carry_forward = frappe.db.get_value("Leave Type", self.leave_type, "is_carry_forward")
|
||||
allocation = frappe.new_doc("Leave Allocation")
|
||||
allocation.employee = self.employee
|
||||
allocation.employee_name = self.employee_name
|
||||
allocation.leave_type = self.leave_type
|
||||
allocation.from_date = self.work_from_date
|
||||
allocation.to_date = self.work_end_date
|
||||
allocation.from_date = add_days(self.work_end_date, 1)
|
||||
allocation.to_date = leave_period[0].to_date
|
||||
allocation.new_leaves_allocated = date_difference
|
||||
allocation.total_leaves_allocated = date_difference
|
||||
allocation.compensatory_request = self.name
|
||||
|
Loading…
x
Reference in New Issue
Block a user