Skip to content

Commit

Permalink
code refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
mayswind committed Jul 4, 2024
1 parent c827675 commit 0b32607
Show file tree
Hide file tree
Showing 6 changed files with 284 additions and 138 deletions.
32 changes: 32 additions & 0 deletions src/lib/account.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import currencyConstants from '@/consts/currency.js';
import accountConstants from '@/consts/account.js';

export function setAccountModelByAnotherAccount(account, account2) {
Expand Down Expand Up @@ -227,6 +228,37 @@ export function getAllFilteredAccountsBalance(categorizedAccounts, accountFilter

return ret;
}
export function getUnifiedSelectedAccountsCurrencyOrDefaultCurrency(allAccounts, selectedAccountIds, defaultCurrency) {
if (!selectedAccountIds) {
return defaultCurrency;
}

let accountCurrency = '';

for (let accountId in selectedAccountIds) {
if (!Object.prototype.hasOwnProperty.call(selectedAccountIds, accountId)) {
continue;
}

const account = allAccounts[accountId];

if (account.currency === currencyConstants.parentAccountCurrencyPlaceholder) {
continue;
}

if (accountCurrency === '') {
accountCurrency = account.currency;
} else if (accountCurrency !== account.currency) {
return defaultCurrency;
}
}

if (accountCurrency) {
return accountCurrency;
}

return defaultCurrency;
}

export function selectAccountOrSubAccounts(filterAccountIds, account, value) {
if (account.type === accountConstants.allAccountTypes.SingleAccount) {
Expand Down
2 changes: 2 additions & 0 deletions src/locales/en.js
Original file line number Diff line number Diff line change
Expand Up @@ -1009,7 +1009,9 @@ export default {
'Swap Amount': 'Swap Amount',
'Swap Account and Amount': 'Swap Account and Amount',
'Category': 'Category',
'Multiple Categories': 'Multiple Categories',
'Account': 'Account',
'Multiple Accounts': 'Multiple Accounts',
'Source Account': 'Source Account',
'Destination Account': 'Destination Account',
'Transaction Time': 'Transaction Time',
Expand Down
2 changes: 2 additions & 0 deletions src/locales/zh_Hans.js
Original file line number Diff line number Diff line change
Expand Up @@ -1009,7 +1009,9 @@ export default {
'Swap Amount': '交换金额',
'Swap Account and Amount': '交换账户和金额',
'Category': '分类',
'Multiple Categories': '多个分类',
'Account': '账户',
'Multiple Accounts': '多个账户',
'Source Account': '来源账户',
'Destination Account': '目标账户',
'Transaction Time': '交易时间',
Expand Down
146 changes: 104 additions & 42 deletions src/stores/transaction.js
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ function loadTransactionList(state, settingsStore, exchangeRatesStore, { transac
}

if (!currentMonthList || currentMonthList.year !== transactionYear || currentMonthList.month !== transactionMonth) {
calculateMonthTotalAmount(state, exchangeRatesStore, currentMonthList, defaultCurrency, state.transactionsFilter.accountId, false);
calculateMonthTotalAmount(state, exchangeRatesStore, currentMonthList, defaultCurrency, state.transactionsFilter.accountIds, false);

state.transactions.push({
year: transactionYear,
Expand All @@ -79,14 +79,14 @@ function loadTransactionList(state, settingsStore, exchangeRatesStore, { transac
}

currentMonthList.items.push(Object.freeze(item));
calculateMonthTotalAmount(state, exchangeRatesStore, currentMonthList, defaultCurrency, state.transactionsFilter.accountId, true);
calculateMonthTotalAmount(state, exchangeRatesStore, currentMonthList, defaultCurrency, state.transactionsFilter.accountIds, true);
}
}

if (transactions.nextTimeSequenceId) {
state.transactionsNextTimeId = transactions.nextTimeSequenceId;
} else {
calculateMonthTotalAmount(state, exchangeRatesStore, state.transactions[state.transactions.length - 1], defaultCurrency, state.transactionsFilter.accountId, false);
calculateMonthTotalAmount(state, exchangeRatesStore, state.transactions[state.transactions.length - 1], defaultCurrency, state.transactionsFilter.accountIds, false);
state.transactionsNextTimeId = -1;
}
}
Expand Down Expand Up @@ -115,12 +115,10 @@ function updateTransactionInTransactionList(state, settingsStore, exchangeRatesS
return;
}

if ((state.transactionsFilter.categoryId && state.transactionsFilter.categoryId !== '0' && state.transactionsFilter.categoryId !== transaction.categoryId) ||
(state.transactionsFilter.accountId && state.transactionsFilter.accountId !== '0' &&
state.transactionsFilter.accountId !== transaction.sourceAccountId &&
state.transactionsFilter.accountId !== transaction.destinationAccountId &&
(!transaction.sourceAccount || state.transactionsFilter.accountId !== transaction.sourceAccount.parentId) &&
(!transaction.destinationAccount || state.transactionsFilter.accountId !== transaction.destinationAccount.parentId)
if ((state.transactionsFilter.categoryIds && !state.allFilterCategoryIds[transaction.categoryId]) ||
(state.transactionsFilter.accountIds && !state.allFilterAccountIds[transaction.sourceAccountId] && !state.allFilterAccountIds[transaction.destinationAccountId] &&
(!transaction.sourceAccount || !state.allFilterAccountIds[transaction.sourceAccount.parentId]) &&
(!transaction.destinationAccount || !state.allFilterAccountIds[transaction.destinationAccount.parentId])
)
) {
transactionMonthList.items.splice(j, 1);
Expand All @@ -131,7 +129,7 @@ function updateTransactionInTransactionList(state, settingsStore, exchangeRatesS
if (transactionMonthList.items.length < 1) {
state.transactions.splice(i, 1);
} else {
calculateMonthTotalAmount(state, exchangeRatesStore, transactionMonthList, defaultCurrency, state.transactionsFilter.accountId, i >= state.transactions.length - 1 && state.transactionsNextTimeId > 0);
calculateMonthTotalAmount(state, exchangeRatesStore, transactionMonthList, defaultCurrency, state.transactionsFilter.accountIds, i >= state.transactions.length - 1 && state.transactionsNextTimeId > 0);
}

return;
Expand Down Expand Up @@ -159,12 +157,12 @@ function removeTransactionFromTransactionList(state, exchangeRatesStore, { trans
if (transactionMonthList.items.length < 1) {
state.transactions.splice(i, 1);
} else {
calculateMonthTotalAmount(state, exchangeRatesStore, transactionMonthList, defaultCurrency, state.transactionsFilter.accountId, i >= state.transactions.length - 1 && state.transactionsNextTimeId > 0);
calculateMonthTotalAmount(state, exchangeRatesStore, transactionMonthList, defaultCurrency, state.transactionsFilter.accountIds, i >= state.transactions.length - 1 && state.transactionsNextTimeId > 0);
}
}
}

function calculateMonthTotalAmount(state, exchangeRatesStore, transactionMonthList, defaultCurrency, accountId, incomplete) {
function calculateMonthTotalAmount(state, exchangeRatesStore, transactionMonthList, defaultCurrency, accountIds, incomplete) {
if (!transactionMonthList) {
return;
}
Expand All @@ -180,7 +178,7 @@ function calculateMonthTotalAmount(state, exchangeRatesStore, transactionMonthLi
let amount = transaction.sourceAmount;
let account = transaction.sourceAccount;

if (accountId && transaction.destinationAccount && (transaction.destinationAccount.id === accountId || transaction.destinationAccount.parentId === accountId)) {
if (accountIds && transaction.destinationAccount && (transaction.destinationAccount.id === accountIds || transaction.destinationAccount.parentId === accountIds)) {
amount = transaction.destinationAmount;
account = transaction.destinationAccount;
}
Expand Down Expand Up @@ -209,17 +207,17 @@ function calculateMonthTotalAmount(state, exchangeRatesStore, transactionMonthLi
totalExpense += amount;
} else if (transaction.type === transactionConstants.allTransactionTypes.Income) {
totalIncome += amount;
} else if (transaction.type === transactionConstants.allTransactionTypes.Transfer && accountId && accountId !== '0') {
if (accountId === transaction.sourceAccountId) {
} else if (transaction.type === transactionConstants.allTransactionTypes.Transfer && accountIds && accountIds !== '0') {
if (accountIds === transaction.sourceAccountId) {
totalExpense += amount;
} else if (accountId === transaction.destinationAccountId) {
} else if (accountIds === transaction.destinationAccountId) {
totalIncome += amount;
} else if (transaction.sourceAccount && accountId === transaction.sourceAccount.parentId &&
transaction.destinationAccount && accountId === transaction.destinationAccount.parentId) {
} else if (transaction.sourceAccount && accountIds === transaction.sourceAccount.parentId &&
transaction.destinationAccount && accountIds === transaction.destinationAccount.parentId) {
// Do Nothing
} else if (transaction.sourceAccount && accountId === transaction.sourceAccount.parentId) {
} else if (transaction.sourceAccount && accountIds === transaction.sourceAccount.parentId) {
totalExpense += amount;
} else if (transaction.destinationAccount && accountId === transaction.destinationAccount.parentId) {
} else if (transaction.destinationAccount && accountIds === transaction.destinationAccount.parentId) {
totalIncome += amount;
}
}
Expand Down Expand Up @@ -268,8 +266,8 @@ export const useTransactionsStore = defineStore('transactions', {
maxTime: 0,
minTime: 0,
type: 0,
categoryId: '0',
accountId: '0',
categoryIds: '',
accountIds: '',
amountFilter: '',
keyword: ''
},
Expand All @@ -278,6 +276,70 @@ export const useTransactionsStore = defineStore('transactions', {
transactionListStateInvalid: true,
}),
getters: {
allFilterCategoryIds(state) {
if (!state.transactionsFilter.categoryIds) {
return {};
}

const allCategoryIds = state.transactionsFilter.categoryIds.split(',');
const ret = {};

for (let i = 0; i < allCategoryIds.length; i++) {
if (allCategoryIds[i]) {
ret[allCategoryIds[i]] = true;
}
}

return ret;
},
allFilterAccountIds(state) {
if (!state.transactionsFilter.accountIds) {
return {};
}

const allAccountIds = state.transactionsFilter.accountIds.split(',');
const ret = {};

for (let i = 0; i < allAccountIds.length; i++) {
if (allAccountIds[i]) {
ret[allAccountIds[i]] = true;
}
}

return ret;
},
allFilterCategoryIdsCount(state) {
if (!state.transactionsFilter.categoryIds) {
return 0;
}

const allCategoryIds = state.transactionsFilter.categoryIds.split(',');
let count = 0;

for (let i = 0; i < allCategoryIds.length; i++) {
if (allCategoryIds[i]) {
count++;
}
}

return count;
},
allFilterAccountIdsCount(state) {
if (!state.transactionsFilter.accountIds) {
return 0;
}

const allAccountIds = state.transactionsFilter.accountIds.split(',');
let count = 0;

for (let i = 0; i < allAccountIds.length; i++) {
if (allAccountIds[i]) {
count++;
}
}

return count;
},
noTransaction(state) {
for (let i = 0; i < state.transactions.length; i++) {
const transactionMonthList = state.transactions[i];
Expand Down Expand Up @@ -364,8 +426,8 @@ export const useTransactionsStore = defineStore('transactions', {
this.transactionsFilter.maxTime = 0;
this.transactionsFilter.minTime = 0;
this.transactionsFilter.type = 0;
this.transactionsFilter.categoryId = '0';
this.transactionsFilter.accountId = '0';
this.transactionsFilter.categoryIds = '';
this.transactionsFilter.accountIds = '';
this.transactionsFilter.amountFilter = '';
this.transactionsFilter.keyword = '';
this.transactions = [];
Expand Down Expand Up @@ -402,16 +464,16 @@ export const useTransactionsStore = defineStore('transactions', {
this.transactionsFilter.type = 0;
}

if (filter && isString(filter.categoryId)) {
this.transactionsFilter.categoryId = filter.categoryId;
if (filter && isString(filter.categoryIds)) {
this.transactionsFilter.categoryIds = filter.categoryIds;
} else {
this.transactionsFilter.categoryId = '0';
this.transactionsFilter.categoryIds = '';
}

if (filter && isString(filter.accountId)) {
this.transactionsFilter.accountId = filter.accountId;
if (filter && isString(filter.accountIds)) {
this.transactionsFilter.accountIds = filter.accountIds;
} else {
this.transactionsFilter.accountId = '0';
this.transactionsFilter.accountIds = '';
}

if (filter && isString(filter.amountFilter)) {
Expand Down Expand Up @@ -443,12 +505,12 @@ export const useTransactionsStore = defineStore('transactions', {
this.transactionsFilter.type = filter.type;
}

if (filter && isString(filter.categoryId)) {
this.transactionsFilter.categoryId = filter.categoryId;
if (filter && isString(filter.categoryIds)) {
this.transactionsFilter.categoryIds = filter.categoryIds;
}

if (filter && isString(filter.accountId)) {
this.transactionsFilter.accountId = filter.accountId;
if (filter && isString(filter.accountIds)) {
this.transactionsFilter.accountIds = filter.accountIds;
}

if (filter && isString(filter.amountFilter)) {
Expand All @@ -466,12 +528,12 @@ export const useTransactionsStore = defineStore('transactions', {
querys.push('type=' + this.transactionsFilter.type);
}

if (this.transactionsFilter.accountId && this.transactionsFilter.accountId !== '0') {
querys.push('accountIds=' + this.transactionsFilter.accountId);
if (this.transactionsFilter.accountIds) {
querys.push('accountIds=' + this.transactionsFilter.accountIds);
}

if (this.transactionsFilter.categoryId && this.transactionsFilter.categoryId !== '0') {
querys.push('categoryIds=' + this.transactionsFilter.categoryId);
if (this.transactionsFilter.categoryIds) {
querys.push('categoryIds=' + this.transactionsFilter.categoryIds);
}

querys.push('dateType=' + this.transactionsFilter.dateType);
Expand Down Expand Up @@ -511,8 +573,8 @@ export const useTransactionsStore = defineStore('transactions', {
page: page || 1,
withCount: (!!withCount) || false,
type: self.transactionsFilter.type,
categoryIds: self.transactionsFilter.categoryId,
accountIds: self.transactionsFilter.accountId,
categoryIds: self.transactionsFilter.categoryIds,
accountIds: self.transactionsFilter.accountIds,
amountFilter: self.transactionsFilter.amountFilter,
keyword: self.transactionsFilter.keyword
}).then(response => {
Expand Down Expand Up @@ -586,8 +648,8 @@ export const useTransactionsStore = defineStore('transactions', {
year: year,
month: month,
type: self.transactionsFilter.type,
categoryIds: self.transactionsFilter.categoryId,
accountIds: self.transactionsFilter.accountId,
categoryIds: self.transactionsFilter.categoryIds,
accountIds: self.transactionsFilter.accountIds,
amountFilter: self.transactionsFilter.amountFilter,
keyword: self.transactionsFilter.keyword
}).then(response => {
Expand Down
Loading

0 comments on commit 0b32607

Please sign in to comment.