refactor: limit output to 50 in reconciliation tool
diff --git a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.json b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.json
index 5f6c703..b88791d 100644
--- a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.json
+++ b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.json
@@ -27,8 +27,10 @@
"bank_cash_account",
"cost_center",
"sec_break1",
+ "invoice_name",
"invoices",
"column_break_15",
+ "payment_name",
"payments",
"sec_break2",
"allocation"
@@ -137,6 +139,7 @@
"label": "Minimum Invoice Amount"
},
{
+ "default": "50",
"description": "System will fetch all the entries if limit value is zero.",
"fieldname": "invoice_limit",
"fieldtype": "Int",
@@ -167,6 +170,7 @@
"label": "Maximum Payment Amount"
},
{
+ "default": "50",
"description": "System will fetch all the entries if limit value is zero.",
"fieldname": "payment_limit",
"fieldtype": "Int",
@@ -194,13 +198,23 @@
"label": "Default Advance Account",
"mandatory_depends_on": "doc.party_type",
"options": "Account"
+ },
+ {
+ "fieldname": "invoice_name",
+ "fieldtype": "Data",
+ "label": "Filter on Invoice"
+ },
+ {
+ "fieldname": "payment_name",
+ "fieldtype": "Data",
+ "label": "Filter on Payment"
}
],
"hide_toolbar": 1,
"icon": "icon-resize-horizontal",
"issingle": 1,
"links": [],
- "modified": "2023-06-09 13:02:48.718362",
+ "modified": "2023-08-15 05:35:50.109290",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Payment Reconciliation",
diff --git a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py
index 3a9e80a..5cc159f 100644
--- a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py
+++ b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py
@@ -226,6 +226,8 @@
min_outstanding=self.minimum_invoice_amount if self.minimum_invoice_amount else None,
max_outstanding=self.maximum_invoice_amount if self.maximum_invoice_amount else None,
accounting_dimensions=self.accounting_dimension_filter_conditions,
+ limit=self.invoice_limit,
+ voucher_no=self.invoice_name,
)
cr_dr_notes = (
diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py
index bccf6f1..9d6d0f9 100644
--- a/erpnext/accounts/utils.py
+++ b/erpnext/accounts/utils.py
@@ -908,7 +908,9 @@
min_outstanding=None,
max_outstanding=None,
accounting_dimensions=None,
- vouchers=None,
+ vouchers=None, # list of dicts [{'voucher_type': '', 'voucher_no': ''}] for filtering
+ limit=None, # passed by reconciliation tool
+ voucher_no=None, # filter passed by reconciliation tool
):
ple = qb.DocType("Payment Ledger Entry")
@@ -941,6 +943,8 @@
max_outstanding=max_outstanding,
get_invoices=True,
accounting_dimensions=accounting_dimensions or [],
+ limit=limit,
+ voucher_no=voucher_no,
)
for d in invoice_list:
@@ -1678,12 +1682,13 @@
self.voucher_posting_date = []
self.min_outstanding = None
self.max_outstanding = None
+ self.limit = self.voucher_no = None
def reset(self):
# clear filters
self.vouchers.clear()
self.common_filter.clear()
- self.min_outstanding = self.max_outstanding = None
+ self.min_outstanding = self.max_outstanding = self.limit = None
# clear result
self.voucher_outstandings.clear()
@@ -1697,6 +1702,7 @@
filter_on_voucher_no = []
filter_on_against_voucher_no = []
+
if self.vouchers:
voucher_types = set([x.voucher_type for x in self.vouchers])
voucher_nos = set([x.voucher_no for x in self.vouchers])
@@ -1707,6 +1713,10 @@
filter_on_against_voucher_no.append(ple.against_voucher_type.isin(voucher_types))
filter_on_against_voucher_no.append(ple.against_voucher_no.isin(voucher_nos))
+ if self.voucher_no:
+ filter_on_voucher_no.append(ple.voucher_no.like(f"%{self.voucher_no}%"))
+ filter_on_against_voucher_no.append(ple.against_voucher_no.like(f"%{self.voucher_no}%"))
+
# build outstanding amount filter
filter_on_outstanding_amount = []
if self.min_outstanding:
@@ -1822,6 +1832,11 @@
)
)
+ if self.limit:
+ self.cte_query_voucher_amount_and_outstanding = (
+ self.cte_query_voucher_amount_and_outstanding.limit(self.limit)
+ )
+
# execute SQL
self.voucher_outstandings = self.cte_query_voucher_amount_and_outstanding.run(as_dict=True)
@@ -1835,6 +1850,8 @@
get_payments=False,
get_invoices=False,
accounting_dimensions=None,
+ limit=None,
+ voucher_no=None,
):
"""
Fetch voucher amount and outstanding amount from Payment Ledger using Database CTE
@@ -1856,6 +1873,8 @@
self.max_outstanding = max_outstanding
self.get_payments = get_payments
self.get_invoices = get_invoices
+ self.limit = limit
+ self.voucher_no = voucher_no
self.query_for_outstanding()
return self.voucher_outstandings