diff --git a/src/app/clients/clients-routing.module.ts b/src/app/clients/clients-routing.module.ts
index e7e394f69..38846748b 100644
--- a/src/app/clients/clients-routing.module.ts
+++ b/src/app/clients/clients-routing.module.ts
@@ -11,6 +11,7 @@ import { extract } from '../core/i18n/i18n.service';
import { ClientsComponent } from './clients.component';
import { ClientsViewComponent } from './clients-view/clients-view.component';
import { GeneralTabComponent } from './clients-view/general-tab/general-tab.component';
+import { FamilyMembersTabComponent } from './clients-view/family-members-tab/family-members-tab.component';
/** Custom Resolvers */
import { ClientsResolver } from './common-resolvers/clients.resolver';
@@ -18,6 +19,9 @@ import { ClientViewResolver } from './common-resolvers/client-view.resolver';
import { ClientAccountsResolver } from './common-resolvers/client-accounts.resolver';
import { ClientChargesResolver } from './common-resolvers/client-charges.resolver';
import { ClientSummaryResolver } from './common-resolvers/client-summary.resolver';
+import { ClientFamilyMembersResolver } from './common-resolvers/client-family-members.resolver';
+import { ClientFamilyMemberResolver } from './common-resolvers/client-family-member.resolver';
+import { ClientTemplateResolver } from './common-resolvers/client-template.resolver';
const routes: Routes = [
Route.withShell([{
@@ -36,7 +40,7 @@ const routes: Routes = [
component: ClientsViewComponent,
data: { title: extract('Clients View'), routeParamBreadcrumb: 'clientId' },
resolve: {
- clientViewData: ClientViewResolver
+ clientViewData: ClientViewResolver,
},
children: [
{
@@ -46,8 +50,19 @@ const routes: Routes = [
clientAccountsData: ClientAccountsResolver,
clientChargesData: ClientChargesResolver,
clientSummary: ClientSummaryResolver
- },
-
+ }
+ },
+ {
+ path: 'family-members',
+ children: [
+ {
+ path: '',
+ component: FamilyMembersTabComponent,
+ resolve: {
+ clientFamilyMembers: ClientFamilyMembersResolver
+ }
+ }
+ ]
}
]
}
@@ -64,7 +79,10 @@ const routes: Routes = [
ClientViewResolver,
ClientAccountsResolver,
ClientChargesResolver,
- ClientSummaryResolver
+ ClientSummaryResolver,
+ ClientFamilyMembersResolver,
+ ClientFamilyMemberResolver,
+ ClientTemplateResolver
]
})
export class ClientsRoutingModule { }
diff --git a/src/app/clients/clients-view/clients-view.component.html b/src/app/clients/clients-view/clients-view.component.html
index 8eeff756f..da06c310d 100644
--- a/src/app/clients/clients-view/clients-view.component.html
+++ b/src/app/clients/clients-view/clients-view.component.html
@@ -4,7 +4,8 @@
-
+
@@ -43,9 +44,12 @@
-
+
General
+
+ Family Members
+
diff --git a/src/app/clients/clients-view/clients-view.component.ts b/src/app/clients/clients-view/clients-view.component.ts
index 6ae13c578..44ab00355 100644
--- a/src/app/clients/clients-view/clients-view.component.ts
+++ b/src/app/clients/clients-view/clients-view.component.ts
@@ -13,19 +13,18 @@ import { ClientsService } from '../clients.service';
export class ClientsViewComponent implements OnInit {
clientViewData: any;
clientImage: any;
+ clientTemplate: any;
constructor(private route: ActivatedRoute,
private clientsService: ClientsService,
private _sanitizer: DomSanitizer) {
this.route.data.subscribe((data: { clientViewData: any }) => {
this.clientViewData = data.clientViewData;
});
-
}
ngOnInit() {
- this.clientsService.getClientProfileImage(this.clientViewData.id).subscribe(base64Image => {
+ this.clientsService.getClientProfileImage(this.clientViewData.id).subscribe((base64Image: any) => {
this.clientImage = this._sanitizer.bypassSecurityTrustResourceUrl(base64Image);
});
}
-
}
diff --git a/src/app/clients/clients-view/family-members-tab/family-members-tab.component.html b/src/app/clients/clients-view/family-members-tab/family-members-tab.component.html
new file mode 100644
index 000000000..2b1c7d6f5
--- /dev/null
+++ b/src/app/clients/clients-view/family-members-tab/family-members-tab.component.html
@@ -0,0 +1,47 @@
+
+
+ Family Members
+
+
+ Add
+
+
+
+
+
+
+ {{member.firstName+' '+member.middleName+' '+member.lastName}}
+
+
+ {{member.relationship}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ First Name : {{member.firstName}}
+ Middle Name : {{member.middleName}}
+ Last Name : {{member.lastName}}
+ Qualification : {{member.qualification}}
+ Mobile Number : {{member.mobileNumber}}
+ Age : {{member.age}}
+ Is Dependent : {{member.isDependent}}
+ Martial Status : {{member.maritalStatus}}
+ Gender : {{member.gender}}
+ Profession : {{member.profession}}
+ Date Of Birth : {{member.dateOfBirth|date}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/clients/clients-view/family-members-tab/family-members-tab.component.scss b/src/app/clients/clients-view/family-members-tab/family-members-tab.component.scss
new file mode 100644
index 000000000..bd6467910
--- /dev/null
+++ b/src/app/clients/clients-view/family-members-tab/family-members-tab.component.scss
@@ -0,0 +1,21 @@
+.tab-container {
+ padding:1%;
+ margin: 1%;
+
+ .family-member {
+ .family-member-actions{
+ margin-top: 1%;
+ button{
+ margin-right: 1%;
+ }
+ }
+ h3 {
+ margin: 1% auto;
+ }
+
+ p {
+ line-height: 30px;
+ margin-left: 2%;
+ }
+ }
+}
diff --git a/src/app/clients/clients-view/family-members-tab/family-members-tab.component.spec.ts b/src/app/clients/clients-view/family-members-tab/family-members-tab.component.spec.ts
new file mode 100644
index 000000000..e11fb37fb
--- /dev/null
+++ b/src/app/clients/clients-view/family-members-tab/family-members-tab.component.spec.ts
@@ -0,0 +1,25 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { FamilyMembersTabComponent } from './family-members-tab.component';
+
+describe('FamilyMembersTabComponent', () => {
+ let component: FamilyMembersTabComponent;
+ let fixture: ComponentFixture
;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ FamilyMembersTabComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(FamilyMembersTabComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/clients/clients-view/family-members-tab/family-members-tab.component.ts b/src/app/clients/clients-view/family-members-tab/family-members-tab.component.ts
new file mode 100644
index 000000000..c6c7a8fb8
--- /dev/null
+++ b/src/app/clients/clients-view/family-members-tab/family-members-tab.component.ts
@@ -0,0 +1,47 @@
+import { Component, OnInit } from '@angular/core';
+import { Router, ActivatedRoute } from '@angular/router';
+import { MatDialog } from '@angular/material';
+
+/** Custom Components */
+import { DeleteDialogComponent } from '../../../shared/delete-dialog/delete-dialog.component';
+
+/** Custom Services */
+import { ClientsService } from '../../clients.service';
+
+@Component({
+ selector: 'mifosx-family-members-tab',
+ templateUrl: './family-members-tab.component.html',
+ styleUrls: ['./family-members-tab.component.scss']
+})
+export class FamilyMembersTabComponent implements OnInit {
+ clientFamilyMembers: any;
+ constructor(private route: ActivatedRoute,
+ private router: Router,
+ private clientsService: ClientsService,
+ public dialog: MatDialog) {
+ this.route.data.subscribe((data: { clientFamilyMembers: any }) => {
+ this.clientFamilyMembers = data.clientFamilyMembers;
+ });
+ }
+
+ ngOnInit() {
+ }
+
+ /**
+ * Deletes the family member and redirects to family members tab.
+ */
+ deleteFamilyMember(clientId: string, id: string, name: string, index: number) {
+ const deleteFamilyMemberDialogRef = this.dialog.open(DeleteDialogComponent, {
+ data: { deleteContext: `Family member id:${id} name : ${name} ${index}` }
+ });
+ deleteFamilyMemberDialogRef.afterClosed().subscribe((response: any) => {
+ if (response.delete) {
+ this.clientsService.deleteFamilyMember(clientId, id)
+ .subscribe(() => {
+ this.clientFamilyMembers.splice(index, 1);
+ });
+ }
+ });
+ }
+
+}
diff --git a/src/app/clients/clients-view/general-tab/general-tab.component.html b/src/app/clients/clients-view/general-tab/general-tab.component.html
index 4de5ab870..53445a927 100644
--- a/src/app/clients/clients-view/general-tab/general-tab.component.html
+++ b/src/app/clients/clients-view/general-tab/general-tab.component.html
@@ -2,13 +2,13 @@
Performance History
- No. Of Loan Cycles :{{clientSummary.loanCycle}}
- No. of Active Loans :{{clientSummary.activeLoans}}
- Last Loan Amount :{{clientSummary.lastLoanAmount}}
+ No. Of Loan Cycles :{{clientSummary?.loanCycle}}
+ No. of Active Loans :{{clientSummary?.activeLoans}}
+ Last Loan Amount :{{clientSummary?.lastLoanAmount}}
- No. of Active Savings :{{clientSummary.activeSavings}}
- Total Savings :{{clientSummary.totalSavings}}
+ No. of Active Savings :{{clientSummary?.activeSavings}}
+ Total Savings :{{clientSummary?.totalSavings}}
diff --git a/src/app/clients/clients.module.ts b/src/app/clients/clients.module.ts
index 6ad908519..6e2e47013 100644
--- a/src/app/clients/clients.module.ts
+++ b/src/app/clients/clients.module.ts
@@ -11,6 +11,8 @@ import { ClientsComponent } from './clients.component';
import { ClientsViewComponent } from './clients-view/clients-view.component';
import { GeneralTabComponent } from './clients-view/general-tab/general-tab.component';
import {PipesModule} from '../pipes/pipes.module';
+import { FamilyMembersTabComponent } from './clients-view/family-members-tab/family-members-tab.component';
+
/**
@@ -27,7 +29,9 @@ import {PipesModule} from '../pipes/pipes.module';
declarations: [
ClientsComponent,
ClientsViewComponent,
- GeneralTabComponent],
+ GeneralTabComponent,
+ FamilyMembersTabComponent,
+ ],
providers: [DatePipe]
})
diff --git a/src/app/clients/clients.service.ts b/src/app/clients/clients.service.ts
index 34b977c19..636ac7e2b 100644
--- a/src/app/clients/clients.service.ts
+++ b/src/app/clients/clients.service.ts
@@ -20,6 +20,10 @@ export class ClientsService {
const httpParams = new HttpParams().set('orderBy', 'id');
return this.http.get('/clients', { params: httpParams });
}
+
+ getClientTemplate(): Observable {
+ return this.http.get('/clients/template');
+ }
getClientData(clientId: string) {
return this.http.get(`/clients/${clientId}`);
}
@@ -39,4 +43,19 @@ export class ClientsService {
const httpParams = new HttpParams().set('maxHeight', '150');
return this.http.get(`/clients/${clientId}/images`, { params: httpParams, responseType: 'text' });
}
+ getClientFamilyMembers(clientId: string) {
+ return this.http.get(`/clients/${clientId}/familymembers`);
+ }
+ getClientFamilyMember(clientId: string, familyMemberId: string) {
+ return this.http.get(`/clients/${clientId}/familymembers/${familyMemberId}`);
+ }
+ addFamilyMember(clientId: string, familyMemberData: any) {
+ return this.http.post(`/clients/${clientId}/familymembers`, familyMemberData);
+ }
+ editFamilyMember(clientId: string, familyMemberId: any, familyMemberData: any) {
+ return this.http.put(`/clients/${clientId}/familymembers/${familyMemberId}`, familyMemberData);
+ }
+ deleteFamilyMember(clientId: string, familyMemberId: string) {
+ return this.http.delete(`/clients/${clientId}/familymembers/${familyMemberId}`);
+ }
}
diff --git a/src/app/clients/common-resolvers/client-family-member.resolver.ts b/src/app/clients/common-resolvers/client-family-member.resolver.ts
new file mode 100644
index 000000000..d800a5c71
--- /dev/null
+++ b/src/app/clients/common-resolvers/client-family-member.resolver.ts
@@ -0,0 +1,32 @@
+/** 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 Family Member resolver.
+ */
+@Injectable()
+export class ClientFamilyMemberResolver implements Resolve {
+
+ /**
+ * @param {ClientsService} ClientsService Clients service.
+ */
+ constructor(private clientsService: ClientsService) { }
+
+ /**
+ * Returns the Clients data.
+ * @returns {Observable}
+ */
+ resolve(route: ActivatedRouteSnapshot): Observable {
+ const clientId = route.parent.parent.parent.paramMap.get('clientId');
+ const familyMemberId = route.parent.paramMap.get('familyMemberId');
+ return this.clientsService.getClientFamilyMember(clientId, familyMemberId);
+ }
+
+}
diff --git a/src/app/clients/common-resolvers/client-family-members.resolver.ts b/src/app/clients/common-resolvers/client-family-members.resolver.ts
new file mode 100644
index 000000000..e9a4a533f
--- /dev/null
+++ b/src/app/clients/common-resolvers/client-family-members.resolver.ts
@@ -0,0 +1,31 @@
+/** 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 Family Members resolver.
+ */
+@Injectable()
+export class ClientFamilyMembersResolver implements Resolve {
+
+ /**
+ * @param {ClientsService} ClientsService Clients service.
+ */
+ constructor(private clientsService: ClientsService) { }
+
+ /**
+ * Returns the Clients data.
+ * @returns {Observable}
+ */
+ resolve(route: ActivatedRouteSnapshot): Observable {
+ const clientId = route.parent.parent.paramMap.get('clientId');
+ return this.clientsService.getClientFamilyMembers(clientId);
+ }
+
+}
diff --git a/src/app/clients/common-resolvers/client-template.resolver.ts b/src/app/clients/common-resolvers/client-template.resolver.ts
new file mode 100644
index 000000000..3c7718da6
--- /dev/null
+++ b/src/app/clients/common-resolvers/client-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 Template resolver.
+ */
+@Injectable()
+export class ClientTemplateResolver implements Resolve {
+
+ /**
+ * @param {ClientsService} ClientsService Clients service.
+ */
+ constructor(private clientsService: ClientsService) { }
+
+ /**
+ * Returns the Client Template data.
+ * @returns {Observable}
+ */
+ resolve(route: ActivatedRouteSnapshot): Observable {
+ return this.clientsService.getClientTemplate();
+ }
+
+}
diff --git a/src/app/shared/delete-dialog/delete-dialog.component.html b/src/app/shared/delete-dialog/delete-dialog.component.html
index eacc70bd3..3acea2271 100644
--- a/src/app/shared/delete-dialog/delete-dialog.component.html
+++ b/src/app/shared/delete-dialog/delete-dialog.component.html
@@ -3,6 +3,6 @@
Are you sure you want to delete {{ data.deleteContext }} ?
- Cancel
- Confirm
+ Cancel
+ Confirm