From 5f31dad2d3af80ab0f53cc52a8740f9a37ca0e75 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Fri, 20 Jan 2023 15:43:37 -0300 Subject: [PATCH] also merge refund when getting transactionById --- .../src/operations/transactions.ts | 33 +++++++++++++++---- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/packages/taler-wallet-core/src/operations/transactions.ts b/packages/taler-wallet-core/src/operations/transactions.ts index 083b6618a..9951fd6b2 100644 --- a/packages/taler-wallet-core/src/operations/transactions.ts +++ b/packages/taler-wallet-core/src/operations/transactions.ts @@ -286,11 +286,6 @@ export async function getTransactionById( const purchase = await tx.purchases.get(proposalId); if (!purchase) throw Error("not found"); - const theRefund = Object.values(purchase.refunds).find( - (r) => `${r.executionTime.t_s}` === executionTimeStr, - ); - if (!theRefund) throw Error("not found"); - const t = await tx.tombstones.get( makeTombstoneId( TombstoneTag.DeleteRefund, @@ -299,17 +294,41 @@ export async function getTransactionById( ), ); if (t) throw Error("deleted"); + + const filteredRefunds = await Promise.all( + Object.values(purchase.refunds).map(async (r) => { + const t = await tx.tombstones.get( + makeTombstoneId( + TombstoneTag.DeleteRefund, + purchase.proposalId, + `${r.executionTime.t_s}`, + ), + ); + if (!t) return r; + return undefined; + }), + ); + + const cleanRefunds = filteredRefunds.filter( + (x): x is WalletRefundItem => !!x, + ); + const download = await expectProposalDownload(ws, purchase, tx); const contractData = download.contractData; const refunds = mergeRefundByExecutionTime( - [theRefund], + cleanRefunds, Amounts.zeroOfAmount(contractData.amount), ); + const theRefund = refunds.find( + (r) => `${r.executionTime.t_s}` === executionTimeStr, + ); + if (!theRefund) throw Error("not found"); + return buildTransactionForRefund( purchase, contractData, - refunds[0], + theRefund, undefined, ); });