Support to pause and resume Loan Delinquency Classification (#1918)
Co-authored-by: Jose Alberto Hernandez <alberto@blue-daemon.local>
This commit is contained in:
co-authored by
Jose Alberto Hernandez
parent
3f4e9870b6
commit
a26c906d2c
@@ -1,16 +1,8 @@
|
||||
/** Angular Imports */
|
||||
import { Component, OnInit, ViewChild } from '@angular/core';
|
||||
import { MatDialog } from '@angular/material/dialog';
|
||||
import { Component, ViewChild } from '@angular/core';
|
||||
import { MatPaginator } from '@angular/material/paginator';
|
||||
import { MatTableDataSource, MatTable } from '@angular/material/table';
|
||||
import { MatTableDataSource } from '@angular/material/table';
|
||||
import { ActivatedRoute } from '@angular/router';
|
||||
import { FormControl } from '@angular/forms';
|
||||
|
||||
/** Custom Services */
|
||||
import { AccountTransfersService } from '../account-transfers.service';
|
||||
|
||||
/** Dialog Components */
|
||||
import { DeleteDialogComponent } from 'app/shared/delete-dialog/delete-dialog.component';
|
||||
|
||||
/**
|
||||
* Recurring Deposits Standing Instructions Tab
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
import { Injectable } from '@angular/core';
|
||||
import { Resolve, ActivatedRouteSnapshot } from '@angular/router';
|
||||
import { Observable } from 'rxjs';
|
||||
import { LoansService } from '../loans.service';
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
})
|
||||
export class LoanDelinquencyActionsResolver implements Resolve<boolean> {
|
||||
|
||||
/**
|
||||
* @param {LoansService} LoansService Loans service.
|
||||
*/
|
||||
constructor(private loansService: LoansService) { }
|
||||
|
||||
/**
|
||||
* Returns the Loans with Association data.
|
||||
* @returns {Observable<any>}
|
||||
*/
|
||||
resolve(route: ActivatedRouteSnapshot): Observable<any> {
|
||||
const loanId = route.paramMap.get('loanId') || route.parent.paramMap.get('loanId');
|
||||
return this.loansService.getDelinquencyActions(loanId);
|
||||
}
|
||||
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
|
||||
<h2 mat-dialog-title>{{"labels.heading.Loan Delinquency Actions" | translate}}</h2>
|
||||
|
||||
<div mat-dialog-content [formGroup]="delinquencyActionForm" fxLayout="column">
|
||||
|
||||
<mat-form-field fxFlex="48%" (click)="validFromDatePicker.open()">
|
||||
<mat-label>{{"labels.inputs.Start Date" | translate}}</mat-label>
|
||||
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="validFromDatePicker" required
|
||||
formControlName="startDate">
|
||||
<mat-datepicker-toggle matSuffix [for]="validFromDatePicker"></mat-datepicker-toggle>
|
||||
<mat-datepicker #validFromDatePicker></mat-datepicker>
|
||||
<mat-error *ngIf="delinquencyActionForm.controls.startDate.hasError('required')">
|
||||
{{"labels.inputs.Start Date" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
|
||||
<mat-form-field fxFlex="48%" (click)="validTillDatePicker.open()">
|
||||
<mat-label>{{"labels.inputs.End Date" | translate}}</mat-label>
|
||||
<input matInput [min]="delinquencyActionForm.value.startDate" [max]="maxDate" [matDatepicker]="validTillDatePicker" required
|
||||
formControlName="endDate">
|
||||
<mat-datepicker-toggle matSuffix [for]="validTillDatePicker"></mat-datepicker-toggle>
|
||||
<mat-datepicker #validTillDatePicker></mat-datepicker>
|
||||
<mat-error *ngIf="delinquencyActionForm.controls.endDate.hasError('required')">
|
||||
{{"labels.inputs.End Date" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
|
||||
</div>
|
||||
|
||||
<mat-dialog-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
|
||||
<button mat-raised-button mat-dialog-close> {{"labels.buttons.Cancel" | translate}} </button>
|
||||
<button mat-raised-button color="primary" [mat-dialog-close]="{ data: delinquencyActionForm }"
|
||||
[disabled]="!delinquencyActionForm.valid || delinquencyActionForm.pristine">{{"labels.buttons.Submit" | translate}}</button>
|
||||
</mat-dialog-actions>
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { LoanDelinquencyActionDialogComponent } from './loan-delinquency-action-dialog.component';
|
||||
|
||||
describe('LoanDelinquencyActionDialogComponent', () => {
|
||||
let component: LoanDelinquencyActionDialogComponent;
|
||||
let fixture: ComponentFixture<LoanDelinquencyActionDialogComponent>;
|
||||
|
||||
beforeEach(async () => {
|
||||
await TestBed.configureTestingModule({
|
||||
declarations: [ LoanDelinquencyActionDialogComponent ]
|
||||
})
|
||||
.compileComponents();
|
||||
|
||||
fixture = TestBed.createComponent(LoanDelinquencyActionDialogComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
import { Component, Inject, OnInit } from '@angular/core';
|
||||
import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';
|
||||
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
||||
import { SettingsService } from 'app/settings/settings.service';
|
||||
|
||||
@Component({
|
||||
selector: 'mifosx-loan-delinquency-action-dialog',
|
||||
templateUrl: './loan-delinquency-action-dialog.component.html',
|
||||
styleUrls: ['./loan-delinquency-action-dialog.component.scss']
|
||||
})
|
||||
export class LoanDelinquencyActionDialogComponent implements OnInit {
|
||||
|
||||
delinquencyActionForm: UntypedFormGroup;
|
||||
/** Minimum date allowed. */
|
||||
minDate = new Date(2000, 0, 1);
|
||||
/** Maximum date allowed. */
|
||||
maxDate = new Date(2100, 0, 1);
|
||||
|
||||
constructor(public dialogRef: MatDialogRef<LoanDelinquencyActionDialogComponent>,
|
||||
@Inject(MAT_DIALOG_DATA) public data: any,
|
||||
private formBuilder: UntypedFormBuilder,
|
||||
private settingsService: SettingsService) {
|
||||
this.createDelinquencyActionForm();
|
||||
}
|
||||
|
||||
ngOnInit(): void {
|
||||
this.minDate = this.settingsService.businessDate;
|
||||
}
|
||||
|
||||
createDelinquencyActionForm() {
|
||||
this.delinquencyActionForm = this.formBuilder.group({
|
||||
'startDate': [new Date(), Validators.required],
|
||||
'endDate': ['', Validators.required],
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
@@ -59,6 +59,7 @@ import { ExternalAssetOwnerResolver } from './common-resolvers/external-asset-ow
|
||||
import { ExternalAssetOwnerActiveTransferResolver } from './common-resolvers/external-asset-owner-active-transfer.resolver';
|
||||
import { LoanCollateralsResolver } from './common-resolvers/loan-collaterals.resolver';
|
||||
import { LoanDelinquencyDataResolver } from './common-resolvers/loan-delinquency-data.resolver';
|
||||
import { LoanDelinquencyActionsResolver } from './common-resolvers/loan-delinquency-actions.resolver';
|
||||
|
||||
/** Loans Route. */
|
||||
const routes: Routes = [
|
||||
@@ -133,7 +134,8 @@ const routes: Routes = [
|
||||
data: { title: 'Loans Delinquency Tags', breadcrumb: 'Delinquency Tags', routeParamBreadcrumb: false },
|
||||
resolve: {
|
||||
loanDelinquencyTagsData: LoanDelinquencyTagsResolver,
|
||||
loanDelinquencyData: LoanDelinquencyDataResolver
|
||||
loanDelinquencyData: LoanDelinquencyDataResolver,
|
||||
loanDelinquencyActions: LoanDelinquencyActionsResolver
|
||||
},
|
||||
children: [
|
||||
{
|
||||
|
||||
+50
@@ -60,4 +60,54 @@
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
<div fxLayout="row" fxLayoutAlign="flex-end" class="m-t-20 m-b-10" *ngIf="allowPause">
|
||||
<button mat-raised-button color="primary" (click)="createDelinquencyAction()" *mifosxHasPermission="'CREATE_DELINQUENCY_ACTION'">
|
||||
<fa-icon icon="pause" class="m-r-10"></fa-icon>{{ 'labels.buttons.Pause Delinquency Classification' | translate }}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div *ngIf="loanDelinquencyActions.length > 0" class="m-t-10">
|
||||
<h3>{{"labels.heading.Loan Delinquency Actions" | translate}}</h3>
|
||||
|
||||
<table mat-table [dataSource]="loanDelinquencyActions">
|
||||
|
||||
<ng-container matColumnDef="action">
|
||||
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Action" | translate}} </th>
|
||||
<td mat-cell *matCellDef="let item" ngClass="{{actionClass(item.action)}}"> {{ item.action }} </td>
|
||||
</ng-container>
|
||||
|
||||
<ng-container matColumnDef="startDate">
|
||||
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Start Date" | translate}} </th>
|
||||
<td mat-cell *matCellDef="let item"> {{ item.startDate | dateFormat }} </td>
|
||||
</ng-container>
|
||||
|
||||
<ng-container matColumnDef="endDate">
|
||||
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.End Date" | translate}} </th>
|
||||
<td mat-cell *matCellDef="let item"> {{ item.endDate | dateFormat }} </td>
|
||||
</ng-container>
|
||||
|
||||
<ng-container matColumnDef="createdOn">
|
||||
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Created On" | translate}} </th>
|
||||
<td mat-cell *matCellDef="let item"> {{ item.createdOn | datetimeFormat }} </td>
|
||||
</ng-container>
|
||||
|
||||
<ng-container matColumnDef="actions">
|
||||
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Actions" | translate}} </th>
|
||||
<td mat-cell *matCellDef="let item">
|
||||
<span *ngIf="isCurrentAndPauseAction(item)">
|
||||
<button mat-button color="primary" (click)="resumeDelinquencyClassification(item)"
|
||||
*mifosxHasPermission="'CREATE_DELINQUENCY_ACTION'" matTooltip="{{'tooltips.Resume Delinquency Classification' | translate}}" >
|
||||
<fa-icon icon="play" class="m-r-10"></fa-icon>
|
||||
</button>
|
||||
</span>
|
||||
</td>
|
||||
</ng-container>
|
||||
|
||||
<tr mat-header-row *matHeaderRowDef="loanDelinquencyActionsColumns"></tr>
|
||||
<tr mat-row *matRowDef="let row; columns: loanDelinquencyActionsColumns;"></tr>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
+109
-4
@@ -1,6 +1,12 @@
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
import { MatDialog } from '@angular/material/dialog';
|
||||
import { ActivatedRoute } from '@angular/router';
|
||||
import { DelinquentData, InstallmentLevelDelinquency } from 'app/loans/models/loan-account.model';
|
||||
import { Dates } from 'app/core/utils/dates';
|
||||
import { LoanDelinquencyActionDialogComponent } from 'app/loans/custom-dialog/loan-delinquency-action-dialog/loan-delinquency-action-dialog.component';
|
||||
import { LoansService } from 'app/loans/loans.service';
|
||||
import { DelinquentData, InstallmentLevelDelinquency, LoanDelinquencyAction, LoanDelinquencyTags } from 'app/loans/models/loan-account.model';
|
||||
import { SettingsService } from 'app/settings/settings.service';
|
||||
import { ConfirmationDialogComponent } from 'app/shared/confirmation-dialog/confirmation-dialog.component';
|
||||
import { Currency } from 'app/shared/models/general.model';
|
||||
|
||||
@Component({
|
||||
@@ -10,15 +16,34 @@ import { Currency } from 'app/shared/models/general.model';
|
||||
})
|
||||
export class LoanDelinquencyTagsTabComponent implements OnInit {
|
||||
|
||||
loanDelinquencyTags: any;
|
||||
loanDelinquencyTags: LoanDelinquencyTags[] = [];
|
||||
loanDelinquencyActions: LoanDelinquencyAction[] = [];
|
||||
currentLoanDelinquencyAction: LoanDelinquencyAction | null;
|
||||
currency: Currency;
|
||||
installmentLevelDelinquency: InstallmentLevelDelinquency[] = [];
|
||||
loanDelinquencyTagsColumns: string[] = ['classification', 'addedOn', 'liftedOn'];
|
||||
loanDelinquencyActionsColumns: string[] = ['action', 'startDate', 'endDate', 'createdOn', 'actions'];
|
||||
installmentDelinquencyTagsColumns: string[] = ['classification', 'minimumAgeDays', 'amount'];
|
||||
|
||||
constructor(private route: ActivatedRoute) {
|
||||
this.route.parent.data.subscribe((data: { loanDelinquencyTagsData: any, loanDelinquencyData: any }) => {
|
||||
allowPause = true;
|
||||
loanId: any;
|
||||
|
||||
locale: string;
|
||||
dateFormat: string;
|
||||
|
||||
constructor(private route: ActivatedRoute,
|
||||
private loansServices: LoansService,
|
||||
private dateUtils: Dates,
|
||||
private settingsService: SettingsService,
|
||||
public dialog: MatDialog) {
|
||||
this.loanId = this.route.parent.parent.snapshot.params['loanId'];
|
||||
|
||||
this.route.parent.data.subscribe((data: { loanDelinquencyTagsData: LoanDelinquencyTags[],
|
||||
loanDelinquencyData: any,
|
||||
loanDelinquencyActions: LoanDelinquencyAction[] }) => {
|
||||
this.loanDelinquencyTags = data.loanDelinquencyTagsData;
|
||||
this.loanDelinquencyActions = data.loanDelinquencyActions || [];
|
||||
this.validateDelinquencyActions();
|
||||
const loanDelinquencyData: DelinquentData | null = data.loanDelinquencyData.delinquent || null;
|
||||
this.currency = data.loanDelinquencyData.currency;
|
||||
this.installmentLevelDelinquency = [];
|
||||
@@ -29,6 +54,86 @@ export class LoanDelinquencyTagsTabComponent implements OnInit {
|
||||
}
|
||||
|
||||
ngOnInit(): void {
|
||||
this.locale = this.settingsService.language.code;
|
||||
this.dateFormat = this.settingsService.dateFormat;
|
||||
this.currentLoanDelinquencyAction = null;
|
||||
this.validateDelinquencyActions();
|
||||
}
|
||||
|
||||
validateDelinquencyActions(): void {
|
||||
if (this.loanDelinquencyActions.length > 0) {
|
||||
const businessDate: Date = this.settingsService.businessDate;
|
||||
this.currentLoanDelinquencyAction = this.loanDelinquencyActions[this.loanDelinquencyActions.length - 1];
|
||||
this.allowPause = (this.currentLoanDelinquencyAction.action === 'RESUME');
|
||||
}
|
||||
}
|
||||
|
||||
createDelinquencyAction(): void {
|
||||
const action = 'pause';
|
||||
const loanDelinquencyActionDialogRef = this.dialog.open(LoanDelinquencyActionDialogComponent, {
|
||||
data: {
|
||||
action: action
|
||||
},
|
||||
});
|
||||
loanDelinquencyActionDialogRef.afterClosed().subscribe((response: { data: any }) => {
|
||||
const startDate: Date = response.data.value.startDate;
|
||||
const endDate: Date = response.data.value.endDate;
|
||||
|
||||
this.sendDelinquencyAction(action, startDate, endDate);
|
||||
});
|
||||
}
|
||||
|
||||
resumeDelinquencyClassification(item: LoanDelinquencyAction): void {
|
||||
const removePauseDialogRef = this.dialog.open(ConfirmationDialogComponent, {
|
||||
data: { heading: 'Loan Delinquency Classification',
|
||||
dialogContext: 'Are you sure you want resume the Delinquency Classification for Loan ' + this.loanId,
|
||||
type: 'Mild'
|
||||
}
|
||||
});
|
||||
removePauseDialogRef.afterClosed().subscribe((response: any) => {
|
||||
if (response.confirm) {
|
||||
this.sendDelinquencyAction('resume', new Date(), null);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
sendDelinquencyAction(action: string, startDate: Date, endDate: Date): void {
|
||||
let payload: any = {
|
||||
action,
|
||||
locale: this.locale,
|
||||
dateFormat: this.dateFormat,
|
||||
startDate: this.dateUtils.formatDate(startDate, this.dateFormat)
|
||||
};
|
||||
if (action === 'pause') {
|
||||
payload = {
|
||||
action,
|
||||
locale: this.locale,
|
||||
dateFormat: this.dateFormat,
|
||||
startDate: this.dateUtils.formatDate(startDate, this.dateFormat),
|
||||
endDate: this.dateUtils.formatDate(endDate, this.dateFormat)
|
||||
};
|
||||
}
|
||||
|
||||
this.loansServices.createDelinquencyActions(this.loanId, payload).subscribe((result: any) => {
|
||||
this.loansServices.getDelinquencyActions(this.loanId).subscribe((loanDelinquencyActions: LoanDelinquencyAction[]) => {
|
||||
this.loanDelinquencyActions = loanDelinquencyActions;
|
||||
this.validateDelinquencyActions();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
isCurrentAndPauseAction(item: LoanDelinquencyAction): boolean {
|
||||
if (this.currentLoanDelinquencyAction != null) {
|
||||
return (this.currentLoanDelinquencyAction.id === item.id && item.action === 'PAUSE');
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
actionClass(action: string): string {
|
||||
if (action === 'PAUSE') {
|
||||
return 'status-pending';
|
||||
}
|
||||
return 'status-active';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -20,28 +20,34 @@
|
||||
<h3>
|
||||
<i class="fa fa-stop" matTooltip="{{'labels.status.' + loanDetailsData.status.value | translate}}"
|
||||
[ngClass]="loanDetailsData.inArrears?'status-active-overdue':( iconLoanStatusColor() | statusLookup)"></i>
|
||||
{{'labels.heading.Loan Product' | translate}}: {{loanDetailsData.loanProductName}}
|
||||
<span class="m-r-10">{{'labels.heading.Loan Product' | translate}}:</span> {{loanDetailsData.loanProductName}}
|
||||
<mifosx-account-number accountNo="{{loanDetailsData.accountNo}}"></mifosx-account-number>
|
||||
</h3>
|
||||
<span class="loans-overview">
|
||||
{{'labels.text.' + entityType | translate}} {{"labels.inputs.name" | translate}}: {{loanDetailsData.clientName ||
|
||||
loanDetailsData.groupName}}<span class="m-l-10">({{loanDetailsData.clientAccountNo}})</span><br />
|
||||
<span class="m-r-10">{{'labels.text.' + entityType | translate}} {{"labels.inputs.name" | translate}} :</span> {{loanDetailsData.clientName ||
|
||||
loanDetailsData.groupName}}<span class="m-l-5">({{loanDetailsData.clientAccountNo}})</span><br />
|
||||
</span>
|
||||
<div *ngIf="loanDisplayArrearsDelinquency != 1">
|
||||
<span class="loans-overview" *ngIf="loanDetailsData.delinquencyRange">
|
||||
{{"labels.inputs.Loan Account Classification" | translate}} :
|
||||
{{loanDetailsData?.delinquencyRange.classification}}<br />
|
||||
</span>
|
||||
<span class="loans-overview"
|
||||
*ngIf="loanDetailsData.delinquent && loanDetailsData.delinquent.pastDueDays > 0">
|
||||
{{"labels.inputs.Past Due Days" | translate}} : {{loanDetailsData?.delinquent.pastDueDays |
|
||||
formatNumber }}<br />
|
||||
</span>
|
||||
<span class="loans-overview" *ngIf="loanDetailsData.delinquent && loanDetailsData.delinquent.delinquentDays > 0
|
||||
&& loanDetailsData.delinquent.pastDueDays != loanDetailsData.delinquent.delinquentDays">
|
||||
{{"labels.inputs.Delinquent Days" | translate}} : {{loanDetailsData?.delinquent.delinquentDays |
|
||||
formatNumber }}
|
||||
</span>
|
||||
<table class="account-overview">
|
||||
<tbody>
|
||||
<tr *ngIf="loanDetailsData.delinquencyRange">
|
||||
<td>{{"labels.inputs.Delinquency Classification" | translate}} :</td>
|
||||
<td>
|
||||
<span class="m-r-3"><i [ngClass]="loanDelinquencyClassificationStyle"></i></span>
|
||||
{{loanDetailsData?.delinquencyRange.classification}}
|
||||
</td>
|
||||
</tr>
|
||||
<tr *ngIf="loanDetailsData.delinquent && loanDetailsData.delinquent.pastDueDays > 0">
|
||||
<td>{{"labels.inputs.Past Due Days" | translate}} :</td>
|
||||
<td>{{loanDetailsData?.delinquent.pastDueDays | formatNumber }}</td>
|
||||
</tr>
|
||||
<tr *ngIf="loanDetailsData.delinquent && loanDetailsData.delinquent.delinquentDays > 0
|
||||
&& loanDetailsData.delinquent.pastDueDays != loanDetailsData.delinquent.delinquentDays">
|
||||
<td>{{"labels.inputs.Delinquent Days" | translate}} :</td>
|
||||
<td>{{loanDetailsData?.delinquent.delinquentDays | formatNumber }}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -1,40 +1,8 @@
|
||||
.loan-card {
|
||||
margin: 0 auto;
|
||||
max-width: 80rem;
|
||||
width: 90%;
|
||||
padding: 0;
|
||||
.header {
|
||||
padding: 1%;
|
||||
.header-title-group {
|
||||
.loan-card-title {
|
||||
color: white;
|
||||
width: 90%;
|
||||
p {
|
||||
color: white;
|
||||
}
|
||||
}
|
||||
}
|
||||
.profile-image-container {
|
||||
margin: 1%;
|
||||
.profile-image {
|
||||
object-fit: cover;
|
||||
border-radius: 20px;
|
||||
}
|
||||
}
|
||||
.loan-actions {
|
||||
align-self: flex-end;
|
||||
margin: 0 1%;
|
||||
// min-width: 72%;
|
||||
}
|
||||
.loan-span {
|
||||
margin: 0 0.5%;
|
||||
}
|
||||
}
|
||||
.navigation-tabs {
|
||||
overflow: auto;
|
||||
}
|
||||
}
|
||||
|
||||
.loans-overview {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.account-overview {
|
||||
min-width: 60%;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ import { ConfirmationDialogComponent } from '../../shared/confirmation-dialog/co
|
||||
import { DeleteDialogComponent } from 'app/shared/delete-dialog/delete-dialog.component';
|
||||
import { LoanStatus } from '../models/loan-status.model';
|
||||
import { Currency } from 'app/shared/models/general.model';
|
||||
import { DelinquencyPausePeriod } from '../models/loan-account.model';
|
||||
|
||||
@Component({
|
||||
selector: 'mifosx-loans-view',
|
||||
@@ -42,6 +43,7 @@ export class LoansViewComponent implements OnInit {
|
||||
/** Disburse Transaction number */
|
||||
disburseTransactionNo = 0;
|
||||
|
||||
loanDelinquencyClassificationStyle = '';
|
||||
loanStatus: LoanStatus;
|
||||
currency: Currency;
|
||||
|
||||
@@ -80,6 +82,7 @@ export class LoansViewComponent implements OnInit {
|
||||
} else if (this.router.url.includes('centers')) {
|
||||
this.entityType = 'Center';
|
||||
}
|
||||
this.loanDelinquencyClassification();
|
||||
}
|
||||
|
||||
// Defines the buttons based on the status of the loan account
|
||||
@@ -199,6 +202,17 @@ export class LoansViewComponent implements OnInit {
|
||||
});
|
||||
}
|
||||
|
||||
loanDelinquencyClassification(): void {
|
||||
this.loanDelinquencyClassificationStyle = '';
|
||||
if (this.loanDetailsData.delinquent && this.loanDetailsData.delinquent.delinquencyPausePeriods) {
|
||||
this.loanDetailsData.delinquent.delinquencyPausePeriods.some((period: DelinquencyPausePeriod) => {
|
||||
if (period.active) {
|
||||
this.loanDelinquencyClassificationStyle = 'fa fa-stop status-pending';
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
iconLoanStatusColor() {
|
||||
if (this.loanDetailsData.chargedOff) {
|
||||
return 'loanStatusType.chargeoff';
|
||||
|
||||
@@ -79,6 +79,7 @@ import { AssetTransferLoanComponent } from './loans-view/loan-account-actions/as
|
||||
import { ExternalAssetOwnerTabComponent } from './loans-view/external-asset-owner-tab/external-asset-owner-tab.component';
|
||||
import { ExternalAssetTransferComponent } from './loans-view/external-asset-owner-tab/external-asset-transfer/external-asset-transfer.component';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { LoanDelinquencyActionDialogComponent } from './custom-dialog/loan-delinquency-action-dialog/loan-delinquency-action-dialog.component';
|
||||
|
||||
/**
|
||||
* Loans Module
|
||||
@@ -161,7 +162,8 @@ import { TranslateModule } from '@ngx-translate/core';
|
||||
ChargeOffComponent,
|
||||
AssetTransferLoanComponent,
|
||||
ExternalAssetOwnerTabComponent,
|
||||
ExternalAssetTransferComponent
|
||||
ExternalAssetTransferComponent,
|
||||
LoanDelinquencyActionDialogComponent
|
||||
],
|
||||
providers: [ ],
|
||||
})
|
||||
|
||||
@@ -82,6 +82,14 @@ export class LoansService {
|
||||
return this.http.get(`/loans/${loanId}`, { params: httpParams });
|
||||
}
|
||||
|
||||
getDelinquencyActions(loanId: string) {
|
||||
return this.http.get(`/loans/${loanId}/delinquency-actions`);
|
||||
}
|
||||
|
||||
createDelinquencyActions(loanId: string, delinquencyActions: any) {
|
||||
return this.http.post(`/loans/${loanId}/delinquency-actions`, delinquencyActions);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the loan template data with specific condition
|
||||
* @param loanId Loan Id
|
||||
|
||||
@@ -24,3 +24,28 @@ export interface InstallmentLevelDelinquency {
|
||||
minimumAgeDays: number;
|
||||
delinquentAmount: number;
|
||||
}
|
||||
|
||||
export interface LoanDelinquencyTags {
|
||||
id: number;
|
||||
loanId: number;
|
||||
delinquencyRange: DelinquencyRange;
|
||||
addedOnDate: number[];
|
||||
liftedOnDate: number[];
|
||||
}
|
||||
|
||||
export interface LoanDelinquencyAction {
|
||||
id: number;
|
||||
action: string;
|
||||
startDate: number[];
|
||||
endDate: number[];
|
||||
createdById: number;
|
||||
createdOn: Date;
|
||||
updatedById: number;
|
||||
lastModifiedOn: Date;
|
||||
}
|
||||
|
||||
export interface DelinquencyPausePeriod {
|
||||
active: boolean;
|
||||
pausePeriodStart: number[];
|
||||
pausePeriodEnd: number[];
|
||||
}
|
||||
|
||||
@@ -107,7 +107,8 @@ import {
|
||||
faFileExcel,
|
||||
faFileExport,
|
||||
faCalculator,
|
||||
faCalendarCheck
|
||||
faCalendarCheck,
|
||||
faPause
|
||||
} from '@fortawesome/free-solid-svg-icons';
|
||||
|
||||
/**
|
||||
@@ -177,6 +178,7 @@ export class IconsModule {
|
||||
faMinusCircle,
|
||||
faMoneyBillAlt,
|
||||
faMoneyCheck,
|
||||
faPause,
|
||||
faPencilAlt,
|
||||
faPlay,
|
||||
faPlus,
|
||||
|
||||
@@ -418,6 +418,7 @@
|
||||
"No": "Ne",
|
||||
"Parameters": "Parametry",
|
||||
"Pattern": "Vzor",
|
||||
"Pause Delinquency Classification": "Klasifikace delikvence pause",
|
||||
"Pay": "Platit",
|
||||
"Payments": "Platby",
|
||||
"Permissions": "Oprávnění",
|
||||
@@ -703,6 +704,7 @@
|
||||
"List of share products in the organization": "Seznam produktů sdílení v organizaci. Pro více podrobností klikněte",
|
||||
"Loan Account OverView": "Přehled úvěrového účtu",
|
||||
"Loan Accounts": "Úvěrové účty",
|
||||
"Loan Delinquency Actions": "Akce delikvence půjčky",
|
||||
"Loan Delinquency Tags": "Značky proplácení úvěrů",
|
||||
"Loan Delinquency Installment Tags": "Značky delikvenční splátky půjčky",
|
||||
"Loan Details": "Podrobnosti o půjčce",
|
||||
@@ -1151,6 +1153,7 @@
|
||||
"Default Shares per Client": "Výchozí podíly na klienta",
|
||||
"Default Theme": "Výchozí motiv",
|
||||
"Deleted": "Smazáno",
|
||||
"Delinquency Action": "Akce delikvence",
|
||||
"Delinquency Bucket": "Delikvence Bucket",
|
||||
"Delinquency Classification": "Klasifikace delikvence",
|
||||
"Delinquency Tags": "Štítky delikvence",
|
||||
@@ -2813,6 +2816,7 @@
|
||||
"Reject Share": "Odmítnout sdílení",
|
||||
"Remove Client from Group": "Odebrat klienta ze skupiny",
|
||||
"Remove Period": "Odebrat období",
|
||||
"Resume Delinquency Classification": "Pokračovat v klasifikaci delikvence",
|
||||
"Savings Account": "Spořící účet",
|
||||
"Sets the balance required for interest calculation": "Nastavuje zůstatek potřebný pro výpočet úroku",
|
||||
"Sets the maximum allowed overdraft amount": "Nastavuje maximální povolenou částku kontokorentu pro spořicí účet, který smí mít kontokorent",
|
||||
|
||||
@@ -418,6 +418,7 @@
|
||||
"No": "NEIN",
|
||||
"Parameters": "Parameter",
|
||||
"Pattern": "Muster",
|
||||
"Pause Delinquency Classification": "Pause Kriminalitätsklassifizierung",
|
||||
"Pay": "Zahlen",
|
||||
"Payments": "Zahlungen",
|
||||
"Permissions": "Berechtigungen",
|
||||
@@ -704,6 +705,7 @@
|
||||
"List of share products in the organization": "Liste der Aktienprodukte in der Organisation. Für weitere Details klicken Sie",
|
||||
"Loan Account OverView": "Kreditkontoübersicht",
|
||||
"Loan Accounts": "Kreditkonten",
|
||||
"Loan Delinquency Actions": "Darlehenskriminalitätsmaßnahmen",
|
||||
"Loan Delinquency Tags": "Tags für Kreditausfälle",
|
||||
"Loan Delinquency Installment Tags": "Kredit -Delinquenz -Ratenmarke",
|
||||
"Loan Details": "Kreditdetails",
|
||||
@@ -1151,6 +1153,7 @@
|
||||
"Default Shares per Client": "Standardanteile pro Kunde",
|
||||
"Default Theme": "Standardthema",
|
||||
"Deleted": "Gelöscht",
|
||||
"Delinquency Action": "Kriminalitätsaktion",
|
||||
"Delinquency Bucket": "Kriminalitätseimer",
|
||||
"Delinquency Classification": "Kriminalitätsklassifizierung",
|
||||
"Delinquency Tags": "Kriminalitäts-Tags",
|
||||
@@ -2812,6 +2815,7 @@
|
||||
"Reject Share": "Teilen ablehnen",
|
||||
"Remove Client from Group": "Client aus Gruppe entfernen",
|
||||
"Remove Period": "Punkt entfernen",
|
||||
"Resume Delinquency Classification": "Resume Delinquency Classification",
|
||||
"Savings Account": "Sparkonto",
|
||||
"Sets the balance required for interest calculation": "Legt den für die Zinsberechnung erforderlichen Saldo fest",
|
||||
"Sets the maximum allowed overdraft amount": "Legt den maximal zulässigen Überziehungsbetrag für ein Sparkonto fest, das überzogen werden darf",
|
||||
|
||||
@@ -418,6 +418,7 @@
|
||||
"No": "No",
|
||||
"Parameters": "Parameters",
|
||||
"Pattern": "Pattern",
|
||||
"Pause Delinquency Classification": "Pause Delinquency Classification",
|
||||
"Pay": "Pay",
|
||||
"Payments": "Payments",
|
||||
"Permissions": "Permissions",
|
||||
@@ -704,6 +705,7 @@
|
||||
"List of share products in the organization": "List of share products in the organization. For more details click",
|
||||
"Loan Account OverView": "Loan Account OverView",
|
||||
"Loan Accounts": "Loan Accounts",
|
||||
"Loan Delinquency Actions": "Loan Delinquency Actions",
|
||||
"Loan Delinquency Tags": "Loan Delinquency Tags",
|
||||
"Loan Delinquency Installment Tags": "Loan Delinquency Installment Tags",
|
||||
"Loan Details": "Loan Details",
|
||||
@@ -1151,6 +1153,7 @@
|
||||
"Default Shares per Client": "Default Shares per Client",
|
||||
"Default Theme": "Default Theme",
|
||||
"Deleted": "Deleted",
|
||||
"Delinquency Action": "Delinquency Action",
|
||||
"Delinquency Bucket": "Delinquency Bucket",
|
||||
"Delinquency Classification": "Delinquency Classification",
|
||||
"Delinquency Tags": "Delinquency Tags",
|
||||
@@ -2815,6 +2818,7 @@
|
||||
"Reject Share": "Reject Share",
|
||||
"Remove Client from Group": "Remove Client from Group",
|
||||
"Remove Period": "Remove Period",
|
||||
"Resume Delinquency Classification": "Resume Delinquency Classification",
|
||||
"Savings Account": "Savings Account",
|
||||
"Sets the balance required for interest calculation": "Sets the balance required for interest calculation",
|
||||
"Sets the maximum allowed overdraft amount": "Sets the maximum allowed overdraft amount for a saving account that is allowed to have an overdraft",
|
||||
|
||||
@@ -418,6 +418,7 @@
|
||||
"No": "No",
|
||||
"Parameters": "Parámetros",
|
||||
"Pattern": "Patrón",
|
||||
"Pause Delinquency Classification": "Pausar Clasificación de delincuencia",
|
||||
"Pay": "Pagar",
|
||||
"Payments": "Pagos",
|
||||
"Permissions": "Permisos",
|
||||
@@ -704,6 +705,7 @@
|
||||
"List of share products in the organization": "Listado de productos compartidos en la organización. Para más detalles haga clic",
|
||||
"Loan Account OverView": "Descripción general de la cuenta de Crédito",
|
||||
"Loan Accounts": "Cuentas de Crédito",
|
||||
"Loan Delinquency Actions": "Acciones de Delincuencia de Crédito",
|
||||
"Loan Delinquency Tags": "Etiquetas de morosidad de Créditos",
|
||||
"Loan Delinquency Installment Tags": "Etiquetas de morosidad de cuotas",
|
||||
"Loan Details": "Detalles del Crédito",
|
||||
@@ -897,7 +899,7 @@
|
||||
"Add Groups": "Agregar grupos",
|
||||
"Add Journal Entries": "Agregar entradas de diario",
|
||||
"Added On": "Añadido",
|
||||
"Address": "DIRECCIÓN",
|
||||
"Address": "Domicilio",
|
||||
"Address Line": "Dirección",
|
||||
"Adjust advance payments toward future installments": "Ajustar los pagos por adelantado a cuotas futuras",
|
||||
"Adjust interest rates for remainder of loan": "Ajustar las tasas de interés para el resto del Crédito",
|
||||
@@ -1151,6 +1153,7 @@
|
||||
"Default Shares per Client": "Acciones predeterminadas por cliente",
|
||||
"Default Theme": "Tema predeterminado",
|
||||
"Deleted": "Eliminado",
|
||||
"Delinquency Action": "Acción de morosidad",
|
||||
"Delinquency Bucket": "Cubo de morosidad",
|
||||
"Delinquency Classification": "Clasificación de morosidad",
|
||||
"Delinquency Tags": "Etiquetas de morosidad",
|
||||
@@ -2167,7 +2170,7 @@
|
||||
"Add new share product or modify or inactivate share product": "Agregar nuevo producto compartido o modificar o desactivar el producto compartido",
|
||||
"Add, modify or inactivate a Fixed deposit product": "Agregar, modificar o desactivar un producto de depósito fijo",
|
||||
"Add, modify or inactivate a Recurring Deposit product": "Agregar, modificar o desactivar un producto de depósito recurrente",
|
||||
"Address": "DIRECCIÓN",
|
||||
"Address": "Domicilio",
|
||||
"Adhoc Query": "Consulta ad hoc",
|
||||
"Advance Search": "Búsqueda Avanzada",
|
||||
"Advanced search option for journal entries": "Opción de búsqueda avanzada para entradas de diario",
|
||||
@@ -2813,6 +2816,7 @@
|
||||
"Reject Share": "Rechazar compartir",
|
||||
"Remove Client from Group": "Eliminar cliente del grupo",
|
||||
"Remove Period": "Eliminar período",
|
||||
"Resume Delinquency Classification": "Reanudar la clasificación de la delincuencia",
|
||||
"Savings Account": "Cuenta de ahorros",
|
||||
"Sets the balance required for interest calculation": "Establece el saldo requerido para el cálculo de intereses.",
|
||||
"Sets the maximum allowed overdraft amount": "Establece el monto máximo de sobregiro permitido para una cuenta de ahorro a la que se le permite tener un sobregiro",
|
||||
|
||||
@@ -418,6 +418,7 @@
|
||||
"No": "Non",
|
||||
"Parameters": "Paramètres",
|
||||
"Pattern": "Modèle",
|
||||
"Pause Delinquency Classification": "Classification de la délinquance de pause",
|
||||
"Pay": "Payer",
|
||||
"Payments": "Paiements",
|
||||
"Permissions": "Autorisations",
|
||||
@@ -704,6 +705,7 @@
|
||||
"List of share products in the organization": "Liste des produits partagés dans l’organisation. Pour plus de détails cliquez",
|
||||
"Loan Account OverView": "Aperçu du compte de prêt",
|
||||
"Loan Accounts": "Comptes de prêt",
|
||||
"Loan Delinquency Actions": "Actions de délinquance de prêt",
|
||||
"Loan Delinquency Tags": "Étiquettes de délinquance de prêt",
|
||||
"Loan Delinquency Installment Tags": "Étiquettes de versement de délinquance de prêt",
|
||||
"Loan Details": "Détails du prêt",
|
||||
@@ -1151,6 +1153,7 @@
|
||||
"Default Shares per Client": "Actions par défaut par client",
|
||||
"Default Theme": "Thème par défaut",
|
||||
"Deleted": "Supprimé",
|
||||
"Delinquency Action": "Action de délinquance",
|
||||
"Delinquency Bucket": "Seau de délinquance",
|
||||
"Delinquency Classification": "Classification de la délinquance",
|
||||
"Delinquency Tags": "Étiquettes de délinquance",
|
||||
@@ -2813,6 +2816,7 @@
|
||||
"Reject Share": "Rejeter le partage",
|
||||
"Remove Client from Group": "Supprimer le client du groupe",
|
||||
"Remove Period": "Supprimer la période",
|
||||
"Resume Delinquency Classification": "Reprendre la classification de la délinquance",
|
||||
"Savings Account": "Compte épargne",
|
||||
"Sets the balance required for interest calculation": "Définit le solde requis pour le calcul des intérêts",
|
||||
"Sets the maximum allowed overdraft amount": "Définit le montant de découvert maximum autorisé pour un compte d'épargne autorisé à avoir un découvert",
|
||||
|
||||
@@ -418,6 +418,7 @@
|
||||
"No": "NO",
|
||||
"Parameters": "Parametri",
|
||||
"Pattern": "Modello",
|
||||
"Pause Delinquency Classification": "Pausa la classificazione della delinquenza",
|
||||
"Pay": "Paga",
|
||||
"Payments": "Pagamenti",
|
||||
"Permissions": "Autorizzazioni",
|
||||
@@ -704,6 +705,7 @@
|
||||
"List of share products in the organization": "Elenco dei prodotti condivisi nell'organizzazione. Per maggiori dettagli clicca",
|
||||
"Loan Account OverView": "Panoramica del conto di prestito",
|
||||
"Loan Accounts": "Conti di prestito",
|
||||
"Loan Delinquency Actions": "Azioni di delinquenza del prestito",
|
||||
"Loan Delinquency Tags": "Tag di insolvenza del prestito",
|
||||
"Loan Delinquency Installment Tags": "Prestito tag di rata delinquenza",
|
||||
"Loan Details": "Dettagli del prestito",
|
||||
@@ -1151,6 +1153,7 @@
|
||||
"Default Shares per Client": "Condivisioni predefinite per cliente",
|
||||
"Default Theme": "Tema predefinito",
|
||||
"Deleted": "Eliminato",
|
||||
"Delinquency Action": "Azione di delinquenza",
|
||||
"Delinquency Bucket": "Il secchio della delinquenza",
|
||||
"Delinquency Classification": "Classificazione della delinquenza",
|
||||
"Delinquency Tags": "Tag di delinquenza",
|
||||
@@ -2813,6 +2816,7 @@
|
||||
"Reject Share": "Rifiuta condivisione",
|
||||
"Remove Client from Group": "Rimuovi il cliente dal gruppo",
|
||||
"Remove Period": "Rimuovi punto",
|
||||
"Resume Delinquency Classification": "Riprendi la classificazione delinquenza",
|
||||
"Savings Account": "Conto di risparmio",
|
||||
"Sets the balance required for interest calculation": "Imposta il saldo richiesto per il calcolo degli interessi",
|
||||
"Sets the maximum allowed overdraft amount": "Imposta l'importo massimo di scoperto consentito per un conto di risparmio a cui è consentito avere uno scoperto",
|
||||
|
||||
@@ -418,6 +418,7 @@
|
||||
"No": "아니요",
|
||||
"Parameters": "매개변수",
|
||||
"Pattern": "무늬",
|
||||
"Pause Delinquency Classification": "연체 분류 일시 정지",
|
||||
"Pay": "지불하다",
|
||||
"Payments": "결제",
|
||||
"Permissions": "권한",
|
||||
@@ -704,6 +705,7 @@
|
||||
"List of share products in the organization": "조직의 공유 제품 목록입니다. 자세한 내용을 보려면 클릭하세요.",
|
||||
"Loan Account OverView": "대출계좌 개요",
|
||||
"Loan Accounts": "대출 계좌",
|
||||
"Loan Delinquency Actions": "대출 연체 조치",
|
||||
"Loan Delinquency Tags": "대출 연체 태그",
|
||||
"Loan Delinquency Installment Tags": "대출 연체 설치 태그",
|
||||
"Loan Details": "대출내역",
|
||||
@@ -1151,6 +1153,7 @@
|
||||
"Default Shares per Client": "클라이언트당 기본 공유",
|
||||
"Default Theme": "기본 테마",
|
||||
"Deleted": "삭제됨",
|
||||
"Delinquency Action": "연체 행동",
|
||||
"Delinquency Bucket": "연체 버킷",
|
||||
"Delinquency Classification": "연체 분류",
|
||||
"Delinquency Tags": "연체 태그",
|
||||
@@ -2813,6 +2816,7 @@
|
||||
"Reject Share": "공유 거부",
|
||||
"Remove Client from Group": "그룹에서 클라이언트 제거",
|
||||
"Remove Period": "기간 삭제",
|
||||
"Resume Delinquency Classification": "연체 분류를 재개하십시오",
|
||||
"Savings Account": "예금 계좌",
|
||||
"Sets the balance required for interest calculation": "이자 계산에 필요한 잔액을 설정합니다.",
|
||||
"Sets the maximum allowed overdraft amount": "초과인출이 허용된 저축계좌에 대한 최대 허용 초과인월 금액을 설정합니다.",
|
||||
|
||||
@@ -418,6 +418,7 @@
|
||||
"No": "Nr",
|
||||
"Parameters": "Parametrai",
|
||||
"Pattern": "Šablonas",
|
||||
"Pause Delinquency Classification": "Pauzės nusikalstamumo klasifikacija",
|
||||
"Pay": "Mokėti",
|
||||
"Payments": "Mokėjimai",
|
||||
"Permissions": "Leidimai",
|
||||
@@ -704,6 +705,7 @@
|
||||
"List of share products in the organization": "Dalijimosi produktų sąrašas organizacijoje. Norėdami gauti daugiau informacijos, spustelėkite",
|
||||
"Loan Account OverView": "Paskolos sąskaitos apžvalga",
|
||||
"Loan Accounts": "Paskolų sąskaitos",
|
||||
"Loan Delinquency Actions": "Paskolos nusikalstamumo veiksmai",
|
||||
"Loan Delinquency Tags": "Paskolų vėlavimo žymos",
|
||||
"Loan Delinquency Installment Tags": "Paskolos nusikalstamumo įmokos žymos",
|
||||
"Loan Details": "Paskolos informacija",
|
||||
@@ -1151,6 +1153,7 @@
|
||||
"Default Shares per Client": "Numatytosios akcijos vienam klientui",
|
||||
"Default Theme": "Numatytoji tema",
|
||||
"Deleted": "Ištrinta",
|
||||
"Delinquency Action": "Deliktingumo veiksmas",
|
||||
"Delinquency Bucket": "Nusikaltimų kibiras",
|
||||
"Delinquency Classification": "Nusikaltimų klasifikacija",
|
||||
"Delinquency Tags": "Nusikaltimų žymos",
|
||||
@@ -2813,6 +2816,7 @@
|
||||
"Reject Share": "Atmesti bendrinimą",
|
||||
"Remove Client from Group": "Pašalinti klientą iš grupės",
|
||||
"Remove Period": "Pašalinti laikotarpį",
|
||||
"Resume Delinquency Classification": "Atnaujinti delspinijos klasifikaciją",
|
||||
"Savings Account": "Taupomoji sąskaita",
|
||||
"Sets the balance required for interest calculation": "Nustato likutį, reikalingą palūkanų skaičiavimui",
|
||||
"Sets the maximum allowed overdraft amount": "Nustato didžiausią leistiną taupomosios sąskaitos overdrafto sumą, kuriai leidžiama pereikvoti",
|
||||
|
||||
@@ -418,6 +418,7 @@
|
||||
"No": "Nē",
|
||||
"Parameters": "Parametri",
|
||||
"Pattern": "Raksts",
|
||||
"Pause Delinquency Classification": "Pauzes likumpārkāpumu klasifikācija",
|
||||
"Pay": "Maksājiet",
|
||||
"Payments": "Maksājumi",
|
||||
"Permissions": "Atļaujas",
|
||||
@@ -704,6 +705,7 @@
|
||||
"List of share products in the organization": "Organizācijas koplietošanas produktu saraksts. Lai iegūtu sīkāku informāciju, noklikšķiniet",
|
||||
"Loan Account OverView": "Aizdevuma konta pārskats",
|
||||
"Loan Accounts": "Aizdevuma konti",
|
||||
"Loan Delinquency Actions": "Aizdevuma likumpārkāpumu darbības",
|
||||
"Loan Delinquency Tags": "Aizdevuma kavējuma birkas",
|
||||
"Loan Delinquency Installment Tags": "Aizdevuma likumpārkāpumu iemaksas tagi",
|
||||
"Loan Details": "Aizdevuma detaļas",
|
||||
@@ -1151,6 +1153,7 @@
|
||||
"Default Shares per Client": "Noklusējuma akcijas vienam klientam",
|
||||
"Default Theme": "Noklusējuma motīvs",
|
||||
"Deleted": "Izdzēsts",
|
||||
"Delinquency Action": "Likumpārkāpums",
|
||||
"Delinquency Bucket": "Noziedzības spainis",
|
||||
"Delinquency Classification": "Noziedzības klasifikācija",
|
||||
"Delinquency Tags": "Noziedzības tagi",
|
||||
@@ -2813,6 +2816,7 @@
|
||||
"Reject Share": "Noraidīt kopīgošanu",
|
||||
"Remove Client from Group": "Noņemt klientu no grupas",
|
||||
"Remove Period": "Noņemt periodu",
|
||||
"Resume Delinquency Classification": "Atsākt likumpārkāpumu klasifikāciju",
|
||||
"Savings Account": "Krājkonts",
|
||||
"Sets the balance required for interest calculation": "Iestata procentu aprēķināšanai nepieciešamo atlikumu",
|
||||
"Sets the maximum allowed overdraft amount": "Iestata maksimāli pieļaujamo overdrafta summu krājkontam, kuram ir atļauts overdrafts",
|
||||
|
||||
@@ -418,6 +418,7 @@
|
||||
"No": "छैन",
|
||||
"Parameters": "प्यारामिटरहरू",
|
||||
"Pattern": "ढाँचा",
|
||||
"Pause Delinquency Classification": "रोलीविद् वर्गीकरण रोक्नुहोस्",
|
||||
"Pay": "तिर्नुहोस्",
|
||||
"Payments": "भुक्तानीहरू",
|
||||
"Permissions": "अनुमतिहरू",
|
||||
@@ -704,6 +705,7 @@
|
||||
"List of share products in the organization": "संगठनमा साझेदारी उत्पादनहरूको सूची। थप विवरणहरूको लागि क्लिक गर्नुहोस्",
|
||||
"Loan Account OverView": "ऋण खाता अवलोकन",
|
||||
"Loan Accounts": "ऋण खाताहरू",
|
||||
"Loan Delinquency Actions": "Dep ण दिक्विटी कार्यहरू",
|
||||
"Loan Delinquency Tags": "ऋण अपराध ट्यागहरू",
|
||||
"Loan Delinquency Installment Tags": "ण दिक्विर्याज किग ट्यागहरू",
|
||||
"Loan Details": "ऋण विवरण",
|
||||
@@ -1151,6 +1153,7 @@
|
||||
"Default Shares per Client": "प्रति ग्राहक पूर्वनिर्धारित शेयरहरू",
|
||||
"Default Theme": "पूर्वनिर्धारित विषयवस्तु",
|
||||
"Deleted": "मेटाइयो",
|
||||
"Delinquency Action": "अपराध कार्य",
|
||||
"Delinquency Bucket": "अपराध बाल्टी",
|
||||
"Delinquency Classification": "अपराध वर्गीकरण",
|
||||
"Delinquency Tags": "अपराध ट्यागहरू",
|
||||
@@ -2813,6 +2816,7 @@
|
||||
"Reject Share": "साझेदारी अस्वीकार गर्नुहोस्",
|
||||
"Remove Client from Group": "समूहबाट ग्राहक हटाउनुहोस्",
|
||||
"Remove Period": "अवधि हटाउनुहोस्",
|
||||
"Resume Delinquency Classification": "Deminuquicum वर्गीकरण पुनः सुरु गर्नुहोस्",
|
||||
"Savings Account": "बचत खाता",
|
||||
"Sets the balance required for interest calculation": "ब्याज गणनाको लागि आवश्यक ब्यालेन्स सेट गर्दछ",
|
||||
"Sets the maximum allowed overdraft amount": "ओभरड्राफ्ट गर्न अनुमति दिइएको बचत खाताको लागि अधिकतम अनुमति दिइएको ओभरड्राफ्ट रकम सेट गर्दछ",
|
||||
|
||||
@@ -418,6 +418,7 @@
|
||||
"No": "Não",
|
||||
"Parameters": "Parâmetros",
|
||||
"Pattern": "Padrão",
|
||||
"Pause Delinquency Classification": "Pausa Classificação de inadimplência",
|
||||
"Pay": "Pagar",
|
||||
"Payments": "Pagamentos",
|
||||
"Permissions": "Permissões",
|
||||
@@ -704,6 +705,7 @@
|
||||
"List of share products in the organization": "Lista de produtos compartilhados na organização. Para mais detalhes clique",
|
||||
"Loan Account OverView": "Visão geral da conta de empréstimo",
|
||||
"Loan Accounts": "Contas de empréstimo",
|
||||
"Loan Delinquency Actions": "Ações de inadimplência de empréstimos",
|
||||
"Loan Delinquency Tags": "Inadimplência de Empréstimo Tags",
|
||||
"Loan Delinquency Installment Tags": "Tags de parcelamento de inadimplência de empréstimo",
|
||||
"Loan Details": "Detalhes do empréstimo",
|
||||
@@ -1151,6 +1153,7 @@
|
||||
"Default Shares per Client": "Compartilhamentos padrão por cliente",
|
||||
"Default Theme": "Tema Padrão",
|
||||
"Deleted": "Excluído",
|
||||
"Delinquency Action": "Ação de inadimplência",
|
||||
"Delinquency Bucket": "Balde de inadimplência",
|
||||
"Delinquency Classification": "Classificação de Inadimplência",
|
||||
"Delinquency Tags": "Tags de inadimplência",
|
||||
@@ -2813,6 +2816,7 @@
|
||||
"Reject Share": "Rejeitar compartilhamento",
|
||||
"Remove Client from Group": "Remover cliente do grupo",
|
||||
"Remove Period": "Remover período",
|
||||
"Resume Delinquency Classification": "Retomar a classificação da inadimplência",
|
||||
"Savings Account": "Conta Poupança",
|
||||
"Sets the balance required for interest calculation": "Define o saldo necessário para cálculo de juros",
|
||||
"Sets the maximum allowed overdraft amount": "Define o valor máximo permitido de cheque especial para uma conta poupança que pode ter cheque especial",
|
||||
|
||||
@@ -418,6 +418,7 @@
|
||||
"No": "Hapana",
|
||||
"Parameters": "Vigezo",
|
||||
"Pattern": "Muundo",
|
||||
"Pause Delinquency Classification": "Pumzika uainishaji wa udanganyifu",
|
||||
"Pay": "Lipa",
|
||||
"Payments": "Malipo",
|
||||
"Permissions": "Ruhusa",
|
||||
@@ -704,6 +705,7 @@
|
||||
"List of share products in the organization": "Orodha ya bidhaa zinazoshirikiwa katika shirika. Kwa maelezo zaidi bofya",
|
||||
"Loan Account OverView": "Muhtasari wa Akaunti ya Mkopo",
|
||||
"Loan Accounts": "Hesabu za Mikopo",
|
||||
"Loan Delinquency Actions": "Vitendo vya upungufu wa mkopo",
|
||||
"Loan Delinquency Tags": "Lebo za Uhalifu wa Mkopo",
|
||||
"Loan Delinquency Installment Tags": "Vitambulisho vya Usanidi wa Mikopo ya Mkopo",
|
||||
"Loan Details": "Maelezo ya Mkopo",
|
||||
@@ -1151,6 +1153,7 @@
|
||||
"Default Shares per Client": "Hisa Chaguomsingi kwa kila Mteja",
|
||||
"Default Theme": "Mandhari Chaguomsingi",
|
||||
"Deleted": "Imefutwa",
|
||||
"Delinquency Action": "Kitendo cha Delinquency",
|
||||
"Delinquency Bucket": "Ndoo ya Uhalifu",
|
||||
"Delinquency Classification": "Uainishaji wa Uhalifu",
|
||||
"Delinquency Tags": "Lebo za Uhalifu",
|
||||
@@ -2813,6 +2816,7 @@
|
||||
"Reject Share": "Kataa Kushiriki",
|
||||
"Remove Client from Group": "Ondoa Mteja kutoka kwa Kikundi",
|
||||
"Remove Period": "Ondoa Kipindi",
|
||||
"Resume Delinquency Classification": "Anza uainishaji wa udanganyifu",
|
||||
"Savings Account": "Akaunti ya Akiba",
|
||||
"Sets the balance required for interest calculation": "Huweka salio linalohitajika kwa kukokotoa riba",
|
||||
"Sets the maximum allowed overdraft amount": "Huweka kiwango cha juu kinachoruhusiwa cha overdraft kwa akaunti ya akiba ambayo inaruhusiwa kuwa na overdraft",
|
||||
|
||||
Reference in New Issue
Block a user