Use of filter in the GL Account dropdown menus

This commit is contained in:
Jose Alberto Hernandez
2024-01-10 15:02:06 +01:00
committed by Adam Saghy
parent 6edb262028
commit 53d8436875
47 changed files with 807 additions and 626 deletions
+12
View File
@@ -39,6 +39,7 @@
"install": "^0.13.0",
"lodash": "4.17.21",
"moment": "^2.29.4",
"ngx-mat-select-search": "5.0.0",
"rxjs": "6.6.2",
"tslib": "^2.0.0",
"vkbeautify": "^0.99.2",
@@ -14222,6 +14223,17 @@
"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
"dev": true
},
"node_modules/ngx-mat-select-search": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/ngx-mat-select-search/-/ngx-mat-select-search-5.0.0.tgz",
"integrity": "sha512-w9NLIhN/b6aDpvwdrvxttNm6eYbcnalyCIOPaFPTpK8Ub8graHmL6qQdWzIw54Qxyzlr7A0DvpMgywcs4eGSYA==",
"dependencies": {
"tslib": "^2.4.0"
},
"peerDependencies": {
"@angular/material": "^12.0.0 || ^13.0.0 || ^14.0.0"
}
},
"node_modules/nice-napi": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz",
+1
View File
@@ -58,6 +58,7 @@
"install": "^0.13.0",
"lodash": "4.17.21",
"moment": "^2.29.4",
"ngx-mat-select-search": "5.0.0",
"rxjs": "6.6.2",
"tslib": "^2.0.0",
"vkbeautify": "^0.99.2",
@@ -169,7 +169,7 @@ const routes: Routes = [
{
path: 'migrate-opening-balances',
component: MigrateOpeningBalancesComponent,
data: { title: 'Migrate Opening Balances', breadcrumb: 'Migrate Opening Balances' },
data: { title: 'Migrate Opening Balances', breadcrumb: 'Migrate Opening Balances' },
resolve: {
offices: OfficesResolver,
currencies: CurrenciesResolver
@@ -52,14 +52,13 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>{{"labels.inputs.Parent" | translate}}</mat-label>
<mat-select formControlName="parentId">
<mat-option *ngFor="let parent of parentData" [value]="parent.id">
({{ parent.glCode }}) {{ parent.name }}
</mat-option>
</mat-select>
</mat-form-field>
<mifosx-gl-account-selector fxFlex="48%"
[inputFormControl]="glAccountForm.controls.parentId"
[glAccountList]="parentData"
[required]="false"
[inputLabel]="'Parent'"
>
</mifosx-gl-account-selector>
<mat-form-field fxFlex="28%">
<mat-label>{{"labels.inputs.Tag" | translate}}</mat-label>
@@ -114,4 +113,4 @@
<button mat-raised-button color="primary" (click)="popover.close();nextStep()">{{"labels.buttons.Next" |
translate}}</button>
</div>
</ng-template>
</ng-template>
@@ -11,6 +11,7 @@ import { ConfigurationWizardService } from '../../../configuration-wizard/config
/** Custom Dialog Component */
import { ContinueSetupDialogComponent } from '../../../configuration-wizard/continue-setup-dialog/continue-setup-dialog.component';
import { GLAccount } from 'app/shared/models/general.model';
/**
* Create gl account component.
@@ -31,7 +32,7 @@ export class CreateGlAccountComponent implements OnInit, AfterViewInit {
/** Account usage data. */
accountUsageData: any;
/** Parent data. */
parentData: any;
parentData: GLAccount[] = [];
/** Tag data. */
tagData: any;
/** Account type id. (for creation of sub-ledger account) */
@@ -48,14 +48,13 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>{{"labels.inputs.Parent" | translate}}</mat-label>
<mat-select formControlName="parentId">
<mat-option *ngFor="let parent of parentData" [value]="parent.id">
({{ parent.glCode }}) {{ parent.name }}
</mat-option>
</mat-select>
</mat-form-field>
<mifosx-gl-account-selector fxFlex="48%"
[inputFormControl]="glAccountForm.controls.parentId"
[glAccountList]="parentData"
[required]="false"
[inputLabel]="'Parent'"
>
</mifosx-gl-account-selector>
<mat-form-field fxFlex="28%">
<mat-label>{{"labels.inputs.Tag" | translate}}</mat-label>
@@ -59,7 +59,7 @@
<div fxFlex="50%" *ngIf="glAccount.parent">
<a class="tab-link" [routerLink]="['/accounting/chart-of-accounts/gl-accounts/view/' + glAccount.parent.id]">
({{ glAccount.parent.glCode }}) {{ glAccount.parent.name }}
<mifosx-gl-account-display [glAccount]="glAccount.parent"></mifosx-gl-account-display>
</a>
</div>
@@ -37,17 +37,13 @@
<div fxFlexFill fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column" [formGroupName]="i">
<mat-form-field fxFlex="48%">
<mat-label>{{"labels.inputs.Affected GL Entry (Debit)" | translate}}</mat-label>
<mat-select required formControlName="glAccountId">
<mat-option *ngFor="let affectedGLEntryDebit of glAccountData" [value]="affectedGLEntryDebit.id">
{{ affectedGLEntryDebit.name + ' (' + affectedGLEntryDebit.glCode + ')' }}
</mat-option>
</mat-select>
<mat-error *ngIf="debits.at(i).controls.glAccountId.hasError('required')">
{{"labels.inputs.Affected GL Entry (Debit)" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
</mat-error>
</mat-form-field>
<mifosx-gl-account-selector fxFlex="48%"
[inputFormControl]="debits.at(i).controls.glAccountId"
[glAccountList]="glAccountData"
[required]="true"
[inputLabel]="'Affected GL Entry (Debit)'"
>
</mifosx-gl-account-selector>
<mat-form-field fxFlex="43%">
<mat-label>{{"labels.inputs.Debit Amount" | translate}}</mat-label>
@@ -75,17 +71,13 @@
<div fxFlexFill fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column" [formGroupName]="i">
<mat-form-field fxFlex="48%">
<mat-label>{{"labels.inputs.Affected GL Entry (Credit)" | translate}}</mat-label>
<mat-select required formControlName="glAccountId">
<mat-option *ngFor="let affectedGLEntryCredit of glAccountData" [value]="affectedGLEntryCredit.id">
{{ affectedGLEntryCredit.name + ' (' + affectedGLEntryCredit.glCode + ')' }}
</mat-option>
</mat-select>
<mat-error *ngIf="credits.at(i).controls.glAccountId.hasError('required')">
{{"labels.inputs.Affected GL Entry (Credit)" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
</mat-error>
</mat-form-field>
<mifosx-gl-account-selector fxFlex="48%"
[inputFormControl]="credits.at(i).controls.glAccountId"
[glAccountList]="glAccountData"
[required]="true"
[inputLabel]="'Affected GL Entry (Credit)'"
>
</mifosx-gl-account-selector>
<mat-form-field fxFlex="43%">
<mat-label>{{"labels.inputs.Credit Amount"|translate}}</mat-label>
@@ -20,17 +20,13 @@
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Account"|translate}}</mat-label>
<mat-select required formControlName="glAccountId">
<mat-option *ngFor="let glAccount of glAccountData" [value]="glAccount.id">
{{ glAccount.name + ' (' + glAccount.glCode + ')' }}
</mat-option>
</mat-select>
<mat-error *ngIf="financialActivityMappingForm.controls.glAccountId.hasError('required')">
{{"labels.inputs.Account"|translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
</mat-error>
</mat-form-field>
<mifosx-gl-account-selector
[inputFormControl]="financialActivityMappingForm.controls.glAccountId"
[glAccountList]="glAccountData"
[required]="true"
[inputLabel]="'Account'"
>
</mifosx-gl-account-selector>
</div>
@@ -5,6 +5,7 @@ import { Router, ActivatedRoute } from '@angular/router';
/** Custom Services */
import { AccountingService } from '../../accounting.service';
import { GLAccount } from 'app/shared/models/general.model';
/**
* Create financial activity mapping component.
@@ -21,7 +22,7 @@ export class CreateFinancialActivityMappingComponent implements OnInit {
/** GL Account options. */
glAccountOptions: any;
/** GL Account data. */
glAccountData: any;
glAccountData: GLAccount[] = [];
/** Financial activity data. */
financialActivityData: any;
@@ -17,15 +17,13 @@
</mat-select>
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Account"|translate}}</mat-label>
<mat-select required formControlName="glAccountId">
<mat-option *ngFor="let glAccount of glAccountData" [value]="glAccount.id">
{{ glAccount.name + ' (' + glAccount.glCode + ')' }}
</mat-option>
</mat-select>
</mat-form-field>
<mifosx-gl-account-selector
[inputFormControl]="financialActivityMappingForm.controls.glAccountId"
[glAccountList]="glAccountData"
[required]="true"
[inputLabel]="'Account'"
>
</mifosx-gl-account-selector>
</div>
</mat-card-content>
@@ -5,6 +5,7 @@ import { Router, ActivatedRoute } from '@angular/router';
/** Custom Services */
import { AccountingService } from '../../accounting.service';
import { GLAccount } from 'app/shared/models/general.model';
/**
* Edit financial activity mapping component.
@@ -21,7 +22,7 @@ export class EditFinancialActivityMappingComponent implements OnInit {
/** GL Account options. */
glAccountOptions: any;
/** GL Account data. */
glAccountData: any;
glAccountData: GLAccount[] = [];
/** Financial activity data. */
financialActivityData: any;
/** Financial activity account ID. */
@@ -25,13 +25,11 @@
{{ financialActivityAccount?.financialActivityData.name }}
</div>
<div fxFlex="50%" class="header">
{{"labels.inputs.Account Name" | translate}}
</div>
<div fxFlex="50%">
{{ financialActivityAccount?.glAccountData.name }}
</div>
<mifosx-gl-account-display fxFlex="100%"
[glAccount]="financialActivityAccount?.glAccountData"
[accountTitle]="'Account Name'"
>
</mifosx-gl-account-display>
</div>
@@ -5,10 +5,13 @@
<input matInput [formControl]="officeName" [matAutocomplete]="officeNameAutocomplete">
</mat-form-field>
<mat-form-field fxFlex="31%">
<mat-label>{{"labels.inputs.GL Account Name or Code" | translate}}</mat-label>
<input matInput [formControl]="glAccount" [matAutocomplete]="glAccountAutocomplete">
</mat-form-field>
<mifosx-gl-account-selector fxFlex="31%"
[inputFormControl]="glAccount"
[glAccountList]="glAccountData"
[required]="true"
[inputLabel]="'GL Account Name or Code'"
>
</mifosx-gl-account-selector>
<mat-form-field fxFlex="31%">
<mat-label>{{'labels.inputs.Filter' | translate}}</mat-label>
@@ -62,13 +65,6 @@
</mat-option>
</mat-autocomplete>
<mat-autocomplete autoActiveFirstOption #glAccountAutocomplete="matAutocomplete" [displayWith]="displayGLAccount">
<mat-option *ngFor="let glAccount of filteredGLAccountData | async" [value]="{ id: glAccount.id, name: glAccount.name, glCode: glAccount.glCode }">
{{ glAccount.name + ' (' + glAccount.glCode + ')' }}
</mat-option>
</mat-autocomplete>
<div class="mat-elevation-z8 container">
<table mat-table [dataSource]="dataSource" matSort>
@@ -170,7 +170,7 @@ export class SearchJournalEntryComponent implements OnInit, AfterViewInit {
this.glAccount.valueChanges
.pipe(
map(value => value.id ? value.id : ''),
map(value => value ? value : ''),
debounceTime(500),
distinctUntilChanged(),
tap((filterValue) => {
@@ -269,15 +269,6 @@ export class SearchJournalEntryComponent implements OnInit, AfterViewInit {
return office ? office.name : undefined;
}
/**
* Displays gl account name in form control input.
* @param {any} glAccount Gl Account data.
* @returns {string} Gl Account name if valid otherwise undefined.
*/
displayGLAccount(glAccount?: any): string | undefined {
return glAccount ? glAccount.name + ' (' + glAccount.glCode + ')' : undefined;
}
/**
* Sets filtered offices for autocomplete.
*/
@@ -70,9 +70,7 @@ export class RejectClientTransferComponent implements OnInit {
rejectClientTransferFormData.transferDate = this.dateUtils.formatDate(prevTransferDate, dateFormat);
}
const data = {
...rejectClientTransferFormData,
dateFormat,
locale
...rejectClientTransferFormData
};
this.clientsService.executeClientCommand(this.clientId, 'rejectTransfer', data).subscribe(() => {
this.router.navigate(['../../'], { relativeTo: this.route });
@@ -73,9 +73,7 @@ export class UndoClientTransferComponent implements OnInit {
undoClientTransferFormData.transferDate = this.dateUtils.formatDate(prevTransferDate, dateFormat);
}
const data = {
...undoClientTransferFormData,
dateFormat,
locale
...undoClientTransferFormData
};
this.clientsService.executeClientCommand(this.clientId, 'withdrawTransfer', data).subscribe(() => {
this.router.navigate(['../../'], { relativeTo: this.route });
@@ -32,7 +32,7 @@
<mat-card-title fxLayout="row wrap" class="content">
<h3 fxFlex="95%">
<i class="fa fa-stop" [ngClass]="clientViewData.status.code|statusLookup"
[matTooltip]="clientViewData.status.value"></i>
matTooltip="{{'labels.status.' + clientViewData.status.value | translate}}"></i>
<b>{{"labels.inputs.Client Name" | translate}} :</b><mifosx-entity-name entityName="{{clientViewData.displayName}}"></mifosx-entity-name>
</h3>
<div fxFlex="5%">
@@ -82,7 +82,7 @@
<div fxFlex="4%">
<button mat-icon-button [matMenuTriggerFor]="accountMenu" aria-label="Loan account actions"
yPosition="below">
yPosition="below" *ngIf="buttonConfig.singleButtons.length > 0">
<mat-icon matListIcon class="actions-menu">
<fa-icon icon="bars" size="sm"></fa-icon>
</mat-icon>
@@ -723,93 +723,78 @@
<h4 fxFlexFill class="mat-h4">Assets / Liabilities</h4>
<div fxFlexFill fxLayout="row wrap" fxLayout.lt-md="column">
<span fxFlex="47%">Fund source:</span>
<span fxFlex="53%">({{accountingMappings.fundSourceAccount.glCode}}) {{
accountingMappings.fundSourceAccount.name }}</span>
<mifosx-gl-account-display fxFlex="100%"
[accountTitle]="'Fund source'" [glAccount]="accountingMappings.fundSourceAccount" [withTitle]="'47%'">
</mifosx-gl-account-display>
</div>
<h4 fxFlexFill class="mat-h4">Assets</h4>
<h4 fxFlexFill class="mat-h4">{{'labels.heading.Assets' | translate}}</h4>
<div fxFlexFill fxLayout="row wrap" fxLayout.lt-md="column">
<span fxFlex="47%">Loan portfolio:</span>
<span fxFlex="53%">({{accountingMappings.loanPortfolioAccount.glCode}}) {{
accountingMappings.loanPortfolioAccount.name }}</span>
<mifosx-gl-account-display fxFlex="100%"
[accountTitle]="'Loan portfolio'" [glAccount]="accountingMappings.loanPortfolioAccount" [withTitle]="'47%'">
</mifosx-gl-account-display>
<div fxFlexFill *ngIf="loanProduct.accountingRule.id === 3 || loanProduct.accountingRule.id === 4"
fxLayout="row wrap" fxLayout.lt-md="column">
<span fxFlex="47%">Interest Receivable:</span>
<span fxFlex="53%">({{accountingMappings.receivableInterestAccount.glCode}}) {{
accountingMappings.receivableInterestAccount.name }}</span>
<span fxFlex="47%">Fees Receivable:</span>
<span fxFlex="53%">({{accountingMappings.receivableFeeAccount.glCode}}) {{
accountingMappings.receivableInterestAccount.name }}</span>
<span fxFlex="47%">Penalties Receivable:</span>
<span fxFlex="53%">({{accountingMappings.receivablePenaltyAccount.glCode}}) {{
accountingMappings.receivablePenaltyAccount.name }}</span>
<mifosx-gl-account-display fxFlex="100%"
[accountTitle]="'Interest Receivable'" [glAccount]="accountingMappings.receivableInterestAccount" [withTitle]="'47%'">
</mifosx-gl-account-display>
<mifosx-gl-account-display fxFlex="100%"
[accountTitle]="'Fees Receivable'" [glAccount]="accountingMappings.receivableFeeAccount" [withTitle]="'47%'">
</mifosx-gl-account-display>
<mifosx-gl-account-display fxFlex="100%"
[accountTitle]="'Penalties Receivable'" [glAccount]="accountingMappings.receivablePenaltyAccount" [withTitle]="'47%'">
</mifosx-gl-account-display>
</div>
<span fxFlex="47%">Transfer in suspense:</span>
<span fxFlex="53%">({{accountingMappings.transfersInSuspenseAccount.glCode}}) {{
accountingMappings.transfersInSuspenseAccount.name }}</span>
<mifosx-gl-account-display fxFlex="100%"
[accountTitle]="'Transfer in suspense'" [glAccount]="accountingMappings.transfersInSuspenseAccount" [withTitle]="'47%'">
</mifosx-gl-account-display>
</div>
<h4 fxFlexFill class="mat-h4">Income</h4>
<h4 fxFlexFill class="mat-h4">{{'labels.heading.Income' | translate}}</h4>
<mifosx-gl-account-display fxFlex="100%"
[accountTitle]="'Income from Interest'" [glAccount]="accountingMappings.interestOnLoanAccount" [withTitle]="'47%'">
</mifosx-gl-account-display>
<mifosx-gl-account-display fxFlex="100%"
[accountTitle]="'Income from fees'" [glAccount]="accountingMappings.incomeFromFeeAccount" [withTitle]="'47%'">
</mifosx-gl-account-display>
<mifosx-gl-account-display fxFlex="100%"
[accountTitle]="'Income from penalties'" [glAccount]="accountingMappings.incomeFromPenaltyAccount" [withTitle]="'47%'">
</mifosx-gl-account-display>
<mifosx-gl-account-display fxFlex="100%"
[accountTitle]="'Income from Recovery Repayments'" [glAccount]="accountingMappings.incomeFromRecoveryAccount" [withTitle]="'47%'">
</mifosx-gl-account-display>
<mifosx-gl-account-display fxFlex="100%" *ngIf="accountingMappings.incomeFromChargeOffInterestAccount"
[accountTitle]="'Income from ChargeOff Interest'" [glAccount]="accountingMappings.incomeFromChargeOffInterestAccount" [withTitle]="'47%'">
</mifosx-gl-account-display>
<mifosx-gl-account-display fxFlex="100%" *ngIf="accountingMappings.incomeFromChargeOffFeesAccount"
[accountTitle]="'Income from ChargeOff Fees'" [glAccount]="accountingMappings.incomeFromChargeOffFeesAccount" [withTitle]="'47%'">
</mifosx-gl-account-display>
<mifosx-gl-account-display fxFlex="100%" *ngIf="accountingMappings.incomeFromChargeOffPenaltyAccount"
[accountTitle]="'Income from ChargeOff Penalty'" [glAccount]="accountingMappings.incomeFromChargeOffPenaltyAccount" [withTitle]="'47%'">
</mifosx-gl-account-display>
<h4 fxFlexFill class="mat-h4">{{'labels.heading.Expenses' | translate}}</h4>
<div fxFlexFill fxLayout="row wrap" fxLayout.lt-md="column">
<span fxFlex="47%">Income from Interest:</span>
<span fxFlex="53%">({{accountingMappings.interestOnLoanAccount.glCode}}) {{
accountingMappings.interestOnLoanAccount.name }}</span>
<span fxFlex="47%">Income from fees:</span>
<span fxFlex="53%">({{accountingMappings.incomeFromFeeAccount.glCode}}) {{
accountingMappings.incomeFromFeeAccount.name }}</span>
<span fxFlex="47%">Income from penalties:</span>
<span fxFlex="53%">({{accountingMappings.incomeFromPenaltyAccount.glCode}}) {{
accountingMappings.incomeFromPenaltyAccount.name }}</span>
<span fxFlex="47%">Income from Recovery Repayments:</span>
<span fxFlex="53%">({{accountingMappings.incomeFromRecoveryAccount.glCode}}) {{
accountingMappings.incomeFromRecoveryAccount.name }}</span>
<span *ngIf="accountingMappings.incomeFromChargeOffInterestAccount" fxFlex="47%">Income from ChargeOff
Interest:</span>
<span *ngIf="accountingMappings.incomeFromChargeOffInterestAccount" fxFlex="53%">
({{accountingMappings.incomeFromChargeOffInterestAccount.glCode}}) {{
accountingMappings.incomeFromChargeOffInterestAccount.name }}</span>
<span fxFlex="47%" *ngIf="accountingMappings.incomeFromChargeOffFeesAccount">Income from ChargeOff
Fees:</span>
<span fxFlex="53%" *ngIf="accountingMappings.incomeFromChargeOffFeesAccount">
({{accountingMappings.incomeFromChargeOffFeesAccount.glCode}}) {{
accountingMappings.incomeFromChargeOffFeesAccount.name }}</span>
<span fxFlex="47%" *ngIf="accountingMappings.incomeFromChargeOffPenaltyAccount">Income from ChargeOff
Penalty:</span>
<span fxFlex="53%" *ngIf="accountingMappings.incomeFromChargeOffPenaltyAccount">
({{accountingMappings.incomeFromChargeOffPenaltyAccount.glCode}}) {{
accountingMappings.incomeFromChargeOffPenaltyAccount.name }}</span>
</div>
<mifosx-gl-account-display fxFlex="100%"
[accountTitle]="'Losses written off'" [glAccount]="accountingMappings.writeOffAccount" [withTitle]="'47%'">
</mifosx-gl-account-display>
<mifosx-gl-account-display fxFlex="100%"
[accountTitle]="'Expenses from Goodwill Credit'" [glAccount]="accountingMappings.goodwillCreditAccount" [withTitle]="'47%'">
</mifosx-gl-account-display>
<mifosx-gl-account-display fxFlex="100%" *ngIf="accountingMappings.chargeOffExpenseAccount"
[accountTitle]="'ChargeOff Expense'" [glAccount]="accountingMappings.chargeOffExpenseAccount" [withTitle]="'47%'">
</mifosx-gl-account-display>
<mifosx-gl-account-display fxFlex="100%" *ngIf="accountingMappings.chargeOffFraudExpenseAccount"
[accountTitle]="'ChargeOff Fraud Expense'" [glAccount]="accountingMappings.chargeOffFraudExpenseAccount" [withTitle]="'47%'">
</mifosx-gl-account-display>
<h4 fxFlexFill class="mat-h4">Expenses</h4>
<div fxFlexFill fxLayout="row wrap" fxLayout.lt-md="column">
<span fxFlex="47%">Losses written off:</span>
<span fxFlex="53%">({{accountingMappings.writeOffAccount.glCode}}) {{
accountingMappings.writeOffAccount.name }}</span>
<span fxFlex="47%">Expenses from Goodwill Credit:</span>
<span fxFlex="53%">({{accountingMappings.goodwillCreditAccount.glCode}}) {{
accountingMappings.goodwillCreditAccount.name }}</span>
<span *ngIf="accountingMappings.chargeOffExpenseAccount" fxFlex="47%">ChargeOff Expense:</span>
<span *ngIf="accountingMappings.chargeOffExpenseAccount" fxFlex="53%">
({{accountingMappings.chargeOffExpenseAccount.glCode}}) {{
accountingMappings.chargeOffExpenseAccount.name }}</span>
<span *ngIf="accountingMappings.chargeOffFraudExpenseAccount" fxFlex="47%">ChargeOff Fraud
Expense:</span>
<span *ngIf="accountingMappings.chargeOffFraudExpenseAccount" fxFlex="53%">
({{accountingMappings.chargeOffFraudExpenseAccount.glCode}}) {{
accountingMappings.chargeOffFraudExpenseAccount.name }}</span>
</div>
<h4 fxFlexFill class="mat-h4">Liabilities</h4>
<div fxFlexFill fxLayout="row wrap" fxLayout.lt-md="column">
<span fxFlex="47%">Over payment liability:</span>
<span fxFlex="53%">({{accountingMappings.overpaymentLiabilityAccount.glCode}}) {{
accountingMappings.overpaymentLiabilityAccount.name }}</span>
</div>
<h4 fxFlexFill class="mat-h4">{{'labels.heading.Liabilities' | translate}}</h4>
<mifosx-gl-account-display fxFlex="100%"
[accountTitle]="'Over payment liability'" [glAccount]="accountingMappings.overpaymentLiabilityAccount" [withTitle]="'47%'">
</mifosx-gl-account-display>
<div
*ngIf="isAdvancedAccountingEnabled()"
@@ -12,277 +12,193 @@
<div *ngIf="loanProductAccountingForm.value.accountingRule >= 2 && loanProductAccountingForm.value.accountingRule <= 4" fxFlexFill fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<h4 fxFlex="98%" class="mat-h4">Assets / Liability</h4>
<h4 fxFlex="98%" class="mat-h4">{{'labels.heading.Assets' | translate}} / {{'labels.heading.Liability' | translate}}</h4>
<mat-form-field fxFlex="48%">
<mat-label>Fund source</mat-label>
<mat-select formControlName="fundSourceAccountId" required>
<mat-option *ngFor="let assetAndLiabilityAccount of assetAndLiabilityAccountData" [value]="assetAndLiabilityAccount.id">
({{ assetAndLiabilityAccount.glCode }}) {{ assetAndLiabilityAccount.name }}
</mat-option>
</mat-select>
<mat-error>
Fund source is <strong>required</strong>
</mat-error>
</mat-form-field>
<mifosx-gl-account-selector fxFlex="48%"
[inputFormControl]="loanProductAccountingForm.controls.fundSourceAccountId"
[glAccountList]="assetAndLiabilityAccountData"
[required]="true"
[inputLabel]="'Fund source'"
>
</mifosx-gl-account-selector>
<h4 fxFlex="98%" class="mat-h4">Assets</h4>
<h4 fxFlex="98%" class="mat-h4">{{'labels.heading.Assets' | translate}}</h4>
<mat-form-field fxFlex="48%">
<mat-label>Loan portfolio</mat-label>
<mat-select formControlName="loanPortfolioAccountId" required>
<mat-option *ngFor="let assetAccount of assetAccountData" [value]="assetAccount.id">
({{ assetAccount.glCode }}) {{ assetAccount.name }}
</mat-option>
</mat-select>
<mat-error>
Loan portfolio is <strong>required</strong>
</mat-error>
</mat-form-field>
<mifosx-gl-account-selector fxFlex="48%"
[inputFormControl]="loanProductAccountingForm.controls.loanPortfolioAccountId"
[glAccountList]="assetAccountData"
[required]="true"
[inputLabel]="'Loan portfolio'"
>
</mifosx-gl-account-selector>
<mifosx-gl-account-selector fxFlex="48%"
[inputFormControl]="loanProductAccountingForm.controls.transfersInSuspenseAccountId"
[glAccountList]="assetAccountData"
[required]="true"
[inputLabel]="'Transfer in suspense'"
>
</mifosx-gl-account-selector>
<div *ngIf="loanProductAccountingForm.value.accountingRule === 3 || loanProductAccountingForm.value.accountingRule === 4" fxFlexFill fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<mat-form-field fxFlex="48%">
<mat-label>Interest Receivable</mat-label>
<mat-select formControlName="receivableInterestAccountId" required>
<mat-option *ngFor="let assetAccount of assetAccountData" [value]="assetAccount.id">
({{ assetAccount.glCode }}) {{ assetAccount.name }}
</mat-option>
</mat-select>
<mat-error>
Interest Receivable is <strong>required</strong>
</mat-error>
</mat-form-field>
<mifosx-gl-account-selector fxFlex="48%"
[inputFormControl]="loanProductAccountingForm.controls.receivableInterestAccountId"
[glAccountList]="assetAccountData"
[required]="true"
[inputLabel]="'Interest Receivable'"
>
</mifosx-gl-account-selector>
<mat-form-field fxFlex="48%">
<mat-label>Fees Receivable</mat-label>
<mat-select formControlName="receivableFeeAccountId" required>
<mat-option *ngFor="let assetAccount of assetAccountData" [value]="assetAccount.id">
({{ assetAccount.glCode }}) {{ assetAccount.name }}
</mat-option>
</mat-select>
<mat-error>
Fees Receivable is <strong>required</strong>
</mat-error>
</mat-form-field>
<mifosx-gl-account-selector fxFlex="48%"
[inputFormControl]="loanProductAccountingForm.controls.receivableFeeAccountId"
[glAccountList]="assetAccountData"
[required]="true"
[inputLabel]="'Fees Receivable'"
>
</mifosx-gl-account-selector>
<mat-form-field fxFlex="48%">
<mat-label>Penalties Receivable</mat-label>
<mat-select formControlName="receivablePenaltyAccountId" required>
<mat-option *ngFor="let assetAccount of assetAccountData" [value]="assetAccount.id">
({{ assetAccount.glCode }}) {{ assetAccount.name }}
</mat-option>
</mat-select>
<mat-error>
Penalties Receivable is <strong>required</strong>
</mat-error>
</mat-form-field>
<mifosx-gl-account-selector fxFlex="48%"
[inputFormControl]="loanProductAccountingForm.controls.receivablePenaltyAccountId"
[glAccountList]="assetAccountData"
[required]="true"
[inputLabel]="'Penalties Receivable'"
>
</mifosx-gl-account-selector>
</div>
<mat-form-field fxFlex="48%">
<mat-label>Transfer in suspense</mat-label>
<mat-select formControlName="transfersInSuspenseAccountId" required>
<mat-option *ngFor="let assetAccount of assetAccountData" [value]="assetAccount.id">
({{ assetAccount.glCode }}) {{ assetAccount.name }}
</mat-option>
</mat-select>
<mat-error>
Transfer in suspense is <strong>required</strong>
</mat-error>
</mat-form-field>
<mat-divider fxFlex="98%"></mat-divider>
<h4 fxFlex="98%" class="mat-h4">{{'labels.heading.Income' | translate}}</h4>
<mifosx-gl-account-selector fxFlex="48%"
[inputFormControl]="loanProductAccountingForm.controls.interestOnLoanAccountId"
[glAccountList]="incomeAccountData"
[required]="true"
[inputLabel]="'Income from Interest'"
>
</mifosx-gl-account-selector>
<mifosx-gl-account-selector fxFlex="48%"
[inputFormControl]="loanProductAccountingForm.controls.incomeFromFeeAccountId"
[glAccountList]="incomeAccountData"
[required]="true"
[inputLabel]="'Income from fees'"
>
</mifosx-gl-account-selector>
<mifosx-gl-account-selector fxFlex="48%"
[inputFormControl]="loanProductAccountingForm.controls.incomeFromPenaltyAccountId"
[glAccountList]="incomeAccountData"
[required]="true"
[inputLabel]="'Income from penalties'"
>
</mifosx-gl-account-selector>
<mifosx-gl-account-selector fxFlex="48%"
[inputFormControl]="loanProductAccountingForm.controls.incomeFromRecoveryAccountId"
[glAccountList]="incomeAccountData"
[required]="true"
[inputLabel]="'Income from Recovery Repayments'"
>
</mifosx-gl-account-selector>
<mifosx-gl-account-selector fxFlex="48%"
[inputFormControl]="loanProductAccountingForm.controls.incomeFromChargeOffInterestAccountId"
[glAccountList]="incomeAccountData"
[required]="true"
[inputLabel]="'Income from ChargeOff Interest'"
>
</mifosx-gl-account-selector>
<mifosx-gl-account-selector fxFlex="48%"
[inputFormControl]="loanProductAccountingForm.controls.incomeFromChargeOffFeesAccountId"
[glAccountList]="incomeAccountData"
[required]="true"
[inputLabel]="'Income from ChargeOff Fees'"
>
</mifosx-gl-account-selector>
<mifosx-gl-account-selector fxFlex="48%"
[inputFormControl]="loanProductAccountingForm.controls.incomeFromChargeOffPenaltyAccountId"
[glAccountList]="incomeAccountData"
[required]="true"
[inputLabel]="'Income from ChargeOff Penalty'"
>
</mifosx-gl-account-selector>
<mifosx-gl-account-selector fxFlex="48%"
[inputFormControl]="loanProductAccountingForm.controls.incomeFromGoodwillCreditInterestAccountId"
[glAccountList]="incomeAccountData"
[required]="true"
[inputLabel]="'Income from Goodwill Credit Interest'"
>
</mifosx-gl-account-selector>
<mifosx-gl-account-selector fxFlex="48%"
[inputFormControl]="loanProductAccountingForm.controls.incomeFromGoodwillCreditFeesAccountId"
[glAccountList]="incomeAccountData"
[required]="true"
[inputLabel]="'Income from Goodwill Credit Fees'"
>
</mifosx-gl-account-selector>
<mifosx-gl-account-selector fxFlex="48%"
[inputFormControl]="loanProductAccountingForm.controls.incomeFromGoodwillCreditPenaltyAccountId"
[glAccountList]="incomeAccountData"
[required]="true"
[inputLabel]="'Income from Goodwill Credit Penalty'"
>
</mifosx-gl-account-selector>
<mat-divider fxFlex="98%"></mat-divider>
<h4 fxFlex="98%" class="mat-h4">Income</h4>
<h4 fxFlex="98%" class="mat-h4">{{'labels.heading.Expenses' | translate}}</h4>
<mat-form-field fxFlex="48%">
<mat-label>Income from Interest</mat-label>
<mat-select formControlName="interestOnLoanAccountId" required>
<mat-option *ngFor="let incomeAccount of incomeAccountData" [value]="incomeAccount.id">
({{ incomeAccount.glCode }}) {{ incomeAccount.name }}
</mat-option>
</mat-select>
<mat-error>
Income from Interest is <strong>required</strong>
</mat-error>
</mat-form-field>
<mifosx-gl-account-selector fxFlex="48%"
[inputFormControl]="loanProductAccountingForm.controls.writeOffAccountId"
[glAccountList]="expenseAccountData"
[required]="true"
[inputLabel]="'Losses written off'"
>
</mifosx-gl-account-selector>
<mat-form-field fxFlex="48%">
<mat-label>Income from fees</mat-label>
<mat-select formControlName="incomeFromFeeAccountId" required>
<mat-option *ngFor="let incomeAccount of incomeAccountData" [value]="incomeAccount.id">
({{ incomeAccount.glCode }}) {{ incomeAccount.name }}
</mat-option>
</mat-select>
<mat-error>
Income from fees is <strong>required</strong>
</mat-error>
</mat-form-field>
<mifosx-gl-account-selector fxFlex="48%"
[inputFormControl]="loanProductAccountingForm.controls.goodwillCreditAccountId"
[glAccountList]="expenseAccountData"
[required]="true"
[inputLabel]="'Expenses from Goodwill Credit'"
>
</mifosx-gl-account-selector>
<mat-form-field fxFlex="48%">
<mat-label>Income from penalties</mat-label>
<mat-select formControlName="incomeFromPenaltyAccountId" required>
<mat-option *ngFor="let incomeAccount of incomeAccountData" [value]="incomeAccount.id">
({{ incomeAccount.glCode }}) {{ incomeAccount.name }}
</mat-option>
</mat-select>
<mat-error>
Income from penalties is <strong>required</strong>
</mat-error>
</mat-form-field>
<mifosx-gl-account-selector fxFlex="48%"
[inputFormControl]="loanProductAccountingForm.controls.chargeOffExpenseAccountId"
[glAccountList]="expenseAccountData"
[required]="true"
[inputLabel]="'ChargeOff Expense'"
>
</mifosx-gl-account-selector>
<mat-form-field fxFlex="48%">
<mat-label>Income from Recovery Repayments</mat-label>
<mat-select formControlName="incomeFromRecoveryAccountId" required>
<mat-option *ngFor="let incomeAccount of incomeAccountData" [value]="incomeAccount.id">
({{ incomeAccount.glCode }}) {{ incomeAccount.name }}
</mat-option>
</mat-select>
<mat-error>
Income from Recovery Repayments is <strong>required</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>Income from ChargeOff Interest</mat-label>
<mat-select formControlName="incomeFromChargeOffInterestAccountId" required>
<mat-option *ngFor="let incomeAccount of incomeAccountData" [value]="incomeAccount.id">
({{ incomeAccount.glCode }}) {{ incomeAccount.name }}
</mat-option>
</mat-select>
<mat-error>
Income from ChargeOff Interest is <strong>required</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>Income from ChargeOff Fees</mat-label>
<mat-select formControlName="incomeFromChargeOffFeesAccountId" required>
<mat-option *ngFor="let incomeAccount of incomeAccountData" [value]="incomeAccount.id">
({{ incomeAccount.glCode }}) {{ incomeAccount.name }}
</mat-option>
</mat-select>
<mat-error>
Income from ChargeOff Fees is <strong>required</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>Income from ChargeOff Penalty</mat-label>
<mat-select formControlName="incomeFromChargeOffPenaltyAccountId" required>
<mat-option *ngFor="let incomeAccount of incomeAccountData" [value]="incomeAccount.id">
({{ incomeAccount.glCode }}) {{ incomeAccount.name }}
</mat-option>
</mat-select>
<mat-error>
Income from ChargeOff Penalty is <strong>required</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>Income from Goodwill Credit Interest</mat-label>
<mat-select formControlName="incomeFromGoodwillCreditInterestAccountId" required>
<mat-option *ngFor="let incomeAccount of incomeAccountData" [value]="incomeAccount.id">
({{ incomeAccount.glCode }}) {{ incomeAccount.name }}
</mat-option>
</mat-select>
<mat-error>
Income from Goodwill Credit Interest is <strong>required</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>Income from Goodwill Credit Fees</mat-label>
<mat-select formControlName="incomeFromGoodwillCreditFeesAccountId" required>
<mat-option *ngFor="let incomeAccount of incomeAccountData" [value]="incomeAccount.id">
({{ incomeAccount.glCode }}) {{ incomeAccount.name }}
</mat-option>
</mat-select>
<mat-error>
Income from Goodwill Credit Fees is <strong>required</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>Income from Goodwill Credit Penalty</mat-label>
<mat-select formControlName="incomeFromGoodwillCreditPenaltyAccountId" required>
<mat-option *ngFor="let incomeAccount of incomeAccountData" [value]="incomeAccount.id">
({{ incomeAccount.glCode }}) {{ incomeAccount.name }}
</mat-option>
</mat-select>
<mat-error>
Income from Goodwill Credit Penalty is <strong>required</strong>
</mat-error>
</mat-form-field>
<mifosx-gl-account-selector fxFlex="48%"
[inputFormControl]="loanProductAccountingForm.controls.chargeOffFraudExpenseAccountId"
[glAccountList]="expenseAccountData"
[required]="true"
[inputLabel]="'ChargeOff Fraud Expense'"
>
</mifosx-gl-account-selector>
<mat-divider fxFlex="98%"></mat-divider>
<h4 fxFlex="98%" class="mat-h4">Expenses</h4>
<h4 fxFlex="98%" class="mat-h4">{{'labels.heading.Liabilities' | translate}}</h4>
<mat-form-field fxFlex="48%">
<mat-label>Losses written off</mat-label>
<mat-select formControlName="writeOffAccountId" required>
<mat-option *ngFor="let expenseAccount of expenseAccountData" [value]="expenseAccount.id">
({{ expenseAccount.glCode }}) {{ expenseAccount.name }}
</mat-option>
</mat-select>
<mat-error>
Losses written off is <strong>required</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>Expenses from Goodwill Credit</mat-label>
<mat-select formControlName="goodwillCreditAccountId" required>
<mat-option *ngFor="let expenseAccount of expenseAccountData" [value]="expenseAccount.id">
({{ expenseAccount.glCode }}) {{ expenseAccount.name }}
</mat-option>
</mat-select>
<mat-error>
Goodwill credit is <strong>required</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>ChargeOff Expense</mat-label>
<mat-select formControlName="chargeOffExpenseAccountId" required>
<mat-option *ngFor="let expenseAccount of expenseAccountData" [value]="expenseAccount.id">
({{ expenseAccount.glCode }}) {{ expenseAccount.name }}
</mat-option>
</mat-select>
<mat-error>
ChargeOff Expense is <strong>required</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>ChargeOff Fraud Expense</mat-label>
<mat-select formControlName="chargeOffFraudExpenseAccountId" required>
<mat-option *ngFor="let expenseAccount of expenseAccountData" [value]="expenseAccount.id">
({{ expenseAccount.glCode }}) {{ expenseAccount.name }}
</mat-option>
</mat-select>
<mat-error>
ChargeOff Fraud Expense is <strong>required</strong>
</mat-error>
</mat-form-field>
<mat-divider fxFlex="98%"></mat-divider>
<h4 fxFlex="98%" class="mat-h4">Liabilities</h4>
<mat-form-field fxFlex="48%">
<mat-label>Over payment liability</mat-label>
<mat-select formControlName="overpaymentLiabilityAccountId" required>
<mat-option *ngFor="let liabilityAccount of liabilityAccountData" [value]="liabilityAccount.id">
({{ liabilityAccount.glCode }}) {{ liabilityAccount.name }}
</mat-option>
</mat-select>
<mat-error>
Over payment liability is <strong>required</strong>
</mat-error>
</mat-form-field>
<mifosx-gl-account-selector fxFlex="48%"
[inputFormControl]="loanProductAccountingForm.controls.overpaymentLiabilityAccountId"
[glAccountList]="liabilityAccountData"
[required]="true"
[inputLabel]="'Over payment liability'"
>
</mifosx-gl-account-selector>
<mat-divider fxFlex="98%"></mat-divider>
@@ -12,139 +12,99 @@
<div *ngIf="savingProductAccountingForm.value.accountingRule === 2" fxFlexFill fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<h4 fxFlex="98%" class="mat-h4">Assets</h4>
<h4 fxFlex="98%" class="mat-h4">{{'labels.heading.Assets' | translate}}</h4>
<mat-form-field fxFlex="48%">
<mat-label>Saving reference</mat-label>
<mat-select formControlName="savingsReferenceAccountId" required>
<mat-option *ngFor="let assetAccount of assetAccountData" [value]="assetAccount.id">
({{ assetAccount.glCode }}) {{ assetAccount.name }}
</mat-option>
</mat-select>
<mat-error>
Saving reference is <strong>required</strong>
</mat-error>
</mat-form-field>
<mifosx-gl-account-selector fxFlex="48%"
[inputFormControl]="savingProductAccountingForm.controls.savingsReferenceAccountId"
[glAccountList]="assetAccountData"
[required]="true"
[inputLabel]="'Saving reference'"
>
</mifosx-gl-account-selector>
<mat-form-field fxFlex="48%">
<mat-label>Overdraft portfolio</mat-label>
<mat-select formControlName="overdraftPortfolioControlId" required>
<mat-option *ngFor="let assetAccount of assetAccountData" [value]="assetAccount.id">
({{ assetAccount.glCode }}) {{ assetAccount.name }}
</mat-option>
</mat-select>
<mat-error>
Overdraft portfolio is <strong>required</strong>
</mat-error>
</mat-form-field>
<mifosx-gl-account-selector fxFlex="48%"
[inputFormControl]="savingProductAccountingForm.controls.overdraftPortfolioControlId"
[glAccountList]="assetAccountData"
[required]="true"
[inputLabel]="'Overdraft portfolio'"
>
</mifosx-gl-account-selector>
<mat-divider fxFlex="98%"></mat-divider>
<h4 fxFlex="98%" class="mat-h4">Liabilities</h4>
<h4 fxFlex="98%" class="mat-h4">{{'labels.heading.Liabilities' | translate}}</h4>
<mat-form-field fxFlex="48%">
<mat-label>Saving control</mat-label>
<mat-select formControlName="savingsControlAccountId" required>
<mat-option *ngFor="let liabilityAccount of liabilityAccountData" [value]="liabilityAccount.id">
({{ liabilityAccount.glCode }}) {{ liabilityAccount.name }}
</mat-option>
</mat-select>
<mat-error>
Saving control is <strong>required</strong>
</mat-error>
</mat-form-field>
<mifosx-gl-account-selector fxFlex="48%"
[inputFormControl]="savingProductAccountingForm.controls.savingsControlAccountId"
[glAccountList]="liabilityAccountData"
[required]="true"
[inputLabel]="'Saving control'"
>
</mifosx-gl-account-selector>
<mat-form-field fxFlex="48%">
<mat-label>Savings transfers in suspense</mat-label>
<mat-select formControlName="transfersInSuspenseAccountId" required>
<mat-option *ngFor="let liabilityAccount of liabilityAccountData" [value]="liabilityAccount.id">
({{ liabilityAccount.glCode }}) {{ liabilityAccount.name }}
</mat-option>
</mat-select>
<mat-error>
Savings transfers in suspense is <strong>required</strong>
</mat-error>
</mat-form-field>
<mifosx-gl-account-selector fxFlex="48%"
[inputFormControl]="savingProductAccountingForm.controls.transfersInSuspenseAccountId"
[glAccountList]="liabilityAccountData"
[required]="true"
[inputLabel]="'Savings transfers in suspense'"
>
</mifosx-gl-account-selector>
<mat-form-field fxFlex="48%" *ngIf="isDormancyTrackingActive.value">
<mat-label>Escheat liability</mat-label>
<mat-select formControlName="escheatLiabilityId" required>
<mat-option *ngFor="let liabilityAccount of liabilityAccountData" [value]="liabilityAccount.id">
({{ liabilityAccount.glCode }}) {{ liabilityAccount.name }}
</mat-option>
</mat-select>
<mat-error>
Escheat liability is <strong>required</strong>
</mat-error>
</mat-form-field>
<mifosx-gl-account-selector fxFlex="48%" *ngIf="isDormancyTrackingActive.value"
[inputFormControl]="savingProductAccountingForm.controls.escheatLiabilityId"
[glAccountList]="liabilityAccountData"
[required]="true"
[inputLabel]="'Escheat liability'"
>
</mifosx-gl-account-selector>
<mat-divider fxFlex="98%"></mat-divider>
<h4 fxFlex="98%" class="mat-h4">Expenses</h4>
<h4 fxFlex="98%" class="mat-h4">{{'labels.heading.Expenses' | translate}}</h4>
<mat-form-field fxFlex="48%">
<mat-label>Interest on savings</mat-label>
<mat-select formControlName="interestOnSavingsAccountId" required>
<mat-option *ngFor="let expenseAccount of expenseAccountData" [value]="expenseAccount.id">
({{ expenseAccount.glCode }}) {{ expenseAccount.name }}
</mat-option>
</mat-select>
<mat-error>
Interest on savings is <strong>required</strong>
</mat-error>
</mat-form-field>
<mifosx-gl-account-selector fxFlex="48%"
[inputFormControl]="savingProductAccountingForm.controls.interestOnSavingsAccountId"
[glAccountList]="expenseAccountData"
[required]="true"
[inputLabel]="'Interest on savings'"
>
</mifosx-gl-account-selector>
<mat-form-field fxFlex="48%">
<mat-label>Write-off</mat-label>
<mat-select formControlName="writeOffAccountId" required>
<mat-option *ngFor="let expenseAccount of expenseAccountData" [value]="expenseAccount.id">
({{ expenseAccount.glCode }}) {{ expenseAccount.name }}
</mat-option>
</mat-select>
<mat-error>
Write-off is <strong>required</strong>
</mat-error>
</mat-form-field>
<mifosx-gl-account-selector fxFlex="48%"
[inputFormControl]="savingProductAccountingForm.controls.writeOffAccountId"
[glAccountList]="expenseAccountData"
[required]="true"
[inputLabel]="'Write-off'"
>
</mifosx-gl-account-selector>
<mat-divider fxFlex="98%"></mat-divider>
<h4 fxFlex="98%" class="mat-h4">Income</h4>
<h4 fxFlex="98%" class="mat-h4">{{'labels.heading.Income' | translate}}</h4>
<mat-form-field fxFlex="48%">
<mat-label>Income from fees</mat-label>
<mat-select formControlName="incomeFromFeeAccountId" required>
<mat-option *ngFor="let incomeAccount of incomeAccountData" [value]="incomeAccount.id">
({{ incomeAccount.glCode }}) {{ incomeAccount.name }}
</mat-option>
</mat-select>
<mat-error>
Income from fees Repayments is <strong>required</strong>
</mat-error>
</mat-form-field>
<mifosx-gl-account-selector fxFlex="48%"
[inputFormControl]="savingProductAccountingForm.controls.incomeFromFeeAccountId"
[glAccountList]="incomeAccountData"
[required]="true"
[inputLabel]="'Income from fees'"
>
</mifosx-gl-account-selector>
<mat-form-field fxFlex="48%">
<mat-label>Income from penalties</mat-label>
<mat-select formControlName="incomeFromPenaltyAccountId" required>
<mat-option *ngFor="let incomeAccount of incomeAccountData" [value]="incomeAccount.id">
({{ incomeAccount.glCode }}) {{ incomeAccount.name }}
</mat-option>
</mat-select>
<mat-error>
Income from penalties is <strong>required</strong>
</mat-error>
</mat-form-field>
<mifosx-gl-account-selector fxFlex="48%"
[inputFormControl]="savingProductAccountingForm.controls.incomeFromPenaltyAccountId"
[glAccountList]="incomeAccountData"
[required]="true"
[inputLabel]="'Income from penalties'"
>
</mifosx-gl-account-selector>
<mat-form-field fxFlex="48%">
<mat-label>Overdraft Interest Income</mat-label>
<mat-select formControlName="incomeFromInterestId" required>
<mat-option *ngFor="let incomeAccount of incomeAccountData" [value]="incomeAccount.id">
({{ incomeAccount.glCode }}) {{ incomeAccount.name }}
</mat-option>
</mat-select>
<mat-error>
Overdraft Interest Income is <strong>required</strong>
</mat-error>
</mat-form-field>
<mifosx-gl-account-selector fxFlex="48%"
[inputFormControl]="savingProductAccountingForm.controls.incomeFromInterestId"
[glAccountList]="incomeAccountData"
[required]="true"
[inputLabel]="'Overdraft Interest Income'"
>
</mifosx-gl-account-selector>
<mat-divider fxFlex="98%"></mat-divider>
@@ -208,57 +208,44 @@
<div fxFlexFill *ngIf="savingProduct.accountingRule.id === 2" fxLayout="row wrap" fxLayout.lt-md="column">
<h4 fxFlexFill class="mat-h4">Assets</h4>
<h4 fxFlexFill class="mat-h4">{{'labels.heading.Assets' | translate}}</h4>
<mifosx-gl-account-display fxFlex="100%" [accountTitle]="'Saving reference'"
[glAccount]="savingProduct.accountingMappings.savingsReferenceAccount" [withTitle]="'40%'">
</mifosx-gl-account-display>
<mifosx-gl-account-display fxFlex="100%" [accountTitle]="'Overdraft portfolio'"
[glAccount]="savingProduct.accountingMappings.overdraftPortfolioControl" [withTitle]="'40%'">
</mifosx-gl-account-display>
<div fxFlexFill fxLayout="row wrap" fxLayout.lt-md="column">
<span fxFlex="40%">Saving reference:</span>
<span fxFlex="60%">({{ savingProduct.accountingMappings.savingsReferenceAccount.glCode }}) {{
savingProduct.accountingMappings.savingsReferenceAccount.name }}</span>
<span fxFlex="40%">Overdraft portfolio:</span>
<span fxFlex="60%">({{ savingProduct.accountingMappings.overdraftPortfolioControl.glCode }}) {{
savingProduct.accountingMappings.overdraftPortfolioControl.name }}</span>
</div>
<h4 fxFlexFill class="mat-h4">{{'labels.heading.Income' | translate}}</h4>
<mifosx-gl-account-display fxFlex="100%" [accountTitle]="'Income from fees'"
[glAccount]="savingProduct.accountingMappings.incomeFromFeeAccount" [withTitle]="'40%'">
</mifosx-gl-account-display>
<mifosx-gl-account-display fxFlex="100%" [accountTitle]="'Income from penalties'"
[glAccount]="savingProduct.accountingMappings.incomeFromPenaltyAccount" [withTitle]="'40%'">
</mifosx-gl-account-display>
<mifosx-gl-account-display fxFlex="100%" [accountTitle]="'Income from penalties'"
[glAccount]="savingProduct.accountingMappings.incomeFromInterest" [withTitle]="'40%'">
</mifosx-gl-account-display>
<h4 fxFlexFill class="mat-h4">Liabilities</h4>
<h4 fxFlexFill class="mat-h4">{{'labels.heading.Expenses' | translate}}</h4>
<mifosx-gl-account-display fxFlex="100%" [accountTitle]="'Interest on savings'"
[glAccount]="savingProduct.accountingMappings.interestOnSavingsAccount" [withTitle]="'40%'">
</mifosx-gl-account-display>
<mifosx-gl-account-display fxFlex="100%" [accountTitle]="'Write-off'"
[glAccount]="savingProduct.accountingMappings.writeOffAccount" [withTitle]="'40%'">
</mifosx-gl-account-display>
<div fxFlexFill fxLayout="row wrap" fxLayout.lt-md="column">
<span fxFlex="40%">Saving control:</span>
<span fxFlex="60%">({{ savingProduct.accountingMappings.savingsControlAccount.glCode }}) {{
savingProduct.accountingMappings.savingsControlAccount.name }}</span>
<span fxFlex="40%">Savings transfers in suspense:</span>
<span fxFlex="60%">({{ savingProduct.accountingMappings.transfersInSuspenseAccount.glCode }}) {{
savingProduct.accountingMappings.transfersInSuspenseAccount.name }}</span>
<div fxFlexFill *ngIf="savingProduct.isDormancyTrackingActive">
<span fxFlex="40%">Escheat liability:</span>
<span fxFlex="60%">({{ savingProduct.accountingMappings.escheatLiabilityAccount.glCode }}) {{
savingProduct.accountingMappings.escheatLiabilityAccount.name }}</span>
</div>
</div>
<h4 fxFlexFill class="mat-h4">Expenses</h4>
<div fxFlexFill fxLayout="row wrap" fxLayout.lt-md="column">
<span fxFlex="40%">Interest on savings:</span>
<span fxFlex="60%">({{ savingProduct.accountingMappings.interestOnSavingsAccount.glCode }}) {{
savingProduct.accountingMappings.interestOnSavingsAccount.name }}</span>
<span fxFlex="40%">Write-off:</span>
<span fxFlex="60%">({{ savingProduct.accountingMappings.writeOffAccount.glCode }}) {{
savingProduct.accountingMappings.writeOffAccount.name }}</span>
</div>
<h4 fxFlexFill class="mat-h4">Income</h4>
<div fxFlexFill fxLayout="row wrap" fxLayout.lt-md="column">
<span fxFlex="40%">Income from fees:</span>
<span fxFlex="60%">({{ savingProduct.accountingMappings.incomeFromFeeAccount.glCode }}) {{
savingProduct.accountingMappings.incomeFromFeeAccount.name }}</span>
<span fxFlex="40%">Income from penalties:</span>
<span fxFlex="60%">({{ savingProduct.accountingMappings.incomeFromPenaltyAccount.glCode }}) {{
savingProduct.accountingMappings.incomeFromPenaltyAccount.name }}</span>
<span fxFlex="40%">Overdraft Interest Income:</span>
<span fxFlex="60%">({{ savingProduct.accountingMappings.incomeFromInterest.glCode }}) {{
savingProduct.accountingMappings.incomeFromInterest.name }}</span>
</div>
<h4 fxFlexFill class="mat-h4">{{'labels.heading.Liabilities' | translate}}</h4>
<mifosx-gl-account-display fxFlex="100%" [accountTitle]="'Saving control'"
[glAccount]="savingProduct.accountingMappings.savingsControlAccount" [withTitle]="'40%'">
</mifosx-gl-account-display>
<mifosx-gl-account-display fxFlex="100%" [accountTitle]="'Savings transfers in suspense'"
[glAccount]="savingProduct.accountingMappings.transfersInSuspenseAccount" [withTitle]="'40%'">
</mifosx-gl-account-display>
<mifosx-gl-account-display fxFlex="100%" [accountTitle]="'Escheat liability'"
*ngIf="savingProduct.accountingMappings.escheatLiabilityAccount"
[glAccount]="savingProduct.accountingMappings.escheatLiabilityAccount" [withTitle]="'40%'">
</mifosx-gl-account-display>
<div
*ngIf="savingProduct.paymentChannelToFundSourceMappings?.length || savingProduct.feeToIncomeAccountMappings?.length || savingProduct.penaltyToIncomeAccountMappings?.length"
@@ -0,0 +1,13 @@
<span *ngIf="accountTitle">
<div fxFlex="{{withTitle}}" class="header">
{{'labels.inputs.' + accountTitle | translate}}
</div>
<div fxFlex="{{withAccount}}">
{{glAccountValue()}}
</div>
</span>
<div fxFlex="100%" *ngIf="!accountTitle">
{{glAccountValue()}}
</div>
@@ -0,0 +1,8 @@
div {
margin: 0.3rem 0;
word-wrap: break-word;
&.header {
font-weight: 500;
}
}
@@ -0,0 +1,23 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { GlAccountDisplayComponent } from './gl-account-display.component';
describe('GlAccountDisplayComponent', () => {
let component: GlAccountDisplayComponent;
let fixture: ComponentFixture<GlAccountDisplayComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ GlAccountDisplayComponent ]
})
.compileComponents();
fixture = TestBed.createComponent(GlAccountDisplayComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
@@ -0,0 +1,28 @@
import { Component, Input, OnInit } from '@angular/core';
import { GLAccount } from 'app/shared/models/general.model';
@Component({
selector: 'mifosx-gl-account-display',
templateUrl: './gl-account-display.component.html',
styleUrls: ['./gl-account-display.component.scss']
})
export class GlAccountDisplayComponent implements OnInit {
@Input() glAccount: GLAccount | null = null;
@Input() accountTitle: string | null = null;
@Input() withTitle = '50%';
@Input() withAccount = '50%';
constructor() { }
ngOnInit(): void {
}
glAccountValue(): string {
if (this.glAccount) {
return '(' + this.glAccount.glCode + ') ' + (this.glAccount.nameDecorated ? this.glAccount.nameDecorated : this.glAccount.name);
}
return '';
}
}
@@ -0,0 +1,31 @@
<mat-form-field fxFlex="100%" *ngIf="required">
<mat-label>{{'labels.inputs.' + inputLabel | translate}}</mat-label>
<mat-select required [formControl]="inputFormControl">
<mat-option>
<ngx-mat-select-search [formControl]="filterFormCtrl"></ngx-mat-select-search>
</mat-option>
<mat-option *ngFor="let glAccount of glAccountData | async" [value]="glAccount.id">
{{ '(' + glAccount.glCode + ') ' + glAccount.name }}
</mat-option>
</mat-select>
<mat-error *ngIf="inputFormControl.hasError('required')">
{{"labels.inputs.Account"| translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="100%" *ngIf="!required">
<mat-label>{{'labels.inputs.' + inputLabel | translate}}</mat-label>
<mat-select [formControl]="inputFormControl">
<mat-option>
<ngx-mat-select-search [formControl]="filterFormCtrl"
placeholderLabel="{{placeHolderLabel}}"
noEntriesFoundLabel="{{noEntriesFoundLabel}}">
</ngx-mat-select-search>
</mat-option>
<mat-option *ngFor="let glAccount of glAccountData | async" [value]="glAccount.id">
{{ '(' + glAccount.glCode + ') ' + glAccount.name }}
</mat-option>
</mat-select>
</mat-form-field>
@@ -0,0 +1,23 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { GlAccountSelectorComponent } from './gl-account-selector.component';
describe('GlAccountSelectorComponent', () => {
let component: GlAccountSelectorComponent;
let fixture: ComponentFixture<GlAccountSelectorComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ GlAccountSelectorComponent ]
})
.compileComponents();
fixture = TestBed.createComponent(GlAccountSelectorComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
@@ -0,0 +1,71 @@
import { Component, Input, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core';
import { UntypedFormControl } from '@angular/forms';
import { TranslateService } from '@ngx-translate/core';
import { GLAccount } from 'app/shared/models/general.model';
import { ReplaySubject, Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
@Component({
selector: 'mifosx-gl-account-selector',
templateUrl: './gl-account-selector.component.html',
styleUrls: ['./gl-account-selector.component.scss']
})
export class GlAccountSelectorComponent implements OnInit, OnChanges, OnDestroy {
@Input() inputFormControl: UntypedFormControl;
@Input() glAccountList: GLAccount[] = [];
@Input() required = false;
@Input() inputLabel = '';
/** GL Account data. */
protected glAccountData: ReplaySubject<GLAccount[]> = new ReplaySubject<GLAccount[]>(1);
/** control for the filter select */
protected filterFormCtrl: UntypedFormControl = new UntypedFormControl('');
/** Subject that emits when the component has been destroyed. */
protected _onDestroy = new Subject<void>();
placeHolderLabel = '';
noEntriesFoundLabel = '';
constructor(private translateService: TranslateService) { }
ngOnInit(): void {
// listen for search field value changes
this.filterFormCtrl.valueChanges
.pipe(takeUntil(this._onDestroy))
.subscribe(() => {
this.searchGLAccount();
});
this.placeHolderLabel = this.translateService.instant('labels.inputs.Filter');
this.noEntriesFoundLabel = this.translateService.instant('labels.text.No data found');
}
ngOnChanges(changes: SimpleChanges): void {
if (this.glAccountList) {
this.glAccountData.next(this.glAccountList.slice());
}
}
ngOnDestroy(): void {
this._onDestroy.next();
this._onDestroy.complete();
}
searchGLAccount(): void {
if (this.glAccountList) {
const search: string = this.filterFormCtrl.value.toLowerCase();
if (!search) {
this.glAccountData.next(this.glAccountList.slice());
} else {
this.glAccountData.next(this.glAccountList.filter((option: GLAccount) => {
return option.name.toLowerCase().indexOf(search) >= 0 || option.glCode.toLowerCase().indexOf(search) >= 0;
}));
}
}
}
}
+2
View File
@@ -32,6 +32,7 @@ import {
faDollarSign,
faEdit,
faEnvelope,
faExchange,
faExclamationCircle,
faExclamationTriangle,
faEye,
@@ -154,6 +155,7 @@ export class IconsModule {
faDollarSign,
faEdit,
faEnvelope,
faExchange,
faExclamationCircle,
faExclamationTriangle,
faEye,
+2
View File
@@ -38,6 +38,7 @@ import { MatTabsModule } from '@angular/material/tabs';
import { MatToolbarModule } from '@angular/material/toolbar';
import { MatTooltipModule } from '@angular/material/tooltip';
import { MatTreeModule } from '@angular/material/tree';
import { NgxMatSelectSearchModule } from 'ngx-mat-select-search';
/**
* Material Module
@@ -71,6 +72,7 @@ import { MatTreeModule } from '@angular/material/tree';
MatProgressSpinnerModule,
MatRadioModule,
MatSelectModule,
NgxMatSelectSearchModule,
MatSidenavModule,
MatSliderModule,
MatSlideToggleModule,
+1
View File
@@ -15,6 +15,7 @@ export interface GLAccount {
name: string;
glCode: string;
description: string;
nameDecorated?: string;
disabled: boolean;
manualEntriesAllowed: boolean;
type: OptionData;
+8 -2
View File
@@ -43,6 +43,8 @@ import { AccountNumberComponent } from './account-number/account-number.componen
import { EntityNameComponent } from './entity-name/entity-name.component';
import { TransactionPaymentDetailComponent } from './transaction-payment-detail/transaction-payment-detail.component';
import { StepperButtonsComponent } from './steppers/stepper-buttons/stepper-buttons.component';
import { GlAccountSelectorComponent } from './accounting/gl-account-selector/gl-account-selector.component';
import { GlAccountDisplayComponent } from './accounting/gl-account-display/gl-account-display.component';
/**
* Shared Module
@@ -92,7 +94,9 @@ import { StepperButtonsComponent } from './steppers/stepper-buttons/stepper-butt
AccountNumberComponent,
EntityNameComponent,
TransactionPaymentDetailComponent,
StepperButtonsComponent
StepperButtonsComponent,
GlAccountSelectorComponent,
GlAccountDisplayComponent
],
exports: [
FileUploadComponent,
@@ -120,7 +124,9 @@ import { StepperButtonsComponent } from './steppers/stepper-buttons/stepper-butt
SvgIconComponent,
EntityNameComponent,
TransactionPaymentDetailComponent,
StepperButtonsComponent
StepperButtonsComponent,
GlAccountSelectorComponent,
GlAccountDisplayComponent
]
})
export class SharedModule { }
+15 -3
View File
@@ -2094,6 +2094,7 @@
"Configuration Wizard": "Průvodce konfigurací",
"Create Guarantor": "Vytvořit garanta",
"Create Journal Entry": "Vytvořit položku deníku",
"Credit Balance Refund": "Vrácení kreditního zůstatek",
"Dashboard": "Přístrojová deska",
"Delete": "Vymazat",
"Deposit": "Vklad",
@@ -2131,7 +2132,8 @@
"Prepay Loan": "Půjčka před výplatou",
"Products": "produkty",
"Profile": "Profil",
"Recove From Guarantor": "Vymáhání od ručitele",
"Recover From Guarantor": "Vymáhání od ručitele",
"Recovery Payment": "Platba obnovy",
"Reject": "Odmítnout",
"Reports": "Zprávy",
"Reschedule": "Přeplánovat",
@@ -2167,7 +2169,17 @@
},
"status": {
"Active": "Aktivní",
"Closed": "ZAVŘENO"
"Approved": "Schválený",
"Closed": "ZAVŘENO",
"Closed (rescheduled)": "Uzavřeno (přeplánováno)",
"Closed (written off)": "Uzavřeno (odepsané)",
"Overpaid": "Přeplatek",
"Pending": "čekající",
"Rejected": "Odmítnuto",
"Submitted and pending approval": "Předložený a čekající na schválení",
"Transfer in progress": "Převod",
"Transfer on hold": "Přenesejte na pozastavení",
"Withdrawn": "Stažený"
},
"dialogContext": {
"Are you sure you want Unassign Staff": "Are you sure you want Unassign Staff",
@@ -2521,7 +2533,7 @@
"Manual journal entry transactions recorded in a journal": "Transakce ručního zápisu do deníku zaznamenané v deníku",
"Mifos Initiative": "Iniciativa Mifos",
"Mifos X data-tables allow the user to add custom fields": "Tabulky dat Mifos X umožňují uživateli přidat vlastní pole kromě vestavěných polí do profilu klienta, úvěrového/spořicího účtu, skupiny, centra nebo kanceláře.",
"Migrate Opening Balances": "Tento formulář bude použit k migraci počátečních zůstatků. Chcete-li vědět více, klikněte:",
"Migrate Opening Balances": "Migrujte úvodní zůstatky",
"Modify Loans Account": "Upravit úvěrový účet",
"N/A": "N/A",
"Navigate system selecting entity": "To uživateli umožní rychle procházet entitou pro výběr systému, zatímco vyhledávání činí navigaci robustnější.",
+15 -3
View File
@@ -2094,6 +2094,7 @@
"Configuration Wizard": "Konfigurationsassistent",
"Create Guarantor": "Bürgen erstellen",
"Create Journal Entry": "Journaleintrag erstellen",
"Credit Balance Refund": "Rückerstattung des Kreditsaldos",
"Dashboard": "Armaturenbrett",
"Delete": "Löschen",
"Deposit": "Kaution",
@@ -2131,7 +2132,8 @@
"Prepay Loan": "Darlehen mit Vorauszahlung",
"Products": "Produkte",
"Profile": "Profil",
"Recove From Guarantor": "Rückforderung vom Bürgen",
"Recover From Guarantor": "Rückforderung vom Bürgen",
"Recovery Payment": "Wiederherstellungszahlung",
"Reject": "Ablehnen",
"Reports": "Berichte",
"Reschedule": "Neu planen",
@@ -2167,7 +2169,17 @@
},
"status": {
"Active": "Aktiv",
"Closed": "Geschlossen"
"Approved": "Genehmigt",
"Closed": "Geschlossen",
"Closed (rescheduled)": "Geschlossen (verschoben)",
"Closed (written off)": "Geschlossen (abgeschrieben)",
"Overpaid": "Überbezahlt",
"Pending": "Ausstehend",
"Rejected": "Abgelehnt",
"Submitted and pending approval": "Eingereicht und ausstehende Genehmigung",
"Transfer in progress": "Übertragung in Arbeit",
"Transfer on hold": "Übertragen",
"Withdrawn": "Zurückgezogen"
},
"dialogContext": {
"Are you sure you want Unassign Staff": "Sind Sie sicher, dass Sie das Personal freistellen möchten",
@@ -2520,7 +2532,7 @@
"Manual journal entry transactions recorded in a journal": "Manuelle Journalbuchungstransaktionen, die in einem Journal aufgezeichnet werden",
"Mifos Initiative": "Mifos-Initiative",
"Mifos X data-tables allow the user to add custom fields": "Mifos",
"Migrate Opening Balances": "Dieses Formular wird zur Migration von Eröffnungssalden verwendet. Um mehr zu erfahren, klicken Sie:",
"Migrate Opening Balances": "Migrate Öffnungsbilanzen",
"Modify Loans Account": "Darlehenskonto ändern",
"N/A": "N / A",
"Navigate system selecting entity": "Dadurch kann der Benutzer schnell durch das System navigieren und eine Entität auswählen, während die Suche die Navigation robuster macht.",
+15 -3
View File
@@ -2095,6 +2095,7 @@
"Configuration Wizard": "Configuration Wizard",
"Create Guarantor": "Create Guarantor",
"Create Journal Entry": "Create Journal Entry",
"Credit Balance Refund": "Credit Balance Refund",
"Dashboard": "Dashboard",
"Delete": "Delete",
"Deposit": "Deposit",
@@ -2132,7 +2133,8 @@
"Prepay Loan": "Prepay Loan",
"Products": "Products",
"Profile": "Profile",
"Recove From Guarantor": "Recovery From Guarantor",
"Recover From Guarantor": "Recover From Guarantor",
"Recovery Payment": "Recovery Payment",
"Reject": "Reject",
"Reports": "Reports",
"Reschedule": "Reschedule",
@@ -2168,7 +2170,17 @@
},
"status": {
"Active": "Active",
"Closed": "Closed"
"Approved": "Approved",
"Closed": "Closed",
"Closed (rescheduled)": "Closed (rescheduled)",
"Closed (written off)": "Closed (written off)",
"Overpaid": "Overpaid",
"Pending": "Pending",
"Rejected": "Rejected",
"Submitted and pending approval": "Submitted and pending approval",
"Transfer in progress": "Transfer in progress",
"Transfer on hold": "Transfer on hold",
"Withdrawn": "Withdrawn"
},
"dialogContext": {
"Are you sure you want Unassign Staff": "Are you sure you want Unassign Staff",
@@ -2522,7 +2534,7 @@
"Manual journal entry transactions recorded in a journal": "Manual journal entry transactions recorded in a journal",
"Mifos Initiative": "Mifos Initiative",
"Mifos X data-tables allow the user to add custom fields": "Mifos X data-tables allow the user to add custom fields in addition to the built-in fields to a client profile, loan/saving account, group, center or an office.",
"Migrate Opening Balances": "This form will be used to migrate opening balances. To know more click:",
"Migrate Opening Balances": "Migrate Opening Balances",
"Modify Loans Account": "Modify Loans Account",
"N/A": "N/A",
"Navigate system selecting entity": "This will allow the user to quickly navigate the system selecting entity while searching makes the navigation more robust.",
+16 -4
View File
@@ -2094,7 +2094,8 @@
"Configuration Wizard": "Asistente de configuración",
"Create Guarantor": "Crear garante",
"Create Journal Entry": "Crear entrada de diario",
"Dashboard": "Panel",
"Credit Balance Refund": "Reembolsar saldo de crédito",
"Dashboard": "Tableros",
"Delete": "Borrar",
"Deposit": "Depósito",
"Disburse": "Desembolsar",
@@ -2131,7 +2132,8 @@
"Prepay Loan": "Crédito Prepago",
"Products": "Productos",
"Profile": "Perfil",
"Recove From Guarantor": "Recuperación del garante",
"Recover From Guarantor": "Recuperar del Garante",
"Recovery Payment": "Pago de recuperación",
"Reject": "Rechazar",
"Reports": "Informes",
"Reschedule": "Reprogramar",
@@ -2167,7 +2169,17 @@
},
"status": {
"Active": "Activo",
"Closed": "Cerrado"
"Approved": "Aprobado",
"Closed": "Cerrado",
"Closed (rescheduled)": "Cerrado (reprogramado)",
"Closed (written off)": "Cerrado (cancelado)",
"Overpaid": "Sobrepagado",
"Pending": "Pendiente",
"Rejected": "Rechazado",
"Submitted and pending approval": "Aprobación pendiente",
"Transfer in progress": "Transferencia en progreso",
"Transfer on hold": "Transferencia en pausa",
"Withdrawn": "Retirado"
},
"dialogContext": {
"Are you sure you want Unassign Staff": "¿Estás seguro de que deseas desasignar al personal?",
@@ -2521,7 +2533,7 @@
"Manual journal entry transactions recorded in a journal": "Transacciones de asiento de diario manuales registradas en un diario",
"Mifos Initiative": "Iniciativa Mifos",
"Mifos X data-tables allow the user to add custom fields": "Las tablas de datos de Mifos X permiten al usuario agregar campos personalizados además de los campos integrados a un perfil de cliente, cuenta de Crédito/ahorro, grupo, centro u oficina.",
"Migrate Opening Balances": "Este formulario se utilizará para migrar saldos iniciales. Para saber más haga clic en:",
"Migrate Opening Balances": "Migrar saldos de apertura",
"Modify Loans Account": "Modificar cuenta de Créditos",
"N/A": "N / A",
"Navigate system selecting entity": "Esto permitirá al usuario navegar rápidamente por el sistema seleccionando la entidad mientras la búsqueda hace que la navegación sea más sólida.",
+15 -3
View File
@@ -2094,6 +2094,7 @@
"Configuration Wizard": "Assistant de configuration",
"Create Guarantor": "Créer un garant",
"Create Journal Entry": "Créer une entrée de journal",
"Credit Balance Refund": "Remboursement du solde de crédit",
"Dashboard": "Tableau de bord",
"Delete": "Supprimer",
"Deposit": "Dépôt",
@@ -2131,7 +2132,8 @@
"Prepay Loan": "Prêt à remboursement anticipé",
"Products": "Des produits",
"Profile": "Profil",
"Recove From Guarantor": "Récupération auprès du garant",
"Recover From Guarantor": "Récupération auprès du garant",
"Recovery Payment": "Paiement de récupération",
"Reject": "Rejeter",
"Reports": "Rapports",
"Reschedule": "Reprogrammer",
@@ -2167,7 +2169,17 @@
},
"status": {
"Active": "Actif",
"Closed": "Fermé"
"Approved": "Approuvé",
"Closed": "Fermé",
"Closed (rescheduled)": "Fermé (reprogrammé)",
"Closed (written off)": "Fermé (radié)",
"Overpaid": "Trop payant",
"Pending": "En attente",
"Rejected": "Rejeté",
"Submitted and pending approval": "Approbation soumise et en attente",
"Transfer in progress": "Transfert en cours",
"Transfer on hold": "Transfert en attente",
"Withdrawn": "Retiré"
},
"dialogContext": {
"Are you sure you want Unassign Staff": "Êtes-vous sûr de vouloir désassigner le personnel",
@@ -2521,7 +2533,7 @@
"Manual journal entry transactions recorded in a journal": "Opérations d'écriture de journal manuelle enregistrées dans un journal",
"Mifos Initiative": "Initiative Mifos",
"Mifos X data-tables allow the user to add custom fields": "Les tables de données Mifos X permettent à l'utilisateur d'ajouter des champs personnalisés en plus des champs intégrés à un profil client, un compte de prêt/épargne, un groupe, un centre ou un bureau.",
"Migrate Opening Balances": "Ce formulaire sera utilisé pour migrer les soldes d’ouverture. Pour en savoir plus cliquez :",
"Migrate Opening Balances": "Migrer les soldes d'ouverture",
"Modify Loans Account": "Modifier le compte de prêts",
"N/A": "N / A",
"Navigate system selecting entity": "Cela permettra à l'utilisateur de naviguer rapidement dans l'entité de sélection du système tandis que la recherche rendra la navigation plus robuste.",
+15 -3
View File
@@ -2094,6 +2094,7 @@
"Configuration Wizard": "Procedura guidata di configurazione",
"Create Guarantor": "Creare Garante",
"Create Journal Entry": "Crea voce di diario",
"Credit Balance Refund": "Rimborso del saldo del credito",
"Dashboard": "Pannello di controllo",
"Delete": "Eliminare",
"Deposit": "Depositare",
@@ -2131,7 +2132,8 @@
"Prepay Loan": "Prestito con pagamento anticipato",
"Products": "Prodotti",
"Profile": "Profilo",
"Recove From Guarantor": "Recupero dal garante",
"Recover From Guarantor": "Recupero dal garante",
"Recovery Payment": "Pagamento di recupero",
"Reject": "Rifiutare",
"Reports": "Rapporti",
"Reschedule": "Riprogrammare",
@@ -2167,7 +2169,17 @@
},
"status": {
"Active": "Attivo",
"Closed": "Chiuso"
"Approved": "Approvato",
"Closed": "Chiuso",
"Closed (rescheduled)": "Chiuso (riprogrammata)",
"Closed (written off)": "Chiuso (scritto)",
"Overpaid": "Pagato in eccesso",
"Pending": "In attesa di",
"Rejected": "Respinto",
"Submitted and pending approval": "Approvazione presentata e in sospeso",
"Transfer in progress": "Trasferimento in corso",
"Transfer on hold": "Trasferimento in attesa",
"Withdrawn": "Ritirato"
},
"dialogContext": {
"Are you sure you want Unassign Staff": "Sei sicuro di voler deassegnare il personale",
@@ -2521,7 +2533,7 @@
"Manual journal entry transactions recorded in a journal": "Transazioni di registrazione a giornale manuali registrate in un giornale",
"Mifos Initiative": "Iniziativa Mifos",
"Mifos X data-tables allow the user to add custom fields": "Le tabelle dati di Mifos X consentono all'utente di aggiungere campi personalizzati oltre ai campi integrati al profilo cliente, conto di prestito/risparmio, gruppo, centro o ufficio.",
"Migrate Opening Balances": "Questo modulo verrà utilizzato per migrare i saldi di apertura. Per saperne di più clicca:",
"Migrate Opening Balances": "Migrare i saldi di apertura",
"Modify Loans Account": "Modifica conto prestiti",
"N/A": "N / A",
"Navigate system selecting entity": "Ciò consentirà all'utente di navigare rapidamente nel sistema selezionando l'entità mentre la ricerca rende la navigazione più affidabile.",
+15 -3
View File
@@ -779,6 +779,7 @@
"Question": "질문",
"Recent Activities": "최근 활동",
"Recover from Guarantor": "보증인에서 회복하십시오",
"Recovery Payment": "복구 지불",
"Recover Original Schedule": "원래 일정을 복구하십시오",
"Recurring Deposit Accounts": "반복 예금 계좌",
"Recurring Deposit Details": "정기입금 내역",
@@ -2094,6 +2095,7 @@
"Configuration Wizard": "구성 마법사",
"Create Guarantor": "보증인 만들기",
"Create Journal Entry": "분개 항목 만들기",
"Credit Balance Refund": "신용 잔액 환불",
"Dashboard": "계기반",
"Delete": "삭제",
"Deposit": "보증금",
@@ -2131,7 +2133,7 @@
"Prepay Loan": "선불대출",
"Products": "제품",
"Profile": "프로필",
"Recove From Guarantor": "보증인으로부터의 회복",
"Recover From Guarantor": "보증인으로부터의 회복",
"Reject": "거부하다",
"Reports": "보고서",
"Reschedule": "일정 변경",
@@ -2167,7 +2169,17 @@
},
"status": {
"Active": "활동적인",
"Closed": "닫은"
"Approved": "승인",
"Closed": "닫은",
"Closed (rescheduled)": "폐쇄 (일정 조정)",
"Closed (written off)": "폐쇄 (서면)",
"Overpaid": "초과 지불",
"Pending": "보류 중",
"Rejected": "거부",
"Submitted and pending approval": "제출 및 보류 승인",
"Transfer in progress": "진행중인 양도",
"Transfer on hold": "보류에 이체하십시오",
"Withdrawn": "빼는"
},
"dialogContext": {
"Are you sure you want Unassign Staff": "직원 해제를 하시겠습니까?",
@@ -2521,7 +2533,7 @@
"Manual journal entry transactions recorded in a journal": "분개장에 기록된 수동 분개 거래",
"Mifos Initiative": "미포스 이니셔티브",
"Mifos X data-tables allow the user to add custom fields": "Mifos X 데이터 테이블을 사용하면 사용자는 클라이언트 프로필, 대출/저축 계좌, 그룹, 센터 또는 사무실에 기본 제공 필드 외에 사용자 정의 필드를 추가할 수 있습니다.",
"Migrate Opening Balances": "이 양식은 기초 잔액을 마이그레이션하는 데 사용됩니다. 자세한 내용을 보려면 다음을 클릭하세요.",
"Migrate Opening Balances": "개방 잔액을 마이그레이션합니다",
"Modify Loans Account": "대출 계정 수정",
"N/A": "해당 없음",
"Navigate system selecting entity": "이를 통해 사용자는 시스템 선택 엔터티를 빠르게 탐색할 수 있으며 검색은 탐색을 더욱 강력하게 만듭니다.",
+15 -3
View File
@@ -2094,6 +2094,7 @@
"Configuration Wizard": "Konfigūracijos vedlys",
"Create Guarantor": "Sukurti garantą",
"Create Journal Entry": "Sukurti žurnalo įrašą",
"Credit Balance Refund": "Kredito balanso grąžinimas",
"Dashboard": "Prietaisų skydelis",
"Delete": "Ištrinti",
"Deposit": "Užstatas",
@@ -2131,7 +2132,8 @@
"Prepay Loan": "Išankstinio mokėjimo paskola",
"Products": "Produktai",
"Profile": "Profilis",
"Recove From Guarantor": "Išieškojimas iš garanto",
"Recover From Guarantor": "Išieškojimas iš garanto",
"Recovery Payment": "Išieškojimo mokėjimas",
"Reject": "Atmesti",
"Reports": "Ataskaitos",
"Reschedule": "Suplanuoti iš naujo",
@@ -2167,7 +2169,17 @@
},
"status": {
"Active": "Aktyvus",
"Closed": "Uždaryta"
"Approved": "Patvirtinta",
"Closed": "Uždaryta",
"Closed (rescheduled)": "Uždarytas (pertvarkytas)",
"Closed (written off)": "Uždarytas (nurašytas)",
"Overpaid": "Permokėta",
"Pending": "Kol",
"Rejected": "Atstumtas",
"Submitted and pending approval": "Pateikta ir laukiama patvirtinimo",
"Transfer in progress": "Vykdomas perkėlimas",
"Transfer on hold": "Perkelti sustabdytas",
"Withdrawn": "Pasitraukė"
},
"dialogContext": {
"Are you sure you want Unassign Staff": "Ar tikrai norite atšaukti darbuotojo priskyrimą?",
@@ -2521,7 +2533,7 @@
"Manual journal entry transactions recorded in a journal": "Neautomatinio žurnalo įrašymo operacijos, įrašytos į žurnalą",
"Mifos Initiative": "Mifos iniciatyva",
"Mifos X data-tables allow the user to add custom fields": "„Mifos X“ duomenų lentelės leidžia vartotojui pridėti pasirinktinius laukus be įtaisytųjų laukų prie kliento profilio, paskolos / taupymo sąskaitos, grupės, centro ar biuro.",
"Migrate Opening Balances": "Ši forma bus naudojama pradiniams likučiams perkelti. Norėdami sužinoti daugiau, spustelėkite:",
"Migrate Opening Balances": "Perkelkite atidarymo balansus",
"Modify Loans Account": "Modifikuoti paskolų sąskaitą",
"N/A": "N/A",
"Navigate system selecting entity": "Tai leis vartotojui greitai naršyti sistemos pasirinkimo objektą, o ieškant naršymas tampa patikimesnis.",
+15 -3
View File
@@ -2094,6 +2094,7 @@
"Configuration Wizard": "Konfigurācijas vednis",
"Create Guarantor": "Izveidojiet galvotāju",
"Create Journal Entry": "Izveidojiet žurnāla ierakstu",
"Credit Balance Refund": "Kredīta atlikuma atmaksa",
"Dashboard": "Mērinstrumentu panelis",
"Delete": "Dzēst",
"Deposit": "Depozīts",
@@ -2131,7 +2132,8 @@
"Prepay Loan": "Priekšapmaksas aizdevums",
"Products": "Produkti",
"Profile": "Profils",
"Recove From Guarantor": "Atgūšana no galvotāja",
"Recover From Guarantor": "Atgūšana no galvotāja",
"Recovery Payment": "Atgūšanas maksājums",
"Reject": "Noraidīt",
"Reports": "Pārskati",
"Reschedule": "Pārplānot",
@@ -2167,7 +2169,17 @@
},
"status": {
"Active": "Aktīvs",
"Closed": "Slēgts"
"Approved": "Apstiprināts",
"Closed": "Slēgts",
"Closed (rescheduled)": "Slēgts (pārplānots)",
"Closed (written off)": "Slēgts (norakstīts)",
"Overpaid": "Pārmaksāts",
"Pending": "Līdz",
"Rejected": "Noraidīts",
"Submitted and pending approval": "Iesniegts un gaidīts apstiprinājums",
"Transfer in progress": "Iepriekšējā pārnešana",
"Transfer on hold": "Pārnešana aizturēta",
"Withdrawn": "Atsaukts"
},
"dialogContext": {
"Are you sure you want Unassign Staff": "Vai tiešām vēlaties atcelt darbinieka piešķiršanu?",
@@ -2521,7 +2533,7 @@
"Manual journal entry transactions recorded in a journal": "Manuālā žurnāla ieraksta darījumi, kas ierakstīti žurnālā",
"Mifos Initiative": "Mifos iniciatīva",
"Mifos X data-tables allow the user to add custom fields": "Mifos X datu tabulas ļauj lietotājam papildus iebūvētajiem laukiem pievienot pielāgotus laukus klienta profilam, aizdevuma/uzkrājuma kontam, grupai, centram vai birojam.",
"Migrate Opening Balances": "Šī veidlapa tiks izmantota sākuma bilanču migrēšanai. Lai uzzinātu vairāk, noklikšķiniet:",
"Migrate Opening Balances": "Migrēt atveres atlikumus",
"Modify Loans Account": "Modificēt aizdevuma kontu",
"N/A": "N/A",
"Navigate system selecting entity": "Tas ļaus lietotājam ātri pārvietoties pa sistēmas atlases entītiju, kamēr meklēšana padara navigāciju noturīgāku.",
+15 -3
View File
@@ -2094,6 +2094,7 @@
"Configuration Wizard": "कन्फिगरेसन विजार्ड",
"Create Guarantor": "ग्यारेन्टर सिर्जना गर्नुहोस्",
"Create Journal Entry": "जर्नल प्रविष्टि सिर्जना गर्नुहोस्",
"Credit Balance Refund": "क्रेडिट ब्यालेन्स फिर्ती",
"Dashboard": "ड्यासबोर्ड",
"Delete": "मेटाउन",
"Deposit": "जम्मा",
@@ -2131,7 +2132,8 @@
"Prepay Loan": "पूर्व भुक्तानी ऋण",
"Products": "उत्पादनहरू",
"Profile": "प्रोफाइल",
"Recove From Guarantor": "ग्यारेन्टरबाट रिकभरी",
"Recover From Guarantor": "ग्यारेन्टरबाट रिकभरी",
"Recovery Payment": "रिकभरी भुक्तानी",
"Reject": "अस्वीकार गर्नुहोस्",
"Reports": "रिपोर्टहरू",
"Reschedule": "पुन: तालिका",
@@ -2167,7 +2169,17 @@
},
"status": {
"Active": "सक्रिय",
"Closed": "बन्द"
"Approved": "स्वीकार",
"Closed": "बन्द",
"Closed (rescheduled)": "बन्द (पुनः शेडवर्ड)",
"Closed (written off)": "बन्द (लिखित बन्द)",
"Overpaid": "अधिकपात",
"Pending": "फैसला बांकी राखेको",
"Rejected": "अस्वीकृत",
"Submitted and pending approval": "बुझाइएको र अनुमोदन पेन्डिंग",
"Transfer in progress": "प्रगतिमा स्थानान्तरण",
"Transfer on hold": "होल्डमा स्थानान्तरण गर्नुहोस्",
"Withdrawn": "फिर्ता लिन"
},
"dialogContext": {
"Are you sure you want Unassign Staff": "के तपाईं निश्चित हुनुहुन्छ कि तपाईंले कर्मचारीलाई अनपाइन्ट गर्न चाहनुहुन्छ?",
@@ -2521,7 +2533,7 @@
"Manual journal entry transactions recorded in a journal": "जर्नलमा रेकर्ड गरिएको म्यानुअल जर्नल प्रविष्टि लेनदेन",
"Mifos Initiative": "Mifos पहल",
"Mifos X data-tables allow the user to add custom fields": "Mifos X डाटा-टेबलहरूले प्रयोगकर्तालाई ग्राहक प्रोफाइल, ऋण/बचत खाता, समूह, केन्द्र वा कार्यालयमा निर्मित क्षेत्रहरू बाहेक अनुकूलन क्षेत्रहरू थप्न अनुमति दिन्छ।",
"Migrate Opening Balances": "यो फारम ओपनिङ ब्यालेन्स माइग्रेट गर्न प्रयोग गरिने छ। थप जान्नको लागि क्लिक गर्नुहोस्:",
"Migrate Opening Balances": "ओप्रवाहको ब्यालेन्स सारियो",
"Modify Loans Account": "ऋण खाता परिमार्जन गर्नुहोस्",
"N/A": "N/A",
"Navigate system selecting entity": "यसले प्रयोगकर्तालाई प्रणाली चयन गर्ने निकायलाई द्रुत रूपमा नेभिगेट गर्न अनुमति दिनेछ जब खोजी गर्दा नेभिगेसनलाई अझ बलियो बनाउँछ।",
+15 -3
View File
@@ -2094,6 +2094,7 @@
"Configuration Wizard": "Assistente de configuração",
"Create Guarantor": "Criar fiador",
"Create Journal Entry": "Criar lançamento contábil manual",
"Credit Balance Refund": "Reembolso do saldo do crédito",
"Dashboard": "Painel",
"Delete": "Excluir",
"Deposit": "Depósito",
@@ -2131,7 +2132,8 @@
"Prepay Loan": "Empréstimo pré-pago",
"Products": "Produtos",
"Profile": "Perfil",
"Recove From Guarantor": "Recuperação do Fiador",
"Recover From Guarantor": "Recuperação do Fiador",
"Recovery Payment": "Pagamento de recuperação",
"Reject": "Rejeitar",
"Reports": "Relatórios",
"Reschedule": "Reprogramar",
@@ -2167,7 +2169,17 @@
},
"status": {
"Active": "Ativo",
"Closed": "Fechado"
"Approved": "Aprovado",
"Closed": "Fechado",
"Closed (rescheduled)": "Fechado (remarcado)",
"Closed (written off)": "Fechado (desligado)",
"Overpaid": "Pago em excesso",
"Pending": "Pendente",
"Rejected": "Rejeitado",
"Submitted and pending approval": "Aprovação enviada e pendente",
"Transfer in progress": "Transferência em andamento",
"Transfer on hold": "Transferência em espera",
"Withdrawn": "Retirado"
},
"dialogContext": {
"Are you sure you want Unassign Staff": "Tem a certeza que deseja desassociar o funcionário?",
@@ -2521,7 +2533,7 @@
"Manual journal entry transactions recorded in a journal": "Transações de lançamento manual registradas em um diário",
"Mifos Initiative": "Iniciativa Mifos",
"Mifos X data-tables allow the user to add custom fields": "As tabelas de dados Mifos X permitem ao usuário adicionar campos personalizados além dos campos integrados a um perfil de cliente, empréstimo/conta poupança, grupo, centro ou escritório.",
"Migrate Opening Balances": "Este formulário será usado para migrar saldos iniciais. Para saber mais clique:",
"Migrate Opening Balances": "Migrar saldos de abertura",
"Modify Loans Account": "Modificar conta de empréstimos",
"N/A": "N / D",
"Navigate system selecting entity": "Isso permitirá que o usuário navegue rapidamente no sistema selecionando a entidade enquanto a pesquisa torna a navegação mais robusta.",
+15 -3
View File
@@ -2094,6 +2094,7 @@
"Configuration Wizard": "Mchawi wa Usanidi",
"Create Guarantor": "Unda Mdhamini",
"Create Journal Entry": "Unda Ingizo la Jarida",
"Credit Balance Refund": "Marejesho ya Mizani ya Mkopo",
"Dashboard": "Dashibodi",
"Delete": "Futa",
"Deposit": "Amana",
@@ -2131,7 +2132,8 @@
"Prepay Loan": "Lipa Mkopo",
"Products": "Bidhaa",
"Profile": "Wasifu",
"Recove From Guarantor": "Urejeshaji Kutoka kwa Mdhamini",
"Recover From Guarantor": "Urejeshaji Kutoka kwa Mdhamini",
"Recovery Payment": "Malipo ya uokoaji",
"Reject": "Kataa",
"Reports": "Ripoti",
"Reschedule": "Panga upya",
@@ -2167,7 +2169,17 @@
},
"status": {
"Active": "Inayotumika",
"Closed": "Imefungwa"
"Approved": "Kupitishwa",
"Closed": "Imefungwa",
"Closed (rescheduled)": "Imefungwa (imewekwa upya)",
"Closed (written off)": "Imefungwa (imeandikwa mbali)",
"Overpaid": "Kulipwa zaidi",
"Pending": "Inasubiri",
"Rejected": "Kukataliwa",
"Submitted and pending approval": "Imewasilishwa na idhini inayosubiri",
"Transfer in progress": "Uhamisho unaendelea",
"Transfer on hold": "Uhamisho juu ya kushikilia",
"Withdrawn": "Kutolewa"
},
"dialogContext": {
"Are you sure you want Unassign Staff": "Je, una uhakika unataka kuondoa wafanyakazi?",
@@ -2521,7 +2533,7 @@
"Manual journal entry transactions recorded in a journal": "Uingizaji wa shughuli za jarida kwa mikono iliyorekodiwa kwenye jarida",
"Mifos Initiative": "Mpango wa Mifos",
"Mifos X data-tables allow the user to add custom fields": "Jedwali la data la Mifos X huruhusu mtumiaji kuongeza sehemu maalum pamoja na sehemu zilizojengewa ndani kwa wasifu wa mteja, akaunti ya mkopo/kuokoa, kikundi, kituo au ofisi.",
"Migrate Opening Balances": "Fomu hii itatumika kuhamisha mizani ya ufunguzi. Kujua zaidi bofya:",
"Migrate Opening Balances": "Kuhamia mizani ya ufunguzi",
"Modify Loans Account": "Rekebisha Akaunti ya Mikopo",
"N/A": "N/A",
"Navigate system selecting entity": "Hii itamruhusu mtumiaji kuabiri kwa haraka huluki ya kuchagua mfumo huku akitafuta hufanya urambazaji kuwa thabiti zaidi.",