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 index 276f9269f..4bdb23072 100644 --- a/src/app/organization/loan-provisioning-criteria/loan-provisioning-criteria.component.html +++ b/src/app/organization/loan-provisioning-criteria/loan-provisioning-criteria.component.html @@ -29,7 +29,7 @@ - + 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 index 6fc0f4920..0c4f74fdf 100644 --- a/src/app/organization/loan-provisioning-criteria/loan-provisioning-criteria.component.ts +++ b/src/app/organization/loan-provisioning-criteria/loan-provisioning-criteria.component.ts @@ -33,8 +33,8 @@ export class LoanProvisioningCriteriaComponent implements OnInit { * @param {ActivatedRoute} route Activated Route. */ constructor(private route: ActivatedRoute) { - this.route.data.subscribe(( data: { loanProvisioningCriteria: any }) => { - this.loanProvisioningCriteriaData = data.loanProvisioningCriteria; + this.route.data.subscribe(( data: { loanProvisioningCriterias: any }) => { + this.loanProvisioningCriteriaData = data.loanProvisioningCriterias; }); } 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 index cb7d414d6..8a89b38a3 100644 --- a/src/app/organization/loan-provisioning-criteria/loan-provisioning-criteria.resolver.ts +++ b/src/app/organization/loan-provisioning-criteria/loan-provisioning-criteria.resolver.ts @@ -1,6 +1,6 @@ /** Angular Imports */ import { Injectable } from '@angular/core'; -import { Resolve } from '@angular/router'; +import { Resolve, ActivatedRouteSnapshot } from '@angular/router'; /** rxjs Imports */ import { Observable } from 'rxjs'; @@ -23,8 +23,9 @@ export class LoanProvisioningCriteriaResolver implements Resolve { * Returns the loan provisioning criteria data. * @returns {Observable} */ - resolve(): Observable { - return this.organizationService.getProvisioningCriteria(); + resolve(route: ActivatedRouteSnapshot): Observable { + const provisioningId = route.paramMap.get('id'); + return this.organizationService.getProvisioningCriteria(provisioningId); } } diff --git a/src/app/organization/loan-provisioning-criteria/loan-provisioning-criterias.resolver.ts b/src/app/organization/loan-provisioning-criteria/loan-provisioning-criterias.resolver.ts new file mode 100644 index 000000000..6f3a087a9 --- /dev/null +++ b/src/app/organization/loan-provisioning-criteria/loan-provisioning-criterias.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'; + +/** + * Charges data resolver. + */ +@Injectable() +export class LoanProvisioningCriteriasResolver implements Resolve { + + /** + * @param {OrganizationService} organizationService Products service. + */ + constructor(private organizationService: OrganizationService) {} + + /** + * Returns the products data. + * @returns {Observable} + */ + resolve(): Observable { + return this.organizationService.getProvisioningCriterias(); + } + +} diff --git a/src/app/organization/loan-provisioning-criteria/view-loan-provisioning-criteria/view-loan-provisioning-criteria.component.html b/src/app/organization/loan-provisioning-criteria/view-loan-provisioning-criteria/view-loan-provisioning-criteria.component.html new file mode 100644 index 000000000..36e1eb7c9 --- /dev/null +++ b/src/app/organization/loan-provisioning-criteria/view-loan-provisioning-criteria/view-loan-provisioning-criteria.component.html @@ -0,0 +1,76 @@ +
+ + +
+ +
+ + + + + +
+ +

{{provisioningData.criteriaName}}

+ + +
+ Loan Product: + {{ loanProducts }} +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Category {{provisioningData.categoryName}} Min Age {{provisioningData.minAge}} Max Age {{provisioningData.maxAge}} Percentage {{provisioningData.provisioningPercentage}} Liability Account {{provisioningData.liabilityName}} Expense Account {{provisioningData.expenseName}}
+ + + +
+ +
+ +
+ +
diff --git a/src/app/organization/loan-provisioning-criteria/view-loan-provisioning-criteria/view-loan-provisioning-criteria.component.scss b/src/app/organization/loan-provisioning-criteria/view-loan-provisioning-criteria/view-loan-provisioning-criteria.component.scss new file mode 100644 index 000000000..a6974a161 --- /dev/null +++ b/src/app/organization/loan-provisioning-criteria/view-loan-provisioning-criteria/view-loan-provisioning-criteria.component.scss @@ -0,0 +1,24 @@ +table { + width: 100%; +} + +.mat-elevation-z1 { + margin: 1em 0 1.5em 0; +} + +h2, h3, h4 { + margin: 0; + font-weight: 500; +} + +span { + margin: 0.5em 0; +} + +mat-divider { + margin: 0 0 0.5em 0; +} + +.loanProduct { + padding: 10px 0px; +} diff --git a/src/app/organization/loan-provisioning-criteria/view-loan-provisioning-criteria/view-loan-provisioning-criteria.component.spec.ts b/src/app/organization/loan-provisioning-criteria/view-loan-provisioning-criteria/view-loan-provisioning-criteria.component.spec.ts new file mode 100644 index 000000000..93fe25ffc --- /dev/null +++ b/src/app/organization/loan-provisioning-criteria/view-loan-provisioning-criteria/view-loan-provisioning-criteria.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ViewLoanProvisioningCriteriaComponent } from './view-loan-provisioning-criteria.component'; + +describe('ViewLoanProvisioningCriteriaComponent', () => { + let component: ViewLoanProvisioningCriteriaComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ ViewLoanProvisioningCriteriaComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ViewLoanProvisioningCriteriaComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/organization/loan-provisioning-criteria/view-loan-provisioning-criteria/view-loan-provisioning-criteria.component.ts b/src/app/organization/loan-provisioning-criteria/view-loan-provisioning-criteria/view-loan-provisioning-criteria.component.ts new file mode 100644 index 000000000..dfc84c210 --- /dev/null +++ b/src/app/organization/loan-provisioning-criteria/view-loan-provisioning-criteria/view-loan-provisioning-criteria.component.ts @@ -0,0 +1,86 @@ +/** Angular Imports */ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { MatDialog } from '@angular/material'; +import { Router, ActivatedRoute } from '@angular/router'; +import { MatPaginator } from '@angular/material/paginator'; +import { MatTableDataSource } from '@angular/material/table'; + +/** Custom Services */ +import { OrganizationService } from 'app/organization/organization.service'; + +/** Dialog Component */ +import { DeleteDialogComponent } from 'app/shared/delete-dialog/delete-dialog.component'; + +/** + * View Loan Provisioning + */ +@Component({ + selector: 'mifosx-view-loan-provisioning-criteria', + templateUrl: './view-loan-provisioning-criteria.component.html', + styleUrls: ['./view-loan-provisioning-criteria.component.scss'] +}) +export class ViewLoanProvisioningCriteriaComponent implements OnInit { + + /** Loan Provisioning data. */ + provisioningData: any; + /** Loan Product String. */ + loanProducts = ''; + /** Column Headers for Mat Table. */ + displayedColumns: string[] = ['category', 'minAge', 'maxAge', 'percentage', 'liabilityAccount', 'expenseAccount']; + /** Data source for loan provisioning criteria table. */ + dataSource: MatTableDataSource; + + /** Paginator for loan provisioning criteria table. */ + @ViewChild(MatPaginator) paginator: MatPaginator; + + /** + * Retrieves the Provisioning data from `resolve`. + * @param {OrganizationService} organizationService Organization Service. + * @param {ActivatedRoute} route Activated Route. + * @param {Router} router Router for navigation. + * @param {MatDialog} dialog Dialog reference. + */ + constructor(private organizationService: OrganizationService, + private route: ActivatedRoute, + private router: Router, + public dialog: MatDialog) { + this.route.data.subscribe((data: { loanProvisioningCriteria: any }) => { + this.provisioningData = data.loanProvisioningCriteria; + }); + } + + ngOnInit() { + this.setLoanProvisioningSelectedCriteria(); + } + + /** + * Initializes the data source, paginator for loan provisioning criteria table. + */ + setLoanProvisioningSelectedCriteria() { + this.dataSource = new MatTableDataSource(this.provisioningData.definitions); + this.dataSource.paginator = this.paginator; + + /** Get load products as a string. */ + for (let _id = 0; _id < this.provisioningData.loanProducts.length; _id++) { + this.loanProducts += this.provisioningData.loanProducts[_id].name + ','; + } + } + + /** + * Delete Selected Provisioning Criteria. + */ + deleteCharge() { + const deleteChargeDialogRef = this.dialog.open(DeleteDialogComponent, { + data: { deleteContext: `loanProvisioningCriteria ${this.provisioningData.criteriaId}` } + }); + deleteChargeDialogRef.afterClosed().subscribe((response: any) => { + if (response.delete) { + this.organizationService.deleteProvisioningCriteria(this.provisioningData.criteriaId) + .subscribe(() => { + this.router.navigate(['/organization/provisioningcriteria']); + }); + } + }); + } + +} diff --git a/src/app/organization/organization-routing.module.ts b/src/app/organization/organization-routing.module.ts index 9875886a3..ca0169a4c 100644 --- a/src/app/organization/organization-routing.module.ts +++ b/src/app/organization/organization-routing.module.ts @@ -54,6 +54,8 @@ import { WorkingDaysResolver } from './working-days/working-days.resolver'; import { EditOfficeResolver } from './offices/edit-office/edit-office.resolver'; import { EditOfficeComponent } from './offices/edit-office/edit-office.component'; import { AdhocQueryTemplateResolver } from './adhoc-query/adhoc-query-template.resolver'; +import { ViewLoanProvisioningCriteriaComponent } from './loan-provisioning-criteria/view-loan-provisioning-criteria/view-loan-provisioning-criteria.component'; +import { LoanProvisioningCriteriasResolver } from './loan-provisioning-criteria/loan-provisioning-criterias.resolver'; /** Organization Routes */ const routes: Routes = [ @@ -68,11 +70,30 @@ const routes: Routes = [ }, { path: 'provisioning-criteria', - component: LoanProvisioningCriteriaComponent, data: { title: extract('Provisioning Criteria'), breadcrumb: 'Provisioning Criteria' }, - resolve: { - loanProvisioningCriteria: LoanProvisioningCriteriaResolver - } + children: [ + { + path: '', + component: LoanProvisioningCriteriaComponent, + resolve: { + loanProvisioningCriterias: LoanProvisioningCriteriasResolver + } + }, + + { + path: ':id', + data: { title: extract('View Provisioning Criteria'), routeParamBreadcrumb: 'id' }, + children: [ + { + path: '', + component: ViewLoanProvisioningCriteriaComponent, + resolve: { + loanProvisioningCriteria: LoanProvisioningCriteriaResolver + } + }, + ] + } + ], }, { path: 'offices', @@ -338,7 +359,8 @@ const routes: Routes = [ EntityDataTableChecksResolver, WorkingDaysResolver, EditOfficeResolver, - AdhocQueryTemplateResolver + AdhocQueryTemplateResolver, + LoanProvisioningCriteriasResolver, ] }) export class OrganizationRoutingModule { } diff --git a/src/app/organization/organization.module.ts b/src/app/organization/organization.module.ts index 55d86b4bf..e5146a565 100644 --- a/src/app/organization/organization.module.ts +++ b/src/app/organization/organization.module.ts @@ -32,6 +32,7 @@ import { HolidaysComponent } from './holidays/holidays.component'; import { EditEmployeeComponent } from './employees/edit-employee/edit-employee.component'; import { CreateTellerComponent } from './tellers/create-teller/create-teller.component'; import { EditTellerComponent } from './tellers/edit-teller/edit-teller.component'; +import { ViewLoanProvisioningCriteriaComponent } from './loan-provisioning-criteria/view-loan-provisioning-criteria/view-loan-provisioning-criteria.component'; /** * Organization Module @@ -69,7 +70,8 @@ import { EditTellerComponent } from './tellers/edit-teller/edit-teller.component EditOfficeComponent, EditEmployeeComponent, CreateTellerComponent, - EditTellerComponent + EditTellerComponent, + ViewLoanProvisioningCriteriaComponent, ] }) export class OrganizationModule { } diff --git a/src/app/organization/organization.service.ts b/src/app/organization/organization.service.ts index 86d2c3118..f67b33ab7 100644 --- a/src/app/organization/organization.service.ts +++ b/src/app/organization/organization.service.ts @@ -21,10 +21,34 @@ export class OrganizationService { /** * @returns {Observable} Loan Provisioning Criteria data */ - getProvisioningCriteria(): Observable { + getProvisioningCriterias(): Observable { return this.http.get('/provisioningcriteria'); } + /** + * @returns {Observable} Loan Provisioning Criteria template. + */ + getProvisioningCriteriaTemplate(): Observable { + return this.http.get('/provisioningcriteria/template'); + } + + /** + * @param {string} provisioningId Provisioning ID of Loan Provisioning Criteria. + * @returns {Observable} Provisioning Criteria. + */ + getProvisioningCriteria(provisioningId: string, template: boolean = false): Observable { + const httpParams = new HttpParams().set('template', template.toString()); + return this.http.get(`/provisioningcriteria/${provisioningId}`, { params: httpParams }); + } + + /** + * @param {string} provisioningId Provisioning ID of provisioning criteria to be deleted. + * @returns {Observable} + */ + deleteProvisioningCriteria(criteriaId: string): Observable { + return this.http.delete(`/provisioningcriteria/${criteriaId}`); + } + /** * @returns {Observable} Offices data */