| /** |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| import {Component, EventEmitter, Input, OnInit, Output, ViewChild} from '@angular/core'; |
| import {TaskDefinition} from '../../../../services/portfolio/domain/task-definition.model'; |
| import {TdStepComponent} from '@covalent/core'; |
| import {AbstractControl, FormArray, FormBuilder, FormGroup, Validators} from '@angular/forms'; |
| import {ActionOption} from '../../../../common/domain/action-option.model'; |
| import {WorkflowAction} from '../../../../services/portfolio/domain/individuallending/workflow-action.model'; |
| import {FimsValidators} from '../../../../common/validator/validators'; |
| |
| @Component({ |
| selector: 'fims-product-task-form-component', |
| templateUrl: './form.component.html' |
| }) |
| export class ProductTaskFormComponent implements OnInit { |
| |
| @Input('task') set task(task: TaskDefinition){ |
| this.prepareDetailForm(task); |
| }; |
| |
| @Input('editMode') editMode: boolean; |
| |
| @Output('onSave') onSave = new EventEmitter<TaskDefinition>(); |
| |
| @Output('onCancel') onCancel = new EventEmitter<void>(); |
| |
| @ViewChild('detailsStep') detailsStep: TdStepComponent; |
| |
| detailForm: FormGroup; |
| |
| actionOptions: ActionOption[] = [ |
| { type: 'OPEN', label: 'can be opened' }, |
| { type: 'DENY', label: 'can be denied' }, |
| { type: 'APPROVE', label: 'can be approved' }, |
| { type: 'DISBURSE', label: 'can be disbursed' }, |
| { type: 'WRITE_OFF', label: 'can be written off' }, |
| { type: 'CLOSE', label: 'can be closed' }, |
| { type: 'RECOVER', label: 'can recovered' }, |
| { type: 'ACCEPT_PAYMENT', label: 'can be repayed' }, |
| ]; |
| |
| constructor(private formBuilder: FormBuilder) {} |
| |
| ngOnInit(): void { |
| this.openDetailsStep(); |
| } |
| |
| openDetailsStep(): void { |
| this.detailsStep.open(); |
| } |
| |
| private prepareDetailForm(task: TaskDefinition) { |
| this.detailForm = this.formBuilder.group({ |
| identifier: [task.identifier, [Validators.required, Validators.minLength(3), Validators.maxLength(32), FimsValidators.urlSafe]], |
| name: [task.name, [Validators.required]], |
| description: [task.description, [Validators.required]], |
| actions: this.initActions(task.actions), |
| fourEyes: [task.fourEyes, [Validators.required]], |
| mandatory: [task.mandatory, [Validators.required]], |
| }); |
| } |
| |
| private initActions(values: string[]): FormArray { |
| const formControls: FormGroup[] = []; |
| values.forEach(value => formControls.push(this.initAction(value))); |
| return this.formBuilder.array(formControls); |
| } |
| |
| private initAction(value?: string): FormGroup { |
| return this.formBuilder.group({ |
| action: [value ? value : '', Validators.required] |
| }); |
| } |
| |
| addAction(): void { |
| const actions: FormArray = this.detailForm.get('actions') as FormArray; |
| actions.push(this.initAction()); |
| } |
| |
| removeAction(index: number): void { |
| const actions: FormArray = this.detailForm.get('actions') as FormArray; |
| actions.removeAt(index); |
| } |
| |
| get actions(): AbstractControl[] { |
| const actions: FormArray = this.detailForm.get('actions') as FormArray; |
| return actions.controls; |
| } |
| |
| save(): void { |
| const actions: any[] = this.detailForm.get('actions').value; |
| const rawActions: WorkflowAction[] = []; |
| actions.forEach(action => rawActions.push(action.action)); |
| |
| const task: TaskDefinition = { |
| identifier: this.detailForm.get('identifier').value, |
| name: this.detailForm.get('name').value, |
| description: this.detailForm.get('description').value, |
| actions: rawActions, |
| fourEyes: this.detailForm.get('fourEyes').value, |
| mandatory: this.detailForm.get('mandatory').value |
| }; |
| this.onSave.emit(task); |
| } |
| |
| cancel(): void { |
| this.onCancel.emit(); |
| } |
| |
| } |