Final code for #595

This commit is contained in:
James Cole
2017-04-23 09:33:33 +02:00
parent 21c24fd7f0
commit 8ef9223d84
10 changed files with 61 additions and 76 deletions

View File

@@ -293,7 +293,6 @@ class AccountController extends Controller
$periods = $this->getPeriodOverview($account); $periods = $this->getPeriodOverview($account);
} }
$accountType = $account->accountType->type;
$count = 0; $count = 0;
$loop = 0; $loop = 0;
// grab journals, but be prepared to jump a period back to get the right ones: // grab journals, but be prepared to jump a period back to get the right ones:
@@ -327,7 +326,7 @@ class AccountController extends Controller
return view( return view(
'accounts.show', 'accounts.show',
compact('account', 'currency', 'moment', 'accountType', 'periods', 'subTitleIcon', 'journals', 'subTitle', 'start', 'end', 'chartUri') compact('account', 'currency', 'moment', 'periods', 'subTitleIcon', 'journals', 'subTitle', 'start', 'end', 'chartUri')
); );
} }

View File

@@ -100,9 +100,9 @@ class CategoryController extends Controller
$earned = $repository->earnedInPeriod(new Collection([$category]), $accounts, $start, $currentEnd); $earned = $repository->earnedInPeriod(new Collection([$category]), $accounts, $start, $currentEnd);
$sum = bcadd($spent, $earned); $sum = bcadd($spent, $earned);
$label = Navigation::periodShow($start, $range); $label = Navigation::periodShow($start, $range);
$chartData[0]['entries'][$label] = bcmul($spent, '-1'); $chartData[0]['entries'][$label] = round(bcmul($spent, '-1'), 12);
$chartData[1]['entries'][$label] = $earned; $chartData[1]['entries'][$label] = round($earned, 12);
$chartData[2]['entries'][$label] = $sum; $chartData[2]['entries'][$label] = round($sum, 12);
$start = Navigation::addPeriod($start, $range, 0); $start = Navigation::addPeriod($start, $range, 0);
} }
@@ -113,21 +113,6 @@ class CategoryController extends Controller
} }
/**
* @param CategoryRepositoryInterface $repository
* @param Category $category
*
* @return \Symfony\Component\HttpFoundation\Response
*/
public function currentPeriod(CategoryRepositoryInterface $repository, Category $category)
{
$start = clone session('start', Carbon::now()->startOfMonth());
$end = session('end', Carbon::now()->endOfMonth());
$data = $this->makePeriodChart($repository, $category, $start, $end);
return Response::json($data);
}
/** /**
* @param CategoryRepositoryInterface $repository * @param CategoryRepositoryInterface $repository
* @param AccountRepositoryInterface $accountRepository * @param AccountRepositoryInterface $accountRepository
@@ -215,9 +200,9 @@ class CategoryController extends Controller
$spent = $expenses[$category->id]['entries'][$period] ?? '0'; $spent = $expenses[$category->id]['entries'][$period] ?? '0';
$earned = $income[$category->id]['entries'][$period] ?? '0'; $earned = $income[$category->id]['entries'][$period] ?? '0';
$sum = bcadd($spent, $earned); $sum = bcadd($spent, $earned);
$chartData[0]['entries'][$label] = bcmul($spent, '-1'); $chartData[0]['entries'][$label] = round(bcmul($spent, '-1'), 12);
$chartData[1]['entries'][$label] = $earned; $chartData[1]['entries'][$label] = round($earned, 12);
$chartData[2]['entries'][$label] = $sum; $chartData[2]['entries'][$label] = round($sum, 12);
} }
$data = $this->generator->multiSet($chartData); $data = $this->generator->multiSet($chartData);
@@ -290,12 +275,11 @@ class CategoryController extends Controller
* *
* @return \Symfony\Component\HttpFoundation\Response * @return \Symfony\Component\HttpFoundation\Response
*/ */
public function specificPeriod(CategoryRepositoryInterface $repository, Category $category, $date) public function specificPeriod(CategoryRepositoryInterface $repository, Category $category, Carbon $date)
{ {
$carbon = new Carbon($date);
$range = Preferences::get('viewRange', '1M')->data; $range = Preferences::get('viewRange', '1M')->data;
$start = Navigation::startOfPeriod($carbon, $range); $start = Navigation::startOfPeriod($date, $range);
$end = Navigation::endOfPeriod($carbon, $range); $end = Navigation::endOfPeriod($date, $range);
$data = $this->makePeriodChart($repository, $category, $start, $end); $data = $this->makePeriodChart($repository, $category, $start, $end);
return Response::json($data); return Response::json($data);
@@ -350,11 +334,11 @@ class CategoryController extends Controller
$spent = $repository->spentInPeriod(new Collection([$category]), $accounts, $start, $start); $spent = $repository->spentInPeriod(new Collection([$category]), $accounts, $start, $start);
$earned = $repository->earnedInPeriod(new Collection([$category]), $accounts, $start, $start); $earned = $repository->earnedInPeriod(new Collection([$category]), $accounts, $start, $start);
$sum = bcadd($spent, $earned); $sum = bcadd($spent, $earned);
$label = Navigation::periodShow($start, '1D'); $label = trim(Navigation::periodShow($start, '1D'));
$chartData[0]['entries'][$label] = bcmul($spent, '-1'); $chartData[0]['entries'][$label] = round(bcmul($spent, '-1'),12);
$chartData[1]['entries'][$label] = $earned; $chartData[1]['entries'][$label] = round($earned,12);
$chartData[2]['entries'][$label] = $sum; $chartData[2]['entries'][$label] = round($sum,12);
$start->addDay(); $start->addDay();

View File

@@ -244,7 +244,7 @@ class TagController extends Controller
$end = null; $end = null;
$periods = new Collection; $periods = new Collection;
$apiKey = env('GOOGLE_MAPS_API_KEY', ''); $apiKey = env('GOOGLE_MAPS_API_KEY', '');
$sum = '0'; $sum = '0';
// prep for "all" view. // prep for "all" view.
@@ -252,7 +252,7 @@ class TagController extends Controller
$subTitle = trans('firefly.all_journals_for_tag', ['tag' => $tag->tag]); $subTitle = trans('firefly.all_journals_for_tag', ['tag' => $tag->tag]);
$start = $repository->firstUseDate($tag); $start = $repository->firstUseDate($tag);
$end = new Carbon; $end = new Carbon;
$sum = $repository->sumOfTag($tag); $sum = $repository->sumOfTag($tag);
} }
// prep for "specific date" view. // prep for "specific date" view.
@@ -265,6 +265,7 @@ class TagController extends Controller
'start' => $start->formatLocalized($this->monthAndDayFormat), 'end' => $end->formatLocalized($this->monthAndDayFormat)] 'start' => $start->formatLocalized($this->monthAndDayFormat), 'end' => $end->formatLocalized($this->monthAndDayFormat)]
); );
$periods = $this->getPeriodOverview($tag); $periods = $this->getPeriodOverview($tag);
$sum = $repository->sumOfTag($tag, $start, $end);
} }
// prep for current period // prep for current period
@@ -304,7 +305,7 @@ class TagController extends Controller
); );
} }
return view('tags.show', compact('apiKey','tag', 'periods', 'subTitle', 'subTitleIcon', 'journals', 'sum', 'start', 'end', 'moment')); return view('tags.show', compact('apiKey', 'tag', 'periods', 'subTitle', 'subTitleIcon', 'journals', 'sum', 'start', 'end', 'moment'));
} }

View File

@@ -77,13 +77,13 @@ Breadcrumbs::register(
if ($moment === 'all') { if ($moment === 'all') {
$breadcrumbs->push(trans('firefly.everything'), route('accounts.show', [$account->id, 'all'])); $breadcrumbs->push(trans('firefly.everything'), route('accounts.show', [$account->id, 'all']));
} }
// when is specific period: // when is specific period or when empty:
if (strlen($moment) > 0 && $moment !== 'all') { if ($moment !== 'all') {
$title = trans( $title = trans(
'firefly.between_dates_breadcrumb', ['start' => $start->formatLocalized(strval(trans('config.month_and_day'))), 'firefly.between_dates_breadcrumb', ['start' => $start->formatLocalized(strval(trans('config.month_and_day'))),
'end' => $end->formatLocalized(strval(trans('config.month_and_day')))] 'end' => $end->formatLocalized(strval(trans('config.month_and_day')))]
); );
$breadcrumbs->push($title, route('accounts.show', [$account->id, $moment])); $breadcrumbs->push($title, route('accounts.show', [$account->id, $moment, $start, $end]));
} }
} }
@@ -258,7 +258,7 @@ Breadcrumbs::register(
$breadcrumbs->push(trans('firefly.everything'), route('budgets.no-budget', ['all'])); $breadcrumbs->push(trans('firefly.everything'), route('budgets.no-budget', ['all']));
} }
// when is specific period: // when is specific period:
if (strlen($moment) > 0 && $moment !== 'all') { if ($moment !== 'all') {
$title = trans( $title = trans(
'firefly.between_dates_breadcrumb', ['start' => $start->formatLocalized(strval(trans('config.month_and_day'))), 'firefly.between_dates_breadcrumb', ['start' => $start->formatLocalized(strval(trans('config.month_and_day'))),
'end' => $end->formatLocalized(strval(trans('config.month_and_day')))] 'end' => $end->formatLocalized(strval(trans('config.month_and_day')))]
@@ -334,7 +334,7 @@ Breadcrumbs::register(
$breadcrumbs->push(trans('firefly.everything'), route('categories.show', [$category->id, 'all'])); $breadcrumbs->push(trans('firefly.everything'), route('categories.show', [$category->id, 'all']));
} }
// when is specific period: // when is specific period:
if (strlen($moment) > 0 && $moment !== 'all') { if ($moment !== 'all') {
$title = trans( $title = trans(
'firefly.between_dates_breadcrumb', ['start' => $start->formatLocalized(strval(trans('config.month_and_day'))), 'firefly.between_dates_breadcrumb', ['start' => $start->formatLocalized(strval(trans('config.month_and_day'))),
'end' => $end->formatLocalized(strval(trans('config.month_and_day')))] 'end' => $end->formatLocalized(strval(trans('config.month_and_day')))]
@@ -355,7 +355,7 @@ Breadcrumbs::register(
$breadcrumbs->push(trans('firefly.everything'), route('categories.no-category', ['all'])); $breadcrumbs->push(trans('firefly.everything'), route('categories.no-category', ['all']));
} }
// when is specific period: // when is specific period:
if (strlen($moment) > 0 && $moment !== 'all') { if ($moment !== 'all') {
$title = trans( $title = trans(
'firefly.between_dates_breadcrumb', ['start' => $start->formatLocalized(strval(trans('config.month_and_day'))), 'firefly.between_dates_breadcrumb', ['start' => $start->formatLocalized(strval(trans('config.month_and_day'))),
'end' => $end->formatLocalized(strval(trans('config.month_and_day')))] 'end' => $end->formatLocalized(strval(trans('config.month_and_day')))]
@@ -730,7 +730,7 @@ Breadcrumbs::register(
if ($moment === 'all') { if ($moment === 'all') {
$breadcrumbs->push(trans('firefly.everything'), route('tags.show', [$tag->id], $moment)); $breadcrumbs->push(trans('firefly.everything'), route('tags.show', [$tag->id], $moment));
} }
if ($moment !== '') { if ($moment !== 'all') {
$title = trans( $title = trans(
'firefly.between_dates_breadcrumb', ['start' => $start->formatLocalized(strval(trans('config.month_and_day'))), 'firefly.between_dates_breadcrumb', ['start' => $start->formatLocalized(strval(trans('config.month_and_day'))),
'end' => $end->formatLocalized(strval(trans('config.month_and_day')))] 'end' => $end->formatLocalized(strval(trans('config.month_and_day')))]
@@ -754,7 +754,7 @@ Breadcrumbs::register(
} }
// when is specific period: // when is specific period:
if (strlen($moment) > 0 && $moment !== 'all') { if ($moment !== 'all') {
$title = trans( $title = trans(
'firefly.between_dates_breadcrumb', ['start' => $start->formatLocalized(strval(trans('config.month_and_day'))), 'firefly.between_dates_breadcrumb', ['start' => $start->formatLocalized(strval(trans('config.month_and_day'))),
'end' => $end->formatLocalized(strval(trans('config.month_and_day')))] 'end' => $end->formatLocalized(strval(trans('config.month_and_day')))]

View File

@@ -8,11 +8,15 @@
* See the LICENSE file for details. * See the LICENSE file for details.
*/ */
/** global: all, current, specific */ /** global: everything, current, specific */
$(function () { $(function () {
"use strict"; "use strict";
columnChart(all, 'all');
columnChart(current, 'period'); console.log('Getting charts');
columnChart(specific, 'period-specific-period'); columnChart(everything, 'category-everything');
console.log('Specific: ' + specific);
columnChart(specific, 'specific-period');
}); });

View File

@@ -186,7 +186,7 @@ function doubleYNonStackedChart(URI, container) {
*/ */
function columnChart(URI, container) { function columnChart(URI, container) {
"use strict"; "use strict";
console.log('Going to draw column chart for ' + URI + ' in ' + container);
var colorData = true; var colorData = true;
var options = defaultChartOptions; var options = defaultChartOptions;
var chartType = 'bar'; var chartType = 'bar';

View File

@@ -97,7 +97,7 @@ return [
'cannot_redirect_to_account' => 'Firefly III cannot redirect you to the correct page. Apologies.', 'cannot_redirect_to_account' => 'Firefly III cannot redirect you to the correct page. Apologies.',
'sum_of_expenses' => 'Sum of expenses', 'sum_of_expenses' => 'Sum of expenses',
'sum_of_income' => 'Sum of income', 'sum_of_income' => 'Sum of income',
'total_sum' => 'Total sum', 'total_sum' => 'Total sum',
'spent_in_specific_budget' => 'Spent in budget ":budget"', 'spent_in_specific_budget' => 'Spent in budget ":budget"',
'sum_of_expenses_in_budget' => 'Spent total in budget ":budget"', 'sum_of_expenses_in_budget' => 'Spent total in budget ":budget"',
'left_in_budget_limit' => 'Left to spend according to budgeting', 'left_in_budget_limit' => 'Left to spend according to budgeting',
@@ -109,7 +109,11 @@ return [
'current_period' => 'Current period', 'current_period' => 'Current period',
'show_the_current_period_and_overview' => 'Show the current period and overview', 'show_the_current_period_and_overview' => 'Show the current period and overview',
'pref_languages_locale' => 'For a language other than English to work properly, your operating system must be equipped with the correct locale-information. If these are not present, currency data, dates and amounts may be formatted wrong.', 'pref_languages_locale' => 'For a language other than English to work properly, your operating system must be equipped with the correct locale-information. If these are not present, currency data, dates and amounts may be formatted wrong.',
'budget_in_period' => '":name" between :start and :end', 'budget_in_period' => 'All transactions for budget ":name" between :start and :end',
'chart_budget_in_period' => 'Chart for all transactions for budget ":name" between :start and :end',
'chart_account_in_period' => 'Chart for all transactions for account ":name" between :start and :end',
'chart_category_in_period' => 'Chart for all transactions for category ":name" between :start and :end',
'chart_category_all' => 'Chart for all transactions for category ":name"',
'budget_in_period_breadcrumb' => 'Between :start and :end', 'budget_in_period_breadcrumb' => 'Between :start and :end',
'clone_withdrawal' => 'Clone this withdrawal', 'clone_withdrawal' => 'Clone this withdrawal',
'clone_deposit' => 'Clone this deposit', 'clone_deposit' => 'Clone this deposit',

View File

@@ -13,7 +13,7 @@
{% if moment == 'all' %} {% if moment == 'all' %}
{{ trans('firefly.chart_all_journals_for_account', {name:account.name}) }} {{ trans('firefly.chart_all_journals_for_account', {name:account.name}) }}
{% else %} {% else %}
xxx {{ trans('firefly.chart_account_in_period', {name: account.name, start: start.formatLocalized(monthAndDayFormat), end: end.formatLocalized(monthAndDayFormat) }) }}
{% endif %} {% endif %}
</h3> </h3>
<!-- ACTIONS MENU --> <!-- ACTIONS MENU -->
@@ -116,13 +116,13 @@
</div> </div>
<div class="box-body no-padding"> <div class="box-body no-padding">
<table class="table table-hover"> <table class="table table-hover">
{% if period.spent != 0 or (accountType == 'Asset account') %} {% if period.spent != 0 %}
<tr> <tr>
<td style="width:33%;">{{ 'spent'|_ }}</td> <td style="width:33%;">{{ 'spent'|_ }}</td>
<td style="text-align: right;">{{ period.spent|formatAmount }}</td> <td style="text-align: right;">{{ period.spent|formatAmount }}</td>
</tr> </tr>
{% endif %} {% endif %}
{% if period.earned != 0 or (accountType == 'Asset account') %} {% if period.earned != 0 %}
<tr> <tr>
<td style="width: 33%;">{{ 'earned'|_ }}</td> <td style="width: 33%;">{{ 'earned'|_ }}</td>
<td style="text-align: right;">{{ period.earned|formatAmount }}</td> <td style="text-align: right;">{{ period.earned|formatAmount }}</td>

View File

@@ -11,7 +11,7 @@
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title"> <h3 class="box-title">
{% if budgetLimit %} {% if budgetLimit %}
XXXX {{ trans('firefly.chart_budget_in_period', {name: budget.name, start: budgetLimit.start_date.formatLocalized(monthAndDayFormat), end: budgetLimit.end_date.formatLocalized(monthAndDayFormat) }) }}
{% else %} {% else %}
{{ trans('firefly.chart_all_journals_for_budget', {name:budget.name}) }} {{ trans('firefly.chart_all_journals_for_budget', {name:budget.name}) }}
{% endif %} {% endif %}

View File

@@ -6,38 +6,29 @@
{% block content %} {% block content %}
<div class="row"> <div class="row">
{% if moment != 'all' and moment != '' %} {% if moment != 'all' %}
{# both charts #} {# both charts #}
<div class="col-lg-6 col-md-6 col-sm-12"> <div class="col-lg-6 col-md-6 col-sm-12">
<div class="box"> <div class="box">
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title">{{ 'overview'|_ }} ({{ 'per_period'|_|lower }})</h3> <h3 class="box-title">
{{ trans('firefly.chart_category_in_period', {name: category.name, start: start.formatLocalized(monthAndDayFormat), end: end.formatLocalized(monthAndDayFormat) }) }}
</h3>
</div> </div>
<div class="box-body"> <div class="box-body">
<canvas id="period-specific-period" style="width:100%" height="350"></canvas> <canvas id="specific-period" style="width:100%;height:350px;" height="350"></canvas>
</div> </div>
</div> </div>
</div> </div>
<div class="col-lg-6 col-md-6 col-sm-12"> <div class="col-lg-6 col-md-6 col-sm-12">
<div class="box"> <div class="box">
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title">{{ 'overview'|_ }} ({{ 'all_periods'|_|lower }})</h3> <h3 class="box-title">
{{ trans('firefly.chart_category_all', {name: category.name }) }}
</h3>
</div> </div>
<div class="box-body"> <div class="box-body">
<canvas id="all" style="width:100%;" height="350"></canvas> <canvas id="category-everything" style="width:100%;height:350px;" height="350"></canvas>
</div>
</div>
</div>
{% endif %}
{% if moment == '' %}
{# single chart #}
<div class="col-lg-12 col-md-12 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ subTitle }}</h3>
</div>
<div class="box-body">
<canvas id="period" style="width:100%;height:350px;" height="350"></canvas>
</div> </div>
</div> </div>
</div> </div>
@@ -47,10 +38,12 @@
<div class="col-lg-12 col-md-12 col-sm-12"> <div class="col-lg-12 col-md-12 col-sm-12">
<div class="box"> <div class="box">
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title">{{ 'overview'|_ }} ({{ 'all_periods'|_|lower }})</h3> <h3 class="box-title">
{{ trans('firefly.chart_category_all', {name: category.name }) }}
</h3>
</div> </div>
<div class="box-body"> <div class="box-body">
<canvas id="all" style="width:100%;" height="350"></canvas> <canvas id="category-everything" style="width:100%;height:350px;" height="350"></canvas>
</div> </div>
</div> </div>
</div> </div>
@@ -73,7 +66,7 @@
</div> </div>
<div class="box-body"> <div class="box-body">
{% include 'list.journals-tasker' with {hideCategories: true} %} {% include 'list.journals-tasker' with {hideCategories: true} %}
{% if periods %} {% if periods.count > 0 %}
<p> <p>
<i class="fa fa-calendar" aria-hidden="true"></i> <i class="fa fa-calendar" aria-hidden="true"></i>
<a href="{{ route('categories.show', [category.id,'all']) }}"> <a href="{{ route('categories.show', [category.id,'all']) }}">
@@ -139,7 +132,7 @@
{% block scripts %} {% block scripts %}
<script type="text/javascript"> <script type="text/javascript">
var current = '{{ route('chart.category.current', [category.id]) }}'; var current = '{{ route('chart.category.current', [category.id]) }}';
var all = '{{ route('chart.category.all', [category.id]) }}'; var everything = '{{ route('chart.category.all', [category.id]) }}';
var specific = '{{ route('chart.category.specific', [category.id, start.format('Ymd')]) }}'; var specific = '{{ route('chart.category.specific', [category.id, start.format('Ymd')]) }}';
</script> </script>
<script type="text/javascript" src="js/lib/Chart.bundle.min.js"></script> <script type="text/javascript" src="js/lib/Chart.bundle.min.js"></script>