fix: expiry logic for carry forwarded allocation
diff --git a/erpnext/hr/doctype/leave_ledger_entry/leave_ledger_entry.json b/erpnext/hr/doctype/leave_ledger_entry/leave_ledger_entry.json
index c7e6b70..89c703d 100644
--- a/erpnext/hr/doctype/leave_ledger_entry/leave_ledger_entry.json
+++ b/erpnext/hr/doctype/leave_ledger_entry/leave_ledger_entry.json
@@ -12,6 +12,7 @@
"from_date",
"to_date",
"is_carry_forward",
+ "is_expired",
"amended_from"
],
"fields": [
@@ -72,10 +73,15 @@
"fieldname": "is_carry_forward",
"fieldtype": "Check",
"label": "Is Carry Forward"
+ },
+ {
+ "fieldname": "is_expired",
+ "fieldtype": "Check",
+ "label": "Is Expired"
}
],
"is_submittable": 1,
- "modified": "2019-05-09 18:36:07.383714",
+ "modified": "2019-05-13 12:56:45.542495",
"modified_by": "Administrator",
"module": "HR",
"name": "Leave Ledger Entry",
diff --git a/erpnext/hr/doctype/leave_ledger_entry/leave_ledger_entry.py b/erpnext/hr/doctype/leave_ledger_entry/leave_ledger_entry.py
index 585e107..526a91e 100644
--- a/erpnext/hr/doctype/leave_ledger_entry/leave_ledger_entry.py
+++ b/erpnext/hr/doctype/leave_ledger_entry/leave_ledger_entry.py
@@ -9,7 +9,10 @@
from frappe.utils import add_days, today
class LeaveLedgerEntry(Document):
- pass
+ def validate_entries(self):
+ leave_records = frappe.get_all('Leave Ledger Entry', ['leaves'])
+ if sum(record.get("leaves") for record in leave_records) <0:
+ frappe.throw(_("Invalid Ledger Entry"))
def create_leave_ledger_entry(ref_doc, args, submit=True):
ledger = frappe._dict(
@@ -19,7 +22,7 @@
leave_type=ref_doc.leave_type,
from_date=ref_doc.from_date,
transaction_type=ref_doc.doctype,
- transaction_name=ref_doc.name
+ transaction_name=ref_doc.name,
)
ledger.update(args)
@@ -52,22 +55,42 @@
def check_expired_allocation():
''' Checks for expired allocation by comparing to_date with current_date and
based on that creates an expiry ledger entry '''
- expired_allocation = frappe.db.get_all("Leave Ledger Allocation",
+ expired_allocation = frappe.get_all("Leave Ledger Allocation",
filters={
'to_date': today(),
'transaction_type': 'Leave Allocation'
},
- fields=['name', 'transaction_name'])
+ fields=['*'])
if expired_allocation:
create_expiry_ledger_entry(expired_allocation)
def create_expiry_ledger_entry(expired_allocation):
for allocation in expired_allocation:
- ledger_entry = frappe.get_doc('Leave Ledger Entry', allocation.name)
- args = {
- 'leaves': -ledger_entry.leaves,
- 'to_date': '',
- 'is_carry_forward': ledger_entry.is_carry_forward
- }
- create_leave_ledger_entry(ledger_entry, args)
\ No newline at end of file
+ filters = {
+ 'employee': allocation.employee,
+ 'leave_type': allocation.leave_type,
+ 'from_date': ('>=', allocation.from_date),
+ }
+ # get only application ledger entries in case of carry forward
+ if allocation.is_carry_forward:
+ filters.update(dict(transaction_type='Leave Application'))
+
+ leave_records = frappe.get_all("Leave Ledger Entry",
+ filters=filters,
+ fields=['leaves'])
+
+ leaves = sum(record.get("leaves") for record in leave_records)
+
+ if allocation.is_carry_forward:
+ leaves = allocation.leaves + leaves
+
+ if leaves > 0:
+ args = frappe._dict(
+ leaves=allocation.leaves * -1,
+ to_date='',
+ is_carry_forward=allocation.is_carry_forward,
+ is_expired=1,
+ from_date=allocation.to_date
+ )
+ create_leave_ledger_entry(allocation, args)
\ No newline at end of file