From 39654f7140ebfeafc2473ceb7e4739ed6d03fc1c Mon Sep 17 00:00:00 2001 From: matin Date: Fri, 12 Sep 2025 13:09:45 +0200 Subject: partieller rueckwechsel zu merge --- date_calculator.py | 31 ++++++++++++++++++++++++++----- test.py | 15 ++++----------- 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 -- cgit v1.1