WEB-673 Create a Tasks sections just like it was available in the legacy Mifos Community App (#3106)

This commit is contained in:
Soni Jay
2026-02-07 17:36:00 -06:00
committed by GitHub
parent a3a2f8471e
commit f25f82a004
29 changed files with 709 additions and 256 deletions
@@ -49,6 +49,16 @@
</a> </a>
<span class="hide-lt-md"> <span class="hide-lt-md">
<a
#tasks
class="tab-link tasks-link"
[routerLink]="['/checker-inbox-and-tasks/checker-inbox']"
tabindex="0"
*mifosxHasPermission="'ALL_FUNCTIONS_READ'"
>
<fa-icon class="mr-05" icon="check" size="lg"></fa-icon>
{{ 'labels.menus.Tasks' | translate }}
</a>
<a <a
#accounting #accounting
class="tab-link accounting-link" class="tab-link accounting-link"
@@ -6,34 +6,43 @@
file, You can obtain one at http://mozilla.org/MPL/2.0/. file, You can obtain one at http://mozilla.org/MPL/2.0/.
--> -->
@if (checkerData) { <div class="tab-container mat-typography">
<div class="tab-container mat-typography"> <div class="search-row">
<div class="layout-row align-start-center"> <mat-form-field class="search-field">
<div class="search-box flex-40"> <input
<mat-form-field class="flex-fill flex-90"> matInput
<input placeholder="{{ 'labels.text.Search by user' | translate }}"
matInput (keyup)="applyFilter($event.target.value)"
placeholder="{{ 'labels.text.Search by user' | translate }}" />
(keyup)="applyFilter($event.target.value)" </mat-form-field>
/> <button
</mat-form-field> mat-icon-button
</div> (click)="toggleAdvancedSearch()"
<div class="flex-60 gap-8px"> class="icon-button"
<button mat-raised-button color="success" (click)="approveChecker()"> [attr.aria-label]="
<fa-icon icon="check" class="m-r-10"></fa-icon>{{ 'labels.buttons.Approve' | translate }} showAdvancedSearch
</button> ? ('labels.buttons.Hide advanced search' | translate)
<button mat-raised-button color="warn" (click)="deleteChecker()"> : ('labels.buttons.Show advanced search' | translate)
<fa-icon icon="trash" class="m-r-10"></fa-icon>{{ 'labels.buttons.Delete' | translate }} "
</button> [attr.aria-expanded]="showAdvancedSearch"
<button mat-raised-button color="reject" (click)="rejectChecker()"> >
<fa-icon icon="times" class="m-r-10"></fa-icon>{{ 'labels.buttons.Reject' | translate }} <mat-icon>{{ showAdvancedSearch ? 'arrow_drop_up' : 'arrow_drop_down' }}</mat-icon>
</button> </button>
</div> <button mat-raised-button class="action-button btn-success" (click)="approveChecker()">
</div> <fa-icon icon="check" class="m-r-10"></fa-icon>{{ 'labels.buttons.Approve' | translate }}
</button>
<button mat-raised-button color="warn" (click)="deleteChecker()" class="action-button">
<fa-icon icon="trash" class="m-r-10"></fa-icon>{{ 'labels.buttons.Delete' | translate }}
</button>
<button mat-raised-button class="action-button btn-reject" (click)="rejectChecker()">
<fa-icon icon="times" class="m-r-10"></fa-icon>{{ 'labels.buttons.Reject' | translate }}
</button>
</div>
@if (showAdvancedSearch) {
<form [formGroup]="makerCheckerSearchForm"> <form [formGroup]="makerCheckerSearchForm">
<div class="layout-row-wrap gap-2px responsive-column"> <div class="advanced-search-container">
<mat-form-field class="flex-fill flex-31" (click)="makerDateTimeFromPicker.open()"> <mat-form-field class="search-field" (click)="makerDateTimeFromPicker.open()">
<mat-label>{{ 'labels.inputs.From Date' | translate }}</mat-label> <mat-label>{{ 'labels.inputs.From date' | translate }}</mat-label>
<input <input
matInput matInput
[min]="minDate" [min]="minDate"
@@ -44,8 +53,8 @@
<mat-datepicker-toggle matSuffix [for]="makerDateTimeFromPicker"></mat-datepicker-toggle> <mat-datepicker-toggle matSuffix [for]="makerDateTimeFromPicker"></mat-datepicker-toggle>
<mat-datepicker #makerDateTimeFromPicker></mat-datepicker> <mat-datepicker #makerDateTimeFromPicker></mat-datepicker>
</mat-form-field> </mat-form-field>
<mat-form-field class="flex-fill flex-31" (click)="makerDateTimetoPicker.open()"> <mat-form-field class="search-field" (click)="makerDateTimetoPicker.open()">
<mat-label>{{ 'labels.inputs.To Date' | translate }}</mat-label> <mat-label>{{ 'labels.inputs.To date' | translate }}</mat-label>
<input <input
matInput matInput
[min]="minDate" [min]="minDate"
@@ -56,8 +65,8 @@
<mat-datepicker-toggle matSuffix [for]="makerDateTimetoPicker"></mat-datepicker-toggle> <mat-datepicker-toggle matSuffix [for]="makerDateTimetoPicker"></mat-datepicker-toggle>
<mat-datepicker #makerDateTimetoPicker></mat-datepicker> <mat-datepicker #makerDateTimetoPicker></mat-datepicker>
</mat-form-field> </mat-form-field>
<mat-form-field class="flex-31"> <mat-form-field class="search-field">
<mat-label>{{ 'labels.inputs.Action' | translate }}</mat-label> <mat-label>{{ 'labels.inputs.Select action' | translate }}</mat-label>
<mat-select formControlName="actionName"> <mat-select formControlName="actionName">
@for (action of makerCheckerTemplate.actionNames; track action) { @for (action of makerCheckerTemplate.actionNames; track action) {
<mat-option [value]="action"> <mat-option [value]="action">
@@ -66,8 +75,8 @@
} }
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
<mat-form-field class="flex-31"> <mat-form-field class="search-field">
<mat-label>{{ 'labels.inputs.Entity' | translate }}</mat-label> <mat-label>{{ 'labels.inputs.Select entity' | translate }}</mat-label>
<mat-select formControlName="entityName"> <mat-select formControlName="entityName">
@for (entity of makerCheckerTemplate.entityNames; track entity) { @for (entity of makerCheckerTemplate.entityNames; track entity) {
<mat-option [value]="entity"> <mat-option [value]="entity">
@@ -76,86 +85,86 @@
} }
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
<mat-form-field class="flex-31"> <mat-form-field class="search-field">
<mat-label>{{ 'labels.inputs.Resource ID' | translate }}</mat-label> <mat-label>{{ 'labels.inputs.Resource id' | translate }}</mat-label>
<input matInput formControlName="resourceId" /> <input matInput formControlName="resourceId" />
</mat-form-field> </mat-form-field>
<button mat-raised-button color="primary" id="search-button" (click)="search()"> <button mat-raised-button color="primary" id="search-button" type="button" (click)="search()">
{{ 'labels.buttons.Search' | translate }} <fa-icon icon="search" class="m-r-10"></fa-icon>{{ 'labels.buttons.Advanced Search' | translate }}
</button> </button>
</div> </div>
</form> </form>
@if (!noSearchedData) { }
<table mat-table [dataSource]="dataSource"> @if (checkerData && !noSearchedData) {
<ng-container matColumnDef="select"> <table mat-table [dataSource]="dataSource">
<th mat-header-cell *matHeaderCellDef> <ng-container matColumnDef="select">
<mat-checkbox <th mat-header-cell *matHeaderCellDef>
(change)="$event ? masterToggle() : null" <mat-checkbox
[checked]="selection.hasValue() && isAllSelected()" (change)="$event ? masterToggle() : null"
[indeterminate]="selection.hasValue() && !isAllSelected()" [checked]="selection.hasValue() && isAllSelected()"
[aria-label]="checkboxLabel()" [indeterminate]="selection.hasValue() && !isAllSelected()"
> [aria-label]="checkboxLabel()"
</mat-checkbox> >
</th> </mat-checkbox>
<td mat-cell *matCellDef="let row"> </th>
<mat-checkbox <td mat-cell *matCellDef="let row">
(click)="$event.stopPropagation()" <mat-checkbox
(change)="$event ? selection.toggle(row) : null" (click)="$event.stopPropagation()"
[checked]="selection.isSelected(row)" (change)="$event ? selection.toggle(row) : null"
[aria-label]="checkboxLabel(row)" [checked]="selection.isSelected(row)"
> [aria-label]="checkboxLabel(row)"
</mat-checkbox> >
</td> </mat-checkbox>
</ng-container> </td>
<ng-container matColumnDef="id"> </ng-container>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.ID' | translate }}</th> <ng-container matColumnDef="id">
<td mat-cell *matCellDef="let makerChecker">{{ makerChecker.id }}</td> <th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.ID' | translate }}</th>
</ng-container> <td mat-cell *matCellDef="let makerChecker">{{ makerChecker.id }}</td>
<ng-container matColumnDef="madeOnDate"> </ng-container>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Made on Date' | translate }}</th> <ng-container matColumnDef="madeOnDate">
<td mat-cell *matCellDef="let makerChecker">{{ makerChecker.madeOnDate | dateFormat }}</td> <th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Made on Date' | translate }}</th>
</ng-container> <td mat-cell *matCellDef="let makerChecker">{{ makerChecker.madeOnDate | dateFormat }}</td>
<ng-container matColumnDef="status"> </ng-container>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Status' | translate }}</th> <ng-container matColumnDef="status">
<td mat-cell *matCellDef="let makerChecker">{{ makerChecker.processingResult }}</td> <th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Status' | translate }}</th>
</ng-container> <td mat-cell *matCellDef="let makerChecker">{{ makerChecker.processingResult }}</td>
<ng-container matColumnDef="user"> </ng-container>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.User' | translate }}</th> <ng-container matColumnDef="user">
<td mat-cell *matCellDef="let makerChecker">{{ makerChecker.maker }}</td> <th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.User' | translate }}</th>
</ng-container> <td mat-cell *matCellDef="let makerChecker">{{ makerChecker.maker }}</td>
<ng-container matColumnDef="action"> </ng-container>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Action' | translate }}</th> <ng-container matColumnDef="action">
<td mat-cell *matCellDef="let makerChecker">{{ makerChecker.actionName }}</td> <th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Action' | translate }}</th>
</ng-container> <td mat-cell *matCellDef="let makerChecker">{{ makerChecker.actionName }}</td>
<ng-container matColumnDef="entity"> </ng-container>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Entity' | translate }}</th> <ng-container matColumnDef="entity">
<td mat-cell *matCellDef="let makerChecker">{{ makerChecker.entityName }}</td> <th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Entity' | translate }}</th>
</ng-container> <td mat-cell *matCellDef="let makerChecker">{{ makerChecker.entityName }}</td>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr> </ng-container>
<tr <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
mat-row <tr
*matRowDef="let row; columns: displayedColumns" mat-row
[routerLink]="[row.id, 'view']" *matRowDef="let row; columns: displayedColumns"
class="select-row" [routerLink]="[row.id, 'view']"
></tr> class="select-row"
</table> ></tr>
} </table>
@if (noSearchedData) { }
<div class="alert"> @if (checkerData && noSearchedData) {
<div class="message"> <div class="alert">
<i class="fa fa-exclamation-circle alert-check fa-2x"></i> <div class="message">
{{ 'labels.text.No checker inbox data available for this search' | translate }} <i class="fa fa-exclamation-circle alert-check fa-2x"></i>
</div> {{ 'labels.text.No checker inbox data available for this search' | translate }}
</div> </div>
}
</div>
}
@if (!checkerData) {
<div class="alert">
<div class="message">
<i class="fa fa-exclamation-circle alert-check fa-2x"></i>
{{ 'labels.text.No checker inbox data available for this account' | translate }}
</div> </div>
</div> }
}
@if (!checkerData) {
<div class="alert">
<div class="message">
<i class="fa fa-exclamation-circle alert-check fa-2x"></i>
{{ 'labels.text.No checker inbox data available for this account' | translate }}
</div>
</div>
}
</div>
@@ -10,14 +10,93 @@
padding: 1%; padding: 1%;
margin: 1%; margin: 1%;
.mat-raised-button.mat-success { ::ng-deep mat-form-field {
color: #fff; width: 280px;
background-color: #008000ab; min-width: 280px;
max-width: 280px;
.mat-mdc-form-field-subscript-wrapper {
height: 0;
min-height: 0;
}
.mat-mdc-text-field-wrapper {
margin-bottom: 0;
width: 100%;
}
.mat-mdc-form-field-flex {
width: 100%;
}
.mat-mdc-form-field-infix {
padding-top: 8px;
padding-bottom: 8px;
min-height: 48px;
}
input {
height: 48px;
width: 100%;
}
} }
.mat-raised-button.mat-reject { ::ng-deep .mat-mdc-select {
color: #fff; width: 100%;
background-color: #ffca00; }
::ng-deep .mat-mdc-select-trigger {
width: 100%;
height: 48px;
display: flex;
align-items: center;
}
button.mat-mdc-raised-button {
height: 48px;
line-height: 48px;
padding: 0 16px;
min-height: 48px;
}
button.mat-mdc-icon-button {
width: 48px;
height: 48px;
padding: 0;
}
button.mat-mdc-raised-button.btn-success {
color: #000 !important;
background-color: #fff !important;
}
button.mat-mdc-raised-button.btn-reject {
color: #000 !important;
background-color: #fff !important;
}
/* ---------- SEARCH & LAYOUT ---------- */
.search-row {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 16px;
}
.search-field {
width: 280px;
min-width: 280px;
max-width: 280px;
margin: 0;
flex: 0 0 280px;
}
.advanced-search-container {
display: flex;
flex-wrap: wrap;
gap: 16px;
margin-bottom: 16px;
align-items: flex-start;
} }
#search-button { #search-button {
@@ -25,6 +104,14 @@
margin-top: 1rem; margin-top: 1rem;
} }
.icon-button {
margin: 0;
}
.action-button {
margin: 0;
}
.view-details { .view-details {
cursor: pointer; cursor: pointer;
} }
@@ -25,6 +25,7 @@ import {
MatRow MatRow
} from '@angular/material/table'; } from '@angular/material/table';
import { MatDialog } from '@angular/material/dialog'; import { MatDialog } from '@angular/material/dialog';
import { MatIcon } from '@angular/material/icon';
/** Custom Services */ /** Custom Services */
import { TasksService } from '../../tasks.service'; import { TasksService } from '../../tasks.service';
@@ -57,7 +58,8 @@ import { STANDALONE_SHARED_IMPORTS } from 'app/standalone-shared.module';
MatHeaderRow, MatHeaderRow,
MatRowDef, MatRowDef,
MatRow, MatRow,
DateFormatPipe DateFormatPipe,
MatIcon
] ]
}) })
export class CheckerInboxComponent implements OnInit { export class CheckerInboxComponent implements OnInit {
@@ -78,6 +80,8 @@ export class CheckerInboxComponent implements OnInit {
noSearchedData = false; noSearchedData = false;
/** Checks if there is any checker data */ /** Checks if there is any checker data */
checkerData = false; checkerData = false;
/** Show/hide advanced search form */
showAdvancedSearch = false;
/** Maker Checker Search Form */ /** Maker Checker Search Form */
makerCheckerSearchForm: UntypedFormGroup; makerCheckerSearchForm: UntypedFormGroup;
/** Minimum date allowed. */ /** Minimum date allowed. */
@@ -138,6 +142,13 @@ export class CheckerInboxComponent implements OnInit {
}); });
} }
/**
* Toggle advanced search form visibility.
*/
toggleAdvancedSearch() {
this.showAdvancedSearch = !this.showAdvancedSearch;
}
search() { search() {
const dateFormat = this.settingsService.dateFormat; const dateFormat = this.settingsService.dateFormat;
const makerCheckerSearchParams = { const makerCheckerSearchParams = {
@@ -8,21 +8,24 @@
@if (showData) { @if (showData) {
<div class="tab-container mat-typography"> <div class="tab-container mat-typography">
<div class="layout-row align-start-center"> <div class="tasks-header">
<div class="search-box flex-40"> <mat-form-field class="tasks-search-field">
<mat-form-field class="flex-fill flex-90"> <input
<input #filterInput
matInput matInput
placeholder="{{ 'labels.text.Filter by name' | translate }}" placeholder="{{ 'labels.text.Filter by name' | translate }}"
(keyup)="applyFilter($event.target.value)" (keyup)="applyFilter(filterInput.value)"
/> />
</mat-form-field> </mat-form-field>
</div> <button
<div class="flex-60"> mat-raised-button
<button mat-raised-button color="success" *mifosxHasPermission="'ACTIVATE_CLIENT'" (click)="approveClients()"> color="success"
<fa-icon icon="check" class="m-r-10"></fa-icon>{{ 'labels.buttons.Approve' | translate }} *mifosxHasPermission="'ACTIVATE_CLIENT'"
</button> (click)="approveClients()"
</div> class="tasks-action-btn"
>
<fa-icon icon="check" class="m-r-10"></fa-icon>{{ 'labels.buttons.Approve' | translate }}
</button>
</div> </div>
@for (client of groupedClients | keyvalue; track client) { @for (client of groupedClients | keyvalue; track client) {
<h3>{{ client.key }}</h3> <h3>{{ client.key }}</h3>
@@ -10,6 +10,34 @@
padding: 1%; padding: 1%;
margin: 1%; margin: 1%;
::ng-deep mat-form-field {
.mat-mdc-form-field-subscript-wrapper {
height: 0;
min-height: 0;
}
.mat-mdc-text-field-wrapper {
margin-bottom: 0;
}
.mat-mdc-form-field-infix {
padding-top: 8px;
padding-bottom: 8px;
min-height: 48px;
}
input {
height: 48px;
}
}
button.mat-mdc-raised-button {
height: 48px;
line-height: 48px;
padding: 0 16px;
min-height: 48px;
}
.mat-raised-button.mat-success { .mat-raised-button.mat-success {
color: #fff; color: #fff;
background-color: #008000ab; background-color: #008000ab;
@@ -18,6 +46,22 @@
.view-details { .view-details {
cursor: pointer; cursor: pointer;
} }
.tasks-header {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 16px;
}
.tasks-search-field {
width: 280px;
margin: 0;
}
.tasks-action-btn {
margin: 0;
}
} }
.alert { .alert {
@@ -8,21 +8,23 @@
@if (showData) { @if (showData) {
<div class="tab-container mat-typography"> <div class="tab-container mat-typography">
<div class="layout-row align-start-center"> <div class="tasks-header">
<div class="search-box flex-40"> <mat-form-field class="tasks-search-field">
<mat-form-field class="flex-fill flex-90"> <input
<input matInput
matInput placeholder="{{ 'labels.text.Filter by name' | translate }}"
placeholder="{{ 'labels.text.Filter by name' | translate }}" (keyup)="applyFilter($event.target.value)"
(keyup)="applyFilter($event.target.value)" />
/> </mat-form-field>
</mat-form-field> <button
</div> mat-raised-button
<div class="flex-60"> color="success"
<button mat-raised-button color="success" *mifosxHasPermission="'APPROVE_LOAN'" (click)="approveLoan()"> *mifosxHasPermission="'APPROVE_LOAN'"
<fa-icon icon="check" class="m-r-10"></fa-icon>{{ 'labels.buttons.Approve' | translate }} (click)="approveLoan()"
</button> class="tasks-action-btn"
</div> >
<fa-icon icon="check" class="m-r-10"></fa-icon>{{ 'labels.buttons.Approve' | translate }}
</button>
</div> </div>
@for (office of officesArray; track office) { @for (office of officesArray; track office) {
<h3 class="mat-h3">{{ office.name }}</h3> <h3 class="mat-h3">{{ office.name }}</h3>
@@ -10,6 +10,34 @@
padding: 1%; padding: 1%;
margin: 1%; margin: 1%;
::ng-deep mat-form-field {
.mat-mdc-form-field-subscript-wrapper {
height: 0;
min-height: 0;
}
.mat-mdc-text-field-wrapper {
margin-bottom: 0;
}
.mat-mdc-form-field-infix {
padding-top: 8px;
padding-bottom: 8px;
min-height: 48px;
}
input {
height: 48px;
}
}
button.mat-mdc-raised-button {
height: 48px;
line-height: 48px;
padding: 0 16px;
min-height: 48px;
}
.mat-raised-button.mat-success { .mat-raised-button.mat-success {
color: #fff; color: #fff;
background-color: #008000ab; background-color: #008000ab;
@@ -18,6 +46,22 @@
.view-details { .view-details {
cursor: pointer; cursor: pointer;
} }
.tasks-header {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 16px;
}
.tasks-search-field {
width: 280px;
margin: 0;
}
.tasks-action-btn {
margin: 0;
}
} }
.alert { .alert {
@@ -8,21 +8,24 @@
@if (loans && loans.length > 0) { @if (loans && loans.length > 0) {
<div class="tab-container mat-typography"> <div class="tab-container mat-typography">
<div class="layout-row align-start-center"> <div class="tasks-header">
<div class="search-box flex-40"> <mat-form-field class="tasks-search-field">
<mat-form-field class="flex-fill flex-90"> <input
<input #filterInput
matInput matInput
placeholder="{{ 'labels.text.Filter by name' | translate }}" placeholder="{{ 'labels.text.Filter by name' | translate }}"
(keyup)="applyFilter($event.target.value)" (keyup)="applyFilter(filterInput.value)"
/> />
</mat-form-field> </mat-form-field>
</div> <button
<div class="flex-60"> mat-raised-button
<button mat-raised-button color="success" *mifosxHasPermission="'APPROVE_LOAN'" (click)="disburseLoan()"> color="success"
<fa-icon icon="check" class="m-r-10"></fa-icon>{{ 'labels.menus.Disburse' | translate }} *mifosxHasPermission="'APPROVE_LOAN'"
</button> (click)="disburseLoan()"
</div> class="tasks-action-btn"
>
<fa-icon icon="check" class="m-r-10"></fa-icon>{{ 'labels.menus.Disburse' | translate }}
</button>
</div> </div>
<table mat-table [dataSource]="dataSource"> <table mat-table [dataSource]="dataSource">
<ng-container matColumnDef="select"> <ng-container matColumnDef="select">
@@ -10,6 +10,34 @@
padding: 1%; padding: 1%;
margin: 1%; margin: 1%;
::ng-deep mat-form-field {
.mat-mdc-form-field-subscript-wrapper {
height: 0;
min-height: 0;
}
.mat-mdc-text-field-wrapper {
margin-bottom: 0;
}
.mat-mdc-form-field-infix {
padding-top: 8px;
padding-bottom: 8px;
min-height: 48px;
}
input {
height: 48px;
}
}
button.mat-mdc-raised-button {
height: 48px;
line-height: 48px;
padding: 0 16px;
min-height: 48px;
}
.mat-raised-button.mat-success { .mat-raised-button.mat-success {
color: #fff; color: #fff;
background-color: #008000ab; background-color: #008000ab;
@@ -18,6 +46,22 @@
.view-details { .view-details {
cursor: pointer; cursor: pointer;
} }
.tasks-header {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 16px;
}
.tasks-search-field {
width: 280px;
margin: 0;
}
.tasks-action-btn {
margin: 0;
}
} }
.alert { .alert {
@@ -8,34 +8,33 @@
@if (loans && loans.length > 0) { @if (loans && loans.length > 0) {
<div class="tab-container mat-typography"> <div class="tab-container mat-typography">
<div class="layout-row align-start-center"> <div class="tasks-header">
<div class="search-box flex-40"> <mat-form-field class="tasks-search-field">
<mat-form-field class="flex-90"> <input
<input #filterInput
matInput matInput
placeholder="{{ 'labels.text.Filter by name' | translate }}" placeholder="{{ 'labels.text.Filter by name' | translate }}"
(keyup)="applyFilter($event.target.value)" (keyup)="applyFilter(filterInput.value)"
/> />
</mat-form-field> </mat-form-field>
</div> <button
<div class="flex-60"> mat-raised-button
<button color="success"
mat-raised-button *mifosxHasPermission="'APPROVE_LOANRESCHEDULE'"
color="success" (click)="bulkLoanReschedule('Approve')"
*mifosxHasPermission="'APPROVE_LOANRESCHEDULE'" class="tasks-action-btn"
(click)="bulkLoanReschedule('Approve')" >
> <fa-icon icon="check" class="m-r-10"></fa-icon>{{ 'labels.buttons.Approve' | translate }}
<fa-icon icon="check" class="m-r-10"></fa-icon>{{ 'labels.buttons.Approve' | translate }} </button>
</button> <button
<button mat-raised-button
mat-raised-button color="reject"
color="reject" *mifosxHasPermission="'APPROVE_LOANRESCHEDULE'"
*mifosxHasPermission="'APPROVE_LOANRESCHEDULE'" (click)="bulkLoanReschedule('Reject')"
(click)="bulkLoanReschedule('Reject')" class="tasks-action-btn"
> >
<fa-icon icon="times" class="m-r-10"></fa-icon>{{ 'labels.buttons.Reject' | translate }} <fa-icon icon="times" class="m-r-10"></fa-icon>{{ 'labels.buttons.Reject' | translate }}
</button> </button>
</div>
</div> </div>
<table mat-table [dataSource]="dataSource"> <table mat-table [dataSource]="dataSource">
<ng-container matColumnDef="select"> <ng-container matColumnDef="select">
@@ -98,7 +97,7 @@
</div> </div>
} }
@if (loans.length === 0) { @if (loans?.length === 0) {
<div class="alert"> <div class="alert">
<div class="message"> <div class="message">
<i class="fa fa-exclamation-circle alert-check"></i> <i class="fa fa-exclamation-circle alert-check"></i>
@@ -10,6 +10,34 @@
padding: 1%; padding: 1%;
margin: 1%; margin: 1%;
::ng-deep mat-form-field {
.mat-mdc-form-field-subscript-wrapper {
height: 0;
min-height: 0;
}
.mat-mdc-text-field-wrapper {
margin-bottom: 0;
}
.mat-mdc-form-field-infix {
padding-top: 8px;
padding-bottom: 8px;
min-height: 48px;
}
input {
height: 48px;
}
}
button.mat-mdc-raised-button {
height: 48px;
line-height: 48px;
padding: 0 16px;
min-height: 48px;
}
.mat-raised-button.mat-success { .mat-raised-button.mat-success {
color: #fff; color: #fff;
background-color: #008000ab; background-color: #008000ab;
@@ -18,6 +46,22 @@
.view-details { .view-details {
cursor: pointer; cursor: pointer;
} }
.tasks-header {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 16px;
}
.tasks-search-field {
width: 280px;
margin: 0;
}
.tasks-action-btn {
margin: 0;
}
} }
.alert { .alert {
@@ -9,6 +9,8 @@
<div class="container"> <div class="container">
<mat-card class="tasks-card"> <mat-card class="tasks-card">
<mat-card-content> <mat-card-content>
<div class="card-heading">{{ 'labels.heading.Pending Tasks' | translate }}</div>
<mat-divider></mat-divider>
<nav mat-tab-nav-bar class="navigation-tabs" [tabPanel]="tabPanel"> <nav mat-tab-nav-bar class="navigation-tabs" [tabPanel]="tabPanel">
<a <a
mat-tab-link mat-tab-link
@@ -5,3 +5,14 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. * file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/ */
.card-heading {
font-size: 20px;
font-weight: 500;
color: #333;
margin-bottom: 16px;
}
mat-divider {
margin-bottom: 16px;
}
@@ -9,6 +9,7 @@
/** Angular Imports */ /** Angular Imports */
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { MatTabNav, MatTabLink, MatTabNavPanel } from '@angular/material/tabs'; import { MatTabNav, MatTabLink, MatTabNavPanel } from '@angular/material/tabs';
import { MatDivider } from '@angular/material/divider';
import { RouterLinkActive, RouterLink, RouterOutlet } from '@angular/router'; import { RouterLinkActive, RouterLink, RouterOutlet } from '@angular/router';
import { STANDALONE_SHARED_IMPORTS } from 'app/standalone-shared.module'; import { STANDALONE_SHARED_IMPORTS } from 'app/standalone-shared.module';
@@ -25,7 +26,8 @@ import { STANDALONE_SHARED_IMPORTS } from 'app/standalone-shared.module';
MatTabLink, MatTabLink,
RouterLinkActive, RouterLinkActive,
MatTabNavPanel, MatTabNavPanel,
RouterOutlet RouterOutlet,
MatDivider
] ]
}) })
export class CheckerInboxAndTasksComponent { export class CheckerInboxAndTasksComponent {
+13 -5
View File
@@ -44,14 +44,14 @@ export class TasksService {
* Get Maker Checker Template * Get Maker Checker Template
*/ */
getMakerCheckerTemplate(): Observable<any> { getMakerCheckerTemplate(): Observable<any> {
return this.http.get('/makercheckers'); return this.http.get('/makercheckers/searchtemplate');
} }
/** /**
* Get Grouped Clients Data * Get Grouped Clients Data
*/ */
getGroupedClientsData(): Observable<any> { getGroupedClientsData(): Observable<any> {
const httpParams = new HttpParams().set('limit', '1000').set('status', 'PENDING'); const httpParams = new HttpParams().set('limit', '1000').set('status', 'pending');
return this.http.get('/clients', { params: httpParams }); return this.http.get('/clients', { params: httpParams });
} }
@@ -66,18 +66,26 @@ export class TasksService {
* Get all loans to be approved * Get all loans to be approved
*/ */
getAllLoansToBeApproved(): Observable<any> { getAllLoansToBeApproved(): Observable<any> {
const httpParams = new HttpParams().set('limit', '1000').set('status', '100'); const httpParams = new HttpParams().set('limit', '1000').set('sqlSearch', 'l.loan_status_id in (100,200)');
return this.http.get('/loans', { params: httpParams }); return this.http.get('/loans', { params: httpParams });
} }
/** /**
* Get all loans to be created * Get all loans to be disbursed
*/ */
getAllLoansToBeDisbursed(): Observable<any> { getAllLoansToBeDisbursed(): Observable<any> {
const httpParams = new HttpParams().set('limit', '1000').set('status', '200'); const httpParams = new HttpParams().set('limit', '1000').set('sqlSearch', 'l.loan_status_id in (200)');
return this.http.get('/loans', { params: httpParams }); return this.http.get('/loans', { params: httpParams });
} }
/**
* Get all savings accounts to be approved
*/
getAllSavingsToBeApproved(): Observable<any> {
const httpParams = new HttpParams().set('limit', '1000').set('sqlSearch', 's.status_enum in (100,200)');
return this.http.get('/savingsaccounts', { params: httpParams });
}
/** /**
* Get Loans Locked Data using pages and limit * Get Loans Locked Data using pages and limit
*/ */
+14 -4
View File
@@ -555,7 +555,10 @@
"View Active Charges": "Zobrazit aktivní poplatky", "View Active Charges": "Zobrazit aktivní poplatky",
"View Inactive Charges": "Zobrazit neaktivní poplatky", "View Inactive Charges": "Zobrazit neaktivní poplatky",
"Yes": "Ano", "Yes": "Ano",
"Is Self Service": "Je samoobsluha" "Is Self Service": "Je samoobsluha",
"Advanced Search": "Rozšířené vyhledávání",
"Show advanced search": "Zobrazit rozšířené vyhledávání",
"Hide advanced search": "Skrýt rozšířené vyhledávání"
}, },
"catalogs": { "catalogs": {
"Interest payment waiver": "Prominutí platby úroků", "Interest payment waiver": "Prominutí platby úroků",
@@ -1282,7 +1285,8 @@
"Important Dates": "Důležitá data", "Important Dates": "Důležitá data",
"Contact Information": "Kontaktní informace", "Contact Information": "Kontaktní informace",
"Classification": "Klasifikace", "Classification": "Klasifikace",
"Status": "Stav" "Status": "Stav",
"Pending Tasks": "Čekající úkoly"
}, },
"inputs": { "inputs": {
"Terms": "Podmínky", "Terms": "Podmínky",
@@ -2648,7 +2652,12 @@
"Skip Interest Refund Transaction Posting": "Přeskočit zaúčtování vrácení úroků", "Skip Interest Refund Transaction Posting": "Přeskočit zaúčtování vrácení úroků",
"Available Disbursement Amount (with Over Applied)": "Dostupná částka k výplatě (s přeplatkem)", "Available Disbursement Amount (with Over Applied)": "Dostupná částka k výplatě (s přeplatkem)",
"Overdue": "Po splatnosti", "Overdue": "Po splatnosti",
"Overdue Fees": "Poplatky po splatnosti" "Overdue Fees": "Poplatky po splatnosti",
"From date": "Datum od",
"Resource id": "ID zdroje",
"To date": "Datum do",
"Select action": "Vybrat akci",
"Select entity": "Vybrat entitu"
}, },
"links": { "links": {
"Community": "Společenství", "Community": "Společenství",
@@ -2782,7 +2791,8 @@
"Apply Additional Shares": "Použít další", "Apply Additional Shares": "Použít další",
"Redeem Shares": "Uplatnit akcie", "Redeem Shares": "Uplatnit akcie",
"Approve Additional Shares": "Schválit další akcie", "Approve Additional Shares": "Schválit další akcie",
"Reject Additional Shares": "Odmítnout další akcie" "Reject Additional Shares": "Odmítnout další akcie",
"Tasks": "Úkoly"
}, },
"placeholders": { "placeholders": {
"Add new server": "Přidat nový server", "Add new server": "Přidat nový server",
+14 -4
View File
@@ -555,7 +555,10 @@
"View Active Charges": "Aktive Gebühren anzeigen", "View Active Charges": "Aktive Gebühren anzeigen",
"View Inactive Charges": "Inaktive Gebühren anzeigen", "View Inactive Charges": "Inaktive Gebühren anzeigen",
"Yes": "Ja", "Yes": "Ja",
"Is Self Service": "Ist Selbstbedienung" "Is Self Service": "Ist Selbstbedienung",
"Advanced Search": "Erweiterte Suche",
"Show advanced search": "Erweiterte Suche anzeigen",
"Hide advanced search": "Erweiterte Suche ausblenden"
}, },
"catalogs": { "catalogs": {
"Interest payment waiver": "Zinszahlungsverzicht", "Interest payment waiver": "Zinszahlungsverzicht",
@@ -1283,7 +1286,8 @@
"Important Dates": "Wichtige Daten", "Important Dates": "Wichtige Daten",
"Contact Information": "Kontaktinformationen", "Contact Information": "Kontaktinformationen",
"Classification": "Klassifizierung", "Classification": "Klassifizierung",
"Status": "Status" "Status": "Status",
"Pending Tasks": "Ausstehende Aufgaben"
}, },
"inputs": { "inputs": {
"Terms": "Bedingungen", "Terms": "Bedingungen",
@@ -2649,7 +2653,12 @@
"Skip Interest Refund Transaction Posting": "Buchung der Zinsrückerstattung überspringen", "Skip Interest Refund Transaction Posting": "Buchung der Zinsrückerstattung überspringen",
"Available Disbursement Amount (with Over Applied)": "Verfügbarer Auszahlungsbetrag (mit Überzahlung)", "Available Disbursement Amount (with Over Applied)": "Verfügbarer Auszahlungsbetrag (mit Überzahlung)",
"Overdue": "Überfällig", "Overdue": "Überfällig",
"Overdue Fees": "Überfällige Gebühren" "Overdue Fees": "Überfällige Gebühren",
"From date": "Von Datum",
"Resource id": "Ressourcen-ID",
"To date": "Bis Datum",
"Select action": "Aktion auswählen",
"Select entity": "Entität auswählen"
}, },
"links": { "links": {
"Community": "Gemeinschaft", "Community": "Gemeinschaft",
@@ -2783,7 +2792,8 @@
"Apply Additional Shares": "Zusätzlich anwenden", "Apply Additional Shares": "Zusätzlich anwenden",
"Redeem Shares": "Anteile zurückgeben", "Redeem Shares": "Anteile zurückgeben",
"Approve Additional Shares": "Genehmigen Sie zusätzliche Freigaben", "Approve Additional Shares": "Genehmigen Sie zusätzliche Freigaben",
"Reject Additional Shares": "Zusätzliche Freigaben ablehnen" "Reject Additional Shares": "Zusätzliche Freigaben ablehnen",
"Tasks": "Aufgaben"
}, },
"placeholders": { "placeholders": {
"Add new server": "Neuen Server hinzufügen", "Add new server": "Neuen Server hinzufügen",
+11 -1
View File
@@ -339,6 +339,9 @@
"Add/Edit": "Add/Edit", "Add/Edit": "Add/Edit",
"Adjustment": "Adjustment", "Adjustment": "Adjustment",
"Advanced Options": "Advanced Options", "Advanced Options": "Advanced Options",
"Advanced Search": "Advanced Search",
"Show advanced search": "Show advanced search",
"Hide advanced search": "Hide advanced search",
"Allocate Cash": "Allocate Cash", "Allocate Cash": "Allocate Cash",
"Applications": "Applications", "Applications": "Applications",
"Approve": "Approve", "Approve": "Approve",
@@ -1154,6 +1157,7 @@
"Overdue Charges": "Overdue Charges", "Overdue Charges": "Overdue Charges",
"Password Preferences": "Password Preferences", "Password Preferences": "Password Preferences",
"Payment Type": "Payment Type", "Payment Type": "Payment Type",
"Pending Tasks": "Pending Tasks",
"Penalties to Specific Income Accounts": "Penalties to Specific Income Accounts", "Penalties to Specific Income Accounts": "Penalties to Specific Income Accounts",
"Performance History": "Performance History", "Performance History": "Performance History",
"Post Interest": "Post Interest", "Post Interest": "Post Interest",
@@ -1799,6 +1803,7 @@
"From Account Type": "From Account Type", "From Account Type": "From Account Type",
"From Client": "From Client", "From Client": "From Client",
"From Date": "From Date", "From Date": "From Date",
"From date": "From date",
"From Email": "From Email", "From Email": "From Email",
"From Name": "From Name", "From Name": "From Name",
"From loan officer": "From loan officer", "From loan officer": "From loan officer",
@@ -2354,6 +2359,7 @@
"Residence Phone": "Residence Phone", "Residence Phone": "Residence Phone",
"Resource": "Resource", "Resource": "Resource",
"Resource ID": "Resource ID", "Resource ID": "Resource ID",
"Resource id": "Resource id",
"Rest Frequency Date": "Rest Frequency Date", "Rest Frequency Date": "Rest Frequency Date",
"Restricted products": "Restricted products", "Restricted products": "Restricted products",
"Reversed": "Reversed", "Reversed": "Reversed",
@@ -2487,6 +2493,7 @@
"To Account Type": "To Account Type", "To Account Type": "To Account Type",
"To Client": "To Client", "To Client": "To Client",
"To Date": "To Date", "To Date": "To Date",
"To date": "To date",
"To Loan Officer": "To Loan Officer", "To Loan Officer": "To Loan Officer",
"To Office": "To Office", "To Office": "To Office",
"To Savings Officer": "To Savings Officer", "To Savings Officer": "To Savings Officer",
@@ -2657,7 +2664,9 @@
"Available Disbursement Amount (with Over Applied)": "Available Disbursement Amount (with Over Applied)", "Available Disbursement Amount (with Over Applied)": "Available Disbursement Amount (with Over Applied)",
"Waive Penalties": "Waive Penalties", "Waive Penalties": "Waive Penalties",
"Overdue": "Overdue", "Overdue": "Overdue",
"Overdue Fees": "Overdue Fees" "Overdue Fees": "Overdue Fees",
"Select action": "Select action",
"Select entity": "Select entity"
}, },
"links": { "links": {
"Community": "Community", "Community": "Community",
@@ -2768,6 +2777,7 @@
"Sign Out": "Sign Out", "Sign Out": "Sign Out",
"System": "System", "System": "System",
"Task Management": "Task Management", "Task Management": "Task Management",
"Tasks": "Tasks",
"Templates": "Templates", "Templates": "Templates",
"Theme Picker": "Theme Picker", "Theme Picker": "Theme Picker",
"Transfer Funds": "Transfer Funds", "Transfer Funds": "Transfer Funds",
+14 -4
View File
@@ -555,7 +555,10 @@
"View Active Charges": "Ver Comisiones Activas", "View Active Charges": "Ver Comisiones Activas",
"View Inactive Charges": "Ver Comisiones inactivas", "View Inactive Charges": "Ver Comisiones inactivas",
"Yes": "Sí", "Yes": "Sí",
"Is Self Service": "Es usuario de autoservicio" "Is Self Service": "Es usuario de autoservicio",
"Advanced Search": "Advanced Search",
"Show advanced search": "Mostrar búsqueda avanzada",
"Hide advanced search": "Ocultar búsqueda avanzada"
}, },
"catalogs": { "catalogs": {
"Interest payment waiver": "Exención de pago de intereses", "Interest payment waiver": "Exención de pago de intereses",
@@ -1283,7 +1286,8 @@
"Important Dates": "Fechas Importantes", "Important Dates": "Fechas Importantes",
"Contact Information": "Información de Contacto", "Contact Information": "Información de Contacto",
"Classification": "Clasificación", "Classification": "Clasificación",
"Status": "Estado" "Status": "Estado",
"Pending Tasks": "Pending Tasks"
}, },
"inputs": { "inputs": {
"Terms": "Términos", "Terms": "Términos",
@@ -2648,7 +2652,12 @@
"Income from Buy down fees": "Ingresos por comisiones de compra inicial", "Income from Buy down fees": "Ingresos por comisiones de compra inicial",
"Buy down fee Expense": "Gastos por comisiones de compra inicial", "Buy down fee Expense": "Gastos por comisiones de compra inicial",
"Skip Interest Refund Transaction Posting": "Omitir el registro de la devolución de intereses", "Skip Interest Refund Transaction Posting": "Omitir el registro de la devolución de intereses",
"Available Disbursement Amount (with Over Applied)": "Monto disponible para desembolso (con sobreaplicación)" "Available Disbursement Amount (with Over Applied)": "Monto disponible para desembolso (con sobreaplicación)",
"From date": "From date",
"Resource id": "Resource id",
"To date": "To date",
"Select action": "Seleccionar acción",
"Select entity": "Seleccionar entidad"
}, },
"links": { "links": {
"Community": "Comunidad", "Community": "Comunidad",
@@ -2782,7 +2791,8 @@
"Apply Additional Shares": "Adicionar Acciones", "Apply Additional Shares": "Adicionar Acciones",
"Redeem Shares": "Canjear acciones", "Redeem Shares": "Canjear acciones",
"Approve Additional Shares": "Aprobar acciones adicionales", "Approve Additional Shares": "Aprobar acciones adicionales",
"Reject Additional Shares": "Rechazar acciones adicionales" "Reject Additional Shares": "Rechazar acciones adicionales",
"Tasks": "Tasks"
}, },
"placeholders": { "placeholders": {
"Add new server": "Agregar nuevo servidor", "Add new server": "Agregar nuevo servidor",
+21 -11
View File
@@ -555,7 +555,10 @@
"View Active Charges": "Ver Comisiones Activas", "View Active Charges": "Ver Comisiones Activas",
"View Inactive Charges": "Ver Comisiones inactivas", "View Inactive Charges": "Ver Comisiones inactivas",
"Yes": "Sí", "Yes": "Sí",
"Is Self Service": "Es autoservicio" "Is Self Service": "Es autoservicio",
"Advanced Search": "Búsqueda avanzada",
"Show advanced search": "Mostrar búsqueda avanzada",
"Hide advanced search": "Ocultar búsqueda avanzada"
}, },
"catalogs": { "catalogs": {
"Interest payment waiver": "Exención de pago de intereses", "Interest payment waiver": "Exención de pago de intereses",
@@ -870,9 +873,9 @@
"Must be at least": "Debe ser al menos", "Must be at least": "Debe ser al menos",
"Must be less or equal to": "Debe ser menor o igual a", "Must be less or equal to": "Debe ser menor o igual a",
"must be after or equal to start date": "debe ser posterior o igual a la fecha de inicio", "must be after or equal to start date": "debe ser posterior o igual a la fecha de inicio",
"No classification data available": "No hay datos de clasificaci\u00f3n disponibles", "No classification data available": "No hay datos de clasificación disponibles",
"No": "No", "No": "No",
"Yes": "S\u00ed" "Yes": "Sí"
}, },
"passwordPreferences": { "passwordPreferences": {
"Password most be at least 1 character and not more that 50 characters long": "La contraseña debe tener al menos 1 carácter y no más de 50 caracteres", "Password most be at least 1 character and not more that 50 characters long": "La contraseña debe tener al menos 1 carácter y no más de 50 caracteres",
@@ -1275,14 +1278,15 @@
"Secure & Reliable": "Seguro y Confiable", "Secure & Reliable": "Seguro y Confiable",
"Community Driven": "Impulsado por la Comunidad", "Community Driven": "Impulsado por la Comunidad",
"Global Impact": "Impacto Global", "Global Impact": "Impacto Global",
"Personal Information": "Informaci\u00f3n Personal", "Personal Information": "Información Personal",
"Account Information": "Informaci\u00f3n de la Cuenta", "Account Information": "Información de la Cuenta",
"Entity Details": "Detalles de la Entidad", "Entity Details": "Detalles de la Entidad",
"Group Membership": "Membres\u00eda del Grupo", "Group Membership": "Membresía del Grupo",
"Important Dates": "Fechas Importantes", "Important Dates": "Fechas Importantes",
"Contact Information": "Informaci\u00f3n de Contacto", "Contact Information": "Información de Contacto",
"Classification": "Clasificaci\u00f3n", "Classification": "Clasificación",
"Status": "Estado" "Status": "Estado",
"Pending Tasks": "Tareas pendientes"
}, },
"inputs": { "inputs": {
"Terms": "Términos", "Terms": "Términos",
@@ -2651,7 +2655,12 @@
"Incorporation Date": "Fecha de Constitución", "Incorporation Date": "Fecha de Constitución",
"Available Disbursement Amount (with Over Applied)": "Monto disponible para desembolso (con sobreaplicación)", "Available Disbursement Amount (with Over Applied)": "Monto disponible para desembolso (con sobreaplicación)",
"Overdue": "Vencido", "Overdue": "Vencido",
"Overdue Fees": "Cargos vencidos" "Overdue Fees": "Cargos vencidos",
"From date": "Desde fecha",
"Resource id": "ID de recurso",
"To date": "Hasta fecha",
"Select action": "Seleccionar acción",
"Select entity": "Seleccionar entidad"
}, },
"links": { "links": {
"Community": "Comunidad", "Community": "Comunidad",
@@ -2785,7 +2794,8 @@
"Apply Additional Shares": "Adicionar Acciones", "Apply Additional Shares": "Adicionar Acciones",
"Redeem Shares": "Canjear acciones", "Redeem Shares": "Canjear acciones",
"Approve Additional Shares": "Aprobar acciones adicionales", "Approve Additional Shares": "Aprobar acciones adicionales",
"Reject Additional Shares": "Rechazar acciones adicionales" "Reject Additional Shares": "Rechazar acciones adicionales",
"Tasks": "Tareas"
}, },
"placeholders": { "placeholders": {
"Add new server": "Agregar nuevo servidor", "Add new server": "Agregar nuevo servidor",
+17 -7
View File
@@ -555,7 +555,10 @@
"View Active Charges": "Afficher les frais actifs", "View Active Charges": "Afficher les frais actifs",
"View Inactive Charges": "Afficher les frais inactifs", "View Inactive Charges": "Afficher les frais inactifs",
"Yes": "Oui", "Yes": "Oui",
"Is Self Service": "Est libre-service" "Is Self Service": "Est libre-service",
"Advanced Search": "Recherche avancée",
"Show advanced search": "Afficher la recherche avancée",
"Hide advanced search": "Masquer la recherche avancée"
}, },
"catalogs": { "catalogs": {
"Interest payment waiver": "Renonciation au paiement des intérêts", "Interest payment waiver": "Renonciation au paiement des intérêts",
@@ -1278,12 +1281,13 @@
"Global Impact": "Impact mondial", "Global Impact": "Impact mondial",
"Personal Information": "Informations personnelles", "Personal Information": "Informations personnelles",
"Account Information": "Informations sur le compte", "Account Information": "Informations sur le compte",
"Entity Details": "D\u00e9tails de l'entit\u00e9", "Entity Details": "Détails de l'entité",
"Group Membership": "Adh\u00e9sion au groupe", "Group Membership": "Adhésion au groupe",
"Important Dates": "Dates importantes", "Important Dates": "Dates importantes",
"Contact Information": "Coordonn\u00e9es", "Contact Information": "Coordonnées",
"Classification": "Classification", "Classification": "Classification",
"Status": "Statut" "Status": "Statut",
"Pending Tasks": "Tâches en attente"
}, },
"inputs": { "inputs": {
"Terms": "Termes", "Terms": "Termes",
@@ -2647,7 +2651,12 @@
"Income from Buy down fees": "Revenus des commissions de rachat", "Income from Buy down fees": "Revenus des commissions de rachat",
"Buy down fee Expense": "Charges des commissions de rachat", "Buy down fee Expense": "Charges des commissions de rachat",
"Skip Interest Refund Transaction Posting": "Ignorer la comptabilisation du remboursement des intérêts", "Skip Interest Refund Transaction Posting": "Ignorer la comptabilisation du remboursement des intérêts",
"Available Disbursement Amount (with Over Applied)": "Montant de décaissement disponible (avec sur-application)" "Available Disbursement Amount (with Over Applied)": "Montant de décaissement disponible (avec sur-application)",
"From date": "Date de début",
"Resource id": "Identifiant de ressource",
"To date": "Date de fin",
"Select action": "Sélectionner une action",
"Select entity": "Sélectionner une entité"
}, },
"links": { "links": {
"Community": "Communauté", "Community": "Communauté",
@@ -2781,7 +2790,8 @@
"Apply Additional Shares": "Appliquer supplémentaire", "Apply Additional Shares": "Appliquer supplémentaire",
"Redeem Shares": "Racheter des actions", "Redeem Shares": "Racheter des actions",
"Approve Additional Shares": "Approuver des partages supplémentaires", "Approve Additional Shares": "Approuver des partages supplémentaires",
"Reject Additional Shares": "Rejeter les partages supplémentaires" "Reject Additional Shares": "Rejeter les partages supplémentaires",
"Tasks": "Tâches"
}, },
"placeholders": { "placeholders": {
"Add new server": "Ajouter un nouveau serveur", "Add new server": "Ajouter un nouveau serveur",
+15 -5
View File
@@ -554,7 +554,10 @@
"Withdraw": "Ritirare", "Withdraw": "Ritirare",
"View Active Charges": "Visualizza gli addebiti attivi", "View Active Charges": "Visualizza gli addebiti attivi",
"View Inactive Charges": "Visualizza addebiti inattivi", "View Inactive Charges": "Visualizza addebiti inattivi",
"Yes": "SÌ" "Yes": "SÌ",
"Advanced Search": "Advanced Search",
"Show advanced search": "Mostra ricerca avanzata",
"Hide advanced search": "Nascondi ricerca avanzata"
}, },
"catalogs": { "catalogs": {
"Interest payment waiver": "Rinuncia al pagamento degli interessi", "Interest payment waiver": "Rinuncia al pagamento degli interessi",
@@ -1277,12 +1280,13 @@
"Global Impact": "Impatto globale", "Global Impact": "Impatto globale",
"Personal Information": "Informazioni personali", "Personal Information": "Informazioni personali",
"Account Information": "Informazioni sull'account", "Account Information": "Informazioni sull'account",
"Entity Details": "Dettagli dell'entit\u00e0", "Entity Details": "Dettagli dell'entità",
"Group Membership": "Appartenenza al gruppo", "Group Membership": "Appartenenza al gruppo",
"Important Dates": "Date importanti", "Important Dates": "Date importanti",
"Contact Information": "Informazioni di contatto", "Contact Information": "Informazioni di contatto",
"Classification": "Classificazione", "Classification": "Classificazione",
"Status": "Stato" "Status": "Stato",
"Pending Tasks": "Pending Tasks"
}, },
"inputs": { "inputs": {
"Terms": "Termini", "Terms": "Termini",
@@ -2646,7 +2650,12 @@
"Income from Buy down fees": "Proventi da commissioni di buy down", "Income from Buy down fees": "Proventi da commissioni di buy down",
"Buy down fee Expense": "Spese da commissioni di buy down", "Buy down fee Expense": "Spese da commissioni di buy down",
"Skip Interest Refund Transaction Posting": "Salta la registrazione del rimborso degli interessi", "Skip Interest Refund Transaction Posting": "Salta la registrazione del rimborso degli interessi",
"Available Disbursement Amount (with Over Applied)": "Importo di disbrigo disponibile (con sovraapplicazione)" "Available Disbursement Amount (with Over Applied)": "Importo di disbrigo disponibile (con sovraapplicazione)",
"From date": "From date",
"Resource id": "Resource id",
"To date": "To date",
"Select action": "Seleziona azione",
"Select entity": "Seleziona entità"
}, },
"links": { "links": {
"Community": "Comunità", "Community": "Comunità",
@@ -2780,7 +2789,8 @@
"Apply Additional Shares": "Applicare aggiuntivo", "Apply Additional Shares": "Applicare aggiuntivo",
"Redeem Shares": "Riscattare azioni", "Redeem Shares": "Riscattare azioni",
"Approve Additional Shares": "Approvare azioni aggiuntive", "Approve Additional Shares": "Approvare azioni aggiuntive",
"Reject Additional Shares": "Rifiutare condivisioni aggiuntive" "Reject Additional Shares": "Rifiutare condivisioni aggiuntive",
"Tasks": "Tasks"
}, },
"placeholders": { "placeholders": {
"Add new server": "Aggiungi nuovo server", "Add new server": "Aggiungi nuovo server",
+14 -4
View File
@@ -555,7 +555,10 @@
"View Active Charges": "활성 요금 보기", "View Active Charges": "활성 요금 보기",
"View Inactive Charges": "비활성 요금 보기", "View Inactive Charges": "비활성 요금 보기",
"Yes": "예", "Yes": "예",
"Is Self Service": "셀프 서비스입니다" "Is Self Service": "셀프 서비스입니다",
"Advanced Search": "고급 검색",
"Show advanced search": "고급 검색 표시",
"Hide advanced search": "고급 검색 숨기기"
}, },
"catalogs": { "catalogs": {
"Interest payment waiver": "이자 지급 면제", "Interest payment waiver": "이자 지급 면제",
@@ -1284,7 +1287,8 @@
"Important Dates": "중요한 날짜", "Important Dates": "중요한 날짜",
"Contact Information": "연락처 정보", "Contact Information": "연락처 정보",
"Classification": "분류", "Classification": "분류",
"Status": "상태" "Status": "상태",
"Pending Tasks": "보류 중인 작업"
}, },
"inputs": { "inputs": {
"Terms": "약관", "Terms": "약관",
@@ -2648,7 +2652,12 @@
"Income from Buy down fees": "매입 수수료 수입", "Income from Buy down fees": "매입 수수료 수입",
"Buy down fee Expense": "매입 수수료 비용", "Buy down fee Expense": "매입 수수료 비용",
"Skip Interest Refund Transaction Posting": "이자 환불 거래 게시 건너뛰기", "Skip Interest Refund Transaction Posting": "이자 환불 거래 게시 건너뛰기",
"Available Disbursement Amount (with Over Applied)": "초과 적용 금액을 포함한 사용 가능한 지급 금액" "Available Disbursement Amount (with Over Applied)": "초과 적용 금액을 포함한 사용 가능한 지급 금액",
"From date": "시작일",
"Resource id": "리소스 ID",
"To date": "종료일",
"Select action": "작업 선택",
"Select entity": "엔티티 선택"
}, },
"links": { "links": {
"Community": "지역 사회", "Community": "지역 사회",
@@ -2781,7 +2790,8 @@
"Apply Additional Shares": "추가 신청", "Apply Additional Shares": "추가 신청",
"Redeem Shares": "주식 상환", "Redeem Shares": "주식 상환",
"Approve Additional Shares": "추가 공유 승인", "Approve Additional Shares": "추가 공유 승인",
"Reject Additional Shares": "추가 공유 거부" "Reject Additional Shares": "추가 공유 거부",
"Tasks": "작업"
}, },
"placeholders": { "placeholders": {
"Add new server": "새 서버 추가", "Add new server": "새 서버 추가",
+14 -4
View File
@@ -555,7 +555,10 @@
"View Active Charges": "Peržiūrėti aktyvius mokesčius", "View Active Charges": "Peržiūrėti aktyvius mokesčius",
"View Inactive Charges": "Peržiūrėkite neaktyvius mokesčius", "View Inactive Charges": "Peržiūrėkite neaktyvius mokesčius",
"Yes": "Taip", "Yes": "Taip",
"Is Self Service": "Savitarna" "Is Self Service": "Savitarna",
"Advanced Search": "Išplėstinė paieška",
"Show advanced search": "Rodyti išplėstinę paiešką",
"Hide advanced search": "Slėpti išplėstinę paiešką"
}, },
"catalogs": { "catalogs": {
"Interest payment waiver": "Palūkanų mokėjimo atsisakymas", "Interest payment waiver": "Palūkanų mokėjimo atsisakymas",
@@ -1281,7 +1284,8 @@
"Important Dates": "Svarbios datos", "Important Dates": "Svarbios datos",
"Contact Information": "Kontaktinė informacija", "Contact Information": "Kontaktinė informacija",
"Classification": "Klasifikacija", "Classification": "Klasifikacija",
"Status": "Statusas" "Status": "Statusas",
"Pending Tasks": "Laukiamos užduotys"
}, },
"inputs": { "inputs": {
"Terms": "Sąlygos", "Terms": "Sąlygos",
@@ -2647,7 +2651,12 @@
"Available Disbursement Amount (with Over Applied)": "Galimas išmokėjimo kiekis (su pertekliumi)", "Available Disbursement Amount (with Over Applied)": "Galimas išmokėjimo kiekis (su pertekliumi)",
"Waive Penalties": "Atsisakyti delspinigių", "Waive Penalties": "Atsisakyti delspinigių",
"Overdue": "Pradelstas", "Overdue": "Pradelstas",
"Overdue Fees": "Delspinigiai" "Overdue Fees": "Vėluojantys mokesčiai",
"From date": "Nuo datos",
"Resource id": "Resurso identifikatorius",
"To date": "Iki datos",
"Select action": "Pasirinkite veiksmą",
"Select entity": "Pasirinkite objektą"
}, },
"links": { "links": {
"Community": "bendruomenė", "Community": "bendruomenė",
@@ -2781,7 +2790,8 @@
"Apply Additional Shares": "Taikyti Papildomą", "Apply Additional Shares": "Taikyti Papildomą",
"Redeem Shares": "Išpirkti akcijas", "Redeem Shares": "Išpirkti akcijas",
"Approve Additional Shares": "Patvirtinti papildomas akcijas", "Approve Additional Shares": "Patvirtinti papildomas akcijas",
"Reject Additional Shares": "Atmesti papildomas akcijas" "Reject Additional Shares": "Atmesti papildomas akcijas",
"Tasks": "Užduotys"
}, },
"placeholders": { "placeholders": {
"Add new server": "Pridėti naują serverį", "Add new server": "Pridėti naują serverį",
+14 -4
View File
@@ -555,7 +555,10 @@
"View Active Charges": "Skatīt aktīvās maksas", "View Active Charges": "Skatīt aktīvās maksas",
"View Inactive Charges": "Skatīt neaktīvās maksas", "View Inactive Charges": "Skatīt neaktīvās maksas",
"Yes": "Jā", "Yes": "Jā",
"Is Self Service": "Ir pašapkalpošanās" "Is Self Service": "Ir pašapkalpošanās",
"Advanced Search": "Advanced Search",
"Show advanced search": "Rādīt paplašinātu meklēšanu",
"Hide advanced search": "Paslēpt paplašinātu meklēšanu"
}, },
"catalogs": { "catalogs": {
"Interest payment waiver": "Atteikšanās no procentu maksājumiem", "Interest payment waiver": "Atteikšanās no procentu maksājumiem",
@@ -1283,7 +1286,8 @@
"Important Dates": "Svarīgi datumi", "Important Dates": "Svarīgi datumi",
"Contact Information": "Kontaktinformācija", "Contact Information": "Kontaktinformācija",
"Classification": "Klasifikācija", "Classification": "Klasifikācija",
"Status": "Statuss" "Status": "Statuss",
"Pending Tasks": "Pending Tasks"
}, },
"inputs": { "inputs": {
"Terms": "Noteikumi", "Terms": "Noteikumi",
@@ -2647,7 +2651,12 @@
"Income from Buy down fees": "Ienākumi no akciju izpirkšanas komisijas maksām", "Income from Buy down fees": "Ienākumi no akciju izpirkšanas komisijas maksām",
"Buy down fee Expense": "Akciju izpirkšanas komisijas izdevumi", "Buy down fee Expense": "Akciju izpirkšanas komisijas izdevumi",
"Skip Interest Refund Transaction Posting": "Izlaist procentu atmaksas ierakstu", "Skip Interest Refund Transaction Posting": "Izlaist procentu atmaksas ierakstu",
"Available Disbursement Amount (with Over Applied)": "Pieejamā izmaksas summa (ar pārsniegumu)" "Available Disbursement Amount (with Over Applied)": "Pieejamā izmaksas summa (ar pārsniegumu)",
"From date": "From date",
"Resource id": "Resource id",
"To date": "To date",
"Select action": "Izvēlēties darbību",
"Select entity": "Izvēlēties vienību"
}, },
"links": { "links": {
"Community": "kopiena", "Community": "kopiena",
@@ -2781,7 +2790,8 @@
"Apply Additional Shares": "Lietot papildu", "Apply Additional Shares": "Lietot papildu",
"Redeem Shares": "Izpirkt Akcijas", "Redeem Shares": "Izpirkt Akcijas",
"Approve Additional Shares": "Apstipriniet papildu akcijas", "Approve Additional Shares": "Apstipriniet papildu akcijas",
"Reject Additional Shares": "Noraidīt papildu akcijas" "Reject Additional Shares": "Noraidīt papildu akcijas",
"Tasks": "Tasks"
}, },
"placeholders": { "placeholders": {
"Add new server": "Pievienot jaunu serveri", "Add new server": "Pievienot jaunu serveri",
+14 -4
View File
@@ -555,7 +555,10 @@
"View Active Charges": "सक्रिय शुल्कहरू हेर्नुहोस्", "View Active Charges": "सक्रिय शुल्कहरू हेर्नुहोस्",
"View Inactive Charges": "निष्क्रिय शुल्कहरू हेर्नुहोस्", "View Inactive Charges": "निष्क्रिय शुल्कहरू हेर्नुहोस्",
"Yes": "हो", "Yes": "हो",
"Is Self Service": "आत्म सेवा हो" "Is Self Service": "आत्म सेवा हो",
"Advanced Search": "उन्नत खोज",
"Show advanced search": "उन्नत खोज देखाउनुहोस्",
"Hide advanced search": "उन्नत खोज लुकाउनुहोस्"
}, },
"catalogs": { "catalogs": {
"Interest payment waiver": "ब्याज भुक्तानी माफी", "Interest payment waiver": "ब्याज भुक्तानी माफी",
@@ -1281,7 +1284,8 @@
"Important Dates": "महत्वपूर्ण मितिहरू", "Important Dates": "महत्वपूर्ण मितिहरू",
"Contact Information": "सम्पर्क जानकारी", "Contact Information": "सम्पर्क जानकारी",
"Classification": "वर्गीकरण", "Classification": "वर्गीकरण",
"Status": "स्थिति" "Status": "स्थिति",
"Pending Tasks": "बाँकी कार्यहरू"
}, },
"inputs": { "inputs": {
"Terms": "सर्तहरू", "Terms": "सर्तहरू",
@@ -2645,7 +2649,12 @@
"Income from Buy down fees": "खरिद शुल्कबाट हुने आम्दानी", "Income from Buy down fees": "खरिद शुल्कबाट हुने आम्दानी",
"Buy down fee Expense": "खरीद शुल्क खर्च", "Buy down fee Expense": "खरीद शुल्क खर्च",
"Skip Interest Refund Transaction Posting": "ब्याज फिर्ता पोस्टिङ्ग छोड्नुहोस्", "Skip Interest Refund Transaction Posting": "ब्याज फिर्ता पोस्टिङ्ग छोड्नुहोस्",
"Available Disbursement Amount (with Over Applied)": "उपलब्ध भुक्तानी रकम (अधिक लागू रकम सहित)" "Available Disbursement Amount (with Over Applied)": "उपलब्ध भुक्तानी रकम (अधिक लागू रकम सहित)",
"From date": "मिति देखि",
"Resource id": "स्रोत आईडी",
"To date": "मिति सम्म",
"Select action": "कार्य चयन गर्नुहोस्",
"Select entity": "इकाई चयन गर्नुहोस्"
}, },
"links": { "links": {
"Community": "समुदाय", "Community": "समुदाय",
@@ -2779,7 +2788,8 @@
"Apply Additional Shares": "अतिरिक्त लागू गर्नुहोस्", "Apply Additional Shares": "अतिरिक्त लागू गर्नुहोस्",
"Redeem Shares": "शेयरहरू रिडिम गर्नुहोस्", "Redeem Shares": "शेयरहरू रिडिम गर्नुहोस्",
"Approve Additional Shares": "अतिरिक्त शेयरहरू स्वीकृत गर्नुहोस्", "Approve Additional Shares": "अतिरिक्त शेयरहरू स्वीकृत गर्नुहोस्",
"Reject Additional Shares": "अतिरिक्त शेयरहरू अस्वीकार गर्नुहोस्" "Reject Additional Shares": "अतिरिक्त शेयरहरू अस्वीकार गर्नुहोस्",
"Tasks": "कार्यहरू"
}, },
"placeholders": { "placeholders": {
"Add new server": "नयाँ सर्भर थप्नुहोस्", "Add new server": "नयाँ सर्भर थप्नुहोस्",
+14 -4
View File
@@ -555,7 +555,10 @@
"View Active Charges": "Ver cobranças ativas", "View Active Charges": "Ver cobranças ativas",
"View Inactive Charges": "Ver cobranças inativas", "View Inactive Charges": "Ver cobranças inativas",
"Yes": "Sim", "Yes": "Sim",
"Is Self Service": "É autoatendimento" "Is Self Service": "É autoatendimento",
"Advanced Search": "Pesquisa avançada",
"Show advanced search": "Mostrar pesquisa avançada",
"Hide advanced search": "Ocultar pesquisa avançada"
}, },
"catalogs": { "catalogs": {
"Interest payment waiver": "Isenção de pagamento de juros", "Interest payment waiver": "Isenção de pagamento de juros",
@@ -1282,7 +1285,8 @@
"Important Dates": "Datas Importantes", "Important Dates": "Datas Importantes",
"Contact Information": "Informações de Contato", "Contact Information": "Informações de Contato",
"Classification": "Classificação", "Classification": "Classificação",
"Status": "Status" "Status": "Status",
"Pending Tasks": "Tarefas Pendentes"
}, },
"inputs": { "inputs": {
"Terms": "Termos", "Terms": "Termos",
@@ -2646,7 +2650,12 @@
"Income from Buy down fees": "Receita com taxas de recompra", "Income from Buy down fees": "Receita com taxas de recompra",
"Buy down fee Expense": "Despesa com taxas de recompra", "Buy down fee Expense": "Despesa com taxas de recompra",
"Skip Interest Refund Transaction Posting": "Ignorar o lançamento do reembolso de juros", "Skip Interest Refund Transaction Posting": "Ignorar o lançamento do reembolso de juros",
"Available Disbursement Amount (with Over Applied)": "Valor de desembolso disponível (com sobreaplicação)" "Available Disbursement Amount (with Over Applied)": "Valor de desembolso disponível (com sobreaplicação)",
"From date": "Data de início",
"Resource id": "ID do recurso",
"To date": "Data de fim",
"Select action": "Selecionar ação",
"Select entity": "Selecionar entidade"
}, },
"links": { "links": {
"Community": "Comunidade", "Community": "Comunidade",
@@ -2780,7 +2789,8 @@
"Apply Additional Shares": "Aplicar Adicional", "Apply Additional Shares": "Aplicar Adicional",
"Redeem Shares": "Resgatar Ações", "Redeem Shares": "Resgatar Ações",
"Approve Additional Shares": "Aprovar ações adicionais", "Approve Additional Shares": "Aprovar ações adicionais",
"Reject Additional Shares": "Rejeitar compartilhamentos adicionais" "Reject Additional Shares": "Rejeitar compartilhamentos adicionais",
"Tasks": "Tarefas"
}, },
"placeholders": { "placeholders": {
"Add new server": "Adicionar novo servidor", "Add new server": "Adicionar novo servidor",
+14 -4
View File
@@ -555,7 +555,10 @@
"View Active Charges": "Tazama Malipo Yanayotumika", "View Active Charges": "Tazama Malipo Yanayotumika",
"View Inactive Charges": "Tazama Gharama Isiyotumika", "View Inactive Charges": "Tazama Gharama Isiyotumika",
"Yes": "Ndiyo", "Yes": "Ndiyo",
"Is Self Service": "Ni huduma binafsi" "Is Self Service": "Ni huduma binafsi",
"Advanced Search": "Utafutaji wa Kina",
"Show advanced search": "Onyesha utafutaji wa kina",
"Hide advanced search": "Ficha utafutaji wa kina"
}, },
"catalogs": { "catalogs": {
"Interest payment waiver": "Msamaha wa Malipo ya Riba", "Interest payment waiver": "Msamaha wa Malipo ya Riba",
@@ -1279,7 +1282,8 @@
"Important Dates": "Tarehe Muhimu", "Important Dates": "Tarehe Muhimu",
"Contact Information": "Maelezo ya Mawasiliano", "Contact Information": "Maelezo ya Mawasiliano",
"Classification": "Uainishaji", "Classification": "Uainishaji",
"Status": "Hali" "Status": "Hali",
"Pending Tasks": "Kazi Zinazongoja"
}, },
"inputs": { "inputs": {
"Terms": "Masharti", "Terms": "Masharti",
@@ -2643,7 +2647,12 @@
"Income from Buy down fees": "Mapato kutoka kwa ada ya Kununua", "Income from Buy down fees": "Mapato kutoka kwa ada ya Kununua",
"Buy down fee Expense": "Kununua ada ya chini Gharama", "Buy down fee Expense": "Kununua ada ya chini Gharama",
"Skip Interest Refund Transaction Posting": "Ruka uchapishaji wa muamala wa kurejesha riba", "Skip Interest Refund Transaction Posting": "Ruka uchapishaji wa muamala wa kurejesha riba",
"Available Disbursement Amount (with Over Applied)": "Tillgängligt utbetalningsbelopp (med överbetalning)" "Available Disbursement Amount (with Over Applied)": "Kiasi cha Utoaji Kinachopatikana (pamoja na Matumizi Zaidi)",
"From date": "Kutoka tarehe",
"Resource id": "Kitambulisho cha rasilimali",
"To date": "Hadi tarehe",
"Select action": "Chagua kitendo",
"Select entity": "Chagua huluki"
}, },
"links": { "links": {
"Community": "Jumuiya", "Community": "Jumuiya",
@@ -2777,7 +2786,8 @@
"Apply Additional Shares": "Omba Ziada", "Apply Additional Shares": "Omba Ziada",
"Redeem Shares": "Komboa Hisa", "Redeem Shares": "Komboa Hisa",
"Approve Additional Shares": "Idhinisha Hisa za Ziada", "Approve Additional Shares": "Idhinisha Hisa za Ziada",
"Reject Additional Shares": "Kataa Hisa za Ziada" "Reject Additional Shares": "Kataa Hisa za Ziada",
"Tasks": "Kazi"
}, },
"placeholders": { "placeholders": {
"Add new server": "Ongeza seva mpya", "Add new server": "Ongeza seva mpya",