Skip to content

Commit

Permalink
fix(patch): Handled old Leave allocatioln
Browse files Browse the repository at this point in the history
  • Loading branch information
Anurag810 committed Oct 15, 2020
1 parent 4d67cff commit 37c6d7f
Showing 1 changed file with 50 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,31 +6,67 @@
import frappe

def execute():
employees_with_leave_policy = frappe.db.sql("SELECT name, leave_policy FROM `tabEmployee` WHERE leave_policy IS NOT NULL", as_dict = 1)
employees_with_leave_policy = frappe.db.sql("SELECT name, leave_policy FROM `tabEmployee` WHERE leave_policy IS NOT NULL and leave_policy != ''", as_dict = 1)

employee_with_assignment = []
leave_policy =[]

#for employee

for employee in employees_with_leave_policy:
print(employee.name)
if not frappe.db.exists("Leave Allocation", {"employee":employee.name, "leave_policy": employee.leave_policy, "docstatus": 1}):
alloc = frappe.db.exists("Leave Allocation", {"employee":employee.name, "leave_policy": employee.leave_policy, "docstatus": 1})
if not alloc:
create_assignment(employee.name, employee.leave_policy)

employee_with_assignment.append(employee.name)
leave_policy.append(employee.leave_policy)


employee_grade_with_leave_policy = frappe.db.sql("SELECT name, default_leave_policy FROM `tabEmployee Grade` WHERE default_leave_policy IS NOT NULL", as_dict = 1)
employee_grade_with_leave_policy = frappe.db.sql("SELECT name, default_leave_policy FROM `tabEmployee Grade` WHERE default_leave_policy IS NOT NULL and default_leave_policy != ''", as_dict = 1)

#for whole employee Grade

for grade in employee_grade_with_leave_policy:
employees = get_employee_with_grade(grade.name)
print(employees)
for employee in employees:
alloc = frappe.db.exists("Leave Allocation", {"employee":employee.name, "leave_policy": grade.default_leave_policy, "docstatus": 1})
if not alloc:
create_assignment(employee.name, grade.default_leave_policy)

def create_assignment(employee, leave_policy):
lpa = frappe.new_doc("Leave Policy Assignment")
lpa.employee = employee
lpa.leave_policy = leave_policy
if employee not in employee_with_assignment: #Will ensure no duplicate
alloc = frappe.db.exists("Leave Allocation", {"employee":employee.name, "leave_policy": grade.default_leave_policy, "docstatus": 1})
if not alloc:
create_assignment(employee.name, grade.default_leave_policy)
leave_policy.append(default_leave_policy)

#for old Leave allocation and leave policy from allocation, which may got updated in employee grade.
leave_allocations = frappe.db.sql("SELECT leave_policy, leave_period, employee FROM `tabLeave Allocation` WHERE leave_policy IS NOT NULL and leave_policy != '' and docstatus = 1 ", as_dict = 1)

for allocation in leave_allocations:
if allocation.leave_policy not in leave_policy:
create_assignment(allocation.employee, allocation.leave_policy, leave_period=allocation.leave_period,
allocation_exists=True)

def create_assignment(employee, leave_policy, leave_period=None, allocation_exists = False):

filters = {"employee":employee, "leave_policy": leave_policy}
if leave_period:
filters["leave_period"] = leave_period

if not frappe.db.exists("Leave Policy Assignment" , filters):
lpa = frappe.new_doc("Leave Policy Assignment")
lpa.employee = employee
lpa.leave_policy = leave_policy

lpa.flags.ignore_mandatory = True
if allocation_exists:
lpa.assignment_based_on = 'Leave Period'
lpa.leave_period = leave_period
lpa.leaves_allocated = 1

lpa.save()
if allocation_exists:
lpa.submit()
#Updating old Leave Allocation
frappe.db.sql("Update `tabLeave Allocation` set leave_policy_assignment = %s", lpa.name)

lpa.flags.ignore_mandatory = True
lpa.save()

def get_employee_with_grade(garde):
return frappe.get_list("Employee", filters = {"grade": grade})
Expand Down

0 comments on commit 37c6d7f

Please sign in to comment.