From 6f8e984d7531319f11a5a1a8871ca723361fd279 Mon Sep 17 00:00:00 2001 From: Vito Date: Wed, 12 Jul 2017 04:26:51 -0700 Subject: [PATCH] [ADF-923] Added check for only involved user cannot complete a task (#2068) * [ADF-923] Added check for only involved user cannot complete a task * [ADF-923] fix compilation error * [ADF-923] added review changes * [ADF-923] corrected mispelling --- ng2-components/ng2-activiti-form/README.md | 1 + .../activiti-form.component.spec.ts | 12 +- .../src/components/activiti-form.component.ts | 108 +++++++++--------- .../activiti-task-details.component.html | 5 +- .../activiti-task-details.component.ts | 11 +- .../no-task-detail-template.component.spec.ts | 2 +- 6 files changed, 81 insertions(+), 58 deletions(-) diff --git a/ng2-components/ng2-activiti-form/README.md b/ng2-components/ng2-activiti-form/README.md index 0ad4d016b1..854ea9ad26 100644 --- a/ng2-components/ng2-activiti-form/README.md +++ b/ng2-components/ng2-activiti-form/README.md @@ -157,6 +157,7 @@ The recommended set of properties can be found in the following table: | data | FormValues | | Custom form values map to be used with the rendered form. | | showTitle | boolean | true | Toggle rendering of the form title. | | showCompleteButton | boolean | true | Toggle rendering of the `Complete` outcome button. | +| disableCompleteButton | boolean | false | The `Complete` outcome button is showed but it will be disabled. | | showSaveButton | boolean | true | Toggle rendering of the `Save` outcome button. | | readOnly | boolean | false | Toggle readonly state of the form. Enforces all form widgets render readonly if enabled. | | showRefreshButton | boolean | true | Toggle rendering of the `Refresh` button. | diff --git a/ng2-components/ng2-activiti-form/src/components/activiti-form.component.spec.ts b/ng2-components/ng2-activiti-form/src/components/activiti-form.component.spec.ts index 6c9fbf4548..5732ada8b3 100644 --- a/ng2-components/ng2-activiti-form/src/components/activiti-form.component.spec.ts +++ b/ng2-components/ng2-activiti-form/src/components/activiti-form.component.spec.ts @@ -795,6 +795,17 @@ describe('ActivitiForm', () => { expect(formComponent.isOutcomeButtonEnabled(outcome)).toBeFalsy(); }); + it('should disable complete outcome button when disableCompleteButton is true', () => { + let formModel = new FormModel(); + formComponent.form = formModel; + formComponent.disableCompleteButton = true; + + expect(formModel.isValid).toBeTruthy(); + let completeOutcome = formComponent.form.outcomes.find(outcome => outcome.name === FormOutcomeModel.COMPLETE_ACTION); + + expect(formComponent.isOutcomeButtonEnabled(completeOutcome)).toBeFalsy(); + }); + it('should raise [executeOutcome] event for formService', (done) => { formService.executeOutcome.subscribe(() => { done(); @@ -834,5 +845,4 @@ describe('ActivitiForm', () => { expect(labelField.value).toBe('option_1'); expect(radioField.value).toBe('option_1'); }); - }); diff --git a/ng2-components/ng2-activiti-form/src/components/activiti-form.component.ts b/ng2-components/ng2-activiti-form/src/components/activiti-form.component.ts index 4a5f05c594..b3eb06fb94 100644 --- a/ng2-components/ng2-activiti-form/src/components/activiti-form.component.ts +++ b/ng2-components/ng2-activiti-form/src/components/activiti-form.component.ts @@ -24,7 +24,7 @@ import { NodeService } from './../services/node.service'; import { ContentLinkModel } from './widgets/core/content-link.model'; import { FormFieldModel, FormModel, FormOutcomeEvent, FormOutcomeModel, FormValues } from './widgets/core/index'; -import { WidgetVisibilityService } from './../services/widget-visibility.service'; +import { WidgetVisibilityService } from './../services/widget-visibility.service'; declare var componentHandler: any; @@ -73,6 +73,9 @@ export class ActivitiForm implements OnInit, AfterViewChecked, OnChanges { @Input() showCompleteButton: boolean = true; + @Input() + disableCompleteButton: boolean = false; + @Input() showSaveButton: boolean = true; @@ -141,6 +144,9 @@ export class ActivitiForm implements OnInit, AfterViewChecked, OnChanges { if (outcome.name === FormOutcomeModel.SAVE_ACTION) { return true; } + if (outcome.name === FormOutcomeModel.COMPLETE_ACTION) { + return this.disableCompleteButton ? false : this.form.isValid; + } return this.form.isValid; } return false; @@ -152,7 +158,7 @@ export class ActivitiForm implements OnInit, AfterViewChecked, OnChanges { return this.showCompleteButton; } if (isFormReadOnly) { - return outcome.isSelected ; + return outcome.isSelected; } if (outcome.name === FormOutcomeModel.SAVE_ACTION) { return this.showSaveButton; @@ -312,22 +318,22 @@ export class ActivitiForm implements OnInit, AfterViewChecked, OnChanges { getFormByTaskId(taskId: string): Promise { return new Promise((resolve, reject) => { - this.loadFormProcessVariables(this.taskId).then(_ => { + this.loadFormProcessVariables(this.taskId).then(_ => { this.formService .getTaskForm(taskId) .subscribe( - form => { - this.form = new FormModel(form, this.data, this.readOnly, this.formService); - this.onFormLoaded(this.form); - resolve(this.form); - }, - error => { - this.handleError(error); - // reject(error); - resolve(null); - } + form => { + this.form = new FormModel(form, this.data, this.readOnly, this.formService); + this.onFormLoaded(this.form); + resolve(this.form); + }, + error => { + this.handleError(error); + // reject(error); + resolve(null); + } ); - }); + }); }); } @@ -335,14 +341,14 @@ export class ActivitiForm implements OnInit, AfterViewChecked, OnChanges { this.formService .getFormDefinitionById(formId) .subscribe( - form => { - this.formName = form.name; - this.form = this.parseForm(form); - this.onFormLoaded(this.form); - }, - (error) => { - this.handleError(error); - } + form => { + this.formName = form.name; + this.form = this.parseForm(form); + this.onFormLoaded(this.form); + }, + (error) => { + this.handleError(error); + } ); } @@ -350,20 +356,20 @@ export class ActivitiForm implements OnInit, AfterViewChecked, OnChanges { this.formService .getFormDefinitionByName(formName) .subscribe( - id => { - this.formService.getFormDefinitionById(id).subscribe( - form => { - this.form = this.parseForm(form); - this.onFormLoaded(this.form); - }, - (error) => { - this.handleError(error); - } - ); - }, - (error) => { - this.handleError(error); - } + id => { + this.formService.getFormDefinitionById(id).subscribe( + form => { + this.form = this.parseForm(form); + this.onFormLoaded(this.form); + }, + (error) => { + this.handleError(error); + } + ); + }, + (error) => { + this.handleError(error); + } ); } @@ -372,11 +378,11 @@ export class ActivitiForm implements OnInit, AfterViewChecked, OnChanges { this.formService .saveTaskForm(this.form.taskId, this.form.values) .subscribe( - () => { - this.onTaskSaved(this.form); - this.storeFormAsMetadata(); - }, - error => this.onTaskSavedError(this.form, error) + () => { + this.onTaskSaved(this.form); + this.storeFormAsMetadata(); + }, + error => this.onTaskSavedError(this.form, error) ); } } @@ -386,11 +392,11 @@ export class ActivitiForm implements OnInit, AfterViewChecked, OnChanges { this.formService .completeTaskForm(this.form.taskId, this.form.values, outcome) .subscribe( - () => { - this.onTaskCompleted(this.form); - this.storeFormAsMetadata(); - }, - error => this.onTaskCompletedError(this.form, error) + () => { + this.onTaskCompleted(this.form); + this.storeFormAsMetadata(); + }, + error => this.onTaskCompletedError(this.form, error) ); } } @@ -435,9 +441,9 @@ export class ActivitiForm implements OnInit, AfterViewChecked, OnChanges { private loadFormForEcmNode(nodeId: string): void { this.nodeService.getNodeMetadata(nodeId).subscribe(data => { - this.data = data.metadata; - this.loadFormFromActiviti(data.nodeType); - }, + this.data = data.metadata; + this.loadFormFromActiviti(data.nodeType); + }, this.handleError); } @@ -466,8 +472,8 @@ export class ActivitiForm implements OnInit, AfterViewChecked, OnChanges { private storeFormAsMetadata() { if (this.saveMetadata) { this.ecmModelService.createEcmTypeForActivitiForm(this.formName, this.form).subscribe(type => { - this.nodeService.createNodeMetadata(type.nodeType || type.entry.prefixedName, EcmModelService.MODEL_NAMESPACE, this.form.values, this.path, this.nameNode); - }, + this.nodeService.createNodeMetadata(type.nodeType || type.entry.prefixedName, EcmModelService.MODEL_NAMESPACE, this.form.values, this.path, this.nameNode); + }, (error) => { this.handleError(error); } 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 4019f99011..366659d3eb 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 @@ -36,13 +36,14 @@ -
+
-
+
{{ 'TASK_DETAILS.MESSAGES.CLAIM' | translate }}