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))
|
.format(self.leave_type, self.employee))
|
||||||
|
|
||||||
def on_submit(self):
|
def on_submit(self):
|
||||||
create_leave_ledger_entry(self)
|
self.create_leave_ledger_entry()
|
||||||
|
|
||||||
def on_cancel(self):
|
# def before_cancel(self):
|
||||||
create_leave_ledger_entry(self)
|
# self.create_leave_ledger_entry(submit=False)
|
||||||
|
|
||||||
def on_update_after_submit(self):
|
def on_update_after_submit(self):
|
||||||
self.validate_new_leaves_allocated_value()
|
self.validate_new_leaves_allocated_value()
|
||||||
@ -118,6 +118,24 @@ class LeaveAllocation(Document):
|
|||||||
else:
|
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)
|
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):
|
def get_leave_allocation_for_period(employee, leave_type, from_date, to_date):
|
||||||
leave_allocated = 0
|
leave_allocated = 0
|
||||||
leave_allocations = frappe.db.sql("""
|
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.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.hr.doctype.employee.employee import get_holiday_list_for_employee
|
||||||
from erpnext.buying.doctype.supplier_scorecard.supplier_scorecard import daterange
|
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 LeaveDayBlockedError(frappe.ValidationError): pass
|
||||||
class OverlapError(frappe.ValidationError): pass
|
class OverlapError(frappe.ValidationError): pass
|
||||||
@ -50,6 +51,7 @@ class LeaveApplication(Document):
|
|||||||
|
|
||||||
# notify leave applier about approval
|
# notify leave applier about approval
|
||||||
self.notify_employee()
|
self.notify_employee()
|
||||||
|
self.create_leave_ledger_entry()
|
||||||
self.reload()
|
self.reload()
|
||||||
|
|
||||||
def on_cancel(self):
|
def on_cancel(self):
|
||||||
@ -57,6 +59,7 @@ class LeaveApplication(Document):
|
|||||||
# notify leave applier about cancellation
|
# notify leave applier about cancellation
|
||||||
self.notify_employee()
|
self.notify_employee()
|
||||||
self.cancel_attendance()
|
self.cancel_attendance()
|
||||||
|
self.create_leave_ledger_entry(submit=False)
|
||||||
|
|
||||||
def validate_applicable_after(self):
|
def validate_applicable_after(self):
|
||||||
if self.leave_type:
|
if self.leave_type:
|
||||||
@ -346,6 +349,14 @@ class LeaveApplication(Document):
|
|||||||
except frappe.OutgoingEmailError:
|
except frappe.OutgoingEmailError:
|
||||||
pass
|
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()
|
@frappe.whitelist()
|
||||||
def get_number_of_leave_days(employee, leave_type, from_date, to_date, half_day = None, half_day_date = None):
|
def get_number_of_leave_days(employee, leave_type, from_date, to_date, half_day = None, half_day_date = None):
|
||||||
number_of_days = 0
|
number_of_days = 0
|
||||||
@ -384,6 +395,16 @@ def get_leave_details(employee, date):
|
|||||||
|
|
||||||
return ret
|
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()
|
@frappe.whitelist()
|
||||||
def get_leave_balance_on(employee, leave_type, date, allocation_records=None, docname=None,
|
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):
|
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):
|
class LeaveLedgerEntry(Document):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def create_leave_ledger_entry(ref_doc, submit=True):
|
def create_leave_ledger_entry(ref_doc, args):
|
||||||
ledger = dict(
|
ledger = dict(
|
||||||
doctype='Leave Ledger Entry',
|
doctype='Leave Ledger Entry',
|
||||||
employee=ref_doc.employee,
|
employee=ref_doc.employee,
|
||||||
@ -20,19 +20,6 @@ def create_leave_ledger_entry(ref_doc, submit=True):
|
|||||||
transaction_type=ref_doc.doctype,
|
transaction_type=ref_doc.doctype,
|
||||||
transaction_name=ref_doc.name
|
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(
|
ledger.update(args)
|
||||||
leaves=ref_doc.carry_forwarded_leaves * 1 if submit else -1,
|
frappe.get_doc(ledger).insert(ignore_permissions=True)
|
||||||
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()
|
|
||||||
Loading…
x
Reference in New Issue
Block a user