diff --git a/dmp-frontend/src/app/dmps/dmp-listing.component.css b/dmp-frontend/src/app/dmps/dmp-listing.component.css deleted file mode 100644 index 957c39499..000000000 --- a/dmp-frontend/src/app/dmps/dmp-listing.component.css +++ /dev/null @@ -1,20 +0,0 @@ -.mat-card { - overflow: auto; - padding: 0px; -} - -.mat-table { - margin: 24px; -} - -.mat-progress-bar { - position: absolute; -} - -.mat-fab-bottom-right { - top: auto !important; - right: 20px !important; - bottom: 10px !important; - left: auto !important; - position: fixed !important; -} diff --git a/dmp-frontend/src/app/dmps/dmp-listing.component.html b/dmp-frontend/src/app/dmps/dmp-listing.component.html index 3086e8b41..9148b0008 100644 --- a/dmp-frontend/src/app/dmps/dmp-listing.component.html +++ b/dmp-frontend/src/app/dmps/dmp-listing.component.html @@ -1,190 +1,39 @@
-

{{'DMP-LISTING.TITLE' | translate}}

+

{{'DMP-LISTING.TITLE' | translate}}

- - - + + + - + - - - {{'DMP-LISTING.COLUMNS.NAME' | translate}} - {{row.name}} - + + + {{'DMP-LISTING.COLUMNS.NAME' | translate}} + {{row.name}} + - - - {{'DMP-LISTING.COLUMNS.ABBREVIATION' | translate}} - {{row.abbreviation}} - + + + {{'DMP-LISTING.COLUMNS.PROJECT' | translate}} + {{row.abbreviation}} + - - - {{'DMP-LISTING.COLUMNS.START' | translate}} - {{row.start}} - + + + {{'DMP-LISTING.COLUMNS.CREATION-TIME' | translate}} + + - - - {{'DMP-LISTING.COLUMNS.END' | translate}} - {{row.end}} - + + - - - {{'DMP-LISTING.COLUMNS.ACTIONS' | translate}} - - + + + + - - - - - - - - - -
- + + \ No newline at end of file diff --git a/dmp-frontend/src/app/dmps/dmp-listing.component.scss b/dmp-frontend/src/app/dmps/dmp-listing.component.scss new file mode 100644 index 000000000..d81a50420 --- /dev/null +++ b/dmp-frontend/src/app/dmps/dmp-listing.component.scss @@ -0,0 +1,23 @@ +.mat-table { + margin: 24px; +} + +.mat-progress-bar { + position: absolute; +} + +.mat-fab-bottom-right { + top: auto !important; + right: 20px !important; + bottom: 10px !important; + left: auto !important; + position: fixed !important; +} + +.full-width { + width: 100%; +} + +.mat-card { + margin: 16px 0; +} \ No newline at end of file diff --git a/dmp-frontend/src/app/dmps/dmp-listing.component.ts b/dmp-frontend/src/app/dmps/dmp-listing.component.ts index d29f9a090..0882f0062 100644 --- a/dmp-frontend/src/app/dmps/dmp-listing.component.ts +++ b/dmp-frontend/src/app/dmps/dmp-listing.component.ts @@ -16,20 +16,20 @@ import { DataManagementPlanListingModel } from "../models/data-managemnt-plans/D @Component({ selector: 'app-dmp-listing-component', templateUrl: 'dmp-listing.component.html', - styleUrls: ['./dmp-listing.component.css'], + styleUrls: ['./dmp-listing.component.scss'], providers: [DataManagementPlanService] }) -export class DataManagementPlanListingComponent implements OnInit, AfterViewInit { +export class DataManagementPlanListingComponent implements OnInit { @ViewChild(MatPaginator) _paginator: MatPaginator; @ViewChild(MatSort) sort: MatSort; @ViewChild(DataManagementPlanCriteriaComponent) criteria: DataManagementPlanCriteriaComponent; dataSource: DataManagementPlanDataSource | null; - displayedColumns: String[] = ['name', 'abbreviation', 'start', 'end']; + displayedColumns: String[] = ['name', 'project', 'creationTime']; constructor( - private projectService: DataManagementPlanService, + private dataManagementPlanService: DataManagementPlanService, private router: Router, private languageService: TranslateService, public snackBar: MatSnackBar, @@ -38,15 +38,13 @@ export class DataManagementPlanListingComponent implements OnInit, AfterViewInit } ngOnInit() { - - } - - ngAfterViewInit() { + this.criteria.setCriteria(this.getDefaultCriteria()); + this.refresh(); this.criteria.setRefreshCallback(() => this.refresh()); } refresh() { - this.dataSource = new DataManagementPlanDataSource(this.projectService, this._paginator, this.sort, this.languageService, this.snackBar, this.criteria, ); + this.dataSource = new DataManagementPlanDataSource(this.dataManagementPlanService, this._paginator, this.sort, this.languageService, this.snackBar, this.criteria, ); } rowClick(rowId: String) { diff --git a/dmp-frontend/src/app/dmps/editor/dmp-editor.component.html b/dmp-frontend/src/app/dmps/editor/dmp-editor.component.html index 177130ba3..7b94fcc67 100644 --- a/dmp-frontend/src/app/dmps/editor/dmp-editor.component.html +++ b/dmp-frontend/src/app/dmps/editor/dmp-editor.component.html @@ -11,44 +11,6 @@ {{'GENERAL.VALIDATION.REQUIRED' | translate}} - - - - diff --git a/dmp-frontend/src/app/models/criteria/data-management-plan/DataManagementPlanCriteria.ts b/dmp-frontend/src/app/models/criteria/data-management-plan/DataManagementPlanCriteria.ts index a26696afe..674a51492 100644 --- a/dmp-frontend/src/app/models/criteria/data-management-plan/DataManagementPlanCriteria.ts +++ b/dmp-frontend/src/app/models/criteria/data-management-plan/DataManagementPlanCriteria.ts @@ -1,6 +1,6 @@ import { BaseCriteria } from "../BaseCriteria"; +import { ProjectModel } from "../../projects/ProjectModel"; export class DataManagementPlanCriteria extends BaseCriteria { - public PeriodStart: Date; - public PeriodEnd: Date; + public projects: ProjectModel[] = []; } diff --git a/dmp-frontend/src/app/models/criteria/data-management-plan/DataManagementPlanCriteriaErrorModel.ts b/dmp-frontend/src/app/models/criteria/data-management-plan/DataManagementPlanCriteriaErrorModel.ts index 6773dbafa..a3a9abfec 100644 --- a/dmp-frontend/src/app/models/criteria/data-management-plan/DataManagementPlanCriteriaErrorModel.ts +++ b/dmp-frontend/src/app/models/criteria/data-management-plan/DataManagementPlanCriteriaErrorModel.ts @@ -1,6 +1,5 @@ import { BaseCriteriaErrorModel } from "../BaseCriteriaErrorModel"; export class DataManagementPlanCriteriaErrorModel extends BaseCriteriaErrorModel{ - public PeriodStart: String; - public PeriodEnd: String; + } diff --git a/dmp-frontend/src/app/models/data-managemnt-plans/DataManagementPlanModel.ts b/dmp-frontend/src/app/models/data-managemnt-plans/DataManagementPlanModel.ts index ba2d6ebeb..86512ab7e 100644 --- a/dmp-frontend/src/app/models/data-managemnt-plans/DataManagementPlanModel.ts +++ b/dmp-frontend/src/app/models/data-managemnt-plans/DataManagementPlanModel.ts @@ -5,6 +5,10 @@ import { BackendErrorValidator } from "../../utilities/validators/BackendErrorVa import { BaseErrorModel } from "../error/BaseErrorModel"; import { AutoCompleteItem } from "../../shared/components/autocomplete/AutoCompleteItem"; import { ExternalSourcesItemModel } from "../external-sources/ExternalSourcesItemModel"; +import { ProjectModel } from "../projects/ProjectModel"; +import { OrganisationModel } from "../organisation/OrganisationModel"; +import { ResearcherModel } from "../researcher/ResearcherModel"; +import { JsonSerializer } from "../../utilities/JsonSerializer"; export class DataManagementPlanModel implements Serializable { public id: String; @@ -13,9 +17,9 @@ export class DataManagementPlanModel implements Serializable().fromJSONObject(item.project, ProjectModel); + this.organisations = new JsonSerializer().fromJSONArray(item.organisations, OrganisationModel); + this.researchers = new JsonSerializer().fromJSONArray(item.researchers, ResearcherModel); return this; } @@ -39,6 +46,7 @@ export class DataManagementPlanModel implements Serializable { + public id: String; + public label: String; + public abbreviation: String; + public reference: String; + public uri: String; + + fromJSONObject(item: any): OrganisationModel { + this.id = item.id; + this.label = item.label; + this.abbreviation = item.abbreviation; + this.reference = item.reference; + this.uri = item.uri; + + return this; + } +} \ No newline at end of file diff --git a/dmp-frontend/src/app/models/researcher/ResearcherModel.ts b/dmp-frontend/src/app/models/researcher/ResearcherModel.ts new file mode 100644 index 000000000..98b547172 --- /dev/null +++ b/dmp-frontend/src/app/models/researcher/ResearcherModel.ts @@ -0,0 +1,17 @@ +import { Serializable } from "../Serializable"; + +export class ResearcherModel implements Serializable { + public id: String; + public label: String; + public uri: String; + public email: String; + + fromJSONObject(item: any): ResearcherModel { + this.id = item.id; + this.label = item.label; + this.email = item.email; + this.uri = item.uri; + + return this; + } +} \ No newline at end of file diff --git a/dmp-frontend/src/app/projects/project-listing.component.ts b/dmp-frontend/src/app/projects/project-listing.component.ts index c4138f97c..f0d033168 100644 --- a/dmp-frontend/src/app/projects/project-listing.component.ts +++ b/dmp-frontend/src/app/projects/project-listing.component.ts @@ -45,7 +45,7 @@ export class ProjectListingComponent implements OnInit { } refresh() { - this.dataSource = new ProjectDataSource(this.projectService, this._paginator, this.sort, this.languageService, this.snackBar, this.criteria ); + this.dataSource = new ProjectDataSource(this.projectService, this._paginator, this.sort, this.languageService, this.snackBar, this.criteria); } rowClick(rowId: String) { @@ -56,19 +56,6 @@ export class ProjectListingComponent implements OnInit { const defaultCriteria = new ProjectCriteria(); return defaultCriteria; } - - // canShowOwner(): boolean { - // const principal: Principal = this.authentication.current(); - // if (principal) { - // const principalRoles = principal.appRoles; - // for (let i = 0; i < principalRoles.length; i++) { - // if (principalRoles[i] === Principal.AppRole.Admin || principalRoles[i] === Principal.AppRole.BudgetManager) { - // return true; - // } - // } - // } - // return false; - // } } export class ProjectDataSource extends DataSource { @@ -138,155 +125,4 @@ export class ProjectDataSource extends DataSource { disconnect() { // No-op } -} -// export class ProjectListingComponent implements OnInit{ - -// // Start ALTERNATIVE -// //whole dmp data model -// tableData : any[] = new Array(); - -// //organisation editor data model -// editingOrganisation: any = {}; -// organisationEditorForm : any; - -// //required by the table -// public filterQuery = ""; -// public rowsOnPage = 10; -// public sortBy = "label"; -// public sortOrder = "asc"; - - -// // for tableIds -// showIDs : boolean = false; - -// statusDropDown: DropdownField; - -// project: any; - -// whoami: any; -// onlyMyProjects : boolean = false; - -// options: DatepickerOptions = { -// minYear: 1900, -// maxYear: 2050, -// displayFormat: 'MMM D[,] YYYY', -// barTitleFormat: 'MMMM YYYY', -// firstCalendarDay: 0 // 0 - Sunday, 1 - Monday -// }; - -// //breadcrumbHome: MenuItem = {icon: 'fa fa-home'}; -// breadcrumbData: MenuItem[] = new Array(); - -// constructor( -// private serverService: ServerService, -// private route: ActivatedRoute, -// private router: Router) { -// this.statusDropDown = new DropdownField(); -// this.statusDropDown.options= [{key:'0', value:"Active"},{key:'1', value:"Inactive"}] -// this.project = this.getEmptyProject(); -// } - -// ngAfterViewInit() { - -// } - -// getEmptyProject(){ -// return { -// label: '', -// abbreviation:'', -// reference:'', -// uri:'', -// description:'', -// enddate:'', -// startdate:'' -// } -// } - - -// ngOnInit() { - -// this.getProjects(); - -// this.serverService.whoami().subscribe( -// response => { -// this.whoami = response; -// console.log(this.whoami) -// }, -// err => { -// simple_notifier("danger",null,"Could not retrieve user config"); -// } -// ); - -// } - - -// getProjects(muted? : boolean){ -// //this.serverService.getProjectsOfUser().subscribe( -// this.serverService.getAllProjects().subscribe( -// response => { -// this.tableData = response; -// if(muted && muted!=true) -// simple_notifier("success",null,"Updated projects table"); -// }, -// err => { -// simple_notifier("danger",null,"Could not retrieve projects"); -// } -// ); -// } - - - -// showDatasets(){ //dmpId, event -// //this.dataSetVisibe = true; - -// } - - -// SaveProject(){ - -// let action : Observable; - -// if(this.project.id == null) //means it's a new one -// action = this.serverService.createProject(this.project); -// else -// action = this.serverService.updateProject(this.project); -// action.subscribe( -// response =>{ -// this.getProjects(); -// simple_notifier("success",null, (this.project.id == null) ? "Created" : "Updated" +" projects table"); -// }, -// error => { -// simple_notifier("danger",null, "Could not "+ (this.project.id == null) ? "create" : "update" + " projects table"); -// } -// ); - -// $("#newEditProjectModal").modal("hide"); -// } - -// newProject(){ -// this.project = this.getEmptyProject(); -// $("#newEditProjectModal").modal("show"); - -// } - -// editRow(item, event){ -// this.project = Object.assign({}, item); //this will have id - that defines whether it's an update or not -// this.project.creationUser = {"id":this.project.creationUser.id}; -// $("#newEditProjectModal").modal("show"); - -// return false; -// } - - -// /* -// markProjectForDelete(project){ -// this.project = project; -// } - -// deleteProject(confirmation){ -// if(confirmation==true) -// this.deleteRow(this.project); -// } -// */ - -// } +} \ No newline at end of file diff --git a/dmp-frontend/src/app/services/data-management-plan/data-management-plan.service.ts b/dmp-frontend/src/app/services/data-management-plan/data-management-plan.service.ts index 147715e75..3aac34474 100644 --- a/dmp-frontend/src/app/services/data-management-plan/data-management-plan.service.ts +++ b/dmp-frontend/src/app/services/data-management-plan/data-management-plan.service.ts @@ -30,10 +30,14 @@ export class DataManagementPlanService { } getSingle(id: string): Observable { - return this.http.get(this.actionUrl + id, { headers: this.headers }); + return this.http.get(this.actionUrl + 'getSingle' + id, { headers: this.headers }); } createDataManagementPlan(dataManagementPlanModel: DataManagementPlanModel): Observable { - return this.http.post(this.actionUrl + 'add', dataManagementPlanModel, { headers: this.headers }); + return this.http.post(this.actionUrl + 'createOrUpdate', dataManagementPlanModel, { headers: this.headers }); + } + + inactivate(id: String): Observable { + return this.http.delete(this.actionUrl + 'inactivate' + id, { headers: this.headers }); } } diff --git a/dmp-frontend/src/app/services/project/project.service.ts b/dmp-frontend/src/app/services/project/project.service.ts index f3c6627a4..4e9719e98 100644 --- a/dmp-frontend/src/app/services/project/project.service.ts +++ b/dmp-frontend/src/app/services/project/project.service.ts @@ -39,6 +39,6 @@ export class ProjectService { } inactivate(id: String): Observable { - return this.http.delete(this.actionUrl + 'inactivate' + id, { headers: this.headers }); + return this.http.delete(this.actionUrl + 'inactivate/' + id, { headers: this.headers }); } } diff --git a/dmp-frontend/src/app/shared/components/criteria/data-management-plan/dmp-criteria.component.html b/dmp-frontend/src/app/shared/components/criteria/data-management-plan/dmp-criteria.component.html index f01d9a8b4..6d55298e6 100644 --- a/dmp-frontend/src/app/shared/components/criteria/data-management-plan/dmp-criteria.component.html +++ b/dmp-frontend/src/app/shared/components/criteria/data-management-plan/dmp-criteria.component.html @@ -1,34 +1,28 @@ -
+
-
+
- - {{baseErrorModel['Criteria.PeriodStart']}} - - + + {{baseErrorModel['Criteria.like']}}
-
- - - {{baseErrorModel['Criteria.PeriodEnd']}} - - - +
+ + +
{{chip.name.substring(0, 1).toUpperCase()}}
+ {{chip.name}} +
+ +
+ {{option.name}} +
+
+ +
- \ No newline at end of file +
\ No newline at end of file diff --git a/dmp-frontend/src/app/shared/components/criteria/data-management-plan/dmp-criteria.component.scss b/dmp-frontend/src/app/shared/components/criteria/data-management-plan/dmp-criteria.component.scss index 263cc1548..0b6d2bc32 100644 --- a/dmp-frontend/src/app/shared/components/criteria/data-management-plan/dmp-criteria.component.scss +++ b/dmp-frontend/src/app/shared/components/criteria/data-management-plan/dmp-criteria.component.scss @@ -1,4 +1,4 @@ -.form-criteria { +.dmp-criteria { mat-form-field { padding-bottom: 5px; width: 100%; diff --git a/dmp-frontend/src/app/shared/components/criteria/data-management-plan/dmp-criteria.component.ts b/dmp-frontend/src/app/shared/components/criteria/data-management-plan/dmp-criteria.component.ts index d6faa2076..765c17502 100644 --- a/dmp-frontend/src/app/shared/components/criteria/data-management-plan/dmp-criteria.component.ts +++ b/dmp-frontend/src/app/shared/components/criteria/data-management-plan/dmp-criteria.component.ts @@ -6,6 +6,7 @@ import { ValidationContext, Validation } from '../../../../utilities/validators/ import { BackendErrorValidator } from '../../../../utilities/validators/BackendErrorValidator'; import { DataManagementPlanCriteria } from '../../../../models/criteria/data-management-plan/DataManagementPlanCriteria'; import { DataManagementPlanCriteriaErrorModel } from '../../../../models/criteria/data-management-plan/DataManagementPlanCriteriaErrorModel'; +import { ProjectModel } from '../../../../models/projects/ProjectModel'; @Component({ selector: 'app-dmp-criteria-component', @@ -17,9 +18,9 @@ import { DataManagementPlanCriteriaErrorModel } from '../../../../models/criteri export class DataManagementPlanCriteriaComponent extends BaseCriteriaComponent implements OnInit { - // public form: DataManagementPlanType; - // public formStatus: DataManagementPlanStatus; public criteria: DataManagementPlanCriteria = new DataManagementPlanCriteria(); + filteringProjectsAsync: boolean = false; + filteredProjects: ProjectModel[]; constructor( public language: TranslateService, @@ -36,31 +37,4 @@ export class DataManagementPlanCriteriaComponent extends BaseCriteriaComponent i setCriteria(criteria: DataManagementPlanCriteria): void { this.criteria = criteria; } - - public fromJSONObject(item: any): DataManagementPlanCriteria { - this.criteria = new DataManagementPlanCriteria(); - this.criteria.PeriodStart = new Date(item.PeriodStart); - this.criteria.PeriodEnd = new Date(item.PeriodEnd); - return this.criteria; - } - - buildForm(): FormGroup { - const context: ValidationContext = this.createValidationContext(); - - return this.formBuilder.group({ - periodStart: [this.criteria.PeriodStart, context.getValidation('periodStart').validators], - periodEnd: [this.criteria.PeriodEnd, context.getValidation('periodEnd').validators], - }); - } - - createValidationContext(): ValidationContext { - const validationContext: ValidationContext = new ValidationContext(); - const validationArray: Validation[] = new Array(); - - validationArray.push({ key: 'periodStart', validators: [BackendErrorValidator(this.errorModel, 'Criteria.PeriodStart')] }); //must add 'Criteria.' because the criteria validator is inside the request validator - validationArray.push({ key: 'periodEnd', validators: [BackendErrorValidator(this.errorModel, 'Criteria.PeriodEnd')] }); - - validationContext.validation = validationArray; - return validationContext; - } } diff --git a/dmp-frontend/src/assets/lang/en.json b/dmp-frontend/src/assets/lang/en.json index 2876089f3..e671c6f08 100644 --- a/dmp-frontend/src/assets/lang/en.json +++ b/dmp-frontend/src/assets/lang/en.json @@ -27,10 +27,8 @@ "TITLE": "Data Management Plans", "COLUMNS": { "NAME": "Name", - "ABBREVIATION": "Abbreviation", - "START": "Start", - "END": "End", - "ACTIONS": "Actions" + "PROJECT": "Project", + "CREATION-TIME": "Created" } }, "DATASET-LISTING": { @@ -92,6 +90,10 @@ "PERIOD-FROM": "Start", "PERIOD-TO": "End", "STATUS": "Status" + }, + "DMP": { + "LIKE": "Search", + "PROJECTS": "Projects" } } } \ No newline at end of file