diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py b/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py index 21e0b38342aba09ff1d00990bb245fbb93b8b7ad..f4569ce40a22a15bef1212ae0b95b11c215136bd 100644 --- a/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py +++ b/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py @@ -65,8 +65,34 @@ def _get_completion_level(cycle: models.Cycle): def _get_observation_hours_per_category(cycle: models.Cycle): + # TODO: Better define system unavailability and idle values. + result = {} + result['total_duration_A'], result['total_duration_B'], result['total_duration_failed'], result['total_duration_idle'] \ + = timedelta(), timedelta(), timedelta(), timedelta() + + # Get SUBs within prio A + subs_A = models.SchedulingUnitBlueprint.objects.filter(draft__scheduling_set__project__cycles=cycle.pk).filter(priority_queue='A') + for sub in subs_A: + if sub.status == 'finished': + result['total_duration_A'] += sub.duration + if sub.status == 'cancelled': + result['total_duration_failed'] += sub.duration + result['total_duration_idle'] += sub.duration # TODO: Need to subtract other states. + # Get SUBs within prio B + subs_B = models.SchedulingUnitBlueprint.objects.filter(draft__scheduling_set__project__cycles=cycle.pk).filter(priority_queue='B') + for sub in subs_B: + if sub.status == 'finished': + result['total_duration_B'] += sub.duration + if sub.status == 'cancelled': + result['total_duration_failed'] += sub.duration + result['total_duration_idle'] += sub.duration # TODO: Need to subtract other states. + + result['total_duration_A'] = result['total_duration_A'].total_seconds() + result['total_duration_B'] = result['total_duration_B'].total_seconds() + result['total_duration_failed'] = result['total_duration_failed'].total_seconds() + result['total_duration_idle'] = result['total_duration_idle'].total_seconds() - return 0 + return result def _get_weekly_efficiency(cycle: models.Cycle):