diff --git a/app/Http/Controllers/Transaction/SplitController.php b/app/Http/Controllers/Transaction/SplitController.php index 53edce6490..b14581509a 100644 --- a/app/Http/Controllers/Transaction/SplitController.php +++ b/app/Http/Controllers/Transaction/SplitController.php @@ -48,6 +48,35 @@ class SplitController extends Controller if ($count === 2) { return redirect(route('transactions.edit', [$journal->id])); } + + /** @var CurrencyRepositoryInterface $currencyRepository */ + $currencyRepository = app(CurrencyRepositoryInterface::class); + /** @var AccountRepositoryInterface $accountRepository */ + $accountRepository = app(AccountRepositoryInterface::class); + + /** @var BudgetRepositoryInterface $budgetRepository */ + $budgetRepository = app(BudgetRepositoryInterface::class); + + /** @var PiggyBankRepositoryInterface $piggyBankRepository */ + $piggyBankRepository = app(PiggyBankRepositoryInterface::class); + + $what = strtolower(TransactionJournal::transactionTypeStr($journal)); + $currencies = ExpandedForm::makeSelectList($currencyRepository->get()); + $assetAccounts = ExpandedForm::makeSelectList($accountRepository->getAccounts(['Default account', 'Asset account'])); + $budgets = ExpandedForm::makeSelectListWithEmpty($budgetRepository->getActiveBudgets()); + $piggyBanks = ExpandedForm::makeSelectListWithEmpty($piggyBankRepository->getPiggyBanks()); + $amount = TransactionJournal::amountPositive($journal); + + // get source account: + $sourceAccounts = TransactionJournal::sourceAccountList($journal); + $destinationAccounts = TransactionJournal::destinationAccountList($journal); + + // get the transactions: + + return view( + 'split.journals.edit', + compact('currencies', 'amount', 'piggyBanks', 'sourceAccounts', 'destinationAccounts', 'assetAccounts', 'budgets', 'what', 'journal') + ); } /** diff --git a/app/Http/Controllers/TransactionController.php b/app/Http/Controllers/TransactionController.php index a03d971893..ec3f07f866 100644 --- a/app/Http/Controllers/TransactionController.php +++ b/app/Http/Controllers/TransactionController.php @@ -418,6 +418,8 @@ class TransactionController extends Controller $event->piggyBank = $event->piggyBank()->withTrashed()->first(); } ); + + // TODO different for each transaction type! $transactions = $journal->transactions()->groupBy('transactions.account_id')->orderBy('amount', 'ASC')->get( ['transactions.*', DB::raw('SUM(`transactions`.`amount`) as `sum`')] ); diff --git a/app/Http/routes.php b/app/Http/routes.php index aea15c53ab..aa141631e6 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -343,7 +343,8 @@ Route::group( */ Route::get('/transaction/split', ['uses' => 'Transaction\SplitController@journalFromStore', 'as' => 'split.journal.from-store']); Route::post('/transaction/split', ['uses' => 'Transaction\SplitController@postJournalFromStore', 'as' => 'split.journal.from-store.post']); - + Route::get('/transaction/edit-split/{journal}',['uses' => 'Transaction\SplitController@edit', 'as' => 'split.journal.edit']); + Route::post('/transaction/edit-split/{journal}',['uses' => 'Transaction\SplitController@update', 'as' => 'split.journal.update']); /** * Tag Controller */ diff --git a/app/Repositories/Account/AccountRepository.php b/app/Repositories/Account/AccountRepository.php index 62212762c6..d0f8631b8a 100644 --- a/app/Repositories/Account/AccountRepository.php +++ b/app/Repositories/Account/AccountRepository.php @@ -182,8 +182,18 @@ class AccountRepository implements AccountRepositoryInterface ->expanded() ->sortCorrectly() ->before($end) - ->where('destination_account.id', $account->id) - ->whereIn('source_account.id', $ids) + ->leftJoin( + 'transactions as dest', function (JoinClause $join) { + $join->on('dest.transaction_journal_id', '=', 'transaction_journals.id')->where('dest.amount', '>', 0); + } + ) + ->leftJoin( + 'transactions as source', function (JoinClause $join) { + $join->on('source.transaction_journal_id', '=', 'transaction_journals.id')->where('source.amount', '<', 0); + } + ) + ->where('dest.account_id', $account->id) + ->whereIn('source.account_id', $ids) ->after($start) ->get(TransactionJournal::queryFields()); diff --git a/app/Support/Models/TransactionJournalSupport.php b/app/Support/Models/TransactionJournalSupport.php index 53e1c2c83d..bc49cc3d1e 100644 --- a/app/Support/Models/TransactionJournalSupport.php +++ b/app/Support/Models/TransactionJournalSupport.php @@ -72,13 +72,10 @@ class TransactionJournalSupport extends Model return $cache->get(); } - $amount = '0'; - /** @var Transaction $t */ - foreach ($journal->transactions as $t) { - if ($t->amount > 0) { - $amount = $t->amount; - } - } + // saves on queries: + $amount = $journal->transactions()->where('amount', '>', 0)->get()->sum('amount'); + + $amount = strval($amount); $cache->store($amount); return $amount;