diff --git a/app/Helpers/Collection/Balance.php b/app/Helpers/Collection/Balance.php index cb3b4fa3c8..06edffe85e 100644 --- a/app/Helpers/Collection/Balance.php +++ b/app/Helpers/Collection/Balance.php @@ -59,5 +59,13 @@ class Balance return $this->balanceLines; } + /** + * @param Collection $balanceLines + */ + public function setBalanceLines(Collection $balanceLines) + { + $this->balanceLines = $balanceLines; + } + } diff --git a/app/Helpers/Report/BalanceReportHelper.php b/app/Helpers/Report/BalanceReportHelper.php index fbcb9e6930..5c9f08a90a 100644 --- a/app/Helpers/Report/BalanceReportHelper.php +++ b/app/Helpers/Report/BalanceReportHelper.php @@ -28,7 +28,6 @@ use FireflyIII\Repositories\Tag\TagRepositoryInterface; use Illuminate\Database\Query\JoinClause; use Illuminate\Support\Collection; - /** * Class BalanceReportHelper * @@ -85,6 +84,9 @@ class BalanceReportHelper implements BalanceReportHelperInterface $balance->addBalanceLine($this->createDifferenceBalanceLine($accounts, $spentData, $start, $end)); $balance->setBalanceHeader($header); + // remove budgets without expenses from balance lines: + $balance = $this->removeUnusedBudgets($balance); + return $balance; } @@ -305,4 +307,36 @@ class BalanceReportHelper implements BalanceReportHelperInterface return $tags; } + /** + * @param Balance $balance + * + * @return Balance + */ + private function removeUnusedBudgets(Balance $balance): Balance + { + $set = $balance->getBalanceLines(); + $newSet = new Collection; + /** @var BalanceLine $entry */ + foreach ($set as $entry) { + if (!is_null($entry->getBudget()->id)) { + $sum = '0'; + /** @var BalanceEntry $balanceEntry */ + foreach ($entry->getBalanceEntries() as $balanceEntry) { + $sum = bcadd($sum, $balanceEntry->getSpent()); + } + if (bccomp($sum, '0') === -1) { + $newSet->push($entry); + } + continue; + } + $newSet->push($entry); + } + + + $balance->setBalanceLines($newSet); + + return $balance; + + } + }