diff --git a/ng2-components/ng2-activiti-processlist/src/components/activiti-process-instance-tasks.component.ts b/ng2-components/ng2-activiti-processlist/src/components/activiti-process-instance-tasks.component.ts
index 15de210f0c..e7848282c6 100644
--- a/ng2-components/ng2-activiti-processlist/src/components/activiti-process-instance-tasks.component.ts
+++ b/ng2-components/ng2-activiti-processlist/src/components/activiti-process-instance-tasks.component.ts
@@ -144,7 +144,7 @@ export class ActivitiProcessInstanceTasks implements OnInit, OnChanges {
? user.firstName + ' ' : '') +
user.lastName;
}
- return '';
+ return 'Nobody';
}
getFormatDate(value, format: string) {
diff --git a/ng2-components/ng2-activiti-tasklist/src/components/activiti-task-details.component.html b/ng2-components/ng2-activiti-tasklist/src/components/activiti-task-details.component.html
index dde8190e57..c59d74e9c8 100644
--- a/ng2-components/ng2-activiti-tasklist/src/components/activiti-task-details.component.html
+++ b/ng2-components/ng2-activiti-tasklist/src/components/activiti-task-details.component.html
@@ -9,7 +9,10 @@
{{taskDetails.name}}
-
+
-
-
+
+
+ {{ 'TASK_DETAILS.MESSAGES.CLAIM' | translate }}
+
diff --git a/ng2-components/ng2-activiti-tasklist/src/components/activiti-task-details.component.ts b/ng2-components/ng2-activiti-tasklist/src/components/activiti-task-details.component.ts
index 9c1a85a846..6a5079bd9c 100644
--- a/ng2-components/ng2-activiti-tasklist/src/components/activiti-task-details.component.ts
+++ b/ng2-components/ng2-activiti-tasklist/src/components/activiti-task-details.component.ts
@@ -178,6 +178,10 @@ export class ActivitiTaskDetails implements OnInit, OnChanges {
}
}
+ isAssignedToMe(): boolean {
+ return this.taskDetails.assignee ? true : false;
+ }
+
/**
* Retrieve the next open task
* @param processInstanceId
@@ -243,4 +247,8 @@ export class ActivitiTaskDetails implements OnInit, OnChanges {
closeErrorDialog(): void {
this.errorDialog.nativeElement.close();
}
+
+ onClaimTask(taskId: string) {
+ this.loadDetails(taskId);
+ }
}
diff --git a/ng2-components/ng2-activiti-tasklist/src/components/activiti-task-header.component.html b/ng2-components/ng2-activiti-tasklist/src/components/activiti-task-header.component.html
index 9cb0f62abd..e0ee454c12 100644
--- a/ng2-components/ng2-activiti-tasklist/src/components/activiti-task-header.component.html
+++ b/ng2-components/ng2-activiti-tasklist/src/components/activiti-task-header.component.html
@@ -15,5 +15,10 @@
+
+
+
diff --git a/ng2-components/ng2-activiti-tasklist/src/components/activiti-task-header.component.spec.ts b/ng2-components/ng2-activiti-tasklist/src/components/activiti-task-header.component.spec.ts
index ebb1263b7e..2ad4311c22 100644
--- a/ng2-components/ng2-activiti-tasklist/src/components/activiti-task-header.component.spec.ts
+++ b/ng2-components/ng2-activiti-tasklist/src/components/activiti-task-header.component.spec.ts
@@ -24,9 +24,11 @@ import { ActivitiTaskHeader } from './activiti-task-header.component';
import { TranslationMock } from './../assets/translation.service.mock';
import { taskDetailsMock } from './../assets/task-details.mock';
import { TaskDetailsModel } from '../models/task-details.model';
+import { ActivitiTaskListService } from './../services/activiti-tasklist.service';
describe('ActivitiTaskHeader', () => {
+ let service: ActivitiTaskListService;
let componentHandler: any;
let component: ActivitiTaskHeader;
let fixture: ComponentFixture;
@@ -40,7 +42,8 @@ describe('ActivitiTaskHeader', () => {
ActivitiTaskHeader
],
providers: [
- { provide: AlfrescoTranslationService, useClass: TranslationMock }
+ { provide: AlfrescoTranslationService, useClass: TranslationMock },
+ ActivitiTaskListService
]
}).compileComponents();
}));
@@ -49,6 +52,7 @@ describe('ActivitiTaskHeader', () => {
fixture = TestBed.createComponent(ActivitiTaskHeader);
component = fixture.componentInstance;
+ service = fixture.debugElement.injector.get(ActivitiTaskListService);
component.taskDetails = new TaskDetailsModel(taskDetailsMock);
@@ -78,6 +82,13 @@ describe('ActivitiTaskHeader', () => {
expect(valueEl.nativeElement.innerText).toBe('TASK_DETAILS.ASSIGNEE.NONE');
});
+ it('should display the claim button if no assignee', () => {
+ component.taskDetails.assignee = null;
+ fixture.detectChanges();
+ let valueEl = fixture.debugElement.query(By.css('[data-automation-id="header-claim-button"]'));
+ expect(valueEl.nativeElement.innerText).toBe('TASK_DETAILS.BUTTON.CLAIM');
+ });
+
it('should display due date', () => {
component.taskDetails.dueDate = '2016-11-03T15:25:42.749+0000';
fixture.detectChanges();
diff --git a/ng2-components/ng2-activiti-tasklist/src/components/activiti-task-header.component.ts b/ng2-components/ng2-activiti-tasklist/src/components/activiti-task-header.component.ts
index 4856dba405..dc1a38d3cc 100644
--- a/ng2-components/ng2-activiti-tasklist/src/components/activiti-task-header.component.ts
+++ b/ng2-components/ng2-activiti-tasklist/src/components/activiti-task-header.component.ts
@@ -15,9 +15,10 @@
* limitations under the License.
*/
-import { Component, Input } from '@angular/core';
+import { Component, Input, Output, EventEmitter } from '@angular/core';
import { AlfrescoTranslationService } from 'ng2-alfresco-core';
import { TaskDetailsModel } from '../models/task-details.model';
+import { ActivitiTaskListService } from './../services/activiti-tasklist.service';
@Component({
selector: 'activiti-task-header',
@@ -33,7 +34,11 @@ export class ActivitiTaskHeader {
@Input()
taskDetails: TaskDetailsModel;
- constructor(private translate: AlfrescoTranslationService) {
+ @Output()
+ claim: EventEmitter = new EventEmitter();
+
+ constructor(private translate: AlfrescoTranslationService,
+ private activitiTaskService: ActivitiTaskListService) {
if (translate) {
translate.addTranslationFolder('ng2-activiti-tasklist', 'node_modules/ng2-activiti-tasklist/src');
}
@@ -42,4 +47,16 @@ export class ActivitiTaskHeader {
public hasAssignee(): boolean {
return (this.taskDetails && this.taskDetails.assignee) ? true : false;
}
+
+ isAssignedToMe(): boolean {
+ return this.taskDetails.assignee ? true : false;
+ }
+
+ claimTask(taskId: string) {
+ this.activitiTaskService.claimTask(taskId).subscribe(
+ (res: any) => {
+ console.log('Task claimed');
+ this.claim.emit(taskId);
+ });
+ }
}
diff --git a/ng2-components/ng2-activiti-tasklist/src/i18n/en.json b/ng2-components/ng2-activiti-tasklist/src/i18n/en.json
index f01705e4a9..5630564c2c 100644
--- a/ng2-components/ng2-activiti-tasklist/src/i18n/en.json
+++ b/ng2-components/ng2-activiti-tasklist/src/i18n/en.json
@@ -14,10 +14,12 @@
"CHECKLIST": "Checklist"
},
"BUTTON": {
- "COMPLETE": "Complete"
+ "COMPLETE": "Complete",
+ "CLAIM": "Claim"
},
"MESSAGES": {
- "NONE": "No task details found."
+ "NONE": "No task details found.",
+ "CLAIM": "To work on this task, you need to claim it first. You can do that by pressing the Claim button above."
},
"FORM": {
"NONE": "No form."
diff --git a/ng2-components/ng2-activiti-tasklist/src/i18n/it.json b/ng2-components/ng2-activiti-tasklist/src/i18n/it.json
index f75fe405d4..8d2e557e10 100644
--- a/ng2-components/ng2-activiti-tasklist/src/i18n/it.json
+++ b/ng2-components/ng2-activiti-tasklist/src/i18n/it.json
@@ -13,8 +13,13 @@
"COMMENTS": "Commenti",
"CHECKLIST": "Checklist"
},
+ "BUTTON": {
+ "COMPLETE": "Completa",
+ "CLAIM": "Richiedi"
+ },
"MESSAGES": {
- "NONE": "Nessun dettaglio task trovato."
+ "NONE": "Nessun dettaglio task trovato.",
+ "CLAIM": "Per lavorare con questo task, hai bisogno di richiederlo prima. Per richiedere il task basta premere il tasto Richiedi"
},
"FORM": {
"NONE": "Nessuna form."
diff --git a/ng2-components/ng2-activiti-tasklist/src/models/task-details.model.ts b/ng2-components/ng2-activiti-tasklist/src/models/task-details.model.ts
index 7407656360..83e5df4ee4 100644
--- a/ng2-components/ng2-activiti-tasklist/src/models/task-details.model.ts
+++ b/ng2-components/ng2-activiti-tasklist/src/models/task-details.model.ts
@@ -61,7 +61,7 @@ export class TaskDetailsModel {
this.id = obj && obj.id || null;
this.name = obj && obj.name || null;
this.priority = obj && obj.priority;
- this.assignee = new User(obj.assignee);
+ this.assignee = obj.assignee ? new User(obj.assignee) : null;
this.adhocTaskCanBeReassigned = obj && obj.adhocTaskCanBeReassigned;
this.category = obj && obj.category || null;
this.created = obj && obj.created || null;
diff --git a/ng2-components/ng2-activiti-tasklist/src/services/activiti-tasklist.service.spec.ts b/ng2-components/ng2-activiti-tasklist/src/services/activiti-tasklist.service.spec.ts
index b42bdcef6d..c8c1540283 100644
--- a/ng2-components/ng2-activiti-tasklist/src/services/activiti-tasklist.service.spec.ts
+++ b/ng2-components/ng2-activiti-tasklist/src/services/activiti-tasklist.service.spec.ts
@@ -513,4 +513,20 @@ describe('ActivitiTaskListService', () => {
});
});
+ it('should claim a task', (done) => {
+ let taskId = '111';
+
+ service.claimTask(taskId).subscribe(
+ (res: any) => {
+ done();
+ }
+ );
+
+ jasmine.Ajax.requests.mostRecent().respondWith({
+ 'status': 200,
+ contentType: 'application/json',
+ responseText: JSON.stringify({})
+ });
+ });
+
});
diff --git a/ng2-components/ng2-activiti-tasklist/src/services/activiti-tasklist.service.ts b/ng2-components/ng2-activiti-tasklist/src/services/activiti-tasklist.service.ts
index 269a5122b8..562684b217 100644
--- a/ng2-components/ng2-activiti-tasklist/src/services/activiti-tasklist.service.ts
+++ b/ng2-components/ng2-activiti-tasklist/src/services/activiti-tasklist.service.ts
@@ -232,6 +232,15 @@ export class ActivitiTaskListService {
}).catch(this.handleError);
}
+ /**
+ * Claim a task
+ * @param id - taskId
+ */
+ claimTask(taskId: string): Observable {
+ return Observable.fromPromise(this.apiService.getInstance().activiti.taskApi.claimTask(taskId))
+ .catch(this.handleError);
+ }
+
private callApiTasksFiltered(requestNode: TaskQueryRequestRepresentationModel) {
return this.apiService.getInstance().activiti.taskApi.listTasks(requestNode);
}