From 4b712699a87a5bb6a5a6809981533a6b6538e813 Mon Sep 17 00:00:00 2001 From: Matiss Janis Aboltins <matiss@mja.lv> Date: Tue, 25 Apr 2023 20:24:32 +0100 Subject: [PATCH] :bug: (schedules) make transfers appear in both accounts (#955) Closes #551 Make scheduled transfers appear in both accounts. --- .../src/components/accounts/Account.js | 21 ++++++++++++---- .../components/accounts/TransactionsTable.js | 24 ++++++++++++++----- upcoming-release-notes/955.md | 6 +++++ 3 files changed, 40 insertions(+), 11 deletions(-) create mode 100644 upcoming-release-notes/955.md diff --git a/packages/desktop-client/src/components/accounts/Account.js b/packages/desktop-client/src/components/accounts/Account.js index 390fa7764..58c0c4e19 100644 --- a/packages/desktop-client/src/components/accounts/Account.js +++ b/packages/desktop-client/src/components/accounts/Account.js @@ -992,7 +992,8 @@ const AccountHeader = React.memo( }, ); -function AllTransactions({ transactions, filtered, children }) { +function AllTransactions({ account = {}, transactions, filtered, children }) { + const { id: accountId } = account; let scheduleData = useCachedSchedules(); let schedules = useMemo( @@ -1018,8 +1019,9 @@ function AllTransactions({ transactions, filtered, children }) { date: schedule.next_date, notes: scheduleData.statuses.get(schedule.id), schedule: schedule.id, + _inverse: accountId !== schedule._account, })); - }, [schedules]); + }, [schedules, accountId]); let allTransactions = useMemo(() => { // Don't prepend scheduled transactions if we are filtering @@ -1825,6 +1827,7 @@ class AccountInternal extends React.PureComponent { return ( <AllTransactions + account={account} transactions={transactions} filtered={transactionsFiltered} > @@ -2009,18 +2012,26 @@ export default function Account(props) { let activeLocation = useActiveLocation(); let transform = useMemo(() => { - let filter = queries.getAccountFilter(params.id, '_account'); + let filterByAccount = queries.getAccountFilter(params.id, '_account'); + let filterByPayee = queries.getAccountFilter( + params.id, + '_payee.transfer_acct', + ); // Never show schedules on these pages if ( (location.state && location.state.filter) || params.id === 'uncategorized' ) { - filter = { id: null }; + filterByAccount = { id: null }; + filterByPayee = { id: null }; } return q => { - q = q.filter({ $and: [filter, { '_account.closed': false }] }); + q = q.filter({ + $and: [{ '_account.closed': false }], + $or: [filterByAccount, filterByPayee], + }); return q.orderBy({ next_date: 'desc' }); }; }, [params.id]); diff --git a/packages/desktop-client/src/components/accounts/TransactionsTable.js b/packages/desktop-client/src/components/accounts/TransactionsTable.js index 0ac13ad21..df1018ade 100644 --- a/packages/desktop-client/src/components/accounts/TransactionsTable.js +++ b/packages/desktop-client/src/components/accounts/TransactionsTable.js @@ -74,7 +74,7 @@ function serializeTransaction(transaction, showZeroInDeposit) { let { amount, date } = transaction; if (isPreviewId(transaction.id)) { - amount = getScheduledAmount(amount); + amount = (transaction._inverse ? -1 : 1) * getScheduledAmount(amount); } let debit = amount < 0 ? -amount : null; @@ -271,7 +271,11 @@ function getPayeePretty(transaction, payee, transferAcct) { let { payee: payeeId } = transaction; if (transferAcct) { - const Icon = transaction.amount > 0 ? LeftArrow2 : RightArrow2; + const Icon = + (transaction._inverse ? -1 : 1) * transaction.amount > 0 + ? LeftArrow2 + : RightArrow2; + return ( <View style={{ @@ -598,15 +602,23 @@ export const Transaction = React.memo(function Transaction(props) { cleared, is_parent: isParent, _unmatched = false, + _inverse = false, } = transaction; // Join in some data let payee = payees && payeeId && getPayeesById(payees)[payeeId]; let account = accounts && accountId && getAccountsById(accounts)[accountId]; - let transferAcct = - payee && - payee.transfer_acct && - getAccountsById(accounts)[payee.transfer_acct]; + let transferAcct; + + if (_inverse) { + transferAcct = + accounts && accountId && getAccountsById(accounts)[accountId]; + } else { + transferAcct = + payee && + payee.transfer_acct && + getAccountsById(accounts)[payee.transfer_acct]; + } let isChild = transaction.is_child; let borderColor = selected ? colors.b8 : colors.border; diff --git a/upcoming-release-notes/955.md b/upcoming-release-notes/955.md new file mode 100644 index 000000000..0d1b5690d --- /dev/null +++ b/upcoming-release-notes/955.md @@ -0,0 +1,6 @@ +--- +category: Bugfix +authors: [MatissJanis] +--- + +Schedules: make transfer transactions appear in both affecting accounts -- GitLab