From 36843a1ae8b55ae4fa7c9c7c2d28a45a5f1d5b74 Mon Sep 17 00:00:00 2001 From: pwai Date: Thu, 5 Dec 2019 07:53:12 +0000 Subject: [PATCH] feat: add loan provisioning criteria component (#496) - Add Loan Provisioning Criteria Component - Add Organization Service Fixes: #165 --- .../loan-provisioning-criteria.component.html | 40 ++++++++++++ .../loan-provisioning-criteria.component.scss | 7 ++ ...an-provisioning-criteria.component.spec.ts | 25 +++++++ .../loan-provisioning-criteria.component.ts | 65 +++++++++++++++++++ .../loan-provisioning-criteria.resolver.ts | 30 +++++++++ .../organization-routing.module.ts | 16 ++++- .../organization/organization.component.html | 2 +- src/app/organization/organization.module.ts | 4 +- .../organization/organization.service.spec.ts | 12 ++++ src/app/organization/organization.service.ts | 28 ++++++++ 10 files changed, 226 insertions(+), 3 deletions(-) create mode 100644 src/app/organization/loan-provisioning-criteria/loan-provisioning-criteria.component.html create mode 100644 src/app/organization/loan-provisioning-criteria/loan-provisioning-criteria.component.scss create mode 100644 src/app/organization/loan-provisioning-criteria/loan-provisioning-criteria.component.spec.ts create mode 100644 src/app/organization/loan-provisioning-criteria/loan-provisioning-criteria.component.ts create mode 100644 src/app/organization/loan-provisioning-criteria/loan-provisioning-criteria.resolver.ts create mode 100644 src/app/organization/organization.service.spec.ts create mode 100644 src/app/organization/organization.service.ts diff --git a/src/app/organization/loan-provisioning-criteria/loan-provisioning-criteria.component.html b/src/app/organization/loan-provisioning-criteria/loan-provisioning-criteria.component.html new file mode 100644 index 000000000..276f9269f --- /dev/null +++ b/src/app/organization/loan-provisioning-criteria/loan-provisioning-criteria.component.html @@ -0,0 +1,40 @@ +
+ +
+ +
+ +
+ + Filter + + +
+ +
+ + + + + + + + + + + + + + + + +
Name {{ loanProvisioningCriteria.criteriaName }} Created By {{ loanProvisioningCriteria.createdBy }}
+ + + +
+ +
diff --git a/src/app/organization/loan-provisioning-criteria/loan-provisioning-criteria.component.scss b/src/app/organization/loan-provisioning-criteria/loan-provisioning-criteria.component.scss new file mode 100644 index 000000000..24edb63bb --- /dev/null +++ b/src/app/organization/loan-provisioning-criteria/loan-provisioning-criteria.component.scss @@ -0,0 +1,7 @@ +table { + width: 100%; + + .select-row:hover { + cursor: pointer; + } +} diff --git a/src/app/organization/loan-provisioning-criteria/loan-provisioning-criteria.component.spec.ts b/src/app/organization/loan-provisioning-criteria/loan-provisioning-criteria.component.spec.ts new file mode 100644 index 000000000..c47baeaef --- /dev/null +++ b/src/app/organization/loan-provisioning-criteria/loan-provisioning-criteria.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { LoanProvisioningCriteriaComponent } from './loan-provisioning-criteria.component'; + +describe('LoanProvisioningCriteriaComponent', () => { + let component: LoanProvisioningCriteriaComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ LoanProvisioningCriteriaComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(LoanProvisioningCriteriaComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/organization/loan-provisioning-criteria/loan-provisioning-criteria.component.ts b/src/app/organization/loan-provisioning-criteria/loan-provisioning-criteria.component.ts new file mode 100644 index 000000000..6fc0f4920 --- /dev/null +++ b/src/app/organization/loan-provisioning-criteria/loan-provisioning-criteria.component.ts @@ -0,0 +1,65 @@ +/** Angular Imports */ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { MatTableDataSource, MatPaginator, MatSort } from '@angular/material'; +import { ActivatedRoute } from '@angular/router'; + +/** rxjs Imports */ +import { of } from 'rxjs'; + +/** + * Loan Provisioning Criteria component. + */ +@Component({ + selector: 'mifosx-loan-provisioning-criteria', + templateUrl: './loan-provisioning-criteria.component.html', + styleUrls: ['./loan-provisioning-criteria.component.scss'] +}) +export class LoanProvisioningCriteriaComponent implements OnInit { + + /** Loan Provisioning Criteria data. */ + loanProvisioningCriteriaData: any; + /** Columns to be displayed in loan provisioning criteria table. */ + displayedColumns: string[] = ['criteriaName', 'createdBy']; + /** Data source for loan provisioning criteria table. */ + dataSource: MatTableDataSource; + + /** Paginator for loan provisioning criteria table. */ + @ViewChild(MatPaginator) paginator: MatPaginator; + /** Sorter for loan provisioning criteria table. */ + @ViewChild(MatSort) sort: MatSort; + + /** + * Retrieves the loan provisioning criteria data from `resolve`. + * @param {ActivatedRoute} route Activated Route. + */ + constructor(private route: ActivatedRoute) { + this.route.data.subscribe(( data: { loanProvisioningCriteria: any }) => { + this.loanProvisioningCriteriaData = data.loanProvisioningCriteria; + }); + } + + /** + * Filters data in loan provisioning criteria table based on passed value. + * @param {string} filterValue Value to filter data. + */ + applyFilter(filterValue: string) { + this.dataSource.filter = filterValue.trim().toLowerCase(); + } + + /** + * Sets the loan provisioning criteria table. + */ + ngOnInit() { + this.setLoanProvisioningCriteria(); + } + + /** + * Initializes the data source, paginator and sorter for loan provisioning criteria table. + */ + setLoanProvisioningCriteria() { + this.dataSource = new MatTableDataSource(this.loanProvisioningCriteriaData); + this.dataSource.paginator = this.paginator; + this.dataSource.sort = this.sort; + } + +} diff --git a/src/app/organization/loan-provisioning-criteria/loan-provisioning-criteria.resolver.ts b/src/app/organization/loan-provisioning-criteria/loan-provisioning-criteria.resolver.ts new file mode 100644 index 000000000..cb7d414d6 --- /dev/null +++ b/src/app/organization/loan-provisioning-criteria/loan-provisioning-criteria.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'; + +/** + * Loan Provisioning Criteria data resolver. + */ +@Injectable() +export class LoanProvisioningCriteriaResolver implements Resolve { + + /** + * @param {OrganizationService} organizationService Organization service. + */ + constructor(private organizationService: OrganizationService) {} + + /** + * Returns the loan provisioning criteria data. + * @returns {Observable} + */ + resolve(): Observable { + return this.organizationService.getProvisioningCriteria(); + } + +} diff --git a/src/app/organization/organization-routing.module.ts b/src/app/organization/organization-routing.module.ts index a7abd697c..7b085230e 100644 --- a/src/app/organization/organization-routing.module.ts +++ b/src/app/organization/organization-routing.module.ts @@ -10,6 +10,10 @@ import { extract } from '../core/i18n/i18n.service'; /** Custom Components */ import { OrganizationComponent } from './organization.component'; +import { LoanProvisioningCriteriaComponent } from './loan-provisioning-criteria/loan-provisioning-criteria.component'; + +/** Custom Resolvers */ +import { LoanProvisioningCriteriaResolver } from './loan-provisioning-criteria/loan-provisioning-criteria.resolver'; /** Organization Routes */ const routes: Routes = [ @@ -21,6 +25,14 @@ const routes: Routes = [ { path: '', component: OrganizationComponent + }, + { + path: 'provisioning-criteria', + component: LoanProvisioningCriteriaComponent, + data: { title: extract('Provisioning Criteria'), breadcrumb: 'Provisioning Criteria' }, + resolve: { + loanProvisioningCriteria: LoanProvisioningCriteriaResolver + } } ] } @@ -35,6 +47,8 @@ const routes: Routes = [ @NgModule({ imports: [RouterModule.forChild(routes)], exports: [RouterModule], - providers: [] + providers: [ + LoanProvisioningCriteriaResolver + ] }) export class OrganizationRoutingModule { } diff --git a/src/app/organization/organization.component.html b/src/app/organization/organization.component.html index c44bf6b89..0b22a1327 100644 --- a/src/app/organization/organization.component.html +++ b/src/app/organization/organization.component.html @@ -56,7 +56,7 @@

Define standards for enforcing the usage of stronger passwords

- + diff --git a/src/app/organization/organization.module.ts b/src/app/organization/organization.module.ts index 701660ee3..7f8f80959 100644 --- a/src/app/organization/organization.module.ts +++ b/src/app/organization/organization.module.ts @@ -7,6 +7,7 @@ import { OrganizationRoutingModule } from './organization-routing.module'; /** Custom Components */ import { OrganizationComponent } from './organization.component'; +import { LoanProvisioningCriteriaComponent } from './loan-provisioning-criteria/loan-provisioning-criteria.component'; /** * Organization Module @@ -19,7 +20,8 @@ import { OrganizationComponent } from './organization.component'; OrganizationRoutingModule ], declarations: [ - OrganizationComponent + OrganizationComponent, + LoanProvisioningCriteriaComponent ] }) export class OrganizationModule { } diff --git a/src/app/organization/organization.service.spec.ts b/src/app/organization/organization.service.spec.ts new file mode 100644 index 000000000..380a1a48f --- /dev/null +++ b/src/app/organization/organization.service.spec.ts @@ -0,0 +1,12 @@ +import { TestBed } from '@angular/core/testing'; + +import { OrganizationService } from './organization.service'; + +describe('OrganizationService', () => { + beforeEach(() => TestBed.configureTestingModule({})); + + it('should be created', () => { + const service: OrganizationService = TestBed.get(OrganizationService); + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/organization/organization.service.ts b/src/app/organization/organization.service.ts new file mode 100644 index 000000000..cc9c10c4e --- /dev/null +++ b/src/app/organization/organization.service.ts @@ -0,0 +1,28 @@ +/** Angular Imports */ +import { Injectable } from '@angular/core'; +import { HttpClient, HttpParams } from '@angular/common/http'; + +/** rxjs Imports */ +import { Observable } from 'rxjs'; + +/** + * Organization service. + */ +@Injectable({ + providedIn: 'root' +}) +export class OrganizationService { + + /** + * @param {HttpClient} http Http Client to send requests. + */ + constructor(private http: HttpClient) { } + + /** + * @returns {Observable} Loan Provisioning Criteria data + */ + getProvisioningCriteria(): Observable { + return this.http.get('/provisioningcriteria'); + } + +}