summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--date_calculator.py31
-rw-r--r--test.py15
2 files changed, 30 insertions, 16 deletions
diff --git a/date_calculator.py b/date_calculator.py
index befccfc..fe74827 100644
--- a/date_calculator.py
+++ b/date_calculator.py
@@ -34,6 +34,27 @@ class DateCalculator:
return rounded_periods, total_months
@staticmethod
+ def merge_periods(periods):
+ if not periods:
+ return []
+
+ periods.sort()
+ merged_periods = []
+
+ current_start, current_end, current_id = periods[0]
+
+ for start, end, id in periods[1:]:
+ if start <= current_end + timedelta(days=1):
+ current_end = max(current_end, end)
+ else:
+ merged_periods.append((current_start, current_end, current_id))
+ current_start, current_end, current_id = start, end, id
+
+ merged_periods.append((current_start, current_end, current_id))
+
+ return merged_periods
+
+ @staticmethod
def adjust_periods(periods):
"""Adjust overlapping periods without merging.
- Later periods overlapping with a previous one have their start moved to the previous end + 1 day.
@@ -123,9 +144,9 @@ class DateCalculator:
considered_full_projects = self.truncate_periods(full_projects, launch_date, prediction)
considered_half_projects = self.truncate_periods(half_projects, launch_date, prediction)
- considered_full_projects_merged = self.adjust_periods(considered_full_projects)
+ considered_full_projects_merged = self.merge_periods(considered_full_projects)
considered_full_projects_rounded, months = self.round_periods(considered_full_projects_merged)
- considered_full_projects_merged2 = self.adjust_periods(considered_full_projects_rounded)
+ considered_full_projects_merged2 = self.merge_periods(considered_full_projects_rounded)
considered_full_projects_rounded2, months = self.round_periods(considered_full_projects_merged2)
non_overlapping_half_projects = []
@@ -134,12 +155,12 @@ class DateCalculator:
self.find_non_overlapping_periods(considered_full_projects_rounded2, test_interval)
)
- considered_half_projects_merged = self.adjust_periods(non_overlapping_half_projects)
+ considered_half_projects_merged = self.merge_periods(non_overlapping_half_projects)
considered_half_projects_rounded, months2 = self.round_periods(considered_half_projects_merged)
- considered_half_projects_merged2 = self.adjust_periods(considered_half_projects_rounded)
+ considered_half_projects_merged2 = self.merge_periods(considered_half_projects_rounded)
considered_half_projects_rounded2, months2 = self.round_periods(considered_half_projects_merged2)
- all_projects_merged = self.adjust_periods(
+ all_projects_merged = self.merge_periods(
considered_full_projects_rounded2 + considered_half_projects_rounded2
)
merged_event_periods = self.adjust_periods(considered_events)
diff --git a/test.py b/test.py
index 8ea458c..2bd7af3 100644
--- a/test.py
+++ b/test.py
@@ -19,13 +19,13 @@ def test_calculate_prediction():
date_calculator = DateCalculator()
calendar_manager = CalendarManager()
- prediction_controller = PredictionController(calendar_manager, date_calculator, ["Erziehungszeit 100%", "Erziehungszeit 50%", "Erziehungszeit pauschal", "Sonstige"])
+ prediction_controller = PredictionController(calendar_manager, date_calculator, ["EZ 100%", "EZ 50%", "EZ pauschal", "Sonstige"])
calendar_manager.add_entry(event1_str[0], event1_str[1], "Sonstige")
calendar_manager.add_entry(event2_str[0], event2_str[1], "Sonstige")
- calendar_manager.add_entry(project1_str[0], project1_str[1], "Erziehungszeit 100%")
- calendar_manager.add_entry(project2_str[0], project2_str[1], "Erziehungszeit 50%")
- calendar_manager.add_entry(project3_str[0], project3_str[1], "Erziehungszeit 50%")
+ calendar_manager.add_entry(project1_str[0], project1_str[1], "EZ 100%")
+ calendar_manager.add_entry(project2_str[0], project2_str[1], "EZ 50%")
+ calendar_manager.add_entry(project3_str[0], project3_str[1], "EZ 50%")
# Set launch date and duration
prediction_controller.make_prediction("2023-01-01", 2)
@@ -36,13 +36,6 @@ def test_calculate_prediction():
print(f"Predicted completion date: {prediction}")
print(calendar_manager.list_entries())
- prediction_controller.make_prediction("2023-02-01", 2)
-
- prediction = prediction_controller.get_prediction()
-
- # Output the result
- print(f"Predicted completion date: {prediction}")
- print(calendar_manager.list_entries())
# Run the test
test_calculate_prediction() \ No newline at end of file