From 0726e34b80dd64829b536369f0b864054c632b94 Mon Sep 17 00:00:00 2001 From: Jose Alberto Hernandez Date: Tue, 30 Sep 2025 08:06:18 -0500 Subject: [PATCH] WEB-332: Advanced accounting rule can be set for each writeoff reason --- .../transactions-tab.component.ts | 28 ++++++++--- .../models/loan-transaction-type.model.ts | 1 + .../create-collateral.component.ts | 1 - .../loan-product-summary.component.html | 33 +++++++++++-- .../loan-product-summary.component.ts | 31 ++++++++++-- ...anced-accounting-mapping-rule.component.ts | 48 ++++++++++++++++--- ...oan-product-accounting-step.component.html | 11 +++++ .../loan-product-accounting-step.component.ts | 36 ++++++++++++-- .../models/loan-product.model.ts | 2 + src/app/shared/models/general.model.ts | 4 +- src/assets/translations/cs-CS.json | 2 + src/assets/translations/de-DE.json | 2 + src/assets/translations/en-US.json | 2 + src/assets/translations/es-CL.json | 2 + src/assets/translations/es-MX.json | 2 + src/assets/translations/fr-FR.json | 2 + src/assets/translations/it-IT.json | 2 + src/assets/translations/ko-KO.json | 2 + src/assets/translations/lt-LT.json | 2 + src/assets/translations/lv-LV.json | 2 + src/assets/translations/ne-NE.json | 2 + src/assets/translations/pt-PT.json | 2 + src/assets/translations/sw-SW.json | 2 + 23 files changed, 192 insertions(+), 29 deletions(-) diff --git a/src/app/loans/loans-view/transactions-tab/transactions-tab.component.ts b/src/app/loans/loans-view/transactions-tab/transactions-tab.component.ts index 1e37a7769..37cb58037 100644 --- a/src/app/loans/loans-view/transactions-tab/transactions-tab.component.ts +++ b/src/app/loans/loans-view/transactions-tab/transactions-tab.component.ts @@ -189,10 +189,7 @@ export class TransactionsTabComponent implements OnInit { if (hideAccrual || hideReversed) { transactions = this.transactionsData.filter((t: LoanTransaction) => { - return ( - !(hideReversed && t.manuallyReversed) && - !(hideAccrual && (t.type.accrual || t.type.capitalizedIncomeAmortization)) - ); + return !(hideReversed && t.manuallyReversed) && !(hideAccrual && this.isAccrualKindOf(t.type)); }); } this.dataSource = new MatTableDataSource(transactions); @@ -243,10 +240,12 @@ export class TransactionsTabComponent implements OnInit { * REAMORTIZE:30 * INTEREST REFUND:33 * CAPITALIZED INCOME:35 + * CAPITALIZED_INCOME_AMORTIZATION:36 * CAPITALIZED INCOME ADJUSTMENT:37 * CONTRACT_TERMINATION:38 * BUY_DOWN_FEE:40 * BUY_DOWN_FEE_ADJUSTMENT:41 + * BUY_DOWN_FEE_AMORTIZATION:42 */ showTransaction(transactionsData: LoanTransaction): boolean { return [ @@ -266,10 +265,12 @@ export class TransactionsTabComponent implements OnInit { 32, 33, 35, + 36, 37, 38, 40, - 41 + 41, + 42 ].includes(transactionsData.type.id); } @@ -293,7 +294,7 @@ export class TransactionsTabComponent implements OnInit { if (transaction.transactionRelations && transaction.transactionRelations.length > 0) { return 'linked'; } - if (this.isAccrual(transaction.type) || this.isCapitalizedIncomeAmortization(transaction.type)) { + if (this.isAccrualKindOf(transaction.type)) { return 'accrual'; } if (this.isChargeOff(transaction.type)) { @@ -427,6 +428,21 @@ export class TransactionsTabComponent implements OnInit { return transactionType.capitalizedIncome || transactionType.code === 'loanTransactionType.capitalizedIncome'; } + private isBuyDownFeeAmortization(transactionType: LoanTransactionType): boolean { + return ( + transactionType.buyDownFeeAmortizationAdjustment || + transactionType.code === 'loanTransactionType.buyDownFeeAmortizationAdjustment' + ); + } + + private isAccrualKindOf(transactionType: LoanTransactionType): boolean { + return ( + this.isAccrual(transactionType) || + this.isCapitalizedIncomeAmortization(transactionType) || + this.isBuyDownFeeAmortization(transactionType) + ); + } + private isCapitalizedIncomeAmortization(transactionType: LoanTransactionType): boolean { return ( transactionType.capitalizedIncomeAmortization || diff --git a/src/app/loans/models/loan-transaction-type.model.ts b/src/app/loans/models/loan-transaction-type.model.ts index 8be1cdbd4..a72e3ccac 100644 --- a/src/app/loans/models/loan-transaction-type.model.ts +++ b/src/app/loans/models/loan-transaction-type.model.ts @@ -39,4 +39,5 @@ export interface LoanTransactionType { contractTermination: boolean; buyDownFee: boolean; buyDownFeeAdjustment: boolean; + buyDownFeeAmortizationAdjustment: boolean; } diff --git a/src/app/products/collaterals/create-collateral/create-collateral.component.ts b/src/app/products/collaterals/create-collateral/create-collateral.component.ts index 55cfe35a1..beaa9dada 100644 --- a/src/app/products/collaterals/create-collateral/create-collateral.component.ts +++ b/src/app/products/collaterals/create-collateral/create-collateral.component.ts @@ -45,7 +45,6 @@ export class CreateCollateralComponent implements OnInit { ) { this.route.data.subscribe((data: { collateralTemplate: any }) => { this.organizationService.getCurrencies().subscribe((orgCurrencies: any) => { - console.log('Organization currencies response:', orgCurrencies); let orgCurrencyList = Array.isArray(orgCurrencies.selectedCurrencyOptions) ? orgCurrencies.selectedCurrencyOptions : []; diff --git a/src/app/products/loan-products/common/loan-product-summary/loan-product-summary.component.html b/src/app/products/loan-products/common/loan-product-summary/loan-product-summary.component.html index c0ae61e4d..3222ceb89 100644 --- a/src/app/products/loan-products/common/loan-product-summary/loan-product-summary.component.html +++ b/src/app/products/loan-products/common/loan-product-summary/loan-product-summary.component.html @@ -1236,7 +1236,7 @@ {{ 'labels.inputs.Charge-off reason' | translate }} - {{ chargeOffReasonToExpenseAccountMapping.chargeOffReasonCodeValue.name }} + {{ chargeOffReasonToExpenseAccountMapping.reasonCodeValue.name }} @@ -1253,10 +1253,7 @@ -
+

{{ 'labels.heading.Buydown Fee classifications to Income accounts' | translate }}

@@ -1318,6 +1315,32 @@
+ +
+

+ {{ 'labels.heading.WriteOff reasons to Expense accounts' | translate }} +

+ + + + + + + + + + + + + + +
{{ 'labels.inputs.WriteOff Reason' | translate }} + {{ writeOffReasonsToExpenseMapping.reasonCodeValue.name }} + {{ 'labels.inputs.Expense Account' | translate }} + ({{ writeOffReasonsToExpenseMapping.expenseAccount.glCode }}) + {{ writeOffReasonsToExpenseMapping.expenseAccount.name }} +
+
diff --git a/src/app/products/loan-products/common/loan-product-summary/loan-product-summary.component.ts b/src/app/products/loan-products/common/loan-product-summary/loan-product-summary.component.ts index 14e20d492..e189bbdd4 100644 --- a/src/app/products/loan-products/common/loan-product-summary/loan-product-summary.component.ts +++ b/src/app/products/loan-products/common/loan-product-summary/loan-product-summary.component.ts @@ -117,6 +117,7 @@ export class LoanProductSummaryComponent implements OnInit, OnChanges { chargeOffReasonToExpenseAccountMappings: ChargeOffReasonToExpenseAccountMapping[] = []; buydownFeeClassificationToIncomeAccountMappings: ClassificationToIncomeAccountMapping[] = []; capitalizedIncomeClassificationToIncomeAccountMappings: ClassificationToIncomeAccountMapping[] = []; + writeOffReasonsToExpenseMappings: ChargeOffReasonToExpenseAccountMapping[] = []; constructor(private accounting: Accounting) {} @@ -152,6 +153,7 @@ export class LoanProductSummaryComponent implements OnInit, OnChanges { this.loanProduct.buydownFeeClassificationToIncomeAccountMappings || []; this.capitalizedIncomeClassificationToIncomeAccountMappings = this.loanProduct.capitalizedIncomeClassificationToIncomeAccountMappings || []; + this.writeOffReasonsToExpenseMappings = this.loanProduct.writeOffReasonsToExpenseMappings || []; } else { this.accountingMappings = {}; @@ -166,6 +168,7 @@ export class LoanProductSummaryComponent implements OnInit, OnChanges { const assetAndLiabilityAccountData = this.loanProductsTemplate.accountingMappingOptions.assetAndLiabilityAccountOptions || []; const chargeOffReasonOptions: any = this.loanProductsTemplate.chargeOffReasonOptions || []; + const writeOffReasonOptions: any = this.loanProductsTemplate.writeOffReasonOptions || []; const buydownFeeClassificationOptions: any = this.loanProductsTemplate.buydownFeeClassificationOptions || []; const capitalizedIncomeClassificationOptions: any = this.loanProductsTemplate.capitalizedIncomeClassificationOptions || []; @@ -269,7 +272,7 @@ export class LoanProductSummaryComponent implements OnInit, OnChanges { let optionData = this.optionDataLookUp(m.chargeOffReasonCodeValueId, chargeOffReasonOptions); this.chargeOffReasonToExpenseAccountMappings.push({ expenseAccount: this.glAccountLookUp(m.expenseAccountId, expenseAccountData), - chargeOffReasonCodeValue: { + reasonCodeValue: { id: optionData.id, name: optionData.value } as CodeValue @@ -279,8 +282,8 @@ export class LoanProductSummaryComponent implements OnInit, OnChanges { } this.buydownFeeClassificationToIncomeAccountMappings = []; - if (this.loanProduct.buydownFeeClassificationToIncomeAccountMappings?.length > 0) { - this.loanProduct.buydownFeeClassificationToIncomeAccountMappings.forEach((m: any) => { + if (this.loanProduct.buydownfeeClassificationToIncomeAccountMappings?.length > 0) { + this.loanProduct.buydownfeeClassificationToIncomeAccountMappings.forEach((m: any) => { let optionData = this.optionDataLookUp(m.classificationCodeValueId, buydownFeeClassificationOptions); if (optionData !== null) { this.buydownFeeClassificationToIncomeAccountMappings.push({ @@ -293,6 +296,7 @@ export class LoanProductSummaryComponent implements OnInit, OnChanges { } }); } + this.capitalizedIncomeClassificationToIncomeAccountMappings = []; if (this.loanProduct.capitalizedIncomeClassificationToIncomeAccountMappings?.length > 0) { this.loanProduct.capitalizedIncomeClassificationToIncomeAccountMappings.forEach((m: any) => { @@ -308,6 +312,22 @@ export class LoanProductSummaryComponent implements OnInit, OnChanges { } }); } + + this.writeOffReasonsToExpenseMappings = []; + if (this.loanProduct.writeOffReasonsToExpenseMappings?.length > 0) { + this.loanProduct.writeOffReasonsToExpenseMappings.forEach((m: any) => { + let optionData = this.optionDataLookUp(m.writeOffReasonCodeValueId, writeOffReasonOptions); + if (optionData !== null) { + this.writeOffReasonsToExpenseMappings.push({ + expenseAccount: this.glAccountLookUp(m.expenseAccountId, expenseAccountData), + reasonCodeValue: { + id: optionData.id, + name: optionData.value + } as CodeValue + }); + } + }); + } } if (this.loanProduct.isInterestRecalculationEnabled) { @@ -618,8 +638,9 @@ export class LoanProductSummaryComponent implements OnInit, OnChanges { this.loanProduct.feeToIncomeAccountMappings?.length > 0 || this.loanProduct.penaltyToIncomeAccountMappings?.length > 0 || this.loanProduct.chargeOffReasonToExpenseAccountMappings?.length > 0 || - this.loanProduct.buydownFeeClassificationToIncomeAccountMappings?.length > 0 || - this.loanProduct.capitalizedIncomeClassificationToIncomeAccountMappings?.length > 0 + this.loanProduct.buydownfeeClassificationToIncomeAccountMappings?.length > 0 || + this.loanProduct.capitalizedIncomeClassificationToIncomeAccountMappings?.length > 0 || + this.loanProduct.writeOffReasonsToExpenseMappings?.length > 0 ); } diff --git a/src/app/products/loan-products/loan-product-stepper/loan-product-accounting-step/advanced-accounting-mapping-rule/advanced-accounting-mapping-rule.component.ts b/src/app/products/loan-products/loan-product-stepper/loan-product-accounting-step/advanced-accounting-mapping-rule/advanced-accounting-mapping-rule.component.ts index 1b4ed9430..8b225294f 100644 --- a/src/app/products/loan-products/loan-product-stepper/loan-product-accounting-step/advanced-accounting-mapping-rule/advanced-accounting-mapping-rule.component.ts +++ b/src/app/products/loan-products/loan-product-stepper/loan-product-accounting-step/advanced-accounting-mapping-rule/advanced-accounting-mapping-rule.component.ts @@ -96,11 +96,25 @@ export class AdvancedAccountingMappingRuleComponent implements OnInit { const dialogRef = this.dialog.open(FormDialogComponent, { data }); dialogRef.afterClosed().subscribe((response: any) => { if (response.data) { - const addData: AccountingMappingDTO = { - value: this.getValueData(response.data.value.valueId), - glAccount: this.getGlAccountData(response.data.value.glAccountId) - }; - this.tableData.push(addData); + if ([ + 'ChargeOffReasonExpense', + 'WriteOffReasonToExpense' + ].includes(this.formType)) { + const addData: AccountingMappingDTO = { + value: this.getValueData(response.data.value.chargeOffReasonCodeValueId), + glAccount: this.getGlAccountData(response.data.value.expenseAccountId) + }; + this.addTableData(addData); + } else if ([ + 'BuydownFeeClassificationToIncome', + 'CapitalizedIncomeClassificationToIncome' + ].includes(this.formType)) { + const addData: AccountingMappingDTO = { + value: this.getValueData(response.data.value.valueId), + glAccount: this.getGlAccountData(response.data.value.glAccountId) + }; + this.addTableData(addData); + } this.sendParentData(); if (this.formType == 'ChargeOffReasonExpense') { @@ -110,13 +124,21 @@ export class AdvancedAccountingMappingRuleComponent implements OnInit { }); } + addTableData(addedData: AccountingMappingDTO): void { + let newData = [ + ...this.tableData, + addedData + ]; + this.tableData = newData; + } + delete(index: number) { const dialogRef = this.dialog.open(DeleteDialogComponent, { data: { deleteContext: this.translateService.instant('labels.text.this') } }); dialogRef.afterClosed().subscribe((response: any) => { if (response.delete) { - this.tableData.splice(index, 1); + this.tableData = this.tableData.filter((_, i) => i !== index); this.sendParentData(); } }); @@ -159,6 +181,11 @@ export class AdvancedAccountingMappingRuleComponent implements OnInit { title: 'Capitalized Income classifications to Income accounts', formfields: this.getClassificationIncomeFormfields(values) }; + case 'WriteOffReasonToExpense': + return { + title: 'Map Write-off reasons to Expense accounts', + formfields: this.getChargeOffReasonExpenseFormfields(values) + }; } } @@ -290,8 +317,15 @@ export class AdvancedAccountingMappingRuleComponent implements OnInit { } getGlAccountData(valueId: number): any { - return this.incomeAccountData.find((i: any) => { + const glAccountData = [ + this.incomeAccountData, + this.expenseAccountData, + this.assetAccountData, + this.liabilityAccountData + ]; + return glAccountData.find((i: any) => { return i.id === valueId; }); + return null; } } diff --git a/src/app/products/loan-products/loan-product-stepper/loan-product-accounting-step/loan-product-accounting-step.component.html b/src/app/products/loan-products/loan-product-stepper/loan-product-accounting-step/loan-product-accounting-step.component.html index 94095ebb8..0e237c1bb 100644 --- a/src/app/products/loan-products/loan-product-stepper/loan-product-accounting-step/loan-product-accounting-step.component.html +++ b/src/app/products/loan-products/loan-product-stepper/loan-product-accounting-step/loan-product-accounting-step.component.html @@ -536,6 +536,17 @@ [accountingMappingOptions]="capitalizedIncomeClassificationOptions" (formChangeEvent)="formChangeEvent($event)" > + + diff --git a/src/app/products/loan-products/loan-product-stepper/loan-product-accounting-step/loan-product-accounting-step.component.ts b/src/app/products/loan-products/loan-product-stepper/loan-product-accounting-step/loan-product-accounting-step.component.ts index ce02cd832..d05072957 100644 --- a/src/app/products/loan-products/loan-product-stepper/loan-product-accounting-step/loan-product-accounting-step.component.ts +++ b/src/app/products/loan-products/loan-product-stepper/loan-product-accounting-step/loan-product-accounting-step.component.ts @@ -86,6 +86,7 @@ export class LoanProductAccountingStepComponent implements OnInit, OnChanges { chargeOffReasonOptions: any; capitalizedIncomeClassificationOptions: any[] = []; buydownFeeClassificationOptions: any[] = []; + writeOffReasonOptions: any[] = []; currentFormValues: any[] = []; allowAddChargeOffReasonExpense = true; @@ -134,6 +135,7 @@ export class LoanProductAccountingStepComponent implements OnInit, OnChanges { this.capitalizedIncomeClassificationOptions = this.loanProductsTemplate.capitalizedIncomeClassificationOptions || []; this.buydownFeeClassificationOptions = this.loanProductsTemplate.buydownFeeClassificationOptions || []; + this.writeOffReasonOptions = this.loanProductsTemplate.writeOffReasonOptions || []; this.loanProductAccountingForm.patchValue({ accountingRule: this.loanProductsTemplate.accountingRule.id @@ -214,7 +216,8 @@ export class LoanProductAccountingStepComponent implements OnInit, OnChanges { this.loanProductsTemplate.penaltyToIncomeAccountMappings || this.loanProductsTemplate.chargeOffReasonToExpenseAccountMappings || this.loanProductsTemplate.buydownFeeClassificationToIncomeAccountMappings || - this.loanProductsTemplate.capitalizedIncomeClassificationToIncomeAccountMappings + this.loanProductsTemplate.capitalizedIncomeClassificationToIncomeAccountMappings || + this.loanProductsTemplate.writeOffReasonsToExpenseMappings ? true : false }); @@ -251,7 +254,7 @@ export class LoanProductAccountingStepComponent implements OnInit, OnChanges { this.formBuilder.array( (this.loanProductsTemplate.chargeOffReasonToExpenseAccountMappings || []).map( (m: ChargeOffReasonToExpenseAccountMapping) => ({ - chargeOffReasonCodeValueId: m.chargeOffReasonCodeValue.id, + chargeOffReasonCodeValueId: m.reasonCodeValue.id, expenseAccountId: m.expenseAccount.id }) ) @@ -279,6 +282,17 @@ export class LoanProductAccountingStepComponent implements OnInit, OnChanges { ) ) ); + this.loanProductAccountingForm.setControl( + 'writeOffReasonsToExpenseMappings', + this.formBuilder.array( + (this.loanProductsTemplate.writeOffReasonsToExpenseMappings || []).map( + (m: ChargeOffReasonToExpenseAccountMapping) => ({ + value: m.reasonCodeValue, + glAccount: m.expenseAccount + }) + ) + ) + ); } } @@ -384,6 +398,7 @@ export class LoanProductAccountingStepComponent implements OnInit, OnChanges { 'capitalizedIncomeClassificationToIncomeAccountMappings', this.formBuilder.array([]) ); + this.loanProductAccountingForm.addControl('writeOffReasonsToExpenseMappings', this.formBuilder.array([])); } else { this.loanProductAccountingForm.setControl( 'paymentChannelToFundSourceMappings', @@ -403,6 +418,7 @@ export class LoanProductAccountingStepComponent implements OnInit, OnChanges { 'capitalizedIncomeClassificationToIncomeAccountMappings', this.formBuilder.array([]) ); + this.loanProductAccountingForm.setControl('writeOffReasonsToExpenseMappings', this.formBuilder.array([])); } }); } else { @@ -476,6 +492,10 @@ export class LoanProductAccountingStepComponent implements OnInit, OnChanges { ) as UntypedFormArray; } + get writeOffReasonsToExpenseMappings(): UntypedFormArray { + return this.loanProductAccountingForm.get('writeOffReasonsToExpenseMappings') as UntypedFormArray; + } + setLoanProductAccountingFormDirty() { if (this.loanProductAccountingForm.pristine) { this.loanProductAccountingForm.markAsDirty(); @@ -708,7 +728,6 @@ export class LoanProductAccountingStepComponent implements OnInit, OnChanges { })) ) ); - console.log(this.loanProductAccountingForm.value.buydownfeeClassificationToIncomeAccountMappings); } else if (accountingData.formType === 'CapitalizedIncomeClassificationToIncome') { this.loanProductAccountingForm.setControl( 'capitalizedIncomeClassificationToIncomeAccountMappings', @@ -719,7 +738,16 @@ export class LoanProductAccountingStepComponent implements OnInit, OnChanges { })) ) ); - console.log(this.loanProductAccountingForm.value.capitalizedIncomeClassificationToIncomeAccountMappings); + } else if (accountingData.formType === 'WriteOffReasonToExpense') { + this.loanProductAccountingForm.setControl( + 'writeOffReasonsToExpenseMappings', + this.formBuilder.array( + (accountingData.values || []).map((m: AccountingMappingDTO) => ({ + writeOffReasonCodeValueId: m.value.id, + expenseAccountId: m.glAccount.id + })) + ) + ); } this.setLoanProductAccountingFormDirty(); } diff --git a/src/app/products/loan-products/models/loan-product.model.ts b/src/app/products/loan-products/models/loan-product.model.ts index 30f28496f..9ad7c3c83 100644 --- a/src/app/products/loan-products/models/loan-product.model.ts +++ b/src/app/products/loan-products/models/loan-product.model.ts @@ -155,8 +155,10 @@ export interface LoanProduct { enableAccrualActivityPosting?: boolean; supportedInterestRefundTypes?: StringEnumOptionData[]; chargeOffBehaviour?: StringEnumOptionData; + buydownfeeClassificationToIncomeAccountMappings?: ClassificationToIncomeAccountMapping[]; buydownFeeClassificationToIncomeAccountMappings?: ClassificationToIncomeAccountMapping[]; capitalizedIncomeClassificationToIncomeAccountMappings?: ClassificationToIncomeAccountMapping[]; + writeOffReasonsToExpenseMappings?: ChargeOffReasonToExpenseAccountMapping[]; } export interface AllowAttributeOverrides { diff --git a/src/app/shared/models/general.model.ts b/src/app/shared/models/general.model.ts index dea5fdecd..4fb5c5468 100644 --- a/src/app/shared/models/general.model.ts +++ b/src/app/shared/models/general.model.ts @@ -41,8 +41,10 @@ export interface PaymentChannelToFundSourceMapping { export interface ChargeOffReasonToExpenseAccountMapping { chargeOffReasonCodeValueId?: number; + writeOffReasonCodeValueId?: number; expenseAccountId?: number; - chargeOffReasonCodeValue?: CodeValue; + reasonCodeValue?: CodeValue; + writeOffReasonCodeValue?: CodeValue; expenseAccount?: AccountingMapping; } diff --git a/src/assets/translations/cs-CS.json b/src/assets/translations/cs-CS.json index 68849f09a..220266c56 100644 --- a/src/assets/translations/cs-CS.json +++ b/src/assets/translations/cs-CS.json @@ -1154,6 +1154,7 @@ "View Journal Entry": "Zobrazit záznam deníku", "Waive Charge": "Zřeknutí se poplatku", "Welcome to Mifos": "Vítejte v destinaci Mifos", + "WriteOff reasons to Expense accounts": "Odepis důvodů do výdajových účtů", "Withdraw Money From Saving Account": "Výběr peněz ze spořicího účtu", "Withhold Tax": "Srážková daň", "Working Days": "Pracovní dny", @@ -2455,6 +2456,7 @@ "Within Bank": "V rámci banky", "Working Days": "Pracovní dny", "Workflow Jobs": "Workflow Jobs", + "WriteOff Reason": "Důvod odepsání", "Write Off Date": "Datum odepsání", "Write off on": "Odepiš dál", "Write-off": "Odepsat", diff --git a/src/assets/translations/de-DE.json b/src/assets/translations/de-DE.json index 9487a05d3..af24cdeeb 100644 --- a/src/assets/translations/de-DE.json +++ b/src/assets/translations/de-DE.json @@ -1155,6 +1155,7 @@ "View Journal Entry": "Journaleintrag anzeigen", "Waive Charge": "Auf Gebühr verzichten", "Welcome to Mifos": "Willkommen bei Mifos", + "WriteOff reasons to Expense accounts": "Abschreibungsgründe für Aufwandskonten", "Withdraw Money From Saving Account": "Geld vom Sparkonto abheben", "Withhold Tax": "Quellensteuer", "Working Days": "Arbeitstage", @@ -2455,6 +2456,7 @@ "Within Bank": "Innerhalb der Bank", "Working Days": "Arbeitstage", "Workflow Jobs": "Workflow Jobs", + "WriteOff Reason": "Abschreibungsgrund", "Write Off Date": "Abschreibungsdatum", "Write off on": "Abschreiben am", "Write-off": "Abschreiben", diff --git a/src/assets/translations/en-US.json b/src/assets/translations/en-US.json index c86137a8b..e10560041 100644 --- a/src/assets/translations/en-US.json +++ b/src/assets/translations/en-US.json @@ -1159,6 +1159,7 @@ "View Journal Entry": "View Journal Entry", "Waive Charge": "Waive Charge", "Welcome to Mifos": "Welcome to Mifos", + "WriteOff reasons to Expense accounts": "WriteOff reasons to Expense accounts", "Withdraw Money From Saving Account": "Withdraw Money From Saving Account", "Withhold Tax": "Withhold Tax", "Working Days": "Working Days", @@ -2462,6 +2463,7 @@ "Within Bank": "Within Bank", "Working Days": "Working Days", "Workflow Jobs": "Workflow Jobs", + "WriteOff Reason": "WriteOff Reason", "Write Off Date": "Write Off Date", "Write off on": "Write off on", "Write-off": "Write-off", diff --git a/src/assets/translations/es-CL.json b/src/assets/translations/es-CL.json index f31418a7b..964fa081c 100644 --- a/src/assets/translations/es-CL.json +++ b/src/assets/translations/es-CL.json @@ -1154,6 +1154,7 @@ "View Journal Entry": "Ver entrada de diario", "Waive Charge": "Renunciar a Comisión", "Welcome to Mifos": "Bienvenido a Mifos", + "WriteOff reasons to Expense accounts": "Razones de cancelación de cuentas de gastos", "Withdraw Money From Saving Account": "Retirar dinero de una cuenta de ahorro", "Withhold Tax": "Retener el impuesto", "Working Days": "Días laborables", @@ -2455,6 +2456,7 @@ "Within Bank": "Dentro del banco", "Working Days": "Días laborables", "Workflow Jobs": "Flujos de Procesos", + "WriteOff Reason": "Motivo de la cancelación", "Write Off Date": "Fecha de cancelación", "Write off on": "Cancelar en", "Write-off": "Cancelaciones", diff --git a/src/assets/translations/es-MX.json b/src/assets/translations/es-MX.json index 07e93e030..f3adb8b68 100644 --- a/src/assets/translations/es-MX.json +++ b/src/assets/translations/es-MX.json @@ -1154,6 +1154,7 @@ "View Journal Entry": "Ver entrada de diario", "Waive Charge": "Renunciar a Comisión", "Welcome to Mifos": "Bienvenido a Mifos", + "WriteOff reasons to Expense accounts": "Razones de cancelación de cuentas de gastos", "Withdraw Money From Saving Account": "Retirar dinero de una cuenta de ahorro", "Withhold Tax": "Retener el impuesto", "Working Days": "Días laborables", @@ -2455,6 +2456,7 @@ "Within Bank": "Dentro del banco", "Working Days": "Días laborables", "Workflow Jobs": "Flujos de Procesos", + "WriteOff Reason": "Motivo de la cancelación", "Write Off Date": "Fecha de cancelación", "Write off on": "Cancelar en", "Write-off": "Cancelaciones", diff --git a/src/assets/translations/fr-FR.json b/src/assets/translations/fr-FR.json index 6260852e3..5d1069bc6 100644 --- a/src/assets/translations/fr-FR.json +++ b/src/assets/translations/fr-FR.json @@ -1155,6 +1155,7 @@ "View Journal Entry": "Afficher l'écriture de journal", "Waive Charge": "Renoncer aux frais", "Welcome to Mifos": "Bienvenue chez Mifos", + "WriteOff reasons to Expense accounts": "Raisons de radiation des comptes de dépenses", "Withdraw Money From Saving Account": "Retirer de l'argent d'un compte d'épargne", "Withhold Tax": "Retenir l'impôt", "Working Days": "Jours de travail", @@ -2455,6 +2456,7 @@ "Within Bank": "Au sein de la banque", "Working Days": "Jours de travail", "Workflow Jobs": "Tâches de flux de travail", + "WriteOff Reason": "Motif de radiation", "Write Off Date": "Date de radiation", "Write off on": "Radier sur", "Write-off": "Radier", diff --git a/src/assets/translations/it-IT.json b/src/assets/translations/it-IT.json index 40250c4f4..001a86356 100644 --- a/src/assets/translations/it-IT.json +++ b/src/assets/translations/it-IT.json @@ -1155,6 +1155,7 @@ "View Journal Entry": "Visualizza la voce del diario", "Waive Charge": "Rinuncia all'addebito", "Welcome to Mifos": "Benvenuti in Mifos", + "WriteOff reasons to Expense accounts": "Motivi di cancellazione nei conti spese", "Withdraw Money From Saving Account": "Prelevare denaro dal conto di risparmio", "Withhold Tax": "Trattenuta fiscale", "Working Days": "Giorni lavorativi", @@ -2455,6 +2456,7 @@ "Within Bank": "All'interno della Banca", "Working Days": "Giorni lavorativi", "Workflow Jobs": "Lavori del flusso di lavoro", + "WriteOff Reason": "Motivo della cancellazione", "Write Off Date": "Cancellare la data", "Write off on": "Cancellare", "Write-off": "Cancellare", diff --git a/src/assets/translations/ko-KO.json b/src/assets/translations/ko-KO.json index fa6928362..425c9bb17 100644 --- a/src/assets/translations/ko-KO.json +++ b/src/assets/translations/ko-KO.json @@ -1156,6 +1156,7 @@ "View Journal Entry": "분개 항목 보기", "Waive Charge": "요금 면제", "Welcome to Mifos": "미포스에 오신 것을 환영합니다", + "WriteOff reasons to Expense accounts": "비용 계정에 대한 WriteOff 이유", "Withdraw Money From Saving Account": "저축 계좌에서 돈을 인출하세요", "Withhold Tax": "원천징수세", "Working Days": "일하는 날", @@ -2456,6 +2457,7 @@ "Within Bank": "은행 내", "Working Days": "일하는 날", "Workflow Jobs": "워크플로 작업", + "WriteOff Reason": "상각 사유", "Write Off Date": "상각 날짜", "Write off on": "에 상각", "Write-off": "상각", diff --git a/src/assets/translations/lt-LT.json b/src/assets/translations/lt-LT.json index e63e0aafa..faa654548 100644 --- a/src/assets/translations/lt-LT.json +++ b/src/assets/translations/lt-LT.json @@ -1155,6 +1155,7 @@ "View Journal Entry": "Žiūrėti žurnalo įrašą", "Waive Charge": "Atsisakyti mokesčio", "Welcome to Mifos": "Sveiki atvykę į Mifos", + "WriteOff reasons to Expense accounts": "Išlaidų sąskaitų nurašymo priežastys", "Withdraw Money From Saving Account": "Išimkite pinigus iš taupomosios sąskaitos", "Withhold Tax": "Išskaičiuoti mokestį", "Working Days": "Darbo dienos", @@ -2455,6 +2456,7 @@ "Within Bank": "Banko viduje", "Working Days": "Darbo dienos", "Workflow Jobs": "Darbo eiga Darbai", + "WriteOff Reason": "Nurašymo priežastis", "Write Off Date": "Nurašymo data", "Write off on": "Nurašyti", "Write-off": "Nusirašinėti", diff --git a/src/assets/translations/lv-LV.json b/src/assets/translations/lv-LV.json index b2530952c..221fa7265 100644 --- a/src/assets/translations/lv-LV.json +++ b/src/assets/translations/lv-LV.json @@ -1155,6 +1155,7 @@ "View Journal Entry": "Skatīt žurnāla ierakstu", "Waive Charge": "Atteikties no maksas", "Welcome to Mifos": "Laipni lūdzam Mifos", + "WriteOff reasons to Expense accounts": "Norakstīšanas iemesli izdevumu kontiem", "Withdraw Money From Saving Account": "Izņemiet naudu no krājkonta", "Withhold Tax": "Ieturējuma nodoklis", "Working Days": "Darba dienas", @@ -2455,6 +2456,7 @@ "Within Bank": "Bankas ietvaros", "Working Days": "Darba dienas", "Workflow Jobs": "Darbplūsmas darbi", + "WriteOff Reason": "Norakstīšanas iemesls", "Write Off Date": "Norakstīšanas datums", "Write off on": "Norakstīt tālāk", "Write-off": "Norakstīt", diff --git a/src/assets/translations/ne-NE.json b/src/assets/translations/ne-NE.json index 70a2d434f..897e0c319 100644 --- a/src/assets/translations/ne-NE.json +++ b/src/assets/translations/ne-NE.json @@ -1155,6 +1155,7 @@ "View Journal Entry": "जर्नल प्रविष्टि हेर्नुहोस्", "Waive Charge": "शुल्क छुट", "Welcome to Mifos": "Mifos मा स्वागत छ", + "WriteOff reasons to Expense accounts": "खर्च खाताहरूमा कारणहरू लेख्नुहोस्", "Withdraw Money From Saving Account": "बचत खाताबाट पैसा निकाल्नुहोस्", "Withhold Tax": "कर रोक", "Working Days": "काम गर्ने दिनहरू", @@ -2455,6 +2456,7 @@ "Within Bank": "बैंक भित्र", "Working Days": "काम गर्ने दिनहरू", "Workflow Jobs": "कार्यप्रवाह कार्यहरू", + "WriteOff Reason": "कारण लेख्नुहोस्", "Write Off Date": "बन्द मिति लेख्नुहोस्", "Write off on": "मा लेख्नुहोस्", "Write-off": "राइट-अफ", diff --git a/src/assets/translations/pt-PT.json b/src/assets/translations/pt-PT.json index 2da1a1bda..9508c7a00 100644 --- a/src/assets/translations/pt-PT.json +++ b/src/assets/translations/pt-PT.json @@ -1155,6 +1155,7 @@ "View Journal Entry": "Ver lançamento contábil manual", "Waive Charge": "Isenção de cobrança", "Welcome to Mifos": "Bem-vindo à Mifos", + "WriteOff reasons to Expense accounts": "Motivos de baixa em contas de despesas", "Withdraw Money From Saving Account": "Retirar dinheiro da conta poupança", "Withhold Tax": "Taxa administrativa", "Working Days": "Dias úteis", @@ -2455,6 +2456,7 @@ "Within Bank": "Dentro do banco", "Working Days": "Dias úteis", "Workflow Jobs": "Fluxo de trabalho", + "WriteOff Reason": "Motivo da baixa", "Write Off Date": "Data de baixa", "Write off on": "Anote em", "Write-off": "Eliminar", diff --git a/src/assets/translations/sw-SW.json b/src/assets/translations/sw-SW.json index e6b517ae7..090e1483f 100644 --- a/src/assets/translations/sw-SW.json +++ b/src/assets/translations/sw-SW.json @@ -1154,6 +1154,7 @@ "View Journal Entry": "Tazama Ingizo la Jarida", "Waive Charge": "Kuondoa Malipo", "Welcome to Mifos": "Karibu na Mifos", + "WriteOff reasons to Expense accounts": "Sababu za Kufuta kwa akaunti za Gharama", "Withdraw Money From Saving Account": "Toa Pesa kwenye Akaunti ya Kuokoa", "Withhold Tax": "Kodi ya Kuzuia", "Working Days": "Siku za kazi", @@ -2454,6 +2455,7 @@ "Within Bank": "Ndani ya Benki", "Working Days": "Siku za kazi", "Workflow Jobs": "Kazi za mtiririko wa kazi", + "WriteOff Reason": "Sababu ya Kufuta", "Write Off Date": "Tarehe ya Kuzimwa", "Write off on": "Andika mbali", "Write-off": "Kufuta",