Display Loan Arrears and Delinquency information using the global configuration (#1706)
Co-authored-by: Jose Alberto Hernandez <alberto@MacBook-Pro.local>
This commit is contained in:
co-authored by
Jose Alberto Hernandez
parent
c5de9ba30c
commit
1e9444cd20
@@ -0,0 +1,16 @@
|
|||||||
|
import { TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { LoanArrearDelinquencyResolver } from './loan-arrear-delinquency.resolver';
|
||||||
|
|
||||||
|
describe('LoanArrearDelinquencyResolver', () => {
|
||||||
|
let resolver: LoanArrearDelinquencyResolver;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
TestBed.configureTestingModule({});
|
||||||
|
resolver = TestBed.inject(LoanArrearDelinquencyResolver);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should be created', () => {
|
||||||
|
expect(resolver).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
import { Resolve, ActivatedRouteSnapshot } from '@angular/router';
|
||||||
|
import { SystemService } from 'app/system/system.service';
|
||||||
|
import { Observable } from 'rxjs';
|
||||||
|
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root'
|
||||||
|
})
|
||||||
|
export class LoanArrearDelinquencyResolver implements Resolve<boolean> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {SystemService} systemService System service.
|
||||||
|
*/
|
||||||
|
constructor(private systemService: SystemService) { }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the loan-arrears-delinquency-display-data configuration data.
|
||||||
|
* @returns {Observable<any>}
|
||||||
|
*/
|
||||||
|
resolve(route: ActivatedRouteSnapshot): Observable<any> {
|
||||||
|
return this.systemService.getConfigurationByName('loan-arrears-delinquency-display-data');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -56,6 +56,7 @@ import { LoanDelinquencyTagsTabComponent } from './loans-view/loan-delinquency-t
|
|||||||
import { LoanReschedulesResolver } from './common-resolvers/loan-reschedules.resolver';
|
import { LoanReschedulesResolver } from './common-resolvers/loan-reschedules.resolver';
|
||||||
import { RescheduleLoanTabComponent } from './loans-view/reschedule-loan-tab/reschedule-loan-tab.component';
|
import { RescheduleLoanTabComponent } from './loans-view/reschedule-loan-tab/reschedule-loan-tab.component';
|
||||||
import { AdjustLoanChargeComponent } from './loans-view/loan-account-actions/adjust-loan-charge/adjust-loan-charge.component';
|
import { AdjustLoanChargeComponent } from './loans-view/loan-account-actions/adjust-loan-charge/adjust-loan-charge.component';
|
||||||
|
import { LoanArrearDelinquencyResolver } from './common-resolvers/loan-arrear-delinquency.resolver';
|
||||||
|
|
||||||
/** Loans Route. */
|
/** Loans Route. */
|
||||||
const routes: Routes = [
|
const routes: Routes = [
|
||||||
@@ -77,7 +78,8 @@ const routes: Routes = [
|
|||||||
component: LoansViewComponent,
|
component: LoansViewComponent,
|
||||||
resolve: {
|
resolve: {
|
||||||
loanDetailsData: LoanDetailsResolver,
|
loanDetailsData: LoanDetailsResolver,
|
||||||
loanDatatables: LoanDatatablesResolver
|
loanDatatables: LoanDatatablesResolver,
|
||||||
|
loanArrearsDelinquencyConfig: LoanArrearDelinquencyResolver
|
||||||
},
|
},
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -26,32 +26,36 @@
|
|||||||
{{entityType}} Name: {{loanDetailsData.clientName ||
|
{{entityType}} Name: {{loanDetailsData.clientName ||
|
||||||
loanDetailsData.groupName}}<span class="m-l-10">({{loanDetailsData.clientAccountNo}})</span><br />
|
loanDetailsData.groupName}}<span class="m-l-10">({{loanDetailsData.clientAccountNo}})</span><br />
|
||||||
</span>
|
</span>
|
||||||
<span class="loans-overview" *ngIf="loanDetailsData.delinquencyRange">
|
<div *ngIf="loanDisplayArrearsDelinquency != 1">
|
||||||
Loan Account Classification : {{loanDetailsData?.delinquencyRange.classification}}<br />
|
<span class="loans-overview" *ngIf="loanDetailsData.delinquencyRange">
|
||||||
</span>
|
Loan Account Classification : {{loanDetailsData?.delinquencyRange.classification}}<br />
|
||||||
<span class="loans-overview"
|
</span>
|
||||||
*ngIf="loanDetailsData.delinquent && loanDetailsData.delinquent.pastDueDays > 0">
|
<span class="loans-overview"
|
||||||
Past Due Days : {{loanDetailsData?.delinquent.pastDueDays | formatNumber}}<br />
|
*ngIf="loanDetailsData.delinquent && loanDetailsData.delinquent.pastDueDays > 0">
|
||||||
</span>
|
Past Due Days : {{loanDetailsData?.delinquent.pastDueDays | formatNumber}}<br />
|
||||||
<span class="loans-overview" *ngIf="loanDetailsData.delinquent && loanDetailsData.delinquent.delinquentDays > 0
|
</span>
|
||||||
&& loanDetailsData.delinquent.pastDueDays != loanDetailsData.delinquent.delinquentDays">
|
<span class="loans-overview" *ngIf="loanDetailsData.delinquent && loanDetailsData.delinquent.delinquentDays > 0
|
||||||
Delinquent Days : {{loanDetailsData?.delinquent.delinquentDays | formatNumber}}
|
&& loanDetailsData.delinquent.pastDueDays != loanDetailsData.delinquent.delinquentDays">
|
||||||
</span>
|
Delinquent Days : {{loanDetailsData?.delinquent.delinquentDays | formatNumber}}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div *ngIf="loanDetailsData.summary" class="loans-overview mat-typography" fxFlex="40%">
|
<div *ngIf="loanDetailsData.summary" class="loans-overview mat-typography" fxFlex="40%">
|
||||||
<h3> Loan Account OverView </h3>
|
<h3> Loan Account OverView </h3>
|
||||||
<span>Current Balance: {{loanDetailsData.currency.displaySymbol}}
|
<span>Current Balance: {{loanDetailsData.currency.displaySymbol}}
|
||||||
{{loanDetailsData.summary.totalOutstanding | formatNumber}}</span><br>
|
{{loanDetailsData.summary.totalOutstanding | formatNumber}}</span><br>
|
||||||
<span *ngIf="loanDetailsData.inArrears">Arrears By: {{loanDetailsData.summary.totalOverdue | formatNumber}}
|
<div *ngIf="loanDisplayArrearsDelinquency < 2">
|
||||||
|
<span *ngIf="loanDetailsData.inArrears">Arrears By: {{loanDetailsData.summary.totalOverdue | formatNumber}}
|
||||||
<span *ngIf="!(loanDetailsData.summary.totalOverdue>=0)">Not Provided</span>
|
<span *ngIf="!(loanDetailsData.summary.totalOverdue>=0)">Not Provided</span>
|
||||||
</span><br>
|
</span><br>
|
||||||
<span *ngIf="loanDetailsData.inArrears">Arrears Since: {{loanDetailsData.summary.overdueSinceDate |
|
<span *ngIf="loanDetailsData.inArrears">Arrears Since: {{loanDetailsData.summary.overdueSinceDate |
|
||||||
dateFormat}}
|
dateFormat}}
|
||||||
</span>
|
</span>
|
||||||
<span *ngIf="loanDetailsData.totalOverpaid && loanDetailsData.totalOverpaid > 0">
|
<span *ngIf="loanDetailsData.totalOverpaid && loanDetailsData.totalOverpaid > 0">
|
||||||
Overpaid By: {{loanDetailsData.currency.displaySymbol}} {{loanDetailsData.totalOverpaid | formatNumber}}
|
Overpaid By: {{loanDetailsData.currency.displaySymbol}} {{loanDetailsData.totalOverpaid | formatNumber}}
|
||||||
</span>
|
</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span fxFlex="auto"></span>
|
<span fxFlex="auto"></span>
|
||||||
|
|||||||
@@ -27,6 +27,8 @@ export class LoansViewComponent implements OnInit {
|
|||||||
loanDatatables: any;
|
loanDatatables: any;
|
||||||
/** Recalculate Interest */
|
/** Recalculate Interest */
|
||||||
recalculateInterest: any;
|
recalculateInterest: any;
|
||||||
|
/** loan Arrears Delinquency config value */
|
||||||
|
loanDisplayArrearsDelinquency: number;
|
||||||
/** Status */
|
/** Status */
|
||||||
status: string;
|
status: string;
|
||||||
entityType: string;
|
entityType: string;
|
||||||
@@ -45,9 +47,10 @@ export class LoansViewComponent implements OnInit {
|
|||||||
private router: Router,
|
private router: Router,
|
||||||
public loansService: LoansService,
|
public loansService: LoansService,
|
||||||
public dialog: MatDialog) {
|
public dialog: MatDialog) {
|
||||||
this.route.data.subscribe((data: { loanDetailsData: any, loanDatatables: any}) => {
|
this.route.data.subscribe((data: { loanDetailsData: any, loanDatatables: any, loanArrearsDelinquencyConfig: any}) => {
|
||||||
this.loanDetailsData = data.loanDetailsData;
|
this.loanDetailsData = data.loanDetailsData;
|
||||||
this.loanDatatables = data.loanDatatables;
|
this.loanDatatables = data.loanDatatables;
|
||||||
|
this.loanDisplayArrearsDelinquency = data.loanArrearsDelinquencyConfig.value || 0;
|
||||||
this.loanStatus = this.loanDetailsData.status;
|
this.loanStatus = this.loanDetailsData.status;
|
||||||
});
|
});
|
||||||
this.loanId = this.route.snapshot.params['loanId'];
|
this.loanId = this.route.snapshot.params['loanId'];
|
||||||
|
|||||||
+3
@@ -75,6 +75,9 @@ export class EditConfigurationComponent implements OnInit {
|
|||||||
const payload = {
|
const payload = {
|
||||||
...this.configurationForm.value
|
...this.configurationForm.value
|
||||||
};
|
};
|
||||||
|
if (!this.configurationForm.value.stringValue) {
|
||||||
|
delete payload.stringValue;
|
||||||
|
}
|
||||||
if (this.configurationForm.value.dateValue != null) {
|
if (this.configurationForm.value.dateValue != null) {
|
||||||
payload.locale = this.settingsService.language.code;
|
payload.locale = this.settingsService.language.code;
|
||||||
payload.dateFormat = this.settingsService.dateFormat;
|
payload.dateFormat = this.settingsService.dateFormat;
|
||||||
|
|||||||
Reference in New Issue
Block a user