feat: add ledger entries on leave addition

This commit is contained in:
Mangesh-Khairnar 2019-05-10 19:50:04 +05:30
parent 679371e397
commit 5ad83c06c2
3 changed files with 45 additions and 19 deletions

View File

@ -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("""

View File

@ -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):

View File

@ -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)