From 4281a19c6c06b75e7d4c3eb556d09eb7f97e70c0 Mon Sep 17 00:00:00 2001 From: Jivjyot Singh Date: Sun, 14 Jul 2019 13:41:34 +0530 Subject: [PATCH] feat (clients) : add client identifier fixes: #260 --- src/app/clients/clients-routing.module.ts | 7 +- .../identities-tab.component.html | 84 +++++++++---------- .../identities-tab.component.ts | 76 +++++++++++++++-- src/app/clients/clients.service.ts | 10 +++ .../client-identifier-template.resolver.ts | 30 +++++++ .../form-dialog/form-dialog.component.html | 2 +- 6 files changed, 159 insertions(+), 50 deletions(-) create mode 100644 src/app/clients/common-resolvers/client-identifier-template.resolver.ts diff --git a/src/app/clients/clients-routing.module.ts b/src/app/clients/clients-routing.module.ts index 4839b34e1..c868868f1 100644 --- a/src/app/clients/clients-routing.module.ts +++ b/src/app/clients/clients-routing.module.ts @@ -33,6 +33,7 @@ import { ClientNotesResolver } from './common-resolvers/client-notes.resolver'; import { ClientDocumentsResolver } from './common-resolvers/client-document.resolver'; import { ClientDatatablesResolver } from './common-resolvers/client-datatables.resolver'; import { ClientDatatableResolver } from './common-resolvers/client-datatable.resolver'; +import { ClientIdentifierTemplateResolver } from './common-resolvers/client-identifier-template.resolver'; const routes: Routes = [ Route.withShell([{ @@ -98,7 +99,8 @@ const routes: Routes = [ path: 'identities', component: IdentitiesTabComponent, resolve: { - clientIdentities: ClientIdentitiesResolver + clientIdentities: ClientIdentitiesResolver, + clientIdentifierTemplate: ClientIdentifierTemplateResolver } }, { @@ -148,7 +150,8 @@ const routes: Routes = [ ClientNotesResolver, ClientDocumentsResolver, ClientDatatablesResolver, - ClientDatatableResolver + ClientDatatableResolver, + ClientIdentifierTemplateResolver ] }) export class ClientsRoutingModule { } diff --git a/src/app/clients/clients-view/identities-tab/identities-tab.component.html b/src/app/clients/clients-view/identities-tab/identities-tab.component.html index 3e6f54227..7e5268a32 100644 --- a/src/app/clients/clients-view/identities-tab/identities-tab.component.html +++ b/src/app/clients/clients-view/identities-tab/identities-tab.component.html @@ -1,62 +1,62 @@
- + -

Identities

+

Identities

- - +
- - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - + - + + - - -
Id - {{identity.id}} Id + {{identity.id}} Description {{identity.description}} Description {{identity.description}} type {{identity.documentType.name}} - type {{identity.documentType.name}} + Identity Documents -
- {{document.name}} - -
-
Identity Documents +
+ {{document.name}} + +
+
Status - {{(identity.status==='clientIdentifierStatusType.active')?'active':'inactive'}} Status + {{(identity.status==='clientIdentifierStatusType.active')?'active':'inactive'}} Actions - Actions + - -
+ + +
\ No newline at end of file diff --git a/src/app/clients/clients-view/identities-tab/identities-tab.component.ts b/src/app/clients/clients-view/identities-tab/identities-tab.component.ts index 36c5115ca..a00f64b10 100644 --- a/src/app/clients/clients-view/identities-tab/identities-tab.component.ts +++ b/src/app/clients/clients-view/identities-tab/identities-tab.component.ts @@ -2,10 +2,14 @@ import { Component, OnInit, ViewChild } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; import { MatTable } from '@angular/material/table'; import { MatDialog } from '@angular/material'; +import { FormfieldBase } from 'app/shared/form-dialog/formfield/model/formfield-base'; +import { InputBase } from 'app/shared/form-dialog/formfield/model/input-base'; +import { SelectBase } from 'app/shared/form-dialog/formfield/model/select-base'; /** Custom Components */ import { UploadDocumentDialogComponent } from '../upload-document-dialog/upload-document-dialog.component'; import { DeleteDialogComponent } from '../../../shared/delete-dialog/delete-dialog.component'; +import { FormDialogComponent } from 'app/shared/form-dialog/form-dialog.component'; /** Custom Services */ import { ClientsService } from '../../clients.service'; @@ -16,20 +20,24 @@ import { ClientsService } from '../../clients.service'; styleUrls: ['./identities-tab.component.scss'] }) export class IdentitiesTabComponent implements OnInit { + @ViewChild('identifiersTable') identifiersTable: MatTable; identitiesColumns: string[] = ['id', 'description', 'type', 'documents', 'status', 'actions']; clientIdentities: any; + clientIdentifierTemplate: any; + clientId: string; constructor(private route: ActivatedRoute, public dialog: MatDialog, private clientService: ClientsService) { - this.route.data.subscribe((data: { clientIdentities: any }) => { + this.clientId = this.route.parent.snapshot.paramMap.get('clientId'); + this.route.data.subscribe((data: { clientIdentities: any, clientIdentifierTemplate: any }) => { this.clientIdentities = data.clientIdentities; + this.clientIdentifierTemplate = data.clientIdentifierTemplate; }); } - ngOnInit() { - } + ngOnInit() { } download(parentEntityId: string, documentId: string) { this.clientService.downloadClientIdentificationDocument(parentEntityId, documentId).subscribe(res => { @@ -38,11 +46,68 @@ export class IdentitiesTabComponent implements OnInit { }); } + addIdentifier() { + const formfields: FormfieldBase[] = [ + new SelectBase({ + controlName: 'documentTypeId', + label: 'Document Type', + value: '', + options: { label: 'name', value: 'id', data: this.clientIdentifierTemplate.allowedDocumentTypes }, + required: true, + order: 1 + }), + new SelectBase({ + controlName: 'status', + label: 'Status', + value: '2', + options: { label: 'value', value: 'value', data: [{ value: 'Active' }, { value: 'Inactive' }] }, + required: true, + order: 2 + }), + new InputBase({ + controlName: 'documentKey', + label: 'Unique Id', + value: '', + type: 'text', + required: true, + order: 3 + }), + new InputBase({ + controlName: 'description', + label: 'Description', + value: '', + type: 'text', + order: 4 + }) + ]; + const data = { + title: 'Add Client Identifier', + formfields: formfields + }; + const addIdentifierDialogRef = this.dialog.open(FormDialogComponent, { data }); + addIdentifierDialogRef.afterClosed().subscribe((response: any) => { + if (response.data) { + this.clientService.addClientIdentifier(this.clientId, response.data.value).subscribe((res: any) => { + this.clientIdentities.push({ + id: res.resourceId, + description: response.data.value.description, + documentType: this.clientIdentifierTemplate.allowedDocumentTypes.filter((doc: any) => (doc.id === response.data.value.documentTypeId))[0], + documentKey: response.data.value.documentKey, + documents: [], + clientId: this.clientId, + status: (response.data.value.status === 'Active' ? 'clientIdentifierStatusType.active' : 'clientIdentifierStatusType.inactive') + }); + this.identifiersTable.renderRows(); + }); + } + }); + } + deleteIdentifier(clientId: string, identifierId: string, index: number) { - const deleteFamilyMemberDialogRef = this.dialog.open(DeleteDialogComponent, { + const deleteIdentifierDialogRef = this.dialog.open(DeleteDialogComponent, { data: { deleteContext: `identifier id:${identifierId}` } }); - deleteFamilyMemberDialogRef.afterClosed().subscribe((response: any) => { + deleteIdentifierDialogRef.afterClosed().subscribe((response: any) => { if (response.delete) { this.clientService.deleteClientIdentifier(clientId, identifierId).subscribe(res => { this.clientIdentities.splice(index, 1); @@ -74,4 +139,5 @@ export class IdentitiesTabComponent implements OnInit { } }); } + } diff --git a/src/app/clients/clients.service.ts b/src/app/clients/clients.service.ts index 0197640e0..23e927709 100644 --- a/src/app/clients/clients.service.ts +++ b/src/app/clients/clients.service.ts @@ -24,6 +24,7 @@ export class ClientsService { getClientTemplate(): Observable { return this.http.get('/clients/template'); } + getClientData(clientId: string) { return this.http.get(`/clients/${clientId}`); } @@ -32,6 +33,7 @@ export class ClientsService { const httpParams = new HttpParams().set('apptable', 'm_client'); return this.http.get(`/datatables`, { params: httpParams }); } + getClientDatatable(clientId: string, datatableName: string) { const httpParams = new HttpParams().set('genericResultSet', 'true'); return this.http.get(`/datatables/${datatableName}/${clientId}`, { params: httpParams }); @@ -81,6 +83,14 @@ export class ClientsService { return this.http.get(`/clients/${clientId}/identifiers`); } + getClientIdentifierTemplate(clientId: string) { + return this.http.get(`/clients/${clientId}/identifiers/template`); + } + + addClientIdentifier(clientId: string, identifierData: any) { + return this.http.post(`/clients/${clientId}/identifiers`, identifierData); + } + deleteClientIdentifier(clientId: string, identifierId: string) { return this.http.delete(`/clients/${clientId}/identifiers/${identifierId}`); } diff --git a/src/app/clients/common-resolvers/client-identifier-template.resolver.ts b/src/app/clients/common-resolvers/client-identifier-template.resolver.ts new file mode 100644 index 000000000..28f38cfee --- /dev/null +++ b/src/app/clients/common-resolvers/client-identifier-template.resolver.ts @@ -0,0 +1,30 @@ +/** Angular Imports */ +import { Injectable } from '@angular/core'; +import { Resolve, ActivatedRouteSnapshot } from '@angular/router'; + +/** rxjs Imports */ +import { Observable } from 'rxjs'; + + +/** Custom Services */ +import { ClientsService } from '../clients.service'; + +/** + * Client Identifier Template resolver. + */ +@Injectable() +export class ClientIdentifierTemplateResolver implements Resolve { + /** + * @param {ClientsService} ClientsService Clients service. + */ + constructor(private clientsService: ClientsService) { } + /** + * Returns the Client Identities data. + * @returns {Observable} + */ + resolve(route: ActivatedRouteSnapshot): Observable { + const clientId = route.parent.paramMap.get('clientId'); + return this.clientsService.getClientIdentifierTemplate(clientId); + } +} + diff --git a/src/app/shared/form-dialog/form-dialog.component.html b/src/app/shared/form-dialog/form-dialog.component.html index b753bbcb4..c8e52a410 100644 --- a/src/app/shared/form-dialog/form-dialog.component.html +++ b/src/app/shared/form-dialog/form-dialog.component.html @@ -10,5 +10,5 @@ - +