mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-27 08:54:45 +00:00
refactor: use fetch method based on configuration
(cherry picked from commit b5bb6f3508)
This commit is contained in:
@@ -54,6 +54,9 @@ class ReceivablePayableReport:
|
|||||||
self.filters.range = "30, 60, 90, 120"
|
self.filters.range = "30, 60, 90, 120"
|
||||||
self.ranges = [num.strip() for num in self.filters.range.split(",") if num.strip().isdigit()]
|
self.ranges = [num.strip() for num in self.filters.range.split(",") if num.strip().isdigit()]
|
||||||
self.range_numbers = [num for num in range(1, len(self.ranges) + 2)]
|
self.range_numbers = [num for num in range(1, len(self.ranges) + 2)]
|
||||||
|
self.ple_fetch_method = frappe.db.get_single_value(
|
||||||
|
"Accounts Settings", "receivable_payable_fetch_method"
|
||||||
|
)
|
||||||
|
|
||||||
def run(self, args):
|
def run(self, args):
|
||||||
self.filters.update(args)
|
self.filters.update(args)
|
||||||
@@ -110,17 +113,37 @@ class ReceivablePayableReport:
|
|||||||
self.prepare_ple_query()
|
self.prepare_ple_query()
|
||||||
self.data = []
|
self.data = []
|
||||||
self.voucher_balance = OrderedDict()
|
self.voucher_balance = OrderedDict()
|
||||||
self.ple_entries = []
|
|
||||||
|
|
||||||
|
if self.ple_fetch_method == "Buffered Cursor":
|
||||||
|
self.fetch_ple_in_buffered_cursor()
|
||||||
|
elif self.ple_fetch_method == "UnBuffered Cursor":
|
||||||
|
self.fetch_ple_in_unbuffered_cursor()
|
||||||
|
|
||||||
|
self.build_data()
|
||||||
|
|
||||||
|
def fetch_ple_in_buffered_cursor(self):
|
||||||
|
self.ple_entries = frappe.db.sql(self.ple_query.get_sql(), as_dict=True)
|
||||||
|
|
||||||
|
for ple in self.ple_entries:
|
||||||
|
self.init_voucher_balance(ple) # invoiced, paid, credit_note, outstanding
|
||||||
|
|
||||||
|
# This is unavoidable. Initialization and allocation cannot happen in same loop
|
||||||
|
for ple in self.ple_entries:
|
||||||
|
self.update_voucher_balance(ple)
|
||||||
|
|
||||||
|
delattr(self, "ple_entries")
|
||||||
|
|
||||||
|
def fetch_ple_in_unbuffered_cursor(self):
|
||||||
|
self.ple_entries = []
|
||||||
with frappe.db.unbuffered_cursor():
|
with frappe.db.unbuffered_cursor():
|
||||||
for ple in frappe.db.sql(self.ple_query.get_sql(), as_dict=True, as_iterator=True):
|
for ple in frappe.db.sql(self.ple_query.get_sql(), as_dict=True, as_iterator=True):
|
||||||
self.init_voucher_balance(ple) # invoiced, paid, credit_note, outstanding
|
self.init_voucher_balance(ple) # invoiced, paid, credit_note, outstanding
|
||||||
self.ple_entries.append(ple)
|
self.ple_entries.append(ple)
|
||||||
|
|
||||||
|
# This is unavoidable. Initialization and allocation cannot happen in same loop
|
||||||
for ple in self.ple_entries:
|
for ple in self.ple_entries:
|
||||||
self.update_voucher_balance(ple)
|
self.update_voucher_balance(ple)
|
||||||
|
delattr(self, "ple_entries")
|
||||||
self.build_data()
|
|
||||||
|
|
||||||
def build_voucher_dict(self, ple):
|
def build_voucher_dict(self, ple):
|
||||||
return frappe._dict(
|
return frappe._dict(
|
||||||
|
|||||||
Reference in New Issue
Block a user