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 @@
+
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",