diff --git a/app/Helpers/Report/PopupReport.php b/app/Helpers/Report/PopupReport.php new file mode 100644 index 0000000000..ba1156eac0 --- /dev/null +++ b/app/Helpers/Report/PopupReport.php @@ -0,0 +1,148 @@ +setAccounts(new Collection([$account]))->setRange($attributes['startDate'], $attributes['endDate'])->setBudget($budget); + $journals = $collector->getJournals(); + + return $journals; + } + + /** + * @param Budget $budget + * @param array $attributes + * + * @return Collection + */ + public function byBudget(Budget $budget, array $attributes): Collection + { + /** @var JournalCollectorInterface $collector */ + $collector = app(JournalCollectorInterface::class); + + $collector->setAccounts($attributes['accounts'])->setRange($attributes['startDate'], $attributes['endDate']); + + if (is_null($budget->id)) { + $collector->setTypes([TransactionType::WITHDRAWAL])->withoutBudget(); + } + if (!is_null($budget->id)) { + $collector->setBudget($budget); + } + $journals = $collector->getJournals(); + + return $journals; + } + + /** + * @param Category $category + * @param array $attributes + * + * @return Collection + */ + public function byCategory(Category $category, array $attributes): Collection + { + /** @var JournalCollectorInterface $collector */ + $collector = app(JournalCollectorInterface::class); + $collector->setAccounts($attributes['accounts'])->setTypes([TransactionType::WITHDRAWAL, TransactionType::TRANSFER]) + ->setRange($attributes['startDate'], $attributes['endDate']) + ->setCategory($category); + $journals = $collector->getJournals(); + + return $journals; + } + + /** + * @param Account $account + * @param array $attributes + * + * @return Collection + */ + public function byExpenses(Account $account, array $attributes): Collection + { + /** @var JournalCollectorInterface $collector */ + $collector = app(JournalCollectorInterface::class); + + $collector->setAccounts(new Collection([$account]))->setRange($attributes['startDate'], $attributes['endDate']) + ->setTypes([TransactionType::WITHDRAWAL, TransactionType::TRANSFER]); + $journals = $collector->getJournals(); + + $report = $attributes['accounts']->pluck('id')->toArray(); // accounts used in this report + + // filter for transfers and withdrawals TO the given $account + $journals = $journals->filter( + function (Transaction $transaction) use ($report) { + // get the destinations: + $sources = $transaction->transactionJournal->sourceAccountList()->pluck('id')->toArray(); + + // do these intersect with the current list? + return !empty(array_intersect($report, $sources)); + } + ); + + return $journals; + } + + /** + * @param Account $account + * @param array $attributes + * + * @return Collection + */ + public function byIncome(Account $account, array $attributes): Collection + { + /** @var JournalCollectorInterface $collector */ + $collector = app(JournalCollectorInterface::class); + $collector->setAccounts(new Collection([$account]))->setRange($attributes['startDate'], $attributes['endDate']) + ->setTypes([TransactionType::DEPOSIT, TransactionType::TRANSFER]); + $journals = $collector->getJournals(); + $report = $attributes['accounts']->pluck('id')->toArray(); // accounts used in this report + + // filter the set so the destinations outside of $attributes['accounts'] are not included. + $journals = $journals->filter( + function (Transaction $transaction) use ($report) { + // get the destinations: + $destinations = $transaction->destinationAccountList($transaction->transactionJournal)->pluck('id')->toArray(); + + // do these intersect with the current list? + return !empty(array_intersect($report, $destinations)); + } + ); + + return $journals; + } +} \ No newline at end of file diff --git a/app/Helpers/Report/PopupReportInterface.php b/app/Helpers/Report/PopupReportInterface.php new file mode 100644 index 0000000000..ce566d08a8 --- /dev/null +++ b/app/Helpers/Report/PopupReportInterface.php @@ -0,0 +1,67 @@ +