Optimised budget year chart.

This commit is contained in:
James Cole
2015-12-28 17:57:03 +01:00
parent ad3defb071
commit 83de3482ce
3 changed files with 81 additions and 16 deletions

View File

@@ -210,6 +210,59 @@ class BudgetRepository extends ComponentRepository implements BudgetRepositoryIn
return Carbon::now()->startOfYear();
}
/**
* Returns an array with every budget in it and the expenses for each budget
* per month.
*
* @param Carbon $start
* @param Carbon $end
*
* @return array
*/
public function getBudgetsAndExpenses(Carbon $start, Carbon $end)
{
/** @var Collection $set */
$set = Auth::user()->budgets()
->leftJoin('budget_transaction_journal', 'budgets.id', '=', 'budget_transaction_journal.budget_id')
->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'budget_transaction_journal.transaction_journal_id')
->leftJoin(
'transactions', function (JoinClause $join) {
$join->on('transactions.transaction_journal_id', '=', 'transaction_journals.id')->where('transactions.amount', '<', 0);
}
)
->groupBy('budgets.id')
->groupBy('dateFormatted')
->where('transaction_journals.date', '>=', $start->format('Y-m-d'))
->where('transaction_journals.date', '>=', $start->format('Y-m-d'))
->get(
[
'budgets.*',
DB::Raw('DATE_FORMAT(`transaction_journals`.`date`, "%Y-%m") AS `dateFormatted`'),
DB::Raw('SUM(`transactions`.`amount`) AS `sumAmount`')
]
);
$set = $set->sortBy(
function (Budget $budget) {
return strtolower($budget->name);
}
);
$return = [];
foreach ($set as $budget) {
$id = $budget->id;
if (!isset($return[$id])) {
$return[$id] = [
'budget' => $budget,
'entries' => [],
];
}
// store each entry:
$return[$id]['entries'][$budget->dateFormatted] = $budget->sumAmount;
}
return $return;
}
/**
* @return Collection
*/

View File

@@ -27,6 +27,17 @@ interface BudgetRepositoryInterface
*/
public function destroy(Budget $budget);
/**
* Returns an array with every budget in it and the expenses for each budget
* per month.
*
* @param Carbon $start
* @param Carbon $end
*
* @return array
*/
public function getBudgetsAndExpenses(Carbon $start, Carbon $end);
/**
* Takes tags into account.
*