From caa27841efd7461840422fd20282f40b684252c9 Mon Sep 17 00:00:00 2001 From: MaysWind Date: Wed, 7 Aug 2024 00:54:57 +0800 Subject: [PATCH] fix the incorrect calculation of monthly income and expense amount when filtering multiple accounts --- src/stores/transaction.js | 37 +++++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/src/stores/transaction.js b/src/stores/transaction.js index 2f9343eb..8d9c0cfd 100644 --- a/src/stores/transaction.js +++ b/src/stores/transaction.js @@ -188,13 +188,29 @@ function calculateMonthTotalAmount(exchangeRatesStore, transactionMonthList, def let hasUnCalculatedTotalExpense = false; let hasUnCalculatedTotalIncome = false; + const allAccountIdsMap = {}; + let totalAccountIdsCount = 0; + + if (accountIds && accountIds !== '0') { + const allAccountIdsArray = accountIds.split(','); + + for (let i = 0; i < allAccountIdsArray.length; i++) { + if (allAccountIdsArray[i]) { + allAccountIdsMap[allAccountIdsArray[i]] = true; + totalAccountIdsCount++; + } + } + } + for (let i = 0; i < transactionMonthList.items.length; i++) { const transaction = transactionMonthList.items[i]; let amount = transaction.sourceAmount; let account = transaction.sourceAccount; - if (accountIds && transaction.destinationAccount && (transaction.destinationAccount.id === accountIds || transaction.destinationAccount.parentId === accountIds)) { + if (totalAccountIdsCount > 0 && transaction.destinationAccount + && (!allAccountIdsMap[transaction.sourceAccount.id] && !allAccountIdsMap[transaction.sourceAccount.parentId]) + && (allAccountIdsMap[transaction.destinationAccount.id] || allAccountIdsMap[transaction.destinationAccount.parentId])) { amount = transaction.destinationAmount; account = transaction.destinationAccount; } @@ -223,17 +239,18 @@ function calculateMonthTotalAmount(exchangeRatesStore, transactionMonthList, def totalExpense += amount; } else if (transaction.type === transactionConstants.allTransactionTypes.Income) { totalIncome += amount; - } else if (transaction.type === transactionConstants.allTransactionTypes.Transfer && accountIds && accountIds !== '0') { - if (accountIds === transaction.sourceAccountId) { - totalExpense += amount; - } else if (accountIds === transaction.destinationAccountId) { - totalIncome += amount; - } else if (transaction.sourceAccount && accountIds === transaction.sourceAccount.parentId && - transaction.destinationAccount && accountIds === transaction.destinationAccount.parentId) { + } else if (transaction.type === transactionConstants.allTransactionTypes.Transfer && totalAccountIdsCount > 0) { + if (allAccountIdsMap[transaction.sourceAccountId] && allAccountIdsMap[transaction.destinationAccountId]) { // Do Nothing - } else if (transaction.sourceAccount && accountIds === transaction.sourceAccount.parentId) { + } else if (transaction.sourceAccount && transaction.destinationAccount && allAccountIdsMap[transaction.sourceAccount.parentId] && allAccountIdsMap[transaction.destinationAccount.parentId]) { + // Do Nothing + } else if (transaction.sourceAccount && allAccountIdsMap[transaction.sourceAccount.parentId] && allAccountIdsMap[transaction.destinationAccountId]) { + // Do Nothing + } else if (transaction.destinationAccount && allAccountIdsMap[transaction.sourceAccountId] && allAccountIdsMap[transaction.destinationAccount.parentId]) { + // Do Nothing + } else if (allAccountIdsMap[transaction.sourceAccountId] || (transaction.sourceAccount && allAccountIdsMap[transaction.sourceAccount.parentId])) { totalExpense += amount; - } else if (transaction.destinationAccount && accountIds === transaction.destinationAccount.parentId) { + } else if (allAccountIdsMap[transaction.destinationAccountId] || (transaction.destinationAccount && allAccountIdsMap[transaction.destinationAccount.parentId])) { totalIncome += amount; } }