feat: add ledger entries on leave addition
This commit is contained in:
parent
679371e397
commit
5ad83c06c2
@ -42,10 +42,10 @@ class LeaveAllocation(Document):
|
||||
.format(self.leave_type, self.employee))
|
||||
|
||||
def on_submit(self):
|
||||
create_leave_ledger_entry(self)
|
||||
self.create_leave_ledger_entry()
|
||||
|
||||
def on_cancel(self):
|
||||
create_leave_ledger_entry(self)
|
||||
# def before_cancel(self):
|
||||
# self.create_leave_ledger_entry(submit=False)
|
||||
|
||||
def on_update_after_submit(self):
|
||||
self.validate_new_leaves_allocated_value()
|
||||
@ -118,6 +118,24 @@ class LeaveAllocation(Document):
|
||||
else:
|
||||
frappe.throw(_("Total allocated leaves {0} cannot be less than already approved leaves {1} for the period").format(self.total_leaves_allocated, leaves_taken), LessAllocationError)
|
||||
|
||||
def create_leave_ledger_entry(self, submit=True):
|
||||
if self.carry_forwarded_leaves:
|
||||
expiry_days = frappe.db.get_value("Leave Type", self.leave_type, "carry_forward_leave_expiry")
|
||||
|
||||
args = dict(
|
||||
leaves=self.carry_forwarded_leaves * 1 if submit else -1,
|
||||
to_date=add_days(self.from_date, expiry_days) if expiry_days else self.to_date,
|
||||
is_carry_forward=1
|
||||
)
|
||||
create_leave_ledger_entry(self, args)
|
||||
|
||||
args = dict(
|
||||
leaves=self.new_leaves_allocated * 1 if submit else -1,
|
||||
to_date=self.to_date,
|
||||
is_carry_forward=0
|
||||
)
|
||||
create_leave_ledger_entry(self, args)
|
||||
|
||||
def get_leave_allocation_for_period(employee, leave_type, from_date, to_date):
|
||||
leave_allocated = 0
|
||||
leave_allocations = frappe.db.sql("""
|
||||
|
@ -10,6 +10,7 @@ from erpnext.hr.utils import set_employee_name, get_leave_period
|
||||
from erpnext.hr.doctype.leave_block_list.leave_block_list import get_applicable_block_dates
|
||||
from erpnext.hr.doctype.employee.employee import get_holiday_list_for_employee
|
||||
from erpnext.buying.doctype.supplier_scorecard.supplier_scorecard import daterange
|
||||
from erpnext.hr.doctype.leave_ledger_entry.leave_ledger_entry import create_leave_ledger_entry
|
||||
|
||||
class LeaveDayBlockedError(frappe.ValidationError): pass
|
||||
class OverlapError(frappe.ValidationError): pass
|
||||
@ -50,6 +51,7 @@ class LeaveApplication(Document):
|
||||
|
||||
# notify leave applier about approval
|
||||
self.notify_employee()
|
||||
self.create_leave_ledger_entry()
|
||||
self.reload()
|
||||
|
||||
def on_cancel(self):
|
||||
@ -57,6 +59,7 @@ class LeaveApplication(Document):
|
||||
# notify leave applier about cancellation
|
||||
self.notify_employee()
|
||||
self.cancel_attendance()
|
||||
self.create_leave_ledger_entry(submit=False)
|
||||
|
||||
def validate_applicable_after(self):
|
||||
if self.leave_type:
|
||||
@ -346,6 +349,14 @@ class LeaveApplication(Document):
|
||||
except frappe.OutgoingEmailError:
|
||||
pass
|
||||
|
||||
def create_leave_ledger_entry(self, submit=True):
|
||||
args = dict(
|
||||
leaves=self.total_leave_days * -1 if submit else 1,
|
||||
to_date=self.to_date,
|
||||
is_carry_forward=0
|
||||
)
|
||||
create_leave_ledger_entry(self, args)
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_number_of_leave_days(employee, leave_type, from_date, to_date, half_day = None, half_day_date = None):
|
||||
number_of_days = 0
|
||||
@ -384,6 +395,16 @@ def get_leave_details(employee, date):
|
||||
|
||||
return ret
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_leave_balance(employee, leave_type, date):
|
||||
leave_records = frappe.get_all("Leave Ledger Entry",
|
||||
filters={'Employee':employee,
|
||||
'leave_type':leave_type,
|
||||
'to_date':("<=", date)},
|
||||
fields=['leaves'])
|
||||
|
||||
return sum(record.get("leaves") for record in leave_records)
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_leave_balance_on(employee, leave_type, date, allocation_records=None, docname=None,
|
||||
consider_all_leaves_in_the_allocation_period=False, consider_encashed_leaves=True):
|
||||
|
@ -10,7 +10,7 @@ from frappe.utils import add_days
|
||||
class LeaveLedgerEntry(Document):
|
||||
pass
|
||||
|
||||
def create_leave_ledger_entry(ref_doc, submit=True):
|
||||
def create_leave_ledger_entry(ref_doc, args):
|
||||
ledger = dict(
|
||||
doctype='Leave Ledger Entry',
|
||||
employee=ref_doc.employee,
|
||||
@ -20,19 +20,6 @@ def create_leave_ledger_entry(ref_doc, submit=True):
|
||||
transaction_type=ref_doc.doctype,
|
||||
transaction_name=ref_doc.name
|
||||
)
|
||||
if ref_doc.carry_forwarded_leaves:
|
||||
expiry_days = frappe.db.get_value("Leave Type", ref_doc.leave_type, "carry_forward_leave_expiry")
|
||||
|
||||
ledger.update(dict(
|
||||
leaves=ref_doc.carry_forwarded_leaves * 1 if submit else -1,
|
||||
to_date=add_days(ref_doc.from_date, expiry_days) if expiry_days else ref_doc.to_date,
|
||||
is_carry_forward=1
|
||||
))
|
||||
frappe.get_doc(ledger).submit()
|
||||
|
||||
ledger.update(dict(
|
||||
leaves=ref_doc.new_leaves_allocated * 1 if submit else -1,
|
||||
to_date=ref_doc.to_date,
|
||||
is_carry_forward=0
|
||||
))
|
||||
frappe.get_doc(ledger).submit()
|
||||
ledger.update(args)
|
||||
frappe.get_doc(ledger).insert(ignore_permissions=True)
|
Loading…
x
Reference in New Issue
Block a user