From e3b7f5799d25d934e9e008b64f1e25b0b85bed31 Mon Sep 17 00:00:00 2001 From: Benura Abeywardena <43112139+BLasan@users.noreply.github.com> Date: Fri, 16 Oct 2020 20:50:39 +0530 Subject: [PATCH] feat: add create self service user (#1251) Fixes: #1234 --- .../client-actions.component.html | 1 + .../client-actions.component.ts | 6 +- .../create-self-service-user.component.html | 98 ++++++++++++++++ .../create-self-service-user.component.scss | 19 ++++ ...create-self-service-user.component.spec.ts | 25 +++++ .../create-self-service-user.component.ts | 106 ++++++++++++++++++ .../clients-view/clients-view.component.html | 2 +- .../clients-view/clients-view.component.ts | 1 + src/app/clients/clients.module.ts | 4 +- src/app/clients/clients.service.ts | 8 ++ .../client-actions.resolver.ts | 2 + 11 files changed, 268 insertions(+), 4 deletions(-) create mode 100644 src/app/clients/clients-view/client-actions/create-self-service-user/create-self-service-user.component.html create mode 100644 src/app/clients/clients-view/client-actions/create-self-service-user/create-self-service-user.component.scss create mode 100644 src/app/clients/clients-view/client-actions/create-self-service-user/create-self-service-user.component.spec.ts create mode 100644 src/app/clients/clients-view/client-actions/create-self-service-user/create-self-service-user.component.ts diff --git a/src/app/clients/clients-view/client-actions/client-actions.component.html b/src/app/clients/clients-view/client-actions/client-actions.component.html index bed88c9c7..5ee27468f 100644 --- a/src/app/clients/clients-view/client-actions/client-actions.component.html +++ b/src/app/clients/clients-view/client-actions/client-actions.component.html @@ -14,3 +14,4 @@ + diff --git a/src/app/clients/clients-view/client-actions/client-actions.component.ts b/src/app/clients/clients-view/client-actions/client-actions.component.ts index 638855923..4654002b0 100644 --- a/src/app/clients/clients-view/client-actions/client-actions.component.ts +++ b/src/app/clients/clients-view/client-actions/client-actions.component.ts @@ -28,7 +28,8 @@ export class ClientActionsComponent { 'Undo Rejection': boolean 'Add Charge': boolean 'Take Survey': boolean - 'Client Screen Reports': boolean + 'Client Screen Reports': boolean, + 'Create Self Service User': boolean } = { 'Assign Staff': false, 'Close': false, @@ -44,7 +45,8 @@ export class ClientActionsComponent { 'Undo Rejection': false, 'Add Charge': false, 'Take Survey': false, - 'Client Screen Reports': false + 'Client Screen Reports': false, + 'Create Self Service User': false }; /** diff --git a/src/app/clients/clients-view/client-actions/create-self-service-user/create-self-service-user.component.html b/src/app/clients/clients-view/client-actions/create-self-service-user/create-self-service-user.component.html new file mode 100644 index 000000000..9866c46c8 --- /dev/null +++ b/src/app/clients/clients-view/client-actions/create-self-service-user/create-self-service-user.component.html @@ -0,0 +1,98 @@ +
+ + + +
+ + + +
+ + + User Name + + + User Name is required + + + + + First Name + + + First Name is required + + + + + Last Name + + + Last Name is required + + + + + Email + + + Email is required + + + Email should be a valid email. + + + + + Auto Generate Password + + +
+ + + Override Password Expire Policy ? + + + + +
+ + + Password + + + Password is required + + + + + Repeat Password + + + Repeat password is required + + + Passwords should be matched + + + + + Status + + + +
+ + + + + + + +
+ +
+ +
+ +
diff --git a/src/app/clients/clients-view/client-actions/create-self-service-user/create-self-service-user.component.scss b/src/app/clients/clients-view/client-actions/create-self-service-user/create-self-service-user.component.scss new file mode 100644 index 000000000..601ad90d6 --- /dev/null +++ b/src/app/clients/clients-view/client-actions/create-self-service-user/create-self-service-user.component.scss @@ -0,0 +1,19 @@ +.fa-question-circle { + color: #1abc9c; +} + +.fa { + display: inline-block; + font-family: FontAwesome; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} diff --git a/src/app/clients/clients-view/client-actions/create-self-service-user/create-self-service-user.component.spec.ts b/src/app/clients/clients-view/client-actions/create-self-service-user/create-self-service-user.component.spec.ts new file mode 100644 index 000000000..49b4dbb33 --- /dev/null +++ b/src/app/clients/clients-view/client-actions/create-self-service-user/create-self-service-user.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { CreateSelfServiceUserComponent } from './create-self-service-user.component'; + +describe('CreateSelfServiceUserComponent', () => { + let component: CreateSelfServiceUserComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ CreateSelfServiceUserComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(CreateSelfServiceUserComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/clients/clients-view/client-actions/create-self-service-user/create-self-service-user.component.ts b/src/app/clients/clients-view/client-actions/create-self-service-user/create-self-service-user.component.ts new file mode 100644 index 000000000..df36dd074 --- /dev/null +++ b/src/app/clients/clients-view/client-actions/create-self-service-user/create-self-service-user.component.ts @@ -0,0 +1,106 @@ +/** Angular Imports. */ +import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup, FormControl, Validators, AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { Subscription } from 'rxjs'; + +/** Client Services. */ +import { ClientsService } from 'app/clients/clients.service'; + +@Component({ + selector: 'mifosx-create-self-service-user', + templateUrl: './create-self-service-user.component.html', + styleUrls: ['./create-self-service-user.component.scss'] +}) +export class CreateSelfServiceUserComponent implements OnInit { + + createSelfServiceForm: FormGroup; + clientData: any; + hidePasswordField = true; + + constructor(private formBuilder: FormBuilder, + private route: ActivatedRoute, + private clientService: ClientsService, + private router: Router) { + this.route.data.subscribe((data: { clientActionData: any}) => { + this.clientData = data.clientActionData; + }); + } + + ngOnInit(): void { + this.createSelfServiceUser(); + this.sendPasswordToEmailChange(); + } + + /** + * Send Password To Email Change. + */ + sendPasswordToEmailChange() { + this.createSelfServiceForm.controls.sendPasswordToEmail.valueChanges.subscribe((value: any) => { + if (value === true) { + this.hidePasswordField = true; + this.createSelfServiceForm.removeControl('password'); + this.createSelfServiceForm.removeControl('repeatPassword'); + } else { + this.hidePasswordField = false; + this.createSelfServiceForm.addControl('password', new FormControl('', [Validators.required])); + this.createSelfServiceForm.addControl('repeatPassword', new FormControl('', [Validators.required, this.confirmPassword('password')])); + } + }); + } + + /** + * Create Self User Form. + */ + createSelfServiceUser() { + this.createSelfServiceForm = this.formBuilder.group({ + 'username': new FormControl('', [Validators.required]), + 'firstname': new FormControl(this.clientData.firstname, [Validators.required]), + 'lastname': new FormControl(this.clientData.lastname, [Validators.required]), + 'email': new FormControl('', [Validators.required, Validators.email]), + 'sendPasswordToEmail': new FormControl(true), + 'passwordNeverExpires': new FormControl(false), + 'status': new FormControl({value: this.clientData.subStatus.active ? 'Active' : 'Inactive', disabled: true}) + }); + } + + /** + * Submit form. + */ + submit() { + if (!this.createSelfServiceForm.get('passwordNeverExpires').value) { + this.createSelfServiceForm.removeControl('passwordNeverExpires'); + } + const clientId = this.clientData.id.toString(); + const selfServiceForm = this.createSelfServiceForm.value; + selfServiceForm.roles = [2], + selfServiceForm.isSelfServiceUser = true; + selfServiceForm.staffId = this.clientData.staffId; + selfServiceForm.clients = [clientId]; + selfServiceForm.officeId = this.clientData.officeId; + this.clientService.createSelfServiceUser(selfServiceForm).subscribe(() => { + this.router.navigate(['../../general'], { relativeTo: this.route }); + }); + } + + /** + * Confirm Change Password of Users + * @param controlNameToCompare Form Control Name to be compared. + */ + confirmPassword(controlNameToCompare: string): ValidatorFn { + return (c: AbstractControl): ValidationErrors|null => { + if (c.value == null || c.value.length === 0) { + return null; + } + const controlToCompare = c.root.get(controlNameToCompare); + if (controlToCompare) { + const subscription: Subscription = controlToCompare.valueChanges.subscribe(() => { + c.updateValueAndValidity(); + subscription.unsubscribe(); + }); + } + return controlToCompare && controlToCompare.value !== c.value ? {'notequal': true} : null; + }; + } + +} diff --git a/src/app/clients/clients-view/clients-view.component.html b/src/app/clients/clients-view/clients-view.component.html index eed7ba1b3..9efe8fe4d 100644 --- a/src/app/clients/clients-view/clients-view.component.html +++ b/src/app/clients/clients-view/clients-view.component.html @@ -106,7 +106,7 @@ - + diff --git a/src/app/clients/clients-view/clients-view.component.ts b/src/app/clients/clients-view/clients-view.component.ts index ce47075cb..10b4b410e 100644 --- a/src/app/clients/clients-view/clients-view.component.ts +++ b/src/app/clients/clients-view/clients-view.component.ts @@ -72,6 +72,7 @@ export class ClientsViewComponent implements OnInit { case 'Reactivate': case 'Undo Rejection': case 'Add Charge': + case 'Create Self Service User': case 'Client Screen Reports': this.router.navigate([`actions/${name}`], { relativeTo: this.route }); break; diff --git a/src/app/clients/clients.module.ts b/src/app/clients/clients.module.ts index fe162851d..96b470502 100644 --- a/src/app/clients/clients.module.ts +++ b/src/app/clients/clients.module.ts @@ -57,6 +57,7 @@ import { ClientPreviewStepComponent } from './client-stepper/client-preview-step import { ClientAddressStepComponent } from './client-stepper/client-address-step/client-address-step.component'; import { ClientFamilyMemberDialogComponent } from './client-stepper/client-family-members-step/client-family-member-dialog/client-family-member-dialog.component'; import { CaptureImageDialogComponent } from './clients-view/custom-dialogs/capture-image-dialog/capture-image-dialog.component'; +import { CreateSelfServiceUserComponent } from './clients-view/client-actions/create-self-service-user/create-self-service-user.component'; /** @@ -119,7 +120,8 @@ import { CaptureImageDialogComponent } from './clients-view/custom-dialogs/captu ClientPreviewStepComponent, ClientAddressStepComponent, ClientFamilyMemberDialogComponent, - CaptureImageDialogComponent + CaptureImageDialogComponent, + CreateSelfServiceUserComponent ], providers: [DatePipe] diff --git a/src/app/clients/clients.service.ts b/src/app/clients/clients.service.ts index 20a8b936c..8517aabc4 100644 --- a/src/app/clients/clients.service.ts +++ b/src/app/clients/clients.service.ts @@ -355,4 +355,12 @@ export class ClientsService { createNewSurvey(surveyId: Number, surveyData: any) { return this.http.post(`/surveys/scorecards/${surveyId}`, surveyData); } + + /** + * @param userData User Data. + */ + createSelfServiceUser(userData: any) { + return this.http.post(`/users`, userData); + } + } diff --git a/src/app/clients/common-resolvers/client-actions.resolver.ts b/src/app/clients/common-resolvers/client-actions.resolver.ts index 787ee707e..1e08c53af 100644 --- a/src/app/clients/common-resolvers/client-actions.resolver.ts +++ b/src/app/clients/common-resolvers/client-actions.resolver.ts @@ -51,6 +51,8 @@ export class ClientActionsResolver implements Resolve { case 'Accept Transfer': case 'Reject Transfer': return this.clientsService.getClientTransferProposalDate(clientId); + case 'Create Self Service User': + return this.clientsService.getClientData(clientId); default: return undefined; }