From 2a92ca8732195a3a317a0edc155efc0b72351272 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Tue, 30 May 2023 15:58:28 +0200 Subject: wallet-core: report possible actions in transactions list --- .../taler-wallet-core/src/operations/deposits.ts | 59 ++++++++++++++++++++-- 1 file changed, 54 insertions(+), 5 deletions(-) (limited to 'packages/taler-wallet-core/src/operations/deposits.ts') diff --git a/packages/taler-wallet-core/src/operations/deposits.ts b/packages/taler-wallet-core/src/operations/deposits.ts index 1ed2a705e..6387fc9b7 100644 --- a/packages/taler-wallet-core/src/operations/deposits.ts +++ b/packages/taler-wallet-core/src/operations/deposits.ts @@ -59,11 +59,11 @@ import { TransactionType, URL, WireFee, + TransactionAction, } from "@gnu-taler/taler-util"; import { DenominationRecord, DepositGroupRecord, - OperationStatus, DepositElementStatus, } from "../db.js"; import { TalerError } from "@gnu-taler/taler-util"; @@ -115,6 +115,7 @@ export function computeDepositTransactionStatus( major: TransactionMajorState.Done, }; } + // FIXME: We should actually use separate pending states for this! case DepositOperationStatus.Pending: { const numTotal = dg.payCoinSelection.coinPubs.length; let numDeposited = 0; @@ -134,9 +135,6 @@ export function computeDepositTransactionStatus( } } - logger.info(`num total ${numTotal}`); - logger.info(`num deposited ${numDeposited}`); - if (numKycRequired > 0) { return { major: TransactionMajorState.Pending, @@ -181,6 +179,57 @@ export function computeDepositTransactionStatus( } } +export function computeDepositTransactionActions( + dg: DepositGroupRecord, +): TransactionAction[] { + switch (dg.operationStatus) { + case DepositOperationStatus.Finished: { + return [TransactionAction.Delete]; + } + case DepositOperationStatus.Pending: { + const numTotal = dg.payCoinSelection.coinPubs.length; + let numDeposited = 0; + let numKycRequired = 0; + let numWired = 0; + for (let i = 0; i < numTotal; i++) { + if (dg.depositedPerCoin[i]) { + numDeposited++; + } + switch (dg.transactionPerCoin[i]) { + case DepositElementStatus.KycRequired: + numKycRequired++; + break; + case DepositElementStatus.Wired: + numWired++; + break; + } + } + + if (numKycRequired > 0) { + return [TransactionAction.Suspend, TransactionAction.Fail]; + } + + if (numDeposited == numTotal) { + return [TransactionAction.Suspend, TransactionAction.Fail]; + } + + return [TransactionAction.Suspend, TransactionAction.Abort]; + } + case DepositOperationStatus.Suspended: + return [TransactionAction.Resume]; + case DepositOperationStatus.Aborting: + return [TransactionAction.Fail, TransactionAction.Suspend]; + case DepositOperationStatus.Aborted: + return [TransactionAction.Delete]; + case DepositOperationStatus.Failed: + return [TransactionAction.Delete]; + case DepositOperationStatus.SuspendedAborting: + return [TransactionAction.Resume, TransactionAction.Fail]; + default: + throw Error(`unexpected deposit group state (${dg.operationStatus})`); + } +} + export async function suspendDepositGroup( ws: InternalWalletState, depositGroupId: string, @@ -309,7 +358,7 @@ export async function abortDepositGroup( notifyTransition(ws, transactionId, transitionInfo); } -export async function cancelAbortingDepositGroup( +export async function failDepositTransaction( ws: InternalWalletState, depositGroupId: string, ): Promise { -- cgit v1.2.3