Support to pause and resume Loan Delinquency Classification (#1918)

Co-authored-by: Jose Alberto Hernandez <alberto@blue-daemon.local>
This commit is contained in:
José Alberto Hernández
2023-12-01 18:06:31 -06:00
committed by GitHub
co-authored by Jose Alberto Hernandez
parent 3f4e9870b6
commit a26c906d2c
28 changed files with 414 additions and 73 deletions
@@ -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);
}
}
@@ -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>
@@ -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();
});
});
@@ -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],
});
}
}
+3 -1
View File
@@ -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: [
{
@@ -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>
@@ -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';
+3 -1
View File
@@ -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: [ ],
})
+8
View File
@@ -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[];
}
+3 -1
View File
@@ -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,
+4
View File
@@ -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",
+4
View File
@@ -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",
+4
View File
@@ -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",
+6 -2
View File
@@ -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",
+4
View File
@@ -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",
+4
View File
@@ -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",
+4
View File
@@ -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": "초과인출이 허용된 저축계좌에 대한 최대 허용 초과인월 금액을 설정합니다.",
+4
View File
@@ -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",
+4
View File
@@ -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",
+4
View File
@@ -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": "ओभरड्राफ्ट गर्न अनुमति दिइएको बचत खाताको लागि अधिकतम अनुमति दिइएको ओभरड्राफ्ट रकम सेट गर्दछ",
+4
View File
@@ -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",
+4
View File
@@ -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",