/** * Copyright since 2025 Mifos Initiative * * This Source Code Form is subject to the terms of the Mozilla Public * 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/. */ /** Angular Imports */ import { Component, OnInit, inject } from '@angular/core'; import { UntypedFormGroup, UntypedFormBuilder, ReactiveFormsModule } from '@angular/forms'; import { ActivatedRoute, Router, RouterLink } from '@angular/router'; /** Custom Services */ import { AlertService } from 'app/core/alert/alert.service'; import { SavingsService } from 'app/savings/savings.service'; import { FixedDepositsService } from '../../fixed-deposits.service'; import { CdkTextareaAutosize } from '@angular/cdk/text-field'; import { STANDALONE_SHARED_IMPORTS } from 'app/standalone-shared.module'; /** * Undo Approval Fixed Deposits Account Component */ @Component({ selector: 'mifosx-undo-approval-fixed-deposits-account', templateUrl: './undo-approval-fixed-deposits-account.component.html', styleUrls: ['./undo-approval-fixed-deposits-account.component.scss'], imports: [ ...STANDALONE_SHARED_IMPORTS, CdkTextareaAutosize ] }) export class UndoApprovalFixedDepositsAccountComponent implements OnInit { private formBuilder = inject(UntypedFormBuilder); private savingsService = inject(SavingsService); private fixedDepositsService = inject(FixedDepositsService); private route = inject(ActivatedRoute); private router = inject(Router); private alertService = inject(AlertService); /** Undo Approval Fixed Deposits Account form. */ undoApprovalFixedDepositsAccountForm: UntypedFormGroup; /** Fixed Deposits Account Id */ accountId: any; /** Action to be Undo */ undoAction: string; undoCommand: string; /** * Fixed deposits endpoint is not supported so using Savings endpoint. * @param {FormBuilder} formBuilder Form Builder * @param {SavingsService} savingsService Savings Service * @param {ActivatedRoute} route Activated Route * @param {Router} router Router */ constructor() { this.undoCommand = 'undoapproval'; // Default command this.undoAction = this.route.snapshot.params['name']; if (this.undoAction === 'Undo Activation') { this.undoCommand = 'undoactivate'; } this.accountId = this.route.parent.snapshot.params['fixedDepositAccountId']; } /** * Creates the undo-approval fixed deposits form. */ ngOnInit() { this.createUndoApprovalFixedDepositsAccountForm(); } /** * Creates the undo-approval fixed deposits account form. */ createUndoApprovalFixedDepositsAccountForm() { this.undoApprovalFixedDepositsAccountForm = this.formBuilder.group({ note: [''] }); } /** * Submits the form and undo the approval of fixed deposits account, * if successful redirects to the share account. */ submit() { const data = { ...this.undoApprovalFixedDepositsAccountForm.value }; if (this.undoAction === 'Undo Activation') { this.fixedDepositsService .executeFixedDepositsAccountCommand(this.accountId, this.undoCommand, data) .subscribe((response: any) => { this.notifyIfSentForApproval(response); this.router.navigate(['../../'], { relativeTo: this.route }); }); } else { this.savingsService .executeSavingsAccountCommand(this.accountId, this.undoCommand, data) .subscribe((response: any) => { this.notifyIfSentForApproval(response); this.router.navigate(['../../'], { relativeTo: this.route }); }); } } /** * Both undo commands sit on maker-checker permissions, so either can come back parked in the * Checker Inbox rather than executed -- HTTP 200 with rollbackTransaction: true, and the account * reloaded unchanged. Without this the navigation away reads as "it worked". */ private notifyIfSentForApproval(response: any): void { if (response?.rollbackTransaction) { this.alertService.alert({ type: 'Success', message: `${this.undoAction} has been sent for checker approval. The account is unchanged until a checker approves it.` }); } } }