diff --git a/src/app/clients/clients-routing.module.ts b/src/app/clients/clients-routing.module.ts index 38846748b..df705b6c9 100644 --- a/src/app/clients/clients-routing.module.ts +++ b/src/app/clients/clients-routing.module.ts @@ -12,6 +12,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 { FamilyMembersTabComponent } from './clients-view/family-members-tab/family-members-tab.component'; +import { AddFamilyMemberComponent } from './clients-view/family-members-tab/add-family-member/add-family-member.component'; +import { EditFamilyMemberComponent } from './clients-view/family-members-tab/edit-family-member/edit-family-member.component'; /** Custom Resolvers */ import { ClientsResolver } from './common-resolvers/clients.resolver'; @@ -61,6 +63,24 @@ const routes: Routes = [ resolve: { clientFamilyMembers: ClientFamilyMembersResolver } + }, + { + path: 'add', + component: AddFamilyMemberComponent, + resolve: { + clientTemplate: ClientTemplateResolver + } + }, + { + path: ':familyMemberId', + children: [{ + path: 'edit', + component: EditFamilyMemberComponent, + resolve: { + clientTemplate: ClientTemplateResolver, + editFamilyMember: ClientFamilyMemberResolver + } + }] } ] } diff --git a/src/app/clients/clients-view/family-members-tab/add-family-member/add-family-member.component.html b/src/app/clients/clients-view/family-members-tab/add-family-member/add-family-member.component.html new file mode 100644 index 000000000..75339a241 --- /dev/null +++ b/src/app/clients/clients-view/family-members-tab/add-family-member/add-family-member.component.html @@ -0,0 +1,108 @@ +
+ +
+ +
+ + + First Name + + + First Name is required + + + + + Middle Name + + + + + Last Name + + + Last Name is required + + + + + Qualification + + + + + Age + + + Age is required + + + + Is Dependent? + + + + Relationship + + + {{ relation.name }} + + + + Relationship is required + + + + + Gender + + + {{ gender.name }} + + + + Gender is required + + + + + Profession + + + {{ profession.name }} + + + + + + Marital Status + + + {{ maritalStatus.name }} + + + + + + + Date Of Birth + + + + + Date of birth + is required + + + +
+
+ + +
+ +
+ +
\ No newline at end of file diff --git a/src/app/clients/clients-view/family-members-tab/add-family-member/add-family-member.component.scss b/src/app/clients/clients-view/family-members-tab/add-family-member/add-family-member.component.scss new file mode 100644 index 000000000..b14273f69 --- /dev/null +++ b/src/app/clients/clients-view/family-members-tab/add-family-member/add-family-member.component.scss @@ -0,0 +1,13 @@ +.add-family-member-container { + width: 70%; + margin: 0 auto; + padding: 5%; + @media screen and (min-width:960px) { + [fxFlex]:nth-child(odd) { + margin-right: 25px; + } + [fxFlex]:last-child { + margin-right: 0; + } + } +} diff --git a/src/app/clients/clients-view/family-members-tab/add-family-member/add-family-member.component.spec.ts b/src/app/clients/clients-view/family-members-tab/add-family-member/add-family-member.component.spec.ts new file mode 100644 index 000000000..9a15bd49c --- /dev/null +++ b/src/app/clients/clients-view/family-members-tab/add-family-member/add-family-member.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AddFamilyMemberComponent } from './add-family-member.component'; + +describe('AddFamilyMemberComponent', () => { + let component: AddFamilyMemberComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ AddFamilyMemberComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(AddFamilyMemberComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/clients/clients-view/family-members-tab/add-family-member/add-family-member.component.ts b/src/app/clients/clients-view/family-members-tab/add-family-member/add-family-member.component.ts new file mode 100644 index 000000000..9a425fab1 --- /dev/null +++ b/src/app/clients/clients-view/family-members-tab/add-family-member/add-family-member.component.ts @@ -0,0 +1,75 @@ +import { Component, OnInit } from '@angular/core'; +import { FormGroup, FormBuilder, Validators } from '@angular/forms'; +import { Router, ActivatedRoute } from '@angular/router'; +import { DatePipe } from '@angular/common'; + +/** Custom Services */ +import { ClientsService } from '../../../clients.service'; + + +@Component({ + selector: 'mifosx-add-family-member', + templateUrl: './add-family-member.component.html', + styleUrls: ['./add-family-member.component.scss'] +}) +export class AddFamilyMemberComponent implements OnInit { + /** Minimum Due Date allowed. */ + minDate = new Date(2000, 0, 1); + /** Maximum Due Date allowed. */ + maxDate = new Date(); + /** Add family member form. */ + addFamilyMemberForm: FormGroup; + /** Add family member template. */ + addFamilyMemberTemplate: any; + clientId: any; + constructor(private formBuilder: FormBuilder, + private datePipe: DatePipe, + private router: Router, + private route: ActivatedRoute, + private clientsService: ClientsService) { + this.route.data.subscribe((data: { clientTemplate: any }) => { + this.addFamilyMemberTemplate = data.clientTemplate.familyMemberOptions; + }); + this.clientId = this.route.parent.parent.snapshot.params['clientId']; + + } + + ngOnInit() { + this.createAddFamilyMemberForm(); + + } + + + createAddFamilyMemberForm() { + this.addFamilyMemberForm = this.formBuilder.group({ + 'firstName': ['', Validators.required], + 'middleName': [''], + 'lastName': ['', Validators.required], + 'qualification': [''], + 'age': ['', Validators.required], + 'isDependent': [''], + 'relationshipId': ['', Validators.required], + 'genderId': ['', Validators.required], + 'professionId': [''], + 'maritalStatusId': [''], + 'dateOfBirth': ['', Validators.required] + }); + } + + submit() { + const prevDateOfBirth: Date = this.addFamilyMemberForm.value.dateOfBirth; + // TODO: Update once language and date settings are setup + const dateFormat = 'yyyy-MM-dd'; + this.addFamilyMemberForm.patchValue({ + dateOfBirth: this.datePipe.transform(prevDateOfBirth, dateFormat) + }); + const familyMemberData = this.addFamilyMemberForm.value; + familyMemberData.locale = 'en'; + familyMemberData.dateFormat = dateFormat; + this.clientsService.addFamilyMember(this.clientId, familyMemberData).subscribe(res => { + this.router.navigate(['../'], { relativeTo: this.route }); + }); + + } + +} diff --git a/src/app/clients/clients-view/family-members-tab/edit-family-member/edit-family-member.component.html b/src/app/clients/clients-view/family-members-tab/edit-family-member/edit-family-member.component.html new file mode 100644 index 000000000..1cf711ccb --- /dev/null +++ b/src/app/clients/clients-view/family-members-tab/edit-family-member/edit-family-member.component.html @@ -0,0 +1,108 @@ +
+ +
+ +
+ + + First Name + + + First Name is required + + + + + Middle Name + + + + + Last Name + + + Last Name is required + + + + + Qualification + + + + + Age + + + Age is required + + + + Is Dependent? + + + + Relationship + + + {{ relation.name }} + + + + Relationship is required + + + + + Gender + + + {{ gender.name }} + + + + Gender is required + + + + + Profession + + + {{ profession.name }} + + + + + + Marital Status + + + {{ maritalStatus.name }} + + + + + + + Date Of Birth + + + + + Date of birth + is required + + + +
+
+ + +
+ +
+ +
\ No newline at end of file diff --git a/src/app/clients/clients-view/family-members-tab/edit-family-member/edit-family-member.component.scss b/src/app/clients/clients-view/family-members-tab/edit-family-member/edit-family-member.component.scss new file mode 100644 index 000000000..2e7103347 --- /dev/null +++ b/src/app/clients/clients-view/family-members-tab/edit-family-member/edit-family-member.component.scss @@ -0,0 +1,14 @@ +.add-family-member-container { + width: 70%; + margin: 0 auto; + padding: 5%; + @media screen and (min-width:960px) { + [fxFlex]:nth-child(odd) { + margin-right: 25px; + } + [fxFlex]:last-child { + margin-right: 0; + } + } + } + \ No newline at end of file diff --git a/src/app/clients/clients-view/family-members-tab/edit-family-member/edit-family-member.component.spec.ts b/src/app/clients/clients-view/family-members-tab/edit-family-member/edit-family-member.component.spec.ts new file mode 100644 index 000000000..1fdfb1889 --- /dev/null +++ b/src/app/clients/clients-view/family-members-tab/edit-family-member/edit-family-member.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { EditFamilyMemberComponent } from './edit-family-member.component'; + +describe('EditFamilyMemberComponent', () => { + let component: EditFamilyMemberComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ EditFamilyMemberComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(EditFamilyMemberComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/clients/clients-view/family-members-tab/edit-family-member/edit-family-member.component.ts b/src/app/clients/clients-view/family-members-tab/edit-family-member/edit-family-member.component.ts new file mode 100644 index 000000000..7ecc0f7a3 --- /dev/null +++ b/src/app/clients/clients-view/family-members-tab/edit-family-member/edit-family-member.component.ts @@ -0,0 +1,72 @@ +import { Component, OnInit } from '@angular/core'; +import { FormGroup, FormBuilder, Validators } from '@angular/forms'; +import { Router, ActivatedRoute } from '@angular/router'; +import { DatePipe } from '@angular/common'; + +/** Custom Services */ +import { ClientsService } from '../../../clients.service'; + +@Component({ + selector: 'mifosx-edit-family-member', + templateUrl: './edit-family-member.component.html', + styleUrls: ['./edit-family-member.component.scss'] +}) +export class EditFamilyMemberComponent implements OnInit { + /** Minimum Due Date allowed. */ + minDate = new Date(2000, 0, 1); + /** Maximum Due Date allowed. */ + maxDate = new Date(); + /** Add family member form. */ + editFamilyMemberForm: FormGroup; + /** Add family member template. */ + addFamilyMemberTemplate: any; + familyMemberDetails: any; + + constructor(private formBuilder: FormBuilder, + private datePipe: DatePipe, + private router: Router, + private route: ActivatedRoute, + private clientsService: ClientsService) { + this.route.data.subscribe((data: { clientTemplate: any, editFamilyMember: any }) => { + this.addFamilyMemberTemplate = data.clientTemplate.familyMemberOptions; + this.familyMemberDetails = data.editFamilyMember; + }); + } + + ngOnInit() { + this.createEditFamilyMemberForm(this.familyMemberDetails); + + } + + createEditFamilyMemberForm(familyMember: any) { + this.editFamilyMemberForm = this.formBuilder.group({ + 'firstName': [familyMember.firstName, Validators.required], + 'middleName': [familyMember.middleName], + 'lastName': [familyMember.lastName, Validators.required], + 'qualification': [familyMember.qualification], + 'age': [familyMember.age, Validators.required], + 'isDependent': [familyMember.isDependent], + 'relationshipId': [familyMember.relationshipId, Validators.required], + 'genderId': [familyMember.genderId, Validators.required], + 'professionId': [familyMember.professionId], + 'maritalStatusId': [familyMember.maritalStatusId], + 'dateOfBirth': [this.datePipe.transform(familyMember.dateOfBirth, 'yyyy-MM-dd'), Validators.required] + }); + } + + submit() { + const prevDateOfBirth: Date = this.editFamilyMemberForm.value.dateOfBirth; + // TODO: Update once language and date settings are setup + const dateFormat = 'yyyy-MM-dd'; + this.editFamilyMemberForm.patchValue({ + dateOfBirth: this.datePipe.transform(prevDateOfBirth, dateFormat) + }); + const familyMemberData = this.editFamilyMemberForm.value; + familyMemberData.locale = 'en'; + familyMemberData.dateFormat = dateFormat; + this.clientsService.editFamilyMember(this.familyMemberDetails.clientId, this.familyMemberDetails.id, familyMemberData).subscribe(res => { + this.router.navigate(['../../'], { relativeTo: this.route }); + }); + + } +} diff --git a/src/app/clients/clients.module.ts b/src/app/clients/clients.module.ts index 6e2e47013..6db2ee131 100644 --- a/src/app/clients/clients.module.ts +++ b/src/app/clients/clients.module.ts @@ -12,7 +12,8 @@ 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'; - +import { AddFamilyMemberComponent } from './clients-view/family-members-tab/add-family-member/add-family-member.component'; +import { EditFamilyMemberComponent } from './clients-view/family-members-tab/edit-family-member/edit-family-member.component'; /** @@ -31,6 +32,8 @@ import { FamilyMembersTabComponent } from './clients-view/family-members-tab/fam ClientsViewComponent, GeneralTabComponent, FamilyMembersTabComponent, + AddFamilyMemberComponent, + EditFamilyMemberComponent ], providers: [DatePipe]