From 54dc91e0e2f8d98995c23340d29106cd194e67e4 Mon Sep 17 00:00:00 2001 From: Jose Alberto Hernandez Date: Sat, 30 Mar 2024 18:59:55 -0600 Subject: [PATCH] Transactions tab standarization --- .gitignore | 1 + cypress.config.ts | 23 ++-- src/app/core/utils/accounting.ts | 13 +++ .../transactions-tab.component.html | 35 +++--- .../transactions-tab.component.scss | 15 --- .../transactions-tab.component.ts | 72 +++++++------ .../view-transaction.component.html | 54 +--------- .../transactions-tab.component.html | 41 +++++-- .../transactions-tab.component.scss | 7 +- .../transactions-tab.component.ts | 60 +++++++---- .../view-transaction.component.html | 56 +--------- .../view-transaction.component.scss | 22 ++++ .../view-transaction.component.ts | 2 +- .../loan-reschedule.component.html | 4 +- .../manage-currencies.component.html | 7 +- .../manage-currencies.component.ts | 52 ++++++++- .../view-cashier/view-cashier.component.html | 20 ++-- .../general-tab/general-tab.component.html | 10 +- .../general-tab/general-tab.component.ts | 100 +++++++++++++++++- .../transactions-tab.component.html | 2 +- .../transactions-tab.component.scss | 9 -- .../transactions-tab.component.ts | 42 +++----- ...ngs-transaction-general-tab.component.html | 8 +- ...ngs-transaction-general-tab.component.scss | 17 +++ ...vings-transaction-general-tab.component.ts | 6 ++ .../view-transaction.component.html | 2 +- ...-savings-accounting-details.component.html | 2 +- ...ew-savings-accounting-details.component.ts | 4 + .../form-dialog/form-dialog.component.html | 4 +- .../manage-jobs/manage-jobs.component.html | 6 +- .../manage-jobs/manage-jobs.component.ts | 8 +- .../custom-parameters-table.component.html | 8 +- .../error-log-popover.component.html | 27 +++++ .../error-log-popover.component.scss | 47 ++++++++ .../error-log-popover.component.spec.ts | 23 ++++ .../error-log-popover.component.ts | 34 ++++++ .../manage-scheduler-jobs.component.html | 76 ++++++------- .../manage-scheduler-jobs.component.scss | 5 + .../manage-scheduler-jobs.component.ts | 14 ++- .../models/scheduler-job.model.ts | 19 ++++ src/app/system/system.module.ts | 4 +- src/assets/styles/_colours.scss | 17 +++ src/assets/translations/cs-CS.json | 10 +- src/assets/translations/de-DE.json | 10 +- src/assets/translations/en-US.json | 10 +- src/assets/translations/es-MX.json | 20 ++-- src/assets/translations/fr-FR.json | 10 +- src/assets/translations/it-IT.json | 10 +- src/assets/translations/ko-KO.json | 10 +- src/assets/translations/lt-LT.json | 10 +- src/assets/translations/lv-LV.json | 10 +- src/assets/translations/ne-NE.json | 10 +- src/assets/translations/pt-PT.json | 10 +- src/assets/translations/sw-SW.json | 10 +- 54 files changed, 756 insertions(+), 352 deletions(-) create mode 100644 src/app/system/manage-jobs/scheduler-jobs/error-log-popover/error-log-popover.component.html create mode 100644 src/app/system/manage-jobs/scheduler-jobs/error-log-popover/error-log-popover.component.scss create mode 100644 src/app/system/manage-jobs/scheduler-jobs/error-log-popover/error-log-popover.component.spec.ts create mode 100644 src/app/system/manage-jobs/scheduler-jobs/error-log-popover/error-log-popover.component.ts create mode 100644 src/app/system/manage-jobs/scheduler-jobs/models/scheduler-job.model.ts diff --git a/.gitignore b/.gitignore index 7f5f72917a..075b1574f5 100644 --- a/.gitignore +++ b/.gitignore @@ -54,3 +54,4 @@ testem.log .DS_Store Thumbs.db .vscode/ +cypress/ diff --git a/cypress.config.ts b/cypress.config.ts index a3b79a6806..681fee5aad 100644 --- a/cypress.config.ts +++ b/cypress.config.ts @@ -1,15 +1,24 @@ -import { defineConfig } from 'cypress' +import { defineConfig } from "cypress"; export default defineConfig({ - videosFolder: 'cypress/videos', - screenshotsFolder: 'cypress/screenshots', - fixturesFolder: 'cypress/fixtures', + videosFolder: "cypress/videos", + screenshotsFolder: "cypress/screenshots", + fixturesFolder: "cypress/fixtures", + e2e: { // We've imported your old cypress plugins here. // You may want to clean this up later by importing these. setupNodeEvents(on, config) { - return require('./cypress/plugins/index.ts')(on, config) + return require("./cypress/plugins/index.ts")(on, config); + }, + baseUrl: "http://localhost:4200", + }, + + component: { + devServer: { + framework: "angular", + bundler: "webpack", }, - baseUrl: 'http://localhost:4200', + specPattern: "**/*.cy.ts", }, -}) +}); diff --git a/src/app/core/utils/accounting.ts b/src/app/core/utils/accounting.ts index 8f6188367f..283380be53 100644 --- a/src/app/core/utils/accounting.ts +++ b/src/app/core/utils/accounting.ts @@ -16,6 +16,19 @@ import { OptionData } from 'app/shared/models/option-data.model'; return ['NONE', 'Cash', 'Accrual (periodic)', 'Accrual (upfront)']; } + public getAccountRuleName(value: string): string { + if (value === 'ACCRUAL PERIODIC') { + return 'Accrual (periodic)'; + } else if (value === 'ACCRUAL UPFRONT') { + return 'Accrual (upfront)'; + } else if (value === 'CASH BASED') { + return 'Cash'; + } else if (value === 'NONE') { + return 'None'; + } + return ''; + } + public isNoneAccounting(accountingRule: OptionData): boolean { return (accountingRule.id === 1); } diff --git a/src/app/deposits/fixed-deposits/fixed-deposit-account-view/transactions-tab/transactions-tab.component.html b/src/app/deposits/fixed-deposits/fixed-deposit-account-view/transactions-tab/transactions-tab.component.html index 1ad6e5b08c..c8fd973746 100644 --- a/src/app/deposits/fixed-deposits/fixed-deposit-account-view/transactions-tab/transactions-tab.component.html +++ b/src/app/deposits/fixed-deposits/fixed-deposit-account-view/transactions-tab/transactions-tab.component.html @@ -6,6 +6,8 @@

{{"labels.heading.All Transactions" | translate }}

+ + {{"labels.inputs.Hide Reversed" | translate}} {{"labels.inputs.Hide Accruals" | translate}}
@@ -20,50 +22,55 @@

{{"labels.heading.All Transactions" | translate }}

{{"labels.inputs.ID" | translate }} - {{ transaction.id }} + {{ transaction.id }} {{"labels.inputs.Transaction Date" | translate }} - {{ transaction.date | dateFormat }} + {{ transaction.date | dateFormat }} {{"labels.inputs.Transaction Type" | translate }} - {{ transaction.transactionType.value }} + {{ transaction.transactionType.value }} {{"labels.inputs.Debit" | translate }} - {{ isDebit(transaction.transactionType) ? transaction.amount : 'N/A'}} + {{ isDebit(transaction.transactionType) ? transaction.amount : 'N/A'}} {{"labels.inputs.Credit" | translate }} - {{ !isDebit(transaction.transactionType) ? transaction.amount : 'N/A' }} + {{ !isDebit(transaction.transactionType) ? transaction.amount : 'N/A' }} {{"labels.inputs.Balance" | translate }} - {{ transaction.runningBalance }} + {{ transaction.runningBalance }} {{"labels.inputs.Actions" | translate }} - - + + + + - + diff --git a/src/app/deposits/fixed-deposits/fixed-deposit-account-view/transactions-tab/transactions-tab.component.scss b/src/app/deposits/fixed-deposits/fixed-deposit-account-view/transactions-tab/transactions-tab.component.scss index f91d69e556..28fb22c6f7 100644 --- a/src/app/deposits/fixed-deposits/fixed-deposit-account-view/transactions-tab/transactions-tab.component.scss +++ b/src/app/deposits/fixed-deposits/fixed-deposit-account-view/transactions-tab/transactions-tab.component.scss @@ -33,18 +33,3 @@ } } } - -.active { - background-color: $status-active; - height: 4px; -} - -.linked { - background-color: $status-approved; - height: 4px; -} - -.undo { - background-color: $status-active-overdue; - height: 4px; -} diff --git a/src/app/deposits/fixed-deposits/fixed-deposit-account-view/transactions-tab/transactions-tab.component.ts b/src/app/deposits/fixed-deposits/fixed-deposit-account-view/transactions-tab/transactions-tab.component.ts index e3e36f8370..9d245ec024 100644 --- a/src/app/deposits/fixed-deposits/fixed-deposit-account-view/transactions-tab/transactions-tab.component.ts +++ b/src/app/deposits/fixed-deposits/fixed-deposit-account-view/transactions-tab/transactions-tab.component.ts @@ -1,8 +1,12 @@ /** Angular Imports */ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, ViewChild } from '@angular/core'; import { UntypedFormControl } from '@angular/forms'; +import { MatDialog } from '@angular/material/dialog'; +import { MatPaginator } from '@angular/material/paginator'; +import { MatSort } from '@angular/material/sort'; import { MatTableDataSource } from '@angular/material/table'; import { ActivatedRoute, Router } from '@angular/router'; +import { SavingsAccountTransaction } from 'app/savings/models/savings-account-transaction.model'; /** * Transactions Tab Component. @@ -13,18 +17,19 @@ import { ActivatedRoute, Router } from '@angular/router'; styleUrls: ['./transactions-tab.component.scss'] }) export class TransactionsTabComponent implements OnInit { - + accountId: string; status: any; /** Transactions Data */ transactionsData: any; - /** Temporary Transaction Data */ - tempTransaction: any; /** Form control to handle accural parameter */ hideAccrualsParam: UntypedFormControl; + hideReversedParam: UntypedFormControl; /** Columns to be displayed in transactions table. */ displayedColumns: string[] = ['row', 'id', 'transactionDate', 'transactionType', 'debit', 'credit', 'balance', 'actions']; /** Data source for transactions table. */ dataSource: MatTableDataSource; + @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator; + @ViewChild(MatSort, { static: true }) sort: MatSort; /** * Retrieves fixed deposits account data from `resolve`. @@ -32,28 +37,19 @@ export class TransactionsTabComponent implements OnInit { * @param {Router} router Router */ constructor(private route: ActivatedRoute, - private router: Router) { + private router: Router, + public dialog: MatDialog) { this.route.parent.data.subscribe((data: { fixedDepositsAccountData: any }) => { this.transactionsData = data.fixedDepositsAccountData.transactions; - this.tempTransaction = this.transactionsData; + this.accountId = this.route.parent.snapshot.params['fixedDepositAccountId']; this.status = data.fixedDepositsAccountData.status.value; }); } ngOnInit() { this.hideAccrualsParam = new UntypedFormControl(false); + this.hideReversedParam = new UntypedFormControl(false); this.dataSource = new MatTableDataSource(this.transactionsData); - if (this.tempTransaction) { - this.tempTransaction.forEach((element: any) => { - if (this.isAccrual(element.transactionType)) { - this.tempTransaction = this.removeItem(this.tempTransaction, element); - } - }); - } - } - - private removeItem(arr: any, item: any) { - return arr.filter((f: any) => f !== item); } /** @@ -88,25 +84,36 @@ export class TransactionsTabComponent implements OnInit { } } - transactionColor(transaction: any): string { - if (transaction.reversed) { - return 'strike'; - } - if (this.isAccrual(transaction.transactionType)) { - return 'accrual'; - } - return ''; + hideAccruals() { + this.filterTransactions(this.hideReversedParam.value, !this.hideAccrualsParam.value); } - private isAccrual(transactionType: any): boolean { - return (transactionType.accrual); + hideReversed() { + this.filterTransactions(!this.hideReversedParam.value, this.hideAccrualsParam.value); } - hideAccruals() { - if (!this.hideAccrualsParam.value) { - this.dataSource = new MatTableDataSource(this.tempTransaction); + filterTransactions(hideReversed: boolean, hideAccrual: boolean): void { + let transactions: SavingsAccountTransaction[] = this.transactionsData; + + if (hideAccrual || hideReversed) { + transactions = this.transactionsData.filter((t: SavingsAccountTransaction) => { + return (!(hideReversed && t.reversed) && !(hideAccrual && t.transactionType.accrual)); + }); + } + this.dataSource = new MatTableDataSource(transactions); + this.dataSource.paginator = this.paginator; + this.dataSource.sort = this.sort; + } + + savingsTransactionColor(transaction: SavingsAccountTransaction): string { + if (transaction.reversed) { + return 'strike'; + } else if (transaction.transfer) { + return 'transfer'; + } else if (transaction.transactionType.accrual) { + return 'accrual'; } else { - this.dataSource = new MatTableDataSource(this.transactionsData); + return ''; } } @@ -118,4 +125,7 @@ export class TransactionsTabComponent implements OnInit { $event.stopPropagation(); } + undoTransaction(transactionData: SavingsAccountTransaction): void { + + } } diff --git a/src/app/deposits/fixed-deposits/fixed-deposit-account-view/view-transaction/view-transaction.component.html b/src/app/deposits/fixed-deposits/fixed-deposit-account-view/view-transaction/view-transaction.component.html index c91024773a..957420b541 100644 --- a/src/app/deposits/fixed-deposits/fixed-deposit-account-view/view-transaction/view-transaction.component.html +++ b/src/app/deposits/fixed-deposits/fixed-deposit-account-view/view-transaction/view-transaction.component.html @@ -64,57 +64,9 @@ {{ transactionData.note }} - - -
- {{"labels.inputs.Payment Type" | translate }} -
- -
- {{ transactionData.paymentDetailData.paymentType.name }} -
- -
- {{"labels.inputs.Account No" | translate }}. -
- -
- {{ transactionData.paymentDetailData.accountNumber }} -
- -
- {{"labels.inputs.Cheque Number" | translate }} -
- -
- {{ transactionData.paymentDetailData.checkNumber }} -
- -
- {{"labels.inputs.Routing Code" | translate }} -
- -
- {{ transactionData.paymentDetailData.routingCode }} -
- -
- {{"labels.inputs.Receipt No" | translate }}. -
- -
- {{ transactionData.paymentDetailData.receiptNumber }} -
- -
- {{"labels.inputs.Bank No" | translate }}. -
- -
- {{ transactionData.paymentDetailData.bankNumber }} -
- -
+ + diff --git a/src/app/deposits/recurring-deposits/recurring-deposits-account-view/transactions-tab/transactions-tab.component.html b/src/app/deposits/recurring-deposits/recurring-deposits-account-view/transactions-tab/transactions-tab.component.html index 214bb5d1ce..604981db0c 100644 --- a/src/app/deposits/recurring-deposits/recurring-deposits-account-view/transactions-tab/transactions-tab.component.html +++ b/src/app/deposits/recurring-deposits/recurring-deposits-account-view/transactions-tab/transactions-tab.component.html @@ -6,6 +6,8 @@

{{"labels.heading.All Transactions" | translate }}

+ + {{"labels.inputs.Hide Reversed" | translate}} {{"labels.inputs.Hide Accruals" | translate}}
@@ -20,38 +22,57 @@

{{"labels.heading.All Transactions" | translate }}

{{"labels.inputs.ID" | translate }} - {{ transaction.id }} + {{ transaction.id }} {{"labels.inputs.Transaction Date" | translate }} - {{ transaction.date | dateFormat }} + {{ transaction.date | dateFormat }} {{"labels.inputs.Transaction Type" | translate }} - {{ transaction.transactionType.value }} + {{ transaction.transactionType.value }} - {{"labels.inputs.Debit" | translate }} - + {{"labels.inputs.Debit" | translate }} + {{ isDebit(transaction.transactionType) ? transaction.amount : 'N/A'}} - {{"labels.inputs.Credit" | translate }} - + {{"labels.inputs.Credit" | translate }} + {{ !isDebit(transaction.transactionType) ? transaction.amount : 'N/A' }} - {{"labels.inputs.Balance" | translate }} - {{ transaction.runningBalance }} + {{"labels.inputs.Balance" | translate }} + {{ transaction.runningBalance | formatNumber }} + + + + {{"labels.inputs.Actions" | translate }} + + + + + + + - + diff --git a/src/app/deposits/recurring-deposits/recurring-deposits-account-view/transactions-tab/transactions-tab.component.scss b/src/app/deposits/recurring-deposits/recurring-deposits-account-view/transactions-tab/transactions-tab.component.scss index 20c8880f63..ec28085b6d 100644 --- a/src/app/deposits/recurring-deposits/recurring-deposits-account-view/transactions-tab/transactions-tab.component.scss +++ b/src/app/deposits/recurring-deposits/recurring-deposits-account-view/transactions-tab/transactions-tab.component.scss @@ -1,3 +1,5 @@ +@import "assets/styles/helper"; + .tab-container { padding: 1%; margin: 1%; @@ -23,8 +25,3 @@ } } } - -.strike { - text-decoration: line-through; - color: red; -} diff --git a/src/app/deposits/recurring-deposits/recurring-deposits-account-view/transactions-tab/transactions-tab.component.ts b/src/app/deposits/recurring-deposits/recurring-deposits-account-view/transactions-tab/transactions-tab.component.ts index 9681db6673..99af53f203 100644 --- a/src/app/deposits/recurring-deposits/recurring-deposits-account-view/transactions-tab/transactions-tab.component.ts +++ b/src/app/deposits/recurring-deposits/recurring-deposits-account-view/transactions-tab/transactions-tab.component.ts @@ -1,8 +1,11 @@ /** Angular Imports */ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, ViewChild } from '@angular/core'; import { UntypedFormControl } from '@angular/forms'; +import { MatPaginator } from '@angular/material/paginator'; +import { MatSort } from '@angular/material/sort'; import { MatTableDataSource } from '@angular/material/table'; import { ActivatedRoute, Router } from '@angular/router'; +import { SavingsAccountTransaction } from 'app/savings/models/savings-account-transaction.model'; /** * Transactions Tab Component. @@ -18,14 +21,15 @@ export class TransactionsTabComponent implements OnInit { status: any; /** Transactions Data */ transactionsData: any; - /** Temporary Transaction Data */ - tempTransaction: any; /** Form control to handle accural parameter */ hideAccrualsParam: UntypedFormControl; + hideReversedParam: UntypedFormControl; /** Columns to be displayed in transactions table. */ - displayedColumns: string[] = ['row', 'id', 'transactionDate', 'transactionType', 'debit', 'credit', 'balance']; + displayedColumns: string[] = ['row', 'id', 'transactionDate', 'transactionType', 'debit', 'credit', 'balance', 'actions']; /** Data source for transactions table. */ dataSource: MatTableDataSource; + @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator; + @ViewChild(MatSort, { static: true }) sort: MatSort; /** * Retrieves recurring deposits account data from `resolve`. @@ -35,7 +39,6 @@ export class TransactionsTabComponent implements OnInit { private router: Router) { this.route.parent.data.subscribe((data: { recurringDepositsAccountData: any }) => { this.transactionsData = data.recurringDepositsAccountData.transactions; - this.tempTransaction = this.transactionsData; this.status = data.recurringDepositsAccountData.status.value; }); } @@ -43,17 +46,7 @@ export class TransactionsTabComponent implements OnInit { ngOnInit() { this.dataSource = new MatTableDataSource(this.transactionsData); this.hideAccrualsParam = new UntypedFormControl(false); - if (this.tempTransaction) { - this.tempTransaction.forEach((element: any) => { - if (this.isAccrual(element.transactionType)) { - this.tempTransaction = this.removeItem(this.tempTransaction, element); - } - }); - } - } - - private removeItem(arr: any, item: any) { - return arr.filter((f: any) => f !== item); + this.hideReversedParam = new UntypedFormControl(false); } /** @@ -65,15 +58,36 @@ export class TransactionsTabComponent implements OnInit { || transactionType.overdraftInterest === true || transactionType.withholdTax === true; } - isAccrual(transactionType: any): boolean { - return (transactionType.accrual || transactionType.code === 'savingsAccountTransactionType.accrual'); + hideAccruals() { + this.filterTransactions(this.hideReversedParam.value, !this.hideAccrualsParam.value); } - hideAccruals() { - if (!this.hideAccrualsParam.value) { - this.dataSource = new MatTableDataSource(this.tempTransaction); + hideReversed() { + this.filterTransactions(!this.hideReversedParam.value, this.hideAccrualsParam.value); + } + + filterTransactions(hideReversed: boolean, hideAccrual: boolean): void { + let transactions: SavingsAccountTransaction[] = this.transactionsData; + + if (hideAccrual || hideReversed) { + transactions = this.transactionsData.filter((t: SavingsAccountTransaction) => { + return (!(hideReversed && t.reversed) && !(hideAccrual && t.transactionType.accrual)); + }); + } + this.dataSource = new MatTableDataSource(transactions); + this.dataSource.paginator = this.paginator; + this.dataSource.sort = this.sort; + } + + savingsTransactionColor(transaction: SavingsAccountTransaction): string { + if (transaction.reversed) { + return 'strike'; + } else if (transaction.transfer) { + return 'transfer'; + } else if (transaction.transactionType.accrual) { + return 'accrual'; } else { - this.dataSource = new MatTableDataSource(this.transactionsData); + return ''; } } @@ -92,7 +106,7 @@ export class TransactionsTabComponent implements OnInit { * Show Transactions Details * @param transactionsData Transactions Data */ - showTransactions(transactionsData: any) { + showTransactions(transactionsData: SavingsAccountTransaction) { if (transactionsData.transfer) { this.router.navigate([`../transfer-funds/account-transfers/${transactionsData.transfer.id}`], { relativeTo: this.route }); } else { diff --git a/src/app/deposits/recurring-deposits/recurring-deposits-account-view/transactions-tab/view-transaction/view-transaction.component.html b/src/app/deposits/recurring-deposits/recurring-deposits-account-view/transactions-tab/view-transaction/view-transaction.component.html index df415e8bf1..d6d2995d94 100644 --- a/src/app/deposits/recurring-deposits/recurring-deposits-account-view/transactions-tab/view-transaction/view-transaction.component.html +++ b/src/app/deposits/recurring-deposits/recurring-deposits-account-view/transactions-tab/view-transaction/view-transaction.component.html @@ -61,7 +61,7 @@
- {{ transactionData.amount }} + {{ transactionData.amount | currency:transactionData.currency.code:'symbol-narrow':'1.2-2'}}
@@ -72,57 +72,9 @@ {{ transactionData.note }}
- - -
- {{"labels.inputs.Payment Type" | translate }} -
- -
- {{ transactionData.paymentDetailData.paymentType.name }} -
- -
- {{"labels.inputs.Account No" | translate }}. -
- -
- {{ transactionData.paymentDetailData.accountNumber }} -
- -
- {{"labels.inputs.Cheque Number" | translate }} -
- -
- {{ transactionData.paymentDetailData.checkNumber }} -
- -
- {{"labels.inputs.Routing Code" | translate }} -
- -
- {{ transactionData.paymentDetailData.routingCode }} -
- -
- {{"labels.inputs.Receipt No" | translate }}. -
- -
- {{ transactionData.paymentDetailData.receiptNumber }} -
- -
- {{"labels.inputs.Bank No" | translate }}. -
- -
- {{ transactionData.paymentDetailData.bankNumber }} -
- -
+ + diff --git a/src/app/deposits/recurring-deposits/recurring-deposits-account-view/transactions-tab/view-transaction/view-transaction.component.scss b/src/app/deposits/recurring-deposits/recurring-deposits-account-view/transactions-tab/view-transaction/view-transaction.component.scss index 46cf447600..0dee5b1248 100644 --- a/src/app/deposits/recurring-deposits/recurring-deposits-account-view/transactions-tab/view-transaction/view-transaction.component.scss +++ b/src/app/deposits/recurring-deposits/recurring-deposits-account-view/transactions-tab/view-transaction/view-transaction.component.scss @@ -1,3 +1,5 @@ +@import "assets/styles/helper"; + .container { max-width: 37rem; @@ -6,5 +8,25 @@ margin: 1rem 0; word-wrap: break-word; } + + mifosx-transaction-payment-detail { + width: 100%; + margin-bottom: 20px; + } } } + +.active { + background-color: $status-active; + height: 4px; +} + +.linked { + background-color: $status-approved; + height: 4px; +} + +.undo { + background-color: $status-active-overdue; + height: 4px; +} \ No newline at end of file diff --git a/src/app/deposits/recurring-deposits/recurring-deposits-account-view/transactions-tab/view-transaction/view-transaction.component.ts b/src/app/deposits/recurring-deposits/recurring-deposits-account-view/transactions-tab/view-transaction/view-transaction.component.ts index 2e537e809c..4ddba20a65 100644 --- a/src/app/deposits/recurring-deposits/recurring-deposits-account-view/transactions-tab/view-transaction/view-transaction.component.ts +++ b/src/app/deposits/recurring-deposits/recurring-deposits-account-view/transactions-tab/view-transaction/view-transaction.component.ts @@ -73,7 +73,7 @@ export class ViewTransactionComponent { } transactionColor(): string { - if (this.transactionData.manuallyReversed) { + if (this.transactionData.reversed) { return 'undo'; } return 'active'; diff --git a/src/app/loans/loans-view/loan-account-actions/loan-reschedule/loan-reschedule.component.html b/src/app/loans/loans-view/loan-account-actions/loan-reschedule/loan-reschedule.component.html index 1f78bb05f9..8029c6827a 100644 --- a/src/app/loans/loans-view/loan-account-actions/loan-reschedule/loan-reschedule.component.html +++ b/src/app/loans/loans-view/loan-account-actions/loan-reschedule/loan-reschedule.component.html @@ -49,8 +49,8 @@ {{"labels.inputs.Change Repayment Date" | translate}} - - + + {{"labels.inputs.Installment Rescheduled to" | translate}} diff --git a/src/app/organization/currencies/manage-currencies/manage-currencies.component.html b/src/app/organization/currencies/manage-currencies/manage-currencies.component.html index 694eafd525..2a739d92f5 100644 --- a/src/app/organization/currencies/manage-currencies/manage-currencies.component.html +++ b/src/app/organization/currencies/manage-currencies/manage-currencies.component.html @@ -10,8 +10,11 @@ {{ 'labels.inputs.Currency' | translate }} - - {{ currency.name }} + + + + + ({{currency.code}}) {{ currency.name }} diff --git a/src/app/organization/currencies/manage-currencies/manage-currencies.component.ts b/src/app/organization/currencies/manage-currencies/manage-currencies.component.ts index cd2904f540..7b050cde87 100644 --- a/src/app/organization/currencies/manage-currencies/manage-currencies.component.ts +++ b/src/app/organization/currencies/manage-currencies/manage-currencies.component.ts @@ -1,8 +1,8 @@ /** Angular Imports */ -import { Component, OnInit, TemplateRef, ElementRef, ViewChild, AfterViewInit } from '@angular/core'; +import { Component, OnInit, TemplateRef, ElementRef, ViewChild, AfterViewInit, OnDestroy, OnChanges, SimpleChanges } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; import { MatDialog } from '@angular/material/dialog'; -import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormControl, Validators } from '@angular/forms'; /** Custom Dialogs */ import { DeleteDialogComponent } from '../../../shared/delete-dialog/delete-dialog.component'; @@ -14,6 +14,9 @@ import { ConfigurationWizardService } from '../../../configuration-wizard/config /** Custom Dialog Component */ import { ContinueSetupDialogComponent } from '../../../configuration-wizard/continue-setup-dialog/continue-setup-dialog.component'; +import { takeUntil } from 'rxjs/operators'; +import { ReplaySubject, Subject } from 'rxjs'; +import { Currency } from 'app/shared/models/general.model'; /** * Manage Currencies component. @@ -23,12 +26,12 @@ import { ContinueSetupDialogComponent } from '../../../configuration-wizard/cont templateUrl: './manage-currencies.component.html', styleUrls: ['./manage-currencies.component.scss'] }) -export class ManageCurrenciesComponent implements OnInit, AfterViewInit { +export class ManageCurrenciesComponent implements OnInit, AfterViewInit, OnDestroy, OnChanges { /** Selected Currencies data. */ selectedCurrencies: any[]; /** Currency options data */ - currencyData: any; + currencyList: Currency[] = []; /** Currency form */ currencyForm: any; @@ -37,6 +40,15 @@ export class ManageCurrenciesComponent implements OnInit, AfterViewInit { @ViewChild('currencyFormRef') currencyFormRef: ElementRef; @ViewChild('templateCurrencyFormRef') templateCurrencyFormRef: TemplateRef; + /** Currency data. */ + protected currencyData: ReplaySubject = new ReplaySubject(1); + + /** control for the filter select */ + protected filterFormCtrl: UntypedFormControl = new UntypedFormControl(''); + + /** Subject that emits when the component has been destroyed. */ + protected _onDestroy = new Subject(); + /** * Retrieves the currency data from `resolve`. * @param {ActivatedRoute} route Activated Route @@ -53,14 +65,30 @@ export class ManageCurrenciesComponent implements OnInit, AfterViewInit { private popoverService: PopoverService) { this.route.parent.data.subscribe(( data: { currencies: any }) => { this.selectedCurrencies = data.currencies.selectedCurrencyOptions; - this.currencyData = data.currencies.currencyOptions; + this.currencyList = data.currencies.currencyOptions; }); } ngOnInit() { + this.filterFormCtrl.valueChanges + .pipe(takeUntil(this._onDestroy)) + .subscribe(() => { + this.searchItem(); + }); this.createCurrencyForm(); } + ngOnDestroy(): void { + this._onDestroy.next(); + this._onDestroy.complete(); + } + + ngOnChanges(changes: SimpleChanges): void { + if (this.currencyList) { + this.currencyData.next(this.currencyList.slice()); + } + } + /** * Creates the currency form. */ @@ -70,6 +98,20 @@ export class ManageCurrenciesComponent implements OnInit, AfterViewInit { }); } + searchItem(): void { + if (this.currencyList) { + const search: string = this.filterFormCtrl.value.toLowerCase(); + + if (!search) { + this.currencyData.next(this.currencyList.slice()); + } else { + this.currencyData.next(this.currencyList.filter((option: Currency) => { + return option.name.toLowerCase().indexOf(search) >= 0 || option.code.toLowerCase().indexOf(search) >= 0; + })); + } + } + } + /** * Adds a new currency to the list. */ diff --git a/src/app/organization/tellers/cashiers/view-cashier/view-cashier.component.html b/src/app/organization/tellers/cashiers/view-cashier/view-cashier.component.html index 9bf41dc40e..3b0b52d2b3 100644 --- a/src/app/organization/tellers/cashiers/view-cashier/view-cashier.component.html +++ b/src/app/organization/tellers/cashiers/view-cashier/view-cashier.component.html @@ -1,11 +1,11 @@
@@ -19,7 +19,7 @@
- Name + {{'labels.inputs.Name' | translate}}
@@ -27,7 +27,7 @@
- Teller + {{'labels.inputs.Teller' | translate}}
@@ -35,7 +35,7 @@
- Description + {{'labels.inputs.Description' | translate}}
@@ -43,7 +43,7 @@
- Start Date + {{'labels.inputs.Start Date' | translate}}
@@ -51,7 +51,7 @@
- End Date + {{'labels.inputs.End Date' | translate}}
@@ -59,7 +59,7 @@
- Full Day? + {{'labels.inputs.Full Day?' | translate}}
@@ -69,7 +69,9 @@
- + + +
diff --git a/src/app/products/loan-products/view-loan-product/general-tab/general-tab.component.html b/src/app/products/loan-products/view-loan-product/general-tab/general-tab.component.html index 00f9744e98..5059d6368a 100644 --- a/src/app/products/loan-products/view-loan-product/general-tab/general-tab.component.html +++ b/src/app/products/loan-products/view-loan-product/general-tab/general-tab.component.html @@ -1,6 +1,14 @@
+ +
diff --git a/src/app/products/loan-products/view-loan-product/general-tab/general-tab.component.ts b/src/app/products/loan-products/view-loan-product/general-tab/general-tab.component.ts index 1e05c8134f..e3baa02cdf 100644 --- a/src/app/products/loan-products/view-loan-product/general-tab/general-tab.component.ts +++ b/src/app/products/loan-products/view-loan-product/general-tab/general-tab.component.ts @@ -1,6 +1,13 @@ import { Component, OnInit } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; +import { ActivatedRoute, Router } from '@angular/router'; import { LoanProduct } from '../../models/loan-product.model'; +import { FormfieldBase } from 'app/shared/form-dialog/formfield/model/formfield-base'; +import { InputBase } from 'app/shared/form-dialog/formfield/model/input-base'; +import { TranslateService } from '@ngx-translate/core'; +import { FormDialogComponent } from 'app/shared/form-dialog/form-dialog.component'; +import { MatDialog } from '@angular/material/dialog'; +import { ProductsService } from 'app/products/products.service'; +import { SettingsService } from 'app/settings/settings.service'; @Component({ selector: 'mifosx-general-tab', @@ -12,7 +19,12 @@ export class GeneralTabComponent implements OnInit { loanProduct: LoanProduct; useDueForRepaymentsConfigurations = false; - constructor(private route: ActivatedRoute) { + constructor(private route: ActivatedRoute, + private router: Router, + private dialog: MatDialog, + private productsService: ProductsService, + private settingsService: SettingsService, + private translateService: TranslateService) { this.route.data.subscribe((data: { loanProduct: any }) => { this.loanProduct = data.loanProduct; this.useDueForRepaymentsConfigurations = (!this.loanProduct.dueDaysForRepaymentEvent && !this.loanProduct.overDueDaysForRepaymentEvent); @@ -23,4 +35,88 @@ export class GeneralTabComponent implements OnInit { this.loanProduct.allowAttributeConfiguration = Object.values(this.loanProduct.allowAttributeOverrides).some((attribute: boolean) => attribute); } + exportDefinition(): void { + const product = this.loanProduct; + delete product['id']; + const fileName: string = product.name.replace(' ', '_') + '.json'; + const link = document.createElement('a'); + link.setAttribute('href', 'data:text/plain;charset=utf-u,' + encodeURIComponent(JSON.stringify(product, null, 2))); + link.setAttribute('download', fileName); + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + } + + copyProduct(): void { + const productNameTmp = `${this.loanProduct.name.replace(' ', '_')}_${this.translateService.instant('labels.text.Copy')}`; + const productCopy = JSON.parse(JSON.stringify(this.loanProduct)); + + const formfields: FormfieldBase[] = [ + new InputBase({ + controlName: 'name', + label: this.translateService.instant('labels.inputs.Name'), + value: productNameTmp, + type: 'text', + required: true, + order: 2 + }), + new InputBase({ + controlName: 'shortName', + label: this.translateService.instant('labels.inputs.Short Name'), + value: '', + type: 'text', + required: true, + order: 2 + }), + ]; + const data = { + title: `${this.translateService.instant('labels.buttons.Create')} ${this.translateService.instant('labels.inputs.Loan Product')}`, + layout: { addButtonText: this.translateService.instant('labels.buttons.Create') }, + formfields: formfields + }; + const createProductDialogRef = this.dialog.open(FormDialogComponent, { data }); + createProductDialogRef.afterClosed().subscribe((productResponse: any) => { + if (productResponse.data) { + + productCopy['name'] = productResponse.data.value['name']; + productCopy['shortName'] = productResponse.data.value['shortName']; + productCopy['delinquencyBucketId'] = productCopy['delinquencyBucket'] ? productCopy['delinquencyBucket']['id'] : null; + productCopy['currencyCode'] = productCopy['currency'] ? productCopy['currency']['code'] : null; + productCopy['interestRatePerPeriod'] = productCopy['annualInterestRate']; + productCopy['transactionProcessingStrategyCode'] = productCopy['transactionProcessingStrategyName']; + productCopy['allowPartialPeriodInterestCalcualtion'] = productCopy['allowPartialPeriodInterestCalculation']; + productCopy['locale'] = this.settingsService.language.code; + + let valueTmp: any = productCopy['daysInMonthType']['value']; + productCopy['daysInMonthType'] = valueTmp; + valueTmp = productCopy['daysInYearType']['value']; + productCopy['daysInYearType'] = valueTmp; + valueTmp = productCopy['amortizationType']['id']; + productCopy['amortizationType'] = valueTmp; + + delete productCopy['id']; + delete productCopy['advancedPaymentAllocationTransactionTypes']; + delete productCopy['advancedPaymentAllocationTypes']; + delete productCopy['creditAllocationTransactionTypes']; + delete productCopy['creditAllocationAllocationTypes']; + delete productCopy['delinquencyBucketOptions']; + delete productCopy['allowAttributeConfiguration']; + delete productCopy['status']; + delete productCopy['delinquencyBucket']; + delete productCopy['currency']; + delete productCopy['isRatesEnabled']; + delete productCopy['annualInterestRate']; + delete productCopy['transactionProcessingStrategyName']; + delete productCopy['allowPartialPeriodInterestCalculation']; + delete productCopy['advancedPaymentAllocationFutureInstallmentAllocationRules']; + + this.productsService.createLoanProduct(productCopy) + .subscribe((response: any) => { + this.router.navigate(['../', response.resourceId], { relativeTo: this.route }); + }); + + } + }); + } + } diff --git a/src/app/savings/savings-account-view/transactions-tab/transactions-tab.component.html b/src/app/savings/savings-account-view/transactions-tab/transactions-tab.component.html index 7f3435b07b..9da92b05d7 100644 --- a/src/app/savings/savings-account-view/transactions-tab/transactions-tab.component.html +++ b/src/app/savings/savings-account-view/transactions-tab/transactions-tab.component.html @@ -3,7 +3,7 @@
-

{{"labels.headings.All Transactions" | translate }}

+

{{"labels.heading.All Transactions" | translate }}

diff --git a/src/app/savings/savings-account-view/transactions-tab/transactions-tab.component.scss b/src/app/savings/savings-account-view/transactions-tab/transactions-tab.component.scss index 418923a795..ec28085b6d 100644 --- a/src/app/savings/savings-account-view/transactions-tab/transactions-tab.component.scss +++ b/src/app/savings/savings-account-view/transactions-tab/transactions-tab.component.scss @@ -25,12 +25,3 @@ } } } - -.strike { - text-decoration: line-through; - color: red; -} - -.transfer { - color: $status-transfer; -} \ No newline at end of file diff --git a/src/app/savings/savings-account-view/transactions-tab/transactions-tab.component.ts b/src/app/savings/savings-account-view/transactions-tab/transactions-tab.component.ts index 82bd699b1e..c047921b36 100644 --- a/src/app/savings/savings-account-view/transactions-tab/transactions-tab.component.ts +++ b/src/app/savings/savings-account-view/transactions-tab/transactions-tab.component.ts @@ -26,8 +26,6 @@ export class TransactionsTabComponent implements OnInit { status: any; /** Transactions Data */ transactionsData: SavingsAccountTransaction[] = []; - /** Temporary Transaction Data */ - tempTransaction: any; /** Form control to handle accural parameter */ hideAccrualsParam: UntypedFormControl; hideReversedParam: UntypedFormControl; @@ -54,7 +52,6 @@ export class TransactionsTabComponent implements OnInit { private dateUtils: Dates) { this.route.parent.parent.data.subscribe((data: { savingsAccountData: any }) => { this.transactionsData = data.savingsAccountData.transactions; - this.tempTransaction = this.transactionsData; this.status = data.savingsAccountData.status.value; }); this.accountId = this.route.parent.parent.snapshot.params['savingAccountId']; @@ -71,17 +68,6 @@ export class TransactionsTabComponent implements OnInit { this.accountWithTransactions = (this.transactionsData && this.transactionsData.length > 0); this.dataSource.paginator = this.paginator; this.dataSource.sort = this.sort; - if (this.tempTransaction) { - this.tempTransaction.forEach((element: any) => { - if (this.isAccrual(element.transactionType)) { - this.tempTransaction = this.removeItem(this.tempTransaction, element); - } - }); - } - } - - private removeItem(arr: any, item: any) { - return arr.filter((f: any) => f !== item); } /** @@ -129,21 +115,19 @@ export class TransactionsTabComponent implements OnInit { } hideAccruals() { - if (!this.hideAccrualsParam.value) { - this.dataSource = new MatTableDataSource(this.tempTransaction); - } else { - this.dataSource = new MatTableDataSource(this.transactionsData); - } + this.filterTransactions(this.hideReversedParam.value, !this.hideAccrualsParam.value); } hideReversed() { + this.filterTransactions(!this.hideReversedParam.value, this.hideAccrualsParam.value); + } + + filterTransactions(hideReversed: boolean, hideAccrual: boolean): void { let transactions: SavingsAccountTransaction[] = this.transactionsData; - if (!this.hideReversedParam.value) { - transactions = []; - this.transactionsData.forEach((t: SavingsAccountTransaction) => { - if (!t.reversed) { - transactions.push(t); - } + + if (hideAccrual || hideReversed) { + transactions = this.transactionsData.filter((t: SavingsAccountTransaction) => { + return (!(hideReversed && t.reversed) && !(hideAccrual && t.transactionType.accrual)); }); } this.dataSource = new MatTableDataSource(transactions); @@ -154,11 +138,13 @@ export class TransactionsTabComponent implements OnInit { savingsTransactionColor(transaction: SavingsAccountTransaction): string { if (transaction.reversed) { return 'strike'; - } - if (transaction.transfer) { + } else if (transaction.transfer) { return 'transfer'; + } else if (transaction.transactionType.accrual) { + return 'accrual'; + } else { + return ''; } - return ''; } undoTransaction(transactionData: SavingsAccountTransaction): void { diff --git a/src/app/savings/savings-account-view/transactions/view-transaction/savings-transaction-general-tab/savings-transaction-general-tab.component.html b/src/app/savings/savings-account-view/transactions/view-transaction/savings-transaction-general-tab/savings-transaction-general-tab.component.html index 40979d7e18..698dae5ba1 100644 --- a/src/app/savings/savings-account-view/transactions/view-transaction/savings-transaction-general-tab/savings-transaction-general-tab.component.html +++ b/src/app/savings/savings-account-view/transactions/view-transaction/savings-transaction-general-tab/savings-transaction-general-tab.component.html @@ -29,6 +29,8 @@
+
+
{{"labels.inputs.Id" | translate}} @@ -59,15 +61,15 @@
- {{ transactionData.currency.name }} + {{ transactionData.currency.displayLabel }}
- {{"labels.inputs.Amount" | translate}} + {{"labels.inputs.Amount" | translate }}
- {{ transactionData.amount | currency:transactionData.currency.code }} + {{ transactionData.amount | currency:transactionData.currency.code:'symbol-narrow':'1.2-2' }}
diff --git a/src/app/savings/savings-account-view/transactions/view-transaction/savings-transaction-general-tab/savings-transaction-general-tab.component.scss b/src/app/savings/savings-account-view/transactions/view-transaction/savings-transaction-general-tab/savings-transaction-general-tab.component.scss index fb9843d669..04440b80c3 100644 --- a/src/app/savings/savings-account-view/transactions/view-transaction/savings-transaction-general-tab/savings-transaction-general-tab.component.scss +++ b/src/app/savings/savings-account-view/transactions/view-transaction/savings-transaction-general-tab/savings-transaction-general-tab.component.scss @@ -1,3 +1,5 @@ +@import "assets/styles/helper"; + .container { max-width: 37rem; .content { @@ -12,3 +14,18 @@ } } } + +.active { + background-color: $status-active; + height: 4px; +} + +.linked { + background-color: $status-approved; + height: 4px; +} + +.undo { + background-color: $status-active-overdue; + height: 4px; +} \ No newline at end of file diff --git a/src/app/savings/savings-account-view/transactions/view-transaction/savings-transaction-general-tab/savings-transaction-general-tab.component.ts b/src/app/savings/savings-account-view/transactions/view-transaction/savings-transaction-general-tab/savings-transaction-general-tab.component.ts index bb55e84cc3..adb91e6bf7 100644 --- a/src/app/savings/savings-account-view/transactions/view-transaction/savings-transaction-general-tab/savings-transaction-general-tab.component.ts +++ b/src/app/savings/savings-account-view/transactions/view-transaction/savings-transaction-general-tab/savings-transaction-general-tab.component.ts @@ -71,4 +71,10 @@ export class SavingsTransactionGeneralTabComponent implements OnInit { }); } + transactionColor(): string { + if (this.transactionData.reversed) { + return 'undo'; + } + return 'active'; + } } diff --git a/src/app/savings/savings-account-view/transactions/view-transaction/view-transaction.component.html b/src/app/savings/savings-account-view/transactions/view-transaction/view-transaction.component.html index af16e478f7..89b7f8d64d 100644 --- a/src/app/savings/savings-account-view/transactions/view-transaction/view-transaction.component.html +++ b/src/app/savings/savings-account-view/transactions/view-transaction/view-transaction.component.html @@ -2,7 +2,7 @@
diff --git a/src/app/shared/accounting/view-savings-accounting-details/view-savings-accounting-details.component.ts b/src/app/shared/accounting/view-savings-accounting-details/view-savings-accounting-details.component.ts index 8d1e079973..2c031d73f3 100644 --- a/src/app/shared/accounting/view-savings-accounting-details/view-savings-accounting-details.component.ts +++ b/src/app/shared/accounting/view-savings-accounting-details/view-savings-accounting-details.component.ts @@ -31,4 +31,8 @@ export class ViewSavingsAccountingDetailsComponent implements OnInit { return false; } + getAccountingRuleName(value: string): string { + return this.accounting.getAccountRuleName(value); + } + } diff --git a/src/app/shared/form-dialog/form-dialog.component.html b/src/app/shared/form-dialog/form-dialog.component.html index c8e52a410f..be77b22159 100644 --- a/src/app/shared/form-dialog/form-dialog.component.html +++ b/src/app/shared/form-dialog/form-dialog.component.html @@ -9,6 +9,6 @@

{{ data.title }}

- - + + diff --git a/src/app/system/manage-jobs/manage-jobs.component.html b/src/app/system/manage-jobs/manage-jobs.component.html index 2bc68d48ab..6893441b1b 100644 --- a/src/app/system/manage-jobs/manage-jobs.component.html +++ b/src/app/system/manage-jobs/manage-jobs.component.html @@ -1,13 +1,13 @@ - + - + - + diff --git a/src/app/system/manage-jobs/manage-jobs.component.ts b/src/app/system/manage-jobs/manage-jobs.component.ts index 03da601107..125828f5ae 100644 --- a/src/app/system/manage-jobs/manage-jobs.component.ts +++ b/src/app/system/manage-jobs/manage-jobs.component.ts @@ -1,6 +1,7 @@ import { Component, OnInit } from '@angular/core'; import { MatTabChangeEvent } from '@angular/material/tabs'; import { SystemService } from '../system.service'; +import { TranslateService } from '@ngx-translate/core'; @Component({ selector: 'mifosx-manage-jobs', @@ -11,7 +12,8 @@ export class ManageJobsComponent implements OnInit { /** Process running flag */ isCatchUpRunning = true; - constructor(private systemService: SystemService) { } + constructor(private systemService: SystemService, + private translateService: TranslateService) { } ngOnInit(): void { } @@ -24,4 +26,8 @@ export class ManageJobsComponent implements OnInit { } } + title(label: string) { + return this.translateService.instant('labels.inputs.' + label); + } + } diff --git a/src/app/system/manage-jobs/scheduler-jobs/custom-parameters-popover/custom-parameters-table/custom-parameters-table.component.html b/src/app/system/manage-jobs/scheduler-jobs/custom-parameters-popover/custom-parameters-table/custom-parameters-table.component.html index 57163ebec3..3f2799f8dd 100644 --- a/src/app/system/manage-jobs/scheduler-jobs/custom-parameters-popover/custom-parameters-table/custom-parameters-table.component.html +++ b/src/app/system/manage-jobs/scheduler-jobs/custom-parameters-popover/custom-parameters-table/custom-parameters-table.component.html @@ -1,8 +1,8 @@
-

Job: {{ displayName }}

+

{{'labels.inputs.Job' | translate}}: {{ displayName }}

- + + - + + - + - - - - - - - - - - - - + + + + + + - + + - +
Parameter Name{{'labels.inputs.Parameter Name' | translate}} @@ -11,7 +11,7 @@

Job: {{ displayName }}

-
Parameter Value{{'labels.inputs.Parameter Value' | translate}} @@ -36,6 +36,6 @@

Job: {{ displayName }}

diff --git a/src/app/system/manage-jobs/scheduler-jobs/error-log-popover/error-log-popover.component.html b/src/app/system/manage-jobs/scheduler-jobs/error-log-popover/error-log-popover.component.html new file mode 100644 index 0000000000..8b10216f46 --- /dev/null +++ b/src/app/system/manage-jobs/scheduler-jobs/error-log-popover/error-log-popover.component.html @@ -0,0 +1,27 @@ +

{{'labels.inputs.Job Name' | translate}}:{{job.displayName}}

+ + + + + + + + + + + + + +
{{'labels.inputs.Start Time' | translate}}{{job.lastRunHistory.jobRunStartTime | datetimeFormat}}{{'labels.inputs.End Time' | translate}}{{job.lastRunHistory.jobRunEndTime | datetimeFormat}}
+
+ {{job.lastRunHistory.jobRunErrorLog}} +
+ +
+
+ + + + \ No newline at end of file diff --git a/src/app/system/manage-jobs/scheduler-jobs/error-log-popover/error-log-popover.component.scss b/src/app/system/manage-jobs/scheduler-jobs/error-log-popover/error-log-popover.component.scss new file mode 100644 index 0000000000..ea07187ae2 --- /dev/null +++ b/src/app/system/manage-jobs/scheduler-jobs/error-log-popover/error-log-popover.component.scss @@ -0,0 +1,47 @@ +.message { + height: auto; + font-weight: 500; +} + +tr { + padding-bottom: 10px; +} + +span:not(.note){ + font-size: .9rem; + line-height: 14px +} + +.note-text { + height: 7.95rem; + overflow: hidden; + display: inline-block; + position: relative; + text-align: left; +} + +.note-field:not(.show)::after { + content: '...'; + padding-left: .5rem; + position: absolute; + right: 0; + bottom: 0; +} + +.show { + overflow: visible; + text-overflow: none; + height: auto; +} + +button { + background: transparent; + font-size: small; + border: none; + padding: 0; + cursor: pointer; +} + +button:hover { + text-decoration: none; +} diff --git a/src/app/system/manage-jobs/scheduler-jobs/error-log-popover/error-log-popover.component.spec.ts b/src/app/system/manage-jobs/scheduler-jobs/error-log-popover/error-log-popover.component.spec.ts new file mode 100644 index 0000000000..fd39e880c2 --- /dev/null +++ b/src/app/system/manage-jobs/scheduler-jobs/error-log-popover/error-log-popover.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ErrorLogPopoverComponent } from './error-log-popover.component'; + +describe('ErrorLogPopoverComponent', () => { + let component: ErrorLogPopoverComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ErrorLogPopoverComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(ErrorLogPopoverComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/system/manage-jobs/scheduler-jobs/error-log-popover/error-log-popover.component.ts b/src/app/system/manage-jobs/scheduler-jobs/error-log-popover/error-log-popover.component.ts new file mode 100644 index 0000000000..bee565206b --- /dev/null +++ b/src/app/system/manage-jobs/scheduler-jobs/error-log-popover/error-log-popover.component.ts @@ -0,0 +1,34 @@ +import { Component, Inject, OnInit } from '@angular/core'; +import { SchedulerJob } from '../models/scheduler-job.model'; +import { MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { TranslateService } from '@ngx-translate/core'; + + +interface ErrorJobDataType { + job: SchedulerJob; +} + +@Component({ + selector: 'mifosx-error-log-popover', + templateUrl: './error-log-popover.component.html', + styleUrls: ['./error-log-popover.component.scss'] +}) +export class ErrorLogPopoverComponent implements OnInit { + show = false; + + /* Initialize Selected Job */ + job: SchedulerJob; + + constructor(@Inject(MAT_DIALOG_DATA) public data: ErrorJobDataType, + private translateService: TranslateService) { } + + ngOnInit(): void { + this.job = this.data.job; + } + + buttonLabel(): string { + const label: string = this.show ? 'Show less' : 'Show more'; + return this.translateService.instant('labels.buttons.' + label); + } + +} diff --git a/src/app/system/manage-jobs/scheduler-jobs/manage-scheduler-jobs.component.html b/src/app/system/manage-jobs/scheduler-jobs/manage-scheduler-jobs.component.html index 3fa22739f4..d2912dee9e 100644 --- a/src/app/system/manage-jobs/scheduler-jobs/manage-scheduler-jobs.component.html +++ b/src/app/system/manage-jobs/scheduler-jobs/manage-scheduler-jobs.component.html @@ -1,15 +1,15 @@
-

Scheduler Status:{{ schedulerActive ? 'Active' : 'Inactive' }} +

{{'labels.heading.Scheduler Status' | translate}}:{{ schedulerActive ? 'Active' : 'Inactive' }}

@@ -23,14 +23,18 @@

Scheduler Status:{{ schedulerActive -
+
+
@@ -53,12 +57,12 @@

Scheduler Status:{{ schedulerActive -

Name {{ job.displayName }} {{'labels.inputs.Name' | translate}} {{ job.displayName }} Active ? {{'labels.inputs.Active' | translate}}
Scheduler Status:{{ schedulerActive
Next Run {{ job.nextRunTime }} Previous Run {{ job.lastRunHistory.jobRunStartTime - }} Previous Run Status + {{'labels.inputs.Previous Run' | translate}}
+ + {{ job.lastRunHistory.jobRunStartTime | datetimeFormat}}
{{'labels.inputs.Next Run' | translate}} {{ job.nextRunTime | datetimeFormat }} Currently Running {{'labels.inputs.Currently Running' | translate}}
Scheduler Status:{{ schedulerActive -
Error Log {{'labels.inputs.Error Log' | translate}} - @@ -112,7 +112,7 @@

Scheduler Status:{{ schedulerActive

@@ -125,7 +125,7 @@

Scheduler Status:{{ schedulerActive
@@ -133,7 +133,7 @@

Template

@@ -141,10 +141,10 @@

Template

Scheduler Status. Button will be used to change the status.

- + (click)="popover.close();configurationWizardService.closeConfigWizard()">{{'labels.buttons.Close' | translate}} + + (click)="popover.close();showPopover(templateFilter, filter, 'bottom', true)">{{'labels.buttons.Next' | translate}}
@@ -152,11 +152,11 @@

Scheduler Status. Button will be used to change the status.

Search bar to filter jobs.

+ (click)="popover.close();configurationWizardService.closeConfigWizard()">{{'labels.buttons.Close' | translate}} + (click)="popover.close();showPopover(templateSchedulerStatus,schedulerStatus, 'bottom', true)">{{'labels.buttons.Back' | translate}} + (click)="popover.close();showPopover(templateJobsTable,jobsTable, 'top', true)">{{'labels.buttons.Next' | translate}}
@@ -166,9 +166,9 @@

List of all scheduled batch jobs

+ (click)="popover.close();configurationWizardService.closeConfigWizard()">{{'labels.buttons.Close' | translate}} - + (click)="popover.close();showPopover(templateFilter, filter, 'bottom', true)">{{'labels.buttons.Back' | translate}} +
diff --git a/src/app/system/manage-jobs/scheduler-jobs/manage-scheduler-jobs.component.scss b/src/app/system/manage-jobs/scheduler-jobs/manage-scheduler-jobs.component.scss index 86854a41cf..d859e6885b 100644 --- a/src/app/system/manage-jobs/scheduler-jobs/manage-scheduler-jobs.component.scss +++ b/src/app/system/manage-jobs/scheduler-jobs/manage-scheduler-jobs.component.scss @@ -39,3 +39,8 @@ table { .space-top { margin-top: 30px; } + +.cdk-column-displayName, +.mat-column-displayName { + flex: 0 0 5px !important; +} \ No newline at end of file diff --git a/src/app/system/manage-jobs/scheduler-jobs/manage-scheduler-jobs.component.ts b/src/app/system/manage-jobs/scheduler-jobs/manage-scheduler-jobs.component.ts index 91838f3714..3ab43cbeb7 100644 --- a/src/app/system/manage-jobs/scheduler-jobs/manage-scheduler-jobs.component.ts +++ b/src/app/system/manage-jobs/scheduler-jobs/manage-scheduler-jobs.component.ts @@ -17,6 +17,8 @@ import { ConfigurationWizardService } from '../../../configuration-wizard/config /** Custom Dialog Component */ import { NextStepDialogComponent } from '../../../configuration-wizard/next-step-dialog/next-step-dialog.component'; import { CustomParametersPopoverComponent } from './custom-parameters-popover/custom-parameters-popover.component'; +import { SchedulerJob } from './models/scheduler-job.model'; +import { ErrorLogPopoverComponent } from './error-log-popover/error-log-popover.component'; /** * Manage scheduler jobs component. @@ -33,7 +35,7 @@ export class ManageSchedulerJobsComponent implements OnInit, AfterViewInit { /** Scheduler data */ schedulerData: any; /** Columns to be displayed in manage scheduler jobs table. */ - displayedColumns: string[] = ['select', 'displayName', 'active', 'nextRunTime', 'previousRunTime', 'previousRunStatus', 'currentlyRunning', 'errorLog']; + displayedColumns: string[] = ['select', 'displayName', 'active', 'previousRunTime', 'currentlyRunning', 'nextRunTime', 'errorLog']; /** Data source for manage scheduler jobs table. */ dataSource: MatTableDataSource; /** Initialize Selection */ @@ -252,4 +254,14 @@ export class ManageSchedulerJobsComponent implements OnInit, AfterViewInit { }); } + showErrorLog(job: SchedulerJob): void { + if (job.lastRunHistory) { + this.dialog.open(ErrorLogPopoverComponent, { + data: { + job: job + } + }); + } + } + } diff --git a/src/app/system/manage-jobs/scheduler-jobs/models/scheduler-job.model.ts b/src/app/system/manage-jobs/scheduler-jobs/models/scheduler-job.model.ts new file mode 100644 index 0000000000..0e29effafc --- /dev/null +++ b/src/app/system/manage-jobs/scheduler-jobs/models/scheduler-job.model.ts @@ -0,0 +1,19 @@ +export interface SchedulerJob { + jobId: number; + displayName: string; + nextRunTime: Date; + cronExpression: string; + active: boolean; + currentlyRunning: boolean; + lastRunHistory: LastRunHistory; +} + +export interface LastRunHistory { + version: number; + jobRunStartTime: Date; + jobRunEndTime: Date; + status: string; + jobRunErrorMessage: string; + triggerType: string; + jobRunErrorLog: string; +} diff --git a/src/app/system/system.module.ts b/src/app/system/system.module.ts index 2a37eb24a3..b3f2067419 100644 --- a/src/app/system/system.module.ts +++ b/src/app/system/system.module.ts @@ -74,6 +74,7 @@ import { CobWorkflowComponent } from './manage-jobs/cob-workflow/cob-workflow.co import { LoanLockedComponent } from './manage-jobs/cob-workflow/loan-locked/loan-locked.component'; import { CustomParametersPopoverComponent } from './manage-jobs/scheduler-jobs/custom-parameters-popover/custom-parameters-popover.component'; import { CustomParametersTableComponent } from './manage-jobs/scheduler-jobs/custom-parameters-popover/custom-parameters-table/custom-parameters-table.component'; +import { ErrorLogPopoverComponent } from './manage-jobs/scheduler-jobs/error-log-popover/error-log-popover.component'; @NgModule({ imports: [ @@ -147,7 +148,8 @@ import { CustomParametersTableComponent } from './manage-jobs/scheduler-jobs/cus CobWorkflowComponent, LoanLockedComponent, CustomParametersPopoverComponent, - CustomParametersTableComponent + CustomParametersTableComponent, + ErrorLogPopoverComponent ], }) export class SystemModule { } diff --git a/src/assets/styles/_colours.scss b/src/assets/styles/_colours.scss index be0a07eef3..ad61dd3230 100644 --- a/src/assets/styles/_colours.scss +++ b/src/assets/styles/_colours.scss @@ -109,3 +109,20 @@ $error-log: #ffa726; height: 4px; cursor: none; } + +.strike { + text-decoration: line-through; + color: red; +} + +.transfer { + color: $status-transfer; +} + +.linked { + color: $status-approved; +} + +.accrual { + color: $msg-default; +} diff --git a/src/assets/translations/cs-CS.json b/src/assets/translations/cs-CS.json index 1d99df5a22..f1bf9fa09b 100644 --- a/src/assets/translations/cs-CS.json +++ b/src/assets/translations/cs-CS.json @@ -293,6 +293,7 @@ "Add Collateral": "Přidat kolaterál", "Add Column": "Přidat sloupec", "Add Currency": "Přidat měnu", + "Add Custom Parameters": "Přidat vlastní parametry", "Add Event": "Přidat událost", "Add Funds": "Přidat prostředky", "Add Group": "Přidat skupinu", @@ -468,6 +469,8 @@ "Setup Organization": "Nastavení organizace", "Setup Products": "Nastavení produktů", "Setup System": "Systém nastavení", + "Show more": "Zobrazit více", + "Show less": "Ukaž méně", "Staff": "Personál", "Staff Assignment History": "Historie přidělení zaměstnanců", "Subledger Account": "Účet vedlejší knihy", @@ -1163,6 +1166,7 @@ "Currently Running": "V současné době běží", "Custom Report Run Frequency": "Frekvence spouštění vlastní sestavy", "Custom Report Run Frequency (Days)": "Frekvence spouštění vlastního přehledu (dny)", + "COB": "COB", "DETAILS": "PODROBNOSTI", "Daily": "Denně", "Data Table": "Datová tabulka", @@ -1895,7 +1899,7 @@ "Savings Product": "Úsporný produkt", "Savings SubType": "Úsporný podtyp", "Savings transfers in suspense": "Převody úspor v nejistotě", - "Schedular Jobs": "Práce plánovače", + "Scheduler Jobs": "Práce plánovače", "Schedule Date": "Datum plánu", "Score": "Skóre", "Screen Report": "Zpráva o obrazovce", @@ -1939,7 +1943,7 @@ "Standing Instruction Type": "Typ trvalého pokynu", "Standing Instructions": "Stálé instrukce", "Start Date": "Datum zahájení", - "Start time": "Doba spuštění", + "Start Time": "Doba spuštění", "Started On": "Zahájeno dne", "Starting date": "Počáteční datum", "State / Province": "Stát / provincie", @@ -2089,6 +2093,7 @@ "Withhold Tax is Applicable": "Platí srážková daň", "Within Bank": "V rámci banky", "Working Days": "Pracovní dny", + "Workflow Jobs": "Workflow Jobs", "Write Off Date": "Datum odepsání", "Write off on": "Odepiš dál", "Write-off": "Odepsat", @@ -2369,6 +2374,7 @@ "Configurations": "Konfigurace", "Configurations page allows you to further customize": "Stránka Konfigurace vám umožňuje dále přizpůsobit způsob, jakým vaše organizace používá systém Mifos.", "Configure Maker Checker Tasks": "Konfigurace úloh Maker Checker", + "Copy": "kopírovat", "Copy Account Number": "Zkopírovat číslo účtu", "Create Account Number Preference": "Vytvořit předvolbu čísla účtu", "Create Accounting Closure": "Vytvořte účetní uzávěrku", diff --git a/src/assets/translations/de-DE.json b/src/assets/translations/de-DE.json index e12cd9f1fc..0f28a1bf4a 100644 --- a/src/assets/translations/de-DE.json +++ b/src/assets/translations/de-DE.json @@ -293,6 +293,7 @@ "Add Collateral": "Sicherheiten hinzufügen", "Add Column": "Spalte hinzufügen", "Add Currency": "Währung hinzufügen", + "Add Custom Parameters": "Fügen Sie benutzerdefinierte Parameter hinzu", "Add Event": "Ereignis hinzufügen", "Add Funds": "Geld hinzufügen", "Add Group": "Gruppe hinzufügen", @@ -468,6 +469,8 @@ "Setup Organization": "Organisation einrichten", "Setup Products": "Setup-Produkte", "Setup System": "Setup-System", + "Show more": "Zeig mehr", + "Show less": "Zeige weniger", "Staff": "Personal", "Staff Assignment History": "Verlauf der Personalzuweisungen", "Subledger Account": "Nebenbuchkonto", @@ -1163,6 +1166,7 @@ "Currently Running": "Momentan laufend", "Custom Report Run Frequency": "Benutzerdefinierte Berichtsausführungshäufigkeit", "Custom Report Run Frequency (Days)": "Häufigkeit der Ausführung benutzerdefinierter Berichte (Tage)", + "COB": "COB", "DETAILS": "EINZELHEITEN", "Daily": "Täglich", "Data Table": "Datentabelle", @@ -1895,7 +1899,7 @@ "Savings Product": "Sparprodukt", "Savings SubType": "Untertyp „Einsparungen“.", "Savings transfers in suspense": "Spartransfers in der Schwebe", - "Schedular Jobs": "Scheduler-Jobs", + "Scheduler Jobs": "Scheduler-Jobs", "Schedule Date": "Plandatum", "Score": "Punktzahl", "Screen Report": "Bildschirmbericht", @@ -1939,7 +1943,7 @@ "Standing Instruction Type": "Ständiger Instruktionstyp", "Standing Instructions": "Ständige Anweisungen", "Start Date": "Startdatum", - "Start time": "Startzeit", + "Start Time": "Startzeit", "Started On": "Begann am", "Starting date": "Anfangsdatum", "State / Province": "Staat/Provinz", @@ -2089,6 +2093,7 @@ "Withhold Tax is Applicable": "Es fällt eine Quellensteuer an", "Within Bank": "Innerhalb der Bank", "Working Days": "Arbeitstage", + "Workflow Jobs": "Workflow Jobs", "Write Off Date": "Abschreibungsdatum", "Write off on": "Abschreiben am", "Write-off": "Abschreiben", @@ -2368,6 +2373,7 @@ "Configurations": "Konfigurationen", "Configurations page allows you to further customize": "Auf der Seite „Konfigurationen“ können Sie die Art und Weise, wie Ihre Organisation das Mifos-System nutzt, weiter anpassen.", "Configure Maker Checker Tasks": "Konfigurieren Sie Maker Checker-Aufgaben", + "Copy": "Kopieren", "Copy Account Number": "Kontonummer kopieren", "Create Account Number Preference": "Kontonummernpräferenz erstellen", "Create Accounting Closure": "Erstellen Sie einen Buchhaltungsabschluss", diff --git a/src/assets/translations/en-US.json b/src/assets/translations/en-US.json index 47ca57da89..858eb668de 100644 --- a/src/assets/translations/en-US.json +++ b/src/assets/translations/en-US.json @@ -293,6 +293,7 @@ "Add Collateral": "Add Collateral", "Add Column": "Add Column", "Add Currency": "Add Currency", + "Add Custom Parameters": "Add Custom Parameters", "Add Event": "Add Event", "Add Funds": "Add Funds", "Add Group": "Add Group", @@ -468,6 +469,8 @@ "Setup Organization": "Setup Organization", "Setup Products": "Setup Products", "Setup System": "Setup System", + "Show less": "Show less", + "Show more": "Show more", "Staff": "Staff", "Staff Assignment History": "Staff Assignment History", "Subledger Account": "Subledger Account", @@ -1162,6 +1165,7 @@ "Currently Running": "Currently Running", "Custom Report Run Frequency": "Custom Report Run Frequency", "Custom Report Run Frequency (Days)": "Custom Report Run Frequency (Days)", + "COB": "COB", "DETAILS": "DETAILS", "Daily": "Daily", "Data Table": "Data Table", @@ -1894,7 +1898,7 @@ "Savings Product": "Savings Product", "Savings SubType": "Savings SubType", "Savings transfers in suspense": "Savings transfers in suspense", - "Schedular Jobs": "Scheduler Jobs", + "Scheduler Jobs": "Scheduler Jobs", "Schedule Date": "Schedule Date", "Score": "Score", "Screen Report": "Screen Report", @@ -1938,7 +1942,7 @@ "Standing Instruction Type": "Standing Instruction Type", "Standing Instructions": "Standing Instructions", "Start Date": "Start Date", - "Start time": "Start time", + "Start Time": "Start Time", "Started On": "Started On", "Starting date": "Starting date", "State / Province": "State / Province", @@ -2088,6 +2092,7 @@ "Withhold Tax is Applicable": "Withhold Tax is Applicable", "Within Bank": "Within Bank", "Working Days": "Working Days", + "Workflow Jobs": "Workflow Jobs", "Write Off Date": "Write Off Date", "Write off on": "Write off on", "Write-off": "Write-off", @@ -2368,6 +2373,7 @@ "Configurations": "Configurations", "Configurations page allows you to further customize": "The Configurations page allows you to further customize the way your organization uses the Mifos system.", "Configure Maker Checker Tasks": "Configure Maker Checker Tasks", + "Copy": "Copy", "Copy Account Number": "Copy Account Number", "Create Account Number Preference": "Create Account Number Preference", "Create Accounting Closure": "Create Accounting Closure", diff --git a/src/assets/translations/es-MX.json b/src/assets/translations/es-MX.json index 2a8fc8419f..c01f8ccf8e 100644 --- a/src/assets/translations/es-MX.json +++ b/src/assets/translations/es-MX.json @@ -293,6 +293,7 @@ "Add Collateral": "Agregar Garantía", "Add Column": "Añadir Columna", "Add Currency": "Agregar Moneda", + "Add Custom Parameters": "Agregar parámetros especiales", "Add Event": "Añadir Evento", "Add Funds": "Añadir Fondos", "Add Group": "Añadir Grupo", @@ -468,6 +469,8 @@ "Setup Organization": "Configuración de Organización", "Setup Products": "Configuración de Productos", "Setup System": "Configuración de Sistema", + "Show more": "Mostrar más", + "Show less": "Muestra menos", "Staff": "Personal", "Staff Assignment History": "Historial de asignaciones de personal", "Subledger Account": "Cuenta auxiliar", @@ -852,7 +855,7 @@ "Summary Details": "Detalles resumidos", "Tax Components": "Componentes tributarios", "Tax Group": "Grupo Fiscal", - "Teller / Cashier Management": "Gestión de cajeros/cajeros", + "Teller / Cashier Management": "Gestión de ventanillas y cajeros", "Template": "Plantilla", "Template Message": "Mensaje de plantilla", "Template Parameters": "Parámetros de plantilla", @@ -1012,7 +1015,7 @@ "Base Price": "Precio base", "Base Percentage": "Porcentaje de base", "Beneficiary": "Beneficiario", - "Branch": "Rama", + "Branch": "Sucursal", "Branch Office": "Sucursal", "Breakdown": "Descomponer", "Business Date": "Fecha del sistema", @@ -1163,6 +1166,7 @@ "Currently Running": "Actualmente en ejecución", "Custom Report Run Frequency": "Frecuencia de ejecución de reportes personalizados", "Custom Report Run Frequency (Days)": "Frecuencia de ejecución de reportes personalizados (días)", + "COB": "Cierre de Día", "DETAILS": "DETALLES", "Daily": "Diario", "Data Table": "Tabla de datos", @@ -1217,7 +1221,7 @@ "Deposits Frequency": "Frecuencia de depósitos", "Deposits till Date": "Depósitos a la fecha", "Description": "Descripción", - "Description/Notes": "Descripción/Notas", + "Description/Notes": "Descripción / Notas", "Destination": "Destino", "Destination Group": "Grupo de destino", "Destination Group Details": "Detalles del grupo de destino", @@ -1621,7 +1625,7 @@ "Name": "Nombre", "Name Decorated": "Nombre decorado", "Name of the Organization": "Nombre de la organización", - "Net Cash": "El efectivo neto", + "Net Cash": "Efectivo neto", "New Interest Rate": "Nueva tasa de interés", "Next Meeting Date": "Fecha de la próxima reunión", "Next Meeting on": "Próxima reunión el", @@ -1895,7 +1899,7 @@ "Savings Product": "Producto de Ahorro", "Savings SubType": "Subtipo de ahorro", "Savings transfers in suspense": "Transferencias de ahorro en vilo", - "Schedular Jobs": "Procesos calendarizados", + "Scheduler Jobs": "Procesos calendarizados", "Schedule Date": "Fecha de programacion", "Score": "Puntos", "Screen Report": "Reporte de pantalla", @@ -1939,7 +1943,7 @@ "Standing Instruction Type": "Tipo de instrucción permanente", "Standing Instructions": "Instrucciones permanentes", "Start Date": "Fecha de inicio", - "Start time": "Hora de inicio", + "Start Time": "Hora de inicio", "Started On": "Iniciado en", "Starting date": "Fecha de inicio", "State / Province": "Estado o Provincia", @@ -1969,7 +1973,7 @@ "Tag": "Etiqueta", "Tax Group": "Grupo de Impuesto", "Tax-Component Name": "Nombre del componente de impuesto", - "Teller": "Cajero", + "Teller": "Ventanilla", "Teller Name": "Nombre del cajero", "Template Message": "Mensaje de plantilla", "Tenant": "Entidad", @@ -2089,6 +2093,7 @@ "Withhold Tax is Applicable": "Se aplica la retención de impuestos", "Within Bank": "Dentro del banco", "Working Days": "Días laborables", + "Workflow Jobs": "Flujos de Procesos", "Write Off Date": "Fecha de cancelación", "Write off on": "Cancelar en", "Write-off": "Cancelaciones", @@ -2369,6 +2374,7 @@ "Configurations": "Configuraciones", "Configurations page allows you to further customize": "La página Configuraciones le permite personalizar aún más la forma en que su organización utiliza el sistema Mifos.", "Configure Maker Checker Tasks": "Configurar tareas de Realizador Aprobador", + "Copy": "Copiar", "Copy Account Number": "Copiar número de cuenta", "Create Account Number Preference": "Crear preferencia de número de cuenta", "Create Accounting Closure": "Crear cierre contable", diff --git a/src/assets/translations/fr-FR.json b/src/assets/translations/fr-FR.json index d63599f0a6..1449d8d627 100644 --- a/src/assets/translations/fr-FR.json +++ b/src/assets/translations/fr-FR.json @@ -293,6 +293,7 @@ "Add Collateral": "Ajouter une garantie", "Add Column": "Ajouter une colonne", "Add Currency": "Ajouter une devise", + "Add Custom Parameters": "Ajouter des paramètres personnalisés", "Add Event": "Ajouter un évènement", "Add Funds": "Ajouter des fonds", "Add Group": "Ajouter un groupe", @@ -468,6 +469,8 @@ "Setup Organization": "Organisation de configuration", "Setup Products": "Produits d'installation", "Setup System": "Système de configuration", + "Show more": "Montre plus", + "Show less": "Montrer moins", "Staff": "Personnel", "Staff Assignment History": "Historique des affectations du personnel", "Subledger Account": "Compte auxiliaire", @@ -1163,6 +1166,7 @@ "Currently Running": "Actuellement en cours d'exécution", "Custom Report Run Frequency": "Fréquence d'exécution du rapport personnalisé", "Custom Report Run Frequency (Days)": "Fréquence d'exécution du rapport personnalisé (jours)", + "COB": "COB", "DETAILS": "DÉTAILS", "Daily": "Tous les jours", "Data Table": "Tableau de données", @@ -1895,7 +1899,7 @@ "Savings Product": "Produit d'épargne", "Savings SubType": "Sous-type d'épargne", "Savings transfers in suspense": "Les transferts d’épargne en suspens", - "Schedular Jobs": "Travaux de planificateur", + "Scheduler Jobs": "Travaux de planificateur", "Schedule Date": "Date prévue", "Score": "Score", "Screen Report": "Rapport d'écran", @@ -1939,7 +1943,7 @@ "Standing Instruction Type": "Type d'instruction permanente", "Standing Instructions": "Instructions permanentes", "Start Date": "Date de début", - "Start time": "Heure de début", + "Start Time": "Heure de début", "Started On": "Commencé le", "Starting date": "Date de début", "State / Province": "État/Province", @@ -2089,6 +2093,7 @@ "Withhold Tax is Applicable": "La retenue à la source est applicable", "Within Bank": "Au sein de la banque", "Working Days": "Jours de travail", + "Workflow Jobs": "Tâches de flux de travail", "Write Off Date": "Date de radiation", "Write off on": "Radier sur", "Write-off": "Radier", @@ -2369,6 +2374,7 @@ "Configurations": "Configurations", "Configurations page allows you to further customize": "La page Configurations vous permet de personnaliser davantage la façon dont votre organisation utilise le système Mifos.", "Configure Maker Checker Tasks": "Configurer les tâches de Maker Checker", + "Copy": "Copie", "Copy Account Number": "Copier le numéro de compte", "Create Account Number Preference": "Créer une préférence de numéro de compte", "Create Accounting Closure": "Créer une clôture comptable", diff --git a/src/assets/translations/it-IT.json b/src/assets/translations/it-IT.json index 823cb55f76..711a761a38 100644 --- a/src/assets/translations/it-IT.json +++ b/src/assets/translations/it-IT.json @@ -293,6 +293,7 @@ "Add Collateral": "Aggiungi garanzia", "Add Column": "Aggiungi colonna", "Add Currency": "Aggiungi valuta", + "Add Custom Parameters": "Aggiungi parametri personalizzati", "Add Event": "Aggiungi evento", "Add Funds": "Aggiungere fondi", "Add Group": "Aggiungere gruppo", @@ -468,6 +469,8 @@ "Setup Organization": "Configurazione dell'organizzazione", "Setup Products": "Imposta prodotti", "Setup System": "Sistema di installazione", + "Show more": "Mostra di più", + "Show less": "Mostra meno", "Staff": "Personale", "Staff Assignment History": "Cronologia delle assegnazioni del personale", "Subledger Account": "Conto secondario", @@ -1163,6 +1166,7 @@ "Currently Running": "Attualmente in esecuzione", "Custom Report Run Frequency": "Frequenza di esecuzione del rapporto personalizzato", "Custom Report Run Frequency (Days)": "Frequenza di esecuzione del rapporto personalizzato (giorni)", + "COB": "COB", "DETAILS": "DETTAGLI", "Daily": "Quotidiano", "Data Table": "Tabella dati", @@ -1895,7 +1899,7 @@ "Savings Product": "Prodotto di risparmio", "Savings SubType": "Sottotipo di risparmio", "Savings transfers in suspense": "Bonifici di risparmio in sospeso", - "Schedular Jobs": "Lavori di pianificazione", + "Scheduler Jobs": "Lavori di pianificazione", "Schedule Date": "Data di pianificazione", "Score": "Punto", "Screen Report": "Rapporto sullo schermo", @@ -1939,7 +1943,7 @@ "Standing Instruction Type": "Tipo di istruzione permanente", "Standing Instructions": "Istruzioni per la permanenza", "Start Date": "Data d'inizio", - "Start time": "Ora di inizio", + "Start Time": "Ora di inizio", "Started On": "Iniziato il", "Starting date": "Data di inizio", "State / Province": "Stato/Provincia", @@ -2089,6 +2093,7 @@ "Withhold Tax is Applicable": "È applicabile la ritenuta d'acconto", "Within Bank": "All'interno della Banca", "Working Days": "Giorni lavorativi", + "Workflow Jobs": "Lavori del flusso di lavoro", "Write Off Date": "Cancellare la data", "Write off on": "Cancellare", "Write-off": "Cancellare", @@ -2369,6 +2374,7 @@ "Configurations": "Configurazioni", "Configurations page allows you to further customize": "La pagina Configurazioni ti consente di personalizzare ulteriormente il modo in cui la tua organizzazione utilizza il sistema Mifos.", "Configure Maker Checker Tasks": "Configura le attività di Maker Checker", + "Copy": "copia", "Copy Account Number": "Copia il numero di conto", "Create Account Number Preference": "Crea preferenza numero di conto", "Create Accounting Closure": "Creare la chiusura contabile", diff --git a/src/assets/translations/ko-KO.json b/src/assets/translations/ko-KO.json index 2419cdc7c8..a9d0bdd540 100644 --- a/src/assets/translations/ko-KO.json +++ b/src/assets/translations/ko-KO.json @@ -293,6 +293,7 @@ "Add Collateral": "담보 추가", "Add Column": "열 추가", "Add Currency": "통화 추가", + "Add Custom Parameters": "맞춤 매개변수 추가", "Add Event": "이벤트 추가", "Add Funds": "자금 추가", "Add Group": "그룹 추가", @@ -468,6 +469,8 @@ "Setup Organization": "조직 설정", "Setup Products": "설치 제품", "Setup System": "설정 시스템", + "Show more": "자세히보기", + "Show less": "간략히 보기", "Staff": "직원", "Staff Assignment History": "직원 배정 내역", "Subledger Account": "보조원장 계정", @@ -1164,6 +1167,7 @@ "Currently Running": "현재 실행 중", "Custom Report Run Frequency": "사용자 정의 보고서 실행 빈도", "Custom Report Run Frequency (Days)": "사용자 정의 보고서 실행 빈도(일)", + "COB": "사업 종료", "DETAILS": "세부", "Daily": "일일", "Data Table": "데이터 테이블", @@ -1896,7 +1900,7 @@ "Savings Product": "저축상품", "Savings SubType": "저축 하위 유형", "Savings transfers in suspense": "서스펜스 상태의 저축 이체", - "Schedular Jobs": "스케줄러 작업", + "Scheduler Jobs": "스케줄러 작업", "Schedule Date": "일정 날짜", "Score": "점수", "Screen Report": "화면보고", @@ -1940,7 +1944,7 @@ "Standing Instruction Type": "상임 지시 유형", "Standing Instructions": "기립 지침", "Start Date": "시작일", - "Start time": "시작 시간", + "Start Time": "시작 시간", "Started On": "시작 날짜", "Starting date": "시작 날짜", "State / Province": "주/도", @@ -2090,6 +2094,7 @@ "Withhold Tax is Applicable": "원천징수세 적용 가능", "Within Bank": "은행 내", "Working Days": "일하는 날", + "Workflow Jobs": "워크플로 작업", "Write Off Date": "상각 날짜", "Write off on": "에 상각", "Write-off": "상각", @@ -2369,6 +2374,7 @@ "Configurations": "구성", "Configurations page allows you to further customize": "구성 페이지에서는 조직이 Mifos 시스템을 사용하는 방식을 추가로 사용자 정의할 수 있습니다.", "Configure Maker Checker Tasks": "Maker Checker 작업 구성", + "Copy": "복사", "Copy Account Number": "계좌번호 복사", "Create Account Number Preference": "계좌 번호 기본 설정 생성", "Create Accounting Closure": "회계 마감 생성", diff --git a/src/assets/translations/lt-LT.json b/src/assets/translations/lt-LT.json index 32f4837a98..1a77ab5aa9 100644 --- a/src/assets/translations/lt-LT.json +++ b/src/assets/translations/lt-LT.json @@ -293,6 +293,7 @@ "Add Collateral": "Pridėti užstatą", "Add Column": "Pridėti stulpelį", "Add Currency": "Pridėti valiutą", + "Add Custom Parameters": "Pridėti pasirinktinius parametrus", "Add Event": "Pridėti įvykį", "Add Funds": "Pridėti lėšų", "Add Group": "Pridėti grupę", @@ -468,6 +469,8 @@ "Setup Organization": "Nustatykite organizaciją", "Setup Products": "Sąrankos produktai", "Setup System": "Sistemos sąranka", + "Show more": "Rodyti daugiau", + "Show less": "Rodyti mažiau", "Staff": "Personalas", "Staff Assignment History": "Darbuotojų paskyrimo istorija", "Subledger Account": "Subledger sąskaita", @@ -1163,6 +1166,7 @@ "Currently Running": "Šiuo metu veikia", "Custom Report Run Frequency": "Individualizuotos ataskaitos vykdymo dažnis", "Custom Report Run Frequency (Days)": "Tinkintos ataskaitos vykdymo dažnis (dienomis)", + "COB": "Verslo uždarymas", "DETAILS": "DUOMENYS", "Daily": "Kasdien", "Data Table": "Duomenų lentelė", @@ -1895,7 +1899,7 @@ "Savings Product": "Taupymo produktas", "Savings SubType": "Taupymo potipis", "Savings transfers in suspense": "Taupymo pervedimai nežinioje", - "Schedular Jobs": "Planuotojo darbai", + "Scheduler Jobs": "Planuotojo darbai", "Schedule Date": "Tvarkaraštis Data", "Score": "Rezultatas", "Screen Report": "Ekrano ataskaita", @@ -1939,7 +1943,7 @@ "Standing Instruction Type": "Stovimos instrukcijos tipas", "Standing Instructions": "Stovėjimo instrukcijos", "Start Date": "Pradžios data", - "Start time": "Pradžios laikas", + "Start Time": "Pradžios laikas", "Started On": "Prasidėjo", "Starting date": "Pradžios data", "State / Province": "Valstybė / provincija", @@ -2089,6 +2093,7 @@ "Withhold Tax is Applicable": "Taikomas išskaičiuojamasis mokestis", "Within Bank": "Banko viduje", "Working Days": "Darbo dienos", + "Workflow Jobs": "Darbo eiga Darbai", "Write Off Date": "Nurašymo data", "Write off on": "Nurašyti", "Write-off": "Nusirašinėti", @@ -2369,6 +2374,7 @@ "Configurations": "Konfigūracijos", "Configurations page allows you to further customize": "Puslapyje Konfigūracijos galite toliau tinkinti, kaip jūsų organizacija naudoja „Mifos“ sistemą.", "Configure Maker Checker Tasks": "Konfigūruokite Maker Checker užduotis", + "Copy": "Kopijuoti", "Copy Account Number": "Nukopijuokite sąskaitos numerį", "Create Account Number Preference": "Sukurkite paskyros numerio nuostatą", "Create Accounting Closure": "Sukurti apskaitos uždarymą", diff --git a/src/assets/translations/lv-LV.json b/src/assets/translations/lv-LV.json index 7a81fb535a..f9b4b6e636 100644 --- a/src/assets/translations/lv-LV.json +++ b/src/assets/translations/lv-LV.json @@ -293,6 +293,7 @@ "Add Collateral": "Pievienot nodrošinājumu", "Add Column": "Pievienot kolonnu", "Add Currency": "Pievienot valūtu", + "Add Custom Parameters": "Pievienojiet pielāgotus parametrus", "Add Event": "Pievienot notikumu", "Add Funds": "Pievienot līdzekļus", "Add Group": "Pievienot grupu", @@ -468,6 +469,8 @@ "Setup Organization": "Organizācijas iestatīšana", "Setup Products": "Iestatīšanas produkti", "Setup System": "Uzstādīšanas sistēma", + "Show more": "Parādīt vairāk", + "Show less": "Rādīt mazāk", "Staff": "Personāls", "Staff Assignment History": "Personāla norīkošanas vēsture", "Subledger Account": "Subledger konts", @@ -1163,6 +1166,7 @@ "Currently Running": "Pašlaik darbojas", "Custom Report Run Frequency": "Pielāgota pārskata izpildes biežums", "Custom Report Run Frequency (Days)": "Pielāgota pārskata izpildes biežums (dienas)", + "COB": "Biznesa slēgšana", "DETAILS": "INFORMĀCIJAS", "Daily": "Ikdienas", "Data Table": "Datu tabula", @@ -1895,7 +1899,7 @@ "Savings Product": "Uzkrājuma produkts", "Savings SubType": "Ietaupījumu apakštips", "Savings transfers in suspense": "Uzkrājumu pārskaitījumi šaubās", - "Schedular Jobs": "Plānotāja darbi", + "Scheduler Jobs": "Plānotāja darbi", "Schedule Date": "Grafika datums", "Score": "Rezultāts", "Screen Report": "Ekrāna ziņojums", @@ -1939,7 +1943,7 @@ "Standing Instruction Type": "Pastāvīgās instrukcijas veids", "Standing Instructions": "Stāvošās instrukcijas", "Start Date": "Sākuma datums", - "Start time": "Sākuma laiks", + "Start Time": "Sākuma laiks", "Started On": "Sākās", "Starting date": "Sākuma datums", "State / Province": "Valsts/province", @@ -2089,6 +2093,7 @@ "Withhold Tax is Applicable": "Ir piemērojams ieturētais nodoklis", "Within Bank": "Bankas ietvaros", "Working Days": "Darba dienas", + "Workflow Jobs": "Darbplūsmas darbi", "Write Off Date": "Norakstīšanas datums", "Write off on": "Norakstīt tālāk", "Write-off": "Norakstīt", @@ -2369,6 +2374,7 @@ "Configurations": "Konfigurācijas", "Configurations page allows you to further customize": "Lapa Konfigurācijas ļauj vēl vairāk pielāgot veidu, kā jūsu organizācija izmanto Mifos sistēmu.", "Configure Maker Checker Tasks": "Konfigurējiet Maker Checker uzdevumus", + "Copy": "Kopēt", "Copy Account Number": "Kopējiet konta numuru", "Create Account Number Preference": "Izveidojiet konta numura preferenci", "Create Accounting Closure": "Izveidojiet grāmatvedības slēgšanu", diff --git a/src/assets/translations/ne-NE.json b/src/assets/translations/ne-NE.json index 6fbbc05c9b..89e6f73ac3 100644 --- a/src/assets/translations/ne-NE.json +++ b/src/assets/translations/ne-NE.json @@ -293,6 +293,7 @@ "Add Collateral": "संपार्श्विक थप्नुहोस्", "Add Column": "स्तम्भ थप्नुहोस्", "Add Currency": "मुद्रा थप्नुहोस्", + "Add Custom Parameters": "अनुकूलन प्यारामिटरहरू थप्नुहोस्", "Add Event": "घटना थप्नुहोस्", "Add Funds": "कोष थप्नुहोस्", "Add Group": "समूह थप्नुहोस्", @@ -468,6 +469,8 @@ "Setup Organization": "स्थापना संगठन", "Setup Products": "उत्पादनहरू सेटअप गर्नुहोस्", "Setup System": "सेटअप प्रणाली", + "Show more": "थप देखाउनुहोस्", + "Show less": "कम देखाउनुहोस्", "Staff": "कर्मचारी", "Staff Assignment History": "कर्मचारी असाइनमेन्ट इतिहास", "Subledger Account": "Subledger खाता", @@ -1163,6 +1166,7 @@ "Currently Running": "हाल चलिरहेको छ", "Custom Report Run Frequency": "अनुकूलन रिपोर्ट रन आवृत्ति", "Custom Report Run Frequency (Days)": "अनुकूलन रिपोर्ट रन आवृत्ति (दिन)", + "COB": "व्यापार बन्द", "DETAILS": "विवरणहरू", "Daily": "दैनिक", "Data Table": "डाटा तालिका", @@ -1895,7 +1899,7 @@ "Savings Product": "बचत उत्पादन", "Savings SubType": "बचत उपप्रकार", "Savings transfers in suspense": "सस्पेन्समा बचत स्थानान्तरण", - "Schedular Jobs": "अनुसूचित कार्यहरू", + "Scheduler Jobs": "अनुसूचित कार्यहरू", "Schedule Date": "तालिका मिति", "Score": "स्कोर", "Screen Report": "स्क्रिन रिपोर्ट", @@ -1939,7 +1943,7 @@ "Standing Instruction Type": "स्थायी निर्देशन प्रकार", "Standing Instructions": "स्थायी निर्देशनहरू", "Start Date": "सुरू मिति", - "Start time": "सुरु समय", + "Start Time": "सुरु समय", "Started On": "मा सुरु भयो", "Starting date": "सुरु हुने मिति", "State / Province": "राज्य / प्रदेश", @@ -2089,6 +2093,7 @@ "Withhold Tax is Applicable": "रोक लगाउने कर लागू हुन्छ", "Within Bank": "बैंक भित्र", "Working Days": "काम गर्ने दिनहरू", + "Workflow Jobs": "कार्यप्रवाह कार्यहरू", "Write Off Date": "बन्द मिति लेख्नुहोस्", "Write off on": "मा लेख्नुहोस्", "Write-off": "राइट-अफ", @@ -2369,6 +2374,7 @@ "Configurations": "कन्फिगरेसनहरू", "Configurations page allows you to further customize": "कन्फिगरेसन पृष्ठले तपाइँलाई तपाइँको संगठनले Mifos प्रणाली प्रयोग गर्ने तरिकालाई थप अनुकूलन गर्न अनुमति दिन्छ।", "Configure Maker Checker Tasks": "मेकर जाँचकर्ता कार्यहरू कन्फिगर गर्नुहोस्", + "Copy": "कापी", "Copy Account Number": "खाता नम्बर प्रतिलिपि गर्नुहोस्", "Create Account Number Preference": "खाता नम्बर प्राथमिकता सिर्जना गर्नुहोस्", "Create Accounting Closure": "लेखा बन्द सिर्जना गर्नुहोस्", diff --git a/src/assets/translations/pt-PT.json b/src/assets/translations/pt-PT.json index d40e4dd572..d89c475a8d 100644 --- a/src/assets/translations/pt-PT.json +++ b/src/assets/translations/pt-PT.json @@ -293,6 +293,7 @@ "Add Collateral": "Adicionar garantia", "Add Column": "Adicionar coluna", "Add Currency": "Adicionar moeda", + "Add Custom Parameters": "Adicionar parâmetros personalizados", "Add Event": "Adicionar Evento", "Add Funds": "Adicionar fundos", "Add Group": "Adicionar grupo", @@ -468,6 +469,8 @@ "Setup Organization": "Configurar organização", "Setup Products": "Configurar produtos", "Setup System": "Sistema de configuração", + "Show more": "Mostre mais", + "Show less": "Mostre menos", "Staff": "Funcionários", "Staff Assignment History": "Histórico de Atribuição de Pessoal", "Subledger Account": "Conta auxiliar", @@ -1163,6 +1166,7 @@ "Currently Running": "Atualmente em execução", "Custom Report Run Frequency": "Frequência de execução de relatório personalizado", "Custom Report Run Frequency (Days)": "Frequência de execução de relatório personalizado (dias)", + "COB": "Fechamento do negócio", "DETAILS": "DETALHES", "Daily": "Diário", "Data Table": "Tabela de dados", @@ -1895,7 +1899,7 @@ "Savings Product": "Produto de poupança", "Savings SubType": "Subtipo de poupança", "Savings transfers in suspense": "Transferências de poupança em suspense", - "Schedular Jobs": "Trabalhos de agendador", + "Scheduler Jobs": "Trabalhos de agendador", "Schedule Date": "Data do agendamento", "Score": "Pontuação", "Screen Report": "Relatório de tela", @@ -1939,7 +1943,7 @@ "Standing Instruction Type": "Tipo de instrução permanente", "Standing Instructions": "Instruções permanentes", "Start Date": "Data de início", - "Start time": "Hora de início", + "Start Time": "Hora de início", "Started On": "Começou em", "Starting date": "Data de início", "State / Province": "Estado/Província", @@ -2089,6 +2093,7 @@ "Withhold Tax is Applicable": "Imposto retido na fonte é aplicável", "Within Bank": "Dentro do banco", "Working Days": "Dias úteis", + "Workflow Jobs": "Fluxo de trabalho", "Write Off Date": "Data de baixa", "Write off on": "Anote em", "Write-off": "Eliminar", @@ -2369,6 +2374,7 @@ "Configurations": "Configurações", "Configurations page allows you to further customize": "A página Configurações permite personalizar ainda mais a forma como sua organização usa o sistema Mifos.", "Configure Maker Checker Tasks": "Configurar tarefas do Maker Checker", + "Copy": "Cópia de", "Copy Account Number": "Copiar número da conta", "Create Account Number Preference": "Criar preferência de número de conta", "Create Accounting Closure": "Criar encerramento contábil", diff --git a/src/assets/translations/sw-SW.json b/src/assets/translations/sw-SW.json index 2f6e559b67..42656c4c5b 100644 --- a/src/assets/translations/sw-SW.json +++ b/src/assets/translations/sw-SW.json @@ -293,6 +293,7 @@ "Add Collateral": "Ongeza Dhamana", "Add Column": "Ongeza Safu", "Add Currency": "Ongeza Sarafu", + "Add Custom Parameters": "Ongeza Vigezo Maalum", "Add Event": "Ongeza Tukio", "Add Funds": "Ongeza Fedha", "Add Group": "Ongeza Kikundi", @@ -468,6 +469,8 @@ "Setup Organization": "Shirika la Kuanzisha", "Setup Products": "Weka Bidhaa", "Setup System": "Kuanzisha Mfumo", + "Show more": "Onyesha zaidi", + "Show less": "Onyesha kidogo", "Staff": "Wafanyakazi", "Staff Assignment History": "Historia ya Kazi ya Wafanyakazi", "Subledger Account": "Akaunti ya Subleja", @@ -1163,6 +1166,7 @@ "Currently Running": "Inaendesha Kwa Sasa", "Custom Report Run Frequency": "Marudio ya Uendeshaji wa Ripoti Maalum", "Custom Report Run Frequency (Days)": "Marudio ya Uendeshaji wa Ripoti Maalum (Siku)", + "COB": "Funga ya Biashara", "DETAILS": "MAELEZO", "Daily": "Kila siku", "Data Table": "Jedwali la Data", @@ -1895,7 +1899,7 @@ "Savings Product": "Bidhaa ya Akiba", "Savings SubType": "Aina ndogo ya Akiba", "Savings transfers in suspense": "Uhamisho wa akiba kwa mashaka", - "Schedular Jobs": "Kazi za Mratibu", + "Scheduler Jobs": "Kazi za Mratibu", "Schedule Date": "Tarehe ya Ratiba", "Score": "Alama", "Screen Report": "Ripoti ya skrini", @@ -1939,7 +1943,7 @@ "Standing Instruction Type": "Aina ya Maagizo ya Kudumu", "Standing Instructions": "Maagizo ya Kudumu", "Start Date": "Tarehe ya Kuanza", - "Start time": "Wakati wa kuanza", + "Start Time": "Wakati wa kuanza", "Started On": "Ilianza", "Starting date": "Tarehe ya kuanza", "State / Province": "Jimbo / Mkoa", @@ -2089,6 +2093,7 @@ "Withhold Tax is Applicable": "Kodi ya Zuio Inatumika", "Within Bank": "Ndani ya Benki", "Working Days": "Siku za kazi", + "Workflow Jobs": "Kazi za mtiririko wa kazi", "Write Off Date": "Tarehe ya Kuzimwa", "Write off on": "Andika mbali", "Write-off": "Kufuta", @@ -2369,6 +2374,7 @@ "Configurations": "Mipangilio", "Configurations page allows you to further customize": "Ukurasa wa Mipangilio hukuruhusu kubinafsisha zaidi jinsi shirika lako linavyotumia mfumo wa Mifos.", "Configure Maker Checker Tasks": "Sanidi Majukumu ya Kikagua Kitengeneza", + "Copy": "Nakili", "Copy Account Number": "Nakili Nambari ya Akaunti", "Create Account Number Preference": "Unda Upendeleo wa Nambari ya Akaunti", "Create Accounting Closure": "Unda Kufungwa kwa Uhasibu",