diff --git a/SAS/TMSS/src/tmss/tmssapp/serializers/specification.py b/SAS/TMSS/src/tmss/tmssapp/serializers/specification.py index 9cfe925f96aec9c94715c33c6637499433f1bc38..b405a91060cdf1c66cbf96ad1652bdd7b4bb1126 100644 --- a/SAS/TMSS/src/tmss/tmssapp/serializers/specification.py +++ b/SAS/TMSS/src/tmss/tmssapp/serializers/specification.py @@ -313,7 +313,9 @@ class SchedulingUnitBlueprintSerializer(RelationalHyperlinkedModelSerializer): class SchedulingUnitBlueprintCopyToSchedulingUnitDraftSerializer(SchedulingUnitBlueprintSerializer): class Meta(SchedulingUnitDraftSerializer.Meta): - fields = '__all__' + fields = ['copy_reason'] + extra_fields =['scheduling_set_id'] + read_only_fields = ['scheduling_unit_blueprints','task_drafts'] diff --git a/SAS/TMSS/src/tmss/tmssapp/tasks.py b/SAS/TMSS/src/tmss/tmssapp/tasks.py index 1d00aa6fd036edbfb92804c29cda7e775b748384..142ba097c464ad3268647f00b86a47754bb9365d 100644 --- a/SAS/TMSS/src/tmss/tmssapp/tasks.py +++ b/SAS/TMSS/src/tmss/tmssapp/tasks.py @@ -59,25 +59,15 @@ def copy_scheduling_unit_draft(scheduling_unit_draft: models.SchedulingUnitDraft return scheduling_unit_draft_copy -def create_scheduling_unit_draft_from_scheduling_unit_blueprint(scheduling_unit_blueprint: models.SchedulingUnitBlueprint) -> models.SchedulingUnitDraft: +def create_scheduling_unit_draft_from_scheduling_unit_blueprint(scheduling_unit_blueprint: models.SchedulingUnitBlueprint, copy_reason: str) -> models.SchedulingUnitDraft: """ - Create a SchedulingUnitDraft from the SchedulingUnitBlueprint + Create a copy of the SchedulingUnitDraft of the selected SchedulingUnitBlueprint :raises Exception if instantiate fails. """ logger.debug("create_scheduling_unit_draft_from_scheduling_unit_blueprint(scheduling_unit_blueprint.id=%s)", scheduling_unit_blueprint.pk) original_scheduling_unit_draft = scheduling_unit_blueprint.draft - - # TODO: fix the copy reason - scheduling_unit_draft = SchedulingUnitDraft.objects.create( - name="%s (Copied from SchedulingUnitBlueprint)" % (scheduling_unit_blueprint.name,), - description="%s (Copied from %s SchedulingUnitBlueprint)" % (scheduling_unit_blueprint.description or "<no description>",scheduling_unit_blueprint.name,), - requirements_doc=scheduling_unit_blueprint.requirements_doc, - copies=original_scheduling_unit_draft, - copy_reason=original_scheduling_unit_draft.copy_reason, - generator_instance_doc=original_scheduling_unit_draft.generator_instance_doc, - scheduling_set=original_scheduling_unit_draft.scheduling_set, - requirements_template=scheduling_unit_blueprint.requirements_template) + scheduling_unit_draft = copy_scheduling_unit_draft(original_scheduling_unit_draft,original_scheduling_unit_draft.scheduling_set,copy_reason) logger.info("create_scheduling_unit_draft_from_scheduling_unit_blueprint(scheduling_unit_blueprint.id=%s) created scheduling_unit_draft id=%s", scheduling_unit_blueprint.pk, scheduling_unit_draft.pk) return scheduling_unit_draft diff --git a/SAS/TMSS/src/tmss/tmssapp/viewsets/specification.py b/SAS/TMSS/src/tmss/tmssapp/viewsets/specification.py index da1706cc36594aac847121082c3c5f4ac18de680..5644cfeb2eb3b9174aa417695a8b60913a03f809 100644 --- a/SAS/TMSS/src/tmss/tmssapp/viewsets/specification.py +++ b/SAS/TMSS/src/tmss/tmssapp/viewsets/specification.py @@ -482,11 +482,29 @@ class SchedulingUnitDraftCopyFromSchedulingSetViewSet(LOFARCopyViewSet): class SchedulingUnitBlueprintCopyToSchedulingUnitDraftViewSet(LOFARCopyViewSet): queryset = models.SchedulingUnitBlueprint.objects.all() serializer_class = serializers.SchedulingUnitBlueprintCopyToSchedulingUnitDraftSerializer - + + @swagger_auto_schema(responses={201: "The copy of the SchedulingUnitDraft", + 403: 'forbidden'}, + operation_description="Create a copy of the SchedulingUnitDraft of the selected SchedulingUnitBlueprint") def create(self, request, *args, **kwargs): + if 'scheduling_unit_blueprint_id' in kwargs: scheduling_unit_blueprint = get_object_or_404(models.SchedulingUnitBlueprint, pk=kwargs['scheduling_unit_blueprint_id']) - scheduling_unit_draft = create_scheduling_unit_draft_from_scheduling_unit_blueprint(scheduling_unit_blueprint) + + body_unicode = request.body.decode('utf-8') + body_data = json.loads(body_unicode) + + + copy_reason = body_data.get('copy_reason', None) + + try: + copy_reason_obj = models.CopyReason.objects.get(value=copy_reason) + except ObjectDoesNotExist: + logger.info("CopyReason matching query does not exist.") + #if a non valid copy_reason is specified, set copy_reason to None + copy_reason = None + + scheduling_unit_draft = create_scheduling_unit_draft_from_scheduling_unit_blueprint(scheduling_unit_blueprint,copy_reason) # return a response with the new serialized scheduling_unit_blueprint (with references to the created task_blueprint(s) and (scheduled) subtasks) return Response(serializers.SchedulingUnitDraftSerializer(scheduling_unit_draft, context={'request':request}).data,