From f25f82a004f3001b5aa4f007b64593c0dc59c29b Mon Sep 17 00:00:00 2001 From: Soni Jay Date: Sun, 8 Feb 2026 05:06:00 +0530 Subject: [PATCH] WEB-673 Create a Tasks sections just like it was available in the legacy Mifos Community App (#3106) --- .../core/shell/toolbar/toolbar.component.html | 10 + .../checker-inbox.component.html | 227 +++++++++--------- .../checker-inbox.component.scss | 99 +++++++- .../checker-inbox/checker-inbox.component.ts | 13 +- .../client-approval.component.html | 33 +-- .../client-approval.component.scss | 44 ++++ .../loan-approval.component.html | 32 +-- .../loan-approval.component.scss | 44 ++++ .../loan-disbursal.component.html | 33 +-- .../loan-disbursal.component.scss | 44 ++++ .../reschedule-loan.component.html | 57 +++-- .../reschedule-loan.component.scss | 44 ++++ .../checker-inbox-and-tasks.component.html | 2 + .../checker-inbox-and-tasks.component.scss | 11 + .../checker-inbox-and-tasks.component.ts | 4 +- src/app/tasks/tasks.service.ts | 18 +- src/assets/translations/cs-CS.json | 18 +- src/assets/translations/de-DE.json | 18 +- src/assets/translations/en-US.json | 12 +- src/assets/translations/es-CL.json | 18 +- src/assets/translations/es-MX.json | 32 ++- src/assets/translations/fr-FR.json | 24 +- src/assets/translations/it-IT.json | 20 +- src/assets/translations/ko-KO.json | 18 +- src/assets/translations/lt-LT.json | 18 +- src/assets/translations/lv-LV.json | 18 +- src/assets/translations/ne-NE.json | 18 +- src/assets/translations/pt-PT.json | 18 +- src/assets/translations/sw-SW.json | 18 +- 29 files changed, 709 insertions(+), 256 deletions(-) diff --git a/src/app/core/shell/toolbar/toolbar.component.html b/src/app/core/shell/toolbar/toolbar.component.html index d0aa0cee7..bc82637aa 100644 --- a/src/app/core/shell/toolbar/toolbar.component.html +++ b/src/app/core/shell/toolbar/toolbar.component.html @@ -49,6 +49,16 @@ + + + {{ 'labels.menus.Tasks' | translate }} + -@if (checkerData) { -
-
- -
- - - -
-
+
+
+ + + + + + + +
+ @if (showAdvancedSearch) {
-
- - {{ 'labels.inputs.From Date' | translate }} +
+ + {{ 'labels.inputs.From date' | translate }} - - {{ 'labels.inputs.To Date' | translate }} + + {{ 'labels.inputs.To date' | translate }} - - {{ 'labels.inputs.Action' | translate }} + + {{ 'labels.inputs.Select action' | translate }} @for (action of makerCheckerTemplate.actionNames; track action) { @@ -66,8 +75,8 @@ } - - {{ 'labels.inputs.Entity' | translate }} + + {{ 'labels.inputs.Select entity' | translate }} @for (entity of makerCheckerTemplate.entityNames; track entity) { @@ -76,86 +85,86 @@ } - - {{ 'labels.inputs.Resource ID' | translate }} + + {{ 'labels.inputs.Resource id' | translate }} -
- @if (!noSearchedData) { - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - {{ 'labels.inputs.ID' | translate }}{{ makerChecker.id }}{{ 'labels.inputs.Made on Date' | translate }}{{ makerChecker.madeOnDate | dateFormat }}{{ 'labels.inputs.Status' | translate }}{{ makerChecker.processingResult }}{{ 'labels.inputs.User' | translate }}{{ makerChecker.maker }}{{ 'labels.inputs.Action' | translate }}{{ makerChecker.actionName }}{{ 'labels.inputs.Entity' | translate }}{{ makerChecker.entityName }}
- } - @if (noSearchedData) { -
-
- - {{ 'labels.text.No checker inbox data available for this search' | translate }} -
+ } + @if (checkerData && !noSearchedData) { + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + {{ 'labels.inputs.ID' | translate }}{{ makerChecker.id }}{{ 'labels.inputs.Made on Date' | translate }}{{ makerChecker.madeOnDate | dateFormat }}{{ 'labels.inputs.Status' | translate }}{{ makerChecker.processingResult }}{{ 'labels.inputs.User' | translate }}{{ makerChecker.maker }}{{ 'labels.inputs.Action' | translate }}{{ makerChecker.actionName }}{{ 'labels.inputs.Entity' | translate }}{{ makerChecker.entityName }}
+ } + @if (checkerData && noSearchedData) { +
+
+ + {{ 'labels.text.No checker inbox data available for this search' | translate }}
- } -
-} - -@if (!checkerData) { -
-
- - {{ 'labels.text.No checker inbox data available for this account' | translate }}
-
-} + } + + @if (!checkerData) { +
+
+ + {{ 'labels.text.No checker inbox data available for this account' | translate }} +
+
+ } +
diff --git a/src/app/tasks/checker-inbox-and-tasks-tabs/checker-inbox/checker-inbox.component.scss b/src/app/tasks/checker-inbox-and-tasks-tabs/checker-inbox/checker-inbox.component.scss index f2e16b8bb..22812c34c 100644 --- a/src/app/tasks/checker-inbox-and-tasks-tabs/checker-inbox/checker-inbox.component.scss +++ b/src/app/tasks/checker-inbox-and-tasks-tabs/checker-inbox/checker-inbox.component.scss @@ -10,14 +10,93 @@ padding: 1%; margin: 1%; - .mat-raised-button.mat-success { - color: #fff; - background-color: #008000ab; + ::ng-deep mat-form-field { + width: 280px; + 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 { - color: #fff; - background-color: #ffca00; + ::ng-deep .mat-mdc-select { + width: 100%; + } + + ::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 { @@ -25,6 +104,14 @@ margin-top: 1rem; } + .icon-button { + margin: 0; + } + + .action-button { + margin: 0; + } + .view-details { cursor: pointer; } diff --git a/src/app/tasks/checker-inbox-and-tasks-tabs/checker-inbox/checker-inbox.component.ts b/src/app/tasks/checker-inbox-and-tasks-tabs/checker-inbox/checker-inbox.component.ts index 5367b1bc3..dbf7036bb 100644 --- a/src/app/tasks/checker-inbox-and-tasks-tabs/checker-inbox/checker-inbox.component.ts +++ b/src/app/tasks/checker-inbox-and-tasks-tabs/checker-inbox/checker-inbox.component.ts @@ -25,6 +25,7 @@ import { MatRow } from '@angular/material/table'; import { MatDialog } from '@angular/material/dialog'; +import { MatIcon } from '@angular/material/icon'; /** Custom Services */ import { TasksService } from '../../tasks.service'; @@ -57,7 +58,8 @@ import { STANDALONE_SHARED_IMPORTS } from 'app/standalone-shared.module'; MatHeaderRow, MatRowDef, MatRow, - DateFormatPipe + DateFormatPipe, + MatIcon ] }) export class CheckerInboxComponent implements OnInit { @@ -78,6 +80,8 @@ export class CheckerInboxComponent implements OnInit { noSearchedData = false; /** Checks if there is any checker data */ checkerData = false; + /** Show/hide advanced search form */ + showAdvancedSearch = false; /** Maker Checker Search Form */ makerCheckerSearchForm: UntypedFormGroup; /** Minimum date allowed. */ @@ -138,6 +142,13 @@ export class CheckerInboxComponent implements OnInit { }); } + /** + * Toggle advanced search form visibility. + */ + toggleAdvancedSearch() { + this.showAdvancedSearch = !this.showAdvancedSearch; + } + search() { const dateFormat = this.settingsService.dateFormat; const makerCheckerSearchParams = { diff --git a/src/app/tasks/checker-inbox-and-tasks-tabs/client-approval/client-approval.component.html b/src/app/tasks/checker-inbox-and-tasks-tabs/client-approval/client-approval.component.html index 1cb7a931f..d377aa5e9 100644 --- a/src/app/tasks/checker-inbox-and-tasks-tabs/client-approval/client-approval.component.html +++ b/src/app/tasks/checker-inbox-and-tasks-tabs/client-approval/client-approval.component.html @@ -8,21 +8,24 @@ @if (showData) {
-
- -
- -
+
+ + + +
@for (client of groupedClients | keyvalue; track client) {

{{ client.key }}

diff --git a/src/app/tasks/checker-inbox-and-tasks-tabs/client-approval/client-approval.component.scss b/src/app/tasks/checker-inbox-and-tasks-tabs/client-approval/client-approval.component.scss index a1049a74e..e5116fbff 100644 --- a/src/app/tasks/checker-inbox-and-tasks-tabs/client-approval/client-approval.component.scss +++ b/src/app/tasks/checker-inbox-and-tasks-tabs/client-approval/client-approval.component.scss @@ -10,6 +10,34 @@ padding: 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 { color: #fff; background-color: #008000ab; @@ -18,6 +46,22 @@ .view-details { 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 { diff --git a/src/app/tasks/checker-inbox-and-tasks-tabs/loan-approval/loan-approval.component.html b/src/app/tasks/checker-inbox-and-tasks-tabs/loan-approval/loan-approval.component.html index 1dc88bc86..32ad81997 100644 --- a/src/app/tasks/checker-inbox-and-tasks-tabs/loan-approval/loan-approval.component.html +++ b/src/app/tasks/checker-inbox-and-tasks-tabs/loan-approval/loan-approval.component.html @@ -8,21 +8,23 @@ @if (showData) {
-
- -
- -
+
+ + + +
@for (office of officesArray; track office) {

{{ office.name }}

diff --git a/src/app/tasks/checker-inbox-and-tasks-tabs/loan-approval/loan-approval.component.scss b/src/app/tasks/checker-inbox-and-tasks-tabs/loan-approval/loan-approval.component.scss index a1049a74e..e5116fbff 100644 --- a/src/app/tasks/checker-inbox-and-tasks-tabs/loan-approval/loan-approval.component.scss +++ b/src/app/tasks/checker-inbox-and-tasks-tabs/loan-approval/loan-approval.component.scss @@ -10,6 +10,34 @@ padding: 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 { color: #fff; background-color: #008000ab; @@ -18,6 +46,22 @@ .view-details { 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 { diff --git a/src/app/tasks/checker-inbox-and-tasks-tabs/loan-disbursal/loan-disbursal.component.html b/src/app/tasks/checker-inbox-and-tasks-tabs/loan-disbursal/loan-disbursal.component.html index 7304128f6..4e5851a1d 100644 --- a/src/app/tasks/checker-inbox-and-tasks-tabs/loan-disbursal/loan-disbursal.component.html +++ b/src/app/tasks/checker-inbox-and-tasks-tabs/loan-disbursal/loan-disbursal.component.html @@ -8,21 +8,24 @@ @if (loans && loans.length > 0) {
-
- -
- -
+
+ + + +
diff --git a/src/app/tasks/checker-inbox-and-tasks-tabs/loan-disbursal/loan-disbursal.component.scss b/src/app/tasks/checker-inbox-and-tasks-tabs/loan-disbursal/loan-disbursal.component.scss index a1049a74e..e5116fbff 100644 --- a/src/app/tasks/checker-inbox-and-tasks-tabs/loan-disbursal/loan-disbursal.component.scss +++ b/src/app/tasks/checker-inbox-and-tasks-tabs/loan-disbursal/loan-disbursal.component.scss @@ -10,6 +10,34 @@ padding: 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 { color: #fff; background-color: #008000ab; @@ -18,6 +46,22 @@ .view-details { 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 { diff --git a/src/app/tasks/checker-inbox-and-tasks-tabs/reschedule-loan/reschedule-loan.component.html b/src/app/tasks/checker-inbox-and-tasks-tabs/reschedule-loan/reschedule-loan.component.html index b0a4d3894..7e33a461e 100644 --- a/src/app/tasks/checker-inbox-and-tasks-tabs/reschedule-loan/reschedule-loan.component.html +++ b/src/app/tasks/checker-inbox-and-tasks-tabs/reschedule-loan/reschedule-loan.component.html @@ -8,34 +8,33 @@ @if (loans && loans.length > 0) {
-
- -
- - -
+
+ + + + +
@@ -98,7 +97,7 @@ } -@if (loans.length === 0) { +@if (loans?.length === 0) {
diff --git a/src/app/tasks/checker-inbox-and-tasks-tabs/reschedule-loan/reschedule-loan.component.scss b/src/app/tasks/checker-inbox-and-tasks-tabs/reschedule-loan/reschedule-loan.component.scss index a1049a74e..e5116fbff 100644 --- a/src/app/tasks/checker-inbox-and-tasks-tabs/reschedule-loan/reschedule-loan.component.scss +++ b/src/app/tasks/checker-inbox-and-tasks-tabs/reschedule-loan/reschedule-loan.component.scss @@ -10,6 +10,34 @@ padding: 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 { color: #fff; background-color: #008000ab; @@ -18,6 +46,22 @@ .view-details { 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 { diff --git a/src/app/tasks/checker-inbox-and-tasks/checker-inbox-and-tasks.component.html b/src/app/tasks/checker-inbox-and-tasks/checker-inbox-and-tasks.component.html index c34760f36..108fc0698 100644 --- a/src/app/tasks/checker-inbox-and-tasks/checker-inbox-and-tasks.component.html +++ b/src/app/tasks/checker-inbox-and-tasks/checker-inbox-and-tasks.component.html @@ -9,6 +9,8 @@
+
{{ 'labels.heading.Pending Tasks' | translate }}
+