From 1ff9a2d4d5b0ed9d1dc77b6bda74c2cb3e2a8eeb Mon Sep 17 00:00:00 2001 From: oriondigitaltz Date: Fri, 12 Jun 2026 11:24:31 +0300 Subject: [PATCH] fix: error handling for missing fee components and sales invoice income account --- edu_tz/edu_tz/api/payment.py | 14 +++++++++++++- edu_tz/edu_tz/api/sales_invoice.py | 8 ++++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/edu_tz/edu_tz/api/payment.py b/edu_tz/edu_tz/api/payment.py index 9881a44..b189b95 100644 --- a/edu_tz/edu_tz/api/payment.py +++ b/edu_tz/edu_tz/api/payment.py @@ -2,6 +2,7 @@ import frappe from frappe import _ from frappe.utils import getdate +from erpnext.accounts.utils import update_voucher_outstanding def on_submit(doc, method): @@ -15,6 +16,8 @@ def create_sales_invoice(doc): and doc.references[0].reference_doctype == "Fees" ): fees_doc = frappe.get_doc("Fees", doc.references[0].reference_name) + if not fees_doc.components: + frappe.throw(_("Fees document {0} has no fee components").format(fees_doc.name)) item_name = fees_doc.components[0].fees_category income_account = fees_doc.sales_invoice_income_account customer = frappe.get_value("Student", doc.party, "customer") @@ -51,7 +54,16 @@ def create_sales_invoice(doc): frappe.flags.ignore_account_permission = True sales_invoice.set_missing_values() sales_invoice.save(ignore_permissions=True) + + update_voucher_outstanding( + "Fees", + fees_doc.name, + fees_doc.receivable_account, + "Student", + fees_doc.student, + ) + frappe.msgprint( _("Draft Sales Invoice created {0}").format(sales_invoice.name), alert=True ) - return sales_invoice.name + return sales_invoice.name \ No newline at end of file diff --git a/edu_tz/edu_tz/api/sales_invoice.py b/edu_tz/edu_tz/api/sales_invoice.py index 82ddb80..90e6805 100644 --- a/edu_tz/edu_tz/api/sales_invoice.py +++ b/edu_tz/edu_tz/api/sales_invoice.py @@ -15,6 +15,10 @@ def create_journal_entry(doc): return amount = doc.base_net_total debit_account = frappe.get_value("Fees", doc.fees, "sales_invoice_income_account") + if not debit_account: + frappe.throw( + _("Please set Sales Invoice Income Account on Fees document {0}").format(doc.fees) + ) party_account = get_party_account("Customer", doc.customer, doc.company) jl_rows = [] @@ -27,7 +31,7 @@ def create_journal_entry(doc): jl_rows.append(debit_row) credit_row = dict( - party_type="customer", + party_type="Customer", party=doc.customer, account=party_account, credit_in_account_currency=flt(amount, doc.precision("base_net_total")), @@ -60,4 +64,4 @@ def create_journal_entry(doc): jv_url, jv_doc.name ) frappe.msgprint(si_msgprint) - return jv_doc.name + return jv_doc.name \ No newline at end of file