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
|
from __future__ import unicode_literals
|
||||||
import frappe
|
import frappe
|
||||||
from frappe import _
|
from frappe import _
|
||||||
from frappe.utils import date_diff
|
from frappe.utils import date_diff, add_days
|
||||||
from frappe.model.document import Document
|
from frappe.model.document import Document
|
||||||
from erpnext.hr.utils import validate_dates, validate_overlap, get_leave_period
|
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"))
|
frappe.throw(_("Please select a leave type to submit the request"))
|
||||||
else:
|
else:
|
||||||
company = frappe.db.get_value("Employee", self.employee, "company")
|
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)
|
leave_period = get_leave_period(self.work_from_date, self.work_end_date, company)
|
||||||
if leave_period:
|
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:
|
else:
|
||||||
frappe.throw(_("There is no leave period in between {0} and {1}").format(self.work_from_date, self.work_end_date))
|
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):
|
def exists_allocation_for_period(self, leave_period):
|
||||||
date_difference = date_diff(self.work_end_date, self.work_from_date) + 1
|
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")
|
is_carry_forward = frappe.db.get_value("Leave Type", self.leave_type, "is_carry_forward")
|
||||||
allocation = frappe.new_doc("Leave Allocation")
|
allocation = frappe.new_doc("Leave Allocation")
|
||||||
allocation.employee = self.employee
|
allocation.employee = self.employee
|
||||||
allocation.employee_name = self.employee_name
|
allocation.employee_name = self.employee_name
|
||||||
allocation.leave_type = self.leave_type
|
allocation.leave_type = self.leave_type
|
||||||
allocation.from_date = self.work_from_date
|
allocation.from_date = add_days(self.work_end_date, 1)
|
||||||
allocation.to_date = self.work_end_date
|
allocation.to_date = leave_period[0].to_date
|
||||||
allocation.new_leaves_allocated = date_difference
|
allocation.new_leaves_allocated = date_difference
|
||||||
allocation.total_leaves_allocated = date_difference
|
allocation.total_leaves_allocated = date_difference
|
||||||
allocation.compensatory_request = self.name
|
allocation.compensatory_request = self.name
|
||||||
|
Loading…
x
Reference in New Issue
Block a user