diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/models/specification.py b/SAS/TMSS/backend/src/tmss/tmssapp/models/specification.py index 1d2d09b011ba812ccda109acc442a57ab16e28dc..47ab3ea87a3770eb9791360d081799be444a79b5 100644 --- a/SAS/TMSS/backend/src/tmss/tmssapp/models/specification.py +++ b/SAS/TMSS/backend/src/tmss/tmssapp/models/specification.py @@ -1004,6 +1004,16 @@ class TaskDraft(NamedCommon, TemplateSchemaMixin, ProjectPropertyMixin): class TaskBlueprint(ProjectPropertyMixin, TemplateSchemaMixin, NamedCommon): + class Status(Enum): + DEFINED = "defined" + FINISHED = "finished" + CANCELLED = "cancelled" + ERROR = "error" + OBSOLETE = "obsolete" + OBSERVED = "observed" + STARTED = "started" + SCHEDULED = "scheduled" + SCHEDULABLE = "schedulable" specifications_doc = JSONField(help_text='Schedulings for this task (IMMUTABLE).') specifications_template = ForeignKey('TaskTemplate', on_delete=CASCADE, help_text='Schema used for specifications_doc (IMMUTABLE).') @@ -1124,35 +1134,35 @@ class TaskBlueprint(ProjectPropertyMixin, TemplateSchemaMixin, NamedCommon): # simple python filtering counting by state and type. Saves many round-trip-db calls! nr_of_subtasks = len(subtasks) if nr_of_subtasks == 0: - return "defined" + return TaskBlueprint.Status.DEFINED.value if any(s for s in subtasks if s['state'] == 'defining'): - return "defined" + return TaskBlueprint.Status.DEFINED.value if len([s for s in subtasks if s['state'] == 'finished']) == nr_of_subtasks: - return "finished" + return TaskBlueprint.Status.FINISHED.value if any(s for s in subtasks if s['state'] in ('cancelling', 'cancelled')): - return "cancelled" + return TaskBlueprint.Status.CANCELLED.value if any(s for s in subtasks if s['state'] == 'error'): - return "error" + return TaskBlueprint.Status.ERROR.value # TODO: in TMSS-850 implement the various conditional aggregations for the 'obsolete' vs 'finished' states if any(s for s in subtasks if s['state'] == 'obsolete'): - return "obsolete" + return TaskBlueprint.Status.OBSOLETE.value observations = [s for s in subtasks if s['specifications_template__type_id'] == 'observation'] if observations and all(obs and obs['state'] in ('finishing', 'finished') for obs in observations): - return "observed" + return TaskBlueprint.Status.OBSERVED.value if any(s for s in subtasks if s['state'] in ('starting','started','queueing','queued','finishing','finished')): - return "started" + return TaskBlueprint.Status.STARTED.value if any(s for s in subtasks if s['state'] == 'scheduled'): - return "scheduled" + return TaskBlueprint.Status.SCHEDULED.value - return "schedulable" + return TaskBlueprint.Status.SCHEDULABLE.value class TaskRelationDraft(BasicCommon, TemplateSchemaMixin, ProjectPropertyMixin): diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/specification.py b/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/specification.py index f67538ea4c7dcd16b9514288b3cd3af994e22c2f..9b2b9b82f44fdbf21d0581448e07d873300a4f40 100644 --- a/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/specification.py +++ b/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/specification.py @@ -1279,7 +1279,7 @@ class TaskBlueprintPropertyFilter(property_filters.PropertyFilterSet): relative_stop_time_max = property_filters.PropertyDurationFilter(field_name='relative_stop_time', lookup_expr='lte') start_time = property_filters.PropertyIsoDateTimeFromToRangeFilter(field_name='start_time') stop_time = property_filters.PropertyIsoDateTimeFromToRangeFilter(field_name='stop_time') - status = property_filters.PropertyMultipleChoiceFilter(field_name='status', choices=tuple((i.value, i.value) for i in models.SubtaskState.Choices), lookup_expr='iexact') + status = property_filters.PropertyMultipleChoiceFilter(field_name='status', choices=tuple((i.value, i.value) for i in models.TaskBlueprint.Status), lookup_expr='iexact') subtasks = filters.ModelMultipleChoiceFilter(field_name='subtasks', queryset=models.Subtask.objects.all()) subtasks_min = filters.NumberFilter(field_name='subtasks__id', lookup_expr='gte') subtasks_max = filters.NumberFilter(field_name='subtasks__id', lookup_expr='lte')