diff --git a/app/Http/Controllers/Popup/ReportController.php b/app/Http/Controllers/Popup/ReportController.php index e1e2b78d2b..e8b3e391ee 100644 --- a/app/Http/Controllers/Popup/ReportController.php +++ b/app/Http/Controllers/Popup/ReportController.php @@ -66,11 +66,12 @@ class ReportController extends Controller $repository = app('FireflyIII\Repositories\Budget\BudgetRepositoryInterface'); $budget = $repository->find(intval($attributes['budgetId'])); if (is_null($budget->id)) { - throw new FireflyException('Could not find a budget for value "' . e($attributes['budgetId']) . '".'); + $journals = $repository->getWithoutBudgetForAccounts($attributes['accounts'], $attributes['startDate'], $attributes['endDate']); + } else { + // get all expenses in budget in period: + $journals = $repository->getExpenses($budget, $attributes['accounts'], $attributes['startDate'], $attributes['endDate']); } - // get all expenses in budget in period: - $journals = $repository->getExpenses($budget, $attributes['accounts'], $attributes['startDate'], $attributes['endDate']); $view = view('popup.report.budget-spent-amount', compact('journals'))->render(); diff --git a/app/Models/TransactionJournal.php b/app/Models/TransactionJournal.php index 2c4cc12323..77e7601115 100644 --- a/app/Models/TransactionJournal.php +++ b/app/Models/TransactionJournal.php @@ -382,7 +382,8 @@ class TransactionJournal extends TransactionJournalSupport // join destination account $query->leftJoin('accounts as source_account', 'source_account.id', '=', 'source.account_id'); // join destination account type - $query->leftJoin('account_types as source_acct_type', 'source_account.account_type_id', '=', 'source_acct_type.id'); + $query->leftJoin('account_types as source_acct_type', 'source_account.account_type_id', '=', 'source_acct_type.id') + ->orderBy('transaction_journals.date', 'DESC')->orderBy('transaction_journals.order', 'ASC')->orderBy('transaction_journals.id', 'DESC'); $query->with(['categories', 'budgets', 'attachments', 'bill']); diff --git a/app/Repositories/Budget/BudgetRepository.php b/app/Repositories/Budget/BudgetRepository.php index de8c6f91b5..61e81afc20 100644 --- a/app/Repositories/Budget/BudgetRepository.php +++ b/app/Repositories/Budget/BudgetRepository.php @@ -389,7 +389,7 @@ class BudgetRepository extends ComponentRepository implements BudgetRepositoryIn ->before($end) ->after($start) ->expanded() - ->where('transaction_types.type', 'Withdrawal') + ->where('transaction_types.type', TransactionType::WITHDRAWAL) ->whereIn('source_account.id', $ids) ->get(TransactionJournal::QUERYFIELDS); @@ -501,15 +501,36 @@ class BudgetRepository extends ComponentRepository implements BudgetRepositoryIn { return $this->user ->transactionjournals() - ->transactionTypes([TransactionType::WITHDRAWAL]) + ->expanded() + ->where('transaction_types.type', TransactionType::WITHDRAWAL) ->leftJoin('budget_transaction_journal', 'budget_transaction_journal.transaction_journal_id', '=', 'transaction_journals.id') ->whereNull('budget_transaction_journal.id') ->before($end) ->after($start) - ->orderBy('transaction_journals.date', 'DESC') - ->orderBy('transaction_journals.order', 'ASC') - ->orderBy('transaction_journals.id', 'DESC') - ->get(['transaction_journals.*']); + ->get(TransactionJournal::QUERYFIELDS); + } + + /** + * @param Collection $accounts + * @param Carbon $start + * @param Carbon $end + * + * @return Collection + */ + public function getWithoutBudgetForAccounts(Collection $accounts, Carbon $start, Carbon $end) + { + $ids = $accounts->pluck('id')->toArray(); + + return $this->user + ->transactionjournals() + ->expanded() + ->whereIn('source_account.id', $ids) + ->where('transaction_types.type', TransactionType::WITHDRAWAL) + ->leftJoin('budget_transaction_journal', 'budget_transaction_journal.transaction_journal_id', '=', 'transaction_journals.id') + ->whereNull('budget_transaction_journal.id') + ->before($end) + ->after($start) + ->get(TransactionJournal::QUERYFIELDS); } /** diff --git a/app/Repositories/Budget/BudgetRepositoryInterface.php b/app/Repositories/Budget/BudgetRepositoryInterface.php index 43662e7048..6d8fc7999b 100644 --- a/app/Repositories/Budget/BudgetRepositoryInterface.php +++ b/app/Repositories/Budget/BudgetRepositoryInterface.php @@ -187,6 +187,15 @@ interface BudgetRepositoryInterface */ public function getWithoutBudget(Carbon $start, Carbon $end); + /** + * @param Collection $accounts + * @param Carbon $start + * @param Carbon $end + * + * @return Collection + */ + public function getWithoutBudgetForAccounts(Collection $accounts, Carbon $start, Carbon $end); + /** * @param Collection $accounts * @param Carbon $start diff --git a/resources/views/popup/list/journals.twig b/resources/views/popup/list/journals.twig index 83bdf76424..6f042ddcce 100644 --- a/resources/views/popup/list/journals.twig +++ b/resources/views/popup/list/journals.twig @@ -26,11 +26,6 @@