refactor: Depth First Search(DFS)
diff --git a/erpnext/accounts/doctype/bisect_accounting_statements/bisect_accounting_statements.py b/erpnext/accounts/doctype/bisect_accounting_statements/bisect_accounting_statements.py
index 2e209d2..6be28c8 100644
--- a/erpnext/accounts/doctype/bisect_accounting_statements/bisect_accounting_statements.py
+++ b/erpnext/accounts/doctype/bisect_accounting_statements/bisect_accounting_statements.py
@@ -1,7 +1,7 @@
# Copyright (c) 2023, Frappe Technologies Pvt. Ltd. and contributors
# For license information, please see license.txt
-from math import ceil, floor
+from math import floor
import frappe
from dateutil.relativedelta import relativedelta
@@ -12,11 +12,18 @@
class BisectAccountingStatements(Document):
@frappe.whitelist()
def bisect(self):
- cur_frm_date, cur_to_date = getdate(self.from_date), getdate(self.to_date)
- while True:
+ period_list = [(getdate(self.from_date), getdate(self.to_date))]
+ dates = []
+ while period_list:
+ cur_frm_date, cur_to_date = period_list.pop()
delta = cur_to_date - cur_frm_date
- if delta.days == 0:
- return
+ if not delta.days > 0:
+ continue
+
cur_floor = floor(delta.days / 2)
- cur_to_date = cur_frm_date + relativedelta(days=+cur_floor)
- print((cur_frm_date, cur_to_date), delta, cur_floor)
+ next_to_date = cur_frm_date + relativedelta(days=+cur_floor)
+ left = (cur_frm_date, next_to_date)
+ period_list.append(left)
+ next_frm_date = cur_frm_date + relativedelta(days=+(cur_floor + 1))
+ right = (next_frm_date, cur_to_date)
+ period_list.append(right)