mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2024-11-28 03:34:32 -06:00
First attempt at multi-year budget chart.
This commit is contained in:
parent
69553b138b
commit
838330b909
@ -18,6 +18,13 @@ interface BudgetChartGenerator
|
|||||||
*/
|
*/
|
||||||
public function budget(Collection $entries);
|
public function budget(Collection $entries);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Collection $entries
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function multiYear(Collection $entries);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Collection $entries
|
* @param Collection $entries
|
||||||
*
|
*
|
||||||
|
@ -141,4 +141,43 @@ class ChartJsBudgetChartGenerator implements BudgetChartGenerator
|
|||||||
|
|
||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Collection $entries
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function multiYear(Collection $entries)
|
||||||
|
{
|
||||||
|
//var_dump($entries);
|
||||||
|
$data = [
|
||||||
|
'count' => 0,
|
||||||
|
'labels' => [],
|
||||||
|
'datasets' => [],
|
||||||
|
];
|
||||||
|
// labels: for each budget.
|
||||||
|
// dataset: for each year?
|
||||||
|
foreach($entries as $entry) {
|
||||||
|
$year = $entry['date']->year;
|
||||||
|
if(!in_array($year, $data['labels'])) {
|
||||||
|
$data['labels'][] = $entry['date']->year;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// can be joined?
|
||||||
|
$set = [];
|
||||||
|
foreach($entries as $entry) {
|
||||||
|
$name = $entry['budget'];
|
||||||
|
$set[$name] = isset($set[$name]) ? $set[$name] : [];
|
||||||
|
$set[$name][] = ($entry['sum'] * -1);
|
||||||
|
}
|
||||||
|
foreach($set as $name => $values) {
|
||||||
|
$data['datasets'][] = ['label' => $name, 'data' => $values];
|
||||||
|
}
|
||||||
|
$data['count'] = count($data['datasets']);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
//var_dump($data);
|
||||||
|
//exit;
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -46,6 +46,19 @@ class BudgetController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function multiYear(BudgetRepositoryInterface $repository, $report_type, Carbon $start, Carbon $end, Collection $accounts, Collection $budgets)
|
public function multiYear(BudgetRepositoryInterface $repository, $report_type, Carbon $start, Carbon $end, Collection $accounts, Collection $budgets)
|
||||||
{
|
{
|
||||||
|
// chart properties for cache:
|
||||||
|
$cache = new CacheProperties();
|
||||||
|
$cache->addProperty($report_type);
|
||||||
|
$cache->addProperty($start);
|
||||||
|
$cache->addProperty($end);
|
||||||
|
$cache->addProperty($accounts);
|
||||||
|
$cache->addProperty($budgets);
|
||||||
|
$cache->addProperty('multiYearBudget');
|
||||||
|
|
||||||
|
if ($cache->has()) {
|
||||||
|
return Response::json($cache->get()); // @codeCoverageIgnore
|
||||||
|
}
|
||||||
|
|
||||||
$currentStart = clone $start;
|
$currentStart = clone $start;
|
||||||
$collection = new Collection;
|
$collection = new Collection;
|
||||||
|
|
||||||
@ -53,7 +66,7 @@ class BudgetController extends Controller
|
|||||||
$currentEnd = clone $currentStart;
|
$currentEnd = clone $currentStart;
|
||||||
$currentEnd->endOfYear();
|
$currentEnd->endOfYear();
|
||||||
|
|
||||||
echo 'now for ' . $currentStart->format('Ymd') . ' to ' . $currentEnd->format('Ymd') . '<br>';
|
//echo 'now for ' . $currentStart->format('Ymd') . ' to ' . $currentEnd->format('Ymd') . '<br>';
|
||||||
|
|
||||||
/** @var Budget $budget */
|
/** @var Budget $budget */
|
||||||
foreach ($budgets as $budget) {
|
foreach ($budgets as $budget) {
|
||||||
@ -64,7 +77,8 @@ class BudgetController extends Controller
|
|||||||
$name = $budget->name;
|
$name = $budget->name;
|
||||||
$sum = $repository->balanceInPeriodForList($budget, $currentStart, $currentEnd, $accounts);
|
$sum = $repository->balanceInPeriodForList($budget, $currentStart, $currentEnd, $accounts);
|
||||||
}
|
}
|
||||||
echo $name.': '.$sum.'<br>';
|
$collection->push(['budget' => $name, 'sum' => $sum,'date' => $currentStart]);
|
||||||
|
//echo $name . ': ' . $sum . '<br>';
|
||||||
}
|
}
|
||||||
// do something for all budgets.
|
// do something for all budgets.
|
||||||
|
|
||||||
@ -74,6 +88,12 @@ class BudgetController extends Controller
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$data = $this->generator->multiYear($collection);
|
||||||
|
|
||||||
|
//$cache->store($data);
|
||||||
|
|
||||||
|
return Response::json($data);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -39,6 +39,9 @@ function updateBudgetChart(e) {
|
|||||||
});
|
});
|
||||||
var budgetIds = budgets.join(',');
|
var budgetIds = budgets.join(',');
|
||||||
|
|
||||||
|
// remove old chart:
|
||||||
|
$('#budgets-chart').replaceWith('<canvas id="budgets-chart" class="budgets-chart" style="width:100%;height:400px;"></canvas>');
|
||||||
|
|
||||||
// draw chart. Redraw when exists? Not sure if we support that.
|
// draw chart. Redraw when exists? Not sure if we support that.
|
||||||
columnChart('chart/budget/multi-year/' + reportType + '/' + startDate + '/' + endDate + '/' + accountIds + '/' + budgetIds, 'budgets-chart');
|
columnChart('chart/budget/multi-year/' + reportType + '/' + startDate + '/' + endDate + '/' + accountIds + '/' + budgetIds, 'budgets-chart');
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user