refactor: support for BFS and DFS
This commit is contained in:
parent
26503a205f
commit
03a38ed025
@ -10,10 +10,8 @@
|
|||||||
"from_date",
|
"from_date",
|
||||||
"column_break_qxbi",
|
"column_break_qxbi",
|
||||||
"to_date",
|
"to_date",
|
||||||
"section_break_3x70",
|
"column_break_iwny",
|
||||||
"period_from",
|
"algorithm"
|
||||||
"column_break_5ett",
|
|
||||||
"period_to"
|
|
||||||
],
|
],
|
||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
@ -31,29 +29,22 @@
|
|||||||
"label": "To Date"
|
"label": "To Date"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "section_break_3x70",
|
"default": "BFS",
|
||||||
"fieldtype": "Section Break"
|
"fieldname": "algorithm",
|
||||||
|
"fieldtype": "Select",
|
||||||
|
"label": "Algorithm",
|
||||||
|
"options": "BFS\nDFS"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "period_from",
|
"fieldname": "column_break_iwny",
|
||||||
"fieldtype": "Date",
|
|
||||||
"label": "Period From"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "column_break_5ett",
|
|
||||||
"fieldtype": "Column Break"
|
"fieldtype": "Column Break"
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "period_to",
|
|
||||||
"fieldtype": "Date",
|
|
||||||
"label": "Period To"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"hide_toolbar": 1,
|
"hide_toolbar": 1,
|
||||||
"index_web_pages_for_search": 1,
|
"index_web_pages_for_search": 1,
|
||||||
"issingle": 1,
|
"issingle": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2023-09-16 08:02:33.472406",
|
"modified": "2023-09-25 10:50:53.887235",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "Bisect Accounting Statements",
|
"name": "Bisect Accounting Statements",
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
# Copyright (c) 2023, Frappe Technologies Pvt. Ltd. and contributors
|
# Copyright (c) 2023, Frappe Technologies Pvt. Ltd. and contributors
|
||||||
# For license information, please see license.txt
|
# For license information, please see license.txt
|
||||||
|
|
||||||
|
from collections import deque
|
||||||
from math import floor
|
from math import floor
|
||||||
|
|
||||||
import frappe
|
import frappe
|
||||||
@ -10,18 +11,49 @@ from frappe.utils import getdate
|
|||||||
|
|
||||||
|
|
||||||
class BisectAccountingStatements(Document):
|
class BisectAccountingStatements(Document):
|
||||||
@frappe.whitelist()
|
def bfs(self):
|
||||||
def bisect(self):
|
period_list = deque([(getdate(self.from_date), getdate(self.to_date))])
|
||||||
period_list = [(getdate(self.from_date), getdate(self.to_date))]
|
periods = []
|
||||||
dates = []
|
dates = []
|
||||||
|
while period_list:
|
||||||
|
cur_frm_date, cur_to_date = period_list.popleft()
|
||||||
|
delta = cur_to_date - cur_frm_date
|
||||||
|
periods.append((cur_frm_date, cur_to_date, delta))
|
||||||
|
if delta.days == 0:
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
cur_floor = floor(delta.days / 2)
|
||||||
|
left = (cur_frm_date, (cur_frm_date + relativedelta(days=+cur_floor)))
|
||||||
|
right = ((cur_frm_date + relativedelta(days=+(cur_floor + 1))), cur_to_date)
|
||||||
|
period_list.append(left)
|
||||||
|
period_list.append(right)
|
||||||
|
return periods
|
||||||
|
|
||||||
|
def dfs(self):
|
||||||
|
period_list = [(getdate(self.from_date), getdate(self.to_date))]
|
||||||
|
periods = []
|
||||||
while period_list:
|
while period_list:
|
||||||
cur_frm_date, cur_to_date = period_list.pop()
|
cur_frm_date, cur_to_date = period_list.pop()
|
||||||
delta = cur_to_date - cur_frm_date
|
delta = cur_to_date - cur_frm_date
|
||||||
if not delta.days > 0:
|
periods.append((cur_frm_date, cur_to_date, delta))
|
||||||
|
if delta.days == 0:
|
||||||
continue
|
continue
|
||||||
|
else:
|
||||||
|
cur_floor = floor(delta.days / 2)
|
||||||
|
left = (cur_frm_date, (cur_frm_date + relativedelta(days=+cur_floor)))
|
||||||
|
right = ((cur_frm_date + relativedelta(days=+(cur_floor + 1))), cur_to_date)
|
||||||
|
period_list.append(left)
|
||||||
|
period_list.append(right)
|
||||||
|
return periods
|
||||||
|
|
||||||
cur_floor = floor(delta.days / 2)
|
@frappe.whitelist()
|
||||||
left = (cur_frm_date, (cur_frm_date + relativedelta(days=+cur_floor)))
|
def bisect(self):
|
||||||
right = ((cur_frm_date + relativedelta(days=+(cur_floor + 1))), cur_to_date)
|
if self.algorithm == "BFS":
|
||||||
period_list.append(left)
|
periods = self.bfs()
|
||||||
period_list.append(right)
|
|
||||||
|
if self.algorithm == "DFS":
|
||||||
|
periods = self.dfs()
|
||||||
|
|
||||||
|
print("Periods: ", len(periods))
|
||||||
|
for x in periods:
|
||||||
|
print(x)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user