From d0e8419b2eb5ea4deca6ba95e9abc4ceb7e31b91 Mon Sep 17 00:00:00 2001 From: MaysWind Date: Sun, 7 Jul 2024 14:22:03 +0800 Subject: [PATCH] use the account / transaction category filter of the statistics page when navigating from the statistics page to the transaction list page --- src/lib/account.js | 29 +++++++++++++++++++++++++++++ src/lib/category.js | 28 ++++++++++++++++++++++++++++ src/lib/common.js | 16 ++++++++++++++++ src/stores/statistics.js | 19 ++++++++++++++++++- 4 files changed, 91 insertions(+), 1 deletion(-) diff --git a/src/lib/account.js b/src/lib/account.js index b8c6d32d..568cd274 100644 --- a/src/lib/account.js +++ b/src/lib/account.js @@ -228,6 +228,35 @@ export function getAllFilteredAccountsBalance(categorizedAccounts, accountFilter return ret; } + +export function getFinalAccountIdsByFilteredAccountIds(allAccountsMap, filteredAccountIds) { + let finalAccountIds = ''; + + if (!allAccountsMap) { + return finalAccountIds; + } + + for (let accountId in allAccountsMap) { + if (!Object.prototype.hasOwnProperty.call(allAccountsMap, accountId)) { + continue; + } + + const account = allAccountsMap[accountId]; + + if (filteredAccountIds && !isAccountOrSubAccountsAllChecked(account, filteredAccountIds)) { + continue; + } + + if (finalAccountIds.length > 0) { + finalAccountIds += ','; + } + + finalAccountIds += account.id; + } + + return finalAccountIds; +} + export function getUnifiedSelectedAccountsCurrencyOrDefaultCurrency(allAccounts, selectedAccountIds, defaultCurrency) { if (!selectedAccountIds) { return defaultCurrency; diff --git a/src/lib/category.js b/src/lib/category.js index cbe76195..6813b505 100644 --- a/src/lib/category.js +++ b/src/lib/category.js @@ -138,6 +138,34 @@ export function allVisiblePrimaryTransactionCategoriesByType(allTransactionCateg return allVisibleCategories[type.toString()].visibleCategories; } +export function getFinalCategoryIdsByFilteredCategoryIds(allTransactionCategoriesMap, filteredCategoryIds) { + let finalCategoryIds = ''; + + if (!allTransactionCategoriesMap) { + return finalCategoryIds; + } + + for (let categoryId in allTransactionCategoriesMap) { + if (!Object.prototype.hasOwnProperty.call(allTransactionCategoriesMap, categoryId)) { + continue; + } + + const category = allTransactionCategoriesMap[categoryId]; + + if (filteredCategoryIds && !isCategoryOrSubCategoriesAllChecked(category, filteredCategoryIds)) { + continue; + } + + if (finalCategoryIds.length > 0) { + finalCategoryIds += ','; + } + + finalCategoryIds += category.id; + } + + return finalCategoryIds; +} + export function isSubCategoryIdAvailable(categories, categoryId) { if (!categories || !categories.length) { return false; diff --git a/src/lib/common.js b/src/lib/common.js index 5a1851e9..4025408a 100644 --- a/src/lib/common.js +++ b/src/lib/common.js @@ -91,6 +91,22 @@ export function isEquals(obj1, obj2) { } } +export function isObjectEmpty(obj) { + if (!obj) { + return true; + } + + for (let field in obj) { + if (!Object.prototype.hasOwnProperty.call(obj, field)) { + continue; + } + + return false; + } + + return true; +} + export function getObjectOwnFieldCount(object) { let count = 0; diff --git a/src/stores/statistics.js b/src/stores/statistics.js index ec069b35..0ab845cd 100644 --- a/src/stores/statistics.js +++ b/src/stores/statistics.js @@ -16,13 +16,20 @@ import logger from '@/lib/logger.js'; import { isEquals, isNumber, + isObject, isYearMonth, - isObject + isObjectEmpty } from '@/lib/common.js'; import { getYearAndMonthFromUnixTime, getDateRangeByDateType } from '@/lib/datetime.js'; +import { + getFinalAccountIdsByFilteredAccountIds +} from '@/lib/account.js'; +import { + getFinalCategoryIdsByFilteredCategoryIds +} from '@/lib/category.js'; import { sortStatisticsItems } from '@/lib/statistics.js'; @@ -736,6 +743,8 @@ export const useStatisticsStore = defineStore('statistics', { } }, getTransactionListPageParams(analysisType, item, dateRange) { + const accountsStore = useAccountsStore(); + const transactionCategoriesStore = useTransactionCategoriesStore(); const querys = []; if (this.transactionStatisticsFilter.chartDataType === statisticsConstants.allChartDataTypes.IncomeByAccount.type @@ -755,11 +764,19 @@ export const useStatisticsStore = defineStore('statistics', { || this.transactionStatisticsFilter.chartDataType === statisticsConstants.allChartDataTypes.AccountTotalAssets.type || this.transactionStatisticsFilter.chartDataType === statisticsConstants.allChartDataTypes.AccountTotalLiabilities.type) { querys.push('accountIds=' + item.id); + + if (!isObjectEmpty(this.transactionStatisticsFilter.filterCategoryIds)) { + querys.push('categoryIds=' + getFinalCategoryIdsByFilteredCategoryIds(transactionCategoriesStore.allTransactionCategoriesMap, this.transactionStatisticsFilter.filterCategoryIds)); + } } else if (this.transactionStatisticsFilter.chartDataType === statisticsConstants.allChartDataTypes.IncomeByPrimaryCategory.type || this.transactionStatisticsFilter.chartDataType === statisticsConstants.allChartDataTypes.IncomeBySecondaryCategory.type || this.transactionStatisticsFilter.chartDataType === statisticsConstants.allChartDataTypes.ExpenseByPrimaryCategory.type || this.transactionStatisticsFilter.chartDataType === statisticsConstants.allChartDataTypes.ExpenseBySecondaryCategory.type) { querys.push('categoryIds=' + item.id); + + if (!isObjectEmpty(this.transactionStatisticsFilter.filterAccountIds)) { + querys.push('accountIds=' + getFinalAccountIdsByFilteredAccountIds(accountsStore.allAccountsMap, this.transactionStatisticsFilter.filterAccountIds)); + } } if (analysisType === statisticsConstants.allAnalysisTypes.CategoricalAnalysis