diff --git a/app/Helpers/Collection/Budget.php b/app/Helpers/Collection/Budget.php
index 3347302dcd..1a8811b479 100644
--- a/app/Helpers/Collection/Budget.php
+++ b/app/Helpers/Collection/Budget.php
@@ -1,14 +1,147 @@
budgetLines = new Collection;
+ }
+
+ /**
+ * @param BudgetLine $budgetLine
+ */
+ public function addBudgetLine(BudgetLine $budgetLine)
+ {
+ $this->budgetLines->push($budgetLine);
+ }
+
+ /**
+ * @param float $add
+ */
+ public function addBudgeted($add)
+ {
+ $this->budgeted += floatval($add);
+ }
+
+ /**
+ * @param float $add
+ */
+ public function addLeft($add)
+ {
+ $this->left += floatval($add);
+ }
+
+ /**
+ * @param float $add
+ */
+ public function addOverspent($add)
+ {
+ $this->overspent += floatval($add);
+ }
+
+ /**
+ * @param float $add
+ */
+ public function addSpent($add)
+ {
+ $this->spent += floatval($add);
+ }
+
+ /**
+ * @return float
+ */
+ public function getBudgeted()
+ {
+ return $this->budgeted;
+ }
+
+ /**
+ * @param float $budgeted
+ */
+ public function setBudgeted($budgeted)
+ {
+ $this->budgeted = $budgeted;
+ }
+
+ /**
+ * @return float
+ */
+ public function getLeft()
+ {
+ return $this->left;
+ }
+
+ /**
+ * @param float $left
+ */
+ public function setLeft($left)
+ {
+ $this->left = $left;
+ }
+
+ /**
+ * @return float
+ */
+ public function getOverspent()
+ {
+ return $this->overspent;
+ }
+
+ /**
+ * @param float $overspent
+ */
+ public function setOverspent($overspent)
+ {
+ $this->overspent = $overspent;
+ }
+
+ /**
+ * @return float
+ */
+ public function getSpent()
+ {
+ return $this->spent;
+ }
+
+ /**
+ * @param float $spent
+ */
+ public function setSpent($spent)
+ {
+ $this->spent = $spent;
+ }
+
+ /**
+ * @return \Illuminate\Support\Collection
+ */
+ public function getBudgetLines()
+ {
+ return $this->budgetLines;
+ }
+
-class Budget {
}
\ No newline at end of file
diff --git a/app/Helpers/Collection/BudgetLine.php b/app/Helpers/Collection/BudgetLine.php
new file mode 100644
index 0000000000..8d9af943af
--- /dev/null
+++ b/app/Helpers/Collection/BudgetLine.php
@@ -0,0 +1,132 @@
+budget;
+ }
+
+ /**
+ * @param BudgetModel $budget
+ */
+ public function setBudget($budget)
+ {
+ $this->budget = $budget;
+ }
+
+ /**
+ * @return float
+ */
+ public function getBudgeted()
+ {
+ return $this->budgeted;
+ }
+
+ /**
+ * @param float $budgeted
+ */
+ public function setBudgeted($budgeted)
+ {
+ $this->budgeted = $budgeted;
+ }
+
+ /**
+ * @return float
+ */
+ public function getLeft()
+ {
+ return $this->left;
+ }
+
+ /**
+ * @param float $left
+ */
+ public function setLeft($left)
+ {
+ $this->left = $left;
+ }
+
+ /**
+ * @return float
+ */
+ public function getOverspent()
+ {
+ return $this->overspent;
+ }
+
+ /**
+ * @param float $overspent
+ */
+ public function setOverspent($overspent)
+ {
+ $this->overspent = $overspent;
+ }
+
+ /**
+ * @return float
+ */
+ public function getSpent()
+ {
+ return $this->spent;
+ }
+
+ /**
+ * @param float $spent
+ */
+ public function setSpent($spent)
+ {
+ $this->spent = $spent;
+ }
+
+ /**
+ * @return LimitRepetition
+ */
+ public function getRepetition()
+ {
+ return $this->repetition;
+ }
+
+ /**
+ * @param LimitRepetition $repetition
+ */
+ public function setRepetition($repetition)
+ {
+ $this->repetition = $repetition;
+ }
+
+
+
+
+
+
+}
\ No newline at end of file
diff --git a/app/Helpers/Report/ReportHelper.php b/app/Helpers/Report/ReportHelper.php
index 7994ba03f3..347380408c 100644
--- a/app/Helpers/Report/ReportHelper.php
+++ b/app/Helpers/Report/ReportHelper.php
@@ -2,13 +2,16 @@
namespace FireflyIII\Helpers\Report;
+use App;
use Carbon\Carbon;
use FireflyIII\Helpers\Collection\Account as AccountCollection;
use FireflyIII\Helpers\Collection\Budget as BudgetCollection;
+use FireflyIII\Helpers\Collection\BudgetLine;
use FireflyIII\Helpers\Collection\Category as CategoryCollection;
use FireflyIII\Helpers\Collection\Expense;
use FireflyIII\Helpers\Collection\Income;
use FireflyIII\Models\Account;
+use FireflyIII\Models\LimitRepetition;
/**
* Class ReportHelper
@@ -75,7 +78,60 @@ class ReportHelper implements ReportHelperInterface
*/
public function getBudgetReport(Carbon $start, Carbon $end, $shared)
{
- return null;
+ $object = new BudgetCollection;
+ /** @var \FireflyIII\Repositories\Budget\BudgetRepositoryInterface $repository */
+ $repository = App::make('FireflyIII\Repositories\Budget\BudgetRepositoryInterface');
+ $set = $repository->getBudgets();
+
+ foreach ($set as $budget) {
+
+ $repetitions = $repository->getBudgetLimitRepetitions($budget, $start, $end);
+
+ // no repetition(s) for this budget:
+ if ($repetitions->count() == 0) {
+ $spent = $repository->spentInPeriod($budget, $start, $end, $shared);
+ $budgetLine = new BudgetLine;
+ $budgetLine->setBudget($budget);
+ $budgetLine->setOverspent($spent);
+ $object->addOverspent($spent);
+ $object->addBudgetLine($budgetLine);
+ continue;
+ }
+
+ // one or more repetitions for budget:
+ /** @var LimitRepetition $repetition */
+ foreach ($repetitions as $repetition) {
+ $budgetLine = new BudgetLine;
+ $budgetLine->setBudget($budget);
+ $budgetLine->setRepetition($repetition);
+ $expenses = $repository->spentInPeriod($budget, $repetition->startdate, $repetition->enddate, $shared);
+ $left = $expenses < floatval($repetition->amount) ? floatval($repetition->amount) - $expenses : 0;
+ $spent = $expenses > floatval($repetition->amount) ? 0 : $expenses;
+ $overspent = $expenses > floatval($repetition->amount) ? $expenses - floatval($repetition->amount) : 0;
+
+ $budgetLine->setLeft($left);
+ $budgetLine->setSpent($spent);
+ $budgetLine->setOverspent($overspent);
+ $budgetLine->setBudgeted($repetition->amount);
+
+ $object->addBudgeted($repetition->amount);
+ $object->addSpent($spent);
+ $object->addLeft($left);
+ $object->addOverspent($overspent);
+ $object->addBudgetLine($budgetLine);
+
+ }
+
+ }
+
+ // stuff outside of budgets:
+ $noBudget = $repository->getWithoutBudgetSum($start, $end);
+ $budgetLine = new BudgetLine;
+ $budgetLine->setOverspent($noBudget);
+ $object->addOverspent($noBudget);
+ $object->addBudgetLine($budgetLine);
+
+ return $object;
}
/**
diff --git a/app/Repositories/Budget/BudgetRepository.php b/app/Repositories/Budget/BudgetRepository.php
index 495697f5db..74dc26b9e2 100644
--- a/app/Repositories/Budget/BudgetRepository.php
+++ b/app/Repositories/Budget/BudgetRepository.php
@@ -99,8 +99,6 @@ class BudgetRepository implements BudgetRepositoryInterface
public function getBudgets()
{
$budgets = Auth::user()->budgets()->get();
- $budgets->sortBy('name');
-
return $budgets;
}
diff --git a/resources/twig/partials/reports/budgets.twig b/resources/twig/partials/reports/budgets.twig
new file mode 100644
index 0000000000..89b55be2b6
--- /dev/null
+++ b/resources/twig/partials/reports/budgets.twig
@@ -0,0 +1,62 @@
+
+
+
+
+ {{ 'budgets'|_ }}
+
+
+
+ {{ 'budget'|_ }} |
+ {{ 'date'|_ }} |
+ {{ 'budgeted'|_ }} |
+ {{ 'spent'|_ }} |
+ {{ 'left'|_ }} |
+ {{ 'overspent'|_ }} |
+
+ {% for budgetLine in budgets.getBudgetLines %}
+
+
+ {% if budgetLine.getBudget %}
+ {{ budgetLine.getBudget.name }}
+ {% else %}
+ {{ 'noBudget'|_ }}
+ {% endif %}
+ |
+
+ {% if budgetLine.getRepetition %}
+ {{ budgetLine.getRepetition.startdate.formatLocalized(monthAndDayFormat) }}
+ {% endif %}
+ |
+
+ {% if budgetLine.getRepetition %}
+ {{ budgetLine.getRepetition.amount|formatAmount }}
+ {% else %}
+ {{ 0|formatAmount }}
+ {% endif %}
+ |
+
+ {% if budgetLine.getSpent != 0 %}
+ {{ budgetLine.getSpent|formatAmount }}
+ {% endif %}
+ |
+
+ {% if budgetLine.getLeft != 0 %}
+ {{ budgetLine.getLeft|formatAmount }}
+ {% endif %}
+ |
+
+ {% if budgetLine.getOverspent != 0 %}
+ {{ budgetLine.getOverspent|formatAmountPlain }}
+ {% endif %}
+ |
+
+ {% endfor %}
+
+ {{ 'sum'|_ }} |
+ {{ budgets.getBudgeted|formatAmount }} |
+ {{ budgets.getSpent|formatAmount }} |
+ {{ budgets.getLeft|formatAmount }} |
+ {{ budgets.getOverspent|formatAmountPlain }} |
+
+
+
\ No newline at end of file
diff --git a/resources/twig/reports/month.twig b/resources/twig/reports/month.twig
index 6f39a41189..f2f9e79d4b 100644
--- a/resources/twig/reports/month.twig
+++ b/resources/twig/reports/month.twig
@@ -32,67 +32,8 @@
-
-
-
- {{ 'budgets'|_ }}
-
-
-
- {{ 'budget'|_ }} |
- {{ 'date'|_ }} |
- {{ 'budgeted'|_ }} |
- {{ 'spent'|_ }} |
- {{ 'left'|_ }} |
- {{ 'overspent'|_ }} |
-
- {% for data in budgets %}
-
-
- {% if data[0] %}
- {{ data[0].name }}
- {% else %}
- {{ 'noBudget'|_ }}
- {% endif %}
- |
-
- {% if data[1] %}
- {{ data[1].startdate.formatLocalized(monthAndDayFormat) }}
- {% endif %}
- |
-
- {% if data[1] %}
- {{ data[1].amount|formatAmount }}
- {% else %}
- {{ 0|formatAmount }}
- {% endif %}
- |
-
- {% if data[3] != 0 %}
- {{ data[3]|formatAmount }}
- {% endif %}
- |
-
- {% if data[2] != 0 %}
- {{ data[2]|formatAmount }}
- {% endif %}
- |
-
- {% if data[4] != 0 %}
- {{ data[4]|formatAmountPlain }}
- {% endif %}
- |
-
- {% endfor %}
-
- {{ 'sum'|_ }} |
- {{ budgetSums.budgeted|formatAmount }} |
- {{ budgetSums.spent|formatAmount }} |
- {{ budgetSums.left|formatAmount }} |
- {{ budgetSums.overspent|formatAmountPlain }} |
-
-
-
+
+ {% include 'partials/reports/budgets.twig' %}