mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-02-25 18:45:27 -06:00
Fixed reports [skip ci]
This commit is contained in:
parent
81d9d4dbc7
commit
73d4a10351
@ -47,50 +47,51 @@ class ReportController extends Controller
|
||||
*/
|
||||
public function budget($year = '2014', $month = '1')
|
||||
{
|
||||
try {
|
||||
new Carbon($year . '-' . $month . '-01');
|
||||
} catch (Exception $e) {
|
||||
return view('error')->with('message', 'Invalid date');
|
||||
}
|
||||
$date = new Carbon($year . '-' . $month . '-01');
|
||||
$start = clone $date;
|
||||
$date = new Carbon($year . '-' . $month . '-01');
|
||||
$subTitle = 'Budget report for ' . $date->format('F Y');
|
||||
$subTitleIcon = 'fa-calendar';
|
||||
$start = clone $date;
|
||||
|
||||
|
||||
$start->startOfMonth();
|
||||
$end = clone $date;
|
||||
$end->endOfMonth();
|
||||
$start->subDay();
|
||||
|
||||
// should show shared reports?
|
||||
/** @var Preference $pref */
|
||||
$pref = Preferences::get('showSharedReports', false);
|
||||
$showSharedReports = $pref->data;
|
||||
$accountAmounts = []; // array with sums of spent amounts on each account.
|
||||
$accounts = $this->query->getAllAccounts($start, $end, $showSharedReports); // all accounts and some data.
|
||||
|
||||
foreach ($accounts as $account) {
|
||||
|
||||
$dayEarly = clone $date;
|
||||
$subTitle = 'Budget report for ' . $date->format('F Y');
|
||||
$subTitleIcon = 'fa-calendar';
|
||||
$dayEarly = $dayEarly->subDay();
|
||||
$accounts = $this->query->getAllAccounts($start, $end, $showSharedReports);
|
||||
$start->addDay();
|
||||
$budgets = $this->query->getBudgetSummary($account, $start, $end);// get budget summary for this account:
|
||||
$balancedAmount = $this->query->balancedTransactionsSum($account, $start, $end);
|
||||
$accountAmounts[$account->id] = $balancedAmount;
|
||||
// balance out the transactions (see transaction groups & tags) ^^
|
||||
|
||||
$accounts->each(
|
||||
function (Account $account) use ($start, $end) {
|
||||
$budgets = $this->query->getBudgetSummary($account, $start, $end);
|
||||
$balancedAmount = $this->query->balancedTransactionsSum($account, $start, $end);
|
||||
$array = [];
|
||||
$hide = true;
|
||||
foreach ($budgets as $budget) {
|
||||
$id = intval($budget->id);
|
||||
$data = $budget->toArray();
|
||||
$array[$id] = $data;
|
||||
if (floatval($data['queryAmount']) != 0) {
|
||||
$hide = false;
|
||||
}
|
||||
// array with budget information for each account:
|
||||
$array = [];
|
||||
// should always hide account
|
||||
$hide = true;
|
||||
// loop all budgets
|
||||
foreach ($budgets as $budget) {
|
||||
$id = intval($budget->id);
|
||||
$data = $budget->toArray();
|
||||
$array[$id] = $data;
|
||||
|
||||
// no longer hide account if any budget has money in it.
|
||||
if (floatval($data['queryAmount']) != 0) {
|
||||
$hide = false;
|
||||
}
|
||||
$account->hide = $hide;
|
||||
$account->budgetInformation = $array;
|
||||
$account->balancedAmount = $balancedAmount;
|
||||
|
||||
$accountAmounts[$account->id] += $data['queryAmount'];
|
||||
}
|
||||
);
|
||||
$account->hide = $hide;
|
||||
$account->budgetInformation = $array;
|
||||
$account->balancedAmount = $balancedAmount;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Start getBudgetsForMonth DONE
|
||||
@ -101,7 +102,7 @@ class ReportController extends Controller
|
||||
* End getBudgetsForMonth DONE
|
||||
*/
|
||||
|
||||
return view('reports.budget', compact('subTitle', 'year', 'month', 'subTitleIcon', 'date', 'accounts', 'budgets', 'dayEarly'));
|
||||
return view('reports.budget', compact('subTitle', 'accountAmounts', 'year', 'month', 'subTitleIcon', 'date', 'accounts', 'budgets'));
|
||||
|
||||
}
|
||||
|
||||
|
159
resources/twig/reports/budget.twig
Normal file
159
resources/twig/reports/budget.twig
Normal file
@ -0,0 +1,159 @@
|
||||
{% extends "./layout/default.twig" %}
|
||||
{% block content %}
|
||||
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName, date) }}
|
||||
<div class="row">
|
||||
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
|
||||
<p>
|
||||
<a href="#" class="btn btn-default" id="includeShared" style="display:none;">
|
||||
<i class="state-icon glyphicon glyphicon-unchecked"></i>
|
||||
Include shared asset accounts</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-6 col-md-6 col-sm-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-fw fa-credit-card"></i>
|
||||
Accounts
|
||||
</div>
|
||||
<table class="table table-bordered table-striped">
|
||||
<tr>
|
||||
<th>Account</th>
|
||||
<th>Start of month</th>
|
||||
<th>Current balance</th>
|
||||
<th>Spent</th>
|
||||
<th>Earned</th>
|
||||
</tr>
|
||||
|
||||
{% for account in accounts %}
|
||||
<tr>
|
||||
<td><a href="{{route('accounts.show',account.id)}}">{{ account.name }}</a></td>
|
||||
<td>{{ account.startBalance|formatAmount }}</td>
|
||||
<td>{{ account.endBalance|formatAmount }}</td>
|
||||
<td>
|
||||
{% if account.startBalance - account.endBalance > 0 %}
|
||||
<span class="text-danger">{{ (account.startBalance - account.endBalance)|formatAmountPlain }}</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{% if account.startBalance - account.endBalance < 0 %}
|
||||
<span class="text-success">{{ ((account.startBalance - account.endBalance)*-1)|formatAmountPlain }}</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-12 col-md-12 col-sm-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-tasks fa-fw"></i>
|
||||
Budgets
|
||||
</div>
|
||||
<table class="table table-bordered table-striped">
|
||||
<tr>
|
||||
<th colspan="2">Budgets</th>
|
||||
{% for account in accounts %}
|
||||
{% if not account.hide %}
|
||||
<th><a href="{{route('accounts.show',account.id)}}">{{ account.name }}</a></th>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
<th colspan="2">
|
||||
Left in budget
|
||||
</th>
|
||||
</tr>
|
||||
{% for id,budget in budgets %}
|
||||
<tr>
|
||||
<td>{{ budget.name }}</td>
|
||||
<td>{{ budget.queryAmount|formatAmount }}</td>
|
||||
{% set spent = 0 %}
|
||||
{% for account in accounts %}
|
||||
{% if not account.hide %}
|
||||
{% if account.budgetInformation[id] %}
|
||||
<td>
|
||||
{% if id == 0 %}
|
||||
<a href="{{route('reports.no-budget',[account, year, month])}}" class="openModal">
|
||||
{{ account.budgetInformation[id].queryAmount|formatAmount }}
|
||||
</a>
|
||||
{% else %}
|
||||
{{ account.budgetInformation[id].queryAmount|formatAmount }}
|
||||
{% endif %}
|
||||
</td>
|
||||
{% set spent = spent + account.budgetInformation[id].queryAmount %}
|
||||
{% else %}
|
||||
<td>{{ 0|formatAmount }}</td>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
<td>{{ (budget.queryAmount + budget.spent)|formatAmount }}</td>
|
||||
<td>{{ (budget.queryAmount + spent)|formatAmount }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
<tr>
|
||||
<td colspan="2">Balanced by transfers</td>
|
||||
{% for account in accounts %}
|
||||
{% if not account.hide %}
|
||||
<td>
|
||||
<a href="{{route('reports.balanced-transfers',[account, year, month])}}" class="openModal">{{ account.balancedAmount|formatAmount }}</a>
|
||||
</td>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
<td colspan="2"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2">Left unbalanced</td>
|
||||
{% for account in accounts %}
|
||||
|
||||
{% if not account.hide %}
|
||||
{% if account.budgetInformation[0] %}
|
||||
<td>
|
||||
{% if account.budgetInformation[0].queryAmount + account.balancedAmount != 0.0 %}
|
||||
<a href="{{route('reports.left-unbalanced',[account, year, month])}}" class="openModal">{{ (account.budgetInformation[0].queryAmount + account.balancedAmount)|formatAmount }}</a>
|
||||
{% else %}
|
||||
{{ (account.budgetInformation[0].queryAmount + account.balancedAmount)|formatAmount }}
|
||||
{% endif %}
|
||||
</td>
|
||||
{% else %}
|
||||
<td>{{ 0|formatAmount }}</td>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
<td colspan="2"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2"><em>Sum</em></td>
|
||||
{% for account in accounts %}
|
||||
{% if not account.hide %}
|
||||
<td>{{ accountAmounts[account.id]|formatAmount }}</td>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
<td colspan="2"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2">Expected balance</td>
|
||||
{% for account in accounts %}
|
||||
{% if not account.hide %}
|
||||
<td>{{ (account.startBalance + accountAmounts[account.id])|formatAmount }}</td>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
<td colspan="2"> </td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- modal to show various budget information -->
|
||||
<div class="modal fade" id="budgetModal">
|
||||
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
{% block scripts %}
|
||||
<script type="text/javascript" src="js/reports.js"></script>
|
||||
{% endblock %}
|
74
resources/twig/reports/index.twig
Normal file
74
resources/twig/reports/index.twig
Normal file
@ -0,0 +1,74 @@
|
||||
{% extends "./layout/default.twig" %}
|
||||
{% block content %}
|
||||
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName) }}
|
||||
<div class="row">
|
||||
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
|
||||
<p>
|
||||
<a href="#" class="btn btn-default" id="includeShared" style="display:none;">
|
||||
<i class="state-icon glyphicon glyphicon-unchecked"></i>
|
||||
Include shared asset accounts</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-4 col-md-4 col-sm-4">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-calendar fa-fw"></i>
|
||||
Yearly reports
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<ul>
|
||||
{% for year in years %}
|
||||
<li><a href="{{route('reports.year',year)}}">{{ year }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-4 col-md-4 col-sm-4">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-calendar fa-fw"></i>
|
||||
Monthly reports
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
|
||||
{% for year, entries in months %}
|
||||
<h5>{{ year }}</h5>
|
||||
<ul>
|
||||
{% for month in entries %}
|
||||
<li><a href="{{route('reports.month',[month.year, month.month])}}">{{ month.formatted}}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endfor %}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-4 col-md-4 col-sm-4">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-calendar fa-fw"></i>
|
||||
Budget reports
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{% for year, entries in months %}
|
||||
<h5>{{ year }}</h5>
|
||||
<ul>
|
||||
{% for month in entries %}
|
||||
<li><a href="{{route('reports.budget',[month.year,month.month])}}">{{ month.formatted}}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block scripts %}
|
||||
<script type="text/javascript" src="js/reports.js"></script>
|
||||
{% endblock %}
|
257
resources/twig/reports/month.twig
Normal file
257
resources/twig/reports/month.twig
Normal file
@ -0,0 +1,257 @@
|
||||
{% extends "./layout/default.twig" %}
|
||||
{% block content %}
|
||||
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName, date) }}
|
||||
<div class="row">
|
||||
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
|
||||
<p>
|
||||
<a href="#" class="btn btn-default" id="includeShared" style="display:none;">
|
||||
<i class="state-icon glyphicon glyphicon-unchecked"></i> Include shared asset accounts</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-5 col-md-5 col-sm-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-long-arrow-right fa-fw"></i>
|
||||
Income
|
||||
</div>
|
||||
<table class="table table-bordered">
|
||||
{% set sum = 0 %}
|
||||
{% for entry in income %}
|
||||
{% set sum = sum + entry.queryAmount %}
|
||||
<tr>
|
||||
<td>
|
||||
<a href="{{ route('transactions.show',entry.id) }}" title="{{ entry.description }}">{{ entry.description }}</a>
|
||||
</td>
|
||||
<td>
|
||||
{% if entry.type == 'Withdrawal' %}
|
||||
<span class="text-danger">{{entry.queryAmount|formatAmountPlain}}</span>
|
||||
{% endif %}
|
||||
{% if entry.type == 'Deposit' %}
|
||||
<span class="text-success">{{entry.queryAmount|formatAmountPlain}}</span>
|
||||
{% endif %}
|
||||
{% if entry.type == 'Transfer' %}
|
||||
<span class="text-info">{{entry.queryAmount|formatAmountPlain}}</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{{entry.date.format('j F Y')}}
|
||||
</td>
|
||||
<td>
|
||||
<a href="{{route('accounts.show',entry.account_id)}}">{{ entry.name }}</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% if displaySum %}
|
||||
<tr>
|
||||
<td><em>Sum</em></td>
|
||||
<td colspan="3">{{ sum|formatAmount }}</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-4 col-md-4 col-sm-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-long-arrow-left fa-fw"></i>
|
||||
Expenses (top 10)
|
||||
</div>
|
||||
<table class="table table-bordered">
|
||||
{% set sum = 0 %}
|
||||
|
||||
{% for id,expense in expenses %}
|
||||
{% set sum = sum + expense.queryAmount %}
|
||||
<tr>
|
||||
{% if id > 0 %}
|
||||
<td><a href="{{route('accounts.show',id)}}">{{ expense.name }}</a></td>
|
||||
{% else %}
|
||||
<td><em>{{ expense.name }}</em></td>
|
||||
{% endif %}
|
||||
<td><span class="text-danger">{{ expense.queryAmount|formatAmountPlain }}</span></td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
<tr>
|
||||
<td><em>Sum</em></td>
|
||||
<td><span class="text-danger">{{ sum|formatAmountPlain }}</span></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-3 col-md-4 col-sm-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-exchange fa-fw"></i>
|
||||
Sums
|
||||
</div>
|
||||
{% set totalIn = 0 %}
|
||||
{% for entry in income %}
|
||||
{% set totalIn = totalIn + entry.queryAmount %}
|
||||
{% endfor %}
|
||||
<table class="table table-bordered">
|
||||
<tr>
|
||||
<td>In</td>
|
||||
<td>{{ totalIn|formatAmount }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Out</td>
|
||||
<td><span class="text-danger">{{ sum|formatAmountPlain }}</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Difference</td>
|
||||
<td>{{ (totalIn - sum)|formatAmount }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-6 col-md-6 col-sm-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-tasks fa-fw"></i>
|
||||
Budgets
|
||||
</div>
|
||||
<table class="table table-bordered">
|
||||
<tr>
|
||||
<th>Budget</th>
|
||||
<th>Envelope</th>
|
||||
<th>Spent</th>
|
||||
<th>Left</th>
|
||||
</tr>
|
||||
{% set sumSpent = 0 %}
|
||||
{% set sumEnvelope = 0 %}
|
||||
{% set sumLeft = 0 %}
|
||||
{% for id,budget in budgets %}
|
||||
{% set sumSpent = sumSpent + budget.spent %}
|
||||
{% set sumEnvelope = sumEnvelope + budget.queryAmount %}
|
||||
{% set sumLeft = sumLeft + budget.queryAmount + budget.spent %}
|
||||
<!-- only display when relevant: -->
|
||||
{% if budget.queryAmount != 0 or budget.spent != 0 %}
|
||||
<tr>
|
||||
<td>
|
||||
{% if id > 0 %}
|
||||
<a href="{{route('budgets.show',id)}}">{{ budget.name }}</a>
|
||||
{% else %}
|
||||
<em>{{ budget.name }}</em>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>{{ budget.queryAmount|formatAmount }}</td>
|
||||
<td><span class="text-danger">{{ (budget.spent*-1)|formatAmountPlain }}</span></td>
|
||||
<td>{{ (budget.queryAmount + budget.spent)|formatAmount }}</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
<tr>
|
||||
<td><em>Sum</em></td>
|
||||
<td>{{ sumEnvelope|formatAmount }}</td>
|
||||
<td>{{ sumSpent|formatAmount }}</td>
|
||||
<td>{{ sumLeft|formatAmount }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6 col-md-6 col-sm-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-bar-chart fa-fw"></i>
|
||||
Categories
|
||||
</div>
|
||||
<table class="table table-bordered">
|
||||
<tr>
|
||||
<th>Category</th>
|
||||
<th>Spent</th>
|
||||
</tr>
|
||||
{% set sum = 0 %}
|
||||
{% for id,category in categories %}
|
||||
{% set sum = sum + category.queryAmount %}
|
||||
<tr>
|
||||
<td>
|
||||
{% if id > 0 %}
|
||||
<a href="{{route('categories.show',id)}}">{{ category.name }}</a>
|
||||
{% else %}
|
||||
<em>{{ category.name }}</em>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td><span class="text-danger">{{ (category.queryAmount * -1)|formatAmountPlain }}</span></td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
<tr>
|
||||
<td><em>Sum</em></td>
|
||||
<td><span class="text-danger">{{ (sum * -1)|formatAmountPlain }}</span></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-12 col-md-12 col-sm-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-credit-card fa-fw"></i>
|
||||
Accounts
|
||||
</div>
|
||||
<table class="table table-bordered">
|
||||
{% set sumStart = 0 %}
|
||||
{% set sumEnd = 0 %}
|
||||
{% set sumDiff = 0 %}
|
||||
{% for id,account in accounts %}
|
||||
|
||||
{% set sumStart = sumStart + account.startBalance %}
|
||||
{% set sumEnd = sumEnd + account.endBalance %}
|
||||
{% set sumDiff = sumDiff + account.difference %}
|
||||
<tr>
|
||||
<td><a href="{{route('accounts.show',id)}}">{{ account.name }}</a></td>
|
||||
<td>{{ account.startBalance|formatAmount }}</td>
|
||||
<td>{{ account.endBalance|formatAmount }}</td>
|
||||
<td>{{ account.difference|formatAmount }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
<tr>
|
||||
<td><em>Sum</em></td>
|
||||
<td>{{ sumStart|formatAmount }}</td>
|
||||
<td>{{ sumEnd|formatAmount }}</td>
|
||||
<td>{{ sumDiff|formatAmount }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-12 col-md-12 col-sm-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-sort-amount-asc fa-fw"></i>
|
||||
Piggy banks
|
||||
</div>
|
||||
<div class="panel-body">Body</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-12 col-md-12 col-sm-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-calendar-o fa-fw"></i>
|
||||
Bills
|
||||
</div>
|
||||
<div class="panel-body">Body</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-12 col-md-12 col-sm-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-fw fa-folder-o"></i>
|
||||
Outside of budgets
|
||||
</div>
|
||||
<div class="panel-body">Body</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
{% block scripts %}
|
||||
<script type="text/javascript" src="js/reports.js"></script>
|
||||
{% endblock %}
|
185
resources/twig/reports/year.twig
Normal file
185
resources/twig/reports/year.twig
Normal file
@ -0,0 +1,185 @@
|
||||
{% extends "./layout/default.twig" %}
|
||||
{% block content %}
|
||||
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName, date) }}
|
||||
<div class="row">
|
||||
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
|
||||
<p>
|
||||
<a href="#" class="btn btn-default" id="includeShared" style="display:none;">
|
||||
<i class="state-icon glyphicon glyphicon-unchecked"></i>
|
||||
Include shared asset accounts</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-10 col-md-8 col-sm-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-line-chart"></i>
|
||||
Income vs. expenses
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div id="income-expenses-chart"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-2 col-md-4 col-sm-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-calendar"></i>
|
||||
Income vs. expenses
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div id="income-expenses-sum-chart"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-6 col-md-6 col-sm-6">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-credit-card fa-fw"></i>
|
||||
Account balance
|
||||
</div>
|
||||
<table class="table table-bordered table-striped">
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Balance at start of year</th>
|
||||
<th>Balance at end of year</th>
|
||||
<th>Difference</th>
|
||||
</tr>
|
||||
{% set start = 0 %}
|
||||
{% set end = 0 %}
|
||||
{% set diff = 0 %}
|
||||
{% for balance in balances %}
|
||||
{% set start = start + balance.start %}
|
||||
{% set end = end + balance.end %}
|
||||
{% set diff = diff + (balance.end - balance.start) %}
|
||||
{% if not balance.hide %}
|
||||
<tr>
|
||||
<td>
|
||||
<a href="{{ route('accounts.show', balance.account.id) }}">{{ balance.account.name }}</a>
|
||||
{% if balance.shared %}
|
||||
<small><em>shared</em></small>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>{{ balance.start|formatAmount }}</td>
|
||||
<td>{{ balance.end|formatAmount }}</td>
|
||||
<td>{{ (balance.end - balance.start)|formatAmount }}</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
<tr>
|
||||
<td><em>Sum of sums</em></td>
|
||||
<td>{{ start|formatAmount }}</td>
|
||||
<td>{{ end|formatAmount }}</td>
|
||||
<td>{{ diff|formatAmount }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-fw fa-exchange" title="Transfer"></i>
|
||||
Income vs. expense
|
||||
</div>
|
||||
{% set incomeSum = 0 %}
|
||||
{% set expenseSum = 0 %}
|
||||
{% for income in groupedIncomes %}
|
||||
{% set incomeSum = incomeSum + (income.queryAmount*-1) %}
|
||||
{% endfor %}
|
||||
|
||||
{% for expense in groupedExpenses %}
|
||||
{% set expenseSum = expenseSum + expense.queryAmount %}
|
||||
{% endfor %}
|
||||
|
||||
<table class="table table-bordered table-striped">
|
||||
<tr>
|
||||
<td>In</td>
|
||||
<td>{{ incomeSum|formatAmount }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Out</td>
|
||||
<td>{{ (expenseSum*-1)|formatAmount }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Difference</td>
|
||||
<td>{{ (incomeSum - expenseSum)|formatAmount }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-3 col-md-3 col-sm-3">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-long-arrow-right fa-fw"></i>
|
||||
Income
|
||||
</div>
|
||||
<table class="table">
|
||||
{% set sum = 0 %}
|
||||
{% for income in groupedIncomes %}
|
||||
{% set sum = sum + (income.queryAmount * -1) %}
|
||||
<tr>
|
||||
<td><a href="{{route('accounts.show',income.account_id)}}">{{ income.name }}</a></td>
|
||||
<td>{{ (income.queryAmount * -1)|formatAmount }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
<tr>
|
||||
<td><em>Sum</em></td>
|
||||
<td>{{ sum|formatAmount }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-3 col-md-3 col-sm-3">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-long-arrow-left fa-fw"></i>
|
||||
Expenses
|
||||
</div>
|
||||
<table class="table">
|
||||
{% set sum =0 %}
|
||||
{% for expense in groupedExpenses %}
|
||||
<tr>
|
||||
<td><a href="{{route('accounts.show',expense.id)}}">{{ expense.name }}</a></td>
|
||||
<td>{{ (expense.queryAmount*-1)|formatAmount }}</td>
|
||||
</tr>
|
||||
{% set sum = sum + (expense.queryAmount * -1) %}
|
||||
{% endfor %}
|
||||
<tr>
|
||||
<td><em>Sum</em></td>
|
||||
<td>{{ sum|formatAmount }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-12 col-md-12 col-sm-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-tasks fa-fw"></i>
|
||||
Budgets
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div id="budgets"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
{% block scripts %}
|
||||
<!-- load the libraries and scripts necessary for Google Charts: -->
|
||||
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
|
||||
<script type="text/javascript" src="js/gcharts.options.js"></script>
|
||||
<script type="text/javascript" src="js/gcharts.js"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
var year = '{{year}}';
|
||||
</script>
|
||||
|
||||
<script type="text/javascript" src="js/reports.js"></script>
|
||||
|
||||
{% endblock %}
|
Loading…
Reference in New Issue
Block a user