From 0119c743babbd96968ff93947c715badaeb1fc24 Mon Sep 17 00:00:00 2001 From: Silviu Popa Date: Thu, 24 Sep 2020 18:14:19 +0300 Subject: [PATCH] [ACA-3643] - add completedBy filter on tasks (#5924) * [ACA-3643] - add completedBy filter on tasks * send user id as query parameter * preselect users * rebase and reset filter Co-authored-by: Silviu Popa --- .../src/lib/i18n/en.json | 7 +++-- .../edit-task-filter-cloud.component.html | 10 +++++++ .../edit-task-filter-cloud.component.ts | 27 +++++++++++++++++-- .../task-filters/models/filter-cloud.model.ts | 5 ++++ .../task-filters/task-filters-cloud.module.ts | 4 ++- .../components/task-list-cloud.component.ts | 7 ++++- .../task-list/models/filter-cloud-model.ts | 2 ++ 7 files changed, 56 insertions(+), 6 deletions(-) diff --git a/lib/process-services-cloud/src/lib/i18n/en.json b/lib/process-services-cloud/src/lib/i18n/en.json index 551ce964be..3038e0f7a2 100644 --- a/lib/process-services-cloud/src/lib/i18n/en.json +++ b/lib/process-services-cloud/src/lib/i18n/en.json @@ -11,6 +11,7 @@ "STATUS": "Status", "START_DATE": "Start Date", "COMPLETED_DATE": "Completed Date", + "COMPLETED_BY": "Completed By", "ID": "Id", "INITIATOR": "Initiator", "APP_NAME": "Application Name", @@ -89,7 +90,8 @@ "LAST_MODIFIED": "Last Modified", "DUE_DATE": "Due Date", "CREATED": "Created", - "JSON_CELL": "Json" + "JSON_CELL": "Json", + "COMPLETED_BY": "Completed By" }, "LIST": { "MESSAGES": { @@ -142,7 +144,8 @@ "OWNER": "Owner", "DUE_DATE": "DueDate", "SORT": "Sort", - "START_DATE": "StartDate" + "START_DATE": "StartDate", + "COMPLETED_BY": "Completed By" }, "DIALOG": { "TITLE": "Save filter as", diff --git a/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filter-cloud.component.html b/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filter-cloud.component.html index 29f4c5da44..e55abfdb1a 100644 --- a/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filter-cloud.component.html +++ b/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filter-cloud.component.html @@ -73,6 +73,16 @@ [options]="taskFilterProperty.dateFilterOptions" (dateTypeChange)="onDateTypeChange($event, taskFilterProperty)" (dateChanged)="onDateRangeFilterChanged($event, taskFilterProperty)"> + +
+ +
diff --git a/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filter-cloud.component.ts b/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filter-cloud.component.ts index 803c0ec99f..30ba4310e4 100644 --- a/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filter-cloud.component.ts +++ b/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filter-cloud.component.ts @@ -20,14 +20,14 @@ import { AbstractControl, FormGroup, FormBuilder } from '@angular/forms'; import { DateAdapter } from '@angular/material/core'; import { MatDialog } from '@angular/material/dialog'; import { debounceTime, filter, takeUntil, finalize, switchMap } from 'rxjs/operators'; -import { Subject, Observable } from 'rxjs'; +import { Subject, Observable, of } from 'rxjs'; import moment from 'moment-es6'; import { Moment } from 'moment'; import { TaskFilterCloudModel, TaskFilterProperties, FilterOptions, TaskFilterAction } from './../models/filter-cloud.model'; import { TaskFilterCloudService } from '../services/task-filter-cloud.service'; import { TaskFilterDialogCloudComponent } from './task-filter-dialog-cloud.component'; -import { TranslationService, UserPreferencesService, UserPreferenceValues } from '@alfresco/adf-core'; +import { TranslationService, UserPreferencesService, UserPreferenceValues, IdentityUserModel, IdentityUserService } from '@alfresco/adf-core'; import { AppsProcessCloudService } from '../../../app/services/apps-process-cloud.service'; import { ApplicationInstanceModel } from '../../../app/models/application-instance.model'; import { DateCloudFilterType, DateRangeFilter } from '../../../models/date-cloud-filter.model'; @@ -140,6 +140,7 @@ export class EditTaskFilterCloudComponent implements OnInit, OnChanges, OnDestro private dateAdapter: DateAdapter, private userPreferencesService: UserPreferencesService, private appsProcessCloudService: AppsProcessCloudService, + private identityUserService: IdentityUserService, private taskCloudService: TaskCloudService) { } @@ -352,6 +353,10 @@ export class EditTaskFilterCloudComponent implements OnInit, OnChanges, OnDestro ); } + onChangedUser(users: IdentityUserModel[], userProperty: TaskFilterProperties) { + this.getPropertyController(userProperty).setValue(users[0]?.username); + } + hasError(property: TaskFilterProperties): boolean { return this.getPropertyController(property).errors && this.getPropertyController(property).errors.invalid; } @@ -507,6 +512,10 @@ export class EditTaskFilterCloudComponent implements OnInit, OnChanges, OnDestro return property.type === 'checkbox'; } + isUserSelectType(property: TaskFilterProperties): boolean { + return property.type === 'people'; + } + isDisabledAction(action: TaskFilterAction): boolean { return this.isDisabledForDefaultFilters(action) ? true : this.hasFormChanged(action); } @@ -532,6 +541,13 @@ export class EditTaskFilterCloudComponent implements OnInit, OnChanges, OnDestro return false; } + getUserByUsername(username: string): Observable { + if (username) { + return this.identityUserService.findUserByUsername(username); + } + return of([]); + } + createFilterActions(): TaskFilterAction[] { return [ new TaskFilterAction({ @@ -690,6 +706,13 @@ export class EditTaskFilterCloudComponent implements OnInit, OnChanges, OnDestro DateCloudFilterType.NEXT_7_DAYS, DateCloudFilterType.RANGE ] + }), + new TaskFilterProperties({ + label: 'ADF_CLOUD_EDIT_TASK_FILTER.LABEL.COMPLETED_BY', + type: 'people', + key: 'completedBy', + value: this.getUserByUsername(currentTaskFilter.completedBy), + selectionMode: 'single' }) ]; } diff --git a/lib/process-services-cloud/src/lib/task/task-filters/models/filter-cloud.model.ts b/lib/process-services-cloud/src/lib/task/task-filters/models/filter-cloud.model.ts index 7911c1912c..6420149d0c 100644 --- a/lib/process-services-cloud/src/lib/task/task-filters/models/filter-cloud.model.ts +++ b/lib/process-services-cloud/src/lib/task/task-filters/models/filter-cloud.model.ts @@ -17,6 +17,7 @@ import { DateCloudFilterType } from '../../../models/date-cloud-filter.model'; import { DateRangeFilterService } from '../../../common/date-range-filter/date-range-filter.service'; +import { ComponentSelectionMode } from '../../../types'; export class TaskFilterCloudModel { id: string; @@ -43,6 +44,7 @@ export class TaskFilterCloudModel { standalone: boolean; lastModifiedFrom: Date; lastModifiedTo: Date; + completedBy: string; private _dueDateFrom: string; private _dueDateTo: string; @@ -76,6 +78,7 @@ export class TaskFilterCloudModel { this.standalone = obj.standalone || null; this.lastModifiedFrom = obj.lastModifiedFrom || null; this.lastModifiedTo = obj.lastModifiedTo || null; + this.completedBy = obj.completedBy || null; } } @@ -159,6 +162,7 @@ export class TaskFilterProperties { attributes?: { [key: string]: string; }; options?: FilterOptions[]; dateFilterOptions?: DateCloudFilterType[]; + selectionMode?: ComponentSelectionMode; constructor(obj?: any) { if (obj) { @@ -169,6 +173,7 @@ export class TaskFilterProperties { this.attributes = obj.attributes || null; this.options = obj.options || null; this.dateFilterOptions = obj.dateFilterOptions || null; + this.selectionMode = obj.selectionMode || null; } } } diff --git a/lib/process-services-cloud/src/lib/task/task-filters/task-filters-cloud.module.ts b/lib/process-services-cloud/src/lib/task/task-filters/task-filters-cloud.module.ts index 0e2d07313e..8016a51076 100644 --- a/lib/process-services-cloud/src/lib/task/task-filters/task-filters-cloud.module.ts +++ b/lib/process-services-cloud/src/lib/task/task-filters/task-filters-cloud.module.ts @@ -28,6 +28,7 @@ import { TaskFilterDialogCloudComponent } from './components/task-filter-dialog- import { AppListCloudModule } from './../../app/app-list-cloud.module'; import { DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core'; import { ProcessCommonModule } from '../../common/process-common.module'; +import { PeopleCloudModule } from '../../people/people-cloud.module'; @NgModule({ imports: [ @@ -39,7 +40,8 @@ import { ProcessCommonModule } from '../../common/process-common.module'; MaterialModule, AppListCloudModule, CoreModule, - ProcessCommonModule + ProcessCommonModule, + PeopleCloudModule ], declarations: [TaskFiltersCloudComponent, EditTaskFilterCloudComponent, TaskFilterDialogCloudComponent], exports: [TaskFiltersCloudComponent, EditTaskFilterCloudComponent], diff --git a/lib/process-services-cloud/src/lib/task/task-list/components/task-list-cloud.component.ts b/lib/process-services-cloud/src/lib/task/task-list/components/task-list-cloud.component.ts index 6f32144ce0..215c890acb 100644 --- a/lib/process-services-cloud/src/lib/task/task-list/components/task-list-cloud.component.ts +++ b/lib/process-services-cloud/src/lib/task/task-list/components/task-list-cloud.component.ts @@ -114,6 +114,10 @@ export class TaskListCloudComponent extends DataTableSchema implements OnChanges @Input() priority: number; + /** Filter the tasks. Display only tasks with createdBy equal to the supplied value. */ + @Input() + completedBy: number; + /** Filter the tasks. Display only the tasks that belong to a process in case is false or tasks that doesn't belong to a process in case of true. */ @Input() standalone: boolean = false; @@ -365,7 +369,8 @@ export class TaskListCloudComponent extends DataTableSchema implements OnChanges maxItems: this.size, skipCount: this.skipCount, sorting: this.sorting, - standalone: this.standalone + standalone: this.standalone, + completedBy: this.completedBy }; return new TaskQueryCloudRequestModel(requestNode); } diff --git a/lib/process-services-cloud/src/lib/task/task-list/models/filter-cloud-model.ts b/lib/process-services-cloud/src/lib/task/task-list/models/filter-cloud-model.ts index fb6fcf1252..876d589bf8 100644 --- a/lib/process-services-cloud/src/lib/task/task-list/models/filter-cloud-model.ts +++ b/lib/process-services-cloud/src/lib/task/task-list/models/filter-cloud-model.ts @@ -39,6 +39,7 @@ export class TaskQueryCloudRequestModel { processDefinitionName?: string; processInstanceId?: string; status?: string; + completedBy?: string; maxItems: number; skipCount: number; sorting?: TaskListCloudSortingModel[]; @@ -66,6 +67,7 @@ export class TaskQueryCloudRequestModel { this.processDefinitionName = obj.processDefinitionName; this.processInstanceId = obj.processInstanceId; this.status = obj.status; + this.completedBy = obj.completedBy; this.maxItems = obj.maxItems; this.skipCount = obj.skipCount; this.sorting = obj.sorting;