diff --git a/dmp-backend/core/src/main/java/eu/eudat/errorcode/ErrorThesaurusProperties.java b/dmp-backend/core/src/main/java/eu/eudat/errorcode/ErrorThesaurusProperties.java index ef748e124..e2aaac143 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/errorcode/ErrorThesaurusProperties.java +++ b/dmp-backend/core/src/main/java/eu/eudat/errorcode/ErrorThesaurusProperties.java @@ -134,4 +134,14 @@ public class ErrorThesaurusProperties { public void setDmpBlueprintHasNoDescriptionTemplates(ErrorDescription dmpBlueprintHasNoDescriptionTemplates) { this.dmpBlueprintHasNoDescriptionTemplates = dmpBlueprintHasNoDescriptionTemplates; } + + private ErrorDescription dmpDescriptionTemplateCanNotRemove; + + public ErrorDescription getDmpDescriptionTemplateCanNotRemove() { + return dmpDescriptionTemplateCanNotRemove; + } + + public void setDmpDescriptionTemplateCanNotRemove(ErrorDescription dmpDescriptionTemplateCanNotRemove) { + this.dmpDescriptionTemplateCanNotRemove = dmpDescriptionTemplateCanNotRemove; + } } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/censorship/descriptionreference/DescriptionReferenceDataCensor.java b/dmp-backend/core/src/main/java/eu/eudat/model/censorship/descriptionreference/DescriptionReferenceDataCensor.java index 74f530dc7..20d8040c5 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/censorship/descriptionreference/DescriptionReferenceDataCensor.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/censorship/descriptionreference/DescriptionReferenceDataCensor.java @@ -36,7 +36,7 @@ public class DescriptionReferenceDataCensor extends BaseCensor { if (fields == null || fields.isEmpty()) return; - this.authService.authorizeForce(Permission.BrowseDescriptionReference); + this.authService.authorizeForce(Permission.BrowseDescriptionReference, Permission.DeferredAffiliation); } } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/DescriptionPersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/DescriptionPersist.java index 2544abf19..b593565b4 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/DescriptionPersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/DescriptionPersist.java @@ -203,12 +203,12 @@ public class DescriptionPersist { this.spec() .iff(() -> item.getStatus() == DescriptionStatus.Finalized) .must(() -> !this.isNull(item.getProperties())) - .failOn(DescriptionPersist._properties).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionPersist._properties}, LocaleContextHolder.getLocale())), - this.refSpec() - .iff(() -> !this.isNull(item.getProperties())) - .on(DescriptionPersist._properties) - .over(item.getProperties()) - .using(() -> this.validatorFactory.validator(PropertyDefinitionPersist.PropertyDefinitionPersistValidator.class).setStatus(item.getStatus()).withDefinition(definition)) + .failOn(DescriptionPersist._properties).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionPersist._properties}, LocaleContextHolder.getLocale())) +// this.refSpec() +// .iff(() -> !this.isNull(item.getProperties())) +// .on(DescriptionPersist._properties) +// .over(item.getProperties()) +// .using(() -> this.validatorFactory.validator(PropertyDefinitionPersist.PropertyDefinitionPersistValidator.class).setStatus(item.getStatus()).withDefinition(definition)) // this.navSpec() // .iff(() -> !this.isNull(item.getTags())) // .on(DescriptionPersist._tags) diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptionproperties/FieldPersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptionproperties/FieldPersist.java index 73e15e14f..2b62e30af 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptionproperties/FieldPersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptionproperties/FieldPersist.java @@ -32,6 +32,9 @@ public class FieldPersist { private List references; public static final String _references = "references"; + private ReferencePersist reference; + public static final String _reference = "reference"; + private ExternalIdentifierPersist externalIdentifier; public static final String _externalIdentifier = "externalIdentifier"; @@ -67,6 +70,14 @@ public class FieldPersist { this.references = references; } + public ReferencePersist getReference() { + return reference; + } + + public void setReference(ReferencePersist reference) { + this.reference = reference; + } + public ExternalIdentifierPersist getExternalIdentifier() { return externalIdentifier; } @@ -138,6 +149,11 @@ public class FieldPersist { .on(FieldPersist._references) .over(item.getReferences()) .using((itm) -> this.validatorFactory.validator(ReferencePersist.ReferencePersistValidator.class)), + this.refSpec() + .iff(() -> FieldType.isReferenceType(fieldType) && !this.isNull(item.getReference())) + .on(FieldPersist._reference) + .over(item.getReference()) + .using(() -> this.validatorFactory.validator(ReferencePersist.ReferencePersistValidator.class)), this.refSpec() .iff(() -> FieldType.isExternalIdentifierType(fieldType) && !this.isNull(item.getExternalIdentifier())) .on(FieldPersist._externalIdentifier) diff --git a/dmp-backend/core/src/main/java/eu/eudat/query/DescriptionReferenceQuery.java b/dmp-backend/core/src/main/java/eu/eudat/query/DescriptionReferenceQuery.java index 96be0d389..7f827698b 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/query/DescriptionReferenceQuery.java +++ b/dmp-backend/core/src/main/java/eu/eudat/query/DescriptionReferenceQuery.java @@ -218,6 +218,7 @@ public class DescriptionReferenceQuery extends QueryBase descriptionReferencePersists = new ArrayList<>(); if (persist.getFieldSets() != null && !persist.getFieldSets().isEmpty()){ for (PropertyDefinitionFieldSetPersist propertyDefinitionFieldSetPersist: persist.getFieldSets().values()) { - if (this.conventionService.isListNullOrEmpty( propertyDefinitionFieldSetPersist.getItems())) { + if (!this.conventionService.isListNullOrEmpty( propertyDefinitionFieldSetPersist.getItems())) { for (PropertyDefinitionFieldSetItemPersist definitionFieldSetItemPersist : propertyDefinitionFieldSetPersist.getItems()) { if (definitionFieldSetItemPersist.getFields() != null && !definitionFieldSetItemPersist.getFields().isEmpty()) { for (String key : definitionFieldSetItemPersist.getFields().keySet()) { @@ -518,7 +518,8 @@ public class DescriptionServiceImpl implements DescriptionService { } private void BuildDescriptionReferencePersist(String fieldId, FieldPersist fieldPersist, List descriptionReferencePersists) { - if (this.conventionService.isListNullOrEmpty(fieldPersist.getReferences())) { + if (fieldPersist.getReference() != null) fieldPersist.getReferences().add(fieldPersist.getReference()); + if (!this.conventionService.isListNullOrEmpty(fieldPersist.getReferences())) { for (ReferencePersist referencePersist : fieldPersist.getReferences()) { DescriptionReferencePersist descriptionReferencePersist = new DescriptionReferencePersist(); descriptionReferencePersist.setData(new DescriptionReferenceDataPersist()); diff --git a/dmp-backend/core/src/main/java/eu/eudat/service/dmp/DmpServiceImpl.java b/dmp-backend/core/src/main/java/eu/eudat/service/dmp/DmpServiceImpl.java index 0010c044b..b337dea69 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/service/dmp/DmpServiceImpl.java +++ b/dmp-backend/core/src/main/java/eu/eudat/service/dmp/DmpServiceImpl.java @@ -188,6 +188,8 @@ public class DmpServiceImpl implements DmpService { this.patchAndSaveReferences(this.buildDmpReferencePersists(model.getProperties()), data.getId(), definition); + if (isUpdate) this.checkIfDescriptionTemplateIsUse(model.getDescriptionTemplates(), model.getId()); + this.patchAndSaveTemplates(data.getId(), model.getDescriptionTemplates()); if (!isUpdate && userScope.isSet()) { @@ -210,6 +212,17 @@ public class DmpServiceImpl implements DmpService { return this.builderFactory.builder(DmpBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermission).build(BaseFieldSet.build(fields, Dmp._id, Dmp._hash), data); } + private void checkIfDescriptionTemplateIsUse (List descriptionTemplates, UUID id){ + List existingDmpDescriptionTemplates = this.queryFactory.query(DmpDescriptionTemplateQuery.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermission).dmpIds(id).isActive(IsActive.Active).collect(); + + List removedDescriptionTemplates = existingDmpDescriptionTemplates.stream().filter(x -> descriptionTemplates.stream().noneMatch(y -> y.getDescriptionTemplateGroupId().equals(x.getDescriptionTemplateGroupId()))).collect(Collectors.toList()); + DmpDescriptionTemplateQuery dmpDescriptionTemplateQuery = this.queryFactory.query(DmpDescriptionTemplateQuery.class).isActive(IsActive.Active).dmpIds(id).descriptionTemplateGroupIds(removedDescriptionTemplates.stream().map(x -> x.getDescriptionTemplateGroupId()).collect(Collectors.toList())); + DescriptionQuery query = this.queryFactory.query(DescriptionQuery.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermission).dmpDescriptionTemplateSubQuery(dmpDescriptionTemplateQuery).isActive(IsActive.Active); + + if (query != null && query.count() > 0) throw new MyValidationException(this.errors.getDmpDescriptionTemplateCanNotRemove().getCode(), this.errors.getDmpDescriptionTemplateCanNotRemove().getMessage()); + + } + private DmpUserPersist createOwnerPersist() { DmpUserPersist persist = new DmpUserPersist(); persist.setRole(DmpUserRole.Owner); diff --git a/dmp-backend/core/src/main/java/eu/eudat/service/visibility/Field.java b/dmp-backend/core/src/main/java/eu/eudat/service/visibility/Field.java index 7323650cb..5a3697550 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/service/visibility/Field.java +++ b/dmp-backend/core/src/main/java/eu/eudat/service/visibility/Field.java @@ -43,6 +43,7 @@ public class Field { tempTextListValue = persist.getTextListValue(); if (persist.getExternalIdentifier() != null) this.externalIdentifier = new ExternalIdentifier(persist.getExternalIdentifier()); else this.externalIdentifier = null; + if (persist.getReference() != null) persist.getReferences().add(persist.getReference()); if (persist.getReferences() != null && !persist.getReferences().isEmpty()){ tempTextListValue = persist.getReferences().stream().filter(x-> x.getId() != null).map(x-> x.getId().toString()).toList(); } diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/LockController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/LockController.java index 76f1d02b3..f8818d5c3 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/LockController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/LockController.java @@ -214,7 +214,7 @@ public class LockController { @DeleteMapping("{id}/{target}") @Transactional - public void delete(@PathVariable("id") UUID id, @PathVariable("id") UUID target) throws MyForbiddenException, InvalidApplicationException { + public void delete(@PathVariable("id") UUID id, @PathVariable("target") UUID target) throws MyForbiddenException, InvalidApplicationException { logger.debug(new MapLogEntry("retrieving" + Lock.class.getSimpleName()).And("id", id)); this.lockService.deleteAndSave(id, target); diff --git a/dmp-backend/web/src/main/resources/config/errors.yml b/dmp-backend/web/src/main/resources/config/errors.yml index 2e22ab92d..4c704db53 100644 --- a/dmp-backend/web/src/main/resources/config/errors.yml +++ b/dmp-backend/web/src/main/resources/config/errors.yml @@ -53,3 +53,6 @@ error-thesaurus: dmp-blueprint-new-version-conflict: code: 121 message: version to update not the latest + dmp-description-template-can-not-remove: + code: 122 + message: Can not remove description template that is already in use. diff --git a/dmp-frontend/src/app/core/services/lock/lock.service.ts b/dmp-frontend/src/app/core/services/lock/lock.service.ts index e237eb337..79885b2ae 100644 --- a/dmp-frontend/src/app/core/services/lock/lock.service.ts +++ b/dmp-frontend/src/app/core/services/lock/lock.service.ts @@ -43,8 +43,8 @@ export class LockService { catchError((error: any) => throwError(error))); } - delete(id: Guid): Observable { - const url = `${this.apiBase}/${id}`; + delete(id: Guid, target: Guid): Observable { + const url = `${this.apiBase}/${id}/${target}`; return this.http .delete(url).pipe( diff --git a/dmp-frontend/src/app/core/services/reference/reference.service.ts b/dmp-frontend/src/app/core/services/reference/reference.service.ts index fde3936a5..2cc3b9735 100644 --- a/dmp-frontend/src/app/core/services/reference/reference.service.ts +++ b/dmp-frontend/src/app/core/services/reference/reference.service.ts @@ -16,6 +16,7 @@ import { nameof } from 'ts-simple-nameof'; import { ConfigurationService } from '../configuration/configuration.service'; import { BaseHttpV2Service } from '../http/base-http-v2.service'; import { TranslateService } from '@ngx-translate/core'; +import { ReferenceType } from '@app/core/model/reference-type/reference-type'; @Injectable() export class ReferenceService { @@ -150,6 +151,7 @@ export class ReferenceService { nameof(x => x.hash), nameof(x => x.label), nameof(x => x.type), + [nameof(x => x.type), nameof(x => x.id)].join('.'), nameof(x => x.description), [nameof(x => x.definition), nameof(x => x.fields), nameof(x => x.code)].join('.'), [nameof(x => x.definition), nameof(x => x.fields), nameof(x => x.dataType)].join('.'), diff --git a/dmp-frontend/src/app/ui/admin/entity-locks/lock-listing.component.html b/dmp-frontend/src/app/ui/admin/entity-locks/lock-listing.component.html index 16fad2242..82149675d 100644 --- a/dmp-frontend/src/app/ui/admin/entity-locks/lock-listing.component.html +++ b/dmp-frontend/src/app/ui/admin/entity-locks/lock-listing.component.html @@ -78,7 +78,7 @@ more_horiz - diff --git a/dmp-frontend/src/app/ui/admin/entity-locks/lock-listing.component.ts b/dmp-frontend/src/app/ui/admin/entity-locks/lock-listing.component.ts index 20e1f79a2..be5848d83 100644 --- a/dmp-frontend/src/app/ui/admin/entity-locks/lock-listing.component.ts +++ b/dmp-frontend/src/app/ui/admin/entity-locks/lock-listing.component.ts @@ -147,7 +147,7 @@ export class LockListingComponent extends BaseListingComponent return this.lockService.query(this.lookup); } - public deleteType(id: Guid) { + public deleteType(id: Guid, target: Guid) { if (id) { const dialogRef = this.dialog.open(ConfirmationDialogComponent, { data: { @@ -159,7 +159,7 @@ export class LockListingComponent extends BaseListingComponent }); dialogRef.afterClosed().pipe(takeUntil(this._destroyed)).subscribe(result => { if (result) { - this.lockService.delete(id).pipe(takeUntil(this._destroyed)) + this.lockService.delete(id, target).pipe(takeUntil(this._destroyed)) .subscribe( complete => this.onCallbackSuccess(), error => this.onCallbackError(error) diff --git a/dmp-frontend/src/app/ui/description/editor/description-base-fields-editor/description-base-fields-editor.component.ts b/dmp-frontend/src/app/ui/description/editor/description-base-fields-editor/description-base-fields-editor.component.ts index d3a0a6325..2fa09a366 100644 --- a/dmp-frontend/src/app/ui/description/editor/description-base-fields-editor/description-base-fields-editor.component.ts +++ b/dmp-frontend/src/app/ui/description/editor/description-base-fields-editor/description-base-fields-editor.component.ts @@ -1,5 +1,6 @@ import { Component, Input } from '@angular/core'; import { UntypedFormGroup } from '@angular/forms'; +import { IsActive } from '@app/core/common/enum/is-active.enum'; import { DescriptionTemplate } from '@app/core/model/description-template/description-template'; import { Description } from '@app/core/model/description/description'; import { DmpBlueprintDefinitionSection } from '@app/core/model/dmp-blueprint/dmp-blueprint'; @@ -26,10 +27,10 @@ export class DescriptionBaseFieldsEditorComponent extends BaseComponent { ) { super(); } ngOnInit() { - const dmpDescriptionTemplates: DmpDescriptionTemplate[] = this.description.dmp.dmpDescriptionTemplates.filter(x => x.sectionId == this.description.dmpDescriptionTemplate.sectionId); + const dmpDescriptionTemplates: DmpDescriptionTemplate[] = this.description.dmp.dmpDescriptionTemplates.filter(x => x.sectionId == this.description.dmpDescriptionTemplate.sectionId && x.isActive == IsActive.Active); const currentVersionsOfDescriptionTemplates = dmpDescriptionTemplates.map(x => x.currentDescriptionTemplate); //Check if the used tempalte in included in the current list. If not add it. - if (currentVersionsOfDescriptionTemplates.find(x => x.id == this.description?.descriptionTemplate?.id) == null) { + if (this.description.descriptionTemplate && currentVersionsOfDescriptionTemplates.find(x => x.id == this.description?.descriptionTemplate?.id) == null) { this.availableDescriptionTemplates.push(this.description.descriptionTemplate) } this.availableDescriptionTemplates.push(...currentVersionsOfDescriptionTemplates); diff --git a/dmp-frontend/src/app/ui/description/editor/description-editor.model.ts b/dmp-frontend/src/app/ui/description/editor/description-editor.model.ts index 9e02581ac..b8e60696d 100644 --- a/dmp-frontend/src/app/ui/description/editor/description-editor.model.ts +++ b/dmp-frontend/src/app/ui/description/editor/description-editor.model.ts @@ -414,7 +414,7 @@ export class DescriptionFieldEditorModel implements DescriptionFieldPersist { textValue: string; textListValue: string[]; dateValue: Date; - references: ReferencePersist[]; + references: ReferencePersist[] = []; reference: ReferencePersist; externalIdentifier?: DescriptionExternalIdentifierEditorModel = new DescriptionExternalIdentifierEditorModel(this.validationErrorModel); @@ -429,9 +429,26 @@ export class DescriptionFieldEditorModel implements DescriptionFieldPersist { this.textValue = item.textValue; this.textListValue = item.textListValue; this.dateValue = item.dateValue; - //TODO: refactor reference type - // this.references = descriptionReferences?.filter(x => x.data?.fieldId == descriptionTemplateField?.id && x.isActive == IsActive.Active).map(x => x.reference); + // this.reference = descriptionReferences?.find(x => x.data?.fieldId == descriptionTemplateField?.id && x.isActive == IsActive.Active)?.reference; + if(descriptionReferences){ + descriptionReferences.forEach(descriptionReference => { + if(descriptionReference.data.fieldId == descriptionTemplateField?.id && descriptionReference.isActive == IsActive.Active){ + this.references.push({ + id: descriptionReference.reference.id, + label: descriptionReference.reference.label, + reference: descriptionReference.reference.reference, + source: descriptionReference.reference.source, + typeId: null, + description: descriptionReference.reference.source, + definition: descriptionReference.reference.definition, + abbreviation: descriptionReference.reference.abbreviation, + sourceType: descriptionReference.reference.sourceType + }) + + } + }) + } this.externalIdentifier = new DescriptionExternalIdentifierEditorModel(this.validationErrorModel).fromModel(item.externalIdentifier); } return this; diff --git a/dmp-frontend/src/app/ui/description/editor/description-editor.resolver.ts b/dmp-frontend/src/app/ui/description/editor/description-editor.resolver.ts index 41b49d729..4697c96df 100644 --- a/dmp-frontend/src/app/ui/description/editor/description-editor.resolver.ts +++ b/dmp-frontend/src/app/ui/description/editor/description-editor.resolver.ts @@ -2,7 +2,7 @@ import { Injectable } from '@angular/core'; import { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'; import { AppPermission } from '@app/core/common/enum/permission.enum'; import { DescriptionTemplate, DescriptionTemplateBaseFieldData, DescriptionTemplateDefinition, DescriptionTemplateExternalDatasetData, DescriptionTemplateField, DescriptionTemplateFieldSet, DescriptionTemplateMultiplicity, DescriptionTemplatePage, DescriptionTemplateReferenceTypeData, DescriptionTemplateRule, DescriptionTemplateSection, DescriptionTemplateSelectData, DescriptionTemplateSelectOption, DescriptionTemplateUploadData, DescriptionTemplateUploadOption } from '@app/core/model/description-template/description-template'; -import { Description, DescriptionExternalIdentifier, DescriptionField, DescriptionPropertyDefinition, DescriptionPropertyDefinitionFieldSet, DescriptionPropertyDefinitionFieldSetItem, DescriptionReference, DescriptionTag } from '@app/core/model/description/description'; +import { Description, DescriptionExternalIdentifier, DescriptionField, DescriptionPropertyDefinition, DescriptionPropertyDefinitionFieldSet, DescriptionPropertyDefinitionFieldSetItem, DescriptionReference, DescriptionReferenceData, DescriptionTag } from '@app/core/model/description/description'; import { DescriptionTemplatesInSection, DmpBlueprint, DmpBlueprintDefinition, DmpBlueprintDefinitionSection } from '@app/core/model/dmp-blueprint/dmp-blueprint'; import { Dmp, DmpDescriptionTemplate } from '@app/core/model/dmp/dmp'; import { ReferenceType } from '@app/core/model/reference-type/reference-type'; @@ -57,6 +57,7 @@ export class DescriptionEditorResolver extends BaseEditorResolver { [nameof(x => x.dmpDescriptionTemplate), nameof(x => x.id)].join('.'), [nameof(x => x.dmpDescriptionTemplate), nameof(x => x.sectionId)].join('.'), + [nameof(x => x.dmpDescriptionTemplate), nameof(x => x.isActive)].join('.'), [nameof(x => x.properties), nameof(x => x.fieldSets), nameof(x => x.items), nameof(x => x.comment)].join('.'), [nameof(x => x.properties), nameof(x => x.fieldSets), nameof(x => x.items), nameof(x => x.ordinal)].join('.'), @@ -65,14 +66,24 @@ export class DescriptionEditorResolver extends BaseEditorResolver { [nameof(x => x.properties), nameof(x => x.fieldSets), nameof(x => x.items), nameof(x => x.fields), nameof(x => x.dateValue)].join('.'), [nameof(x => x.properties), nameof(x => x.fieldSets), nameof(x => x.items), nameof(x => x.fields), nameof(x => x.externalIdentifier), nameof(x => x.identifier)].join('.'), [nameof(x => x.properties), nameof(x => x.fieldSets), nameof(x => x.items), nameof(x => x.fields), nameof(x => x.externalIdentifier), nameof(x => x.type)].join('.'), + [nameof(x => x.properties), nameof(x => x.fieldSets), nameof(x => x.items), nameof(x => x.fields), nameof(x => x.references), nameof(x => x.id)].join('.'), + [nameof(x => x.properties), nameof(x => x.fieldSets), nameof(x => x.items), nameof(x => x.fields), nameof(x => x.references), nameof(x => x.label)].join('.'), + [nameof(x => x.properties), nameof(x => x.fieldSets), nameof(x => x.items), nameof(x => x.fields), nameof(x => x.references), nameof(x => x.type), nameof(x => x.id)].join('.'), + [nameof(x => x.properties), nameof(x => x.fieldSets), nameof(x => x.items), nameof(x => x.fields), nameof(x => x.references), nameof(x => x.reference)].join('.'), + [nameof(x => x.properties), nameof(x => x.fieldSets), nameof(x => x.items), nameof(x => x.fields), nameof(x => x.references), nameof(x => x.isActive)].join('.'), [nameof(x => x.descriptionTags), nameof(x => x.id),].join('.'), [nameof(x => x.descriptionTags), nameof(x => x.tag), nameof(x => x.label)].join('.'), + [nameof(x => x.descriptionReferences), nameof(x => x.data), nameof(x => x.fieldId)].join('.'), [nameof(x => x.descriptionReferences), nameof(x => x.reference), nameof(x => x.id)].join('.'), [nameof(x => x.descriptionReferences), nameof(x => x.reference), nameof(x => x.label)].join('.'), - [nameof(x => x.descriptionReferences), nameof(x => x.reference), nameof(x => x.type)].join('.'), + [nameof(x => x.descriptionReferences), nameof(x => x.reference), nameof(x => x.type), nameof(x => x.id)].join('.'), [nameof(x => x.descriptionReferences), nameof(x => x.reference), nameof(x => x.reference)].join('.'), + [nameof(x => x.descriptionReferences), nameof(x => x.reference), nameof(x => x.source)].join('.'), + [nameof(x => x.descriptionReferences), nameof(x => x.reference), nameof(x => x.sourceType)].join('.'), + [nameof(x => x.descriptionReferences), nameof(x => x.isActive)].join('.'), + nameof(x => x.createdAt), nameof(x => x.hash), nameof(x => x.isActive) @@ -85,6 +96,7 @@ export class DescriptionEditorResolver extends BaseEditorResolver { (prefix ? prefix + '.' : '') + [nameof(x => x.label)].join('.'), (prefix ? prefix + '.' : '') + [nameof(x => x.version)].join('.'), (prefix ? prefix + '.' : '') + [nameof(x => x.groupId)].join('.'), + (prefix ? prefix + '.' : '') + [nameof(x => x.isActive)].join('.'), (prefix ? prefix + '.' : '') + [nameof(x => x.definition), nameof(x => x.pages), nameof(x => x.id)].join('.'), (prefix ? prefix + '.' : '') + [nameof(x => x.definition), nameof(x => x.pages), nameof(x => x.ordinal)].join('.'), (prefix ? prefix + '.' : '') + [nameof(x => x.definition), nameof(x => x.pages), nameof(x => x.title)].join('.'), @@ -147,6 +159,7 @@ export class DescriptionEditorResolver extends BaseEditorResolver { (prefix ? prefix + '.' : '') + [nameof(x => x.dmpDescriptionTemplates), nameof(x => x.id)].join('.'), (prefix ? prefix + '.' : '') + [nameof(x => x.dmpDescriptionTemplates), nameof(x => x.sectionId)].join('.'), (prefix ? prefix + '.' : '') + [nameof(x => x.dmpDescriptionTemplates), nameof(x => x.descriptionTemplateGroupId)].join('.'), + (prefix ? prefix + '.' : '') + [nameof(x => x.dmpDescriptionTemplates), nameof(x => x.isActive)].join('.'), (prefix ? prefix + '.' : '') + [nameof(x => x.dmpDescriptionTemplates), nameof(x => x.currentDescriptionTemplate), nameof(x => x.id)].join('.'), (prefix ? prefix + '.' : '') + [nameof(x => x.dmpDescriptionTemplates), nameof(x => x.currentDescriptionTemplate), nameof(x => x.label)].join('.'), (prefix ? prefix + '.' : '') + [nameof(x => x.dmpDescriptionTemplates), nameof(x => x.currentDescriptionTemplate), nameof(x => x.version)].join('.'), diff --git a/dmp-frontend/src/app/ui/dmp/dmp-editor-blueprint/dmp-editor.model.ts b/dmp-frontend/src/app/ui/dmp/dmp-editor-blueprint/dmp-editor.model.ts index ce0a0f1c5..426eeacb8 100644 --- a/dmp-frontend/src/app/ui/dmp/dmp-editor-blueprint/dmp-editor.model.ts +++ b/dmp-frontend/src/app/ui/dmp/dmp-editor-blueprint/dmp-editor.model.ts @@ -46,10 +46,10 @@ export class DmpEditorModel extends BaseEditorModel implements DmpPersist { item.blueprint.definition.sections.forEach(section => { if (section.hasTemplates) { - const sectionTempaltesFromDmp = item.dmpDescriptionTemplates?.filter(x => x.sectionId == section.id) || []; + const sectionTempaltesFromDmp = item.dmpDescriptionTemplates?.filter(x => x.sectionId == section.id && x.isActive == IsActive.Active) || []; if (sectionTempaltesFromDmp.length > 0) { - item.dmpDescriptionTemplates?.filter(x => x.sectionId == section.id).forEach(dmpDescriptionTemplate => { + sectionTempaltesFromDmp?.filter(x => x.sectionId == section.id).forEach(dmpDescriptionTemplate => { this.descriptionTemplates.push(new DmpDescriptionTemplateEditorModel(this.validationErrorModel).fromModel( { sectionId: section.id, @@ -57,7 +57,7 @@ export class DmpEditorModel extends BaseEditorModel implements DmpPersist { })); }); } else if (section.descriptionTemplates?.length > 0) { - section.descriptionTemplates.forEach(blueprintDefinedDescriptionTemplate => { + sectionTempaltesFromDmp.forEach(blueprintDefinedDescriptionTemplate => { this.descriptionTemplates.push(new DmpDescriptionTemplateEditorModel(this.validationErrorModel).fromModel( { sectionId: section.id, @@ -297,7 +297,7 @@ export class DmpBlueprintValueEditorModel implements DmpBlueprintValuePersist { // TODO check typeId field if(dmpReferences){ dmpReferences.forEach(dmpReference => { - if(dmpReference.data.blueprintFieldId == this.fieldId){ + if(dmpReference.data.blueprintFieldId == this.fieldId && dmpReference.isActive == IsActive.Active){ this.references.push({ data: dmpReference.data, reference: { diff --git a/dmp-frontend/src/app/ui/dmp/dmp-editor-blueprint/dmp-editor.resolver.ts b/dmp-frontend/src/app/ui/dmp/dmp-editor-blueprint/dmp-editor.resolver.ts index e1d32b5b2..5bdfa8fbc 100644 --- a/dmp-frontend/src/app/ui/dmp/dmp-editor-blueprint/dmp-editor.resolver.ts +++ b/dmp-frontend/src/app/ui/dmp/dmp-editor-blueprint/dmp-editor.resolver.ts @@ -82,6 +82,7 @@ export class DmpEditorResolver extends BaseEditorResolver { [nameof(x => x.dmpDescriptionTemplates), nameof(x => x.sectionId)].join('.'), [nameof(x => x.dmpDescriptionTemplates), nameof(x => x.descriptionTemplateGroupId)].join('.'), + [nameof(x => x.dmpDescriptionTemplates), nameof(x => x.isActive)].join('.'), // nameof(x => x.id),