From f52efaef447f629ae99778e193d7b7fade52889d Mon Sep 17 00:00:00 2001 From: Jose Alberto Hernandez Date: Tue, 5 Mar 2024 13:13:12 -0600 Subject: [PATCH] Allow Loan re-amortize transaction --- .../loan-account-actions.component.html | 3 +- .../loan-reamortize.component.html | 26 +++++++++ .../loan-reamortize.component.scss | 3 ++ .../loan-reamortize.component.spec.ts | 23 ++++++++ .../loan-reamortize.component.ts | 45 ++++++++++++++++ .../loans/loans-view/loans-view.component.ts | 53 ++++++++++++++----- .../transactions-tab.component.scss | 3 ++ .../transactions-tab.component.ts | 7 +++ src/app/loans/loans.module.ts | 4 +- .../models/loan-account.model.ts | 1 + src/assets/styles/_colours.scss | 5 +- 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-MX.json | 4 +- 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, 180 insertions(+), 19 deletions(-) create mode 100644 src/app/loans/loans-view/loan-account-actions/loan-reamortize/loan-reamortize.component.html create mode 100644 src/app/loans/loans-view/loan-account-actions/loan-reamortize/loan-reamortize.component.scss create mode 100644 src/app/loans/loans-view/loan-account-actions/loan-reamortize/loan-reamortize.component.spec.ts create mode 100644 src/app/loans/loans-view/loan-account-actions/loan-reamortize/loan-reamortize.component.ts diff --git a/src/app/loans/loans-view/loan-account-actions/loan-account-actions.component.html b/src/app/loans/loans-view/loan-account-actions/loan-account-actions.component.html index 4c7f4755a..8dadb39f0 100644 --- a/src/app/loans/loans-view/loan-account-actions/loan-account-actions.component.html +++ b/src/app/loans/loans-view/loan-account-actions/loan-account-actions.component.html @@ -28,4 +28,5 @@ - \ No newline at end of file + + \ No newline at end of file diff --git a/src/app/loans/loans-view/loan-account-actions/loan-reamortize/loan-reamortize.component.html b/src/app/loans/loans-view/loan-account-actions/loan-reamortize/loan-reamortize.component.html new file mode 100644 index 000000000..0b09cf8cb --- /dev/null +++ b/src/app/loans/loans-view/loan-account-actions/loan-reamortize/loan-reamortize.component.html @@ -0,0 +1,26 @@ +
+ + + +
+ + + +
+ + {{"labels.inputs.External Id" | translate}} + + +
+ + + + + + +
+
+
+
diff --git a/src/app/loans/loans-view/loan-account-actions/loan-reamortize/loan-reamortize.component.scss b/src/app/loans/loans-view/loan-account-actions/loan-reamortize/loan-reamortize.component.scss new file mode 100644 index 000000000..1915ad6d3 --- /dev/null +++ b/src/app/loans/loans-view/loan-account-actions/loan-reamortize/loan-reamortize.component.scss @@ -0,0 +1,3 @@ +.container { + max-width: 37rem; +} diff --git a/src/app/loans/loans-view/loan-account-actions/loan-reamortize/loan-reamortize.component.spec.ts b/src/app/loans/loans-view/loan-account-actions/loan-reamortize/loan-reamortize.component.spec.ts new file mode 100644 index 000000000..a30e38ca9 --- /dev/null +++ b/src/app/loans/loans-view/loan-account-actions/loan-reamortize/loan-reamortize.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { LoanReamortizeComponent } from './loan-reamortize.component'; + +describe('LoanReamortizeComponent', () => { + let component: LoanReamortizeComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ LoanReamortizeComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(LoanReamortizeComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/loans/loans-view/loan-account-actions/loan-reamortize/loan-reamortize.component.ts b/src/app/loans/loans-view/loan-account-actions/loan-reamortize/loan-reamortize.component.ts new file mode 100644 index 000000000..58d3453ae --- /dev/null +++ b/src/app/loans/loans-view/loan-account-actions/loan-reamortize/loan-reamortize.component.ts @@ -0,0 +1,45 @@ +import { Component, Input, OnInit } from '@angular/core'; +import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { LoansService } from 'app/loans/loans.service'; + +@Component({ + selector: 'mifosx-loan-reamortize', + templateUrl: './loan-reamortize.component.html', + styleUrls: ['./loan-reamortize.component.scss'] +}) +export class LoanReamortizeComponent implements OnInit { + @Input() dataObject: any; + /** Loan Id */ + loanId: string; + /** ReAmortize Loan Form */ + reamortizeLoanForm: UntypedFormGroup; + + constructor(private formBuilder: UntypedFormBuilder, + private route: ActivatedRoute, + private router: Router, + private loanService: LoansService) { + this.loanId = this.route.snapshot.params['loanId']; + } + + ngOnInit(): void { + this.createReAmortizeLoanForm(); + } + + createReAmortizeLoanForm() { + this.reamortizeLoanForm = this.formBuilder.group({ + 'externalId': '' + }); + } + + submit(): void { + const data = this.reamortizeLoanForm.value; + this.loanService.submitLoanActionButton(this.loanId, data, 'reAmortize') + .subscribe((response: any) => { + this.router.navigate(['../../transactions'], { relativeTo: this.route }); + }); + } + + + +} diff --git a/src/app/loans/loans-view/loans-view.component.ts b/src/app/loans/loans-view/loans-view.component.ts index 2d091bc86..f78972ab4 100644 --- a/src/app/loans/loans-view/loans-view.component.ts +++ b/src/app/loans/loans-view/loans-view.component.ts @@ -49,6 +49,7 @@ export class LoansViewComponent implements OnInit { loanStatus: LoanStatus; currency: Currency; loanReAged = false; + loanReAmortized = false; constructor(private route: ActivatedRoute, private router: Router, @@ -61,11 +62,17 @@ export class LoansViewComponent implements OnInit { this.loanDisplayArrearsDelinquency = data.loanArrearsDelinquencyConfig.value || 0; this.loanStatus = this.loanDetailsData.status; this.currency = this.loanDetailsData.currency; - this.loanDetailsData.transactions.some((lt: LoanTransaction) => { - if (lt.type.reAge) { - this.loanReAged = true; - } - }); + if (this.loanStatus.active) { + this.loanDetailsData.transactions.forEach((lt: LoanTransaction) => { + if (!lt.manuallyReversed) { + if (lt.type.reAge) { + this.loanReAged = true; + } else if (lt.type.reAmortize) { + this.loanReAmortized = true; + } + } + }); + } }); this.loanId = this.route.snapshot.params['loanId']; this.clientId = this.loanDetailsData.clientId; @@ -74,7 +81,7 @@ export class LoansViewComponent implements OnInit { ngOnInit() { this.recalculateInterest = this.loanDetailsData.recalculateInterest || true; this.status = this.loanDetailsData.status.value; - if (this.loanDetailsData.status.active && this.loanDetailsData.multiDisburseLoan) { + if (this.loanStatus.active && this.loanDetailsData.multiDisburseLoan) { if (this.loanDetailsData && this.loanDetailsData.transactions) { this.loanDetailsData.transactions.forEach((transaction: any) => { if (transaction.type.disbursement) { @@ -185,11 +192,25 @@ export class LoansViewComponent implements OnInit { taskPermissionName: 'UNDO_REAGE_LOAN', }); } + + if (!this.loanReAmortized) { + this.buttonConfig.addButton({ + name: 'Re-Amortize', + icon: 'calendar-alt', + taskPermissionName: 'REAMORTIZE_LOAN', + }); + } else { + this.buttonConfig.addButton({ + name: 'Undo Re-Amortize', + icon: 'undo', + taskPermissionName: 'UNDO_REAMORTIZE_LOAN', + }); + } } } - loanAction(button: string) { - switch (button) { + loanAction(actionName: string) { + switch (actionName) { case 'Recover From Guarantor': this.recoverFromGuarantor(); break; @@ -204,10 +225,11 @@ export class LoansViewComponent implements OnInit { this.router.navigate(['transfer-funds/make-account-transfer'], { relativeTo: this.route, queryParams: queryParams }); break; case 'Undo Re-Age': - this.undoReAge(); + case 'Undo Re-Amortize': + this.undoReAgeOrReAmortize(actionName); break; default: - this.router.navigate(['actions', button], { relativeTo: this.route }); + this.router.navigate(['actions', actionName], { relativeTo: this.route }); break; } } @@ -239,15 +261,18 @@ export class LoansViewComponent implements OnInit { } } - undoReAge(): void { + undoReAgeOrReAmortize(actionName: string): void { + actionName = actionName.replace('Undo ', ''); const undoTransactionAccountDialogRef = this.dialog.open(ConfirmationDialogComponent, { - data: { heading: this.translateService.instant('labels.heading.Undo Transaction'), - dialogContext: this.translateService.instant('labels.dialogContext.Are you sure you want undo the transaction type') + ' ReAge' + data: { + heading: this.translateService.instant('labels.heading.Undo Transaction'), + dialogContext: this.translateService.instant('labels.dialogContext.Are you sure you want undo the transaction type') + ' ' + this.translateService.instant('labels.menus.' + actionName) } }); undoTransactionAccountDialogRef.afterClosed().subscribe((response: any) => { if (response.confirm) { - this.loansService.executeLoansAccountTransactionsCommand(String(this.loanId), 'undoReAge', {}).subscribe(() => { + const undoCommand = actionName === 'Re-Age' ? 'undoReAge' : 'undoReAmortize'; + this.loansService.executeLoansAccountTransactionsCommand(String(this.loanId), undoCommand, {}).subscribe(() => { this.reload(); }); } diff --git a/src/app/loans/loans-view/transactions-tab/transactions-tab.component.scss b/src/app/loans/loans-view/transactions-tab/transactions-tab.component.scss index c78999119..90d04fa14 100644 --- a/src/app/loans/loans-view/transactions-tab/transactions-tab.component.scss +++ b/src/app/loans/loans-view/transactions-tab/transactions-tab.component.scss @@ -41,6 +41,9 @@ .reage { color: $status-reage; } + .reamortize { + color: $status-reamortize; + } } } 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 35f8b794a..1d5e89d9d 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 @@ -145,6 +145,9 @@ export class TransactionsTabComponent implements OnInit { if (this.isReAge(transaction.type)) { return 'reage'; } + if (this.isReAmortize(transaction.type)) { + return 'reamortize'; + } return ''; } @@ -216,6 +219,10 @@ export class TransactionsTabComponent implements OnInit { return (transactionType.code === 'loanTransactionType.reAge'); } + private isReAmortize(transactionType: any): boolean { + return (transactionType.code === 'loanTransactionType.reAmortize'); + } + private reload() { const clientId = this.route.parent.parent.snapshot.params['clientId']; const loanId = this.route.parent.parent.snapshot.params['loanId']; diff --git a/src/app/loans/loans.module.ts b/src/app/loans/loans.module.ts index d13a269f9..314b41ba1 100644 --- a/src/app/loans/loans.module.ts +++ b/src/app/loans/loans.module.ts @@ -81,6 +81,7 @@ import { ExternalAssetTransferComponent } from './loans-view/external-asset-owne import { TranslateModule } from '@ngx-translate/core'; import { LoanDelinquencyActionDialogComponent } from './custom-dialog/loan-delinquency-action-dialog/loan-delinquency-action-dialog.component'; import { LoanReagingComponent } from './loans-view/loan-account-actions/loan-reaging/loan-reaging.component'; +import { LoanReamortizeComponent } from './loans-view/loan-account-actions/loan-reamortize/loan-reamortize.component'; /** * Loans Module @@ -165,7 +166,8 @@ import { LoanReagingComponent } from './loans-view/loan-account-actions/loan-rea ExternalAssetOwnerTabComponent, ExternalAssetTransferComponent, LoanDelinquencyActionDialogComponent, - LoanReagingComponent + LoanReagingComponent, + LoanReamortizeComponent ], providers: [ ], }) diff --git a/src/app/products/loan-products/models/loan-account.model.ts b/src/app/products/loan-products/models/loan-account.model.ts index 5393d1774..cc12a89d1 100644 --- a/src/app/products/loan-products/models/loan-account.model.ts +++ b/src/app/products/loan-products/models/loan-account.model.ts @@ -56,4 +56,5 @@ export interface LoanTransactionType { chargeoff: boolean; downPayment: boolean; reAge: boolean; + reAmortize: boolean; } diff --git a/src/assets/styles/_colours.scss b/src/assets/styles/_colours.scss index 84b4070f0..c085bfa23 100644 --- a/src/assets/styles/_colours.scss +++ b/src/assets/styles/_colours.scss @@ -67,14 +67,15 @@ $status-active: #00ce00; $status-inactive: #666f73; $status-deleted: #000000; $status-pending: #ffa500; -$status-approved: #0f36e4; +$status-approved: #4461e2; $status-chargeoff: #f39c12; $status-overpaid: #800080; $status-downpayment: #16a085; $status-reage: #e08e0b; +$status-reamortize: #4461e2; $status-active-overdue: #ff0000; $status-matured: #ff4000; -$state-done: #00ce00; +$state-done: #2af72a; $status-transfer-progress:#FF4000; $status-transfer-hold:#DF0101; diff --git a/src/assets/translations/cs-CS.json b/src/assets/translations/cs-CS.json index 6ebfbc24f..82bec39af 100644 --- a/src/assets/translations/cs-CS.json +++ b/src/assets/translations/cs-CS.json @@ -2146,6 +2146,7 @@ "Products": "produkty", "Profile": "Profil", "Re-Age": "Stárnutí", + "Re-Amortize": "Amortizovat", "Recover From Guarantor": "Vymáhání od ručitele", "Recovery Payment": "Platba obnovy", "Reject": "Odmítnout", @@ -2168,6 +2169,7 @@ "Undo Approval": "Zrušit schválení", "Undo Disbursal": "Zrušit výplatu", "Undo Re-Age": "Zrušit Stárnutí", + "Undo Re-Amortize": "Zrušit Amortizovat", "User Management": "správa uživatelů", "User Panel": "Uživatelský panel", "Users": "Uživatelé", diff --git a/src/assets/translations/de-DE.json b/src/assets/translations/de-DE.json index 4769d3369..f545df979 100644 --- a/src/assets/translations/de-DE.json +++ b/src/assets/translations/de-DE.json @@ -2146,6 +2146,7 @@ "Products": "Produkte", "Profile": "Profil", "Re-Age": "Altern", + "Re-Amortize": "Amortisieren", "Recover From Guarantor": "Rückforderung vom Bürgen", "Recovery Payment": "Wiederherstellungszahlung", "Reject": "Ablehnen", @@ -2168,6 +2169,7 @@ "Undo Approval": "Genehmigung rückgängig machen", "Undo Disbursal": "Auszahlung rückgängig machen", "Undo Re-Age": "Altern rückgängig machen", + "Undo Re-Amortize": "Amortisieren rückgängig machen", "User Management": "Benutzerverwaltung", "User Panel": "Benutzerbereich", "Users": "Benutzer", diff --git a/src/assets/translations/en-US.json b/src/assets/translations/en-US.json index e1bc7b66d..dda69d777 100644 --- a/src/assets/translations/en-US.json +++ b/src/assets/translations/en-US.json @@ -2145,6 +2145,7 @@ "Products": "Products", "Profile": "Profile", "Re-Age": "Re-Age", + "Re-Amortize": "Re-Amortize", "Recover From Guarantor": "Recover From Guarantor", "Recovery Payment": "Recovery Payment", "Reject": "Reject", @@ -2167,6 +2168,7 @@ "Undo Approval": "Undo Approval", "Undo Disbursal": "Undo Disbursal", "Undo Re-Age": "Undo Re-Age", + "Undo Re-Amortize": "Undo Re-Amortize", "User Management": "User Management", "User Panel": "User Panel", "Users": "Users", diff --git a/src/assets/translations/es-MX.json b/src/assets/translations/es-MX.json index 946fd5d89..db0143eec 100644 --- a/src/assets/translations/es-MX.json +++ b/src/assets/translations/es-MX.json @@ -2145,7 +2145,8 @@ "Prepay Loan": "Prepagar crédito", "Products": "Productos", "Profile": "Perfil", - "Re-Age": "Envejecimiento", + "Re-Age": "Re-Envejecer", + "Re-Amortize": "Re-Amortizar", "Recover From Guarantor": "Recuperar del Garante", "Recovery Payment": "Pago de recuperación", "Reject": "Rechazar", @@ -2168,6 +2169,7 @@ "Undo Approval": "Deshacer aprobación", "Undo Disbursal": "Deshacer desembolso", "Undo Re-Age": "Deshacer Envejecimiento", + "Undo Re-Amortize": "Deshacer Amortizar", "User Management": "Gestión de usuarios", "User Panel": "Panel de usuario", "Users": "Usuarios", diff --git a/src/assets/translations/fr-FR.json b/src/assets/translations/fr-FR.json index a27f68fdc..ded3ec42f 100644 --- a/src/assets/translations/fr-FR.json +++ b/src/assets/translations/fr-FR.json @@ -2146,6 +2146,7 @@ "Products": "Des produits", "Profile": "Profil", "Re-Age": "Vieillissement", + "Re-Amortize": "Amortir", "Recover From Guarantor": "Récupération auprès du garant", "Recovery Payment": "Paiement de récupération", "Reject": "Rejeter", @@ -2168,6 +2169,7 @@ "Undo Approval": "Annuler l'approbation", "Undo Disbursal": "Annuler le décaissement", "Undo Re-Age": "Annuler le Vieillissement", + "Undo Re-Amortize": "Annuler le Amortir", "User Management": "Gestion des utilisateurs", "User Panel": "Panneau utilisateur", "Users": "Utilisateurs", diff --git a/src/assets/translations/it-IT.json b/src/assets/translations/it-IT.json index 6bb8e8deb..ea1764518 100644 --- a/src/assets/translations/it-IT.json +++ b/src/assets/translations/it-IT.json @@ -2146,6 +2146,7 @@ "Products": "Prodotti", "Profile": "Profilo", "Re-Age": "Invecchiamento", + "Re-Amortize": "Ammortizzare", "Recover From Guarantor": "Recupero dal garante", "Recovery Payment": "Pagamento di recupero", "Reject": "Rifiutare", @@ -2168,6 +2169,7 @@ "Undo Approval": "Annulla l'approvazione", "Undo Disbursal": "Annullare l'esborso", "Undo Re-Age": "Annullare l'invecchiamento", + "Undo Re-Amortize": "Annullare l'ammortizzare", "User Management": "Gestione utenti", "User Panel": "Pannello Utente", "Users": "Utenti", diff --git a/src/assets/translations/ko-KO.json b/src/assets/translations/ko-KO.json index ca50ac851..d7a1a6908 100644 --- a/src/assets/translations/ko-KO.json +++ b/src/assets/translations/ko-KO.json @@ -2147,6 +2147,7 @@ "Products": "제품", "Profile": "프로필", "Re-Age": "노화", + "Re-Amortize": "상각합니다", "Recover From Guarantor": "보증인으로부터의 회복", "Reject": "거부하다", "Reports": "보고서", @@ -2168,6 +2169,7 @@ "Undo Approval": "승인 취소", "Undo Disbursal": "지급 취소", "Undo Re-Age": "노화 취소", + "Undo Re-Amortize": "상각합니다 취소", "User Management": "사용자 관리", "User Panel": "사용자 패널", "Users": "사용자", diff --git a/src/assets/translations/lt-LT.json b/src/assets/translations/lt-LT.json index 60256454a..642824c5b 100644 --- a/src/assets/translations/lt-LT.json +++ b/src/assets/translations/lt-LT.json @@ -2146,6 +2146,7 @@ "Products": "Produktai", "Profile": "Profilis", "Re-Age": "Senėjimas", + "Re-Amortize": "Amortize", "Recover From Guarantor": "Išieškojimas iš garanto", "Recovery Payment": "Išieškojimo mokėjimas", "Reject": "Atmesti", @@ -2168,6 +2169,7 @@ "Undo Approval": "Anuliuoti patvirtinimą", "Undo Disbursal": "Anuliuoti išmokėjimą", "Undo Re-Age": "Anuliuoti senėjimas", + "Undo Re-Amortize": "Anuliuoti amortize", "User Management": "Vartotojo valdymas", "User Panel": "Vartotojo skydelis", "Users": "Vartotojai", diff --git a/src/assets/translations/lv-LV.json b/src/assets/translations/lv-LV.json index b31d26d5a..07290b869 100644 --- a/src/assets/translations/lv-LV.json +++ b/src/assets/translations/lv-LV.json @@ -2146,6 +2146,7 @@ "Products": "Produkti", "Profile": "Profils", "Re-Age": "Novecošanās", + "Re-Amortize": "Amortizēt", "Recover From Guarantor": "Atgūšana no galvotāja", "Recovery Payment": "Atgūšanas maksājums", "Reject": "Noraidīt", @@ -2168,6 +2169,7 @@ "Undo Approval": "Atsaukt apstiprinājumu", "Undo Disbursal": "Atsaukt izmaksu", "Undo Re-Age": "Atsaukt novecošanās", + "Undo Re-Amortize": "Atsaukt amortizēt", "User Management": "Lietotāju pārvaldība", "User Panel": "Lietotāja panelis", "Users": "Lietotāji", diff --git a/src/assets/translations/ne-NE.json b/src/assets/translations/ne-NE.json index 1b2ccc8ad..f8d521734 100644 --- a/src/assets/translations/ne-NE.json +++ b/src/assets/translations/ne-NE.json @@ -2146,6 +2146,7 @@ "Products": "उत्पादनहरू", "Profile": "प्रोफाइल", "Re-Age": "बुढ्यौडो", + "Re-Amortize": "परिणत गर्नुहोस्", "Recover From Guarantor": "ग्यारेन्टरबाट रिकभरी", "Recovery Payment": "रिकभरी भुक्तानी", "Reject": "अस्वीकार गर्नुहोस्", @@ -2168,6 +2169,7 @@ "Undo Approval": "अनुमोदन अनडू गर्नुहोस्", "Undo Disbursal": "वितरण पूर्ववत गर्नुहोस्", "Undo Re-Age": "बुढ्यौडो अनडू", + "Undo Re-Amortize": "परिणत गर्नुहोस् अनडू", "User Management": "प्रयोगकर्ता व्यवस्थापन", "User Panel": "प्रयोगकर्ता प्यानल", "Users": "प्रयोगकर्ताहरू", diff --git a/src/assets/translations/pt-PT.json b/src/assets/translations/pt-PT.json index 400768bb8..fb4c67367 100644 --- a/src/assets/translations/pt-PT.json +++ b/src/assets/translations/pt-PT.json @@ -2146,6 +2146,7 @@ "Products": "Produtos", "Profile": "Perfil", "Re-Age": "Envelhecimento", + "Re-Amortize": "Amortizar", "Recover From Guarantor": "Recuperação do Fiador", "Recovery Payment": "Pagamento de recuperação", "Reject": "Rejeitar", @@ -2168,6 +2169,7 @@ "Undo Approval": "Desfazer aprovação", "Undo Disbursal": "Desfazer desembolso", "Undo Re-Age": "Desfazer envelhecimento", + "Undo Re-Amortize": "Desfazer amortizar", "User Management": "Gerenciamento de usuários", "User Panel": "Painel do usuário", "Users": "Usuários", diff --git a/src/assets/translations/sw-SW.json b/src/assets/translations/sw-SW.json index 85039267f..6ff1f1fb1 100644 --- a/src/assets/translations/sw-SW.json +++ b/src/assets/translations/sw-SW.json @@ -2146,6 +2146,7 @@ "Products": "Bidhaa", "Profile": "Wasifu", "Re-Age": "Kuzeeka", + "Re-Amortize": "Adize", "Recover From Guarantor": "Urejeshaji Kutoka kwa Mdhamini", "Recovery Payment": "Malipo ya uokoaji", "Reject": "Kataa", @@ -2168,6 +2169,7 @@ "Undo Approval": "Tendua Uidhinishaji", "Undo Disbursal": "Tendua Utoaji", "Undo Re-Age": "Tendua Kuzeeka", + "Undo Re-Amortize": "Tendua Adize", "User Management": "Usimamizi wa Mtumiaji", "User Panel": "Jopo la Mtumiaji", "Users": "Watumiaji",