From 5a25c80f2eb434313b65b1b3b08bd0ea5e393461 Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Mon, 25 Sep 2023 10:35:54 +0530 Subject: [PATCH] refactor: Depth First Search(DFS) --- .../bisect_accounting_statements.py | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) 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 2e209d2a63..6be28c87bc 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 @@ from frappe.utils import getdate 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)