diff --git a/src/locales/en.js b/src/locales/en.js
index 3fc88827..c5f2e432 100644
--- a/src/locales/en.js
+++ b/src/locales/en.js
@@ -514,6 +514,9 @@ export default {
'Accounts': 'Accounts',
'Statistics': 'Statistics',
'Settings': 'Settings',
+ 'Select All': 'Select All',
+ 'Select None': 'Select None',
+ 'Invert Selection': 'Invert Selection',
'Back': 'Back',
'Load More': 'Load More',
'No data': 'No data',
@@ -666,6 +669,8 @@ export default {
'Default Chart Type': 'Default Chart Type',
'Default Chart Data Type': 'Default Chart Data Type',
'Default Date Range': 'Default Date Range',
+ 'Filter Accounts': 'Filter Accounts',
+ 'Filter Transaction Categories': 'Filter Transaction Categories',
'User Profile': 'User Profile',
'Language': 'Language',
'Auto Update Exchange Rates Data': 'Auto Update Exchange Rates Data',
diff --git a/src/locales/zh_Hans.js b/src/locales/zh_Hans.js
index 15bea5c3..b2564d5c 100644
--- a/src/locales/zh_Hans.js
+++ b/src/locales/zh_Hans.js
@@ -514,6 +514,9 @@ export default {
'Accounts': '账户',
'Statistics': '统计',
'Settings': '设置',
+ 'Select All': '全部选择',
+ 'Select None': '全部不选',
+ 'Invert Selection': '反向选择',
'Back': '返回',
'Load More': '加载更多',
'No data': '没有数据',
@@ -666,6 +669,8 @@ export default {
'Default Chart Type': '默认图表类型',
'Default Chart Data Type': '默认图表数据类型',
'Default Date Range': '默认时间范围',
+ 'Filter Accounts': '过滤账户',
+ 'Filter Transaction Categories': '过滤交易类型',
'User Profile': '用户信息',
'Language': '语言',
'Auto Update Exchange Rates Data': '自动更新汇率数据',
diff --git a/src/router/mobile.js b/src/router/mobile.js
index a9f287fa..04b73db4 100644
--- a/src/router/mobile.js
+++ b/src/router/mobile.js
@@ -13,6 +13,8 @@ import AccountEditPage from '../views/mobile/accounts/Edit.vue';
import StatisticsTransactionPage from '../views/mobile/statistics/Transaction.vue';
import StatisticsSettingsPage from '../views/mobile/statistics/Settings.vue';
+import StatisticsAccountFilterSettingsPage from '../views/mobile/statistics/AccountFilterSettings.vue';
+import StatisticsCategoryFilterSettingsPage from '../views/mobile/statistics/CategoryFilterSettings.vue';
import SettingsPage from '../views/mobile/Settings.vue';
import ApplicationLockPage from '../views/mobile/ApplicationLock.vue';
@@ -181,6 +183,16 @@ const routes = [
component: StatisticsSettingsPage,
beforeEnter: checkLogin
},
+ {
+ path: '/statistic/filter/account',
+ component: StatisticsAccountFilterSettingsPage,
+ beforeEnter: checkLogin
+ },
+ {
+ path: '/statistic/filter/category',
+ component: StatisticsCategoryFilterSettingsPage,
+ beforeEnter: checkLogin
+ },
{
path: '/settings',
component: SettingsPage,
diff --git a/src/store/index.js b/src/store/index.js
index 4a063078..29b2d1bb 100644
--- a/src/store/index.js
+++ b/src/store/index.js
@@ -184,6 +184,8 @@ const stores = {
endTime: 0,
chartType: statisticsConstants.defaultChartType,
chartDataType: statisticsConstants.defaultChartDataType,
+ filterAccountIds: {},
+ filterCategoryIds: {}
},
transactionStatistics: [],
transactionStatisticsStateInvalid: true,
@@ -244,6 +246,8 @@ const stores = {
state.transactionStatisticsFilter.endTime = 0;
state.transactionStatisticsFilter.chartType = statisticsConstants.defaultChartType;
state.transactionStatisticsFilter.chartDataType = statisticsConstants.defaultChartDataType;
+ state.transactionStatisticsFilter.filterAccountIds = {};
+ state.transactionStatisticsFilter.filterCategoryIds = {};
state.transactionStatistics = {};
state.transactionStatisticsStateInvalid = true;
@@ -833,6 +837,18 @@ const stores = {
} else {
state.transactionStatisticsFilter.chartDataType = statisticsConstants.defaultChartDataType;
}
+
+ if (filter && utils.isObject(filter.filterAccountIds)) {
+ state.transactionStatisticsFilter.filterAccountIds = filter.filterAccountIds;
+ } else {
+ state.transactionStatisticsFilter.filterAccountIds = {};
+ }
+
+ if (filter && utils.isObject(filter.filterCategoryIds)) {
+ state.transactionStatisticsFilter.filterCategoryIds = filter.filterCategoryIds;
+ } else {
+ state.transactionStatisticsFilter.filterCategoryIds = {};
+ }
},
[UPDATE_TRANSACTION_STATISTICS_FILTER] (state, filter) {
if (filter && utils.isNumber(filter.dateType)) {
@@ -854,6 +870,14 @@ const stores = {
if (filter && utils.isNumber(filter.chartDataType)) {
state.transactionStatisticsFilter.chartDataType = filter.chartDataType;
}
+
+ if (filter && utils.isObject(filter.filterAccountIds)) {
+ state.transactionStatisticsFilter.filterAccountIds = filter.filterAccountIds;
+ }
+
+ if (filter && utils.isObject(filter.filterCategoryIds)) {
+ state.transactionStatisticsFilter.filterCategoryIds = filter.filterCategoryIds;
+ }
},
[UPDATE_TRANSACTION_STATISTICS_INVALID_STATE] (state, invalidState) {
state.transactionStatisticsStateInvalid = invalidState;
diff --git a/src/views/mobile/statistics/AccountFilterSettings.vue b/src/views/mobile/statistics/AccountFilterSettings.vue
new file mode 100644
index 00000000..dafae06c
--- /dev/null
+++ b/src/views/mobile/statistics/AccountFilterSettings.vue
@@ -0,0 +1,296 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Account Category
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Account Category 2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t(accountCategory.name) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('Select All') }}
+ {{ $t('Select None') }}
+ {{ $t('Invert Selection') }}
+
+
+ {{ $t('Cancel') }}
+
+
+
+
+
+
diff --git a/src/views/mobile/statistics/CategoryFilterSettings.vue b/src/views/mobile/statistics/CategoryFilterSettings.vue
new file mode 100644
index 00000000..e661f557
--- /dev/null
+++ b/src/views/mobile/statistics/CategoryFilterSettings.vue
@@ -0,0 +1,277 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Transaction Category
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ categoryType | categoryTypeName($constants.category.allCategoryTypes) | localized }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('Select All') }}
+ {{ $t('Select None') }}
+ {{ $t('Invert Selection') }}
+
+
+ {{ $t('Cancel') }}
+
+
+
+
+
+
diff --git a/src/views/mobile/statistics/Transaction.vue b/src/views/mobile/statistics/Transaction.vue
index 651fcfbe..3640c167 100644
--- a/src/views/mobile/statistics/Transaction.vue
+++ b/src/views/mobile/statistics/Transaction.vue
@@ -231,6 +231,10 @@
+
+ {{ $t('Filter Accounts') }}
+ {{ $t('Filter Transaction Categories') }}
+
{{ $t('Settings') }}
@@ -535,6 +539,12 @@ export default {
clickPieChartItem(item) {
this.$f7router.navigate(this.$options.filters.itemLinkUrl(item, this.query, this.$constants.statistics.allChartDataTypes));
},
+ filterAccounts() {
+ this.$f7router.navigate('/statistic/filter/account');
+ },
+ filterCategories() {
+ this.$f7router.navigate('/statistic/filter/category');
+ },
settings() {
this.$f7router.navigate('/statistic/settings');
},
@@ -565,6 +575,14 @@ export default {
continue;
}
+ if (this.query.filterAccountIds && this.query.filterAccountIds[item.account.id]) {
+ continue;
+ }
+
+ if (this.query.filterCategoryIds && this.query.filterCategoryIds[item.category.id]) {
+ continue;
+ }
+
if (this.query.chartDataType === this.$constants.statistics.allChartDataTypes.ExpenseByAccount.type ||
this.query.chartDataType === this.$constants.statistics.allChartDataTypes.IncomeByAccount.type) {
if (this.$utilities.isNumber(item.amountInDefaultCurrency)) {
@@ -656,6 +674,10 @@ export default {
}
}
+ if (this.query.filterAccountIds && this.query.filterAccountIds[account.id]) {
+ continue;
+ }
+
let primaryAccount = this.$store.state.allAccountsMap[account.parentId];
if (!primaryAccount) {