2021-01-31 20:26:24 +01:00
|
|
|
{% extends './v1/layout/default' %}
|
2015-06-19 20:59:14 +02:00
|
|
|
|
|
|
|
{% block breadcrumbs %}
|
2017-12-23 20:46:52 +01:00
|
|
|
{{ Breadcrumbs.render(Route.getCurrentRoute.getName, budget, budgetLimit) }}
|
2015-06-19 20:59:14 +02:00
|
|
|
{% endblock %}
|
|
|
|
|
2015-05-02 09:06:07 +02:00
|
|
|
{% block content %}
|
2015-06-27 08:06:24 +02:00
|
|
|
<div class="row">
|
2020-09-21 15:56:50 +02:00
|
|
|
<div class="{% if attachments.count() == 0 %}col-lg-12 col-md-12 col-sm-12 col-xs-12{% else %}col-lg-8 col-md-6 col-sm-12 col-xs-12{% endif %}">
|
2015-06-27 08:06:24 +02:00
|
|
|
<div class="box">
|
|
|
|
<div class="box-header with-border">
|
2017-04-22 07:04:39 +02:00
|
|
|
<h3 class="box-title">
|
|
|
|
{% if budgetLimit %}
|
2019-09-15 06:56:20 +02:00
|
|
|
{{ trans('firefly.chart_budget_in_period', {name: budget.name, start: budgetLimit.start_date.formatLocalized(monthAndDayFormat), end: budgetLimit.end_date.formatLocalized(monthAndDayFormat),currency: budgetLimit.transactionCurrency.name }) }}
|
2017-04-22 07:04:39 +02:00
|
|
|
{% else %}
|
|
|
|
{{ trans('firefly.chart_all_journals_for_budget', {name:budget.name}) }}
|
|
|
|
{% endif %}
|
|
|
|
</h3>
|
2016-12-19 21:07:38 +01:00
|
|
|
<div class="box-tools pull-right">
|
2015-06-27 08:06:24 +02:00
|
|
|
<div class="btn-group">
|
2021-06-11 19:50:05 +02:00
|
|
|
<button class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown"><span class="fa fa-ellipsis-v"></span></button>
|
2016-12-19 21:07:38 +01:00
|
|
|
<ul class="dropdown-menu" role="menu">
|
2021-06-11 19:50:05 +02:00
|
|
|
<li><a href="{{ route('budgets.edit',budget.id) }}"><span class="fa fa-pencil fa-fw"></span> {{ 'edit'|_ }}</a></li>
|
|
|
|
<li><a href="{{ route('budgets.delete',budget.id) }}"><span class="fa fa-trash fa-fw"></span> {{ 'delete'|_ }}</a></li>
|
2015-06-27 08:06:24 +02:00
|
|
|
</ul>
|
|
|
|
</div>
|
2015-05-02 09:06:07 +02:00
|
|
|
</div>
|
|
|
|
</div>
|
2015-06-27 08:06:24 +02:00
|
|
|
<div class="box-body">
|
2017-04-29 08:56:08 +02:00
|
|
|
<canvas id="budgetOverview" style="width:100%;height:400px;" height="400" width="100%"></canvas>
|
2015-06-27 08:06:24 +02:00
|
|
|
</div>
|
2019-09-15 06:56:20 +02:00
|
|
|
{% if budgetLimit %}
|
|
|
|
<div class="box-footer">
|
|
|
|
<p class="text-muted">
|
|
|
|
{{ trans('firefly.chart_budget_in_period_only_currency', {currency: budgetLimit.transactionCurrency.name}) }}
|
|
|
|
</p>
|
|
|
|
</div>
|
|
|
|
{% endif %}
|
2015-05-02 09:06:07 +02:00
|
|
|
</div>
|
2017-01-08 10:19:10 +01:00
|
|
|
</div>
|
2020-09-21 15:56:50 +02:00
|
|
|
{% if attachments.count() > 0 %}
|
2020-03-19 18:28:02 +01:00
|
|
|
<div class="col-lg-4 col-md-6 col-sm-12 col-xs-12">
|
|
|
|
<div class="box">
|
|
|
|
<div class="box-header with-border">
|
|
|
|
<h3 class="box-title">
|
|
|
|
{{ 'attachments'|_ }}
|
|
|
|
</h3>
|
|
|
|
</div>
|
2020-08-28 21:29:47 +02:00
|
|
|
<div class="box-body no-padding">
|
2021-01-31 20:26:24 +01:00
|
|
|
{% include 'v1.list.attachments' %}
|
2020-03-19 18:28:02 +01:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
{% endif %}
|
2017-01-08 10:19:10 +01:00
|
|
|
</div>
|
2017-04-22 07:04:39 +02:00
|
|
|
<div class="row">
|
|
|
|
<div class="col-lg-4 col-md-6 col-sm-12 col-xs-12">
|
|
|
|
<div class="box">
|
|
|
|
<div class="box-header with-border">
|
|
|
|
<h3 class="box-title">{{ 'expenses_by_category'|_ }}</h3>
|
|
|
|
</div>
|
|
|
|
<div class="box-body">
|
2017-04-29 08:56:08 +02:00
|
|
|
<div style="width:100%;margin:0 auto;">
|
|
|
|
<canvas id="budget-cat-out" style="width:100%;height:250px;" height="250"></canvas>
|
2017-04-22 07:04:39 +02:00
|
|
|
</div>
|
|
|
|
</div>
|
2019-09-15 06:56:20 +02:00
|
|
|
{% if budgetLimit %}
|
|
|
|
<div class="box-footer">
|
|
|
|
<p class="text-muted">
|
|
|
|
{{ trans('firefly.chart_budget_in_period_only_currency', {currency: budgetLimit.transactionCurrency.name}) }}
|
|
|
|
</p>
|
|
|
|
</div>
|
|
|
|
{% endif %}
|
2017-04-22 07:04:39 +02:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="col-lg-4 col-md-6 col-sm-12 col-xs-12">
|
|
|
|
<div class="box">
|
|
|
|
<div class="box-header with-border">
|
|
|
|
<h3 class="box-title">{{ 'expenses_by_asset_account'|_ }}</h3>
|
|
|
|
</div>
|
|
|
|
<div class="box-body">
|
2017-04-29 08:56:08 +02:00
|
|
|
<div style="width:100%;margin:0 auto;">
|
|
|
|
<canvas id="budget-asset-out" style="width:100%;height:250px;" height="250"></canvas>
|
2017-04-22 07:04:39 +02:00
|
|
|
</div>
|
|
|
|
</div>
|
2019-09-15 06:56:20 +02:00
|
|
|
{% if budgetLimit %}
|
|
|
|
<div class="box-footer">
|
|
|
|
<p class="text-muted">
|
|
|
|
{{ trans('firefly.chart_budget_in_period_only_currency', {currency: budgetLimit.transactionCurrency.name}) }}
|
|
|
|
</p>
|
|
|
|
</div>
|
|
|
|
{% endif %}
|
2017-04-22 07:04:39 +02:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="col-lg-4 col-md-6 col-sm-12 col-xs-12">
|
|
|
|
<div class="box">
|
|
|
|
<div class="box-header with-border">
|
|
|
|
<h3 class="box-title">{{ 'expenses_by_expense_account'|_ }}</h3>
|
|
|
|
</div>
|
|
|
|
<div class="box-body">
|
2017-04-29 08:56:08 +02:00
|
|
|
<div style="width:100%;margin:0 auto;">
|
|
|
|
<canvas id="budget-expense-out" style="width:100%;height:250px;" height="250"></canvas>
|
2017-04-22 07:04:39 +02:00
|
|
|
</div>
|
|
|
|
</div>
|
2019-09-15 06:56:20 +02:00
|
|
|
{% if budgetLimit %}
|
|
|
|
<div class="box-footer">
|
|
|
|
<p class="text-muted">
|
|
|
|
{{ trans('firefly.chart_budget_in_period_only_currency', {currency: budgetLimit.transactionCurrency.name}) }}
|
|
|
|
</p>
|
|
|
|
</div>
|
|
|
|
{% endif %}
|
2017-04-22 07:04:39 +02:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
2020-09-11 07:12:11 +02:00
|
|
|
{% if limits|length > 0 %}
|
2017-01-08 10:19:10 +01:00
|
|
|
<div class="row">
|
|
|
|
<div class="col-lg-offset-9 col-lg-3 col-md-offset-9 col-md-3 col-sm-12 col-xs-12">
|
|
|
|
<p class="small text-center"><a href="{{ route('budgets.show',budget.id) }}">{{ 'showEverything'|_ }}</a></p>
|
|
|
|
</div>
|
|
|
|
</div>
|
2020-09-11 07:12:11 +02:00
|
|
|
{% endif %}
|
2017-01-08 10:19:10 +01:00
|
|
|
|
|
|
|
<div class="row">
|
2020-09-11 07:12:11 +02:00
|
|
|
<div class="{% if limits|length > 0 %}col-lg-9 col-md-9 col-sm-12 col-xs-12{% else %}col-lg-12 col-md-12 col-sm-12 col-xs-12{% endif %}">
|
2015-05-02 09:06:07 +02:00
|
|
|
|
2015-06-27 08:06:24 +02:00
|
|
|
<div class="box">
|
|
|
|
<div class="box-header with-border">
|
|
|
|
<h3 class="box-title">{{ 'transactions'|_ }}</h3>
|
|
|
|
</div>
|
2016-04-23 18:53:16 +02:00
|
|
|
<div class="box-body">
|
2021-01-31 20:26:24 +01:00
|
|
|
{% include 'v1.list.groups' %}
|
2017-04-16 12:51:21 +02:00
|
|
|
{% if budgetLimit %}
|
2017-04-22 07:04:39 +02:00
|
|
|
<p>
|
2021-06-11 19:50:05 +02:00
|
|
|
<span class="fa fa-calendar"></span>
|
2017-04-22 07:04:39 +02:00
|
|
|
<a href="{{ route('budgets.show', [budget.id]) }}">
|
|
|
|
{{ 'show_all_no_filter'|_ }}
|
|
|
|
</a>
|
|
|
|
</p>
|
2017-04-16 12:51:21 +02:00
|
|
|
{% endif %}
|
2016-04-23 18:53:16 +02:00
|
|
|
</div>
|
2015-05-02 09:06:07 +02:00
|
|
|
</div>
|
|
|
|
</div>
|
2020-09-11 07:12:11 +02:00
|
|
|
{% if limits|length > 0 %}
|
2017-01-08 10:19:10 +01:00
|
|
|
<div class="col-lg-3 col-md-3 col-sm-12 col-xs-12">
|
2015-06-27 08:06:24 +02:00
|
|
|
{% for limit in limits %}
|
2017-01-08 10:19:10 +01:00
|
|
|
<div class="box {% if limit.start_date == budgetLimit.start_date %}box-primary box-solid{% endif %}">
|
2015-12-31 17:46:34 +01:00
|
|
|
<div class="box-header with-border">
|
2016-08-27 03:50:35 +02:00
|
|
|
<h3 class="box-title"><a
|
2016-12-30 07:39:42 +01:00
|
|
|
href="{{ route('budgets.show.limit',[budget.id,limit.id]) }}">
|
|
|
|
{{ limit.start_date.formatLocalized(monthAndDayFormat) }} —
|
|
|
|
{{ limit.end_date.formatLocalized(monthAndDayFormat) }}
|
|
|
|
</a>
|
2015-12-31 17:46:34 +01:00
|
|
|
</h3>
|
|
|
|
</div>
|
2017-01-08 10:19:10 +01:00
|
|
|
<div class="box-body no-padding">
|
|
|
|
<table class="table table-hover">
|
|
|
|
<tr>
|
|
|
|
<td style="width:33%;">{{ 'amount'|_ }}</td>
|
2019-09-15 06:56:20 +02:00
|
|
|
<td>
|
|
|
|
{{ formatAmountBySymbol(limit.amount, limit.transactionCurrency.symbol, limit.transactionCurrency.decimal_places) }}
|
|
|
|
</td>
|
2017-01-08 10:19:10 +01:00
|
|
|
</tr>
|
|
|
|
<tr>
|
|
|
|
<td style="width:33%;">{{ 'spent'|_ }}</td>
|
2019-09-15 06:56:20 +02:00
|
|
|
<td>
|
|
|
|
{{ formatAmountBySymbol(limit.spent, limit.transactionCurrency.symbol, limit.transactionCurrency.decimal_places) }}
|
|
|
|
</td>
|
2017-01-08 10:19:10 +01:00
|
|
|
</tr>
|
2017-10-15 14:37:58 +02:00
|
|
|
{% if limit.spent > 0 %}
|
2017-12-29 09:05:35 +01:00
|
|
|
<tr>
|
|
|
|
<td colspan="2">
|
|
|
|
{% set overspent = limit.amount + limit.spent < 0 %}
|
2015-10-03 22:29:34 +02:00
|
|
|
|
2017-12-29 09:05:35 +01:00
|
|
|
{% if overspent %}
|
2018-01-12 18:42:48 +01:00
|
|
|
{% set pct = (limit.spent != 0 ? (limit.amount / (limit.spent*-1))*100 : 0) %} {# must have -1 here #}
|
2017-12-29 09:05:35 +01:00
|
|
|
<div class="progress progress-striped">
|
|
|
|
<div class="progress-bar progress-bar-warning" role="progressbar" aria-valuenow="{{ pct|round }}"
|
|
|
|
aria-valuemin="0"
|
|
|
|
aria-valuemax="100" style="width: {{ pct|round }}%;"></div>
|
|
|
|
<div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="{{ (100-pct)|round }}"
|
|
|
|
aria-valuemin="0" aria-valuemax="100" style="width: {{ (100-pct)|round }}%;"></div>
|
|
|
|
</div>
|
|
|
|
{% else %}
|
2018-01-12 18:42:48 +01:00
|
|
|
{% set pct = (limit.amount != 0 ? (((limit.spent*-1) / limit.amount)*100) : 0) %} {# must have -1 here #}
|
2017-12-29 09:05:35 +01:00
|
|
|
<div class="progress progress-striped">
|
|
|
|
<div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="{{ pct|round }}"
|
|
|
|
aria-valuemin="0"
|
|
|
|
aria-valuemax="100" style="width: {{ pct|round }}%;"></div>
|
|
|
|
</div>
|
|
|
|
{% endif %}
|
|
|
|
</td>
|
|
|
|
</tr>
|
2017-10-15 14:37:58 +02:00
|
|
|
{% endif %}
|
2017-01-08 10:19:10 +01:00
|
|
|
</table>
|
2015-05-02 09:06:07 +02:00
|
|
|
</div>
|
2015-12-31 17:46:34 +01:00
|
|
|
</div>
|
2015-05-02 09:06:07 +02:00
|
|
|
{% endfor %}
|
2017-01-08 10:19:10 +01:00
|
|
|
<p class="small text-center"><a href="{{ route('budgets.show',budget.id) }}">{{ 'showEverything'|_ }}</a></p>
|
2015-06-27 08:06:24 +02:00
|
|
|
</div>
|
2020-09-11 07:12:11 +02:00
|
|
|
{% endif %}
|
2015-05-02 09:06:07 +02:00
|
|
|
</div>
|
|
|
|
|
|
|
|
{% endblock %}
|
|
|
|
{% block scripts %}
|
2020-01-04 11:16:14 +01:00
|
|
|
<script type="text/javascript" nonce="{{ JS_NONCE }}">
|
2015-12-18 16:37:45 +01:00
|
|
|
var budgetID = {{ budget.id }};
|
2017-03-18 07:46:42 +01:00
|
|
|
var budgetLimitID = 0;
|
2016-12-30 07:39:42 +01:00
|
|
|
{% if budgetLimit.id %}
|
2019-09-15 06:56:20 +02:00
|
|
|
budgetLimitID = {{ budgetLimit.id }};
|
|
|
|
var budgetChartUri = '{{ route('chart.budget.budget-limit', [budget.id, budgetLimit.id] ) }}';
|
|
|
|
var currencySymbol = '{{ budgetLimit.transactionCurrency.symbol }}';
|
|
|
|
var expenseCategoryUri = '{{ route('chart.budget.expense-category', [budget.id, budgetLimit.id]) }}';
|
|
|
|
var expenseAssetUri = '{{ route('chart.budget.expense-asset', [budget.id, budgetLimit.id]) }}';
|
|
|
|
var expenseExpenseUri = '{{ route('chart.budget.expense-expense', [budget.id, budgetLimit.id]) }}';
|
2015-06-27 08:06:24 +02:00
|
|
|
{% else %}
|
2019-09-15 06:56:20 +02:00
|
|
|
var budgetChartUri = '{{ route('chart.budget.budget', [budget.id] ) }}';
|
|
|
|
var expenseCategoryUri = '{{ route('chart.budget.expense-category', [budget.id]) }}';
|
|
|
|
var expenseAssetUri = '{{ route('chart.budget.expense-asset', [budget.id]) }}';
|
|
|
|
var expenseExpenseUri = '{{ route('chart.budget.expense-expense', [budget.id]) }}';
|
2017-04-22 07:04:39 +02:00
|
|
|
{% endif %}
|
2015-06-27 08:06:24 +02:00
|
|
|
</script>
|
2015-05-02 09:06:07 +02:00
|
|
|
|
2020-01-04 11:16:14 +01:00
|
|
|
<script type="text/javascript" src="v1/js/lib/Chart.bundle.min.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
|
|
|
|
<script type="text/javascript" src="v1/js/ff/charts.defaults.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
|
|
|
|
<script type="text/javascript" src="v1/js/ff/charts.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
|
|
|
|
<script type="text/javascript" src="v1/js/ff/budgets/show.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
|
2019-08-04 19:54:31 +02:00
|
|
|
{# required for groups.twig #}
|
2020-01-04 11:16:14 +01:00
|
|
|
<script type="text/javascript" src="v1/js/ff/list/groups.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
|
2015-05-02 09:06:07 +02:00
|
|
|
{% endblock %}
|