WEB-172 Merging all changes from main branch into dev branch (#2450)
This commit is contained in:
@@ -5,6 +5,7 @@ import { CommonModule } from '@angular/common';
|
|||||||
/** Custom Directives */
|
/** Custom Directives */
|
||||||
import { HasPermissionDirective } from './has-permission/has-permission.directive';
|
import { HasPermissionDirective } from './has-permission/has-permission.directive';
|
||||||
import { FormatAmountDirective } from './format-amount.directive';
|
import { FormatAmountDirective } from './format-amount.directive';
|
||||||
|
import { ValidateOnFocusDirective } from './validate-on-focus.directive';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Directives Module
|
* Directives Module
|
||||||
@@ -17,11 +18,13 @@ import { FormatAmountDirective } from './format-amount.directive';
|
|||||||
],
|
],
|
||||||
declarations: [
|
declarations: [
|
||||||
HasPermissionDirective,
|
HasPermissionDirective,
|
||||||
FormatAmountDirective
|
FormatAmountDirective,
|
||||||
|
ValidateOnFocusDirective
|
||||||
],
|
],
|
||||||
exports: [
|
exports: [
|
||||||
HasPermissionDirective,
|
HasPermissionDirective,
|
||||||
FormatAmountDirective
|
FormatAmountDirective,
|
||||||
|
ValidateOnFocusDirective
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
export class DirectivesModule {}
|
export class DirectivesModule {}
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
import { Directive, ElementRef, HostListener } from '@angular/core';
|
||||||
|
import { NgControl } from '@angular/forms';
|
||||||
|
|
||||||
|
@Directive({
|
||||||
|
selector: '[mifosxValidateOnFocus]'
|
||||||
|
})
|
||||||
|
export class ValidateOnFocusDirective {
|
||||||
|
constructor(
|
||||||
|
private control: NgControl,
|
||||||
|
private el: ElementRef
|
||||||
|
) {}
|
||||||
|
|
||||||
|
@HostListener('focus')
|
||||||
|
onFocus() {
|
||||||
|
this.control.control?.markAsTouched();
|
||||||
|
this.control.control?.updateValueAndValidity();
|
||||||
|
}
|
||||||
|
}
|
||||||
+1
@@ -42,6 +42,7 @@ export class LoansAccountScheduleStepComponent {
|
|||||||
dateFormat
|
dateFormat
|
||||||
);
|
);
|
||||||
delete payload['enableInstallmentLevelDelinquency'];
|
delete payload['enableInstallmentLevelDelinquency'];
|
||||||
|
delete payload['externalId'];
|
||||||
|
|
||||||
this.loansService.calculateLoanSchedule(payload).subscribe((response: any) => {
|
this.loansService.calculateLoanSchedule(payload).subscribe((response: any) => {
|
||||||
this.repaymentScheduleDetails = response;
|
this.repaymentScheduleDetails = response;
|
||||||
|
|||||||
+26
-5
@@ -58,6 +58,7 @@ export class MakeRepaymentComponent implements OnInit {
|
|||||||
* and initialize with the required values
|
* and initialize with the required values
|
||||||
*/
|
*/
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
|
this.command = this.dataObject.type.code.split('.')[1];
|
||||||
this.maxDate = this.settingsService.businessDate;
|
this.maxDate = this.settingsService.businessDate;
|
||||||
this.createRepaymentLoanForm();
|
this.createRepaymentLoanForm();
|
||||||
this.setRepaymentLoanDetails();
|
this.setRepaymentLoanDetails();
|
||||||
@@ -76,14 +77,27 @@ export class MakeRepaymentComponent implements OnInit {
|
|||||||
this.settingsService.businessDate,
|
this.settingsService.businessDate,
|
||||||
Validators.required
|
Validators.required
|
||||||
],
|
],
|
||||||
transactionAmount: [
|
|
||||||
'',
|
|
||||||
Validators.required
|
|
||||||
],
|
|
||||||
externalId: '',
|
externalId: '',
|
||||||
paymentTypeId: '',
|
paymentTypeId: '',
|
||||||
note: ''
|
note: ''
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (this.isCapitalizedIncome()) {
|
||||||
|
this.repaymentLoanForm.addControl(
|
||||||
|
'transactionAmount',
|
||||||
|
new UntypedFormControl('', [
|
||||||
|
Validators.required,
|
||||||
|
Validators.min(0.001),
|
||||||
|
Validators.max(this.dataObject.amount)])
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
this.repaymentLoanForm.addControl(
|
||||||
|
'transactionAmount',
|
||||||
|
new UntypedFormControl('', [
|
||||||
|
Validators.required,
|
||||||
|
Validators.min(0.001)])
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
setRepaymentLoanDetails() {
|
setRepaymentLoanDetails() {
|
||||||
@@ -114,7 +128,14 @@ export class MakeRepaymentComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
showDetails(): boolean {
|
showDetails(): boolean {
|
||||||
return !['capitalizedIncome'].includes(this.command);
|
return !this.isCapitalizedIncome();
|
||||||
|
}
|
||||||
|
|
||||||
|
isCapitalizedIncome(): boolean {
|
||||||
|
return [
|
||||||
|
'capitalizedIncome',
|
||||||
|
'capitalizedIncomeAdjustment'
|
||||||
|
].includes(this.command);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Submits the repayment form */
|
/** Submits the repayment form */
|
||||||
|
|||||||
@@ -212,7 +212,8 @@ export class LoanTrancheDetailsComponent implements OnInit {
|
|||||||
item.expectedDisbursementDate,
|
item.expectedDisbursementDate,
|
||||||
this.settingsService.dateFormat
|
this.settingsService.dateFormat
|
||||||
),
|
),
|
||||||
principal: item.principal
|
principal: item.principal,
|
||||||
|
id: item.id
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -194,6 +194,16 @@
|
|||||||
<span>{{ 'labels.menus.Undo Re-Amortize' | translate }}</span>
|
<span>{{ 'labels.menus.Undo Re-Amortize' | translate }}</span>
|
||||||
</button>
|
</button>
|
||||||
</span>
|
</span>
|
||||||
|
<span *ngIf="isCapitalizedIncome(transaction.type) && !transaction.manuallyReversed">
|
||||||
|
<button
|
||||||
|
mat-menu-item
|
||||||
|
*mifosxHasPermission="'CAPITALIZED_INCOME_LOAN'"
|
||||||
|
(click)="capitalizedIncomeAdjustmentTransaction(transaction, $event)"
|
||||||
|
>
|
||||||
|
<mat-icon><fa-icon icon="coins" size="sm"></fa-icon></mat-icon>
|
||||||
|
<span>{{ 'labels.menus.Capitalized Income Adjustment' | translate }}</span>
|
||||||
|
</button>
|
||||||
|
</span>
|
||||||
<span *ngIf="viewJournalEntry(transaction.type)">
|
<span *ngIf="viewJournalEntry(transaction.type)">
|
||||||
<button
|
<button
|
||||||
mat-menu-item
|
mat-menu-item
|
||||||
|
|||||||
@@ -12,6 +12,11 @@ import { ConfirmationDialogComponent } from 'app/shared/confirmation-dialog/conf
|
|||||||
import { TranslateService } from '@ngx-translate/core';
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
import { LoanTransaction } from 'app/products/loan-products/models/loan-account.model';
|
import { LoanTransaction } from 'app/products/loan-products/models/loan-account.model';
|
||||||
import { LoanTransactionType } from 'app/loans/models/loan-transaction-type.model';
|
import { LoanTransactionType } from 'app/loans/models/loan-transaction-type.model';
|
||||||
|
import { FormfieldBase } from 'app/shared/form-dialog/formfield/model/formfield-base';
|
||||||
|
import { InputBase } from 'app/shared/form-dialog/formfield/model/input-base';
|
||||||
|
import { FormDialogComponent } from 'app/shared/form-dialog/form-dialog.component';
|
||||||
|
import { AlertService } from 'app/core/alert/alert.service';
|
||||||
|
import { DatepickerBase } from 'app/shared/form-dialog/formfield/model/datepicker-base';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'mifosx-transactions-tab',
|
selector: 'mifosx-transactions-tab',
|
||||||
@@ -80,7 +85,8 @@ export class TransactionsTabComponent implements OnInit {
|
|||||||
private dialog: MatDialog,
|
private dialog: MatDialog,
|
||||||
private loansService: LoansService,
|
private loansService: LoansService,
|
||||||
private translateService: TranslateService,
|
private translateService: TranslateService,
|
||||||
private settingsService: SettingsService
|
private settingsService: SettingsService,
|
||||||
|
private alertService: AlertService
|
||||||
) {
|
) {
|
||||||
this.route.parent.parent.data.subscribe((data: { loanDetailsData: any }) => {
|
this.route.parent.parent.data.subscribe((data: { loanDetailsData: any }) => {
|
||||||
this.transactionsData = data.loanDetailsData.transactions;
|
this.transactionsData = data.loanDetailsData.transactions;
|
||||||
@@ -332,6 +338,10 @@ export class TransactionsTabComponent implements OnInit {
|
|||||||
return transactionType.reAmortize || transactionType.code === 'loanTransactionType.reAmortize';
|
return transactionType.reAmortize || transactionType.code === 'loanTransactionType.reAmortize';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private isCapitalizedIncome(transactionType: LoanTransactionType): boolean {
|
||||||
|
return transactionType.capitalizedIncome || transactionType.code === 'loanTransactionType.capitalizedIncome';
|
||||||
|
}
|
||||||
|
|
||||||
private isReAgoeOrReAmortize(transactionType: LoanTransactionType): boolean {
|
private isReAgoeOrReAmortize(transactionType: LoanTransactionType): boolean {
|
||||||
return this.isReAmortize(transactionType) || this.isReAge(transactionType);
|
return this.isReAmortize(transactionType) || this.isReAge(transactionType);
|
||||||
}
|
}
|
||||||
@@ -354,4 +364,72 @@ export class TransactionsTabComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
capitalizedIncomeAdjustmentTransaction(transaction: LoanTransaction) {
|
||||||
|
const accountId = `${this.loanId}`;
|
||||||
|
this.loansService
|
||||||
|
.getLoanTransactionActionTemplate(accountId, 'capitalizedIncomeAdjustment', `${transaction.id}`)
|
||||||
|
.subscribe((response: any) => {
|
||||||
|
const transactionDate = response.date || transaction.date;
|
||||||
|
const transactionAmount = response.amount || transaction.amount;
|
||||||
|
const formfields: FormfieldBase[] = [
|
||||||
|
new DatepickerBase({
|
||||||
|
controlName: 'transactionDate',
|
||||||
|
label: 'Date',
|
||||||
|
value: this.dateUtils.parseDate(transactionDate),
|
||||||
|
type: 'datetime-local',
|
||||||
|
required: true,
|
||||||
|
minDate: transaction.date,
|
||||||
|
order: 1
|
||||||
|
}),
|
||||||
|
new InputBase({
|
||||||
|
controlName: 'amount',
|
||||||
|
label: 'Amount',
|
||||||
|
value: transactionAmount,
|
||||||
|
type: 'number',
|
||||||
|
required: true,
|
||||||
|
max: transactionAmount,
|
||||||
|
min: 0.001,
|
||||||
|
order: 2
|
||||||
|
})
|
||||||
|
|
||||||
|
];
|
||||||
|
const data = {
|
||||||
|
title: `Adjustment ${transaction.type.value} Transaction`,
|
||||||
|
layout: { addButtonText: 'Adjustment' },
|
||||||
|
formfields: formfields
|
||||||
|
};
|
||||||
|
const chargebackDialogRef = this.dialog.open(FormDialogComponent, { data });
|
||||||
|
chargebackDialogRef.afterClosed().subscribe((response: { data: any }) => {
|
||||||
|
if (response.data) {
|
||||||
|
const dateFormat = this.settingsService.dateFormat;
|
||||||
|
|
||||||
|
if (response.data.value.amount <= transactionAmount) {
|
||||||
|
const locale = this.settingsService.language.code;
|
||||||
|
const payload = {
|
||||||
|
transactionDate: this.dateUtils.formatDate(response.data.value.transactionDate, dateFormat),
|
||||||
|
transactionAmount: response.data.value.amount,
|
||||||
|
locale,
|
||||||
|
dateFormat
|
||||||
|
};
|
||||||
|
this.loansService
|
||||||
|
.executeLoansAccountTransactionsCommand(
|
||||||
|
accountId,
|
||||||
|
'capitalizedIncomeAdjustment',
|
||||||
|
payload,
|
||||||
|
transaction.id
|
||||||
|
)
|
||||||
|
.subscribe(() => {
|
||||||
|
this.router.navigate(['../'], { relativeTo: this.route });
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
this.alertService.alert({
|
||||||
|
type: 'BusinessRule',
|
||||||
|
message: 'Chargeback amount must be lower or equal to: ' + transaction.amount
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,6 +32,11 @@ export class LoansService {
|
|||||||
return this.http.get(`/loans/${loanId}/transactions/template`, { params: httpParams });
|
return this.http.get(`/loans/${loanId}/transactions/template`, { params: httpParams });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getLoanTransactionActionTemplate(loanId: string, command: string, transactionId: string): Observable<any> {
|
||||||
|
const httpParams = new HttpParams().set('command', command).set('transactionId', transactionId);
|
||||||
|
return this.http.get(`/loans/${loanId}/transactions/template`, { params: httpParams });
|
||||||
|
}
|
||||||
|
|
||||||
getLoanPrepayLoanActionTemplate(loanId: string, transactionDate: string): Observable<any> {
|
getLoanPrepayLoanActionTemplate(loanId: string, transactionDate: string): Observable<any> {
|
||||||
if (!transactionDate) {
|
if (!transactionDate) {
|
||||||
transactionDate = this.dateUtils.formatDate(this.settingsService.businessDate, this.settingsService.dateFormat);
|
transactionDate = this.dateUtils.formatDate(this.settingsService.businessDate, this.settingsService.dateFormat);
|
||||||
|
|||||||
@@ -32,4 +32,6 @@ export interface LoanTransactionType {
|
|||||||
downPayment: boolean;
|
downPayment: boolean;
|
||||||
reAge: boolean;
|
reAge: boolean;
|
||||||
reAmortize: boolean;
|
reAmortize: boolean;
|
||||||
|
capitalizedIncome: boolean;
|
||||||
|
capitalizedIncomeAdjustment: boolean;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -200,15 +200,22 @@
|
|||||||
-->
|
-->
|
||||||
<mat-form-field fxFlex="48%" *ngIf="showMinMaxCap()">
|
<mat-form-field fxFlex="48%" *ngIf="showMinMaxCap()">
|
||||||
<mat-label>{{ 'labels.inputs.Minimum Charge Cap' | translate }}</mat-label>
|
<mat-label>{{ 'labels.inputs.Minimum Charge Cap' | translate }}</mat-label>
|
||||||
<input matInput formControlName="minCap" />
|
<input matInput autofocus formControlName="minCap" mifosxValidateOnFocus />
|
||||||
|
<mat-error *ngIf="chargeForm.controls.minCap.hasError('maxValue')">
|
||||||
|
{{ 'errors.validation.msg.loanproduct.maximumGap.not.greater.than.specified.number' | translate }} ({{
|
||||||
|
chargeForm.controls.maxCap.value
|
||||||
|
}})
|
||||||
|
</mat-error>
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
|
|
||||||
<mat-form-field fxFlex="48%" *ngIf="showMinMaxCap()">
|
<mat-form-field fxFlex="48%" *ngIf="showMinMaxCap()">
|
||||||
<mat-label>{{ 'labels.inputs.Maximum Charge Cap' | translate }}</mat-label>
|
<mat-label>{{ 'labels.inputs.Maximum Charge Cap' | translate }}</mat-label>
|
||||||
<input matInput [min]="chargeForm.value.minCap" formControlName="maxCap" />
|
<input matInput autofocus formControlName="maxCap" mifosxValidateOnFocus />
|
||||||
<mat-error *ngIf="chargeForm.errors?.minGreaterThanMax">
|
|
||||||
{{ 'labels.inputs.Maximum Charge Cap' | translate }} ({{ repeatEveryLabel }})
|
<mat-error *ngIf="chargeForm.controls.maxCap.hasError('minValue')">
|
||||||
<strong>{{ 'labels.commons.must higher than Minimum Charge Cap' | translate }}</strong>
|
{{ 'errors.validation.msg.loanproduct.maximumGap.not.greater.than.specified.number' | translate }} ({{
|
||||||
|
chargeForm.controls.minCap.value
|
||||||
|
}})
|
||||||
</mat-error>
|
</mat-error>
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,8 @@ import { Router, ActivatedRoute } from '@angular/router';
|
|||||||
import { ProductsService } from '../../products.service';
|
import { ProductsService } from '../../products.service';
|
||||||
import { SettingsService } from 'app/settings/settings.service';
|
import { SettingsService } from 'app/settings/settings.service';
|
||||||
import { Dates } from 'app/core/utils/dates';
|
import { Dates } from 'app/core/utils/dates';
|
||||||
import { minLessThanOrEqualMaxValidator } from 'app/shared/validators/min-max-values.validator';
|
import { minNumberValueValidator } from 'app/shared/validators/min-number-value.validator';
|
||||||
|
import { maxNumberValueValidator } from 'app/shared/validators/max-number-value.validator';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create charge component.
|
* Create charge component.
|
||||||
@@ -80,40 +81,45 @@ export class CreateChargeComponent implements OnInit {
|
|||||||
* Creates the charge form.
|
* Creates the charge form.
|
||||||
*/
|
*/
|
||||||
createChargeForm() {
|
createChargeForm() {
|
||||||
this.chargeForm = this.formBuilder.group(
|
this.chargeForm = this.formBuilder.group({
|
||||||
{
|
chargeAppliesTo: [
|
||||||
chargeAppliesTo: [
|
'',
|
||||||
'',
|
Validators.required
|
||||||
Validators.required
|
],
|
||||||
],
|
name: [
|
||||||
name: [
|
'',
|
||||||
'',
|
Validators.required
|
||||||
Validators.required
|
],
|
||||||
],
|
currencyCode: [
|
||||||
currencyCode: [
|
'',
|
||||||
'',
|
Validators.required
|
||||||
Validators.required
|
],
|
||||||
],
|
chargeTimeType: [
|
||||||
chargeTimeType: [
|
'',
|
||||||
'',
|
Validators.required
|
||||||
Validators.required
|
],
|
||||||
],
|
chargeCalculationType: [
|
||||||
chargeCalculationType: [
|
'',
|
||||||
'',
|
Validators.required
|
||||||
Validators.required
|
],
|
||||||
],
|
amount: [
|
||||||
amount: [
|
'',
|
||||||
'',
|
[
|
||||||
Validators.required
|
Validators.required,
|
||||||
],
|
Validators.pattern('^\\s*(?=.*[1-9])\\d*(?:\\.\\d+)?\\s*$')]
|
||||||
active: [false],
|
],
|
||||||
penalty: [false],
|
active: [false],
|
||||||
taxGroupId: [''],
|
penalty: [false],
|
||||||
minCap: [''],
|
taxGroupId: [null],
|
||||||
maxCap: ['']
|
minCap: [
|
||||||
},
|
null,
|
||||||
{ validators: minLessThanOrEqualMaxValidator('minCap', 'maxCap') }
|
[maxNumberValueValidator('maxCap')]
|
||||||
);
|
],
|
||||||
|
maxCap: [
|
||||||
|
null,
|
||||||
|
[minNumberValueValidator('minCap')]
|
||||||
|
]
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -112,12 +112,11 @@
|
|||||||
"
|
"
|
||||||
>
|
>
|
||||||
<mat-label>{{ 'labels.inputs.Minimum Charge Cap' | translate }}</mat-label>
|
<mat-label>{{ 'labels.inputs.Minimum Charge Cap' | translate }}</mat-label>
|
||||||
<input matInput autofocus formControlName="minCap" />
|
<input matInput autofocus formControlName="minCap" mifosxValidateOnFocus />
|
||||||
<mat-error
|
<mat-error *ngIf="chargeForm.controls.minCap.hasError('maxValue')">
|
||||||
*ngIf="chargeForm.controls.maxCap.hasError('minGreaterThanMax') || chargeForm.errors?.minGreaterThanMax"
|
{{ 'errors.validation.msg.loanproduct.maximumGap.not.greater.than.specified.number' | translate }} ({{
|
||||||
>
|
chargeForm.controls.maxCap.value
|
||||||
{{ 'labels.inputs.Minimum Charge Cap' | translate }} ({{ repeatEveryLabel }})
|
}})
|
||||||
<strong>{{ 'labels.commons.must lower than Maximum Charge Cap' | translate }}</strong>
|
|
||||||
</mat-error>
|
</mat-error>
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
<mat-form-field
|
<mat-form-field
|
||||||
@@ -137,10 +136,12 @@
|
|||||||
"
|
"
|
||||||
>
|
>
|
||||||
<mat-label>{{ 'labels.inputs.Maximum Charge Cap' | translate }}</mat-label>
|
<mat-label>{{ 'labels.inputs.Maximum Charge Cap' | translate }}</mat-label>
|
||||||
<input matInput [min]="chargeForm.value.minCap" autofocus formControlName="maxCap" />
|
<input matInput autofocus formControlName="maxCap" mifosxValidateOnFocus />
|
||||||
<mat-error *ngIf="chargeForm.hasError('minGreaterThanMax') || chargeForm.errors?.minGreaterThanMax">
|
|
||||||
{{ 'labels.inputs.Maximum Charge Cap' | translate }} ({{ repeatEveryLabel }})
|
<mat-error *ngIf="chargeForm.controls.maxCap.hasError('minValue')">
|
||||||
<strong>{{ 'labels.commons.must be equal or greater than Minimum Charge Cap' | translate }}</strong>
|
{{ 'errors.validation.msg.loanproduct.maximumGap.not.greater.than.specified.number' | translate }} ({{
|
||||||
|
chargeForm.controls.minCap.value
|
||||||
|
}})
|
||||||
</mat-error>
|
</mat-error>
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,8 @@ import { ActivatedRoute, Router } from '@angular/router';
|
|||||||
/** Custom Services */
|
/** Custom Services */
|
||||||
import { ProductsService } from 'app/products/products.service';
|
import { ProductsService } from 'app/products/products.service';
|
||||||
import { SettingsService } from 'app/settings/settings.service';
|
import { SettingsService } from 'app/settings/settings.service';
|
||||||
import { minLessThanOrEqualMaxValidator } from 'app/shared/validators/min-max-values.validator';
|
import { maxNumberValueValidator } from 'app/shared/validators/max-number-value.validator';
|
||||||
|
import { minNumberValueValidator } from 'app/shared/validators/min-number-value.validator';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Edit Charge component.
|
* Edit Charge component.
|
||||||
@@ -74,39 +75,43 @@ export class EditChargeComponent implements OnInit {
|
|||||||
editChargeForm() {
|
editChargeForm() {
|
||||||
this.showFeeOptions = this.chargeData.feeInterval && this.chargeData.feeInterval > 0;
|
this.showFeeOptions = this.chargeData.feeInterval && this.chargeData.feeInterval > 0;
|
||||||
|
|
||||||
this.chargeForm = this.formBuilder.group(
|
this.chargeForm = this.formBuilder.group({
|
||||||
{
|
name: [
|
||||||
name: [
|
this.chargeData.name,
|
||||||
this.chargeData.name,
|
Validators.required
|
||||||
Validators.required
|
],
|
||||||
],
|
chargeAppliesTo: [
|
||||||
chargeAppliesTo: [
|
{ value: this.chargeData.chargeAppliesTo.id, disabled: true },
|
||||||
{ value: this.chargeData.chargeAppliesTo.id, disabled: true },
|
Validators.required
|
||||||
Validators.required
|
],
|
||||||
],
|
currencyCode: [
|
||||||
currencyCode: [
|
this.chargeData.currency.code,
|
||||||
this.chargeData.currency.code,
|
Validators.required
|
||||||
Validators.required
|
],
|
||||||
],
|
amount: [
|
||||||
amount: [
|
this.chargeData.amount,
|
||||||
this.chargeData.amount,
|
Validators.required
|
||||||
Validators.required
|
],
|
||||||
],
|
active: [this.chargeData.active],
|
||||||
active: [this.chargeData.active],
|
penalty: [this.chargeData.penalty],
|
||||||
penalty: [this.chargeData.penalty],
|
minCap: [
|
||||||
minCap: [this.chargeData.minCap],
|
this.chargeData.minCap || null,
|
||||||
maxCap: [this.chargeData.maxCap],
|
,
|
||||||
chargeTimeType: [
|
[maxNumberValueValidator('maxCap')]
|
||||||
this.chargeData.chargeTimeType.id,
|
],
|
||||||
Validators.required
|
maxCap: [
|
||||||
],
|
this.chargeData.maxCap || null,
|
||||||
chargeCalculationType: [
|
[minNumberValueValidator('minCap')]
|
||||||
this.chargeData.chargeCalculationType.id,
|
],
|
||||||
Validators.required
|
chargeTimeType: [
|
||||||
]
|
this.chargeData.chargeTimeType.id,
|
||||||
},
|
Validators.required
|
||||||
{ validators: minLessThanOrEqualMaxValidator('minCap', 'maxCap') }
|
],
|
||||||
);
|
chargeCalculationType: [
|
||||||
|
this.chargeData.chargeCalculationType.id,
|
||||||
|
Validators.required
|
||||||
|
]
|
||||||
|
});
|
||||||
switch (this.chargeData.chargeAppliesTo.value) {
|
switch (this.chargeData.chargeAppliesTo.value) {
|
||||||
case 'Loan': {
|
case 'Loan': {
|
||||||
this.chargeTimeTypeOptions = this.chargeData.loanChargeTimeTypeOptions;
|
this.chargeTimeTypeOptions = this.chargeData.loanChargeTimeTypeOptions;
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
import { AbstractControl, ValidatorFn } from '@angular/forms';
|
||||||
|
|
||||||
|
export function maxNumberValueValidator(maxControlName: string): ValidatorFn {
|
||||||
|
return (control: AbstractControl): { [key: string]: any } | null => {
|
||||||
|
const maxControl = control.parent?.get(maxControlName);
|
||||||
|
if (!maxControl || !control.value) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
let maxValue = maxControl.value;
|
||||||
|
if (typeof maxValue === 'undefined') {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (typeof maxValue !== 'number') {
|
||||||
|
maxValue = maxValue * 1;
|
||||||
|
}
|
||||||
|
let controlValue = control.value;
|
||||||
|
if (typeof controlValue !== 'number') {
|
||||||
|
controlValue = controlValue * 1;
|
||||||
|
}
|
||||||
|
if (controlValue > maxValue) {
|
||||||
|
return { maxValue: { requiredMax: maxValue, actual: controlValue } };
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
import { AbstractControl, ValidatorFn } from '@angular/forms';
|
||||||
|
|
||||||
|
export function minNumberValueValidator(minControlName: string): ValidatorFn {
|
||||||
|
return (control: AbstractControl): { [key: string]: any } | null => {
|
||||||
|
const minControl = control.parent?.get(minControlName);
|
||||||
|
if (!minControl || !control.value) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
let minValue = minControl.value;
|
||||||
|
if (typeof minValue === 'undefined') {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (typeof minValue !== 'number') {
|
||||||
|
minValue = minValue * 1;
|
||||||
|
}
|
||||||
|
let controlValue = control.value;
|
||||||
|
if (typeof controlValue !== 'number') {
|
||||||
|
controlValue = controlValue * 1;
|
||||||
|
}
|
||||||
|
if (controlValue < minValue) {
|
||||||
|
return { minValue: { requiredMin: minValue, actual: controlValue } };
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -808,6 +808,7 @@
|
|||||||
"Add Role": "Přidat roli",
|
"Add Role": "Přidat roli",
|
||||||
"Add/Edit Currency": "Přidat/upravit měnu",
|
"Add/Edit Currency": "Přidat/upravit měnu",
|
||||||
"Address": "Adresa",
|
"Address": "Adresa",
|
||||||
|
"Adjustment Capitalized Income Transaction": "Úprava Transakce s kapitalizovaným příjmem",
|
||||||
"Advanced Accounting Rules": "Pokročilá účetní pravidla",
|
"Advanced Accounting Rules": "Pokročilá účetní pravidla",
|
||||||
"All Charges": "Všechny poplatky",
|
"All Charges": "Všechny poplatky",
|
||||||
"All Dividends": "Všechny dividendy",
|
"All Dividends": "Všechny dividendy",
|
||||||
@@ -2502,6 +2503,7 @@
|
|||||||
"Breadcrumbs": "Strouhanka",
|
"Breadcrumbs": "Strouhanka",
|
||||||
"Calculate Interest": "Vypočítejte úrok",
|
"Calculate Interest": "Vypočítejte úrok",
|
||||||
"Capitalized Income": "Kapitalizovaný příjem",
|
"Capitalized Income": "Kapitalizovaný příjem",
|
||||||
|
"Capitalized Income Adjustment": "Úprava kapitalizovaného příjmu",
|
||||||
"Centers": "Střediska",
|
"Centers": "Střediska",
|
||||||
"Charge-Off": "Charge-Off",
|
"Charge-Off": "Charge-Off",
|
||||||
"Chart of Accounts": "Graf účtů",
|
"Chart of Accounts": "Graf účtů",
|
||||||
|
|||||||
@@ -809,6 +809,7 @@
|
|||||||
"Add Role": "Rolle hinzufügen",
|
"Add Role": "Rolle hinzufügen",
|
||||||
"Add/Edit Currency": "Währung hinzufügen/bearbeiten",
|
"Add/Edit Currency": "Währung hinzufügen/bearbeiten",
|
||||||
"Address": "Adresse",
|
"Address": "Adresse",
|
||||||
|
"Adjustment Capitalized Income Transaction": "Anpassung der kapitalisierten Einkommenstransaktion",
|
||||||
"Advanced Accounting Rules": "Erweiterte Buchhaltungsregeln",
|
"Advanced Accounting Rules": "Erweiterte Buchhaltungsregeln",
|
||||||
"All Charges": "Alle Anklagen",
|
"All Charges": "Alle Anklagen",
|
||||||
"All Dividends": "Alle Dividenden",
|
"All Dividends": "Alle Dividenden",
|
||||||
@@ -2502,6 +2503,7 @@
|
|||||||
"Breadcrumbs": "Semmelbrösel",
|
"Breadcrumbs": "Semmelbrösel",
|
||||||
"Calculate Interest": "Zinsen berechnen",
|
"Calculate Interest": "Zinsen berechnen",
|
||||||
"Capitalized Income": "Kapitalisiertes Einkommen",
|
"Capitalized Income": "Kapitalisiertes Einkommen",
|
||||||
|
"Capitalized Income Adjustment": "Anpassung des kapitalisierten Einkommens",
|
||||||
"Centers": "Zentren",
|
"Centers": "Zentren",
|
||||||
"Charge-Off": "Abladen",
|
"Charge-Off": "Abladen",
|
||||||
"Chart of Accounts": "Kontenplan",
|
"Chart of Accounts": "Kontenplan",
|
||||||
|
|||||||
@@ -814,6 +814,7 @@
|
|||||||
"Add Role": "Add Role",
|
"Add Role": "Add Role",
|
||||||
"Add/Edit Currency": "Add/Edit Currency",
|
"Add/Edit Currency": "Add/Edit Currency",
|
||||||
"Address": "Address",
|
"Address": "Address",
|
||||||
|
"Adjustment Capitalized Income Transaction": "Adjustment Capitalized Income Transaction",
|
||||||
"Advanced Accounting Rules": "Advanced Accounting Rules",
|
"Advanced Accounting Rules": "Advanced Accounting Rules",
|
||||||
"All Charges": "All Charges",
|
"All Charges": "All Charges",
|
||||||
"All Dividends": "All Dividends",
|
"All Dividends": "All Dividends",
|
||||||
@@ -2509,6 +2510,7 @@
|
|||||||
"Breadcrumbs": "Breadcrumbs",
|
"Breadcrumbs": "Breadcrumbs",
|
||||||
"Calculate Interest": "Calculate Interest",
|
"Calculate Interest": "Calculate Interest",
|
||||||
"Capitalized Income": "Capitalized Income",
|
"Capitalized Income": "Capitalized Income",
|
||||||
|
"Capitalized Income Adjustment": "Capitalized Income Adjustment",
|
||||||
"Centers": "Centers",
|
"Centers": "Centers",
|
||||||
"Charge-Off": "Charge-Off",
|
"Charge-Off": "Charge-Off",
|
||||||
"Chart of Accounts": "Chart of Accounts",
|
"Chart of Accounts": "Chart of Accounts",
|
||||||
|
|||||||
@@ -808,6 +808,7 @@
|
|||||||
"Add Role": "Agregar rol",
|
"Add Role": "Agregar rol",
|
||||||
"Add/Edit Currency": "Agregar/Editar moneda",
|
"Add/Edit Currency": "Agregar/Editar moneda",
|
||||||
"Address": "Domicilio",
|
"Address": "Domicilio",
|
||||||
|
"Adjustment Capitalized Income Transaction": "Ajuste de Transacción de Ingreso Capitalizado",
|
||||||
"Advanced Accounting Rules": "Reglas de contabilidad avanzadas",
|
"Advanced Accounting Rules": "Reglas de contabilidad avanzadas",
|
||||||
"All Charges": "Todos los cargos",
|
"All Charges": "Todos los cargos",
|
||||||
"All Dividends": "Todos los dividendos",
|
"All Dividends": "Todos los dividendos",
|
||||||
@@ -2502,6 +2503,7 @@
|
|||||||
"Breadcrumbs": "Migas de pan",
|
"Breadcrumbs": "Migas de pan",
|
||||||
"Calculate Interest": "Calcular interés",
|
"Calculate Interest": "Calcular interés",
|
||||||
"Capitalized Income": "Ingreso capitalizado",
|
"Capitalized Income": "Ingreso capitalizado",
|
||||||
|
"Capitalized Income Adjustment": "Ajuste de ingresos capitalizados",
|
||||||
"Centers": "Centros",
|
"Centers": "Centros",
|
||||||
"Charge-Off": "Cancelación",
|
"Charge-Off": "Cancelación",
|
||||||
"Chart of Accounts": "Catálogo de cuentas",
|
"Chart of Accounts": "Catálogo de cuentas",
|
||||||
|
|||||||
@@ -808,6 +808,7 @@
|
|||||||
"Add Role": "Agregar rol",
|
"Add Role": "Agregar rol",
|
||||||
"Add/Edit Currency": "Agregar/Editar moneda",
|
"Add/Edit Currency": "Agregar/Editar moneda",
|
||||||
"Address": "Domicilio",
|
"Address": "Domicilio",
|
||||||
|
"Adjustment Capitalized Income Transaction": "Ajuste Transacción de Ingreso Capitalizado",
|
||||||
"Advanced Accounting Rules": "Reglas de contabilidad avanzadas",
|
"Advanced Accounting Rules": "Reglas de contabilidad avanzadas",
|
||||||
"All Charges": "Todos los cargos",
|
"All Charges": "Todos los cargos",
|
||||||
"All Dividends": "Todos los dividendos",
|
"All Dividends": "Todos los dividendos",
|
||||||
@@ -2502,6 +2503,7 @@
|
|||||||
"Breadcrumbs": "Migas de pan",
|
"Breadcrumbs": "Migas de pan",
|
||||||
"Calculate Interest": "Calcular interés",
|
"Calculate Interest": "Calcular interés",
|
||||||
"Capitalized Income": "Ingreso capitalizado",
|
"Capitalized Income": "Ingreso capitalizado",
|
||||||
|
"Capitalized Income Adjustment": "Ajuste de ingresos capitalizados",
|
||||||
"Centers": "Centros",
|
"Centers": "Centros",
|
||||||
"Charge-Off": "Cancelación",
|
"Charge-Off": "Cancelación",
|
||||||
"Chart of Accounts": "Catálogo de cuentas",
|
"Chart of Accounts": "Catálogo de cuentas",
|
||||||
|
|||||||
@@ -809,6 +809,7 @@
|
|||||||
"Add Role": "Ajouter un rôle",
|
"Add Role": "Ajouter un rôle",
|
||||||
"Add/Edit Currency": "Ajouter/Modifier une devise",
|
"Add/Edit Currency": "Ajouter/Modifier une devise",
|
||||||
"Address": "Adresse",
|
"Address": "Adresse",
|
||||||
|
"Adjustment Capitalized Income Transaction": "Transaction de revenu capitalisé d’ajustement",
|
||||||
"Advanced Accounting Rules": "Règles comptables avancées",
|
"Advanced Accounting Rules": "Règles comptables avancées",
|
||||||
"All Charges": "Tous les frais",
|
"All Charges": "Tous les frais",
|
||||||
"All Dividends": "Tous les dividendes",
|
"All Dividends": "Tous les dividendes",
|
||||||
@@ -2502,6 +2503,7 @@
|
|||||||
"Breadcrumbs": "Chapelure",
|
"Breadcrumbs": "Chapelure",
|
||||||
"Calculate Interest": "Calculer les intérêts",
|
"Calculate Interest": "Calculer les intérêts",
|
||||||
"Capitalized Income": "Revenu capitalisé",
|
"Capitalized Income": "Revenu capitalisé",
|
||||||
|
"Capitalized Income Adjustment": "Ajustement du revenu capitalisé",
|
||||||
"Centers": "Centres",
|
"Centers": "Centres",
|
||||||
"Charge-Off": "Amortir",
|
"Charge-Off": "Amortir",
|
||||||
"Chart of Accounts": "Plan comptable",
|
"Chart of Accounts": "Plan comptable",
|
||||||
|
|||||||
@@ -809,6 +809,7 @@
|
|||||||
"Add Role": "Aggiungi ruolo",
|
"Add Role": "Aggiungi ruolo",
|
||||||
"Add/Edit Currency": "Aggiungi/modifica valuta",
|
"Add/Edit Currency": "Aggiungi/modifica valuta",
|
||||||
"Address": "Indirizzo",
|
"Address": "Indirizzo",
|
||||||
|
"Adjustment Capitalized Income Transaction": "Operazione di reddito capitalizzato di aggiustamento",
|
||||||
"Advanced Accounting Rules": "Regole contabili avanzate",
|
"Advanced Accounting Rules": "Regole contabili avanzate",
|
||||||
"All Charges": "Tutte le spese",
|
"All Charges": "Tutte le spese",
|
||||||
"All Dividends": "Tutti i dividendi",
|
"All Dividends": "Tutti i dividendi",
|
||||||
@@ -2502,6 +2503,7 @@
|
|||||||
"Breadcrumbs": "Briciole di pane",
|
"Breadcrumbs": "Briciole di pane",
|
||||||
"Calculate Interest": "Calcola gli interessi",
|
"Calculate Interest": "Calcola gli interessi",
|
||||||
"Capitalized Income": "Reddito capitalizzato",
|
"Capitalized Income": "Reddito capitalizzato",
|
||||||
|
"Capitalized Income Adjustment": "Adeguamento del reddito capitalizzato",
|
||||||
"Centers": "Centri",
|
"Centers": "Centri",
|
||||||
"Charge-Off": "Addebito",
|
"Charge-Off": "Addebito",
|
||||||
"Chart of Accounts": "Piano dei conti",
|
"Chart of Accounts": "Piano dei conti",
|
||||||
|
|||||||
@@ -809,6 +809,7 @@
|
|||||||
"Add Role": "역할 추가",
|
"Add Role": "역할 추가",
|
||||||
"Add/Edit Currency": "통화 추가/수정",
|
"Add/Edit Currency": "통화 추가/수정",
|
||||||
"Address": "주소",
|
"Address": "주소",
|
||||||
|
"Adjustment Capitalized Income Transaction": "조정 자본화 소득 거래",
|
||||||
"Advanced Accounting Rules": "고급 회계 규칙",
|
"Advanced Accounting Rules": "고급 회계 규칙",
|
||||||
"All Charges": "모든 요금",
|
"All Charges": "모든 요금",
|
||||||
"All Dividends": "모든 배당금",
|
"All Dividends": "모든 배당금",
|
||||||
@@ -2503,6 +2504,7 @@
|
|||||||
"Breadcrumbs": "빵 부스러기",
|
"Breadcrumbs": "빵 부스러기",
|
||||||
"Calculate Interest": "이자 계산",
|
"Calculate Interest": "이자 계산",
|
||||||
"Capitalized Income": "자본화 소득",
|
"Capitalized Income": "자본화 소득",
|
||||||
|
"Capitalized Income Adjustment": "자본화 소득 조정",
|
||||||
"Centers": "센터",
|
"Centers": "센터",
|
||||||
"Charge-Off": "상각",
|
"Charge-Off": "상각",
|
||||||
"Chart of Accounts": "계정 목록",
|
"Chart of Accounts": "계정 목록",
|
||||||
|
|||||||
@@ -809,6 +809,7 @@
|
|||||||
"Add Role": "Pridėti vaidmenį",
|
"Add Role": "Pridėti vaidmenį",
|
||||||
"Add/Edit Currency": "Pridėti / redaguoti valiutą",
|
"Add/Edit Currency": "Pridėti / redaguoti valiutą",
|
||||||
"Address": "Adresas",
|
"Address": "Adresas",
|
||||||
|
"Adjustment Capitalized Income Transaction": "Koregavimo kapitalizuotų pajamų sandoris",
|
||||||
"Advanced Accounting Rules": "Išplėstinės apskaitos taisyklės",
|
"Advanced Accounting Rules": "Išplėstinės apskaitos taisyklės",
|
||||||
"All Charges": "Visi mokesčiai",
|
"All Charges": "Visi mokesčiai",
|
||||||
"All Dividends": "Visi dividendai",
|
"All Dividends": "Visi dividendai",
|
||||||
@@ -2502,6 +2503,7 @@
|
|||||||
"Breadcrumbs": "Duonos trupiniai",
|
"Breadcrumbs": "Duonos trupiniai",
|
||||||
"Calculate Interest": "Apskaičiuokite palūkanas",
|
"Calculate Interest": "Apskaičiuokite palūkanas",
|
||||||
"Capitalized Income": "Kapitalizuotos pajamos",
|
"Capitalized Income": "Kapitalizuotos pajamos",
|
||||||
|
"Capitalized Income Adjustment": "Kapitalizuotų pajamų koregavimas",
|
||||||
"Centers": "Centrai",
|
"Centers": "Centrai",
|
||||||
"Charge-Off": "Atsakingas už",
|
"Charge-Off": "Atsakingas už",
|
||||||
"Chart of Accounts": "Sąskaitų planas",
|
"Chart of Accounts": "Sąskaitų planas",
|
||||||
|
|||||||
@@ -809,6 +809,7 @@
|
|||||||
"Add Role": "Pievienot lomu",
|
"Add Role": "Pievienot lomu",
|
||||||
"Add/Edit Currency": "Pievienot/rediģēt valūtu",
|
"Add/Edit Currency": "Pievienot/rediģēt valūtu",
|
||||||
"Address": "Adrese",
|
"Address": "Adrese",
|
||||||
|
"Adjustment Capitalized Income Transaction": "Korekcija Kapitalizētā ienākuma darījums",
|
||||||
"Advanced Accounting Rules": "Uzlaboti grāmatvedības noteikumi",
|
"Advanced Accounting Rules": "Uzlaboti grāmatvedības noteikumi",
|
||||||
"All Charges": "Visas maksas",
|
"All Charges": "Visas maksas",
|
||||||
"All Dividends": "Visas dividendes",
|
"All Dividends": "Visas dividendes",
|
||||||
@@ -2502,6 +2503,7 @@
|
|||||||
"Breadcrumbs": "Maizes drupačas",
|
"Breadcrumbs": "Maizes drupačas",
|
||||||
"Calculate Interest": "Aprēķināt procentus",
|
"Calculate Interest": "Aprēķināt procentus",
|
||||||
"Capitalized Income": "Kapitalizētie ienākumi",
|
"Capitalized Income": "Kapitalizētie ienākumi",
|
||||||
|
"Capitalized Income Adjustment": "Kapitalizēto ienākumu korekcija",
|
||||||
"Centers": "Centri",
|
"Centers": "Centri",
|
||||||
"Charge-Off": "Charge-Off",
|
"Charge-Off": "Charge-Off",
|
||||||
"Chart of Accounts": "Kontu plāns",
|
"Chart of Accounts": "Kontu plāns",
|
||||||
|
|||||||
@@ -809,6 +809,7 @@
|
|||||||
"Add Role": "भूमिका थप्नुहोस्",
|
"Add Role": "भूमिका थप्नुहोस्",
|
||||||
"Add/Edit Currency": "मुद्रा थप्नुहोस्/सम्पादन गर्नुहोस्",
|
"Add/Edit Currency": "मुद्रा थप्नुहोस्/सम्पादन गर्नुहोस्",
|
||||||
"Address": "ठेगाना",
|
"Address": "ठेगाना",
|
||||||
|
"Adjustment Capitalized Income Transaction": "समायोजन पूंजीकृत आय लेनदेन",
|
||||||
"Advanced Accounting Rules": "उन्नत लेखा नियमहरू",
|
"Advanced Accounting Rules": "उन्नत लेखा नियमहरू",
|
||||||
"All Charges": "सबै शुल्कहरू",
|
"All Charges": "सबै शुल्कहरू",
|
||||||
"All Dividends": "सबै लाभांश",
|
"All Dividends": "सबै लाभांश",
|
||||||
@@ -2502,6 +2503,7 @@
|
|||||||
"Breadcrumbs": "ब्रेडक्रम्ब्स",
|
"Breadcrumbs": "ब्रेडक्रम्ब्स",
|
||||||
"Calculate Interest": "ब्याज गणना गर्नुहोस्",
|
"Calculate Interest": "ब्याज गणना गर्नुहोस्",
|
||||||
"Capitalized Income": "पुँजीगत आय",
|
"Capitalized Income": "पुँजीगत आय",
|
||||||
|
"Capitalized Income Adjustment": "पूंजीकृत आय समायोजन",
|
||||||
"Centers": "केन्द्रहरू",
|
"Centers": "केन्द्रहरू",
|
||||||
"Charge-Off": "चार्ज-अफ",
|
"Charge-Off": "चार्ज-अफ",
|
||||||
"Chart of Accounts": "लेखाको चार्ट",
|
"Chart of Accounts": "लेखाको चार्ट",
|
||||||
|
|||||||
@@ -809,6 +809,7 @@
|
|||||||
"Add Role": "Adicionar função",
|
"Add Role": "Adicionar função",
|
||||||
"Add/Edit Currency": "Adicionar/editar moeda",
|
"Add/Edit Currency": "Adicionar/editar moeda",
|
||||||
"Address": "Endereço",
|
"Address": "Endereço",
|
||||||
|
"Adjustment Capitalized Income Transaction": "Transação de Renda Capitalizada de Ajuste",
|
||||||
"Advanced Accounting Rules": "Regras de contabilidade avançada",
|
"Advanced Accounting Rules": "Regras de contabilidade avançada",
|
||||||
"All Charges": "Todas as cobranças",
|
"All Charges": "Todas as cobranças",
|
||||||
"All Dividends": "Todos os dividendos",
|
"All Dividends": "Todos os dividendos",
|
||||||
@@ -2502,6 +2503,7 @@
|
|||||||
"Breadcrumbs": "Migalhas de pão",
|
"Breadcrumbs": "Migalhas de pão",
|
||||||
"Calculate Interest": "Calcular juros",
|
"Calculate Interest": "Calcular juros",
|
||||||
"Capitalized Income": "Renda Capitalizada",
|
"Capitalized Income": "Renda Capitalizada",
|
||||||
|
"Capitalized Income Adjustment": "Ajuste de Renda Capitalizada",
|
||||||
"Centers": "Centros",
|
"Centers": "Centros",
|
||||||
"Charge-Off": "Cobrança",
|
"Charge-Off": "Cobrança",
|
||||||
"Chart of Accounts": "Plano de contas",
|
"Chart of Accounts": "Plano de contas",
|
||||||
|
|||||||
@@ -809,6 +809,7 @@
|
|||||||
"Add Role": "Ongeza Jukumu",
|
"Add Role": "Ongeza Jukumu",
|
||||||
"Add/Edit Currency": "Ongeza/Hariri Sarafu",
|
"Add/Edit Currency": "Ongeza/Hariri Sarafu",
|
||||||
"Address": "Anwani",
|
"Address": "Anwani",
|
||||||
|
"Adjustment Capitalized Income Transaction": "Marekebisho ya Muamala wa Mapato ya Mtaji",
|
||||||
"Advanced Accounting Rules": "Sheria za Juu za Uhasibu",
|
"Advanced Accounting Rules": "Sheria za Juu za Uhasibu",
|
||||||
"All Charges": "Malipo Yote",
|
"All Charges": "Malipo Yote",
|
||||||
"All Dividends": "Gawio Zote",
|
"All Dividends": "Gawio Zote",
|
||||||
@@ -2502,6 +2503,7 @@
|
|||||||
"Breadcrumbs": "Makombo ya mkate",
|
"Breadcrumbs": "Makombo ya mkate",
|
||||||
"Calculate Interest": "Hesabu Riba",
|
"Calculate Interest": "Hesabu Riba",
|
||||||
"Capitalized Income": "Mapato ya Mtaji",
|
"Capitalized Income": "Mapato ya Mtaji",
|
||||||
|
"Capitalized Income Adjustment": "Marekebisho ya Mapato ya Mtaji",
|
||||||
"Centers": "Vituo",
|
"Centers": "Vituo",
|
||||||
"Charge-Off": "Chaji-Zima",
|
"Charge-Off": "Chaji-Zima",
|
||||||
"Chart of Accounts": "Chati ya Hesabu",
|
"Chart of Accounts": "Chati ya Hesabu",
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
export default {
|
export default {
|
||||||
'mifos_x': {
|
'mifos_x': {
|
||||||
'version': '250403',
|
'version': '250508',
|
||||||
'hash': '66449454'
|
'hash': '3c6b70ad'
|
||||||
},
|
},
|
||||||
'allow_switching_backend_instance': true
|
'allow_switching_backend_instance': true
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user