diff --git a/dmp-backend/core/src/main/java/eu/eudat/service/description/DescriptionServiceImpl.java b/dmp-backend/core/src/main/java/eu/eudat/service/description/DescriptionServiceImpl.java index e4e0794c1..bf7829c1b 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/service/description/DescriptionServiceImpl.java +++ b/dmp-backend/core/src/main/java/eu/eudat/service/description/DescriptionServiceImpl.java @@ -181,6 +181,7 @@ public class DescriptionServiceImpl implements DescriptionService { data.setLabel(model.getLabel()); data.setStatus(model.getStatus()); + if (model.getStatus() == DescriptionStatus.Finalized) data.setFinalizedAt(Instant.now()); data.setDescription(model.getDescription()); data.setDescriptionTemplateId(model.getDescriptionTemplateId()); data.setUpdatedAt(Instant.now()); @@ -355,6 +356,7 @@ public class DescriptionServiceImpl implements DescriptionService { } data.setStatus(model.getStatus()); + if (model.getStatus() == DescriptionStatus.Finalized) data.setFinalizedAt(Instant.now()); data.setUpdatedAt(Instant.now()); this.entityManager.merge(data); diff --git a/dmp-frontend/src/app/ui/description/editor/description-editor.component.ts b/dmp-frontend/src/app/ui/description/editor/description-editor.component.ts index 6b472b718..1033e6566 100644 --- a/dmp-frontend/src/app/ui/description/editor/description-editor.component.ts +++ b/dmp-frontend/src/app/ui/description/editor/description-editor.component.ts @@ -666,6 +666,10 @@ export class DescriptionEditorComponent extends BaseEditor x), - takeUntil(this._destroyed) - ) - .subscribe(_ => { - this.router.navigate(['descriptions/edit/' + description.id + '/finalize']); - }) + this.descriptionService.validate([description.id]).pipe(takeUntil(this._destroyed) + ).subscribe(result => { + if (result[0].result == DescriptionValidationOutput.Invalid){ + this.router.navigate(['descriptions/edit/' + description.id + '/finalize']); + }else{ + const dialogRef = this.dialog.open(ConfirmationDialogComponent, { + restoreFocus: false, + data: { + message: this.language.instant('DESCRIPTION-OVERVIEW.FINALIZE-DIALOG.TITLE'), + confirmButton: this.language.instant('DESCRIPTION-OVERVIEW.FINALIZE-DIALOG.CONFIRM'), + cancelButton: this.language.instant('DESCRIPTION-OVERVIEW.FINALIZE-DIALOG.NEGATIVE'), + isDeleteConfirmation: false + } + }); + dialogRef.afterClosed().pipe(takeUntil(this._destroyed)).subscribe(result => { + if (result) { + const descriptionStatusPersist: DescriptionStatusPersist = { + id: description.id, + status: DescriptionStatus.Finalized, + hash: description.hash + }; + this.descriptionService.persistStatus(descriptionStatusPersist).pipe(takeUntil(this._destroyed)) + .subscribe(data => { + this.reloadPage(); + this.onUpdateCallbackSuccess() + }, (error: any) => { + this.onUpdateCallbackError(error) + }); + }}); + } + }); } hasReversableStatus(description: Description): boolean { diff --git a/dmp-frontend/src/assets/i18n/en.json b/dmp-frontend/src/assets/i18n/en.json index 71ed97ea4..7c59ef515 100644 --- a/dmp-frontend/src/assets/i18n/en.json +++ b/dmp-frontend/src/assets/i18n/en.json @@ -1028,6 +1028,11 @@ "COPY": "Copy", "CANCEL": "Cancel" }, + "FINALIZE-DIALOG": { + "TITLE": "Finalize this item?", + "CONFIRM": "Confirm", + "NEGATIVE": "Cancel" + }, "UNDO-FINALIZATION-DIALOG": { "TITLE": "Undo Finalization?", "CONFIRM": "Yes",