Skip to content

Commit

Permalink
Merge pull request #2843 from AyshaHakeem/fix-leave-encashment-doc-fi…
Browse files Browse the repository at this point in the history
…lter-in-fnf

fix:  update payable leave encashment doc handling in full and final statement
  • Loading branch information
AyshaHakeem authored Mar 9, 2025
2 parents f917058 + 3589e04 commit 0dea48e
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,11 @@ frappe.ui.form.on("Full and Final Statement", {
if (frappe.meta.has_field(fnf_doc.reference_document_type, "employee")) {
filters["employee"] = frm.doc.employee;
}

if (fnf_doc.reference_document_type === "Leave Encashment") {
filters["status"] = "Unpaid";
filters["pay_via_payment_entry"] = 1;
}
});

return {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -257,14 +257,17 @@ def create_journal_entry(self):
)
return jv

def set_gratuity_status(self):
def update_reference_document_payment_status(self, payable):
doc = frappe.get_cached_doc(payable.reference_document_type, payable.reference_document)
amount = payable.amount if self.docstatus == 1 and self.status == "Paid" else 0
doc.db_set("paid_amount", amount)
doc.set_status(update=True)

def update_linked_payable_documents(self):
"""update payment status in linked payable documents"""
for payable in self.payables:
if payable.component != "Gratuity":
continue
gratuity = frappe.get_doc("Gratuity", payable.reference_document)
amount = payable.amount if self.docstatus == 1 and self.status == "Paid" else 0
gratuity.db_set("paid_amount", amount)
gratuity.set_status(update=True)
if payable.reference_document_type in ["Gratuity", "Leave Encashment"]:
self.update_reference_document_payment_status(payable)


@frappe.whitelist()
Expand Down Expand Up @@ -333,4 +336,4 @@ def update_full_and_final_statement_status(doc, method=None):
fnf = frappe.get_doc("Full and Final Statement", entry.reference_name)
fnf.db_set("status", status)
fnf.notify_update()
fnf.set_gratuity_status()
fnf.update_linked_payable_documents()
46 changes: 43 additions & 3 deletions hrms/hr/doctype/leave_encashment/test_leave_encashment.py
Original file line number Diff line number Diff line change
Expand Up @@ -347,10 +347,15 @@ def test_status_of_leave_encashment_after_payment_via_salary_slip(self):
leave_encashment.reload()
self.assertEqual(leave_encashment.status, "Unpaid")

def test_status_of_leave_encashment_after_payment_via_payment_entry(self):
def test_status_of_leave_encashment_after_payment_via_payment_entry_and_fnf(self):
from hrms.hr.doctype.full_and_final_statement.test_full_and_final_statement import (
create_full_and_final_statement,
)
from hrms.overrides.employee_payment_entry import get_payment_entry_for_employee

leave_encashment = self.create_test_leave_encashment(pay_via_payment_entry=1)
leave_encashment = self.create_test_leave_encashment(
pay_via_payment_entry=1, payable_account="Payroll Payable - _TC"
)
leave_encashment.submit()

pe = get_payment_entry_for_employee(leave_encashment.doctype, leave_encashment.name)
Expand All @@ -360,9 +365,44 @@ def test_status_of_leave_encashment_after_payment_via_payment_entry(self):
pe.submit()

leave_encashment.reload()
self.assertEqual(leave_encashment.status, "Paid")

pe.cancel()
leave_encashment.reload()
self.assertEqual(leave_encashment.status, "Unpaid")

frappe.db.set_value("Employee", self.employee, "relieving_date", getdate())

fnf = create_full_and_final_statement(self.employee)
fnf.payables = []
fnf.receivables = []
fnf.append(
"payables",
{
"component": "Leave Encashment",
"reference_document_type": "Leave Encashment",
"reference_document": leave_encashment.name,
"amount": leave_encashment.encashment_amount,
"account": leave_encashment.payable_account,
"status": "Settled",
},
)
fnf.submit()

jv = fnf.create_journal_entry()
jv.accounts[1].account = frappe.get_cached_value("Company", "_Test Company", "default_bank_account")
jv.cheque_no = "123456"
jv.cheque_date = getdate()
jv.save()
jv.submit()

leave_encashment.reload()
self.assertEqual(leave_encashment.status, "Paid")

jv.cancel()
leave_encashment.reload()
self.assertEqual(leave_encashment.status, "Unpaid")

def create_test_leave_encashment(self, **kwargs):
"""Helper method to create leave encashment with default values"""
args = {
Expand All @@ -387,7 +427,7 @@ def create_leave_encashment(**args):
leave_encashment.leave_period = args.leave_period
leave_encashment.encashment_date = args.encashment_date or getdate()
leave_encashment.currency = args.currency or frappe.get_cached_value(
"Company", "_Test Company", "default_payable_account"
"Company", "_Test Company", "default_currency"
)
leave_encashment.pay_via_payment_entry = args.pay_via_payment_entry or 0
if leave_encashment.pay_via_payment_entry:
Expand Down

0 comments on commit 0dea48e

Please sign in to comment.