From 686d6dddbcdd37d3395048dcc1e4749f5d7e28a3 Mon Sep 17 00:00:00 2001 From: Karan Takalkar Date: Mon, 22 Jun 2020 16:10:08 +0530 Subject: [PATCH] feat: add manage funds component (#886) Fixes: #155 --- .../manage-funds/manage-funds.component.html | 43 +++++++ .../manage-funds/manage-funds.component.scss | 3 + .../manage-funds.component.spec.ts | 25 ++++ .../manage-funds/manage-funds.component.ts | 108 ++++++++++++++++++ .../manage-funds/manage-funds.resolver.ts | 30 +++++ .../organization-routing.module.ts | 13 ++- .../organization/organization.component.html | 2 +- src/app/organization/organization.module.ts | 4 +- src/app/organization/organization.service.ts | 24 ++++ 9 files changed, 249 insertions(+), 3 deletions(-) create mode 100644 src/app/organization/manage-funds/manage-funds.component.html create mode 100644 src/app/organization/manage-funds/manage-funds.component.scss create mode 100644 src/app/organization/manage-funds/manage-funds.component.spec.ts create mode 100644 src/app/organization/manage-funds/manage-funds.component.ts create mode 100644 src/app/organization/manage-funds/manage-funds.resolver.ts diff --git a/src/app/organization/manage-funds/manage-funds.component.html b/src/app/organization/manage-funds/manage-funds.component.html new file mode 100644 index 000000000..95293b37b --- /dev/null +++ b/src/app/organization/manage-funds/manage-funds.component.html @@ -0,0 +1,43 @@ +
+ + + +
+ +
+ + + + + Required field + + + + + +
+ +
+ + + + + + + +
+ +
+ +
+ +
+ +
+ +
diff --git a/src/app/organization/manage-funds/manage-funds.component.scss b/src/app/organization/manage-funds/manage-funds.component.scss new file mode 100644 index 000000000..5911b9d88 --- /dev/null +++ b/src/app/organization/manage-funds/manage-funds.component.scss @@ -0,0 +1,3 @@ +.container{ + width: 74rem; +} diff --git a/src/app/organization/manage-funds/manage-funds.component.spec.ts b/src/app/organization/manage-funds/manage-funds.component.spec.ts new file mode 100644 index 000000000..84029683a --- /dev/null +++ b/src/app/organization/manage-funds/manage-funds.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ManageFundsComponent } from './manage-funds.component'; + +describe('ManageFundsComponent', () => { + let component: ManageFundsComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ ManageFundsComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ManageFundsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/organization/manage-funds/manage-funds.component.ts b/src/app/organization/manage-funds/manage-funds.component.ts new file mode 100644 index 000000000..b7c2d8f92 --- /dev/null +++ b/src/app/organization/manage-funds/manage-funds.component.ts @@ -0,0 +1,108 @@ +/** Angular Imports */ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { MatDialog } from '@angular/material'; +import { FormBuilder, Validators } from '@angular/forms'; + +/** Custom Dialogs */ +import { FormDialogComponent } from 'app/shared/form-dialog/form-dialog.component'; + +/** Custom Models */ +import { FormfieldBase } from 'app/shared/form-dialog/formfield/model/formfield-base'; +import { InputBase } from 'app/shared/form-dialog/formfield/model/input-base'; + +/** Custom Services */ +import { OrganizationService } from '../organization.service'; + +/** + * Manage Funds component. + */ +@Component({ + selector: 'mifosx-manage-funds', + templateUrl: './manage-funds.component.html', + styleUrls: ['./manage-funds.component.scss'] +}) +export class ManageFundsComponent implements OnInit { + + /** Manage Funds data. */ + fundsData: any; + /** New Fund form */ + fundForm: any; + /** Funds form reference */ + @ViewChild('formRef') formRef: any; + + /** + * Retrieves the manage funds data from `resolve`. + * @param {ActivatedRoute} route Activated Route + * @param {FormBuilder} formBuilder Form Builder + * @param {OrganizationService} organizationservice Organization Service + * @param {MatDialog} dialog Mat Dialog + */ + constructor(private route: ActivatedRoute, + private formBuilder: FormBuilder, + private organizationservice: OrganizationService, + public dialog: MatDialog) { + this.route.data.subscribe(( data: { funds: any }) => { + this.fundsData = data.funds; + }); + } + + ngOnInit() { + this.createFundForm(); + } + + /** + * Creates the fund form. + */ + createFundForm() { + this.fundForm = this.formBuilder.group({ + 'name': ['', Validators.required] + }); + } + + /** + * Adds a new fund to the list. + */ + addFund() { + const newFund = this.fundForm.value; + this.organizationservice.createFund(newFund).subscribe((response: any) => { + this.fundsData.push({ + id: response.resourceId, + name: newFund.name + }); + this.formRef.resetForm(); + }); + } + + /** + * Edits the selected fund. + * @param {string} fundId Fund Id. + * @param {string} fundContent Fund's content. + * @param {number} index Index of fund. + */ + editFund(fundId: string, fundContent: string, index: number) { + const formfields: FormfieldBase[] = [ + new InputBase({ + controlName: 'name', + label: 'Fund Content', + value: fundContent, + type: 'text', + required: true + }), + ]; + const data = { + title: 'Edit Fund', + layout: { addButtonText: 'Confirm' }, + formfields: formfields + }; + const editFundDialogRef = this.dialog.open(FormDialogComponent, { data }); + editFundDialogRef.afterClosed().subscribe((response: any) => { + if (response.data) { + this.organizationservice.editFund(fundId, response.data.value).subscribe(() => { + this.fundsData[index].name = response.data.value.name; + }); + } + }); + } + +} diff --git a/src/app/organization/manage-funds/manage-funds.resolver.ts b/src/app/organization/manage-funds/manage-funds.resolver.ts new file mode 100644 index 000000000..ab49848a4 --- /dev/null +++ b/src/app/organization/manage-funds/manage-funds.resolver.ts @@ -0,0 +1,30 @@ +/** Angular Imports */ +import { Injectable } from '@angular/core'; +import { Resolve } from '@angular/router'; + +/** rxjs Imports */ +import { Observable } from 'rxjs'; + +/** Custom Services */ +import { OrganizationService } from '../organization.service'; + +/** + * Manage Funds data resolver. + */ +@Injectable() +export class ManageFundsResolver implements Resolve { + + /** + * @param {OrganizationService} organizationService Organization service. + */ + constructor(private organizationService: OrganizationService) {} + + /** + * Returns the manage funds data. + * @returns {Observable} + */ + resolve(): Observable { + return this.organizationService.getFunds(); + } + +} diff --git a/src/app/organization/organization-routing.module.ts b/src/app/organization/organization-routing.module.ts index 98e78cea0..12b051ccb 100644 --- a/src/app/organization/organization-routing.module.ts +++ b/src/app/organization/organization-routing.module.ts @@ -39,6 +39,7 @@ import { ViewOfficeComponent } from './offices/view-office/view-office.component import { GeneralTabComponent } from './offices/view-office/general-tab/general-tab.component'; import { DatatableTabsComponent } from './offices/view-office/datatable-tabs/datatable-tabs.component'; import { ViewCampaignComponent } from './sms-campaigns/view-campaign/view-campaign.component'; +import { ManageFundsComponent } from './manage-funds/manage-funds.component'; /** Custom Resolvers */ import { LoanProvisioningCriteriaResolver } from './loan-provisioning-criteria/loan-provisioning-criteria.resolver'; @@ -68,6 +69,7 @@ import { OfficeResolver } from './offices/common-resolvers/office.resolver'; import { OfficeDatatableResolver } from './offices/common-resolvers/office-datatable.resolver'; import { OfficeDatatablesResolver } from './offices/common-resolvers/office-datatables.resolver'; import { SmsCampaignResolver } from './sms-campaigns/common-resolvers/sms-campaign.resolver'; +import { ManageFundsResolver } from './manage-funds/manage-funds.resolver'; /** Organization Routes */ const routes: Routes = [ @@ -385,6 +387,14 @@ const routes: Routes = [ workingDays: WorkingDaysResolver } }, + { + path: 'manage-funds', + component: ManageFundsComponent, + data: { title: extract('Manage Funds Days'), breadcrumb: 'Manage Funds' }, + resolve: { + funds: ManageFundsResolver + } + }, { path: 'bulk-import', loadChildren: '../bulk-import/bulk-import.module#BulkImportModule' @@ -453,7 +463,8 @@ const routes: Routes = [ HolidayResolver, OfficeResolver, OfficeDatatableResolver, - OfficeDatatablesResolver + OfficeDatatablesResolver, + ManageFundsResolver ] }) export class OrganizationRoutingModule { } diff --git a/src/app/organization/organization.component.html b/src/app/organization/organization.component.html index 6c7c7f20b..2f20de294 100644 --- a/src/app/organization/organization.component.html +++ b/src/app/organization/organization.component.html @@ -89,7 +89,7 @@ - + diff --git a/src/app/organization/organization.module.ts b/src/app/organization/organization.module.ts index 60a5546ec..09b820c95 100644 --- a/src/app/organization/organization.module.ts +++ b/src/app/organization/organization.module.ts @@ -42,6 +42,7 @@ import { DatatableTabsComponent } from './offices/view-office/datatable-tabs/dat import { SingleRowComponent } from './offices/view-office/datatable-tabs/single-row/single-row.component'; import { MultiRowComponent } from './offices/view-office/datatable-tabs/multi-row/multi-row.component'; import { ViewCampaignComponent } from './sms-campaigns/view-campaign/view-campaign.component'; +import { ManageFundsComponent } from './manage-funds/manage-funds.component'; /** * Organization Module @@ -89,7 +90,8 @@ import { ViewCampaignComponent } from './sms-campaigns/view-campaign/view-campai DatatableTabsComponent, SingleRowComponent, MultiRowComponent, - ViewCampaignComponent + ViewCampaignComponent, + ManageFundsComponent ] }) export class OrganizationModule { } diff --git a/src/app/organization/organization.service.ts b/src/app/organization/organization.service.ts index 722cd2f01..b6805edc5 100644 --- a/src/app/organization/organization.service.ts +++ b/src/app/organization/organization.service.ts @@ -407,4 +407,28 @@ export class OrganizationService { return this.http.put(`/tellers/${tellerId}`, teller); } + /** + * @returns {Observable} Funds data + */ + getFunds(): Observable { + return this.http.get('/funds'); + } + + /** + * @param {any} fund Fund to be created. + * @returns {Observable} + */ + createFund(fund: any): Observable { + return this.http.post('/funds', fund); + } + + /** + * @param {string} fundId Fund Id + * @param {any} fundData Fund Data + * @returns {Observable} + */ + editFund(fundId: string, fundData: any): Observable { + return this.http.put(`/funds/${fundId}`, fundData); + } + }