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{{ enumUtils.toDmpUserRoleString(dmpUser.role) }}
-
+
diff --git a/dmp-frontend/src/app/ui/description/overview/description-overview.component.ts b/dmp-frontend/src/app/ui/description/overview/description-overview.component.ts
index 3ec175447..239d35471 100644
--- a/dmp-frontend/src/app/ui/description/overview/description-overview.component.ts
+++ b/dmp-frontend/src/app/ui/description/overview/description-overview.component.ts
@@ -34,6 +34,7 @@ import { nameof } from 'ts-simple-nameof';
import { DescriptionCopyDialogComponent } from '../description-copy-dialog/description-copy-dialog.component';
import { ReferenceType } from '@app/core/model/reference-type/reference-type';
import { AppPermission } from '@app/core/common/enum/permission.enum';
+import { DescriptionValidationOutput } from '@app/ui/dmp/dmp-finalize-dialog/dmp-finalize-dialog.component';
@Component({
@@ -391,22 +392,37 @@ export class DescriptionOverviewComponent extends BaseComponent implements OnIni
finalize(description: Description) {
- this.dialog.open(ConfirmationDialogComponent, {
- data: {
- message: this.language.instant('DESCRIPTION-OVERVIEW.FINALISE-POPUP.MESSAGE'),
- confirmButton: this.language.instant('DESCRIPTION-OVERVIEW.FINALISE-POPUP.CONFIRM'),
- cancelButton: this.language.instant('DESCRIPTION-OVERVIEW.FINALISE-POPUP.CANCEL'),
- },
- maxWidth: '30em'
- })
- .afterClosed()
- .pipe(
- filter(x => 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",