diff --git a/src/app/tasks/checker-inbox-and-tasks-tabs/pending-account/pending-account.component.html b/src/app/tasks/checker-inbox-and-tasks-tabs/pending-account/pending-account.component.html index f5fc70de0..a4ce2fedc 100644 --- a/src/app/tasks/checker-inbox-and-tasks-tabs/pending-account/pending-account.component.html +++ b/src/app/tasks/checker-inbox-and-tasks-tabs/pending-account/pending-account.component.html @@ -19,9 +19,22 @@ />
- +
@@ -103,8 +116,8 @@ diff --git a/src/app/tasks/checker-inbox-and-tasks-tabs/pending-account/pending-account.component.scss b/src/app/tasks/checker-inbox-and-tasks-tabs/pending-account/pending-account.component.scss index 0ddbf0f4c..25eff1326 100644 --- a/src/app/tasks/checker-inbox-and-tasks-tabs/pending-account/pending-account.component.scss +++ b/src/app/tasks/checker-inbox-and-tasks-tabs/pending-account/pending-account.component.scss @@ -89,9 +89,34 @@ $text-muted: #64748b; border-color: #16a34a; color: #16a34a; - &:hover { + &:hover:not([disabled]) { background: #f0fdf4; } + + &[disabled] { + opacity: 0.45; + } +} + +.cv-btn-reject { + border-color: #dc2626; + color: #dc2626; + + &:hover:not([disabled]) { + background: #fef2f2; + } + + &[disabled] { + opacity: 0.45; + } +} + +.clickable-row { + cursor: pointer; + + &:hover td { + background: #f8fafc; + } } .type-badge { diff --git a/src/app/tasks/checker-inbox-and-tasks-tabs/pending-account/pending-account.component.ts b/src/app/tasks/checker-inbox-and-tasks-tabs/pending-account/pending-account.component.ts index bc8336ae0..b607edd10 100644 --- a/src/app/tasks/checker-inbox-and-tasks-tabs/pending-account/pending-account.component.ts +++ b/src/app/tasks/checker-inbox-and-tasks-tabs/pending-account/pending-account.component.ts @@ -107,7 +107,25 @@ export class PendingAccountComponent { this.dataSource.filter = filterValue.trim().toLowerCase(); } + navigateToAccount(account: any): void { + const clientId = account.clientId; + const accountId = account.id; + const depositTypeId = account.depositType?.id; + let path: string; + if (account.accountType === 'Current') { + path = `/clients/${clientId}/current-accounts/${accountId}`; + } else if (depositTypeId === 200) { + path = `/clients/${clientId}/fixed-deposits-accounts/${accountId}`; + } else if (depositTypeId === 300) { + path = `/clients/${clientId}/recurring-deposits-accounts/${accountId}`; + } else { + path = `/clients/${clientId}/savings-accounts/${accountId}`; + } + this.router.navigate([path]); + } + approveAccounts() { + if (!this.selection.hasValue()) return; const formfields: FormfieldBase[] = [ new DatepickerBase({ controlName: 'approvedOnDate', @@ -131,6 +149,60 @@ export class PendingAccountComponent { }); } + rejectAccounts() { + if (!this.selection.hasValue()) return; + const formfields: FormfieldBase[] = [ + new DatepickerBase({ + controlName: 'rejectedOnDate', + label: 'Rejected On Date', + value: new Date(), + type: 'datetime-local', + required: true + }) + ]; + const dialogRef = this.dialog.open(FormDialogComponent, { + data: { + title: 'Enter Rejection Date', + layout: { addButtonText: 'Confirm' }, + formfields + } + }); + dialogRef.afterClosed().subscribe((response: any) => { + if (response?.data) { + this.bulkReject(response.data); + } + }); + } + + private bulkReject(submittedData: any) { + const dateFormat = this.settingsService.dateFormat; + const locale = this.settingsService.language.code; + const rejectedOnDate = this.dateUtils.formatDate(submittedData.value.rejectedOnDate, dateFormat); + const payload = { rejectedOnDate, dateFormat, locale }; + + const selected = this.selection.selected; + let done = 0; + selected.forEach((account: any) => { + const depositTypeId = account.depositType?.id; + let reject$; + if (account.accountType === 'Current') { + reject$ = this.tasksService.rejectCurrentAccount(account.id, payload); + } else if (depositTypeId === 200) { + reject$ = this.tasksService.rejectFDAccount(account.id, payload); + } else if (depositTypeId === 300) { + reject$ = this.tasksService.rejectRDAccount(account.id, payload); + } else { + reject$ = this.tasksService.rejectSavingsAccount(account.id, payload); + } + reject$.subscribe(() => { + done++; + if (done === selected.length) { + this.reload(); + } + }); + }); + } + private bulkApprove(submittedData: any) { const dateFormat = this.settingsService.dateFormat; const locale = this.settingsService.language.code; diff --git a/src/app/tasks/checker-inbox-and-tasks-tabs/rejected-account/rejected-account.component.html b/src/app/tasks/checker-inbox-and-tasks-tabs/rejected-account/rejected-account.component.html index d35bc289b..5776bd2fe 100644 --- a/src/app/tasks/checker-inbox-and-tasks-tabs/rejected-account/rejected-account.component.html +++ b/src/app/tasks/checker-inbox-and-tasks-tabs/rejected-account/rejected-account.component.html @@ -83,7 +83,12 @@ - + } diff --git a/src/app/tasks/checker-inbox-and-tasks-tabs/rejected-account/rejected-account.component.scss b/src/app/tasks/checker-inbox-and-tasks-tabs/rejected-account/rejected-account.component.scss index 6bf43adb7..c11ebdb46 100644 --- a/src/app/tasks/checker-inbox-and-tasks-tabs/rejected-account/rejected-account.component.scss +++ b/src/app/tasks/checker-inbox-and-tasks-tabs/rejected-account/rejected-account.component.scss @@ -63,6 +63,14 @@ $text-muted: #64748b; } } +.table-row { + cursor: pointer; + + &:hover td { + background: #f8fafc; + } +} + .type-badge { display: inline-flex; align-items: center; diff --git a/src/app/tasks/checker-inbox-and-tasks-tabs/rejected-account/rejected-account.component.ts b/src/app/tasks/checker-inbox-and-tasks-tabs/rejected-account/rejected-account.component.ts index 3494f9a67..36b86278b 100644 --- a/src/app/tasks/checker-inbox-and-tasks-tabs/rejected-account/rejected-account.component.ts +++ b/src/app/tasks/checker-inbox-and-tasks-tabs/rejected-account/rejected-account.component.ts @@ -7,7 +7,7 @@ */ import { Component, inject } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; +import { ActivatedRoute, Router } from '@angular/router'; import { MatTableDataSource, MatTable, @@ -47,6 +47,7 @@ import { STANDALONE_SHARED_IMPORTS } from 'app/standalone-shared.module'; }) export class RejectedAccountComponent { private route = inject(ActivatedRoute); + private router = inject(Router); dataSource: MatTableDataSource; showData = false; @@ -72,6 +73,23 @@ export class RejectedAccountComponent { }); } + navigateToAccount(account: any): void { + const clientId = account.clientId; + const accountId = account.id; + const depositTypeId = account.depositType?.id; + let path: string; + if (account.accountType === 'Current') { + path = `/clients/${clientId}/current-accounts/${accountId}`; + } else if (depositTypeId === 200) { + path = `/clients/${clientId}/fixed-deposits-accounts/${accountId}`; + } else if (depositTypeId === 300) { + path = `/clients/${clientId}/recurring-deposits-accounts/${accountId}`; + } else { + path = `/clients/${clientId}/savings-accounts/${accountId}`; + } + this.router.navigate([path]); + } + applyFilter(filterValue: string = '') { this.dataSource.filter = filterValue.trim().toLowerCase(); } diff --git a/src/app/tasks/tasks.service.ts b/src/app/tasks/tasks.service.ts index 38f128e0c..23587339a 100644 --- a/src/app/tasks/tasks.service.ts +++ b/src/app/tasks/tasks.service.ts @@ -172,6 +172,38 @@ export class TasksService { return this.http.post(`/currentaccounts/${accountId}`, data, { params: httpParams }); } + /** + * Reject a savings account + */ + rejectSavingsAccount(accountId: any, data: any): Observable { + const httpParams = new HttpParams().set('command', 'reject'); + return this.http.post(`/savingsaccounts/${accountId}`, data, { params: httpParams }); + } + + /** + * Reject a fixed deposit account + */ + rejectFDAccount(accountId: any, data: any): Observable { + const httpParams = new HttpParams().set('command', 'reject'); + return this.http.post(`/fixeddepositaccounts/${accountId}`, data, { params: httpParams }); + } + + /** + * Reject a recurring deposit account + */ + rejectRDAccount(accountId: any, data: any): Observable { + const httpParams = new HttpParams().set('command', 'reject'); + return this.http.post(`/recurringdepositaccounts/${accountId}`, data, { params: httpParams }); + } + + /** + * Reject a current account + */ + rejectCurrentAccount(accountId: any, data: any): Observable { + const httpParams = new HttpParams().set('command', 'reject'); + return this.http.post(`/currentaccounts/${accountId}`, data, { params: httpParams }); + } + /** * Submit data in batches. * @param {data} Data to be submitted diff --git a/src/environments/.env.ts b/src/environments/.env.ts index d1e461b73..80af90d1e 100644 --- a/src/environments/.env.ts +++ b/src/environments/.env.ts @@ -9,8 +9,8 @@ /* tslint:disable */ export default { 'mifos_x': { - 'version': '260522', - 'hash': '64c76a98' + 'version': '260525', + 'hash': 'ad6f629c' }, 'allow_switching_backend_instance': true };