diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DataManagementPlanCriteria.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DataManagementPlanCriteria.java index d79643daf..370fabae8 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DataManagementPlanCriteria.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DataManagementPlanCriteria.java @@ -1,6 +1,7 @@ package eu.eudat.data.dao.criteria; import eu.eudat.data.entities.DMP; +import eu.eudat.data.entities.Organisation; import eu.eudat.data.entities.Project; import java.util.Date; @@ -10,39 +11,14 @@ import java.util.UUID; public class DataManagementPlanCriteria extends Criteria { private Date periodStart; private Date periodEnd; + private List projects; private boolean allVersions; private List groupIds; - - private List projects; - - public boolean getAllVersions() { - return allVersions; - } - - public void setAllVersions(boolean allVersions) { - this.allVersions = allVersions; - } - - public List getGroupIds() { - return groupIds; - } - - public void setGroupIds(List groupIds) { - this.groupIds = groupIds; - } + private Integer status; public Date getPeriodStart() { return periodStart; } - - public List getProjects() { - return projects; - } - - public void setProjects(List projects) { - this.projects = projects; - } - public void setPeriodStart(Date periodStart) { this.periodStart = periodStart; } @@ -50,9 +26,35 @@ public class DataManagementPlanCriteria extends Criteria { public Date getPeriodEnd() { return periodEnd; } - public void setPeriodEnd(Date periodEnd) { this.periodEnd = periodEnd; } + public List getProjects() { + return projects; + } + public void setProjects(List projects) { + this.projects = projects; + } + + public boolean getAllVersions() { + return allVersions; + } + public void setAllVersions(boolean allVersions) { + this.allVersions = allVersions; + } + + public List getGroupIds() { + return groupIds; + } + public void setGroupIds(List groupIds) { + this.groupIds = groupIds; + } + + public Integer getStatus() { + return status; + } + public void setStatus(Integer status) { + this.status = status; + } } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDaoImpl.java index 55f6670cc..63161e406 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDaoImpl.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDaoImpl.java @@ -45,6 +45,14 @@ public class DMPDaoImpl extends DatabaseAccess implements DMPDao { nestedRoot.get("groupId")), Arrays.asList(new SelectionField(FieldSelectionType.FIELD, "version")), String.class))); if (criteria.getGroupIds() != null && !criteria.getGroupIds().isEmpty()) query.where((builder, root) -> root.get("groupId").in(criteria.getGroupIds())); + if (criteria.getStatus() != null) { + if (criteria.getStatus() == DMP.DMPStatus.FINALISED.getValue()){ + query.where((builder, root) -> builder.equal(root.get("status"), DMP.DMPStatus.FINALISED.getValue())); + } + else if (criteria.getStatus() == DMP.DMPStatus.ACTIVE.getValue()){ + query.where((builder, root) -> builder.equal(root.get("status"), DMP.DMPStatus.ACTIVE.getValue())); + } + } query.where((builder, root) -> builder.notEqual(root.get("status"), DMP.DMPStatus.DELETED.getValue())); return query; } diff --git a/dmp-frontend/src/app/core/query/dmp/dmp-criteria.ts b/dmp-frontend/src/app/core/query/dmp/dmp-criteria.ts index f95cee86c..c04a51a8c 100644 --- a/dmp-frontend/src/app/core/query/dmp/dmp-criteria.ts +++ b/dmp-frontend/src/app/core/query/dmp/dmp-criteria.ts @@ -5,4 +5,5 @@ export class DmpCriteria extends BaseCriteria { public projects: ProjectListingModel[] = []; public groupIds: string[]; public allVersions: boolean; + public status?: number; } diff --git a/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria.component.html b/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria.component.html index 6a9405b37..6d63793f6 100644 --- a/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria.component.html +++ b/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria.component.html @@ -4,8 +4,8 @@
- + {{formGroup.get('like').getError('backendError').message}} search @@ -15,10 +15,10 @@
{{ 'TYPES.DMP-VISIBILITY.VISIBILITY' | translate }}
- - {{ 'TYPES.DMP-VISIBILITY.ANY' | translate }} - {{ 'TYPES.DMP-VISIBILITY.PUBLIC' | translate }} - {{ 'TYPES.DMP-VISIBILITY.PRIVATE' | translate }} + + {{ 'TYPES.DMP-VISIBILITY.ANY' | translate }} + {{ 'TYPES.DMP-VISIBILITY.PUBLIC' | translate }} + {{ 'TYPES.DMP-VISIBILITY.PRIVATE' | translate }}
@@ -65,11 +65,10 @@
{{ 'DMP-RELATED-ORGANIZATION.RELATED-ORGANIZATION' | translate }}
- - + + arrow_drop_down
diff --git a/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria.component.ts b/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria.component.ts index 997374bee..cf4bacda2 100644 --- a/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria.component.ts +++ b/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria.component.ts @@ -14,6 +14,9 @@ import { DataTableRequest } from '../../../../core/model/data-table/data-table-r import { DmpService } from '../../../../core/services/dmp/dmp.service'; import { MatDialog } from '@angular/material'; import { DmpUploadDialogue } from './upload-dialogue/dmp-upload-dialogue.component'; +import { Observable } from 'rxjs'; +import { ExternalSourceItemModel } from '../../../../core/model/external-sources/external-source-item'; +import { ExternalSourcesService } from '../../../../core/services/external-sources/external-sources.service'; @Component({ selector: 'app-dmp-criteria-component', @@ -26,14 +29,17 @@ export class DmpCriteriaComponent extends BaseCriteriaComponent implements OnIni filteringProjectsAsync = false; sizeError = false; maxFileSize: number = 1048576; - - options: FormGroup; + filteringOrganisationsAsync = false; + filteredOrganisations: ExternalSourceItemModel[]; filteredProjects: ProjectListingModel[]; public formGroup = new FormBuilder().group({ like: new FormControl(), - projects: new FormControl() + projects: new FormControl(), + status: new FormControl(), + organisations: new FormControl() }); + projectAutoCompleteConfiguration: MultipleAutoCompleteConfiguration = { filterFn: this.filterProject.bind(this), initialItems: (excludedItems: any[]) => this.filterProject('').map(result => result.filter(resultItem => excludedItems.map(x => x.id).indexOf(resultItem.id) === -1)), @@ -41,12 +47,20 @@ export class DmpCriteriaComponent extends BaseCriteriaComponent implements OnIni titleFn: (item) => item['label'] }; + organisationAutoCompleteConfiguration: MultipleAutoCompleteConfiguration = { + filterFn: this.filterOrganisations.bind(this), + initialItems: (excludedItems: any[]) => this.filterOrganisations('').map(result => result.filter(resultItem => excludedItems.map(x => x.id).indexOf(resultItem.id) === -1)), + displayFn: (item) => item['name'], + titleFn: (item) => item['name'] + } + constructor( public language: TranslateService, public projectService: ProjectService, private dmpService: DmpService, public formBuilder: FormBuilder, - private dialog: MatDialog + private dialog: MatDialog, + private externalSourcesService: ExternalSourcesService ) { super(new ValidationErrorModel()); } @@ -54,6 +68,12 @@ export class DmpCriteriaComponent extends BaseCriteriaComponent implements OnIni ngOnInit() { super.ngOnInit(); + this.formGroup.get('organisations').valueChanges + .pipe(takeUntil(this._destroyed)) + .subscribe(x => this.controlModified()); + this.formGroup.get('status').valueChanges + .pipe(takeUntil(this._destroyed)) + .subscribe(x => this.controlModified()); this.formGroup.get('projects').valueChanges .pipe(takeUntil(this._destroyed)) .subscribe(x => this.controlModified()); @@ -66,6 +86,7 @@ export class DmpCriteriaComponent extends BaseCriteriaComponent implements OnIni setCriteria(criteria: DmpCriteria): void { this.formGroup.get('like').patchValue(criteria.like); this.formGroup.get('projects').patchValue(criteria.projects); + this.formGroup.get('status').patchValue(criteria.status); } onCallbackError(error: any) { @@ -77,7 +98,7 @@ export class DmpCriteriaComponent extends BaseCriteriaComponent implements OnIni if (this.refreshCallback != null && (this.formGroup.get('like').value == null || this.formGroup.get('like').value.length === 0 || this.formGroup.get('like').value.length > 2) ) { - this.refreshCallback(); + setTimeout(() => this.refreshCallback()); } } @@ -90,6 +111,13 @@ export class DmpCriteriaComponent extends BaseCriteriaComponent implements OnIni return this.projectService.getPaged(projectRequestItem, "autocomplete").map(x => x.data); } + filterOrganisations(value: string): Observable { + this.filteredOrganisations = undefined; + this.filteringOrganisationsAsync = true; + + return this.externalSourcesService.searchDMPOrganizations(value); + } + fileSave(event) { const dialogRef = this.dialog.open(DmpUploadDialogue, { data: { @@ -101,8 +129,8 @@ export class DmpCriteriaComponent extends BaseCriteriaComponent implements OnIni dialogRef.afterClosed().pipe(takeUntil(this._destroyed)).subscribe(result => { if (result && result.success) { this.dmpService.uploadXml(result.fileList, result.dmpTitle) - .pipe(takeUntil(this._destroyed)) - .subscribe(); + .pipe(takeUntil(this._destroyed)) + .subscribe(); } }); }