Move v1 views

This commit is contained in:
James Cole
2022-01-29 14:15:34 +01:00
parent a12fd4a3ae
commit 6da6a68e33
251 changed files with 17989 additions and 0 deletions

View File

@@ -0,0 +1,92 @@
{% extends './v1/layout/default' %}
{% block breadcrumbs %}
{{ Breadcrumbs.render(Route.getCurrentRoute.getName, accountIds, start, end) }}
{% endblock %}
{% block content %}
<div class="row no-print">
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
<div class="box" id="optionsBox">
<div class="box-header with-border">
<h3 class="box-title">{{ 'options'|_ }}</h3>
</div>
<div class="box-body">
<ul class="list-inline">
{% for hide in hideable %}
<li><input
{% if hide in defaultShow %}checked{% endif %}
type="checkbox" class="audit-option-checkbox" name="option[]" value="{{ hide }}" id="option_{{ hide }}"/> <label
for="option_{{ hide }}" style="font-weight:normal;">{{ trans('list.'~hide) }}</label></li>
{% endfor %}
</ul>
</div>
</div>
</div>
</div>
{% for account in accounts %}
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ account.name }}</h3>
</div>
{% set url = route('accounts.show',account.id) %}
{% if not auditData[account.id].exists %}
<div class="box-body">
<em>
{{ trans('firefly.no_audit_activity',
{
account_name: account.name|escape,
url: url,
start: start.formatLocalized(monthAndDayFormat),
end: end.formatLocalized(monthAndDayFormat),
})|raw }}
</em>
</div>
{% else %}
<div class="box-body no-padding">
<p style="padding:10px;">
{{ trans('firefly.audit_end_balance',
{
account_name: account.name|escape,
url: url,
end: auditData[account.id].dayBefore,
balance: formatAmountByAccount(account, auditData[account.id].dayBeforeBalance)
})|raw }}
</p>
{% include 'v1.reports.partials.journals-audit' with {'journals': auditData[account.id].journals,'account':account} %}
<p style="padding:10px;">
{{ trans('firefly.audit_end_balance',
{
account_name: account.name|escape,
url: url,
end: auditData[account.id].end,
balance: formatAmountByAccount(account,auditData[account.id].endBalance)
})|raw }}
</p>
</div>
{% endif %}
</div>
</div>
</div>
{% endfor %}
{% endblock %}
{% block styles %}
{% endblock %}
{% block scripts %}
<script type="text/javascript" nonce="{{ JS_NONCE }}">
var hideable = {{ hideable|json_encode|raw }};
</script>
<script type="text/javascript" src="v1/js/ff/reports/all.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
<script type="text/javascript" src="v1/js/ff/reports/audit/all.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
{% endblock %}

View File

@@ -0,0 +1,186 @@
{% extends './v1/layout/default' %}
{% block breadcrumbs %}
{{ Breadcrumbs.render(Route.getCurrentRoute.getName, accountIds, budgetIds, start, end) }}
{% endblock %}
{% block content %}
<div class="row">
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'accounts'|_ }}</h3>
</div>
<div class="box-body table-responsive no-padding" id="accountsHolder">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'budgets'|_ }}</h3>
</div>
<div class="box-body table-responsive no-padding" id="budgetsHolder">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'account_per_budget'|_ }}</h3>
</div>
<div class="box-body table-responsive no-padding" id="accountPerbudgetHolder">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-6 col-md-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'expense_per_budget'|_ }}</h3>
</div>
<div class="box-body">
<div style="width:100%;margin:0 auto;">
<canvas id="budgets-out-pie-chart" style="width:100%;height:250px;" height="250"></canvas>
</div>
</div>
</div>
</div>
<div class="col-lg-6 col-md-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'expense_per_category'|_ }}</h3>
</div>
<div class="box-body">
<div style="width:100%;margin:0 auto;">
<canvas id="categories-out-pie-chart" style="width:100%;height:250px;" height="250"></canvas>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-6 col-md-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'expense_per_source_account'|_ }}</h3>
</div>
<div class="box-body">
<div style="width:100%;margin:0 auto;">
<canvas id="source-accounts-pie-chart" style="width:100%;height:250px;" height="250"></canvas>
</div>
</div>
</div>
</div>
<div class="col-lg-6 col-md-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'expense_per_destination_account'|_ }}</h3>
</div>
<div class="box-body">
<div style="width:100%;margin:0 auto;">
<canvas id="dest-accounts-pie-chart" style="width:100%;height:250px;" height="250"></canvas>
</div>
</div>
</div>
</div>
</div>
{% for budget in budgets %}
<div class="row">
<div class="col-lg-12">
<div class="box main_budget_chart">
<div class="box-header with-border">
<h3 class="box-title">{{ 'expenses'|_ }} ({{ budget.name }})</h3>
</div>
<div class="box-body">
<canvas class="main_budget_canvas" data-url="{{ route('chart.budget.main', [accountIds, budget.id, start.format('Ymd'), end.format('Ymd')]) }}" id="in-out-chart-{{ budget.id }}" style="width:100%;height:400px;" height="400" width="100%"></canvas>
</div>
</div>
</div>
</div>
{% endfor %}
<div class="row">
<div class="col-lg-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'average_spending_per_destination'|_ }}</h3>
</div>
<div class="box-body table-responsive no-padding" id="avgExpensesHolder">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
<div class="col-lg-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'expenses'|_ }} ({{ trans('firefly.topX', {number: listLength}) }})</h3>
</div>
<div class="box-body table-responsive no-padding" id="topExpensesHolder">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
</div>
{% endblock %}
{% block scripts %}
<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/lib/bootstrap-sortable.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
<script type="text/javascript" nonce="{{ JS_NONCE }}">
// to report another URL:
var startDate = '{{ start.format('Ymd') }}';
var endDate = '{{ end.format('Ymd') }}';
var accountIds = '{{ accountIds }}';
var budgetIds = '{{ budgetIds }}';
// html block URI's:
var accountsUri = '{{ route('report-data.budget.accounts', [accountIds, budgetIds, start.format('Ymd'), end.format('Ymd')]) }}';
var budgetsUri = '{{ route('report-data.budget.budgets', [accountIds, budgetIds, start.format('Ymd'), end.format('Ymd')]) }}';
var accountPerBudgetUri = '{{ route('report-data.budget.account-per-budget', [accountIds, budgetIds, start.format('Ymd'), end.format('Ymd')]) }}';
var avgExpensesUri = '{{ route('report-data.budget.avg-expenses', [accountIds, budgetIds, start.format('Ymd'), end.format('Ymd')]) }}';
var topExpensesUri = '{{ route('report-data.budget.top-expenses', [accountIds, budgetIds, start.format('Ymd'), end.format('Ymd')]) }}';
// chart uri's
var budgetExpenseUri = '{{ route('chart.budget.budget-expense', [accountIds, budgetIds, start.format('Ymd'), end.format('Ymd')]) }}';
var categoryExpenseUri = '{{ route('chart.budget.category-expense', [accountIds, budgetIds, start.format('Ymd'), end.format('Ymd')]) }}';
var sourceExpenseUri = '{{ route('chart.budget.source-account-expense', [accountIds, budgetIds, start.format('Ymd'), end.format('Ymd')]) }}';
var destinationExpenseUri = '{{ route('chart.budget.destination-account-expense', [accountIds, budgetIds, start.format('Ymd'), end.format('Ymd')]) }}';
</script>
<script type="text/javascript" src="v1/js/ff/reports/all.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
<script type="text/javascript" src="v1/js/ff/reports/budget/month.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
{% endblock %}
{% block styles %}
<link rel="stylesheet" href="v1/css/bootstrap-sortable.css?v={{ FF_VERSION }}" type="text/css" media="all" nonce="{{ JS_NONCE }}">
{% endblock %}

View File

@@ -0,0 +1,30 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th data-defaultsign="az">{{ 'name'|_ }}</th>
{% for budget in budgets %}
<th data-defaultsign="_19" style="text-align: right;">{{ budget.name }}</th>
{% endfor %}
</tr>
</thead>
<tbody>
{% for account in report %}
{% for currency in account.currencies %}
<tr>
<td data-value="{{ account.name }} ({{ currency.currency_name }})">
<a href="{{ route('accounts.show', account.id) }}" title="{{ account.iban }}">{{ account.name }} ({{ currency.currency_name }})</a>
</td>
{% for budget in budgets %}
<td style="text-align: right;">
{% if currency.budgets[budget.id] %}
{{ formatAmountBySymbol(currency.budgets[budget.id], currency.currency_symbol, currency.currency_decimal_places) }}
{% else %}
&mdash;
{% endif %}
</td>
{% endfor %}
</tr>
{% endfor %}
{% endfor %}
</tbody>
</table>

View File

@@ -0,0 +1,32 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th data-defaultsign="az">{{ 'name'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'spent'|_ }}</th>
</tr>
</thead>
<tbody>
{% for account in report %}
{% for currency in account.currencies %}
<tr>
<td data-value="{{ account.name }} ({{ currency.currency_name }})">
<a href="{{ route('accounts.show', account.id) }}" title="{{ account.iban }}">{{ account.name }} ({{ currency.currency_name }})</a>
</td>
<td data-value="{{ currency.sum }}" style="text-align: right;">
{{ formatAmountBySymbol(currency.sum, currency.currency_symbol, currency.currency_decimal_places) }}
</td>
</tr>
{% endfor %}
{% endfor %}
</tbody>
<tfoot>
{% for sum in sums %}
<tr>
<td>{{ 'sum'|_ }} ({{ sum.currency_name }})</td>
<td style="text-align: right;">
{{ formatAmountBySymbol(sum.sum, sum.currency_symbol, sum.currency_decimal_places) }}
</td>
</tr>
{% endfor %}
</tfoot>
</table>

View File

@@ -0,0 +1,46 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th data-defaultsign="az">{{ 'account'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'spent_average'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'total'|_ }}</th>
<th data-defaultsign="_19">{{ 'transaction_count'|_ }}</th>
</tr>
</thead>
<tbody>
{% for row in result %}
{% if loop.index > listLength %}
<tr class="overListLength">
{% else %}
<tr>
{% endif %}
<td data-sortable="false">
<a href="{{ route('accounts.show', row.destination_account_id) }}">
{{ row.destination_account_name }}
</a>
</td>
<td data-value="{{ row.avg }}" style="text-align: right;">
{{ formatAmountBySymbol(row.avg, row.currency_symbol, row.currency_decimal_places) }}
</td>
<td data-value="{{ row.sum }}" style="text-align: right;">
{{ formatAmountBySymbol(row.sum, row.currency_symbol, row.currency_decimal_places) }}
</td>
<td data-value="{{ row.transactions }}">
{{ row.transactions }}
</td>
</tr>
{% endfor %}
</tbody>
<tfoot>
{% if result|length > listLength %}
<tr>
<td colspan="5" class="active">
<a href="#" class="listLengthTrigger">{{ trans('firefly.show_full_list',{number:incomeTopLength}) }}</a>
</td>
</tr>
{% endif %}
</tfoot>
</table>

View File

@@ -0,0 +1,44 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th data-defaultsign="az">{{ 'name'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'spent'|_ }}</th>
<th data-defaultsign="_19">{{ trans('list.percentage') }}</th>
</tr>
</thead>
<tbody>
{% for budget in report %}
{% if budget.currencies|length == 0 %}
<tr>
<td data-value="{{ budget.name }}">
<a href="{{ route('budgets.show', budget.id) }}" title="{{ budget.name }}">{{ budget.name }}</a>
</td>
<td style="text-align: right;">&mdash;</td>
<td>&nbsp;</td>
</tr>
{% endif %}
{% for currency in budget.currencies %}
<tr>
<td data-value="{{ budget.name }} ({{ currency.currency_name }})">
<a href="{{ route('budgets.show', budget.id) }}" title="{{ budget.name }}">{{ budget.name }} ({{ currency.currency_name }})</a>
</td>
<td data-value="{{ currency.sum }}" style="text-align: right;">
{{ formatAmountBySymbol(currency.sum, currency.currency_symbol, currency.currency_decimal_places) }}
</td>
<td data-value="{{ currency.sum_pct }}">{{ currency.sum_pct }}%</td>
</tr>
{% endfor %}
{% endfor %}
</tbody>
<tfoot>
{% for sum in sums %}
<tr>
<td>{{ 'sum'|_ }} ({{ sum.currency_name }})</td>
<td style="text-align: right;">
{{ formatAmountBySymbol(sum.sum, sum.currency_symbol, sum.currency_decimal_places) }}
</td>
<td>&nbsp;</td>
</tr>
{% endfor %}
</tfoot>
</table>

View File

@@ -0,0 +1,54 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th data-defaultsort="disabled">{{ 'description'|_ }}</th>
<th data-defaultsign="month">{{ 'date'|_ }}</th>
<th data-defaultsign="az">{{ 'account'|_ }}</th>
<th data-defaultsign="az">{{ 'budget'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'amount'|_ }}</th>
</tr>
</thead>
<tbody>
{% for row in result %}
{% if loop.index > listLength %}
<tr class="overListLength">
{% else %}
<tr>
{% endif %}
<td data-sortable="false">
<a href="{{ route('transactions.show', row.transaction_group_id) }}">
{{ row.description }}
</a>
</td>
<td data-value="{{ row.date_sort }}">
{{ row.date }}
</td>
<td data-sortable="false">
<a href="{{ route('accounts.show', row.destination_account_id) }}">
{{ row.destination_account_name }}
</a>
</td>
<td data-sortable="false">
<a href="{{ route('budgets.show', row.budget_id) }}">
{{ row.budget_name }}
</a>
</td>
<td data-value="{{ row.amount }}" style="text-align: right;">
{{ formatAmountBySymbol(row.amount, row.currency_symbol, row.currency_decimal_places) }}
</td>
</tr>
{% endfor %}
</tbody>
<tfoot>
{% if result|length > listLength %}
<tr>
<td colspan="5" class="active">
<a href="#" class="listLengthTrigger">{{ trans('firefly.show_full_list',{number:incomeTopLength}) }}</a>
</td>
</tr>
{% endif %}
</tfoot>
</table>

View File

@@ -0,0 +1,257 @@
{% extends './v1/layout/default' %}
{% block breadcrumbs %}
{{ Breadcrumbs.render(Route.getCurrentRoute.getName, accountIds, categoryIds, start, end) }}
{% endblock %}
{% block content %}
<div class="row">
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'accounts'|_ }}</h3>
</div>
<div class="box-body table-responsive no-padding" id="accountsHolder">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'categories'|_ }}</h3>
</div>
<div class="box-body table-responsive no-padding" id="categoriesHolder">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'account_per_category'|_ }}</h3>
</div>
<div class="box-body table-responsive no-padding" id="accountPerCategoryHolder">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-4 col-md-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'expense_per_category'|_ }}</h3>
</div>
<div class="box-body">
<div style="width:100%;margin:0 auto;">
<canvas id="category-out-pie-chart" style="width:100%;height:250px;" height="250"></canvas>
</div>
</div>
</div>
</div>
<div class="col-lg-4 col-md-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'income_per_category'|_ }}</h3>
</div>
<div class="box-body">
<div style="width:100%;margin:0 auto;">
<canvas id="category-in-pie-chart" style="width:100%;height:250px;" height="250"></canvas>
</div>
</div>
</div>
</div>
<div class="col-lg-4 col-md-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'expense_per_budget'|_ }}</h3>
</div>
<div class="box-body">
<div style="width:100%;margin:0 auto;">
<canvas id="budgets-out-pie-chart" style="width:100%;height:250px;" height="250"></canvas>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-6 col-md-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'expense_per_source_account'|_ }}</h3>
</div>
<div class="box-body">
<div style="width:100%;margin:0 auto;">
<canvas id="source-out-pie-chart" style="width:100%;height:250px;" height="250"></canvas>
</div>
</div>
</div>
</div>
<div class="col-lg-6 col-md-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'income_per_source_account'|_ }}</h3>
</div>
<div class="box-body">
<div style="width:100%;margin:0 auto;">
<canvas id="source-in-pie-chart" style="width:100%;height:250px;" height="250"></canvas>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-6 col-md-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'expense_per_destination_account'|_ }}</h3>
</div>
<div class="box-body">
<div style="width:100%;margin:0 auto;">
<canvas id="dest-out-pie-chart" style="width:100%;height:250px;" height="250"></canvas>
</div>
</div>
</div>
</div>
<div class="col-lg-6 col-md-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'income_per_destination_account'|_ }}</h3>
</div>
<div class="box-body">
<div style="width:100%;margin:0 auto;">
<canvas id="dest-in-pie-chart" style="width:100%;height:250px;" height="250"></canvas>
</div>
</div>
</div>
</div>
</div>
{% for category in categories %}
<div class="row">
<div class="col-lg-12">
<div class="box main_budget_chart">
<div class="box-header with-border">
<h3 class="box-title">{{ 'income_and_expenses'|_ }} ({{ category.name }})</h3>
</div>
<div class="box-body">
<canvas class="main_category_canvas" data-url="{{ route('chart.category.main', [accountIds, category.id, start.format('Ymd'), end.format('Ymd')]) }}" id="in-out-chart-{{ category.id }}" style="width:100%;height:400px;" height="400" width="100%"></canvas>
</div>
</div>
</div>
</div>
{% endfor %}
<div class="row">
<div class="col-lg-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'average_spending_per_destination'|_ }}</h3>
</div>
<div class="box-body table-responsive no-padding" id="avgExpensesHolder">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
<div class="col-lg-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'average_earning_per_source'|_ }}</h3>
</div>
<div class="box-body table-responsive no-padding" id="avgIncomeHolder">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'expenses'|_ }} ({{ trans('firefly.topX', {number: listLength}) }})</h3>
</div>
<div class="box-body table-responsive no-padding" id="topExpensesHolder">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
<div class="col-lg-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'income'|_ }} ({{ trans('firefly.topX', {number: listLength}) }})</h3>
</div>
<div class="box-body table-responsive no-padding" id="topIncomeHolder">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
</div>
{% endblock %}
{% block scripts %}
<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/lib/bootstrap-sortable.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
<script type="text/javascript" src="v1/js/ff/reports/all.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
<script type="text/javascript" nonce="{{ JS_NONCE }}">
// to report another URL:
var startDate = '{{ start.format('Ymd') }}';
var endDate = '{{ end.format('Ymd') }}';
var accountIds = '{{ accountIds }}';
var categoryIds = '{{ categoryIds }}';
// html block URI's:
var accountsUri = '{{ route('report-data.category.accounts', [accountIds, categoryIds, start.format('Ymd'), end.format('Ymd')]) }}';
var categoriesUri = '{{ route('report-data.category.categories', [accountIds, categoryIds, start.format('Ymd'), end.format('Ymd')]) }}';
var accountPerCategoryUri = '{{ route('report-data.category.account-per-category', [accountIds, categoryIds, start.format('Ymd'), end.format('Ymd')]) }}';
// pie charts:
var categoryOutUri = '{{ route('chart.category.category-expense', [accountIds, categoryIds, start.format('Ymd'), end.format('Ymd')]) }}';
var categoryInUri = '{{ route('chart.category.category-income', [accountIds, categoryIds, start.format('Ymd'), end.format('Ymd')]) }}';
var budgetsOutUri = '{{ route('chart.category.budget-expense', [accountIds, categoryIds, start.format('Ymd'), end.format('Ymd')]) }}';
var sourceOutUri = '{{ route('chart.category.source-expense', [accountIds, categoryIds, start.format('Ymd'), end.format('Ymd')]) }}';
var sourceInUri = '{{ route('chart.category.source-income', [accountIds, categoryIds, start.format('Ymd'), end.format('Ymd')]) }}';
var destOutUri = '{{ route('chart.category.dest-expense', [accountIds, categoryIds, start.format('Ymd'), end.format('Ymd')]) }}';
var destInUri = '{{ route('chart.category.dest-income', [accountIds, categoryIds, start.format('Ymd'), end.format('Ymd')]) }}';
var avgExpensesUri = '{{ route('report-data.category.avg-expenses', [accountIds, categoryIds, start.format('Ymd'), end.format('Ymd')]) }}';
var topExpensesUri = '{{ route('report-data.category.top-expenses', [accountIds, categoryIds, start.format('Ymd'), end.format('Ymd')]) }}';
var avgIncomeUri = '{{ route('report-data.category.avg-income', [accountIds, categoryIds, start.format('Ymd'), end.format('Ymd')]) }}';
var topIncomeUri = '{{ route('report-data.category.top-income', [accountIds, categoryIds, start.format('Ymd'), end.format('Ymd')]) }}';
</script>
<script type="text/javascript" src="v1/js/ff/reports/category/month.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
{% endblock %}
{% block styles %}
<link rel="stylesheet" href="v1/css/bootstrap-sortable.css?v={{ FF_VERSION }}" type="text/css" media="all" nonce="{{ JS_NONCE }}">
{% endblock %}

View File

@@ -0,0 +1,31 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th data-defaultsign="az">{{ 'name'|_ }}</th>
{% for category in categories %}
<th data-defaultsign="_19" style="text-align: right;">{{ category.name }}</th>
{% endfor %}
</tr>
</thead>
<tbody>
{% for account in report %}
{% for currency in account.currencies %}
<tr>
<td data-value="{{ account.name }} ({{ currency.currency_name }})">
<a href="{{ route('accounts.show', account.id) }}" title="{{ account.iban }}">{{ account.name }} ({{ currency.currency_name }})</a>
</td>
{% for category in categories %}
<td style="text-align: right;">
{% if currency.categories[category.id] %}
<span title="{{ 'earned'|_ }}: {{ formatAmountBySymbol(currency.categories[category.id].earned, currency.currency_symbol, currency.currency_decimal_places, false) }}, {{ 'spent'|_ }}: {{ formatAmountBySymbol(currency.categories[category.id].spent, currency.currency_symbol, currency.currency_decimal_places, false) }}"
{{ formatAmountBySymbol(currency.categories[category.id].sum, currency.currency_symbol, currency.currency_decimal_places) }}
{% else %}
&mdash;
{% endif %}
</td>
{% endfor %}
</tr>
{% endfor %}
{% endfor %}
</tbody>
</table>

View File

@@ -0,0 +1,46 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th data-defaultsign="az">{{ 'name'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'spent'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'earned'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'sum'|_ }}</th>
</tr>
</thead>
<tbody>
{% for account in report %}
{% for currency in account.currencies %}
<tr>
<td data-value="{{ account.name }} ({{ currency.currency_name }})">
<a href="{{ route('accounts.show', account.id) }}" title="{{ account.iban }}">{{ account.name }} ({{ currency.currency_name }})</a>
</td>
<td data-value="{{ currency.spent }}" style="text-align: right;">
{{ formatAmountBySymbol(currency.spent, currency.currency_symbol, currency.currency_decimal_places) }}
</td>
<td data-value="{{ currency.earned }}" style="text-align: right;">
{{ formatAmountBySymbol(currency.earned, currency.currency_symbol, currency.currency_decimal_places) }}
</td>
<td data-value="{{ currency.sum }}" style="text-align: right;">
{{ formatAmountBySymbol(currency.sum, currency.currency_symbol, currency.currency_decimal_places) }}
</td>
</tr>
{% endfor %}
{% endfor %}
</tbody>
<tfoot>
{% for sum in sums %}
<tr>
<td>{{ 'sum'|_ }} ({{ sum.currency_name }})</td>
<td style="text-align: right;">
{{ formatAmountBySymbol(sum.spent_sum, sum.currency_symbol, sum.currency_decimal_places) }}
</td>
<td style="text-align: right;">
{{ formatAmountBySymbol(sum.earned_sum, sum.currency_symbol, sum.currency_decimal_places) }}
</td>
<td style="text-align: right;">
{{ formatAmountBySymbol(sum.total_sum, sum.currency_symbol, sum.currency_decimal_places) }}
</td>
</tr>
{% endfor %}
</tfoot>
</table>

View File

@@ -0,0 +1,46 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th data-defaultsign="az">{{ 'account'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'spent_average'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'total'|_ }}</th>
<th data-defaultsign="_19">{{ 'transaction_count'|_ }}</th>
</tr>
</thead>
<tbody>
{% for row in result %}
{% if loop.index > listLength %}
<tr class="overListLength">
{% else %}
<tr>
{% endif %}
<td data-sortable="false">
<a href="{{ route('accounts.show', row.destination_account_id) }}">
{{ row.destination_account_name }}
</a>
</td>
<td data-value="{{ row.avg }}" style="text-align: right;">
{{ formatAmountBySymbol(row.avg, row.currency_symbol, row.currency_decimal_places) }}
</td>
<td data-value="{{ row.sum }}" style="text-align: right;">
{{ formatAmountBySymbol(row.sum, row.currency_symbol, row.currency_decimal_places) }}
</td>
<td data-value="{{ row.transactions }}">
{{ row.transactions }}
</td>
</tr>
{% endfor %}
</tbody>
<tfoot>
{% if result|length > listLength %}
<tr>
<td colspan="5" class="active">
<a href="#" class="listLengthTrigger">{{ trans('firefly.show_full_list',{number:incomeTopLength}) }}</a>
</td>
</tr>
{% endif %}
</tfoot>
</table>

View File

@@ -0,0 +1,46 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th data-defaultsign="az">{{ 'account'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'spent_average'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'total'|_ }}</th>
<th data-defaultsign="_19">{{ 'transaction_count'|_ }}</th>
</tr>
</thead>
<tbody>
{% for row in result %}
{% if loop.index > listLength %}
<tr class="overListLength">
{% else %}
<tr>
{% endif %}
<td data-sortable="false">
<a href="{{ route('accounts.show', row.source_account_id) }}">
{{ row.source_account_name }}
</a>
</td>
<td data-value="{{ row.avg }}" style="text-align: right;">
{{ formatAmountBySymbol(row.avg, row.currency_symbol, row.currency_decimal_places) }}
</td>
<td data-value="{{ row.sum }}" style="text-align: right;">
{{ formatAmountBySymbol(row.sum, row.currency_symbol, row.currency_decimal_places) }}
</td>
<td data-value="{{ row.transactions }}">
{{ row.transactions }}
</td>
</tr>
{% endfor %}
</tbody>
<tfoot>
{% if result|length > listLength %}
<tr>
<td colspan="5" class="active">
<a href="#" class="listLengthTrigger">{{ trans('firefly.show_full_list',{number:incomeTopLength}) }}</a>
</td>
</tr>
{% endif %}
</tfoot>
</table>

View File

@@ -0,0 +1,56 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th data-defaultsign="az">{{ 'name'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'spent'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'earned'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'sum'|_ }}</th>
</tr>
</thead>
<tbody>
{% for category in report %}
{% if category.currencies|length == 0 %}
<tr>
<td data-value="{{ category.name }}">
<a href="{{ route('categories.show', category.id) }}" title="{{ category.name }}">{{ category.name }}</a>
</td>
<td style="text-align: right;">&mdash;</td>
<td style="text-align: right;">&mdash;</td>
<td style="text-align: right;">&mdash;</td>
</tr>
{% endif %}
{% for currency in category.currencies %}
<tr>
<td data-value="{{ category.name }} ({{ currency.currency_name }})">
<a href="{{ route('categories.show', category.id) }}" title="{{ category.name }}">{{ category.name }} ({{ currency.currency_name }})</a>
</td>
<td data-value="{{ currency.spent }}" style="text-align: right;">
{{ formatAmountBySymbol(currency.spent, currency.currency_symbol, currency.currency_decimal_places) }}
</td>
<td data-value="{{ currency.earned }}" style="text-align: right;">
{{ formatAmountBySymbol(currency.earned, currency.currency_symbol, currency.currency_decimal_places) }}
</td>
<td data-value="{{ currency.sum }}" style="text-align: right;">
{{ formatAmountBySymbol(currency.sum, currency.currency_symbol, currency.currency_decimal_places) }}
</td>
</tr>
{% endfor %}
{% endfor %}
</tbody>
<tfoot>
{% for sum in sums %}
<tr>
<td>{{ 'sum'|_ }} ({{ sum.currency_name }})</td>
<td style="text-align: right;">
{{ formatAmountBySymbol(sum.spent_sum, sum.currency_symbol, sum.currency_decimal_places) }}
</td>
<td style="text-align: right;">
{{ formatAmountBySymbol(sum.earned_sum, sum.currency_symbol, sum.currency_decimal_places) }}
</td>
<td style="text-align: right;">
{{ formatAmountBySymbol(sum.total_sum, sum.currency_symbol, sum.currency_decimal_places) }}
</td>
</tr>
{% endfor %}
</tfoot>
</table>

View File

@@ -0,0 +1,54 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th data-defaultsort="disabled">{{ 'description'|_ }}</th>
<th data-defaultsign="month">{{ 'date'|_ }}</th>
<th data-defaultsign="az">{{ 'account'|_ }}</th>
<th data-defaultsign="az">{{ 'category'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'amount'|_ }}</th>
</tr>
</thead>
<tbody>
{% for row in result %}
{% if loop.index > listLength %}
<tr class="overListLength">
{% else %}
<tr>
{% endif %}
<td data-sortable="false">
<a href="{{ route('transactions.show', row.transaction_group_id) }}">
{{ row.description }}
</a>
</td>
<td data-value="{{ row.date_sort }}">
{{ row.date }}
</td>
<td data-sortable="false">
<a href="{{ route('accounts.show', row.destination_account_id) }}">
{{ row.destination_account_name }}
</a>
</td>
<td data-sortable="false">
<a href="{{ route('categories.show', row.category_id) }}">
{{ row.category_name }}
</a>
</td>
<td data-value="{{ row.amount }}" style="text-align: right;">
{{ formatAmountBySymbol(row.amount, row.currency_symbol, row.currency_decimal_places) }}
</td>
</tr>
{% endfor %}
</tbody>
<tfoot>
{% if result|length > listLength %}
<tr>
<td colspan="5" class="active">
<a href="#" class="listLengthTrigger">{{ trans('firefly.show_full_list',{number:incomeTopLength}) }}</a>
</td>
</tr>
{% endif %}
</tfoot>
</table>

View File

@@ -0,0 +1,54 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th data-defaultsort="disabled">{{ 'description'|_ }}</th>
<th data-defaultsign="month">{{ 'date'|_ }}</th>
<th data-defaultsign="az">{{ 'account'|_ }}</th>
<th data-defaultsign="az">{{ 'category'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'amount'|_ }}</th>
</tr>
</thead>
<tbody>
{% for row in result %}
{% if loop.index > listLength %}
<tr class="overListLength">
{% else %}
<tr>
{% endif %}
<td data-sortable="false">
<a href="{{ route('transactions.show', row.transaction_group_id) }}">
{{ row.description }}
</a>
</td>
<td data-value="{{ row.date_sort }}">
{{ row.date }}
</td>
<td data-sortable="false">
<a href="{{ route('accounts.show', row.source_account_id) }}">
{{ row.source_account_name }}
</a>
</td>
<td data-sortable="false">
<a href="{{ route('categories.show', row.category_id) }}">
{{ row.category_name }}
</a>
</td>
<td data-value="{{ row.amount }}" style="text-align: right;">
{{ formatAmountBySymbol(row.amount, row.currency_symbol, row.currency_decimal_places) }}
</td>
</tr>
{% endfor %}
</tbody>
<tfoot>
{% if result|length > listLength %}
<tr>
<td colspan="5" class="active">
<a href="#" class="listLengthTrigger">{{ trans('firefly.show_full_list',{number:incomeTopLength}) }}</a>
</td>
</tr>
{% endif %}
</tfoot>
</table>

View File

@@ -0,0 +1,180 @@
{% extends './v1/layout/default' %}
{% block breadcrumbs %}
{{ Breadcrumbs.render(Route.getCurrentRoute.getName, accountIds, start, end) }}
{% endblock %}
{% block content %}
{# chart #}
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'accountBalances'|_ }}</h3>
</div>
<div class="box-body">
<canvas id="account-balances-chart" style="width:100%;height:400px;" height="400" width="100%"></canvas>
</div>
</div>
</div>
</div>
{# account balances and income vs. expense #}
<div class="row">
<div class="col-lg-6 col-md-6 col-sm-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'accountBalances'|_ }}</h3>
</div>
<div class="box-body table-responsive no-padding" id="accountReport">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
<div class="col-lg-6 col-md-6 col-sm-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'incomeVsExpenses'|_ }}</h3>
</div>
<div class="box-body table-responsive no-padding" id="incomeVsExpenseReport">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
</div>
{# in and out #}
<div class="row">
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'income'|_ }}</h3>
</div>
<div class="box-body table-responsive no-padding" id="incomeReport">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'expenses'|_ }}</h3>
</div>
<div class="box-body table-responsive no-padding" id="expenseReport">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-8 col-md-8 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'budgets'|_ }}</h3>
</div>
<div class="box-body table-responsive no-padding" id="budgetReport">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
<div class="col-lg-4 col-md-4 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'categories'|_ }}</h3>
</div>
<div class="box-body table-responsive no-padding" id="categoryReport"></div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'budgets'|_ }} ({{ 'splitByAccount'|_|lower }})</h3>
</div>
<div class="box-body table-responsive no-padding" id="balanceReport">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'bills'|_ }}</h3>
</div>
<div class="box-body table-responsive no-padding" id="billReport"></div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
</div>
{% endblock %}
{% block styles %}
<link rel="stylesheet" href="v1/css/bootstrap-sortable.css?v={{ FF_VERSION }}" type="text/css" media="all" nonce="{{ JS_NONCE }}">
{% endblock %}
{% block scripts %}
<script type="text/javascript" src="v1/js/lib/bootstrap-sortable.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
<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" nonce="{{ JS_NONCE }}">
var year = {{ start.year }};
var month = {{ start.month }};
// to report another URL:
var startDate = '{{ start.format('Ymd') }}';
var endDate = '{{ end.format('Ymd') }}';
var reportType = '{{ reportType }}';
var accountIds = '{{ accountIds }}';
// uri's for data
var accountReportUri = '{{ route('report-data.account.general', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}';
var categoryReportUri = '{{ route('report-data.category.operations', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}';
var budgetReportUri = '{{ route('report-data.budget.general', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}';
var balanceReportUri = '{{ route('report-data.balance.general', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}';
var incomeReportUri = '{{ route('report-data.operations.income', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}';
var expenseReportUri = '{{ route('report-data.operations.expenses', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}';
var incExpReportUri = '{{ route('report-data.operations.operations', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}';
var billReportUri = '{{ route('report-data.bills.overview', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}';
// uri's for charts:
var accountChartUri = '{{ route('chart.account.report', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}';
</script>
<script type="text/javascript" src="v1/js/ff/reports/all.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
<script type="text/javascript" src="v1/js/ff/reports/default/all.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
<script type="text/javascript" src="v1/js/ff/reports/default/month.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
{% endblock %}

View File

@@ -0,0 +1,224 @@
{% extends './v1/layout/default' %}
{% block breadcrumbs %}
{{ Breadcrumbs.render(Route.getCurrentRoute.getName, accountIds, start, end) }}
{% endblock %}
{% block content %}
{# charts #}
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
<div class="box" id="year-inc-exp">
<div class="box-header with-border">
<h3 class="box-title">{{ 'incomeVsExpenses'|_ }}</h3>
</div>
<div class="box-body">
<canvas id="income-expenses-chart" style="width:100%;height:400px;" height="400" width="100%"></canvas>
</div>
</div>
</div>
</div>
{# balances and income vs. expense. #}
<div class="row">
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'accountBalances'|_ }}</h3>
</div>
<div class="box-body table-responsive no-padding" id="accountReport">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'incomeVsExpenses'|_ }}</h3>
</div>
<div class="box-body table-responsive no-padding" id="incomeVsExpenseReport">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
</div>
{# block with income #}
<div class="row">
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'income'|_ }}</h3>
</div>
<div class="box-body table-responsive no-padding" id="incomeReport">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
{# block with expenses #}
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'expenses'|_ }}</h3>
</div>
<div class="box-body table-responsive no-padding" id="expenseReport">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
</div>
{# net worth #}
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'net_worth'|_ }}</h3>
</div>
<div class="box-body">
<canvas id="net-worth" style="width:100%;height:400px;" height="400" width="100%"></canvas>
</div>
<div class="box-footer">
<small>
{{ 'net_filtered_prefs'|_ }}
</small>
</div>
</div>
</div>
</div>
{# This is the budget overview generated by budget period report #}
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'budgets'|_ }}</h3>
</div>
<div class="box-body no-padding table-responsive" id="budgetPeriodReport">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
</div>
{# This is the chart that belongs to the above overview. #}
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'chart'|_ }}</h3>
</div>
<div class="box-body">
<p id="budget_help" class="text-muted text-center">{{ 'budget_chart_click'|_ }}</p>
<canvas id="budget_chart" style="width:100%;height:400px;" height="400" width="100%"></canvas>
</div>
</div>
</div>
</div>
{# same thing but for categories (expenses) #}
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'categories'|_ }} ({{ 'expenses'|_ }})</h3>
</div>
<div class="box-body no-padding table-responsive" id="categoryExpense">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
</div>
{# same thing but for categories (income) #}
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'categories'|_ }} ({{ 'income'|_ }})</h3>
</div>
<div class="box-body no-padding table-responsive" id="categoryIncome">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
</div>
{# and the same chart too! #}
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'chart'|_ }}</h3>
</div>
<div class="box-body">
<p id="category_help" class="text-muted text-center">{{ 'category_chart_click'|_ }}</p>
<canvas id="category_chart" style="width:100%;height:400px;" height="400" width="100%"></canvas>
</div>
</div>
</div>
</div>
{% endblock %}
{% block styles %}
<link rel="stylesheet" href="v1/css/bootstrap-sortable.css?v={{ FF_VERSION }}" type="text/css" media="all" nonce="{{ JS_NONCE }}">
{% endblock %}
{% block scripts %}
<script type="text/javascript" src="v1/js/lib/bootstrap-sortable.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
<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" nonce="{{ JS_NONCE }}">
var year = {{ start.year }};
var month = {{ start.month }};
// to report another URL:
var startDate = '{{ start.format('Ymd') }}';
var endDate = '{{ end.format('Ymd') }}';
var accountIds = '{{ accountIds }}';
// report uri's
var opChartUri = '{{ route('chart.report.operations', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}';
var netWorthUri = '{{ route('chart.report.net-worth', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}';
// data uri's
var accountReportUri = '{{ route('report-data.account.general', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}';
var incomeReportUri = '{{ route('report-data.operations.income', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}';
var expenseReportUri = '{{ route('report-data.operations.expenses', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}';
var incExpReportUri = '{{ route('report-data.operations.operations', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}';
var budgetPeriodReportUri = '{{ route('report-data.budget.period', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}';
var categoryExpenseUri = '{{ route('report-data.category.expenses', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}';
var categoryIncomeUri = '{{ route('report-data.category.income', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}';
var billReportUri = '';
</script>
<script type="text/javascript" src="v1/js/ff/reports/all.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
<script type="text/javascript" src="v1/js/ff/reports/default/all.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
<script type="text/javascript" src="v1/js/ff/reports/default/multi-year.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
{% endblock %}

View File

@@ -0,0 +1,222 @@
{% extends './v1/layout/default' %}
{% block breadcrumbs %}
{{ Breadcrumbs.render(Route.getCurrentRoute.getName, accountIds, start, end) }}
{% endblock %}
{% block content %}
{# charts #}
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
<div class="box" id="year-inc-exp">
<div class="box-header with-border">
<h3 class="box-title">{{ 'incomeVsExpenses'|_ }}</h3>
</div>
<div class="box-body">
<canvas id="income-expenses-chart" style="width:100%;height:400px;" height="400" width="100%"></canvas>
</div>
</div>
</div>
</div>
{# balances and inc vs exp #}
<div class="row">
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'accountBalances'|_ }}</h3>
</div>
<div class="box-body table-responsive no-padding" id="accountReport">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'incomeVsExpenses'|_ }}</h3>
</div>
<div class="box-body table-responsive no-padding" id="incomeVsExpenseReport">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
</div>
{# income and expenses. #}
<div class="row">
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'income'|_ }}</h3>
</div>
<div class="box-body table-responsive no-padding" id="incomeReport">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'expenses'|_ }}</h3>
</div>
<div class="box-body table-responsive no-padding" id="expenseReport">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
</div>
{# net worth #}
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'net_worth'|_ }}</h3>
</div>
<div class="box-body">
<canvas id="net-worth" style="width:100%;height:400px;" height="400" width="100%"></canvas>
</div>
<div class="box-footer">
<small>
{{ 'net_filtered_prefs'|_ }}
</small>
</div>
</div>
</div>
</div>
{# This is the budget overview generated by budget period report #}
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'budgets'|_ }}</h3>
</div>
<div class="box-body no-padding table-responsive" id="budgetPeriodReport">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
</div>
{# This is the chart that belongs to the above overview. #}
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'chart'|_ }}</h3>
</div>
<div class="box-body">
<p id="budget_help" class="text-muted text-center">{{ 'budget_chart_click'|_ }}</p>
<canvas id="budget_chart" style="width:100%;height:400px;" height="400" width="100%"></canvas>
</div>
</div>
</div>
</div>
{# same thing but for categories (expenses) #}
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'categories'|_ }} ({{ 'expenses'|_ }})</h3>
</div>
<div class="box-body no-padding table-responsive" id="categoryExpense">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
</div>
{# same thing but for categories (income) #}
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'categories'|_ }} ({{ 'income'|_ }})</h3>
</div>
<div class="box-body no-padding table-responsive" id="categoryIncome">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
</div>
{# and the same chart too! #}
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'chart'|_ }}</h3>
</div>
<div class="box-body">
<p id="category_help" class="text-muted text-center">{{ 'category_chart_click'|_ }}</p>
<canvas id="category_chart" style="width:100%;height:400px;" height="400" width="100%"></canvas>
</div>
</div>
</div>
</div>
{% endblock %}
{% block scripts %}
<script type="text/javascript" src="v1/js/lib/bootstrap-sortable.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
<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" nonce="{{ JS_NONCE }}">
var year = '{{ start.year }}';
// to report another URL:
var startDate = '{{ start.format('Ymd') }}';
var endDate = '{{ end.format('Ymd') }}';
var accountIds = '{{ accountIds }}';
// report uri's
var opChartUri = '{{ route('chart.report.operations', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}';
var netWorthUri = '{{ route('chart.report.net-worth', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}';
// data uri's
var accountReportUri = '{{ route('report-data.account.general', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}';
var incomeReportUri = '{{ route('report-data.operations.income', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}';
var expenseReportUri = '{{ route('report-data.operations.expenses', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}';
var incExpReportUri = '{{ route('report-data.operations.operations', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}';
var budgetPeriodReportUri = '{{ route('report-data.budget.period', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}';
var categoryExpenseUri = '{{ route('report-data.category.expenses', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}';
var categoryIncomeUri = '{{ route('report-data.category.income', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}';
var billReportUri = '';
</script>
<script type="text/javascript" src="v1/js/ff/reports/all.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
<script type="text/javascript" src="v1/js/ff/reports/default/all.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
<script type="text/javascript" src="v1/js/ff/reports/default/year.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
{% endblock %}
{% block styles %}
<link rel="stylesheet" href="v1/css/bootstrap-sortable.css?v={{ FF_VERSION }}" type="text/css" media="all" nonce="{{ JS_NONCE }}">
{% endblock %}

View File

@@ -0,0 +1,44 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th data-defaultsign="az">{{ 'name'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'spent'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'earned'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'sum'|_ }}</th>
</tr>
</thead>
<tbody>
{% for account in report %}
<tr>
<td>
<a href="{{ route('accounts.show', [account.account_id]) }}" title="{{ account.account_name }}">{{ account.account_name }}</a>
</td>
<td style="text-align: right;">
{{ formatAmountBySymbol(account.spent, account.currency_symbol, account.currency_decimal_places) }}
</td>
<td style="text-align: right;">
{{ formatAmountBySymbol(account.earned, account.currency_symbol, account.currency_decimal_places) }}
</td>
<td style="text-align: right;">
{{ formatAmountBySymbol(account.sum, account.currency_symbol, account.currency_decimal_places) }}
</td>
</tr>
{% endfor %}
</tbody>
<tfoot>
{% for sum in sums %}
<tr>
<td>{{ 'sum'|_ }} ({{ sum.currency_name }})</td>
<td style="text-align: right;">
{{ formatAmountBySymbol(sum.spent, sum.currency_symbol, sum.currency_decimal_places) }}
</td>
<td style="text-align: right;">
{{ formatAmountBySymbol(sum.earned, sum.currency_symbol, sum.currency_decimal_places) }}
</td>
<td style="text-align: right;">
{{ formatAmountBySymbol(sum.sum, sum.currency_symbol, sum.currency_decimal_places) }}
</td>
</tr>
{% endfor %}
</tfoot>
</table>

View File

@@ -0,0 +1,55 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th data-defaultsign="az">{{ 'name'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'spent'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'earned'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'sum'|_ }}</th>
</tr>
</thead>
<tbody>
{% for account in report %}
<tr>
<td>
{% if account.source_name == account.dest_name %}
{{ account.source_name }}
{% else %}
{{ account.source_name }} / {{ account.dest_name }}
{% endif %}
{% if account.source_iban != '' and account.dest_iban != '' %}
{% if account.source_iban == account.dest_iban %}
({{ account.source_iban }})
{% else %}
({{ account.source_iban }} / ({{ account.dest_iban }}))
{% endif %}
{% endif %}
</td>
<td style="text-align: right;">
{{ formatAmountBySymbol(account.spent, account.currency_symbol, account.currency_decimal_places) }}
</td>
<td style="text-align: right;">
{{ formatAmountBySymbol(account.earned, account.currency_symbol, account.currency_decimal_places) }}
</td>
<td style="text-align: right;">
{{ formatAmountBySymbol(account.sum, account.currency_symbol, account.currency_decimal_places) }}
</td>
</tr>
{% endfor %}
</tbody>
<tfoot>
{% for sum in sums %}
<tr>
<td>{{ 'sum'|_ }} ({{ sum.currency_name }})</td>
<td style="text-align: right;">
{{ formatAmountBySymbol(sum.spent, sum.currency_symbol, sum.currency_decimal_places) }}
</td>
<td style="text-align: right;">
{{ formatAmountBySymbol(sum.earned, sum.currency_symbol, sum.currency_decimal_places) }}
</td>
<td style="text-align: right;">
{{ formatAmountBySymbol(sum.sum, sum.currency_symbol, sum.currency_decimal_places) }}
</td>
</tr>
{% endfor %}
</tfoot>
</table>

View File

@@ -0,0 +1,46 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th data-defaultsign="az">{{ 'account'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'spent_average'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'total'|_ }}</th>
<th data-defaultsign="_19">{{ 'transaction_count'|_ }}</th>
</tr>
</thead>
<tbody>
{% for row in result %}
{% if loop.index > listLength %}
<tr class="overListLength">
{% else %}
<tr>
{% endif %}
<td data-sortable="false">
<a href="{{ route('accounts.show', row.source_account_id) }}">
{{ row.source_account_name }}
</a>
</td>
<td data-value="{{ row.avg }}" style="text-align: right;">
{{ formatAmountBySymbol(row.avg, row.currency_symbol, row.currency_decimal_places) }}
</td>
<td data-value="{{ row.sum }}" style="text-align: right;">
{{ formatAmountBySymbol(row.sum, row.currency_symbol, row.currency_decimal_places) }}
</td>
<td data-value="{{ row.transactions }}">
{{ row.transactions }}
</td>
</tr>
{% endfor %}
</tbody>
<tfoot>
{% if result|length > listLength %}
<tr>
<td colspan="5" class="active">
<a href="#" class="listLengthTrigger">{{ trans('firefly.show_full_list',{number:incomeTopLength}) }}</a>
</td>
</tr>
{% endif %}
</tfoot>
</table>

View File

@@ -0,0 +1,46 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th data-defaultsign="az">{{ 'account'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'spent_average'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'total'|_ }}</th>
<th data-defaultsign="_19">{{ 'transaction_count'|_ }}</th>
</tr>
</thead>
<tbody>
{% for row in result %}
{% if loop.index > listLength %}
<tr class="overListLength">
{% else %}
<tr>
{% endif %}
<td data-sortable="false">
<a href="{{ route('accounts.show', row.destination_account_id) }}">
{{ row.destination_account_name }}
</a>
</td>
<td data-value="{{ row.avg }}" style="text-align: right;">
{{ formatAmountBySymbol(row.avg, row.currency_symbol, row.currency_decimal_places) }}
</td>
<td data-value="{{ row.sum }}" style="text-align: right;">
{{ formatAmountBySymbol(row.sum, row.currency_symbol, row.currency_decimal_places) }}
</td>
<td data-value="{{ row.transactions }}">
{{ row.transactions }}
</td>
</tr>
{% endfor %}
</tbody>
<tfoot>
{% if result|length > listLength %}
<tr>
<td colspan="5" class="active">
<a href="#" class="listLengthTrigger">{{ trans('firefly.show_full_list',{number:incomeTopLength}) }}</a>
</td>
</tr>
{% endif %}
</tfoot>
</table>

View File

@@ -0,0 +1,55 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th data-defaultsort="disabled">{{ 'description'|_ }}</th>
<th data-defaultsign="month">{{ 'date'|_ }}</th>
<th data-defaultsign="az">{{ 'source_account'|_ }}</th>
<th data-defaultsign="az">{{ 'destination_account'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'amount'|_ }}</th>
</tr>
</thead>
<tbody>
{% for row in result %}
{% if loop.index > listLength %}
<tr class="overListLength">
{% else %}
<tr>
{% endif %}
<td data-sortable="false">
<a href="{{ route('transactions.show', row.transaction_group_id) }}">
{{ row.description }}
</a>
</td>
<td data-value="{{ row.date_sort }}">
{{ row.date }}
</td>
<td data-sortable="false">
<a href="{{ route('accounts.show', row.source_account_id) }}">
{{ row.source_account_name }}
</a>
</td>
<td data-sortable="false">
<a href="{{ route('accounts.show', row.destination_account_id) }}">
{{ row.destination_account_name }}
</a>
</td>
<td data-value="{{ row.amount }}" style="text-align: right;">
{{ formatAmountBySymbol(row.amount, row.currency_symbol, row.currency_decimal_places) }}
</td>
</tr>
{% endfor %}
</tbody>
<tfoot>
{% if result|length > listLength %}
<tr>
<td colspan="5" class="active">
<a href="#" class="listLengthTrigger">{{ trans('firefly.show_full_list',{number:incomeTopLength}) }}</a>
</td>
</tr>
{% endif %}
</tfoot>
</table>

View File

@@ -0,0 +1,55 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th data-defaultsort="disabled">{{ 'description'|_ }}</th>
<th data-defaultsign="month">{{ 'date'|_ }}</th>
<th data-defaultsign="az">{{ 'source_account'|_ }}</th>
<th data-defaultsign="az">{{ 'destination_account'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'amount'|_ }}</th>
</tr>
</thead>
<tbody>
{% for row in result %}
{% if loop.index > listLength %}
<tr class="overListLength">
{% else %}
<tr>
{% endif %}
<td data-sortable="false">
<a href="{{ route('transactions.show', row.transaction_group_id) }}">
{{ row.description }}
</a>
</td>
<td data-value="{{ row.date_sort }}">
{{ row.date }}
</td>
<td data-sortable="false">
<a href="{{ route('accounts.show', row.source_account_id) }}">
{{ row.source_account_name }}
</a>
</td>
<td data-sortable="false">
<a href="{{ route('accounts.show', row.destination_account_id) }}">
{{ row.destination_account_name }}
</a>
</td>
<td data-value="{{ row.amount }}" style="text-align: right;">
{{ formatAmountBySymbol(row.amount, row.currency_symbol, row.currency_decimal_places) }}
</td>
</tr>
{% endfor %}
</tbody>
<tfoot>
{% if result|length > listLength %}
<tr>
<td colspan="5" class="active">
<a href="#" class="listLengthTrigger">{{ trans('firefly.show_full_list',{number:incomeTopLength}) }}</a>
</td>
</tr>
{% endif %}
</tfoot>
</table>

View File

@@ -0,0 +1,234 @@
{% extends './v1/layout/default' %}
{% block breadcrumbs %}
{{ Breadcrumbs.render(Route.getCurrentRoute.getName, accountIds, doubleIds, start, end) }}
{% endblock %}
{% block content %}
<div class="row">
<div class="col-lg-6 col-md-12 col-sm-12 col-xs-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'in_out_accounts'|_ }}</h3>
</div>
<div class="box-body table-responsive no-padding" id="opsAccounts">
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
</div>
<div class="col-lg-6 col-md-12 col-sm-12 col-xs-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'in_out_accounts_per_asset'|_ }}</h3>
</div>
<div class="box-body table-responsive no-padding" id="opsAccountsAsset">
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-4 col-md-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'expense_per_category'|_ }}</h3>
</div>
<div class="box-body">
<div style="width:100%;margin:0 auto;">
<canvas id="category-out-pie-chart" style="width:100%;height:250px;" height="250"></canvas>
</div>
</div>
</div>
</div>
<div class="col-lg-4 col-md-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'income_per_category'|_ }}</h3>
</div>
<div class="box-body">
<div style="width:100%;margin:0 auto;">
<canvas id="category-in-pie-chart" style="width:100%;height:250px;" height="250"></canvas>
</div>
</div>
</div>
</div>
<div class="col-lg-4 col-md-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'expense_per_budget'|_ }}</h3>
</div>
<div class="box-body">
<div style="width:100%;margin:0 auto;">
<canvas id="budgets-out-pie-chart" style="width:100%;height:250px;" height="250"></canvas>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-6 col-md-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'expense_per_tag'|_ }}</h3>
</div>
<div class="box-body">
<div style="width:100%;margin:0 auto;">
<canvas id="tag-out-pie-chart" style="width:100%;height:250px;" height="250"></canvas>
</div>
</div>
<div class="box-footer">
<p class="text-info">
<em>{{ 'double_report_expenses_charted_once'|_ }}</em>
</p>
</div>
</div>
</div>
<div class="col-lg-6 col-md-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'income_per_tag'|_ }}</h3>
</div>
<div class="box-body">
<div style="width:100%;margin:0 auto;">
<canvas id="tag-in-pie-chart" style="width:100%;height:250px;" height="250"></canvas>
</div>
</div>
<div class="box-footer">
<p class="text-info">
<em>{{ 'double_report_expenses_charted_once'|_ }}</em>
</p>
</div>
</div>
</div>
</div>
{% for account in doubles %}
<div class="row">
<div class="col-lg-12">
<div class="box" id="incomeAndExpensesChart">
<div class="box-header with-border">
<h3 class="box-title">{{ 'income_and_expenses'|_ }} ({{ account.name }}) {% if account.iban %}({{ account.iban }}){% endif %}</h3>
</div>
<div class="box-body">
<canvas class="main_double_canvas"
data-url="{{ route('chart.double.main', [accountIds, account.id, start.format('Ymd'), end.format('Ymd')]) }}"
id="in-out-chart-{{ account.id }}" style="width:100%;height:400px;" height="400" width="100%"></canvas>
</div>
</div>
</div>
</div>
{% endfor %}
<div class="row">
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'expenses'|_ }} ({{ trans('firefly.topX', {number: listLength}) }})</h3>
</div>
<div class="box-body table-responsive no-padding" id="topExpensesHolder">
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
</div>
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'income'|_ }} ({{ trans('firefly.topX', {number: listLength}) }})</h3>
</div>
<div class="box-body table-responsive no-padding" id="topIncomeHolder">
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'average_spending_per_source'|_ }}</h3>
</div>
<div class="box-body table-responsive no-padding" id="avgExpensesHolder">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
<div class="col-lg-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'average_earning_per_destination'|_ }}</h3>
</div>
<div class="box-body table-responsive no-padding" id="avgIncomeHolder">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
</div>
{% endblock %}
{% block scripts %}
<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/lib/bootstrap-sortable.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
<script type="text/javascript" nonce="{{ JS_NONCE }}">
// to report another URL:
var startDate = '{{ start.format('Ymd') }}';
var endDate = '{{ end.format('Ymd') }}';
var accountIds = '{{ accountIds }}';
var doubleIds = '{{ doubleIds }}';
// chart uri's
{#var mainUri = '{{ route('chart.expense.main', [accountIds, expenseIds, start.format('Ymd'), end.format('Ymd')]) }}';#}
// html blocks.
var opsAccountsUri = '{{ route('report-data.double.operations', [accountIds, doubleIds, start.format('Ymd'), end.format('Ymd')]) }}';
var opsAccountsAssetUri = '{{ route('report-data.double.ops-asset', [accountIds, doubleIds, start.format('Ymd'), end.format('Ymd')]) }}';
// pie charts:
var categoryOutUri = '{{ route('chart.double.category-expense', [accountIds, doubleIds, start.format('Ymd'), end.format('Ymd')]) }}';
var categoryInUri = '{{ route('chart.double.category-income', [accountIds, doubleIds, start.format('Ymd'), end.format('Ymd')]) }}';
var budgetsOutUri = '{{ route('chart.double.budget-expense', [accountIds, doubleIds, start.format('Ymd'), end.format('Ymd')]) }}';
var tagOutUri = '{{ route('chart.double.tag-expense', [accountIds, doubleIds, start.format('Ymd'), end.format('Ymd')]) }}';
var tagInUri = '{{ route('chart.double.tag-income', [accountIds, doubleIds, start.format('Ymd'), end.format('Ymd')]) }}';
var avgExpensesUri = '{{ route('report-data.double.avg-expenses', [accountIds, doubleIds, start.format('Ymd'), end.format('Ymd')]) }}';
var topExpensesUri = '{{ route('report-data.double.top-expenses', [accountIds, doubleIds, start.format('Ymd'), end.format('Ymd')]) }}';
var avgIncomeUri = '{{ route('report-data.double.avg-income', [accountIds, doubleIds, start.format('Ymd'), end.format('Ymd')]) }}';
var topIncomeUri = '{{ route('report-data.double.top-income', [accountIds, doubleIds, start.format('Ymd'), end.format('Ymd')]) }}';
</script>
<script type="text/javascript" src="v1/js/ff/reports/all.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
<script type="text/javascript" src="v1/js/ff/reports/double/month.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
{% endblock %}
{% block styles %}
<link rel="stylesheet" href="v1/css/bootstrap-sortable.css?v={{ FF_VERSION }}" type="text/css" media="all" nonce="{{ JS_NONCE }}">
{% endblock %}

View File

@@ -0,0 +1,195 @@
{% extends './v1/layout/default' %}
{% block breadcrumbs %}
{{ Breadcrumbs.render(Route.getCurrentRoute.getName) }}
{% endblock %}
{% block content %}
<div class="row">
<form class="form-horizontal nodisablebutton" id="report-form" action="{{ route('reports.index.post') }}" method="post">
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'reports'|_ }}</h3>
</div>
<div class="box-body">
<p class="text-info">
{{ 'more_info_help'|_ }}
</p>
<input type="hidden" name="_token" value="{{ csrf_token() }}"/>
<div class="form-group">
<label for="inputReportType" class="col-sm-3 control-label">{{ 'report_type'|_ }}</label>
<div class="col-sm-9">
<select name="report_type" class="form-control" id="inputReportType">
<option selected label="{{ 'report_type_default'|_ }}" value="default">{{ 'report_type_default'|_ }}</option>
<option label="{{ 'report_type_audit'|_ }}" value="audit">{{ 'report_type_audit'|_ }}</option>
<option label="{{ 'report_type_budget'|_ }}" value="budget">{{ 'report_type_budget'|_ }}</option>
<option label="{{ 'report_type_category'|_ }}" value="category">{{ 'report_type_category'|_ }}</option>
<option label="{{ 'report_type_tag'|_ }}" value="tag">{{ 'report_type_tag'|_ }}</option>
<option label="{{ 'report_type_double'|_ }}" value="double">{{ 'report_type_double'|_ }}</option>
</select>
</div>
</div>
<div class="form-group">
<label for="inputAccounts" class="col-sm-3 control-label">{{ 'report_included_accounts'|_ }}</label>
<div class="col-sm-9" id="inputAccountsSelect">
<select id="inputAccounts" name="accounts[]" multiple class="form-control">
{% for role, accountList in groupedAccounts %}
<optgroup label="{{ role }}">
{% for account in accountList %}
<option
value="{{ account.id }}"
label="{{ account.name }}{% if accountGetMetaField(account, 'accountRole') == 'sharedAsset' %} ({{ 'shared'|_|lower }}){% endif %}">
{{ account.name }}{% if accountGetMetaField(account, 'accountRole') == 'sharedAsset' %} ({{ 'shared'|_|lower }}){% endif %}
</option>
{% endfor %}
</optgroup>
{% endfor %}
</select>
</div>
</div>
<div class="form-group">
<label for="inputDateRange" class="col-sm-3 control-label">{{ 'report_date_range'|_ }}</label>
<div class="col-sm-9">
<input autocomplete="off" type="text" class="form-control" id="inputDateRange" name="daterange"
value="{{ Session.get('start').format('Y-m-d') }} - {{ Session.get('end').format('Y-m-d') }}">
</div>
</div>
<div class="form-group">
<label for="__none__" class="col-sm-3 control-label">{{ 'report_preset_ranges'|_ }}</label>
<div class="col-sm-9">
{% for year, data in months %}
<a href="#" class="date-select" data-start="{{ data.start }}" data-end="{{ data.end }}">{{ year }}</a>
{% if customFiscalYear == 1 %}
<br/>
<a href="#" class="date-select" data-start="{{ data.fiscal_start }}" data-end="{{ data.fiscal_end }}">{{ year }}
({{ 'fiscal_year'|_|lower }})</a>
{% endif %}
<ul class="list-inline">
{% for month in data.months %}
<li>
<a data-start="{{ month.start }}" data-end="{{ month.end }}" class="date-select"
href="#">{{ month.formatted }}</a>
</li>
{% endfor %}
</ul>
{% endfor %}
</div>
</div>
</div>
</div>
<div class="box" id="extra-options-box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'reports_extra_options'|_ }}</h3>
</div>
<div class="box-body" id="extra-options">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'reports_submit'|_ }}</h3>
</div>
<div class="box-body">
<div class="form-group">
<div class="col-sm-offset-3 col-sm-9">
<button type="submit" class="btn btn-default">{{ 'submit'|_ }}</button>
</div>
</div>
</div>
</div>
</div>
</form>
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'quick_link_reports'|_ }}</h3>
</div>
<div class="box-body">
<p>
{{ 'quick_link_examples'|_ }}
</p>
<h4>{{ ('quick_link_default_report')|_ }}</h4>
<ul>
<li>
<a href="{{ route('reports.report.default',[accountList, 'currentMonthStart','currentMonthEnd']) }}">{{ 'report_this_month_quick'|_ }}</a>
</li>
<li>
<a href="{{ route('reports.report.default',[accountList, 'currentYearStart','currentYearEnd']) }}">{{ 'report_this_year_quick'|_ }}</a>
</li>
{% if customFiscalYear == 1 %}
<li>
<a href="{{ route('reports.report.default',[accountList, 'currentFiscalYearStart','currentFiscalYearEnd']) }}">{{ 'report_this_fiscal_year_quick'|_ }}</a>
</li>
{% endif %}
<li>
<a href="{{ route('reports.report.default',[accountList, 'previousMonthStart','previousMonthEnd']) }}">{{ 'report_last_month_quick'|_ }}</a>
</li>
<li>
<a href="{{ route('reports.report.default',[accountList, start.format('Ymd'),'currentMonthEnd']) }}">{{ 'report_all_time_quick'|_ }}</a>
</li>
</ul>
<h4>{{ ('quick_link_audit_report')|_ }}</h4>
<ul>
<li>
<a href="{{ route('reports.report.audit',[accountList, 'currentMonthStart','currentMonthEnd']) }}">{{ 'report_this_month_quick'|_ }}</a>
</li>
<li>
<a href="{{ route('reports.report.audit',[accountList, 'currentYearStart','currentYearEnd']) }}">{{ 'report_this_year_quick'|_ }}</a>
</li>
{% if customFiscalYear == 1 %}
<li>
<a href="{{ route('reports.report.audit',[accountList, 'currentFiscalYearStart','currentFiscalYearEnd']) }}">{{ 'report_this_fiscal_year_quick'|_ }}</a>
</li>
{% endif %}
<li>
<a href="{{ route('reports.report.audit',[accountList, start.format('Ymd'),'currentMonthEnd']) }}">{{ 'report_all_time_quick'|_ }}</a>
</li>
</ul>
<p>
<em>{{ 'reports_can_bookmark'|_ }}</em>
</p>
</div>
</div>
</div>
</div>
<div style="height:400px;">&nbsp;</div>
{% endblock %}
{% block styles %}
<link href="v1/css/bootstrap-multiselect.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css" nonce="{{ JS_NONCE }}">
{% endblock %}
{% block scripts %}
<script type="text/javascript" nonce="{{ JS_NONCE }}">
var minDate = "{{ start.format('Y-m-d') }}";
var picker;
var selectAllText = "{{ trans('firefly.multi_select_select_all')|escape('js') }}";
var nonSelectedText = "{{ trans('firefly.multi_select_no_selection')|escape('js') }}";
var nSelectedText = "{{ trans('firefly.multi_select_n_selected')|escape('js') }}";
var allSelectedText = "{{ trans('firefly.multi_select_all_selected')|escape('js') }}";
var filterPlaceholder = "{{ trans('firefly.multi_select_filter_placeholder')|escape('js') }}";
</script>
<script type="text/javascript" src="v1/js/lib/bootstrap-multiselect.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
<script type="text/javascript" src="v1/js/ff/reports/all.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
<script type="text/javascript" src="v1/js/ff/reports/index.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
{% endblock %}

View File

@@ -0,0 +1,10 @@
<div class="form-group">
<label for="inputBudgets" class="col-sm-3 control-label">{{ 'select_budget'|_ }}</label>
<div class="col-sm-9">
<select id="inputBudgets" name="budget[]" multiple="multiple" class="form-control">
{% for budget in budgets %}
<option value="{{ budget.id }}" label="{{ budget.name }}">{{ budget.name }}</option>
{% endfor %}
</select>
</div>
</div>

View File

@@ -0,0 +1,11 @@
<div class="form-group">
<label for="inputCategories" class="col-sm-3 control-label">{{ 'select_category'|_ }}</label>
<div class="col-sm-9">
<select id="inputCategories" name="category[]" multiple="multiple" class="form-control">
{% for category in categories %}
<option value="{{ category.id }}" label="{{ category.name }}">{{ category.name }}</option>
{% endfor %}
</select>
</div>
</div>

View File

@@ -0,0 +1,10 @@
<div class="form-group">
<label for="inputDoubleAccounts" class="col-sm-3 control-label">{{ 'select_expense_revenue'|_ }}</label>
<div class="col-sm-9">
<select id="inputDoubleAccounts" name="double[]" multiple="multiple" class="form-control">
{% for account in set %}
<option value="{{ account.id }}" label="{{ account.name }}{% if account.iban !='' %} ({{ account.iban }}){% endif %}">{{ account.name }}{% if account.iban !='' %} ({{ account.iban }}){% endif %}</option>
{% endfor %}
</select>
</div>
</div>

View File

@@ -0,0 +1,3 @@
<p id="no_extra_options">
<em>{{ 'report_has_no_extra_options'|_ }}</em>
</p>

View File

@@ -0,0 +1,10 @@
<div class="form-group">
<label for="inputTags" class="col-sm-3 control-label">{{ 'select_tag'|_ }}</label>
<div class="col-sm-9">
<select id="inputTags" name="tag[]" multiple="multiple" class="form-control">
{% for tag in tags %}
<option value="{{ tag.id }}" label="{{ tag.tag|e('html') }}">{{ tag.tag|e('html') }}</option>
{% endfor %}
</select>
</div>
</div>

View File

@@ -0,0 +1,48 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th data-defaultsign="az">{{ 'name'|_ }}</th>
<th data-defaultsign="_19" class="hidden-xs" style="text-align: right;">{{ 'balanceStart'|_ }}</th>
<th data-defaultsign="_19" class="hidden-xs" style="text-align: right;">{{ 'balanceEnd'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'difference'|_ }}</th>
</tr>
</thead>
<tbody>
{% for account in accountReport.accounts %}
<tr>
<td data-value="{{ account.name }}">
<a href="{{ route('accounts.show',account.id) }}" title="{{ account.name }}">{{ account.name }}</a>
</td>
<td class="hidden-xs" data-value="{{ account.start_balance }}" style="text-align: right;">
{{ formatAmountBySymbol(account.start_balance, account.currency_symbol, account.currency_decimal_places) }}
</td>
<td class="hidden-xs" data-value="{{ account.end_balance }}" style="text-align: right;">
{{ formatAmountBySymbol(account.end_balance, account.currency_symbol, account.currency_decimal_places) }}
</td>
<td style="text-align: right;"
data-value="{{ (account.end_balance - account.start_balance) }}">
{{ formatAmountBySymbol(account.end_balance - account.start_balance, account.currency_symbol, account.currency_decimal_places) }}
</td>
</tr>
{% endfor %}
<tr>
<td colspan="4"><em>{{ 'sumOfSums'|_ }}</em></td>
</tr>
{% for sum in accountReport.sums %}
<tr>
<td>
&nbsp;
</td>
<td style="text-align: right;">
{{ formatAmountBySymbol(sum.start, sum.currency_symbol, sum.currency_decimal_places) }}
</td>
<td style="text-align: right;">
{{ formatAmountBySymbol(sum.end, sum.currency_symbol, sum.currency_decimal_places) }}
</td>
<td style="text-align: right;">
{{ formatAmountBySymbol(sum.difference, sum.currency_symbol, sum.currency_decimal_places) }}
</td>
</tr>
{% endfor %}
</tbody>
</table>

View File

@@ -0,0 +1,61 @@
<table class="table table-hover">
<thead>
<tr>
<th>{{ 'budgets'|_ }}</th>
{% for account in report.accounts %}
{% if account.sum != 0 %}
<th class="hidden-xs" style="text-align: right;"><a href="{{ route('accounts.show',account.id) }}"
title="{{ account.iban|default(account.name) }}">{{ account.name }}</a></th>
{% endif %}
{% endfor %}
<th style="text-align: right;">{{ 'sum'|_ }}</th>
</tr>
</thead>
<tbody>
{% for budget in report.budgets %}
{% if budget.spent|length > 0 %}
<tr>
<td>
<a href="{{ route('budgets.show', [budget.budget_id]) }}">{{ budget.budget_name }}</a>
</td>
{% for account in report.accounts %}
{% if budget.spent[account.id] %}
<td style="text-align: right;">
{{ formatAmountBySymbol(budget.spent[account.id].spent, budget.spent[account.id].currency_symbol, budget.spent[account.id].currency_decimal_places) }}
<span data-location="budget-entry"
data-budget-id="{{ budget.budget_id }}"
data-account-id="{{ account.id }}"
data-currency-id="{{ budget.spent[account.id].currency_id }}"
class="fa fa-fw fa-info-circle text-muted firefly-info-button"></span>
</td>
{% else %}
{% if report.accounts[account.id].sum != 0 %}
<td>&nbsp;</td>
{% endif %}
{% endif %}
{% endfor %}
<td style="text-align: right;">
{% for sum in report.sums[budget.budget_id] %}
{{ formatAmountBySymbol(sum.sum, sum.currency_symbol, sum.currency_decimal_places) }} <span class="fa fa-fw fa-info-circle text-muted"></span>
<br/>
{% endfor %}
</td>
</tr>
{% endif %}
{% endfor %}
</tbody>
<tfoot>
<tr>
<td><em>{{ 'sum'|_ }}</em></td>
{% for account in report.accounts %}
{% if account.sum != 0 %}
<td style="text-align: right;">
{{ formatAmountBySymbol(account.sum, account.currency_symbol, account.currency_decimal_places) }}
</td>
{% endif %}
{% endfor %}
</tr>
</tfoot>
</table>

View File

@@ -0,0 +1,84 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th data-defaultsign="az">{{ trans('form.name') }}</th>
<th data-defaultsign="_19" class="hidden-xs" style="text-align: right;">{{ trans('form.amount_min') }}</th>
<th data-defaultsign="_19" class="hidden-xs" style="text-align: right;">{{ trans('form.amount_max') }}</th>
<th data-defaultsign="_19">{{ trans('form.expected_on') }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ trans('form.paid') }}</th>
</tr>
</thead>
<tbody>
{% for bill in report.bills %}
{% if (bill.expected_dates|length > 0 or bill.paid_moments|length > 0) and bill.active %}
<tr>
<td>
<a href="{{ route('bills.show',bill.id) }}">{{ bill.name }}</a>
</td>
<td class="hidden-xs" style="text-align:right;">
{{ formatAmountBySymbol(bill.amount_min, bill.currency_symbol, bill.currency_decimal_places) }}
</td>
<td class="hidden-xs" style="text-align:right;">
{{ formatAmountBySymbol(bill.amount_max, bill.currency_symbol, bill.currency_decimal_places) }}
</td>
<td data-value="{{ bill.expected_dates[0].format('Y-m-d')|default('0000-00-00') }}">
{% for date in bill.expected_dates %}
{{ date.formatLocalized(monthAndDayFormat) }}<br/>
{% endfor %}
</td>
<td style="text-align:right;">
{% set hitCount = 0 %}
{% for journals in bill.paid_moments %}
{% for journal in journals %}
{% set hitCount = hitCount+1 %}
<a title="{{ journal.date.formatLocalized(monthAndDayFormat) }}"
href="{{ route('transactions.show', [journal.transaction_group_id]) }}">{{ journal.description }}</a>,
{{ formatAmountBySymbol(journal.amount, journal.currency_symbol, journal.currency_decimal_places) }}
<br/>
{% endfor %}
{% endfor %}
{% if hitCount == 0 %}
<em>{{ 'notCharged'|_ }}</em>
{% endif %}
</td>
</tr>
{% endif %}
{% endfor %}
{% for line in bills.getBills %}
<tr>
<td data-value="{{ line.getBill.name }}">
<a href="{{ route('bills.show',line.getBill.id) }}">{{ line.getBill.name }}</a>
<small class="text-muted"><br/>
{{ trans('firefly.bill_expected_between', {start: line.getPayDate.formatLocalized(monthAndDayFormat), end: line.getEndOfPayDate.formatLocalized(monthAndDayFormat) }) }}
</small>
</td>
<td class="hidden-xs" data-value="{{ line.getMin }}" style="text-align: right;">{{ formatAmountByCurrency(line.getCurrency, line.getMin) }}</td>
<td class="hidden-xs" data-value="{{ line.getMax }}" style="text-align: right;">{{ formatAmountByCurrency(line.getCurrency, line.getMax) }}</td>
{# if bill is hit, show hit amount #}
{% if line.isHit %}
<td data-value="{{ line.getAmount }}" style="text-align: right;">
<a href="{{ route('transactions.show', line.getTransactionJournalId) }}">
{{ formatAmountByCurrency(line.getCurrency, line.getAmount) }}
</a>
</td>
{% endif %}
{# if not but is active, show "not yet charged #}
{% if not line.isHit and line.isActive %}
<td data-value="0" class="bg-success">{{ 'notCharged'|_ }}</td>
{% endif %}
{% if not line.isActive and not line.isHit %}
<td data-value="-1">&nbsp;</td>
{% endif %}
<td data-value="{{ (line.getMax - line.getAmount) }}" style="text-align: right;" class="hidden-xs">
{% if line.isHit %}
{{ formatAmountByCurrency(line.getCurrency, (line.getMax + line.getAmount)) }}
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>

View File

@@ -0,0 +1,46 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th data-defaultsign="az" colspan="2">{{ 'budget'|_ }}</th>
{% for period in periods %}
<th data-defaultsign="_19" style="text-align: right;">{{ period }}</th>
{% endfor %}
<th data-defaultsign="_19" style="text-align: right;">{{ 'average'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'sum'|_ }}</th>
</tr>
</thead>
<tbody>
{% for key, info in report %}
<tr>
<td data-value="{{ info.name }}">
{% if info.id != 0 %}
<a class="btn btn-default btn-xs" href="{{ route('budgets.show', [info.id]) }}"><span class="fa fa-external-link"></span></a>
{% else %}
<a class="btn btn-default btn-xs" href="{{ route('budgets.no-budget') }}"><span class="fa fa-external-link"></span></a>
{% endif %}
</td>
<td data-value="{{ info.name }}">
<a title="{{ info.name }}" href="#" data-budget="{{ info.id }}" data-currency="{{ info.currency_id }}" class="budget-chart-activate">{{ info.name }}</a>
</td>
{% for key, period in periods %}
{% if(info.entries[key]) %}
<td data-value="{{ info.entries[key] }}" style="text-align: right;">
{{ formatAmountBySymbol(info.entries[key], info.currency_symbol, info.currency_decimal_places) }}
</td>
{% else %}
<td data-value="0" style="text-align: right;">
{{ formatAmountBySymbol(0, info.currency_symbol, info.currency_decimal_places) }}
</td>
{% endif %}
{% endfor %}
<td data-value="{{ info.avg }}" style="text-align: right;">
{{ formatAmountBySymbol(info.avg, info.currency_symbol, info.currency_decimal_places) }}
</td>
<td data-value="{{ info.sum }}" style="text-align: right;">
{{ formatAmountBySymbol(info.sum, info.currency_symbol, info.currency_decimal_places) }}
</td>
</tr>
{% endfor %}
</tbody>
</table>

View File

@@ -0,0 +1,100 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th data-defaultsign="az">{{ 'budget'|_ }}</th>
<th data-defaultsign="month" class="hidden-xs">{{ 'date'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;" class="hidden-xs">{{ 'budgeted'|_ }}</th>
<th data-defaultsign="_19" class="hidden-xs">{{ trans('list.percentage') }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'spent'|_ }}</th>
<th data-defaultsign="_19" class="hidden-xs">{{ trans('list.percentage') }}</th>
<th data-defaultsort="disabled" class="hidden-xs">&nbsp;</th>
<th data-defaultsign="_19" style="text-align: right;" class="hidden-xs">{{ 'left'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'overspent'|_ }}</th>
</tr>
</thead>
<tbody>
{% for budget in report.budgets %}
{% for budget_limit in budget.budget_limits %}
<tr>
{% if budget.no_budget %}
<td data-value="zzz">
<em>{{ 'no_budget'|_ }} ({{ budget_limit.currency_name }})</em>
</td>
{% else %}
<td data-value="{{ budget.budget_name }}">
<a href="{{ route('budgets.show', [budget.budget_id]) }}">{{ budget.budget_name }}</a>
</td>
{% endif %}
<!-- date, hidden on mobile -->
<td class="hidden-xs" data-value="{{ budget_limit.start_date.format('Y-m-d')|default('0000-00-00') }}">
{% if null != budget_limit.budget_limit_id %}
<a href="{{ route('budgets.show.limit', [budget.budget_id, budget_limit.budget_limit_id]) }}">
{{ budget_limit.start_date.formatLocalized(monthAndDayFormat) }}
&mdash;
{{ budget_limit.end_date.formatLocalized(monthAndDayFormat) }}
</a>
{% endif %}
</td>
<!-- budgeted, hidden on mobile -->
<td data-value="{{ budget_limit.budgeted|default(0) }}" style="text-align: right;" class="hidden-xs">
{% if null != budget_limit.budgeted %}
{{ formatAmountBySymbol(budget_limit.budgeted, budget_limit.currency_symbol, budget_limit.currency_decimal_places) }}
{% endif %}
</td>
<!-- percentage, hidden -->
<td data-value="{{ budget_limit.budgeted_pct|default(0) }}" class="hidden-xs">
{{ budget_limit.budgeted_pct }}%
</td>
<!-- spent, visible on mobile -->
<td data-value="{{ budget_limit.spent|default(0) }}" style="text-align: right;">
{{ formatAmountBySymbol(budget_limit.spent, budget_limit.currency_symbol, budget_limit.currency_decimal_places) }}
</td>
<!-- percentage, hidden -->
<td data-value="{{ budget_limit.spent_pct|default(0) }}" class="hidden-xs">
{{ budget_limit.spent_pct }}%
</td>
<!-- info button, not visible on mobile -->
<td class="hidden-xs">
{% if budget_limit.spent != 0 %}
<span class="fa fa-fw text-muted fa-info-circle firefly-info-button"
data-location="budget-spent-amount" data-currency-id="{{ budget_limit.currency_id }}" data-budget-id="{{ budget.budget_id }}"></span>
{% endif %}
</td>
<!-- left, hidden on mobile -->
<td data-value="{{ budget_limit.left|default(0) }}" style="text-align: right;" class="hidden-xs">
{% if null != budget_limit.left %}
{{ formatAmountBySymbol(budget_limit.left, budget_limit.currency_symbol, budget_limit.currency_decimal_places) }}
{% endif %}
</td>
<!-- overspent, visible. -->
<td data-value="{{ budget_limit.overspent|default(0) }}" style="text-align: right;">
{% if null != budget_limit.overspent %}
{{ formatAmountBySymbol(budget_limit.overspent, budget_limit.currency_symbol, budget_limit.currency_decimal_places) }}
{% endif %}
</td>
</tr>
{% endfor %}
{% endfor %}
</tbody>
<tfoot>
{% for sum in report.sums %}
<tr>
<td colspan="2"><em>{{ 'sum'|_ }} ({{ sum.currency_name }})</em></td>
<td style="text-align: right;">{{ formatAmountBySymbol(sum.budgeted, sum.currency_symbol, sum.currency_decimal_places) }}</td>
<td>&nbsp;</td>
<td style="text-align: right;">{{ formatAmountBySymbol(sum.spent, sum.currency_symbol, sum.currency_decimal_places) }}</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td style="text-align: right;">{{ formatAmountBySymbol(sum.left, sum.currency_symbol, sum.currency_decimal_places) }}</td>
<td style="text-align: right;">{{ formatAmountBySymbol(sum.overspent, sum.currency_symbol, sum.currency_decimal_places) }}</td>
</tr>
{% endfor %}
</tfoot>
</table>

View File

@@ -0,0 +1,54 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th data-defaultsign="az">{{ 'category'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'spent'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'earned'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'sum'|_ }}</th>
<th data-defaultsort="disabled">&nbsp;</th>
</tr>
</thead>
<tbody>
{% for category in report.categories %}
{% if loop.index > listLength %}
<tr class="overListLength">
{% else %}
<tr>
{% endif %}
<td data-value="{{ category.title }}">
<a href="{{ route('categories.show', category.id) }}">{{ category.title }}</a>
</td>
<td data-value="{{ category.spent }}" style="text-align: right;">{{ formatAmountBySymbol(category.spent, category.currency_symbol, category.currency_decimal_places, true) }}</td>
<td data-value="{{ category.earned }}" style="text-align: right;">{{ formatAmountBySymbol(category.earned, category.currency_symbol, category.currency_decimal_places, true) }}</td>
<td data-value="{{ category.sum }}" style="text-align: right;">{{ formatAmountBySymbol(category.sum, category.currency_symbol, category.currency_decimal_places, true) }}</td>
<td style="width:20px;">
<span class="fa fa-fw fa-info-circle text-muted firefly-info-button" data-location="category-entry" data-category-id="{{ category.id }}" data-currency-id="{{ category.currency_id }}"
></span>
</td>
</tr>
{% endfor %}
</tbody>
<tfoot>
{% if report.categories|length > listLength %}
<tr>
<td colspan="4" class="active">
<a href="#" class="listLengthTrigger">{{ trans('firefly.show_full_list',{number:incomeTopLength}) }}</a>
</td>
</tr>
{% endif %}
{% for sum in report.sums %}
<tr>
<td><em>{{ 'sum'|_ }} ({{ sum.currency_name }})</em></td>
<td style="text-align: right;">
{{ formatAmountBySymbol(sum.spent, sum.currency_symbol, sum.currency_decimal_places) }}
</td>
<td style="text-align: right;">
{{ formatAmountBySymbol(sum.earned, sum.currency_symbol, sum.currency_decimal_places) }}
</td>
<td style="text-align: right;">
{{ formatAmountBySymbol(sum.sum, sum.currency_symbol, sum.currency_decimal_places) }}
</td>
</tr>
{% endfor %}
</tfoot>
</table>

View File

@@ -0,0 +1,50 @@
<table class="table table-hover sortable table-condensed">
<thead>
<tr>
<th data-defaultsign="az" colspan="2">{{ 'category'|_ }}</th>
{% for period in periods %}
<th data-defaultsign="_19" style="text-align: right;">{{ period }}</th>
{% endfor %}
<th data-defaultsign="_19" style="text-align: right;">{{ 'sum'|_ }}</th>
</tr>
</thead>
<tbody>
{% for info in report %}
<tr>
<td data-value="{{ info.title }}">
{% if info.id != 0 %}
<a class="btn btn-default btn-xs" href="{{ route('categories.show', [info.id]) }}"><span class="fa fa-external-link"></span></a>
{% else %}
<a class="btn btn-default btn-xs" href="{{ route('categories.no-category') }}"><span class="fa fa-external-link"></span></a>
{% endif %}
</td>
<td data-value="{{ info.title }}">
<a title="{{ info.title }}" href="#" data-currency="{{ info.currency_id }}" data-category="{{ info.id }}" class="category-chart-activate">{{ info.title }}</a>
</td>
{% for key, period in periods %}
{# income first #}
{% if(info.entries[key]) %}
<td data-value="{{ info.entries[key] }}" style="text-align: right;">
{{ formatAmountBySymbol(info.entries[key], info.currency_symbol, info.currency_decimal_places) }}
</td>
{% else %}
<td data-value="0" style="text-align: right;">
{{ formatAmountBySymbol(0, info.currency_symbol, info.currency_decimal_places) }}
</td>
{% endif %}
{% endfor %}
{# if sum of income, display: #}
{% if info.sum %}
<td data-value="{{ info.sum }}" style="text-align: right;">
{{ formatAmountBySymbol(info.sum, info.currency_symbol, info.currency_decimal_places) }}
</td>
{% else %}
<td data-value="0" style="text-align: right;">
{{ formatAmountBySymbol(0, info.currency_symbol, info.currency_decimal_places) }}
</td>
{% endif %}
</tr>
{% endfor %}
</tbody>
</table>

View File

@@ -0,0 +1,30 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th style="width:66%;" data-defaultsign="az" data-defaultsort="asc">{{ 'category'|_ }}</th>
<th style="width:34%;" data-defaultsign="_19">{{ 'spent'|_ }}</th>
</tr>
</thead>
<tbody>
{% for budgetId, entry in together %}
<tr>
<td data-value="{% if entry.budget == null %}zzzzzzzzzzz{% else %}{{ entry.budget }}{% endif %}">
{% if entry.budget == null %}
<a href="{{ route('budgets.no-budget') }}">{{ 'no_budget_squared'|_ }}</a>
{% else %}
<a href="{{ route('budgets.show', budgetId) }}">{{ entry.budget }}</a>
{% endif %}
</td>
<td data-value="{{ entry.spent.grand_total }}">
{% if entry.spent.per_currency|length ==0 %}
{{ '0'|formatAmount }}
{% else %}
{% for expense in entry.spent.per_currency %}
{{ formatAmountBySymbol(expense.sum, expense.currency.symbol, expense.currency.dp) }}<br/>
{% endfor %}
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>

View File

@@ -0,0 +1,41 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th style="width:50%;" data-defaultsign="az" data-defaultsort="asc">{{ 'category'|_ }}</th>
<th style="width:25%;" data-defaultsign="_19">{{ 'spent'|_ }}</th>
<th style="width:25%;" data-defaultsign="_19">{{ 'earned'|_ }}</th>
</tr>
</thead>
<tbody>
{% for categoryId, entry in together %}
<tr>
<td data-value="{% if entry.category == null %}zzzzzzzzzzz{% else %}{{ entry.category }}{% endif %}">
{% if entry.category == null %}
<a href="{{ route('categories.no-category') }}">{{ 'noCategory'|_ }}</a>
{% else %}
<a href="{{ route('categories.show', categoryId) }}">{{ entry.category }}</a>
{% endif %}
</td>
<td data-value="{{ entry.spent.grand_total }}">
{% if entry.spent.per_currency|length ==0 %}
{{ '0'|formatAmount }}
{% else %}
{% for expense in entry.spent.per_currency %}
{{ formatAmountBySymbol(expense.sum, expense.currency.symbol, expense.currency.dp) }}<br/>
{% endfor %}
{% endif %}
</td>
<td data-value="{{ entry.earned.grand_total }}">
{% if entry.earned.per_currency|length ==0 %}
{{ '0'|formatAmount }}
{% else %}
{% for income in entry.earned.per_currency %}
{{ formatAmountBySymbol(income.sum * -1, income.currency.symbol, income.currency.dp) }}<br/>
{% endfor %}
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>

View File

@@ -0,0 +1,32 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th style="width:50%;" data-defaultsign="az">{{ 'name'|_ }}</th>
<th style="width:25%;" class="hidden-xs" data-defaultsign="_19">{{ 'spent'|_ }}</th>
<th style="width:25%;" class="hidden-xs" data-defaultsign="_19">{{ 'earned'|_ }}</th>
</tr>
</thead>
<tbody>
{% for name, amounts in result %}
<tr>
<td data-value="{{ name }}">{{ name }}</td>
<td data-value="{{ amounts.spent.grand_sum }}">
{% if amounts.spent.per_currency|length == 0 %}
{{ '0'|formatAmount }}
{% endif %}
{% for expense in amounts.spent.per_currency %}
{{ formatAmountBySymbol(expense.sum, expense.currency.symbol, expense.currency.dp) }}<br/>
{% endfor %}
</td>
<td data-value="{{ amounts.earned.grand_sum }}">
{% if amounts.earned.per_currency|length == 0 %}
{{ '0'|formatAmount }}
{% endif %}
{% for income in amounts.earned.per_currency %}
{{ formatAmountBySymbol(income.sum * -1, income.currency.symbol, income.currency.dp) }}<br/>
{% endfor %}
</td>
</tr>
{% endfor %}
</tbody>
</table>

View File

@@ -0,0 +1,61 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th data-defaultsign="az">{{ 'name'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'total'|_ }}</th>
<th data-defaultsign="_19" class="hidden-xs" style="text-align: right;">{{ 'average'|_ }}</th>
<th data-defaultsort="disabled"></th>
</tr>
</thead>
<tbody>
{% for account in report.accounts %}
{% if loop.index > listLength %}
<tr class="overListLength">
{% else %}
<tr>
{% endif %}
<td data-value="{{ account.name }}">
<a href="{{ route('accounts.show',account.id) }}">{{ account.name }}</a>
{% if account.count > 1 %}
<br/>
<small>
{{ account.count }} {{ 'transactions'|_|lower }}
</small>
{% endif %}
</td>
<td data-value="{{ account.sum }}" style="text-align: right;">
{{ formatAmountBySymbol(account.sum, account.currency_symbol, account.currency_decimal_places) }}
</td>
<td class="hidden-xs" data-value="{{ account.average }}" style="text-align: right;">
{% if account.count > 1 %}
{{ formatAmountBySymbol(account.average, account.currency_symbol, account.currency_decimal_places) }}
{% else %}
&mdash;
{% endif %}
</td>
<td>
<span class="fa fa-fw text-muted fa-info-circle firefly-info-button" data-location="{{ type }}"
data-account-id="{{ account.id }}" data-currency-id="{{ account.currency_id }}"></span>
</td>
</tr>
{% endfor %}
</tbody>
<tfoot>
{% if report.accounts|length > listLength %}
<tr>
<td colspan="4" class="active">
<a href="#" class="listLengthTrigger">{{ trans('firefly.show_full_list',{number:incomeTopLength}) }}</a>
</td>
</tr>
{% endif %}
{% for sum in report.sums %}
<tr>
<td><em>{{ 'sum'|_ }} ({{ sum.currency_name }})</em></td>
<td style="text-align: right;">
{{ formatAmountBySymbol(sum.sum, sum.currency_symbol, sum.currency_decimal_places) }}
</td>
<td>&nbsp;</td>
</tr>
{% endfor %}
</table>

View File

@@ -0,0 +1,184 @@
<table class="table table-hover table-compressed table-responsive ">
<thead>
<tr class="ignore">
<th class="hide-buttons">&nbsp;</th>
<th class="hide-icon">&nbsp;</th>
<th class="hide-description">{{ trans('list.description') }}</th>
<th class="hide-balance_before" style="text-align: right;">{{ trans('list.balance_before') }}</th>
<th class="hide-amount" style="text-align: right;">{{ trans('list.amount') }}</th>
<th class="hide-balance_after" style="text-align: right;">{{ trans('list.balance_after') }}</th>
<th class="hide-date">{{ trans('list.date') }}</th>
{# new optional fields (3x) #}
<th class="hide-from">{{ trans('list.from') }}</th>
<th class="hide-to">{{ trans('list.to') }}</th>
<th class="hide-budget"><span class="fa fa-pie-chart fa-fw" title="{{ trans('list.budget') }}"></span></th>
<th class="hide-category"><span class="fa fa-bookmark fa-fw" title="{{ trans('list.category') }}"></span></th>
<th class="hide-bill">{{ trans('list.bill') }}</th>
{# more optional fields (2x) #}
<th class="hide-create_date">{{ trans('list.create_date') }}</th>
<th class="hide-update_date">{{ trans('list.update_date') }}</th>
{# even more optional fields #}
<th class="hide-interest_date">{{ trans('list.interest_date') }}</th>
<th class="hide-book_date">{{ trans('list.book_date') }}</th>
<th class="hide-process_date">{{ trans('list.process_date') }}</th>
<th class="hide-due_date">{{ trans('list.due_date') }}</th>
<th class="hide-payment_date">{{ trans('list.payment_date') }}</th>
<th class="hide-invoice_date">{{ trans('list.invoice_date') }}</th>
</tr>
</thead>
<tbody>
{% for journal in journals %}
<tr data-date="{{ journal.date.format('Y-m-d') }}" data-id="{{ journal.id }}">
<td class="hide-buttons">
<div class="btn-group btn-group-xs">
<a href="{{ route('transactions.edit',journal.transaction_group_id) }}" class="btn btn-xs btn-default"><span class="fa fa-fw fa-pencil"></span></a>
<a href="{{ route('transactions.delete',journal.transaction_group_id) }}" class="btn btn-xs btn-danger"><span class="fa fa-fw fa-trash-o"></span></a>
</div>
</td>
<td class="hide-icon">
{% if journal.transaction_type_type == 'Withdrawal' %}
<span class="fa fa-long-arrow-left fa-fw" title="{{ trans('firefly.Withdrawal') }}"></span>
{% endif %}
{% if journal.transaction_type_type == 'Deposit' %}
<span class="fa fa-long-arrow-right fa-fw" title="{{ trans('firefly.Deposit') }}"></span>
{% endif %}
{% if journal.transaction_type_type == 'Transfer' %}
<span class="fa fa-exchange fa-fw" title="{{ trans('firefly.Deposit') }}"></span>
{% endif %}
{% if journal.transaction_type_type == 'Reconciliation' %}
<span class="fa-fw fa fa-calculator" title="{{ trans('firefly.reconciliation_transaction') }}"></span>
{% endif %}
{% if journal.transaction_type_type == 'Opening balance' %}
<span class="fa-fw fa fa-star-o" title="{{ trans('firefly.Opening balance') }}"></span>
{% endif %}
</td>
<td class="hide-description">
<a href="{{ route('transactions.show',journal.transaction_group_id) }}">
{% if journal.group_title|length > 0 %}
{{ journal.group_title }} ({{ journal.description }})
{% else %}
{{ journal.description }}
{% endif %}
</a>
</td>
<td class="hide-balance_before" style="text-align: right;">
{{ formatAmountBySymbol(journal.balance_before, auditData[account.id].currency.symbol, auditData[account.id].currency.decimal_places) }}
</td>
<td class="hide-amount" style="text-align: right;">
{% if auditData[account.id].currency.id == journal.currency_id %}
{% if account.id == journal.destination_account_id and journal.transaction_type_type == 'Opening balance' %}
{{ formatAmountBySymbol(journal.amount*-1, journal.currency_symbol, journal.currency_decimal_places) }}
{% elseif account.id == journal.destination_account_id and journal.transaction_type_type == 'Deposit' %}
{{ formatAmountBySymbol(journal.amount*-1, journal.currency_symbol, journal.currency_decimal_places) }}
{% elseif account.id == journal.destination_account_id and journal.transaction_type_type == 'Transfer' %}
{{ formatAmountBySymbol(journal.amount*-1, journal.currency_symbol, journal.currency_decimal_places) }}
{% else %}
{{ formatAmountBySymbol(journal.amount, journal.currency_symbol, journal.currency_decimal_places) }}
{% endif %}
{% endif %}
{% if auditData[account.id].currency.id == journal.foreign_currency_id %}
{% if account.id == journal.destination_account_id and journal.transaction_type_type == 'Opening balance' %}
{{ formatAmountBySymbol(journal.foreign_amount*-1, journal.foreign_currency_symbol, journal.foreign_currency_decimal_places) }}
{% elseif account.id == journal.destination_account_id and journal.transaction_type_type == 'Deposit' %}
{{ formatAmountBySymbol(journal.foreign_amount*-1, journal.foreign_currency_symbol, journal.foreign_currency_decimal_places) }}
{% elseif account.id == journal.destination_account_id and journal.transaction_type_type == 'Transfer' %}
{{ formatAmountBySymbol(journal.foreign_amount*-1, journal.foreign_currency_symbol, journal.foreign_currency_decimal_places) }}
{% else %}
{{ formatAmountBySymbol(journal.foreign_amount, journal.foreign_currency_symbol, journal.foreign_currency_decimal_places) }}
{% endif %}
{% endif %}
</td>
<td class="hide-balance_after" style="text-align: right;">
{{ formatAmountBySymbol(journal.balance_after, auditData[account.id].currency.symbol, auditData[account.id].currency.decimal_places) }}
</td>
<td class="hide-date">{{ journal.date.formatLocalized(monthAndDayFormat) }}</td>
<td class="hide-from">
<a href="{{ route('accounts.show', [journal.source_account_id]) }}" title="{{ journal.source_account_iban|default(journal.source_account_name) }}">{{ journal.source_account_name }}</a>
</td>
<td class="hide-to">
<a href="{{ route('accounts.show', [journal.destination_account_id]) }}" title="{{ journal.destination_account_iban|default(journal.destination_account_name) }}">{{ journal.destination_account_name }}</a>
</td>
<td class="hide-budget">
{% if journal.budget_id %}
<a href="{{ route('budgets.show', [journal.budget_id]) }}" title="{{ journal.budget_name }}">{{ journal.budget_name }}</a>
{% endif %}
</td>
<td class="hide-category">
{% if journal.category_id %}
<a href="{{ route('categories.show', [journal.category_id]) }}" title="{{ journal.category_name }}">{{ journal.category_name }}</a>
{% endif %}
</td>
<td class="hide-bill">
{% if journal.bill_id %}
<a href="{{ route('bills.show', [journal.bill_id]) }}" title="{{ journal.bill_name }}">{{ journal.bill_name }}</a>
{% endif %}
</td>
<!-- new optional fields (2x) -->
<td class="hide-create_date">
{{ journal.created_at.formatLocalized(dateTimeFormat) }}
</td>
<td class="hide-update_date">
{{ journal.updated_at.formatLocalized(dateTimeFormat) }}
</td>
<!-- more new dates -->
<td class="hide-interest_date">
{% if null != journal.interest_date %}
{{ journal.interest_date.formatLocalized(monthAndDayFormat) }}
{% endif %}
</td>
<td class="hide-book_date">
{% if null != journal.book_date %}
{{ journal.book_date.formatLocalized(monthAndDayFormat) }}
{% endif %}
</td>
<td class="hide-process_date">
{% if null != journal.process_date %}
{{ journal.process_date.formatLocalized(monthAndDayFormat) }}
{% endif %}
</td>
<td class="hide-due_date">
{% if null != journal.due_date %}
{{ journal.due_date.formatLocalized(monthAndDayFormat) }}
{% endif %}
</td>
<td class="hide-payment_date">
{% if null != journal.payment_date %}
{{ journal.payment_date.formatLocalized(monthAndDayFormat) }}
{% endif %}
</td>
<td class="hide-invoice_date">
{% if null != journal.invoice_date %}
{{ journal.invoice_date.formatLocalized(monthAndDayFormat) }}
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>

View File

@@ -0,0 +1,26 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th data-defaultsign="az">{{'currency'|_}}</th>
<th data-defaultsign="_19">{{ 'money_flowing_in'|_ }}</th>
<th data-defaultsign="_19">{{ 'money_flowing_out'|_ }}</th>
<th data-defaultsign="_19">{{ 'difference'|_ }}</th>
</tr>
</thead>
<tbody>
{% for sum in sums %}
<tr>
<td>{{ sum.currency_name }} ({{ sum.currency_symbol }})</td>
<td data-value="{{ sum.in }}">
{{ formatAmountBySymbol(sum.in, sum.currency_symbol, sum.currency_decimal_places) }}
</td>
<td data-value="{{ sum.out }}">
{{ formatAmountBySymbol(sum.out, sum.currency_symbol, sum.currency_decimal_places) }}
</td>
<td data-value="{{ sum.sum }}">
{{ formatAmountBySymbol(sum.sum, sum.currency_symbol, sum.currency_decimal_places) }}
</td>
</tr>
{% endfor %}
</tbody>
</table>

View File

@@ -0,0 +1,23 @@
{% if tags|length > 0 %}
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'tags'|_ }}</h3>
</div>
<div class="box-body">
{% if tags|length == 1 %}
{% set multiplier = 12 %}
{% else %}
{% set multiplier = 30 %}
{% endif %}
{% for tag in tags %}
<span title="{{ tag.amount|formatAmountPlain }}"
style="font-size: {{ tag.fontsize * multiplier }}px"
>&nbsp;<a href="{{ route('tags.show', tag.id) }}">{{ tag.tag }}</a>&nbsp;</span>
{% endfor %}
</div>
</div>
{% endif %}

View File

@@ -0,0 +1,31 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th data-defaultsign="az">{{ 'account'|_ }}</th>
<th data-defaultsign="az">{{ 'description'|_ }}</th>
<th data-defaultsign="month">{{ 'date'|_ }}</th>
<th style="width:25%;" class="hidden-xs" data-defaultsign="_19">{{ 'amount'|_ }}</th>
</tr>
</thead>
<tbody>
{% for transaction in sorted %}
<tr>
<td data-value="{{ transaction.destination_account_name }}">
<a href="{{ route('accounts.show',transaction.destination_account_id) }}">{{ transaction.destination_account_name }}</a>
</td>
<td data-value="{{ transaction.description }}">{{ transaction.description }}</td>
<td data-value="{{ transaction.date.format('Y-m-d') }}">
{{ transaction.date.formatLocalized(monthAndDayFormat) }}
</td><!-- See reference nr. 3 -->
<td style="text-align: right;" data-value="{{ transaction.amount}}"><span
style="margin-right:5px;">
{{ formatAmountBySymbol(transaction.amount, transaction.currency_symbol, transaction.currency_decimal_places) }}
{% if null != transaction.foreign_amount %}
({{ formatAmountBySymbol(transaction.foreign_amount, transaction.foreign_currency_symbol, transaction.foreign_currency_decimal_places) }})
{% endif %}
</span></td>
</tr>
{% endfor %}
</tbody>
</table>

View File

@@ -0,0 +1,290 @@
{% extends './v1/layout/default' %}
{% block breadcrumbs %}
{{ Breadcrumbs.render(Route.getCurrentRoute.getName, accountIds, tagIds, start, end) }}
{% endblock %}
{% block content %}
<div class="row">
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'accounts'|_ }}</h3>
</div>
<div class="box-body table-responsive no-padding" id="accountsHolder">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'tags'|_ }}</h3>
</div>
<div class="box-body table-responsive no-padding" id="tagsHolder">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'account_per_tag'|_ }}</h3>
</div>
<div class="box-body table-responsive no-padding" id="accountPerTagHolder">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-6 col-md-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'expense_per_tag'|_ }}</h3>
</div>
<div class="box-body">
<div style="width:100%;margin:0 auto;">
<canvas id="tag-out-pie-chart" style="width:100%;height:250px;" height="250"></canvas>
</div>
</div>
</div>
</div>
<div class="col-lg-6 col-md-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'income_per_tag'|_ }}</h3>
</div>
<div class="box-body">
<div style="width:100%;margin:0 auto;">
<canvas id="tag-in-pie-chart" style="width:100%;height:250px;" height="250"></canvas>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-4 col-md-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'expense_per_category'|_ }}</h3>
</div>
<div class="box-body">
<div style="width:100%;margin:0 auto;">
<canvas id="category-out-pie-chart" style="width:100%;height:250px;" height="250"></canvas>
</div>
</div>
</div>
</div>
<div class="col-lg-4 col-md-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'income_per_category'|_ }}</h3>
</div>
<div class="box-body">
<div style="width:100%;margin:0 auto;">
<canvas id="category-in-pie-chart" style="width:100%;height:250px;" height="250"></canvas>
</div>
</div>
</div>
</div>
<div class="col-lg-4 col-md-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'expense_per_budget'|_ }}</h3>
</div>
<div class="box-body">
<div style="width:100%;margin:0 auto;">
<canvas id="budgets-out-pie-chart" style="width:100%;height:250px;" height="250"></canvas>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-6 col-md-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'expense_per_source_account'|_ }}</h3>
</div>
<div class="box-body">
<div style="width:100%;margin:0 auto;">
<canvas id="source-out-pie-chart" style="width:100%;height:250px;" height="250"></canvas>
</div>
</div>
</div>
</div>
<div class="col-lg-6 col-md-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'income_per_source_account'|_ }}</h3>
</div>
<div class="box-body">
<div style="width:100%;margin:0 auto;">
<canvas id="source-in-pie-chart" style="width:100%;height:250px;" height="250"></canvas>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-6 col-md-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'expense_per_destination_account'|_ }}</h3>
</div>
<div class="box-body">
<div style="width:100%;margin:0 auto;">
<canvas id="dest-out-pie-chart" style="width:100%;height:250px;" height="250"></canvas>
</div>
</div>
</div>
</div>
<div class="col-lg-6 col-md-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'income_per_destination_account'|_ }}</h3>
</div>
<div class="box-body">
<div style="width:100%;margin:0 auto;">
<canvas id="dest-in-pie-chart" style="width:100%;height:250px;" height="250"></canvas>
</div>
</div>
</div>
</div>
</div>
{% for tag in tags %}
<div class="row">
<div class="col-lg-12">
<div class="box main_budget_chart">
<div class="box-header with-border">
<h3 class="box-title">{{ 'income_and_expenses'|_ }} ({{ tag.tag }})</h3>
</div>
<div class="box-body">
<canvas class="main_tag_canvas"
data-url="{{ route('chart.tag.main', [accountIds, tag.id, start.format('Ymd'), end.format('Ymd')]) }}"
id="in-out-chart-{{ tag.id }}" style="width:100%;height:400px;" height="400" width="100%"></canvas>
</div>
<div class="box-footer">
<p class="text-info"><em>{{ 'tag_report_chart_single_tag'|_ }}</em></p>
</div>
</div>
</div>
</div>
{% endfor %}
<div class="row">
<div class="col-lg-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'average_spending_per_destination'|_ }}</h3>
</div>
<div class="box-body table-responsive no-padding" id="avgExpensesHolder">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
<div class="col-lg-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'average_earning_per_source'|_ }}</h3>
</div>
<div class="box-body table-responsive no-padding" id="avgIncomeHolder">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'expenses'|_ }} ({{ trans('firefly.topX', {number: listLength}) }})</h3>
</div>
<div class="box-body table-responsive no-padding" id="topExpensesHolder">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
<div class="col-lg-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'income'|_ }} ({{ trans('firefly.topX', {number: listLength}) }})</h3>
</div>
<div class="box-body table-responsive no-padding" id="topIncomeHolder">
</div>
{# loading indicator #}
<div class="overlay">
<span class="fa fa-refresh fa-spin"></span>
</div>
</div>
</div>
</div>
{% endblock %}
{% block scripts %}
<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/lib/bootstrap-sortable.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
<script type="text/javascript" src="v1/js/ff/reports/all.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
<script type="text/javascript" nonce="{{ JS_NONCE }}">
// to report another URL:
var startDate = '{{ start.format('Ymd') }}';
var endDate = '{{ end.format('Ymd') }}';
var accountIds = '{{ accountIds }}';
var tagIds = '{{ tagIds }}';
// html block URI's:
var accountsUri = '{{ route('report-data.tag.accounts', [accountIds, tagIds, start.format('Ymd'), end.format('Ymd')]) }}';
var tagsUri = '{{ route('report-data.tag.tags', [accountIds, tagIds, start.format('Ymd'), end.format('Ymd')]) }}';
var accountPerTagUri = '{{ route('report-data.tag.account-per-tag', [accountIds, tagIds, start.format('Ymd'), end.format('Ymd')]) }}';
// pie charts:
var tagOutUri = '{{ route('chart.tag.tag-expense', [accountIds, tagIds, start.format('Ymd'), end.format('Ymd')]) }}';
var tagInUri = '{{ route('chart.tag.tag-income', [accountIds, tagIds, start.format('Ymd'), end.format('Ymd')]) }}';
var categoryOutUri = '{{ route('chart.tag.category-expense', [accountIds, tagIds, start.format('Ymd'), end.format('Ymd')]) }}';
var categoryInUri = '{{ route('chart.tag.category-income', [accountIds, tagIds, start.format('Ymd'), end.format('Ymd')]) }}';
var budgetsOutUri = '{{ route('chart.tag.budget-expense', [accountIds, tagIds, start.format('Ymd'), end.format('Ymd')]) }}';
var sourceOutUri = '{{ route('chart.tag.source-expense', [accountIds, tagIds, start.format('Ymd'), end.format('Ymd')]) }}';
var sourceInUri = '{{ route('chart.tag.source-income', [accountIds, tagIds, start.format('Ymd'), end.format('Ymd')]) }}';
var destOutUri = '{{ route('chart.tag.dest-expense', [accountIds, tagIds, start.format('Ymd'), end.format('Ymd')]) }}';
var destInUri = '{{ route('chart.tag.dest-income', [accountIds, tagIds, start.format('Ymd'), end.format('Ymd')]) }}';
var avgExpensesUri = '{{ route('report-data.tag.avg-expenses', [accountIds, tagIds, start.format('Ymd'), end.format('Ymd')]) }}';
var topExpensesUri = '{{ route('report-data.tag.top-expenses', [accountIds, tagIds, start.format('Ymd'), end.format('Ymd')]) }}';
var avgIncomeUri = '{{ route('report-data.tag.avg-income', [accountIds, tagIds, start.format('Ymd'), end.format('Ymd')]) }}';
var topIncomeUri = '{{ route('report-data.tag.top-income', [accountIds, tagIds, start.format('Ymd'), end.format('Ymd')]) }}';
</script>
<script type="text/javascript" src="v1/js/ff/reports/tag/month.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
{% endblock %}
{% block styles %}
<link rel="stylesheet" href="v1/css/bootstrap-sortable.css?v={{ FF_VERSION }}" type="text/css" media="all" nonce="{{ JS_NONCE }}">
{% endblock %}

View File

@@ -0,0 +1,40 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th data-defaultsign="az">{{ 'name'|_ }}</th>
{% for tag in tags %}
<th data-defaultsign="_19" style="text-align: right;">{{ tag.tag }}</th>
{% endfor %}
</tr>
</thead>
<tbody>
{% for account in report %}
{% for currency in account.currencies %}
<tr>
<td data-value="{{ account.name }} ({{ currency.currency_name }})">
<a href="{{ route('accounts.show', account.id) }}" title="{{ account.iban }}">{{ account.name }} ({{ currency.currency_name }})</a>
</td>
{% for tag in tags %}
<td style="text-align: right;">
{% if currency.tags[tag.id] %}
<span title="{{ 'earned'|_ }}: {{ formatAmountBySymbol(currency.tags[tag.id].earned, currency.currency_symbol, currency.currency_decimal_places, false) }}, {{ 'spent'|_ }}: {{ formatAmountBySymbol(currency.tags[tag.id].spent, currency.currency_symbol, currency.currency_decimal_places, false) }}"
{{ formatAmountBySymbol(currency.tags[tag.id].sum, currency.currency_symbol, currency.currency_decimal_places) }}
{% else %}
&mdash;
{% endif %}
</td>
{% endfor %}
</tr>
{% endfor %}
{% endfor %}
</tbody>
<tfoot>
<tr>
<td colspan="{{ 1 + tags|length }}">
<p class="text-info">
<em>{{ 'tag_report_expenses_listed_once'|_ }}</em>
</p>
</td>
</tr>
</tfoot>
</table>

View File

@@ -0,0 +1,46 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th data-defaultsign="az">{{ 'name'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'spent'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'earned'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'sum'|_ }}</th>
</tr>
</thead>
<tbody>
{% for account in report %}
{% for currency in account.currencies %}
<tr>
<td data-value="{{ account.name }} ({{ currency.currency_name }})">
<a href="{{ route('accounts.show', account.id) }}" title="{{ account.iban }}">{{ account.name }} ({{ currency.currency_name }})</a>
</td>
<td data-value="{{ currency.spent }}" style="text-align: right;">
{{ formatAmountBySymbol(currency.spent, currency.currency_symbol, currency.currency_decimal_places) }}
</td>
<td data-value="{{ currency.earned }}" style="text-align: right;">
{{ formatAmountBySymbol(currency.earned, currency.currency_symbol, currency.currency_decimal_places) }}
</td>
<td data-value="{{ currency.sum }}" style="text-align: right;">
{{ formatAmountBySymbol(currency.sum, currency.currency_symbol, currency.currency_decimal_places) }}
</td>
</tr>
{% endfor %}
{% endfor %}
</tbody>
<tfoot>
{% for sum in sums %}
<tr>
<td>{{ 'sum'|_ }} ({{ sum.currency_name }})</td>
<td style="text-align: right;">
{{ formatAmountBySymbol(sum.spent_sum, sum.currency_symbol, sum.currency_decimal_places) }}
</td>
<td style="text-align: right;">
{{ formatAmountBySymbol(sum.earned_sum, sum.currency_symbol, sum.currency_decimal_places) }}
</td>
<td style="text-align: right;">
{{ formatAmountBySymbol(sum.total_sum, sum.currency_symbol, sum.currency_decimal_places) }}
</td>
</tr>
{% endfor %}
</tfoot>
</table>

View File

@@ -0,0 +1,46 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th data-defaultsign="az">{{ 'account'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'spent_average'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'total'|_ }}</th>
<th data-defaultsign="_19">{{ 'transaction_count'|_ }}</th>
</tr>
</thead>
<tbody>
{% for row in result %}
{% if loop.index > listLength %}
<tr class="overListLength">
{% else %}
<tr>
{% endif %}
<td data-sortable="false">
<a href="{{ route('accounts.show', row.destination_account_id) }}">
{{ row.destination_account_name }}
</a>
</td>
<td data-value="{{ row.avg }}" style="text-align: right;">
{{ formatAmountBySymbol(row.avg, row.currency_symbol, row.currency_decimal_places) }}
</td>
<td data-value="{{ row.sum }}" style="text-align: right;">
{{ formatAmountBySymbol(row.sum, row.currency_symbol, row.currency_decimal_places) }}
</td>
<td data-value="{{ row.transactions }}">
{{ row.transactions }}
</td>
</tr>
{% endfor %}
</tbody>
<tfoot>
{% if result|length > listLength %}
<tr>
<td colspan="5" class="active">
<a href="#" class="listLengthTrigger">{{ trans('firefly.show_full_list',{number:incomeTopLength}) }}</a>
</td>
</tr>
{% endif %}
</tfoot>
</table>

View File

@@ -0,0 +1,46 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th data-defaultsign="az">{{ 'account'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'spent_average'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'total'|_ }}</th>
<th data-defaultsign="_19">{{ 'transaction_count'|_ }}</th>
</tr>
</thead>
<tbody>
{% for row in result %}
{% if loop.index > listLength %}
<tr class="overListLength">
{% else %}
<tr>
{% endif %}
<td data-sortable="false">
<a href="{{ route('accounts.show', row.source_account_id) }}">
{{ row.source_account_name }}
</a>
</td>
<td data-value="{{ row.avg }}" style="text-align: right;">
{{ formatAmountBySymbol(row.avg, row.currency_symbol, row.currency_decimal_places) }}
</td>
<td data-value="{{ row.sum }}" style="text-align: right;">
{{ formatAmountBySymbol(row.sum, row.currency_symbol, row.currency_decimal_places) }}
</td>
<td data-value="{{ row.transactions }}">
{{ row.transactions }}
</td>
</tr>
{% endfor %}
</tbody>
<tfoot>
{% if result|length > listLength %}
<tr>
<td colspan="5" class="active">
<a href="#" class="listLengthTrigger">{{ trans('firefly.show_full_list',{number:incomeTopLength}) }}</a>
</td>
</tr>
{% endif %}
</tfoot>
</table>

View File

@@ -0,0 +1,64 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th data-defaultsign="az">{{ 'name'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'spent'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'earned'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'sum'|_ }}</th>
</tr>
</thead>
<tbody>
{% for tag in report %}
{% if tag.currencies|length == 0 %}
<tr>
<td data-value="{{ tag.name }}">
<a href="{{ route('tags.show', tag.id) }}" title="{{ tag.name }}">{{ tag.name }}</a>
</td>
<td style="text-align: right;">&mdash;</td>
<td style="text-align: right;">&mdash;</td>
<td style="text-align: right;">&mdash;</td>
</tr>
{% endif %}
{% for currency in tag.currencies %}
<tr>
<td data-value="{{ tag.name }} ({{ currency.currency_name }})">
<a href="{{ route('tags.show', tag.id) }}" title="{{ tag.name }}">{{ tag.name }} ({{ currency.currency_name }})</a>
</td>
<td data-value="{{ currency.spent }}" style="text-align: right;">
{{ formatAmountBySymbol(currency.spent, currency.currency_symbol, currency.currency_decimal_places) }}
</td>
<td data-value="{{ currency.earned }}" style="text-align: right;">
{{ formatAmountBySymbol(currency.earned, currency.currency_symbol, currency.currency_decimal_places) }}
</td>
<td data-value="{{ currency.sum }}" style="text-align: right;">
{{ formatAmountBySymbol(currency.sum, currency.currency_symbol, currency.currency_decimal_places) }}
</td>
</tr>
{% endfor %}
{% endfor %}
</tbody>
<tfoot>
{% for sum in sums %}
<tr>
<td>{{ 'sum'|_ }} ({{ sum.currency_name }})</td>
<td style="text-align: right;">
{{ formatAmountBySymbol(sum.spent_sum, sum.currency_symbol, sum.currency_decimal_places) }}
</td>
<td style="text-align: right;">
{{ formatAmountBySymbol(sum.earned_sum, sum.currency_symbol, sum.currency_decimal_places) }}
</td>
<td style="text-align: right;">
{{ formatAmountBySymbol(sum.total_sum, sum.currency_symbol, sum.currency_decimal_places) }}
</td>
</tr>
{% endfor %}
<tr>
<td colspan="4">
<p class="text-info">
<em>{{ 'tag_report_expenses_listed_once'|_ }}</em>
</p>
</td>
</tr>
</tfoot>
</table>

View File

@@ -0,0 +1,54 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th data-defaultsort="disabled">{{ 'description'|_ }}</th>
<th data-defaultsign="month">{{ 'date'|_ }}</th>
<th data-defaultsign="az">{{ 'account'|_ }}</th>
<th data-defaultsign="az">{{ 'tag'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'amount'|_ }}</th>
</tr>
</thead>
<tbody>
{% for row in result %}
{% if loop.index > listLength %}
<tr class="overListLength">
{% else %}
<tr>
{% endif %}
<td data-sortable="false">
<a href="{{ route('transactions.show', row.transaction_group_id) }}">
{{ row.description }}
</a>
</td>
<td data-value="{{ row.date_sort }}">
{{ row.date }}
</td>
<td data-sortable="false">
<a href="{{ route('accounts.show', row.destination_account_id) }}">
{{ row.destination_account_name }}
</a>
</td>
<td data-sortable="false">
<a href="{{ route('tags.show', row.tag_id) }}">
{{ row.tag_name }}
</a>
</td>
<td data-value="{{ row.amount }}" style="text-align: right;">
{{ formatAmountBySymbol(row.amount, row.currency_symbol, row.currency_decimal_places) }}
</td>
</tr>
{% endfor %}
</tbody>
<tfoot>
{% if result|length > listLength %}
<tr>
<td colspan="5" class="active">
<a href="#" class="listLengthTrigger">{{ trans('firefly.show_full_list',{number:incomeTopLength}) }}</a>
</td>
</tr>
{% endif %}
</tfoot>
</table>

View File

@@ -0,0 +1,54 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th data-defaultsort="disabled">{{ 'description'|_ }}</th>
<th data-defaultsign="month">{{ 'date'|_ }}</th>
<th data-defaultsign="az">{{ 'account'|_ }}</th>
<th data-defaultsign="az">{{ 'tag'|_ }}</th>
<th data-defaultsign="_19" style="text-align: right;">{{ 'amount'|_ }}</th>
</tr>
</thead>
<tbody>
{% for row in result %}
{% if loop.index > listLength %}
<tr class="overListLength">
{% else %}
<tr>
{% endif %}
<td data-sortable="false">
<a href="{{ route('transactions.show', row.transaction_group_id) }}">
{{ row.description }}
</a>
</td>
<td data-value="{{ row.date_sort }}">
{{ row.date }}
</td>
<td data-sortable="false">
<a href="{{ route('accounts.show', row.source_account_id) }}">
{{ row.source_account_name }}
</a>
</td>
<td data-sortable="false">
<a href="{{ route('tags.show', row.tag_id) }}">
{{ row.tag_name }}
</a>
</td>
<td data-value="{{ row.amount }}" style="text-align: right;">
{{ formatAmountBySymbol(row.amount, row.currency_symbol, row.currency_decimal_places) }}
</td>
</tr>
{% endfor %}
</tbody>
<tfoot>
{% if result|length > listLength %}
<tr>
<td colspan="5" class="active">
<a href="#" class="listLengthTrigger">{{ trans('firefly.show_full_list',{number:incomeTopLength}) }}</a>
</td>
</tr>
{% endif %}
</tfoot>
</table>