Moved views.

This commit is contained in:
James Cole
2016-01-08 13:35:27 +01:00
parent feef6a1756
commit 53677e3c64
116 changed files with 1 additions and 1 deletions

View File

@@ -0,0 +1,59 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName, what) }}
{% endblock %}
{% block content %}
<form action="{{ route('accounts.store') }}" method="post" id="store" class="form-horizontal">
<input type="hidden" name="_token" value="{{ csrf_token() }}"/>
<input type="hidden" name="what" value="{{ what }}"/>
<div class="row">
<div class="col-lg-6 col-md-6 col-sm-12">
<div class="box box-primary">
<div class="box-header with-border">
<h3 class="box-title">{{ 'mandatoryFields'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.text('name') }}
</div>
</div>
</div>
<div class="col-lg-6 col-md-6 col-sm-12">
{% if what == 'asset' %}
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'optionalFields'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.text('iban') }}
{{ ExpandedForm.balance('openingBalance') }}
{{ ExpandedForm.date('openingBalanceDate', phpdate('Y-m-d')) }}
{{ ExpandedForm.select('accountRole', Config.get('firefly.accountRoles'),null,{'helpText' : 'asset_account_role_help'|_}) }}
{{ ExpandedForm.balance('virtualBalance') }}
</div>
</div>
{% endif %}
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'options'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.optionsList('create','account') }}
</div>
<div class="box-footer">
<button type="submit" class="btn pull-right btn-success">
{{ ('store_new_' ~ what ~ '_account')|_ }}
</button>
</div>
</div>
</div>
</div>
</form>
{% endblock %}

View File

@@ -0,0 +1,57 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute().getName(), account) }}
{% endblock %}
{% block content %}
{{ Form.open({'class' : 'form-horizontal','id' : 'destroy','url' : route('accounts.destroy',account.id)}) }}
<div class="row">
<div class="col-lg-6 col-lg-offset-3 col-md-12 col-sm-12">
<div class="box box-danger">
<div class="box-header with-border">
<h3 class="box-title">{{ trans('form.delete_account', {'name': account.name}) }}</h3>
</div>
<div class="box-body">
<p class="text-danger">
{{ trans('form.permDeleteWarning') }}
</p>
<p>
{{ trans('form.account_areYouSure', {'name': account.name}) }}
</p>
{% if account.transactions|length > 0 or account.piggyBanks|length > 0 %}
<p>
{% if account.transactions|length > 0 %}
{{ Lang.choice('form.also_delete_transactions', account.transactions|length, {count: account.transactions|length}) }}
{% endif %}<br/>
{% if account.piggyBanks|length > 0 %}
{{ Lang.choice('form.also_delete_piggyBanks', account.piggyBanks|length, {count: account.piggyBanks|length}) }}
{% endif %}
</p>
{% endif %}
{% if account.transactions|length > 0 %}
<p class="text-success">
{{ 'save_transactions_by_moving'|_ }}
</p>
<p>
{{ Form.select('move_account_before_delete', accountList, null, {class: 'form-control'}) }}
</p>
{% else %}
<input type="hidden" name="move_account_before_delete" value="0"/>
{% endif %}
</div>
<div class="box-footer">
<input type="submit" name="submit" value="{{ trans('form.deletePermanently') }}" class="btn pull-right btn-danger"/>
<a href="{{ URL.previous() }}" class="btn-default btn">{{ trans('form.cancel') }}</a>
</div>
</div>
</div>
</div>
{{ Form.close|raw }}
{% endblock %}

View File

@@ -0,0 +1,72 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute().getName(), account) }}
{% endblock %}
{% block content %}
{{ Form.model(account, {'class' : 'form-horizontal','id' : 'update','url' : route('accounts.update',account.id) } ) }}
<input type="hidden" name="id" value="{{ account.id }}"/>
<div class="row">
<div class="col-lg-6 col-md-6 col-sm-12">
<div class="box box-primary">
<div class="box-header with-border">
<h3 class="box-title">{{ 'mandatoryFields'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.text('name') }}
</div>
</div>
</div>
<div class="col-lg-6 col-md-6 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'optionalFields'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.text('iban') }}
{% if account.accounttype.type == 'Default account' or account.accounttype.type == 'Asset account' %}
{{ ExpandedForm.balance('openingBalance',null, {'currency' : openingBalance ? openingBalance.transactionCurrency : null}) }}
{{ ExpandedForm.date('openingBalanceDate') }}
{{ ExpandedForm.select('accountRole',Config.get('firefly.accountRoles')) }}
{{ ExpandedForm.balance('virtualBalance',null) }}
{% endif %}
{{ ExpandedForm.checkbox('active','1') }}
</div>
</div>
<!-- panel for credit card options -->
{% if Session.get('preFilled').accountRole == 'ccAsset' %}
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">Credit card options</h3>
</div>
<div class="box-body">
{{ ExpandedForm.select('ccType',Config.get('firefly.ccTypes')) }}
{{ ExpandedForm.date('ccMonthlyPaymentDate',null,{'helpText' : 'Select any year and any month, it will be ignored anway. Only the day of the month is relevant.'}) }}
</div>
</div>
{% endif %}
<!-- panel for options -->
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'options'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.optionsList('update','account') }}
</div>
<div class="box-footer">
<button type="submit" class="btn pull-right btn-success">
{{ ('update_' ~ what ~ '_account')|_ }}
</button>
</div>
</div>
</div>
</div>
{{ Form.close|raw }}
{% endblock %}

View File

@@ -0,0 +1,57 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName, what) }}
{% endblock %}
{% block content %}
<div class="row">
<div class="col-lg-6 col-md-8 col-sm-12 col-xs-12">
<p>
{{ ('accountExtraHelp_'~what)|_ }}
</p>
</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">{{ subTitle }}</h3>
<!-- ACTIONS MENU -->
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
<div class="btn-group">
<button class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown"><i class="fa fa-ellipsis-v"></i></button>
<ul class="dropdown-menu" role="menu">
<li><a href="{{ route('accounts.create', what) }}"><i class="fa fa-plus fa-fw"></i> {{ ('make_new_' ~ what ~ '_account')|_ }}
</a></li>
</ul>
</div>
</div>
</div>
<div class="box-body table-responsive no-padding">
{% include 'list/accounts.twig' %}
</div>
</div>
</div>
</div>
{% endblock %}
{% block styles %}
<link rel="stylesheet" href="css/bootstrap-sortable.css" type="text/css" media="all"/>
{% endblock %}
{% block scripts %}
<script type="text/javascript">
var what = '{{ what }}';
</script>
<script type="text/javascript" src="js/Chart.min.js"></script>
<script type="text/javascript" src="js/charts.js"></script>
<script type="text/javascript" src="js/bootstrap-sortable.js"></script>
<script type="text/javascript" src="js/accounts.js"></script>
{% endblock %}

View File

@@ -0,0 +1,60 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName, account) }}
{% endblock %}
{% block content %}
<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>
<!-- ACTIONS MENU -->
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
<div class="btn-group">
<button class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown"><i class="fa fa-ellipsis-v"></i></button>
<ul class="dropdown-menu" role="menu">
<li><a href="{{ route('accounts.edit', account.id) }}"><i class="fa fa-pencil fa-fw"></i> {{ 'edit'|_ }}</a></li>
<li><a href="{{ route('accounts.delete', account.id) }}"><i class="fa fa-trash fa-fw"></i> {{ 'delete'|_ }}</a></li>
</ul>
</div>
</div>
</div>
<div class="box-body">
<canvas id="overview-chart" style="width:100%;height:400px;"></canvas>
</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">{{ 'transactions'|_ }}</h3>
</div>
<div class="box-body table-responsive no-padding">
{% include 'list/journals.twig' with {sorting:true} %}
</div>
</div>
</div>
</div>
{% endblock %}
{% block scripts %}
<script type="text/javascript">
var accountID = {{ account.id }};
</script>
<script type="text/javascript" src="js/Chart.min.js"></script>
<script type="text/javascript" src="js/charts.js"></script>
<script src="js/jquery-ui.min.js" type="text/javascript"></script>
<script src="js/accounts.js" type="text/javascript"></script>
{% endblock %}

View File

@@ -0,0 +1,34 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute().getName(), attachment) }}
{% endblock %}
{% block content %}
{{ Form.open({'class' : 'form-horizontal','id' : 'destroy','url' : route('attachments.destroy',attachment.id)}) }}
<div class="row">
<div class="col-lg-6 col-lg-offset-3 col-md-12 col-sm-12">
<div class="box box-danger">
<div class="box-header with-border">
<h3 class="box-title">{{ trans('form.delete_attachment', {'name': attachment.filename}) }}</h3>
</div>
<div class="box-body">
<p class="text-danger">
{{ trans('form.permDeleteWarning') }}
</p>
<p>
{{ trans('form.attachment_areYouSure', {'name': attachment.filename}) }}
</p>
</div>
<div class="box-footer">
<input type="submit" name="submit" value="{{ trans('form.deletePermanently') }}" class="btn pull-right btn-danger"/>
<a href="{{ URL.previous() }}" class="btn-default btn">{{ trans('form.cancel') }}</a>
</div>
</div>
</div>
</div>
{{ Form.close|raw }}
{% endblock %}

View File

@@ -0,0 +1,59 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute().getName(), attachment) }}
{% endblock %}
{% block content %}
<form method="POST" action="{{ route('attachments.update', attachment.id) }}" accept-charset="UTF-8" class="form-horizontal" id="update">
<input type="hidden" name="_token" value="{{ csrf_token() }}"/>
<input type="hidden" name="id" value="{{ attachment.id }}"/>
<div class="row">
<div class="col-lg-6 col-md-6 col-sm-12">
<div class="box box-primary">
<div class="box-header with-border">
<h3 class="box-title">{{ 'mandatoryFields'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.staticText('filename',attachment.filename) }}
{{ ExpandedForm.staticText('mime',attachment.mime) }}
{{ ExpandedForm.staticText('size',attachment.size|filesize) }}
</div>
</div>
</div>
<div class="col-lg-6 col-md-6 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'optionalFields'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.text('title', attachment.title) }}
{{ ExpandedForm.textarea('description', attachment.description) }}
{{ ExpandedForm.textarea('notes', attachment.notes) }}
</div>
</div>
<!-- panel for options -->
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'options'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.optionsList('update','attachment') }}
</div>
<div class="box-footer">
<button type="submit" class="btn pull-right btn-success">
{{ ('update_attachment')|_ }}
</button>
</div>
</div>
</div>
</div>
</form>
{% endblock %}

View File

@@ -0,0 +1,51 @@
{% extends "./layout/guest.twig" %}
{% block content %}
{% if errors.has('email') %}
<div class="row">
<div class="col-lg-12">
<div class="alert alert-danger alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">{{ 'close'|_ }}</span>
</button>
<strong>Error!</strong> {{ errors.get('email')[0] }}
</div>
</div>
</div>
{% endif %}
<div class="login-box-body">
<p class="login-box-msg">Sign in to start your session</p>
<form action="{{ URL.to('/login') }}" method="post">
<input type="hidden" name="_token" value="{{ csrf_token() }}"/>
<div class="form-group has-feedback">
<input type="email" name="email" class="form-control" placeholder="Email"/>
</div>
<div class="form-group has-feedback">
<input type="password" name="password" class="form-control" placeholder="Password"/>
</div>
<div class="row">
<div class="col-xs-8">
<div class="checkbox">
<label>
<input type="checkbox" name="remember" value="1"> Remember Me
</label>
</div>
</div>
<!-- /.col -->
<div class="col-xs-4">
<button type="submit" class="btn btn-primary btn-block btn-flat">Sign In</button>
</div>
<!-- /.col -->
</div>
</form>
{% if Config.get('auth.allow_register') %}
<a href="{{ route('register') }}" class="text-center">Register a new account</a><br>
{% endif %}
<a href="{{ URL.to('/password/email') }}">I forgot my password</a>
</div>
<!-- /.login-box-body -->
{% endblock %}

View File

@@ -0,0 +1,48 @@
{% extends "./layout/guest.twig" %}
{% block content %}
{% if session.status %}
<div class="alert alert-success">
{{ session.status }}
</div>
{% endif %}
{% if errors|length > 0 %}
<div class="alert alert-danger">
<strong>Whoops!</strong> There were some problems with your input.<br><br>
<ul>
{% for error in errors.all %}
<li>{{ error }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
<div class="login-box-body">
<p class="login-box-msg">Reset your password</p>
<form role="form" method="POST" action="{{ URL.to('/password/email') }}">
<input type="hidden" name="_token" value="{{ csrf_token() }}"/>
<div class="form-group has-feedback">
<input type="email" class="form-control" name="email" placeholder="Email"/>
</div>
<div class="row">
<!-- /.col -->
<div class="col-xs-12">
<button type="submit" class="btn btn-primary btn-flat pull-right">Reset</button>
</div>
<!-- /.col -->
</div>
</form>
<a href="{{ URL.to('/auth/login') }}">I want to login</a><br>
<a href="{{ URL.to('/password/email') }}">I forgot my password</a>
</div><!-- /.login-box-body -->
{% endblock %}

View File

@@ -0,0 +1,53 @@
{% extends "./layout/guest.twig" %}
{% block content %}
{% if errors|length > 0 %}
<div class="alert alert-danger">
<strong>Whoops!</strong> There were some problems with your input.<br><br>
<ul>
{% for error in errors.all %}
<li>{{ error }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
<div class="register-box-body">
<p class="login-box-msg">Register a new account</p>
{% if host == 'geld.nder.be' or host == 'firefly.app' %}
<p class="text-info login-box-msg">Please note that an account on this site will only
work for one (1) month.</p>
{% endif %}
<form role="form" id="register" method="POST" action="{{ URL.to('/auth/register') }}">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<div class="form-group has-feedback">
<input type="email" name="email" class="form-control" placeholder="Email"/>
{% if host == 'geld.nder.be' or host == 'firefly.app' %}
<p class="help-block">You will receive an email from Firefly III. If your email address
is incorrect, your account may not work.</p>
{% endif %}
</div>
<div class="form-group has-feedback">
<input type="password" class="form-control" placeholder="Password" name="password"/>
</div>
<div class="form-group has-feedback">
<input type="password" class="form-control" placeholder="Retype password" name="password_confirmation"/>
</div>
<div class="row">
<div class="col-xs-12">
<button type="submit" class="btn btn-primary pull-right btn-flat">Register</button>
</div>
<!-- /.col -->
</div>
</form>
<a href="{{ URL.to('/auth/login') }}">I want to login</a><br>
<a href="{{ URL.to('/password/email') }}">I forgot my password</a>
</div><!-- /.form-box -->
{% endblock %}

View File

@@ -0,0 +1,53 @@
{% extends "./layout/guest.twig" %}
{% block content %}
{% if errors|length > 0 %}
<div class="alert alert-danger">
<strong>Whoops!</strong> There were some problems with your input.<br><br>
<ul>
{% for error in errors.all %}
<li>{{ error }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
<div class="register-box-body">
<p class="login-box-msg">Reset your password</p>
<form method="POST" action="/password/reset">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<input type="hidden" name="token" value="{{ token }}">
<div class="form-group has-feedback">
<input type="email" name="email" class="form-control" value="{{ old('email') }}" placeholder="Email"/>
</div>
<div class="form-group has-feedback">
<input type="password" class="form-control" placeholder="Password" name="password"/>
</div>
<div class="form-group has-feedback">
<input type="password" class="form-control" placeholder="Password (again)" name="password_confirmation"/>
</div>
<div class="row">
<div class="col-xs-12">
<button type="submit" class="btn btn-primary pull-right btn-flat">Reset Password</button>
</div>
<!-- /.col -->
</div>
</form>
<a href="{{ URL.to('/auth/login') }}">I want to login</a><br>
{% if Config.get('auth.allow_register') %}
<a href="{{ route('register') }}" class="text-center">Register a new account</a><br>
{% endif %}
</div><!-- /.form-box -->
{% endblock %}

View File

@@ -0,0 +1,68 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName, piggyBank) }}
{% endblock %}
{% block content %}
{{ Form.open({'class' : 'form-horizontal','id' : 'store','url' : route('bills.store')}) }}
<div class="row">
<div class="col-lg-6 col-md-12 col-sm-6">
<div class="box box-primary">
<div class="box-header with-border">
<h3 class="box-title">{{ 'mandatoryFields'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.text('name') }}
{{ ExpandedForm.tags('match') }}
{{ ExpandedForm.amount('amount_min') }}
{{ ExpandedForm.amount('amount_max') }}
{{ ExpandedForm.date('date',phpdate('Y-m-d')) }}
{{ ExpandedForm.select('repeat_freq',periods,'monthly') }}
</div>
</div>
</div>
<div class="col-lg-6 col-md-12 col-sm-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'optionalFields'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.integer('skip',0) }}
{{ ExpandedForm.checkbox('automatch',1,true) }}
{{ ExpandedForm.checkbox('active',1,true) }}
</div>
</div>
<!-- panel for options -->
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'options'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.optionsList('create','bill') }}
</div>
<div class="box-footer">
<button type="submit" class="btn pull-right btn-success">
{{ 'store_new_bill'|_ }}
</button>
</div>
</div>
</div>
</div>
{{ Form.close|raw }}
{% endblock %}
{% block styles %}
<link href="css/bootstrap-tagsinput.css" type="text/css" rel="stylesheet" media="all">
{% endblock %}
{% block scripts %}
<script type="text/javascript" src="js/bootstrap-tagsinput.min.js"></script>
{% endblock %}

View File

@@ -0,0 +1,39 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName, bill) }}
{% endblock %}
{% block content %}
{{ Form.open({'class' : 'form-horizontal','id' : 'destroy','url' : route('bills.destroy',bill.id)}) }}
<div class="row">
<div class="col-lg-6 col-lg-offset-3 col-md-12 col-sm-12">
<div class="box box-danger">
<div class="box-header with-border">
<h3 class="box-title">{{ trans('form.delete_bill', {'name': bill.name}) }}</h3>
</div>
<div class="box-body">
<p class="text-danger">
{{ trans('form.permDeleteWarning') }}
</p>
<p>
{{ trans('form.bill_areYouSure', {'name': bill.name}) }}
</p>
<p>
{% if bill.transactionjournals|length > 0 %}
{{ Lang.choice('form.bill_keep_transactions', bill.transactionjournals|length,{count: bill.transactionjournals|length}) }}
{% endif %}
</p>
</div>
<div class="box-footer">
<input type="submit" name="submit" value="{{ trans('form.deletePermanently') }}" class="btn btn-danger pull-right"/>
<a href="{{ URL.previous() }}" class="btn-default btn">{{ trans('form.cancel') }}</a>
</div>
</div>
</div>
</div>
{{ Form.close|raw }}
{% endblock %}

View File

@@ -0,0 +1,66 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName, bill) }}
{% endblock %}
{% block content %}
{{ Form.model(bill, {'class' : 'form-horizontal','id' : 'update','url' : route('bills.update', bill.id)}) }}
<input type="hidden" name="id" value="{{ bill.id }}"/>
<div class="row">
<div class="col-lg-6 col-md-12 col-sm-6">
<div class="box box-primary">
<div class="box-header with-border">
<h3 class="box-title">{{ 'mandatoryFields'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.text('name') }}
{{ ExpandedForm.tags('match') }}
{{ ExpandedForm.amount('amount_min') }}
{{ ExpandedForm.amount('amount_max') }}
{{ ExpandedForm.date('date',bill.date.format('Y-m-d')) }}
{{ ExpandedForm.select('repeat_freq',periods) }}
</div>
</div>
</div>
<div class="col-lg-6 col-md-12 col-sm-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'optionalFields'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.integer('skip') }}
{{ ExpandedForm.checkbox('automatch',1) }}
{{ ExpandedForm.checkbox('active',1) }}
</div>
</div>
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'options'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.optionsList('update','bill') }}
</div>
<div class="box-footer">
<button type="submit" class="btn pull-right btn-success">
{{ 'update_bill'|_ }}
</button>
</div>
</div>
</div>
</div>
{{ Form.close|raw }}
{% endblock %}
{% block styles %}
<link href="css/bootstrap-tagsinput.css" type="text/css" rel="stylesheet" media="all">
{% endblock %}
{% block scripts %}
<script type="text/javascript" src="js/bootstrap-tagsinput.min.js"></script>
{% endblock %}

View File

@@ -0,0 +1,38 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName) }}
{% endblock %}
{% block content %}
<div class="row">
<div class="col-lg-12 col-sm-12 col-md-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ title }}</h3>
<!-- ACTIONS MENU -->
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
<div class="btn-group">
<button class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown"><i class="fa fa-ellipsis-v"></i></button>
<ul class="dropdown-menu" role="menu">
<li><a href="{{ route('bills.create') }}"><i class="fa fa-plus fa-fw"></i> New bill</a></li>
</ul>
</div>
</div>
</div>
<div class="box-body table-responsive no-padding">
{% include 'list/bills.twig' %}
</div>
</div>
</div>
</div>
{% endblock %}
{% block styles %}
<link rel="stylesheet" href="css/bootstrap-sortable.css" type="text/css" media="all"/>
{% endblock %}
{% block scripts %}
<script type="text/javascript" src="js/bootstrap-sortable.js"></script>
{% endblock %}

View File

@@ -0,0 +1,116 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName, bill) }}
{% endblock %}
{% block content %}
<div class="row">
<div class="col-lg-6 col-sm-12 col-md-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ bill.name }}</h3>
{% if bill.active %}
<i class="fa fa-check fa-fw" title="Active"></i>
{% else %}
<i class="fa fa-times fa-fw" title="Inactive"></i>
{% endif %}
{% if bill.automatch %}
<i class="fa fa-check fa-fw" title="Automatically matched by Firefly"></i>
{% else %}
<i class="fa fa-times fa-fw" title="Not automatically matched by Firefly"></i>
{% endif %}
<!-- ACTIONS MENU -->
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
<div class="btn-group">
<button class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown"><i class="fa fa-ellipsis-v"></i></button>
<ul class="dropdown-menu" role="menu">
<li><a href="{{ route('bills.edit',bill.id) }}"><i class="fa fa-fw fa-pencil"></i> edit</a></li>
<li><a href="{{ route('bills.delete',bill.id) }}"><i class="fa fa-fw fa-trash-o"></i> delete</a></li>
</ul>
</div>
</div>
</div>
<div class="box-body">
<table class="table">
<tr>
<td colspan="2">
Matching on
{% for word in bill.match|split(',') %}
<span class="label label-info">{{ word }}</span>
{% endfor %}
between {{ bill.amount_min|formatAmount }} and {{ bill.amount_max|formatAmount }}.
Repeats {{ bill.repeat_freq }}.
</td>
</tr>
<tr>
<td>Next expected match</td>
<td>
{% if bill.nextExpectedMatch %}
{{ bill.nextExpectedMatch.formatLocalized(monthAndDayFormat) }}
{% else %}
<em>{{ 'unknown'|_ }}</em>
{% endif %}
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="col-lg-6 col-sm-12 col-md-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">More</h3>
</div>
<div class="box-body">
<p>
<a href="{{ route('bills.rescan',bill.id) }}" class="btn btn-default">Rescan old transactions</a>
</p>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12 col-sm-12 col-md-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">Chart</h3>
</div>
<div class="box-body">
<canvas id="bill-overview" style="width:100%;height:400px;"></canvas>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12 col-sm-12 col-md-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">Connected transaction journals</h3>
</div>
<div class="box-body table-responsive no-padding">
{% include 'list/journals' %}
</div>
</div>
</div>
</div>
{% endblock %}
{% block scripts %}
<script type="text/javascript">
var billID = {{ bill.id }};
</script>
<script type="text/javascript" src="js/Chart.min.js"></script>
<script type="text/javascript" src="js/charts.js"></script>
<script type="text/javascript" src="js/bills.js"></script>
{% endblock %}

View File

@@ -0,0 +1,40 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName) }}
{% endblock %}
{% block content %}
{{ Form.open({'class' : 'form-horizontal','id' : 'store','url' : route('budgets.store')}) }}
<div class="row">
<div class="col-lg-6 col-md-6 col-sm-12">
<div class="box box-primary">
<div class="box-header with-border">
<h3 class="box-title">{{ 'mandatoryFields'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.text('name') }}
</div>
</div>
</div>
<div class="col-lg-6 col-md-6 col-sm-12">
<!-- panel for options -->
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'options'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.optionsList('create','budget') }}
</div>
<div class="box-footer">
<button type="submit" class="btn pull-right btn-success">{{ 'store_new_budget'|_ }}</button>
</div>
</div>
</div>
</div>
{{ Form.close|raw }}
{% endblock %}

View File

@@ -0,0 +1,41 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName, budget) }}
{% endblock %}
{% block content %}
{{ Form.open({'class' : 'form-horizontal','id' : 'destroy','url' : route('budgets.destroy',budget.id) }) }}
<div class="row">
<div class="col-lg-6 col-lg-offset-3 col-md-12 col-sm-12">
<div class="box box-danger">
<div class="box-header with-border">
<h3 class="box-title">{{ trans('form.delete_budget', {'name': budget.name}) }}</h3>
</div>
<div class="box-body">
<p class="text-danger">
{{ trans('form.permDeleteWarning') }}
</p>
<p>
{{ trans('form.budget_areYouSure', {'name': budget.name}) }}
</p>
<p>
{% if budget.transactionjournals|length > 0 %}
{{ Lang.choice('form.budget_keep_transactions', budget.transactionjournals|length, {count: budget.transactionjournals|length}) }}
{% endif %}
</p>
</div>
<div class="box-footer">
<input type="submit" name="submit" value="{{ trans('form.deletePermanently') }}" class="btn btn-danger pull-right"/>
<a href="{{ URL.previous() }}" class="btn-default btn">{{ trans('form.cancel') }}</a>
</div>
</div>
</div>
</div>
{{ Form.close|raw }}
{% endblock %}

View File

@@ -0,0 +1,41 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName, budget) }}
{% endblock %}
{% block content %}
{{ Form.model(budget, {'class' : 'form-horizontal','id' : 'update','url' : route('budgets.update',budget.id) } ) }}
<input type="hidden" name="id" value="{{ budget.id }}"/>
<div class="row">
<div class="col-lg-6 col-md-12 col-sm-6">
<div class="box box-primary">
<div class="box-header with-border">
<h3 class="box-title">{{ 'mandatoryFields'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.checkbox('active') }}
{{ ExpandedForm.text('name') }}
</div>
</div>
</div>
<div class="col-lg-6 col-md-12 col-sm-6">
<!-- panel for options -->
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'options'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.optionsList('update','budget') }}
</div>
<div class="box-footer">
<button type="submit" class="btn pull-right btn-success">{{ 'update_budget'|_ }}</button>
</div>
</div>
</div>
</div>
{{ Form.close|raw }}
{% endblock %}

View File

@@ -0,0 +1,25 @@
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">{{ 'close'|_ }}</span>
</button>
<h4 class="modal-title" id="myModalLabel">Update (expected) available amount for {{ Session.get('start').format('F Y') }}</h4>
</div>
<form style="display: inline;" id="income" action="/budgets/income" method="POST">
<div class="modal-body">
<input type="hidden" name="_token" value="{{ csrf_token() }}"/>
<div class="input-group">
<div class="input-group-addon">{{ getCurrencySymbol()|raw }}</div>
<input step="any" class="form-control" id="amount" value="{{ amount.data }}" autocomplete="off" name="amount" type="number"/>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">{{ 'close'|_ }}</button>
<button type="submit" class="btn btn-primary">{{ 'update_amount'|_ }}</button>
</div>
</form>
</div>
</div>

View File

@@ -0,0 +1,192 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName) }}
{% endblock %}
{% block content %}
<div class="row">
<div class="col-lg-9 col-sm-8 col-md-8">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ Session.get('start').formatLocalized(monthFormat) }}</h3>
<!-- ACTIONS MENU -->
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div>
</div>
<div class="box-body">
<div class="row">
<div class="col-lg-6 col-md-4 col-sm-3">
<small>{{ 'budgeted'|_ }}: <span id="budgetedAmount" class="text-success">{{ budgeted|formatAmountPlain }}</span></small>
</div>
<div class="col-lg-6 col-md-4 col-sm-3" style="text-align:right;">
<small>{{ trans('firefly.availableIn',{date : period }) }}:
<a href="#" class="updateIncome"><span id="budgetIncomeTotal"
data-value="{{ budgetIncomeTotal }}">{{ budgetIncomeTotal|formatAmount }}</span></a>
</small>
</div>
</div>
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
<div class="progress budgetedBar">
<div class="progress-bar progress-bar-danger" id="progress-bar-danger" role="progressbar" aria-valuenow="0" aria-valuemin="0"
aria-valuemax="100" style="width: 0;"></div>
<div class="progress-bar progress-bar-warning" id="progress-bar-warning" role="progressbar" aria-valuenow="10" aria-valuemin="0"
aria-valuemax="100" style="width: 0;"></div>
<div class="progress-bar progress-bar-info" id="progress-bar-default" role="progressbar" aria-valuenow="0" aria-valuemin="0"
aria-valuemax="100" style="width: 0;"></div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-6 col-md-4 col-sm-3">
<small>{{ 'spent'|_ }}: {{ spent|formatAmount }}</small>
</div>
</div>
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
<div class="progress spentBar">
<div class="progress-bar progress-bar-warning" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"
style="width: 0;"></div>
<div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"
style="width: 0;"></div>
<div class="progress-bar progress-bar-info" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"
style="width: 0;"></div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-3 col-sm-4 col-md-4">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'transactionsWithoutBudget'|_ }}</h3>
<!-- ACTIONS MENU -->
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div>
</div>
<div class="box-body">
<p>
<a href="{{ route('budgets.noBudget') }}">
{{ trans('firefly.transactionsWithoutBudgetDate', {date: period|lower }) }}
</a>
</p>
</div>
</div>
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'createBudget'|_ }}</h3>
<!-- ACTIONS MENU -->
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div>
</div>
<div class="box-body">
<a href="{{ route('budgets.create') }}" class="btn btn-success pull-right">{{ 'createBudget'|_ }}</a>
</div>
</div>
</div>
</div>
<div class="row">
{% for budget in budgets %}
<div class="col-lg-3 col-sm-4 col-md-6" style="height:180px;">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">
<!-- link in header -->
{% if budget.currentRep %}
<a href="{{ route('budgets.show', [budget.id, budget.currentRep.id]) }}" class="budget-link"
data-id="{{ budget.id }}">{{ budget.name }}</a>
{% else %}
<a href="{{ route('budgets.show',budget.id) }}" class="budget-link" data-id="{{ budget.id }}">{{ budget.name }}</a>
{% endif %}
</h3>
<!-- ACTIONS MENU -->
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
<div class="btn-group">
<button class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown"><i class="fa fa-ellipsis-v"></i></button>
<ul class="dropdown-menu" role="menu">
<li><a href="{{ route('budgets.edit',budget.id) }}"><i class="fa fa-pencil fa-fw"></i> {{ 'edit'|_ }}</a></li>
<li><a href="{{ route('budgets.delete',budget.id) }}"><i class="fa fa-trash fa-fw"></i> {{ 'delete'|_ }}</a></li>
</ul>
</div>
</div>
</div>
<div class="box-body">
<table class="table">
<tr>
<td style="width:40%;">{{ 'budgeted'|_ }}</td>
<td>
<div class="form-group" style="margin-bottom:0;">
<div class="input-group">
<div class="input-group-addon">{{ defaultCurrency.symbol|raw }}</div>
<input type="hidden" name="balance_currency_id" value="1"/>
<input class="form-control budgetAmount" data-original="{{ budget.currentRep.amount|number_format(0,'','') }}"
data-id="{{ budget.id }}" value="{{ budget.currentRep.amount|number_format(0,'','') }}" autocomplete="off"
step="1" min="0" max="{{ budgetMaximum }}" name="amount" type="number">
</div>
</div>
</td>
</tr>
<tr>
<td style="width:50%;">{{ 'spent'|_ }}</td>
<td>{{ budget.spent|formatAmount }}</a></td>
</tr>
</table>
</div>
</div>
</div>
{% endfor %}
{% if inactive|length > 0 %}
<div class="col-lg-3 col-sm-4 col-md-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'inactiveBudgets'|_ }}</h3>
<!-- ACTIONS MENU -->
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div>
</div>
<div class="box-body">
{% for index,budget in inactive %}
{% if index != inactive|length-1 %}
<a href="{{ route('budgets.show',budget.id) }}">{{ budget.name }}</a>,
{% else %}
<a href="{{ route('budgets.show',budget.id) }}">{{ budget.name }}</a>
{% endif %}
{% endfor %}
</div>
</div>
</div>
{% endif %}
</div>
{% endblock %}
{% block scripts %}
<script type="text/javascript">
// actually spent bar data:
var spent = {{ spent * -1 }}; // must be positive for the calculation to work.
var currencySymbol = "{{ getCurrencySymbol()|raw }}";
// budgeted data:
var budgeted = {{ budgeted }};
var budgetIncomeTotal = {{ budgetIncomeTotal }};
</script>
<script type="text/javascript" src="js/budgets.js"></script>
{% endblock %}

View File

@@ -0,0 +1,21 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName, subTitle) }}
{% endblock %}
{% block content %}
<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">{{ subTitle }}</h3>
</div>
<div class="box-body">
{% include 'list/journals.twig' with {'journals': list} %}
</div>
</div>
</div>
</div>
{% endblock %}

View File

@@ -0,0 +1,110 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName, budget, repetition) }}
{% endblock %}
{% block content %}
<div class="row">
<div class="col-lg-9 col-md-9 col-sm-7">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'overview'|_ }}</h3>
<!-- ACTIONS MENU -->
<div class="pull-right">
<div class="btn-group">
<button type="button" class="btn btn-default btn-xs dropdown-toggle" data-toggle="dropdown">
{{ 'actions'|_ }}
<span class="caret"></span>
</button>
<ul class="dropdown-menu pull-right" role="menu">
<li><a href="{{ route('budgets.edit',budget.id) }}"><i class="fa fa-pencil fa-fw"></i> {{ 'edit'|_ }}</a></li>
<li><a href="{{ route('budgets.delete',budget.id) }}"><i class="fa fa-trash fa-fw"></i> {{ 'delete'|_ }}</a></li>
</ul>
</div>
</div>
</div>
<div class="box-body">
<canvas id="budgetOverview" style="width:100%;height:400px;"></canvas>
</div>
</div>
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'transactions'|_ }}</h3>
</div>
{% include 'list/journals.twig' %}
</div>
</div>
<div class="col-lg-3 col-md-3 col-sm-5">
{% if limits|length == 1 %}
<p class="small text-center"><a href="{{ route('budgets.show',budget.id) }}">{{ 'showEverything'|_ }}</a></p>
{% endif %}
{% for limit in limits %}
<div class="box">
<div class="box-header with-border">
<h3 class="box-title"><a href="{{ route('budgets.show',[budget.id,limit.id]) }}">{{ limit.startdate.formatLocalized(monthFormat) }}</a>
</h3>
</div>
<div class="box-body">
<div class="row">
<div class="col-lg-6 col-md-6 col-sm-6">
{{ 'amount'|_ }}: {{ limit.amount|formatAmount }}
</div>
<div class="col-lg-6 col-md-6 col-sm-6">
{{ 'spent'|_ }}: {{ limit.spent|formatAmount }}
</div>
</div>
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
{% set overspent = limit.amount + limit.spent < 0 %}
{% if overspent %}
{% set pct = (limit.spent != 0 ? (limit.amount / (limit.spent*-1))*100 : 0) %} <!-- must have -1 here -->
<div class="progress progress-striped">
<div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="{{ pct|round }}" aria-valuemin="0"
aria-valuemax="100" style="width: {{ pct|round }}%;"></div>
<div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="{{ (100-pct)|round }}"
aria-valuemin="0" aria-valuemax="100" style="width: {{ (100-pct)|round }}%;"></div>
</div>
{% else %}
{% set pct = (limit.amount != 0 ? (((limit.spent*-1) / limit.amount)*100) : 0) %} <!-- must have -1 here -->
<div class="progress progress-striped">
<div class="progress-bar progress-bar-info" role="progressbar" aria-valuenow="{{ pct|round }}" aria-valuemin="0"
aria-valuemax="100" style="width: {{ pct|round }}%;"></div>
</div>
{% endif %}
</div>
</div>
</div>
</div>
{% endfor %}
{% if limits|length == 1 %}
<p class="small text-center"><a href="{{ route('budgets.show',budget.id) }}">{{ 'showEverything'|_ }}</a></p>
{% endif %}
</div>
</div>
{% endblock %}
{% block scripts %}
<script type="text/javascript">
var budgetID = {{ budget.id }};
{% if repetition.id %}
var repetitionID = {{ repetition.id }};
var year = {{ repetition.startdate.format('Y') }};
{% else %}
var year = {{ Session.get('start').format('Y') }};
{% endif %}
</script>
<script type="text/javascript" src="js/Chart.min.js"></script>
<script type="text/javascript" src="js/charts.js"></script>
<script type="text/javascript" src="js/budgets.js"></script>
{% endblock %}

View File

@@ -0,0 +1,43 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName) }}
{% endblock %}
{% block content %}
{{ Form.open({'class' : 'form-horizontal','id' : 'store','url' : route('categories.store')}) }}
<div class="row">
<div class="col-lg-6 col-md-6 col-sm-12">
<div class="box box-primary">
<div class="box-header with-border">
<h3 class="box-title">{{ 'mandatoryFields'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.text('name') }}
</div>
</div>
</div>
<div class="col-lg-6 col-md-6 col-sm-12">
<!-- panel for options -->
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'options'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.optionsList('create','category') }}
</div>
<div class="box-footer">
<button type="submit" class="btn pull-right btn-success">
{{ 'store_category'|_ }}
</button>
</div>
</div>
</div>
</div>
{{ Form.close|raw }}
{% endblock %}

View File

@@ -0,0 +1,39 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName, category) }}
{% endblock %}
{% block content %}
{{ Form.open({'class' : 'form-horizontal','id' : 'destroy','url' : route('categories.destroy',category.id)}) }}
<div class="row">
<div class="col-lg-6 col-lg-offset-3 col-md-12 col-sm-12">
<div class="box box-danger">
<div class="box-header with-border">
<h3 class="box-title">{{ trans('form.delete_category', {'name': category.name}) }}</h3>
</div>
<div class="box-body">
<p class="text-danger">
{{ trans('form.permDeleteWarning') }}
</p>
<p>
{{ trans('form.category_areYouSure', {'name': category.name}) }}
</p>
<p>
{% if category.transactionjournals|length > 0 %}
{{ Lang.choice('form.category_keep_transactions', category.transactionjournals|length, {count: category.transactionjournals|length}) }}
{% endif %}
</p>
</div>
<div class="box-footer">
<input type="submit" name="submit" value="{{ trans('form.deletePermanently') }}" class="btn btn-danger pull-right"/>
<a href="{{ URL.previous() }}" class="btn-default btn">{{ trans('form.cancel') }}</a>
</div>
</div>
</div>
</div>
{{ Form.close|raw }}
{% endblock %}

View File

@@ -0,0 +1,42 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName, category) }}
{% endblock %}
{% block content %}
{{ Form.model(category, {'class' : 'form-horizontal','id' : 'update','url' : route('categories.update',category.id)}) }}
<input type="hidden" name="id" value="{{ category.id }}"/>
<div class="row">
<div class="col-lg-6 col-md-6 col-sm-12">
<div class="box box-primary">
<div class="box-header with-border">
<h3 class="box-title">{{ 'mandatoryFields'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.text('name') }}
</div>
</div>
</div>
<div class="col-lg-6 col-md-6 col-sm-12">
<!-- panel for options -->
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'options'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.optionsList('update','category') }}
</div>
<div class="box-footer">
<button type="submit" class="btn pull-right btn-success">
{{ 'update_category'|_ }}
</button>
</div>
</div>
</div>
</div>
{{ Form.close|raw }}
{% endblock %}

View File

@@ -0,0 +1,42 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName) }}
{% endblock %}
{% block content %}
<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'|_ }}</h3>
<!-- ACTIONS MENU -->
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
<div class="btn-group">
<button class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown"><i class="fa fa-ellipsis-v"></i></button>
<ul class="dropdown-menu" role="menu">
<li><a href="{{ route('categories.create') }}"><i class="fa fa-plus fa-fw"></i> {{ 'new_category'|_ }}</a></li>
</ul>
</div>
</div>
</div>
<div class="box-body no-padding">
{% include 'list/categories.twig' %}
</div>
</div>
</div>
</div>
{% endblock %}
{% block styles %}
<link rel="stylesheet" href="css/bootstrap-sortable.css" type="text/css" media="all"/>
{% endblock %}
{% block scripts %}
<script type="text/javascript" src="js/Chart.min.js"></script>
<script type="text/javascript" src="js/charts.js"></script>
<script type="text/javascript" src="js/bootstrap-sortable.js"></script>
<script type="text/javascript" src="js/categories.js"></script>
{% endblock %}

View File

@@ -0,0 +1,22 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName, subTitle) }}
{% endblock %}
{% block content %}
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
<div class="box">
<div class="box-header with-border">
{{ subTitle }}
</div>
<div class="box-body no-padding">
{% include 'list/journals.twig' with {'journals': list} %}
</div>
</div>
</div>
</div>
{% endblock %}

View File

@@ -0,0 +1,82 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName, category) }}
{% endblock %}
{% block content %}
<div class="row">
<div class="col-lg-6 col-md-6 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'overview'|_ }} (month)</h3>
</div>
<div class="box-body">
<canvas id="period" style="width:100%;height:350px;"></canvas>
</div>
</div>
</div>
<div class="col-lg-6 col-md-6 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'overview'|_ }} (all)</h3>
</div>
<div class="box-body">
<canvas id="all" style="width:100%;height:350px;"></canvas>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-8 col-md-8 col-sm-12 col-xs-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'transactions'|_ }}</h3>
</div>
<div class="box-body no-padding">
{% include 'list/journals' %}
</div>
</div>
</div>
<div class="col-lg-4 col-md-4 col-sm-12 col-xs-12">
{% for entry in entries %}
{% if entry[2] != 0 or entry[3] != 0 %}
<div class="box">
<div class="box-header with-border">
<h3 class="box-title"><a href="{{ route('categories.show.date',[category.id,entry[0]]) }}">{{ entry[1] }}</a>
</h3>
</div>
<div class="box-body no-padding">
<table class="table table-hover">
{% if entry[2] != 0 %}
<tr>
<td colspan="33%">{{ 'spent'|_ }}</td>
<td colspan="67%">{{ entry[2]|formatAmount }}</td>
</tr>
{% endif %}
{% if entry[3] != 0 %}
<tr>
<td colspan="33%">{{ 'earned'|_ }}</td>
<td colspan="67%">{{ entry[3]|formatAmount }}</td>
</tr>
{% endif %}
</table>
</div>
</div>
{% endif %}
{% endfor %}
</div>
</div>
{% endblock %}
{% block scripts %}
<script type="text/javascript">
var categoryID = {{ category.id }};
</script>
<script type="text/javascript" src="js/Chart.min.js"></script>
<script type="text/javascript" src="js/charts.js"></script>
<script type="text/javascript" src="js/categories.js"></script>
{% endblock %}

View File

@@ -0,0 +1,50 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName, category, carbon) }}
{% endblock %}
{% block content %}
<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">{{ 'overview'|_ }} (period)</h3>
</div>
<div class="box-body">
<canvas id="period-specific-period" style="width:100%;height:350px;"></canvas>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
<p><a href="{{ route('categories.show',[category.id]) }}">Back to all periods</a></p>
</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">{{ 'transactions'|_ }}</h3>
</div>
<div class="box-body no-padding">
{% include 'list/journals' %}
</div>
</div>
</div>
</div>
{% endblock %}
{% block scripts %}
<script type="text/javascript">
var categoryID = {{ category.id }};
var categoryDate = "{{ carbon.format('Y-m-d') }}";
</script>
<script type="text/javascript" src="js/Chart.min.js"></script>
<script type="text/javascript" src="js/charts.js"></script>
<script type="text/javascript" src="js/categories.js"></script>
{% endblock %}

View File

@@ -0,0 +1,87 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName) }}
{% endblock %}
{% block content %}
<div class="row">
<div class="col-lg-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'csv_column_roles_title'|_ }}</h3>
<!-- ACTIONS MENU -->
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div>
</div>
<div class="box-body">
<p>{{ 'csv_column_roles_text'|_ }}</p>
</div>
</div>
</div>
</div>
<form action="{{ route('csv.initial_parse') }}" method="post">
<input type="hidden" name="_token" value="{{ csrf_token() }}"/>
<div class="row">
<div class="col-lg-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'csv_column_roles_table'|_ }}</h3>
<!-- ACTIONS MENU -->
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div>
</div>
<div class="box-body">
<table class="table">
<thead>
<th style="width:20%;">{{ 'csv_column_name'|_ }}</th>
<th style="width:40%;">{{ 'csv_column_example'|_ }}</th>
<th style="width:30%;">{{ 'csv_column_role'|_ }}</th>
<th style="width:10%;">{{ 'csv_do_map_value'|_ }}</th>
</thead>
{% for index,header in headers %}
<tr>
<td>{{ header }}</td>
<td><code>{{ example[index] }}</code></td>
<td>
{{ Form.select(('role['~index~']'), availableRoles,roles[index],{class: 'form-control'}) }}
</td>
<td>
{{ Form.checkbox(('map['~index~']'),1,map[index]) }}
</td>
</tr>
{% endfor %}
</table>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="box">
<div class="box-body">
<a href="{{ route('csv.index') }}" class="btn btn-danger"><i class="fa fa-arrow-left"></i> {{ 'csv_go_back'|_ }}</a>
<button type="submit" class="btn btn-success pull-right">
{{ 'csv_continue'|_ }} <i class="fa fa-arrow-right"></i>
</button>
</div>
</div>
</div>
</div>
</form>
{% endblock %}

View File

@@ -0,0 +1,50 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName) }}
{% endblock %}
{% block content %}
<div class="row">
<div class="col-lg-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'csv_download_config_title'|_ }}</h3>
<!-- ACTIONS MENU -->
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div>
</div>
<div class="box-body">
<p>
{{ 'csv_download_config_text'|_ }}
</p>
<p>
<a href="{{ route('csv.download-config') }}" class="btn btn-info"><i class="fa fa-download"></i> {{ 'csv_do_download_config'|_ }}</a>
</p>
<p>
{{ 'csv_more_information_text'|_ }}
</p>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="box">
<div class="box-body">
<a href="{{ route('csv.column-roles') }}" class="btn btn-danger"><i class="fa fa-arrow-left"></i> {{ 'csv_go_back'|_ }}</a>
<a href="{{ route('csv.process') }}" class="btn btn-success pull-right">{{ 'csv_continue'|_ }} <i class="fa fa-arrow-right"></i></a>
</div>
</div>
</div>
</div>
{% endblock %}

View File

@@ -0,0 +1,106 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName) }}
{% endblock %}
{% block content %}
<div class="row">
<div class="col-lg-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'csv_index_title'|_ }}</h3>
<!-- ACTIONS MENU -->
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div>
</div>
<div class="box-body">
{{ 'csv_index_text'|_ }}
<p class="text-info">{{ 'csv_index_beta_warning'|_ }}</p>
{% if unsupported|length > 0 %}
<p class="text-danger">{{ 'csv_index_unsupported_warning'|_ }}</p>
<ul>
{% for message in unsupported %}
<li>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
</div>
</div>
</div>
</div>
<form class="form-horizontal" action="{{ route('csv.upload') }}" method="post" enctype="multipart/form-data">
<input type="hidden" name="_token" value="{{ csrf_token() }}"/>
<div class="row">
<div class="col-lg-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'csv_upload_form'|_ }}</h3>
<!-- ACTIONS MENU -->
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div>
</div>
<div class="box-body">
{{ ExpandedForm.checkbox('has_headers',1,null,{helpText: 'csv_header_help'|_}) }}
{{ ExpandedForm.text('date_format','Ymd',{helpText: 'csv_date_help'|_}) }}
{{ ExpandedForm.file('csv',{helpText: 'csv_csv_file_help'|_}) }}
{{ ExpandedForm.file('csv_config',{helpText: 'csv_csv_config_file_help'|_}) }}
{{ ExpandedForm.select('csv_import_account', accounts, 0, {helpText: 'csv_import_account_help'|_} ) }}
{{ ExpandedForm.multiCheckbox('specifix', specifix) }}
{% if not uploadPossible %}
<div class="form-group" id="csv_holder">
<div class="col-sm-4">
&nbsp;
</div>
<div class="col-sm-8">
<pre>{{ path }}</pre>
<p class="text-danger">
{{ 'csv_upload_not_writeable'|_ }}
</p>
</div>
</div>
{% endif %}
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="box">
<div class="box-body">
<button type="submit" class="pull-right btn btn-success">
{{ 'csv_upload_button'|_ }}
</button>
</div>
</div>
</div>
</div>
</form>
{% endblock %}

View File

@@ -0,0 +1,92 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName) }}
{% endblock %}
{% block content %}
<div class="row">
<div class="col-lg-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'csv_map_title'|_ }}</h3>
<!-- ACTIONS MENU -->
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div>
</div>
<div class="box-body">
<p>
{{ 'csv_map_text'|_ }}
</p>
</div>
</div>
</div>
</div>
<form action="{{ route('csv.save_mapping') }}" method="post">
<input type="hidden" name="_token" value="{{ csrf_token() }}"/>
{% for index,columnName in map %}
<div class="row">
<div class="col-lg-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ Config.get('csv.roles.'~columnName~'.name') }}</h3>
<!-- ACTIONS MENU -->
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div>
</div>
<div class="box-body no-padding">
<table class="table table-hover">
<thead>
<th style="width:50%;">{{ 'csv_field_value'|_ }}</th>
<th>{{ 'csv_field_mapped_to'|_ }}</th>
</thead>
<tbody>
{% for value in values[index] %}
<tr>
<td><code>{{ value }}</code></td>
<td>
{{ Form.select('mapping['~index~']['~value~']',options[index], mapped[index][value], {class: 'form-control'}) }}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
</div>
{% endfor %}
<div class="row">
<div class="col-lg-12">
<div class="box">
<div class="box-body">
<a href="{{ route('csv.column-roles') }}" class="btn btn-danger"><i class="fa fa-arrow-left"></i> {{ 'csv_go_back'|_ }}</a>
<button type="submit" class="btn btn-success pull-right">
{{ 'csv_continue'|_ }} <i class="fa fa-arrow-right"></i>
</button>
</div>
</div>
</div>
</div>
</form>
{% endblock %}

View File

@@ -0,0 +1,64 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName) }}
{% endblock %}
{% block content %}
<div class="row">
<div class="col-lg-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'csv_process_title'|_ }}</h3>
<!-- ACTIONS MENU -->
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div>
</div>
<div class="box-body">
<p>
{{ trans('firefly.csv_process_text',{rows: rows}) }}
</p>
{% if errors|length > 0 %}
<p class="text-danger">{{ Lang.choice('firefly.csv_import_with_errors',errors|length,{errors: errors|length}) }}</p>
<ul>
{% for index,err in errors %}
<li>{{ 'csv_row'|_ }} #{{ index }}: {{ err }}</li>
{% endfor %}
</ul>
<p>
{{ trans('firefly.csv_error_see_logs') }}
</p>
{% endif %}
<p>
{{ trans('firefly.csv_process_new_entries',{imported: imported}) }}
</p>
{% if journals|length > 0 %}
<ul>
{% for journal in journals %}
<li>#{{ journal.id }}: <a href="{{ route('transactions.show', [journal.id]) }}">{{ journal.description }}</a></li>
{% endfor %}
</ul>
{% endif %}
<p>
<a href="{{ route('csv.index') }}" class="btn btn-warning">{{ 'csv_start_over'|_ }}</a>
<a href="{{ route('index') }}" class="btn btn-success">{{ 'csv_to_index'|_ }}</a>
<a href="{{ route('csv.download-config') }}" class="btn btn-info"><i class="fa fa-download"></i> {{ 'csv_do_download_config'|_ }}</a>
</p>
</div>
</div>
</div>
</div>
{% endblock %}

View File

@@ -0,0 +1,44 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName) }}
{% endblock %}
{% block content %}
{{ Form.open({'class' : 'form-horizontal','id' : 'store','route' : 'currency.store'}) }}
<div class="row">
<div class="col-lg-6 col-md-6 col-sm-12">
<div class="box box-primary">
<div class="box-header with-border">
<h3 class="box-title">{{ 'mandatoryFields'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.text('name',null,{'maxlength' : 48}) }}
{{ ExpandedForm.text('symbol',null,{'maxlength': 8}) }}
{{ ExpandedForm.text('code',null,{'maxlength' : 3}) }}
</div>
</div>
</div>
<div class="col-lg-6 col-md-6 col-sm-12">
<!-- panel for options -->
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'options'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.optionsList('create','currency') }}
</div>
<div class="box-footer">
<button type="submit" class="btn pull-right btn-success">
{{ 'store_currency'|_ }}
</button>
</div>
</div>
</div>
</div>
{{ Form.close|raw }}
{% endblock %}

View File

@@ -0,0 +1,35 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName, currency) }}
{% endblock %}
{% block content %}
{{ Form.open({'class' : 'form-horizontal','id' : 'destroy','url' : route('currency.destroy',currency.id)}) }}
<div class="row">
<div class="col-lg-6 col-lg-offset-3 col-md-12 col-sm-12">
<div class="box box-danger">
<div class="box-header with-border">
<h3 class="box-title">{{ trans('form.delete_currency', {'name': currency.name}) }}</h3>
</div>
<div class="box-body">
<p class="text-danger">
{{ trans('form.permDeleteWarning') }}
</p>
<p>
{{ trans('form.currency_areYouSure', {'name': currency.name}) }}
</p>
</div>
<div class="box-footer">
<input type="submit" name="submit" value="{{ trans('form.deletePermanently') }}" class="btn btn-danger pull-right"/>
<a href="{{ URL.previous }}" class="btn-default btn">{{ trans('form.cancel') }}</a>
</div>
</div>
</div>
</div>
{{ Form.close|raw }}
{% endblock %}

View File

@@ -0,0 +1,45 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName, currency) }}
{% endblock %}
{% block content %}
{{ Form.model(currency, {'class' : 'form-horizontal','id' : 'update','url' : route('currency.update',currency.id)}) }}
<input type="hidden" name="id" value="{{ currency.id }}"/>
<div class="row">
<div class="col-lg-6 col-md-6 col-sm-12">
<div class="box box-primary">
<div class="box-header with-border">
<h3 class="box-title">{{ 'mandatoryFields'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.text('name',null,{'maxlength' : 48}) }}
{{ ExpandedForm.text('symbol',null,{'maxlength' : 8}) }}
{{ ExpandedForm.text('code',null,{'maxlength' : 3}) }}
</div>
</div>
</div>
<div class="col-lg-6 col-md-6 col-sm-12">
<!-- panel for options -->
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'options'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.optionsList('update','currency') }}
</div>
<div class="box-footer">
<button type="submit" class="btn btn-success pull-right">
{{ 'update_currency'|_ }}
</button>
</div>
</div>
</div>
</div>
{{ Form.close|raw }}
{% endblock %}

View File

@@ -0,0 +1,55 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName) }}
{% endblock %}
{% block content %}
<div class="row">
<div class="col-lg-12 col-sm-12 col-md-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">Currencies</h3>
</div>
<div class="box-body">
<p class="text-info">
Firefly III supports various currencies which you can set and enable here.
</p>
{% if currencies|length > 0 %}
<table class="table table-hover">
<thead>
<tr>
<th>&nbsp;</th>
<th colspan="2">Currency</th>
</tr>
</thead>
<tbody>
{% for currency in currencies %}
<tr>
<td>
<div class="btn-group btn-group-xs">
<a class="btn btn-default" href="{{ route('currency.edit',currency.id) }}"><i class="fa fa-fw fa-pencil"></i></a>
<a class="btn btn-danger" href="{{ route('currency.delete',currency.id) }}"><i class="fa fa-fw fa-trash"></i></a>
</div>
</td>
<td>{{ currency.name }} ({{ currency.code }}) ({{ currency.symbol|raw }})</td>
<td>
{% if currency.id == defaultCurrency.id %}
<span class="label label-success">default</span>
{% else %}
<a class="btn btn-info btn-xs" href="{{ route('currency.default',currency.id) }}">make default</a>
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
</div>
<div class="box-footer">
<a class="btn btn-success pull-right" href="{{ route('currency.create') }}">Add another currency</a>
</div>
</div>
</div>
</div>
{% endblock %}

View File

@@ -0,0 +1 @@
Click here to reset your password: {{ url('password/reset/' ~ token) }}

View File

@@ -0,0 +1,68 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
</head>
<body>
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
Hey there,
</p>
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
Welkome to <a style="color:#337ab7" href="{{ address }}">Firefly III</a>. Your registration has made it, and this email is here to confirm it. Yay!
</p>
<ul>
<li style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
If you have forgotten your password already, please reset it using
<a style="color:#337ab7" href="{{ address }}/password/email">the password reset tool</a>.
</li>
<li style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
There is a help-icon in the top right corner of each page. If you need help, click it!
</li>
<li style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
If you haven't already, please read the
<a style="color:#337ab7" href="https://github.com/JC5/firefly-iii/wiki/First-use">first use guide</a> and the
<a style="color:#337ab7" href="https://github.com/JC5/firefly-iii/wiki/full-description">full description</a>.
</li>
</ul>
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
Enjoy!
</p>
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:11px;color:#aaa;">
The registration has been created from IP {{ ip }}
</p>
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "EmailMessage",
"description": "Visit Firefly III",
"potentialAction": {
"@type": "ViewAction",
"target": "https://geld.nder.be/",
"name": "Watch movie"
},
"publisher": {
"@type": "Organization",
"name": "Firefly III",
"url": "https://geld.nder.be"
}
}
</script>
</body>
</html>

View File

@@ -0,0 +1,21 @@
Hey there,
Welkome to Firefly III. Your registration has made it, and this email is here to confirm it. Yay!
* If you have forgotten your password already, please reset it using the password reset tool.
* There is a help-icon in the top right corner of each page. If you need help, click it!
* If you haven't already, please read the first use guide and the full description.
Enjoy!
Firefly III:
{{ address }}
Password reset:
{{ address }}/password/email
Documentation:
https://github.com/JC5/firefly-iii/wiki/First-use
https://github.com/JC5/firefly-iii/wiki/full-description
The registration has been created from IP {{ ip }}

View File

@@ -0,0 +1,16 @@
{% extends "./layout/guest.twig" %}
{% block content %}
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
<h3 class="text-danger">Sorry, an error occurred.</h3>
</div>
</div>
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
{{ message |default('General unknown errror') }}
</div>
</div>
{% endblock %}

View File

@@ -0,0 +1,254 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"/>
<meta name="robots" content="noindex,nofollow"/>
<style>
/* Copyright (c) 2010, Yahoo! Inc. All rights reserved. Code licensed under the BSD License: http://developer.yahoo.com/yui/license.html */
html {
color: #000;
background: #FFF;
}
body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, form, fieldset, legend, input, textarea, p, blockquote, th, td {
margin: 0;
padding: 0;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
fieldset, img {
border: 0;
}
address, caption, cite, code, dfn, em, strong, th, var {
font-style: normal;
font-weight: normal;
}
li {
list-style: none;
}
caption, th {
text-align: left;
}
h1, h2, h3, h4, h5, h6 {
font-size: 100%;
font-weight: normal;
}
q:before, q:after {
content: '';
}
abbr, acronym {
border: 0;
font-variant: normal;
}
sup {
vertical-align: text-top;
}
sub {
vertical-align: text-bottom;
}
input, textarea, select {
font-family: inherit;
font-size: inherit;
font-weight: inherit;
}
input, textarea, select {
*font-size: 100%;
}
legend {
color: #000;
}
html {
background: #eee;
padding: 10px
}
img {
border: 0;
}
#sf-resetcontent {
width: 970px;
margin: 0 auto;
}
.sf-reset {
font: 11px Verdana, Arial, sans-serif;
color: #333
}
.sf-reset .clear {
clear: both;
height: 0;
font-size: 0;
line-height: 0;
}
.sf-reset .clear_fix:after {
display: block;
height: 0;
clear: both;
visibility: hidden;
}
.sf-reset .clear_fix {
display: inline-block;
}
.sf-reset * html .clear_fix {
height: 1%;
}
.sf-reset .clear_fix {
display: block;
}
.sf-reset, .sf-reset .block {
margin: auto
}
.sf-reset abbr {
border-bottom: 1px dotted #000;
cursor: help;
}
.sf-reset p {
font-size: 14px;
line-height: 20px;
color: #868686;
padding-bottom: 20px
}
.sf-reset strong {
font-weight: bold;
}
.sf-reset a {
color: #6c6159;
cursor: default;
}
.sf-reset a img {
border: none;
}
.sf-reset a:hover {
text-decoration: underline;
}
.sf-reset em {
font-style: italic;
}
.sf-reset h1, .sf-reset h2 {
font: 20px Georgia, "Times New Roman", Times, serif
}
.sf-reset .exception_counter {
background-color: #fff;
color: #333;
padding: 6px;
float: left;
margin-right: 10px;
display: block;
}
.sf-reset .exception_title {
margin-left: 3em;
margin-bottom: 0.7em;
display: block;
}
.sf-reset .exception_message {
margin-left: 3em;
display: block;
}
.sf-reset .traces li {
font-size: 12px;
padding: 2px 4px;
list-style-type: decimal;
margin-left: 20px;
}
.sf-reset .block {
background-color: #FFFFFF;
padding: 10px 28px;
margin-bottom: 20px;
-webkit-border-bottom-right-radius: 16px;
-webkit-border-bottom-left-radius: 16px;
-moz-border-radius-bottomright: 16px;
-moz-border-radius-bottomleft: 16px;
border-bottom-right-radius: 16px;
border-bottom-left-radius: 16px;
border-bottom: 1px solid #ccc;
border-right: 1px solid #ccc;
border-left: 1px solid #ccc;
}
.sf-reset .block_exception {
background-color: #ddd;
color: #333;
padding: 20px;
-webkit-border-top-left-radius: 16px;
-webkit-border-top-right-radius: 16px;
-moz-border-radius-topleft: 16px;
-moz-border-radius-topright: 16px;
border-top-left-radius: 16px;
border-top-right-radius: 16px;
border-top: 1px solid #ccc;
border-right: 1px solid #ccc;
border-left: 1px solid #ccc;
overflow: hidden;
word-wrap: break-word;
}
.sf-reset a {
background: none;
color: #868686;
text-decoration: none;
}
.sf-reset a:hover {
background: none;
color: #313131;
text-decoration: underline;
}
.sf-reset ol {
padding: 10px 0;
}
.sf-reset h1 {
background-color: #FFFFFF;
padding: 15px 28px;
margin-bottom: 20px;
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
border-radius: 10px;
border: 1px solid #ccc;
}
</style>
</head>
<body>
<div id="sf-resetcontent" class="sf-reset">
<h1>Sorry, the page you are looking for could not be found.</h1>
</div>
</body>
</html>

View File

@@ -0,0 +1,61 @@
<html>
<head>
<link href='https://fonts.googleapis.com/css?family=Lato:100' rel='stylesheet' type='text/css'>
<style>
body {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
color: #B0BEC5;
display: table;
font-weight: 100;
font-family: 'Lato';
}
.container {
text-align: center;
display: table-cell;
vertical-align: middle;
}
.content {
text-align: center;
display: inline-block;
}
.title {
font-size: 72px;
margin-bottom: 40px;
}
</style>
</head>
<body>
<div class="container">
<div class="content">
<div class="title">Be right back.</div>
</div>
</div>
<script>
(function (i, s, o, g, r, a, m) {
i['GoogleAnalyticsObject'] = r;
i[r] = i[r] || function () {
(i[r].q = i[r].q || []).push(arguments)
}, i[r].l = 1 * new Date();
a = s.createElement(o),
m = s.getElementsByTagName(o)[0];
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m)
})(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
ga('create', '{{ env('ANALYTICS_ID', 'XXX-XX-X') }}', 'auto');
ga('send', 'pageview');
</script>
</body>
</html>

View File

@@ -0,0 +1,33 @@
<div class="{{ classes }}" id="{{ name }}_holder">
<label for="{{ options.id }}" class="col-sm-4 control-label">{{ label }}</label>
<div class="col-sm-8">
<div class="input-group">
<div class="input-group-btn">
<button type="button"
class="btn btn-default dropdown-toggle currency-dropdown" id="currency_dropdown_{{ name }}" data-toggle="dropdown"
aria-expanded="false">
<span id="currency_select_symbol_{{ name }}">{{ defaultCurrency.symbol|raw }}</span> <span class="caret"></span>
</button>
<ul class="dropdown-menu currency-dropdown-menu" role="menu">
{% for currency in currencies %}
<li>
<a href="#"
class="currency-option"
data-id="{{ currency.id }}"
data-name="{{ name }}"
data-currency="{{ currency.code }}"
data-symbol="{{ currency.symbol|raw }}">{{ currency.name }}</a></li>
{% endfor %}
</ul>
</div>
{{ Form.input('number', name, value, options) }}
</div>
{% include 'form/feedback.twig' %}
</div>
<input type="hidden" name="amount_currency_id_{{ name }}" value="{{ defaultCurrency.id }}"/>
</div>

View File

@@ -0,0 +1,33 @@
<div class="{{ classes }}" id="{{ name }}_holder">
<label for="{{ options.id }}" class="col-sm-4 control-label">{{ label }}</label>
<div class="col-sm-8">
<div class="input-group">
<div class="input-group-btn">
<button type="button"
class="btn btn-default dropdown-toggle currency-dropdown" id="currency_dropdown_{{ name }}" data-toggle="dropdown"
aria-expanded="false">
<span id="currency_select_symbol_{{ name }}">{{ defaultCurrency.symbol|raw }}</span> <span class="caret"></span>
</button>
<ul class="dropdown-menu currency-dropdown-menu" role="menu">
{% for currency in currencies %}
<li>
<a href="#"
class="currency-option"
data-id="{{ currency.id }}"
data-name="{{ name }}"
data-currency="{{ currency.code }}"
data-symbol="{{ currency.symbol|raw }}">{{ currency.name }}</a></li>
{% endfor %}
</ul>
</div>
{{ Form.input('number', name, value, options) }}
</div>
{% include 'form/feedback.twig' %}
</div>
<input type="hidden" name="amount_currency_id_{{ name }}" value="{{ defaultCurrency.id }}"/>
</div>

View File

@@ -0,0 +1,13 @@
<div class="{{ classes }}" id="{{ name }}_holder">
<label for="{{ options.id }}" class="col-sm-4 control-label">{{ label }}</label>
<div class="col-sm-8">
<div class="checkbox">
<label>
{{ Form.checkbox(name, value, options.checked, options) }}
</label>
</div>
{% include 'form/help.twig' %}
{% include 'form/feedback.twig' %}
</div>
</div>

View File

@@ -0,0 +1,9 @@
<div class="{{ classes }}" id="{{ name }}_holder">
<label for="{{ options.id }}" class="col-sm-4 control-label">{{ label }}</label>
<div class="col-sm-8">
{{ Form.input('date', name, value, options) }}
{% include 'form/help.twig' %}
{% include 'form/feedback.twig' %}
</div>
</div>

View File

@@ -0,0 +1,4 @@
{% if errors.has(name) %}
<span class="form-control-feedback"><i class="fa fa-fw fa-remove"></i></span>
<p class="text-danger">{{ errors.first(name) }}</p>
{% endif %}

View File

@@ -0,0 +1,9 @@
<div class="{{ classes }}" id="{{ name }}_holder">
<label for="{{ options.id }}" class="col-sm-4 control-label">{{ label }}</label>
<div class="col-sm-8">
{{ Form.file(name, options) }}
{% include 'form/help.twig' %}
{% include 'form/feedback.twig' %}
</div>
</div>

View File

@@ -0,0 +1,3 @@
{% if options.helpText %}
<p class="help-block">{{ options.helpText|raw }}</p>
{% endif %}

View File

@@ -0,0 +1,10 @@
<div class="{{ classes }}" id="{{ name }}_holder">
<label for="{{ options.id }}" class="col-sm-4 control-label">{{ label }}</label>
<div class="col-sm-8">
<div class="input-group">
{{ Form.input('number', name, value, options) }}
{% include 'form/feedback.twig' %}
</div>
</div>
</div>

View File

@@ -0,0 +1,15 @@
<div class="{{ classes }}" id="{{ name }}_holder">
<label for="{{ options.id }}" class="col-sm-4 control-label">{{ label }}</label>
<div class="col-sm-8">
<div id="map-canvas" style="width:100%;height:300px;"></div>
<p class="help-block">Right-click to set the tag's location.
<a href="#" id="clearLocation">Clear location</a>
</p>
<input type="hidden" name="latitude" value=""/>
<input type="hidden" name="longitude" value=""/>
<input type="hidden" name="zoomLevel" value="6"/>
<input type="hidden" name="setTag" value=""/>
{% include 'form/feedback.twig' %}
</div>
</div>

View File

@@ -0,0 +1,17 @@
<div class="{{ classes }}" id="{{ name }}_holder">
<label for="{{ options.id }}" class="col-sm-4 control-label">{{ label }}</label>
<div class="col-sm-8">
{% for value,description in list %}
<div class="checkbox">
<label>
{{ Form.checkbox(name~'[]', value, (selected == value), options) }}
{{ description }}
</label>
</div>
{% endfor %}
{% include 'form/help.twig' %}
{% include 'form/feedback.twig' %}
</div>
</div>

View File

@@ -0,0 +1,17 @@
<div class="{{ classes }}" id="{{ name }}_holder">
<label for="{{ options.id }}" class="col-sm-4 control-label">{{ label }}</label>
<div class="col-sm-8">
{% for value,description in list %}
<div class="radio">
<label>
{{ Form.radio(name, value, (selected == value), options) }}
{{ description }}
</label>
</div>
{% endfor %}
{% include 'form/help.twig' %}
{% include 'form/feedback.twig' %}
</div>
</div>

View File

@@ -0,0 +1,33 @@
{% if type == 'create' %}
<div class="form-group">
<label for="{{ name }}_return_to_form" class="col-sm-4 control-label">
{{ trans('form.returnHere') }}
</label>
<div class="col-sm-8">
<div class="radio">
<label>
{{ Form.checkbox('create_another', '1', false, {'id': name ~ '_return_to_form'}) }}
{{ trans('form.returnHereExplanation') }}
</label>
</div>
</div>
</div>
{% endif %}
{% if type == 'update' %}
<div class="form-group">
<label for="{{ name }}_return_to_edit" class="col-sm-4 control-label">
{{ trans('form.returnHere') }}
</label>
<div class="col-sm-8">
<div class="radio"><label>
{{ Form.checkbox('return_to_edit', '1', Input.old('return_to_edit') == '1', {'id': name ~ '_return_to_edit'}) }}
{{ trans('form.returnHereUpdateExplanation') }}
</label>
</div>
</div>
</div>
{% endif %}

View File

@@ -0,0 +1,10 @@
<div class="{{ classes }}" id="{{ name }}_holder">
<label for="{{ options.id }}" class="col-sm-4 control-label">{{ label }}</label>
<div class="col-sm-8">
{{ Form.select(name, list, selected , options ) }}
{% include 'form/help.twig' %}
{% include 'form/feedback.twig' %}
</div>
</div>

View File

@@ -0,0 +1,7 @@
<div class="{{ classes }}" id="{{ name }}_holder">
<label for="{{ options.id }}" class="col-sm-4 control-label">{{ label }}</label>
<div class="col-sm-8">
<p class="form-control-static">{{ value }}</p>
</div>
</div>

View File

@@ -0,0 +1,8 @@
<div class="{{ classes }}" id="{{ name }}_holder">
<label for="{{ options.id }}" class="col-sm-4 control-label">{{ label }}</label>
<div class="col-sm-8">
{{ Form.input('text', name, value, options) }}
{% include 'form/feedback.twig' %}
</div>
</div>

View File

@@ -0,0 +1,9 @@
<div class="{{ classes }}" id="{{ name }}_holder">
<label for="{{ options.id }}" class="col-sm-4 control-label">{{ label }}</label>
<div class="col-sm-8">
{{ Form.input('text', name, value, options) }}
{% include 'form/help.twig' %}
{% include 'form/feedback.twig' %}
</div>
</div>

View File

@@ -0,0 +1,8 @@
<div class="{{ classes }}" id="{{ name }}_holder">
<label for="{{ options.id }}" class="col-sm-4 control-label">{{ label }}</label>
<div class="col-sm-8">
{{ Form.textarea(name, value, options) }}
{% include 'form/feedback.twig' %}
</div>
</div>

261
resources/views/index.twig Normal file
View File

@@ -0,0 +1,261 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists }}
{% endblock %}
{% block content %}
{% include 'partials/boxes.twig' %}
<div class="row">
<div class="col-lg-8 col-md-12 col-sm-12">
<!-- ACCOUNTS -->
<div class="box box-primary">
<div class="box-header with-border">
<h3 class="box-title">{{ 'yourAccounts'|_ }}</h3>
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div>
</div>
<div class="box-body">
<canvas id="accounts-chart" style="width:100%;height:400px;"></canvas>
</div>
</div>
<!-- BUDGETS -->
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'budgetsAndSpending'|_ }}</h3>
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div>
</div>
<div class="box-body">
<canvas id="budgets-chart" style="width:100%;height:400px;"></canvas>
</div>
</div>
<!-- CATEGORIES -->
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'categories'|_ }}</h3>
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div>
</div>
<div class="box-body">
<canvas id="categories-chart" style="width:100%;height:400px;"></canvas>
</div>
</div>
</div>
<div class="col-lg-4 col-md-6 col-sm-12">
<!-- BILLS -->
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'bills'|_ }}</h3>
<!-- ACTIONS MENU -->
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div>
</div>
<div class="box-body">
<canvas id="bills-chart" style="width:100%;height:250px;"></canvas>
</div>
</div>
<!-- TRANSACTIONS -->
{% for data in transactions %}
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ data[1].name }}</h3>
<!-- ACTIONS MENU -->
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
<div class="btn-group">
<button class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown"><i class="fa fa-ellipsis-v"></i></button>
<ul class="dropdown-menu" role="menu">
<li><a href="{{ route('transactions.create','withdrawal') }}?account_id={{ data[1].id }}"><i
class="fa fa-long-arrow-left fa-fw"></i> {{ 'newWithdrawal'|_ }}</a></li>
<li><a href="{{ route('transactions.create','deposit') }}?account_id={{ data[1].id }}"><i
class="fa fa-long-arrow-right fa-fw"></i> {{ 'newDeposit'|_ }}</a></li>
<li><a href="{{ route('transactions.create','transfer') }}?account_from_id={{ data[1].id }}"><i
class="fa fa-fw fa-exchange"></i> {{ 'newTransfer'|_ }}</a></li>
</ul>
</div>
</div>
</div>
<div class="box-body no-padding">
{% include 'list/journals-tiny.twig' with {'transactions': data[0],'account': data[1]} %}
</div>
<div class="box-footer clearfix">
<a class="btn btn-sm btn-default btn-flat pull-right"
href="{{ route('accounts.show',data[1].id) }}">{{ (data[1]|balance)|formatAmountPlain }}</a>
</div>
</div>
{% endfor %}
</div>
</div>
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
<!-- EXPENSE ACCOUNTS -->
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'expense_accounts'|_ }}</h3>
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div>
</div>
<div class="box-body">
<canvas id="expense-accounts-chart" style="width:100%;height:400px;"></canvas>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-6 col-sm-12 col-md-12">
<!-- SAVINGS -->
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'savings'|_ }}</h3>
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div>
</div>
<div class="box-body">
{% if savings|length == 0 %}
<p class="small"><em>{{ 'markAsSavingsToContinue'|_ }}</em></p>
{% else %}
{% for account in savings %}
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12"><h5><a
href="{{ route('accounts.show', account.id) }}">{{ account.name }}</a></h5>
</div>
</div>
<div class="row">
<!-- start -->
<div class="col-lg-2 col-md-2 col-sm-3 col-xs-4">{{ account.startBalance|formatAmount }}</div>
<!-- bar -->
<div class="col-lg-8 col-md-8 col-sm-6 col-xs-4">
{% if account.difference < 0 %}
<!-- green (100-pct), then red (pct) -->
<div class="progress">
<div class="progress-bar progress-bar-success" style="width: {{ 100 - account.percentage }}%">
{% if account.percentage <= 50 %}
{{ account.difference|formatAmountPlain }}
{% endif %}
</div>
<div class="progress-bar progress-bar-danger" style="width: {{ account.percentage }}%">
{% if account.percentage > 50 %}
{{ account.difference|formatAmountPlain }}
{% endif %}
</div>
</div>
{% else %}
<!-- green (pct), then blue (100-pct) -->
<div class="progress">
<div class="progress-bar progress-bar-success" style="width: {{ account.percentage }}%">
{% if account.percentage <= 50 %}
{{ account.difference|formatAmountPlain }}
{{ account.difference|formatAmountPlain }}
{% endif %}
</div>
<div class="progress-bar progress-bar-info" style="width: {{ 100 - account.percentage }}%">
{% if account.percentage > 50 %}
{{ account.difference|formatAmountPlain }}
{% endif %}
</div>
</div>
{% endif %}
</div>
<!-- end -->
<div class="col-lg-2 col-md-2 col-sm-3 col-xs-4">{{ account.endBalance|formatAmount }}</div>
</div>
{% endfor %}
{% endif %}
</div>
<div class="box-footer clearfix">
<span class="pull-right">{{ 'sum'|_ }}: {{ savingsTotal|formatAmount }}</span>
</div>
</div>
</div>
<div class="col-lg-6 col-sm-12 col-md-12">
<!-- PIGGY BANKS -->
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'piggyBanks'|_ }}</h3>
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div>
</div>
<div class="box-body">
{% if piggyBankAccounts|length == 0 %}
<p class="small"><em>{{ 'createPiggyToContinue'|_ }}</em></p>
{% else %}
{% for account in piggyBankAccounts %}
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12"><h5><a
href="{{ route('accounts.show', account.id) }}">{{ account.name }}</a></h5>
</div>
</div>
<div class="row">
<!-- start -->
<div class="col-lg-2 col-md-2 col-sm-3 col-xs-4">{{ account.startBalance|formatAmount }}</div>
<!-- bar -->
<div class="col-lg-8 col-md-8 col-sm-6 col-xs-4">
<div class="progress">
<div class="progress-bar progress-bar-info progress-bar" style="width: {{ 100 - account.percentage }}%">
{% if account.percentage <= 50 %}
{{ account.piggyBalance|formatAmountPlain }} {{ 'divided'|_ }}
{% endif %}
</div>
<div class="progress-bar progress-bar-success progress-bar" style="width: {{ account.percentage }}%">
{% if account.percentage > 50 %}
{{ account.difference|formatAmountPlain }} {{ 'toDivide'|_ }}
{% endif %}
</div>
</div>
</div>
<!-- end -->
<div class="col-lg-2 col-md-2 col-sm-3 col-xs-4">{{ account.piggyBalance|formatAmount }}</div>
</div>
{% endfor %}
{% endif %}
</div>
</div>
</div>
</div>
{% endblock %}
{% block scripts %}
<!-- show tour? -->
<script type="text/javascript">
{% if showTour %}
var showTour = true;
{% else %}
var showTour = false;
{% endif %}
</script>
<script type="text/javascript" src="js/Chart.min.js"></script>
<script type="text/javascript" src="js/Chart.StackedBar.js"></script>
<script type="text/javascript" src="js/charts.js"></script>
<script type="text/javascript" src="js/index.js"></script>
{% endblock %}
{% block styles %}
{% endblock %}

View File

@@ -0,0 +1,15 @@
<div class="popover" role="tooltip">
<div class="arrow"></div>
<h3 class="popover-title"></h3>
<div class="popover-content"></div>
<div class="popover-navigation">
<div class="btn-group">
<button class="btn btn-sm btn-default" data-role="prev">&laquo; {{ 'prev'|_ }}</button>
<button class="btn btn-sm btn-default" data-role="next">{{ 'next'|_ }} &raquo;</button>
<button class="btn btn-sm btn-default" data-role="pause-resume" data-pause-text="{{ 'pause'|_ }}"
data-resume-text="Resume"> {{ 'pause'|_ }}</button>
</div>
<button class="btn btn-sm btn-default" data-role="end">{{ 'end-tour'|_ }}</button>
</div>
</div>

View File

@@ -0,0 +1,228 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="robots" content="noindex, nofolllow, noarchive, noodp, NoImageIndex, noydir">
<title>Firefly
{% if title != "Firefly" %}
// {{ title }}
{% endif %}
{% if subTitle %}
// {{ subTitle }}
{% endif %}
</title>
<base href="{{ route('index') }}/">
<meta content='width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no' name='viewport'>
<link href="bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css"/>
<link href="font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"/>
<link href="dist/css/AdminLTE.min.css" rel="stylesheet" type="text/css"/>
<link href="dist/css/skins/skin-blue-light.min.css" rel="stylesheet" type="text/css"/>
<link href="css/daterangepicker.css" rel="stylesheet" type="text/css"/>
<link href="css/firefly.css" rel="stylesheet" type="text/css"/>
<link href="css/bootstrap-tour.min.css" rel="stylesheet" type="text/css"/>
{% block styles %}{% endblock %}
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body class="skin-blue-light sidebar-mini">
<div class="wrapper">
<header class="main-header">
<!-- Logo -->
<a href="{{ route('index') }}" class="logo">
<!-- mini logo for sidebar mini 50x50 pixels -->
<span class="logo-mini">FF</span>
<!-- logo for regular state and mobile devices -->
<span class="logo-lg"><b>Firefly</b>III</span>
</a>
<!-- Header Navbar: style can be found in header.less -->
<nav class="navbar navbar-static-top" role="navigation">
<!-- Sidebar toggle button-->
<a href="#" class="sidebar-toggle" data-toggle="offcanvas" role="button">
<span class="sr-only">Toggle navigation</span>
</a>
<!-- Navbar Right Menu -->
<div class="navbar-custom-menu">
<ul class="nav navbar-nav">
<li class="hidden-sm hidden-xs">
<a href="#" id="help" data-route="{{ Route.getCurrentRoute.getName }}">
<i class="fa fa-question-circle"></i>
</a>
</li>
<!-- Messages: style can be found in dropdown.less-->
<li>
<span style="color:#fff;padding: 15px;display: block;line-height: 20px;">
<span class="hidden-xs" id="daterange"></span>
</span>
</li>
<!-- Notifications: style can be found in dropdown.less -->
<!-- User Account: style can be found in dropdown.less -->
<li class="dropdown user user-menu">
<span style="cursor:default;color:#fff;padding: 15px;display: block;line-height: 20px;">
<span class="hidden-xs">{{ Auth.user.email }}</span>
</span>
</li>
<li id="sidebar-toggle">
<a href="#" data-toggle="control-sidebar"><i class="fa fa-plus-circle"></i></a>
</li>
</ul>
</div>
</nav>
</header>
<!-- Left side column. contains the logo and sidebar -->
<aside class="main-sidebar">
<!-- sidebar: style can be found in sidebar.less -->
<section class="sidebar">
<!-- search form -->
<form action="{{ route('search') }}" method="get" class="sidebar-form">
<div class="input-group">
<input type="text" name="q" class="form-control" placeholder="Search..." value="{{ query }}"/>
<span class="input-group-btn">
<button type='submit' name='search' id='search-btn' class="btn btn-flat"><i class="fa fa-search"></i></button>
</span>
</div>
</form>
<!-- /.search form -->
<!-- sidebar menu: : style can be found in sidebar.less -->
{% include('partials/menu-sidebar.twig') %}
</section>
<!-- /.sidebar -->
</aside>
<!-- Content Wrapper. Contains page content -->
<div class="content-wrapper">
<!-- Content Header (Page header) -->
<section class="content-header">
{% include('partials/page-header.twig') %}
{% block breadcrumbs %}{% endblock %}
</section>
<!-- Main content -->
<section class="content">
{% include('partials/flashes.twig') %}
<!-- actual content -->
{% block content %}{% endblock %}
</section>
<!-- /.content -->
</div>
<!-- /.content-wrapper -->
<footer class="main-footer">
<div class="pull-right hidden-xs">
<b>Version</b> {{ Config.get('firefly.version') }}
</div>
<strong><a href="https://github.com/JC5/firefly-iii">Firefly III</a></strong>
</footer>
{% include('partials/control-bar.twig') %}
</div>
<!-- ./wrapper -->
<!-- Modal -->
<div class="modal fade" id="defaultModal" tabindex="-1" role="dialog">
</div>
<div class="modal fade" tabindex="-1" role="dialog" id="helpModal">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title" id="helpTitle">&nbsp;</h4>
</div>
<div class="modal-body" id="helpBody">&nbsp;</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">{{ 'close'|_ }}</button>
</div>
</div>
</div>
</div>
<script src="js/jquery-2.1.3.min.js" type="text/javascript"></script>
<script src="bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
<script src="js/moment.min.js" type="text/javascript"></script>
<script src="js/daterangepicker.js" type="text/javascript"></script>
<script src="dist/js/app.min.js" type="text/javascript"></script>
<script type="text/javascript" src="js/accounting.min.js"></script>
<script src="js/bootstrap-tour.min.js" type="text/javascript"></script>
<script type="text/javascript">
// date range picker configuration:
var dateRangeConfig = {
startDate: moment("{{ Session.get('start').format('Y-m-d') }}"),
endDate: moment("{{ Session.get('end').format('Y-m-d') }}"),
linkTitle: "{{ Session.get('start').formatLocalized(monthAndDayFormat) }} - {{ Session.get('end').formatLocalized(monthAndDayFormat) }}",
URL: "{{ route('daterange') }}",
firstDate: moment("{{ Session.get('first').format('Y-m-d') }}"),
currentMonth: "{{ currentMonthName }}",
previousMonth: "{{ previousMonthName }}",
nextMonth: "{{ nextMonthName }}",
everything: '{{ 'everything'|_ }}',
customRangeLabel: '{{ 'customRange'|_ }}',
applyLabel: '{{ 'apply'|_ }}',
cancelLabel: '{{ 'cancel'|_ }}',
fromLabel: '{{ 'from'|_ }}',
toLabel: '{{ 'to'|_ }}'
};
var token = "{{ csrf_token() }}";
var language = "{{ language }}";
var currencyCode = '{{ getCurrencyCode() }}';
var currencySymbol = '{{ getCurrencySymbol()|raw }}';
var mon_decimal_point = "{{ localeconv.mon_decimal_point }}";
var mon_thousands_sep = "{{ localeconv.mon_thousands_sep }}";
var frac_digits = {{ localeconv.frac_digits }};
</script>
<script type="text/javascript" src="js/firefly.js"></script>
<script type="text/javascript" src="js/help.js"></script>
{% block scripts %}{% endblock %}
{% if env('ANALYTICS_ID','') != '' %}
<script>
// send pageview
(function (i, s, o, g, r, a, m) {
i['GoogleAnalyticsObject'] = r;
i[r] = i[r] || function () {
(i[r].q = i[r].q || []).push(arguments)
}, i[r].l = 1 * new Date();
a = s.createElement(o),
m = s.getElementsByTagName(o)[0];
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m)
})(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
ga('create', '{{ env('ANALYTICS_ID', 'XXX-XX-X') }}', {'siteSpeedSampleRate': 100});
ga('send', 'pageview');
// send an event if relevant:
{% if Session.has('gaEventCategory') and Session.has('gaEventAction') and not Session.has('gaEventLabel') %}
ga('send', 'event', '{{ Session.get('gaEventCategory') }}', '{{ Session.get('gaEventAction') }}');
{% endif %}
// send event if relevant:
{% if Session.has('gaEventCategory') and Session.has('gaEventAction') and Session.has('gaEventLabel') %}
ga('send', 'event', '{{ Session.get('gaEventCategory') }}', '{{ Session.get('gaEventAction') }}', '{{ Session.get('gaEventLabel') }}');
{% endif %}
</script>
{% endif %}
</body>
</html>

View File

@@ -0,0 +1,80 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="robots" content="noindex, nofolllow, noarchive, noodp, NoImageIndex, noydir">
<title>Firefly III</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta content='width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no' name='viewport'>
<base href="{{ route('index') }}/">
<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css" type="text/css" media="all"/>
<link rel="stylesheet" href="font-awesome/css/font-awesome.min.css" type="text/css" media="all"/>
<link href="dist/css/AdminLTE.min.css" rel="stylesheet" type="text/css"/>
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
<!-- favicons -->
<link rel="apple-touch-icon" sizes="57x57" href="/apple-touch-icon-57x57.png?v=Lb54KlrQnz">
<link rel="apple-touch-icon" sizes="60x60" href="/apple-touch-icon-60x60.png?v=Lb54KlrQnz">
<link rel="apple-touch-icon" sizes="72x72" href="/apple-touch-icon-72x72.png?v=Lb54KlrQnz">
<link rel="apple-touch-icon" sizes="76x76" href="/apple-touch-icon-76x76.png?v=Lb54KlrQnz">
<link rel="apple-touch-icon" sizes="114x114" href="/apple-touch-icon-114x114.png?v=Lb54KlrQnz">
<link rel="apple-touch-icon" sizes="120x120" href="/apple-touch-icon-120x120.png?v=Lb54KlrQnz">
<link rel="apple-touch-icon" sizes="144x144" href="/apple-touch-icon-144x144.png?v=Lb54KlrQnz">
<link rel="apple-touch-icon" sizes="152x152" href="/apple-touch-icon-152x152.png?v=Lb54KlrQnz">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon-180x180.png?v=Lb54KlrQnz">
<link rel="icon" type="image/png" href="/favicon-32x32.png?v=Lb54KlrQnz" sizes="32x32">
<link rel="icon" type="image/png" href="/android-chrome-192x192.png?v=Lb54KlrQnz" sizes="192x192">
<link rel="icon" type="image/png" href="/favicon-96x96.png?v=Lb54KlrQnz" sizes="96x96">
<link rel="icon" type="image/png" href="/favicon-16x16.png?v=Lb54KlrQnz" sizes="16x16">
<link rel="manifest" href="/manifest.json?v=Lb54KlrQnz">
<link rel="shortcut icon" href="/favicon.ico?v=Lb54KlrQnz">
<meta name="msapplication-TileColor" content="#2d89ef">
<meta name="msapplication-TileImage" content="/mstile-144x144.png?v=Lb54KlrQnz">
<meta name="theme-color" content="#ffffff">
</head>
<body class="login-page">
<div class="login-box">
<div class="login-logo">
<a href="{{ route('index') }}"><b>Firefly</b>III</a>
</div>
{% block content %}{% endblock %}
</div>
<!-- /.login-box -->
<script type="text/javascript" src="js/jquery-2.1.3.min.js"></script>
<script type="text/javascript" src="bootstrap/js/bootstrap.min.js"></script>
{% if env('ANALYTICS_ID','') != '' %}
<script>
// send pageview
(function (i, s, o, g, r, a, m) {
i['GoogleAnalyticsObject'] = r;
i[r] = i[r] || function () {
(i[r].q = i[r].q || []).push(arguments)
}, i[r].l = 1 * new Date();
a = s.createElement(o),
m = s.getElementsByTagName(o)[0];
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m)
})(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
ga('create', '{{ env('ANALYTICS_ID', 'XXX-XX-X') }}', {'siteSpeedSampleRate': 100});
ga('send', 'pageview');
// send an event if relevant:
{% if Session.has('gaEventCategory') and Session.has('gaEventAction') and not Session.has('gaEventLabel') %}
ga('send', 'event', '{{ Session.get('gaEventCategory') }}', '{{ Session.get('gaEventAction') }}');
{% endif %}
// send event if relevant:
{% if Session.has('gaEventCategory') and Session.has('gaEventAction') and Session.has('gaEventLabel') %}
ga('send', 'event', '{{ Session.get('gaEventCategory') }}', '{{ Session.get('gaEventAction') }}', '{{ Session.get('gaEventLabel') }}');
{% endif %}
</script>
{% endif %}
</body>
</html>

View File

@@ -0,0 +1,81 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="robots" content="noindex, nofolllow, noarchive, noodp, NoImageIndex, noydir">
<title>Firefly III</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta content='width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no' name='viewport'>
<base href="{{ route('index') }}/">
<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css" type="text/css" media="all"/>
<link rel="stylesheet" href="font-awesome/css/font-awesome.min.css" type="text/css" media="all"/>
<link href="dist/css/AdminLTE.min.css" rel="stylesheet" type="text/css"/>
<link href="css/firefly.css" rel="stylesheet" type="text/css"/>
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
<!-- favicons -->
<link rel="apple-touch-icon" sizes="57x57" href="/apple-touch-icon-57x57.png?v=Lb54KlrQnz">
<link rel="apple-touch-icon" sizes="60x60" href="/apple-touch-icon-60x60.png?v=Lb54KlrQnz">
<link rel="apple-touch-icon" sizes="72x72" href="/apple-touch-icon-72x72.png?v=Lb54KlrQnz">
<link rel="apple-touch-icon" sizes="76x76" href="/apple-touch-icon-76x76.png?v=Lb54KlrQnz">
<link rel="apple-touch-icon" sizes="114x114" href="/apple-touch-icon-114x114.png?v=Lb54KlrQnz">
<link rel="apple-touch-icon" sizes="120x120" href="/apple-touch-icon-120x120.png?v=Lb54KlrQnz">
<link rel="apple-touch-icon" sizes="144x144" href="/apple-touch-icon-144x144.png?v=Lb54KlrQnz">
<link rel="apple-touch-icon" sizes="152x152" href="/apple-touch-icon-152x152.png?v=Lb54KlrQnz">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon-180x180.png?v=Lb54KlrQnz">
<link rel="icon" type="image/png" href="/favicon-32x32.png?v=Lb54KlrQnz" sizes="32x32">
<link rel="icon" type="image/png" href="/android-chrome-192x192.png?v=Lb54KlrQnz" sizes="192x192">
<link rel="icon" type="image/png" href="/favicon-96x96.png?v=Lb54KlrQnz" sizes="96x96">
<link rel="icon" type="image/png" href="/favicon-16x16.png?v=Lb54KlrQnz" sizes="16x16">
<link rel="manifest" href="/manifest.json?v=Lb54KlrQnz">
<link rel="shortcut icon" href="/favicon.ico?v=Lb54KlrQnz">
<meta name="msapplication-TileColor" content="#2d89ef">
<meta name="msapplication-TileImage" content="/mstile-144x144.png?v=Lb54KlrQnz">
<meta name="theme-color" content="#ffffff">
</head>
<body class="login-page">
<div class="login-box">
<div class="login-logo">
<a href="{{ route('index') }}"><b>Firefly</b>III</a>
</div>
{% block content %}{% endblock %}
</div>
<!-- /.login-box -->
<script type="text/javascript" src="js/jquery-2.1.3.min.js"></script>
<script type="text/javascript" src="bootstrap/js/bootstrap.min.js"></script>
{% if env('ANALYTICS_ID','') != '' %}
<script>
// send pageview
(function (i, s, o, g, r, a, m) {
i['GoogleAnalyticsObject'] = r;
i[r] = i[r] || function () {
(i[r].q = i[r].q || []).push(arguments)
}, i[r].l = 1 * new Date();
a = s.createElement(o),
m = s.getElementsByTagName(o)[0];
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m)
})(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
ga('create', '{{ env('ANALYTICS_ID', 'XXX-XX-X') }}', {'siteSpeedSampleRate': 100});
ga('send', 'pageview');
// send an event if relevant:
{% if Session.has('gaEventCategory') and Session.has('gaEventAction') and not Session.has('gaEventLabel') %}
ga('send', 'event', '{{ Session.get('gaEventCategory') }}', '{{ Session.get('gaEventAction') }}');
{% endif %}
// send event if relevant:
{% if Session.has('gaEventCategory') and Session.has('gaEventAction') and Session.has('gaEventLabel') %}
ga('send', 'event', '{{ Session.get('gaEventCategory') }}', '{{ Session.get('gaEventAction') }}', '{{ Session.get('gaEventLabel') }}');
{% endif %}
</script>
{% endif %}
</body>
</html>

View File

@@ -0,0 +1,61 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th data-defaultsort="disabled">&nbsp;</th>
<th>{{ trans('list.name') }}</th>
{% if what == 'asset' %}
<th class="hidden-sm hidden-xs">{{ trans('list.role') }}</th>
{% endif %}
<th>{{ trans('list.iban') }}</th>
<th>{{ trans('list.currentBalance') }}</th>
<th class="hidden-sm hidden-xs">{{ trans('list.active') }}</th>
<th class="hidden-sm hidden-xs">{{ trans('list.lastActivity') }}</th>
<th class="hidden-sm hidden-xs">{{ trans('list.balanceDiff', {'start' : Session.get('start').formatLocalized(monthAndDayFormat),'end' : Session.get('end').formatLocalized(monthAndDayFormat)}) }}</th>
</tr>
</thead>
<tbody>
{% for account in accounts %}
<tr>
<td>
<div class="btn-group btn-group-xs">
<a class="btn btn-default btn-xs" href="{{ route('accounts.edit',account.id) }}"><i class="fa fa-fw fa-pencil"></i></a>
<a class="btn btn-danger btn-xs" href="{{ route('accounts.delete',account.id) }}"><i class="fa fa-fw fa-trash-o"></i></a>
</div>
</td>
<td><a href="{{ route('accounts.show',account.id) }}">{{ account.name }}</a></td>
{% if what == "asset" %}
<td class="hidden-sm hidden-xs">
{% for entry in account.accountmeta %}
{% if entry.name == 'accountRole' %}
{{ entry.data|getAccountRole }}
{% endif %}
{% endfor %}
</td>
{% endif %}
<td>{{ account.iban }}</td>
<td data-value="{{ account.endBalance }}">{{ account.endBalance|formatAmount }}</td>
<td class="hidden-sm hidden-xs" data-value="{{ account.active }}">
{% if account.active %}
<i class="fa fa-fw fa-check"></i>
{% else %}
<i class="fa fa-fw fa-ban"></i>
{% endif %}
</td>
{% if account.lastActivityDate %}
<td class="hidden-sm hidden-xs" data-value="{{ account.lastActivityDate.format('U') }} ">
{{ account.lastActivityDate.formatLocalized(monthAndDayFormat) }}
</td>
{% else %}
<td class="hidden-sm hidden-xs" data-value="0">
<em>{{ 'never'|_ }}</em>
</td>
{% endif %}
<td class="hidden-sm hidden-xs" data-value="{{ account.endBalance - account.startBalance }}">
{{ (account.endBalance - account.startBalance)|formatAmount }}
</td>
</tr>
{% endfor %}
</tbody>
</table>

View File

@@ -0,0 +1,82 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th data-defaultsort="disabled">&nbsp;</th>
<th>{{ trans('list.name') }}</th>
<th class="hidden-sm hidden-xs">{{ trans('list.matchesOn') }}</th>
<th colspan="2">{{ trans('list.matchingAmount') }}</th>
<th class="hidden-sm hidden-xs">{{ trans('list.lastMatch') }}</th>
<th class="hidden-sm hidden-xs">{{ trans('list.expectedMatch') }}</th>
<th class="hidden-sm hidden-xs">{{ trans('list.active') }}</th>
<th class="hidden-sm hidden-xs">{{ trans('list.automatch') }}</th>
<th class="hidden-sm hidden-xs">{{ trans('list.repeat_freq') }}</th>
</tr>
</thead>
<tbody>
{% for entry in bills %}
<tr>
<td>
<div class="btn-group btn-group-xs">
<a href="{{ route('bills.edit',entry.id) }}" class="btn btn-default btn-xs"><i class="fa fa-fw fa-pencil"></i></a>
<a href="{{ route('bills.delete',entry.id) }}" class="btn btn-danger btn-xs"><i class="fa fa-fw fa-trash-o"></i></a>
</div>
</td>
<td>
<a href="{{ route('bills.show',entry.id) }}" title="{{ entry.name }}">{{ entry.name }}</a>
</td>
<td class="hidden-sm hidden-xs" data-value="{{ entry.match }}">
{% for match in entry.match|split(',') %}
<span class="label label-info">{{ match }}</span>
{% endfor %}
</td>
<td data-value="{{ entry.amount_min }}">
{{ entry.amount_min|formatAmount }}
</td>
<td data-value="{{ entry.amount_max }}">
{{ entry.amount_max|formatAmount }}
</td>
{% if entry.lastFoundMatch %}
<td class="hidden-sm hidden-xs" data-value="{{ entry.lastFoundMatch.format('U') }}">
{{ entry.lastFoundMatch.formatLocalized(monthAndDayFormat) }}
</td>
{% else %}
<td class="hidden-sm hidden-xs" data-value="0">
<em>{{ 'unknown'|_ }}</em>
</td>
{% endif %}
{% if entry.nextExpectedMatch %}
<td class="hidden-sm hidden-xs" data-value="{{ entry.nextExpectedMatch.format('U') }}">
{{ entry.nextExpectedMatch.formatLocalized(monthAndDayFormat) }}
</td>
{% else %}
<td class="hidden-sm hidden-xs" data-value="0">
<em>{{ 'unknown'|_ }}</em>
</td>
{% endif %}
<td class="hidden-sm hidden-xs" data-value="{{ entry.active }}">
{% if entry.active %}
<i class="fa fa-fw fa-check"></i>
{% else %}
<i class="fa fa-fw fa-ban"></i>
{% endif %}
</td>
<td class="hidden-sm hidden-xs" data-value="{{ entry.automatch }}">
{% if entry.automatch %}
<i class="fa fa-fw fa-check"></i>
{% else %}
<i class="fa fa-fw fa-ban"></i>
{% endif %}
</td>
<td class="hidden-sm hidden-xs" data-value="{{ entry.repeat_freq }}{{ entry.skip }}">
{{ entry.repeat_freq|_ }}
{% if entry.skip > 0 %}
skips over {{ entry.skip }}
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>

View File

@@ -0,0 +1,38 @@
<table class="table table-hover sortable">
<thead>
<tr>
<th data-defaultsort="disabled">&nbsp;</th>
<th>{{ trans('list.name') }}</th>
<th class="hidden-sm hidden-xs">{{ trans('list.lastActivity') }}</th>
</tr>
</thead>
<tbody>
<tr>
<td>&nbsp;</td>
<td><a href="{{ route('categories.noCategory') }}"><em>{{ 'without_category'|_ }}</em></a></td>
<td class="hidden-sm hidden-xs">&nbsp;</td>
</tr>
{% for category in categories %}
<tr>
<td>
<div class="btn-group btn-group-xs">
<a href="{{ route('categories.edit', category.id) }}" class="btn btn-default btn-xs"><i class="fa fa-fw fa-pencil"></i></a>
<a href="{{ route('categories.delete', category.id) }}" class="btn btn-danger btn-xs"><i class="fa fa-fw fa-trash-o"></i></a>
</div>
</td>
<td>
<a href="{{ route('categories.show', category.id) }}" title="{{ category.name }}">{{ category.name }}</a>
</td>
{% if category.lastActivity %}
<td class="hidden-sm hidden-xs" data-value="{{ category.lastActivity.format('U') }}">
{{ category.lastActivity.formatLocalized(monthAndDayFormat) }}
</td>
{% else %}
<td class="hidden-sm hidden-xs" data-value="0">
<em>{{ 'never'|_ }}</em>
</td>
{% endif %}
</tr>
{% endfor %}
</tbody>
</table>

View File

@@ -0,0 +1,17 @@
<div class="list-group">
{% for journal in transactions %}
<a class="list-group-item" title="{{ journal.date.formatLocalized(trans('config.month_and_day')) }}" href="{{ route('transactions.show',journal.id) }}">
{{ journal|typeIcon }}
{{ journal.description }}
<span class="pull-right small">
{{ journal|formatJournal }}
</span>
</a>
{% endfor %}
</div>

View File

@@ -0,0 +1,139 @@
{{ journals.render|raw }}
<table class="table table-hover {% if sorting %}sortable-table{% endif %}">
<thead>
<tr class="ignore">
<th class="hidden-xs" colspan="2">&nbsp;</th>
<th>{{ trans('list.description') }}</th>
<th>{{ trans('list.amount') }}</th>
<th class="hidden-sm hidden-xs">{{ trans('list.date') }}</th>
<th class="hidden-xs">{{ trans('list.from') }}</th>
<th class="hidden-xs">{{ trans('list.to') }}</th>
<!-- Hide budgets? -->
{% if not hideBudgets %}
<th class="hidden-xs"><i class="fa fa-tasks fa-fw" title="{{ trans('list.budget') }}"></i></th>
{% endif %}
<!-- Hide categories? -->
{% if not hideCategories %}
<th class="hidden-xs"><i class="fa fa-bar-chart fa-fw" title="{{ trans('list.category') }}"></i></th>
{% endif %}
<!-- Hide bills? -->
{% if not hideBills %}
<th class="hidden-xs"><i class="fa fa-fw fa-rotate-right" title="{{ trans('list.bill') }}"></i></th>
{% endif %}
</tr>
</thead>
<tbody>
{% set _sum = 0 %}
{% for journal in journals %}
{% if invalidJournal(journal) %}
<tr class="ignore">
<td>
<div class="btn-group btn-group-xs">
<a href="{{ route("transactions.delete",journal.id) }}" class="btn btn-xs btn-danger"><i class="fa fa-fw fa-trash-o"></i></a>
</div>
</td>
<td>&nbsp;</td>
<td>{{ journal.description }}</td>
<td colspan="7"><em>Invalid journal: Found {{ journal.transactions|length }} transaction(s)</em></td>
</tr>
{% else %}
{% set _sum = _sum + journal.amount %}
<tr class="drag" data-date="{{ journal.date.format('Y-m-d') }}" data-id="{{ journal.id }}">
<td class="hidden-xs">
<div class="btn-group btn-group-xs">
{% if sorting %}
<a href="#" class="handle btn btn-default btn-xs"><i class="fa fa-fw fa-arrows-v"></i></a>
{% endif %}
<a href="{{ route('transactions.edit',journal.id) }}" class="btn btn-xs btn-default"><i class="fa fa-fw fa-pencil"></i></a>
<a href="{{ route('transactions.delete',journal.id) }}" class="btn btn-xs btn-danger"><i class="fa fa-fw fa-trash-o"></i></a>
</div>
</td>
<td class="hidden-xs">
{{ journal|typeIcon }}
</td>
<td>
<a href="{{ route('transactions.show',journal.id) }}" title="{{ journal.description }}">{{ journal.description }}</a>
{% if journal.attachments|length > 0 %}
<i class="fa fa-paperclip pull-right"
title="{{ Lang.choice('firefly.nr_of_attachments', journal.attachments|length, {count: journal.attachments|length}) }}"></i>
{% endif %}
</td>
<td>
{{ journal|formatJournal }}
</td>
<td class="hidden-sm hidden-xs">
{{ journal.date.formatLocalized(monthAndDayFormat) }}
</td>
<td class="hidden-xs">
{% if journal.source_account.accountType.type == 'Cash account' %}
<span class="text-success">(cash)</span>
{% else %}
<a href="{{ route('accounts.show',journal.source_account.id) }}">{{ journal.source_account.name }}</a>
{% endif %}
</td>
<td class="hidden-xs">
{% if journal.destination_account.accountType.type == 'Cash account' %}
<span class="text-success">(cash)</span>
{% else %}
<a href="{{ route('accounts.show',journal.destination_account.id) }}">{{ journal.destination_account.name }}</a>
{% endif %}
</td>
<!-- Do NOT hide the budget? -->
{% if not hideBudgets %}
<td class="hidden-xs">
{% if journal.budgets[0] %}
<a href="{{ route('budgets.show',journal.budgets[0].id) }}">{{ journal.budgets[0].name }}</a>
{% endif %}
</td>
{% endif %}
<!-- Do NOT hide the category? -->
{% if not hideCategories %}
<td class="hidden-xs">
{% if journal.categories[0] %}
<a href="{{ route('categories.show',journal.categories[0].id) }}">{{ journal.categories[0].name }}</a>
{% endif %}
</td>
{% endif %}
<!-- Do NOT hide the bill? -->
{% if not hideBills %}
<td class="hidden-xs">
{% if journal.bill %}
<a href="{{ route('bills.show',journal.bill_id) }}">{{ journal.bill.name }}</a>
{% endif %}
</td>
{% endif %}
</tr>
{% endif %}
{% endfor %}
</tbody>
<tfoot>
{% if showPageSum %}
<tr>
<td colspan="3" style="text-align: right;"><em>{{ 'sum'|_ }}</em></td>
<td colspan="2">{{ _sum|formatAmount }}</td>
</tr>
{% endif %}
{% if showPeriodSum %}
<tr>
<td colspan="3" style="text-align: right;"><em>{{ 'period_sum'|_ }}</em></td>
<td colspan="2">{{ periodSum|formatAmount }}</td>
</tr>
{% endif %}
{% if showTotalSum %}
<tr>
<td colspan="3" style="text-align: right;"><em>{{ 'total_sum'|_ }}</em></td>
<td colspan="2">{{ totalSum|formatAmount }}</td>
</tr>
{% endif %}
</tfoot>
</table>
{{ journals.render|raw }}

View File

@@ -0,0 +1,34 @@
<table class="table table-hover">
<tr>
{% if showPiggyBank %}
<th>Piggy bank</th>
{% endif %}
<th>{{ trans('list.date') }}</th>
<th>{{ trans('list.amount') }}</th>
</tr>
{% for event in events %}
<tr>
{% if showPiggyBank %}
<td>
<a href="{{ route('piggy-banks.show',event.piggyBank.id) }}">{{ event.piggyBank.name }}</a>
</td>
{% endif %}
<td>
{% if event.transaction_journal_id %}
<a href="{{ route('transactions.show',event.transaction_journal_id) }}"
title="{{ event.transactionJournal.description }}">{{ event.date.formatLocalized(monthAndDayFormat) }}</a>
{% else %}
{{ event.date.formatLocalized(monthAndDayFormat) }}
{% endif %}
</td>
<td>
{% if event.amount < 0 %}
<span class="text-danger">{{ trans('firefly.removed_amount', {amount: (event.amount)|formatAmountPlain})|raw }}</span>
{% else %}
<span class="text-success">{{ trans('firefly.added_amount', {amount: (event.amount)|formatAmountPlain})|raw }}</span>
{% endif %}
</td>
</tr>
{% endfor %}
</table>

View File

@@ -0,0 +1,61 @@
<table class="table table-hover table-condensed" id="sortable">
<tbody>
{% for piggyBank in piggyBanks %}
<tr data-id="{{ piggyBank.id }}">
<td style="width:60px;" class="hidden-sm hidden-xs">
<i class="fa fa-fw fa-bars handle"></i>
<i class="loadSpin"></i>
</td>
<td style="width:100px;" class="hidden-sm hidden-xs">
<div class="btn-group btn-group-xs">
<a href="{{ route('piggy-banks.edit', piggyBank.id) }}" class="btn btn-default btn-xs"><i class="fa fa-pencil fa-fw"></i></a>
<a href="{{ route('piggy-banks.delete', piggyBank.id) }}" class="btn btn-danger btn-xs"><i class="fa fa-trash fa-fw"></i></a>
</div>
</td>
<td>
<a href="{{ route('piggy-banks.show', piggyBank.id) }}" title="{{ piggyBank.order }}">{{ piggyBank.name }}</a>
</td>
<td>
<span title="Saved so far">{{ piggyBank.savedSoFar|formatAmountPlain }}</span>
</td>
<td class="hidden-sm hidden-xs" style="text-align:right;width:40px;">
{% if piggyBank.savedSoFar > 0 %}
<a href="{{ route('piggy-banks.removeMoney', piggyBank.id) }}" class="btn btn-default btn-xs removeMoney" data-id="{{ piggyBank.id }}">
<i data-id="{{ piggyBank.id }}" class="fa fa-minus"></i></a>
{% endif %}
</td>
<td class="hidden-sm hidden-xs">
<div class="progress progress" style="margin-bottom:0;">
<div
{% if piggyBank.percentage == 100 %}
class="progress-bar progress-bar-success"
{% elseif piggyBank.percentage == 0 %}
class="progress-bar progress-bar-warning"
{% else %}
class="progress-bar progress-bar-info"
{% endif %}
role="progressbar" aria-valuenow="{{ piggyBank.percentage }}" aria-valuemin="0" aria-valuemax="100"
style="min-width: 30px;width: {{ piggyBank.percentage }}%;">
{{ piggyBank.percentage }}%
</div>
</div>
</td>
<td class="hidden-sm hidden-xs" style="width:40px;">
{% if piggyBank.leftToSave > 0 %}
<a href="{{ route('piggy-banks.addMoney', piggyBank.id) }}" class="btn btn-default btn-xs addMoney" data-id="{{ piggyBank.id }}">
<i data-id="{{ piggyBank.id }}" class="fa fa-plus"></i></a>
{% endif %}
</td>
<td class="hidden-sm hidden-xs" style="width:200px;">
<span title="Target amount">{{ piggyBank.targetamount|formatAmount }}</span>
{% if piggyBank.leftToSave > 0 %}
<span title="Left to save">({{ piggyBank.leftToSave|formatAmount }})</span>
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>

View File

@@ -0,0 +1,50 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName) }}
{% endblock %}
{% block content %}
<form action="{{ route('new-user.submit') }}" method="post" id="store" class="form-horizontal">
<input type="hidden" name="_token" value="{{ csrf_token() }}"/>
<div class="row">
<div class="col-lg-6 col-sm-8 col-xs-12">
<div class="box box-primary">
<div class="box-header with-border">
<h3 class="box-title">{{ 'getting_started'|_ }}</h3>
</div>
<div class="box-body">
<p>
{{ 'to_get_started'|_ }}
</p>
{{ ExpandedForm.text('bank_name') }}
{{ ExpandedForm.balance('bank_balance') }}
<p>
{{ 'savings_balance_text'|_ }}
</p>
{{ ExpandedForm.balance('savings_balance') }}
<p>
{{ 'cc_balance_text'|_ }}
</p>
{{ ExpandedForm.balance('credit_card_limit') }}
</div>
<div class="box-footer">
<input type="submit" name="submit" value="{{ 'submit'|_ }}" class="btn btn-success pull-right"/>
</div>
</div>
</div>
</div>
</form>
{% endblock %}

View File

@@ -0,0 +1,67 @@
<!-- Info boxes -->
<div class="row hidden-sm hidden-xs">
<div class="col-md-3 col-sm-6 col-xs-12">
<div class="info-box">
<span class="info-box-icon bg-red">
<i class="fa fa-upload fa-fw"></i>
</span>
<div class="info-box-content">
<span class="info-box-text">{{ 'moneyOut'|_ }}</span>
<span class="info-box-number" id="box-out"></span>
</div>
<!-- /.info-box-content -->
</div>
<!-- /.info-box -->
</div>
<!-- /.col -->
<div class="col-md-3 col-sm-6 col-xs-12">
<div class="info-box">
<span class="info-box-icon bg-green">
<i class="fa fa-download faw-fw"></i>
</span>
<div class="info-box-content">
<span class="info-box-text">{{ 'moneyIn'|_ }}</span>
<span class="info-box-number" id="box-in"></span>
</div>
<!-- /.info-box-content -->
</div>
<!-- /.info-box -->
</div>
<!-- /.col -->
<!-- fix for small devices only -->
<div class="clearfix visible-sm-block"></div>
<div class="col-md-3 col-sm-6 col-xs-12">
<div class="info-box">
<span class="info-box-icon bg-blue">
<i class="fa fa-calendar fa-fw"></i>
</span>
<div class="info-box-content">
<span class="info-box-text">{{ 'billsToPay'|_ }}</span>
<span class="info-box-number" id="box-bills-unpaid"></span>
</div>
<!-- /.info-box-content -->
</div>
<!-- /.info-box -->
</div>
<!-- /.col -->
<div class="col-md-3 col-sm-6 col-xs-12">
<div class="info-box">
<span class="info-box-icon bg-aqua">
<i class="fa fa-line-chart fa-fw"></i>
</span>
<div class="info-box-content">
<span class="info-box-text">{{ 'billsPaid'|_ }}</span>
<span class="info-box-number" id="box-bills-paid"></span>
</div>
<!-- /.info-box-content -->
</div>
<!-- /.info-box -->
</div>
<!-- /.col -->
</div><!-- /.row -->

View File

@@ -0,0 +1,112 @@
<!-- Control Sidebar -->
<aside class="control-sidebar control-sidebar-dark">
<!-- Tab panes -->
<div class="tab-content">
<!-- Home tab content -->
<div class="tab-panel active" id="control-sidebar-home-tab">
<h3 class="control-sidebar-heading">{{ 'create_new_stuff'|_ }}</h3>
<ul class='control-sidebar-menu'>
<li>
<a href="{{ route('transactions.create', 'withdrawal') }}">
<i class="menu-icon fa fa-long-arrow-left bg-red"></i>
<div class="menu-info">
<h4 class="control-sidebar-subheading">{{ 'new_withdrawal'|_ }}</h4>
</div>
</a>
</li>
<li>
<a href="{{ route('transactions.create', 'deposit') }}">
<i class="menu-icon fa fa-long-arrow-right bg-green"></i>
<div class="menu-info">
<h4 class="control-sidebar-subheading">{{ 'new_deposit'|_ }}</h4>
</div>
</a>
</li>
<li>
<a href="{{ route('transactions.create', 'transfer') }}">
<i class="menu-icon fa fa-exchange bg-blue"></i>
<div class="menu-info">
<h4 class="control-sidebar-subheading">{{ 'new_transfer'|_ }}</h4>
</div>
</a>
</li>
<li>
<a href="{{ route('accounts.create', 'asset') }}">
<i class="menu-icon fa fa-money bg-maroon"></i>
<div class="menu-info">
<h4 class="control-sidebar-subheading">{{ 'new_asset_account'|_ }}</h4>
</div>
</a>
</li>
<li>
<a href="{{ route('accounts.create', 'expense') }}">
<i class="menu-icon fa fa-shopping-cart bg-maroon"></i>
<div class="menu-info">
<h4 class="control-sidebar-subheading">{{ 'new_expense_account'|_ }}</h4>
</div>
</a>
</li>
<li>
<a href="{{ route('accounts.create', 'revenue') }}">
<i class="menu-icon fa fa-download bg-maroon"></i>
<div class="menu-info">
<h4 class="control-sidebar-subheading">{{ 'new_revenue_account'|_ }}</h4>
</div>
</a>
</li>
<li>
<a href="{{ route('budgets.create') }}">
<i class="menu-icon fa fa-download bg-red"></i>
<div class="menu-info">
<h4 class="control-sidebar-subheading">{{ 'new_budget'|_ }}</h4>
</div>
</a>
</li>
<li>
<a href="{{ route('categories.create') }}">
<i class="menu-icon fa fa-download bg-red"></i>
<div class="menu-info">
<h4 class="control-sidebar-subheading">{{ 'new_category'|_ }}</h4>
</div>
</a>
</li>
<li>
<a href="{{ route('piggy-banks.create') }}">
<i class="menu-icon fa fa-sort-amount-asc bg-teal"></i>
<div class="menu-info">
<h4 class="control-sidebar-subheading">{{ 'new_piggy_bank'|_ }}</h4>
</div>
</a>
</li>
<li>
<a href="{{ route('bills.create') }}">
<i class="menu-icon fa fa-download bg-purple"></i>
<div class="menu-info">
<h4 class="control-sidebar-subheading">{{ 'new_bill'|_ }}</h4>
</div>
</a>
</li>
</ul>
<!-- /.control-sidebar-menu -->
</div>
<!-- /.tab-pane -->
</div>
</aside><!-- /.control-sidebar -->
<!-- Add the sidebar's background. This div must be placed
immediately after the control sidebar -->
<div class='control-sidebar-bg'></div>

View File

@@ -0,0 +1,62 @@
{% if Session.has('success') %}
<div class="alert alert-success alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">{{ 'close'|_ }}</span></button>
<strong>Success!</strong> {{ Session.get('success') }}
</div>
{% endif %}
{% if Session.has('info') %}
<div class="alert alert-info alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">{{ 'close'|_ }}</span></button>
{% if Session.get('info') is iterable and Session.get('info')|length > 1 %}
<strong>{{ Session.get('info')|length }} messages:</strong>
<ul class="list-unstyled">
{% for err in Session.get('info') %}
<li>{{ err }}</li>
{% endfor %}
</ul>
{% endif %}
{% if Session.get('info') is iterable and Session.get('info')|length == 1 %}
<strong>Message:</strong> {{ Session.get('info')[0]|raw }}
{% endif %}
{% if Session.get('info') is not iterable %}
<strong>Message:</strong> {{ Session.get('info')|raw }}
{% endif %}
</div>
{% endif %}
{% if Session.has('warning') %}
<div class="alert alert-warning alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">{{ 'close'|_ }}</span></button>
<strong>Warning!</strong> {{ Session.get('warning') }}
</div>
{% endif %}
{% if Session.has('error') %}
<div class="alert alert-danger alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">{{ 'close'|_ }}</span></button>
{% if Session.get('error') is iterable and Session.get('error')|length > 1 %}
<strong>{{ Session.get('error')|length }} errors:</strong>
<ul class="list-unstyled">
{% for err in Session.get('error') %}
<li>{{ err }}</li>
{% endfor %}
</ul>
{% endif %}
{% if Session.get('error') is iterable and Session.get('error')|length == 1 %}
<strong>Error!</strong>
{{ Session.get('error')[0]|raw }}
{% endif %}
{% if Session.get('error') is not iterable %}
<strong>Error!</strong> {{ Session.get('error')|raw }}
{% endif %}
</div>
{% endif %}

View File

@@ -0,0 +1,147 @@
<ul class="sidebar-menu">
<!-- home / dashboard -->
<li class="{{ activeRouteStrict('index') }} treeview">
<a href="{{ route('index') }}"><i class="fa fa-dashboard fa-fw"></i>
<span>{{ 'dashboard'|_ }}</span></a>
</li>
<!-- accounts -->
<li class="{{ activeRoutePartial('accounts') }} treeview" id="account-menu">
<a href="#">
<i class="fa fa-credit-card fa-fw"></i>
<span>{{ 'accounts'|_ }}</span>
<i class="fa fa-angle-left pull-right"></i>
</a>
<!-- submenu for accounts -->
<ul class="treeview-menu">
<li class="{{ activeRoutePartialWhat('accounts', 'asset') }}">
<a href="{{ route('accounts.index','asset') }}">
<i class="fa fa-money fa-fw"></i> {{ 'asset_accounts'|_ }}
</a>
</li>
<li class="{{ activeRoutePartialWhat('accounts', 'expense') }}">
<a href="{{ route('accounts.index','expense') }}">
<i class="fa fa-shopping-cart fa-fw"></i> {{ 'expense_accounts'|_ }}
</a>
</li>
<li class="{{ activeRoutePartialWhat('accounts', 'revenue') }}">
<a href="{{ route('accounts.index','revenue') }}">
<i class="fa fa-download fa-fw"></i> {{ 'revenue_accounts'|_ }}
</a>
</li>
</ul>
</li>
<!-- budgets-->
<li class="{{ activeRoutePartial('budgets') }}" id="budget-menu">
<a href="{{ route('budgets.index') }}">
<i class="fa fa-tasks fa-fw"></i>
<span>{{ 'budgets'|_ }}</span>
</a>
</li>
<!-- categories -->
<li class="{{ activeRoutePartial('categories') }}">
<a href="{{ route('categories.index') }}">
<i class="fa fa-bar-chart fa-fw"></i>
<span>{{ 'categories'|_ }}</span>
</a>
</li>
<!-- tags -->
<li class="{{ activeRoutePartial('tags') }}">
<a href="{{ route('tags.index') }}">
<i class="fa fa-tags fa-fw"></i>
<span>{{ 'tags'|_ }}</span>
</a>
</li>
<!-- reports -->
<li class="{{ activeRoutePartial('reports') }}" id="report-menu">
<a href="{{ route('reports.index') }}">
<i class="fa fa-line-chart fa-fw"></i>
<span>{{ 'reports'|_ }}</span>
</a>
</li>
<!-- transactions -->
<li class="{{ activeRoutePartial('transactions') }} treeview" id="transaction-menu">
<a href="#">
<i class="fa fa-repeat fa-fw"></i>
<span>
{{ 'transactions'|_ }}<span class="fa arrow"></span>
</span>
<i class="fa fa-angle-left pull-right"></i>
</a>
<ul class="treeview-menu">
<li class="{{ activeRoutePartialWhat('transactions','withdrawal') }}">
<a href="{{ route('transactions.index','withdrawal') }}">
<i class="fa fa-long-arrow-left fa-fw"></i> {{ 'expenses'|_ }}</a>
</li>
<li class="{{ activeRoutePartialWhat('transactions','deposit') }}">
<a href="{{ route('transactions.index','deposit') }}"><i
class="fa fa-long-arrow-right fa-fw"></i> {{ 'income'|_ }}</a>
</li>
<li class="{{ activeRoutePartialWhat('transactions','transfers') }}">
<a href="{{ route('transactions.index','transfers') }}">
<i class="fa fa-fw fa-exchange"></i> {{ 'transfers'|_ }}</a>
</li>
</ul>
</li>
<!-- money management -->
<li class="{{ activeRoutePartial('bills') }} {{ activeRoutePartial('piggy-banks') }} treeview">
<a href="#">
<i class="fa fa-euro fa-fw"></i>
<span>{{ 'moneyManagement'|_ }}</span>
<i class="fa fa-angle-left pull-right"></i>
</a>
<ul class="treeview-menu">
<li class="{{ activeRoutePartial('piggy-banks') }}">
<a href="{{ route('piggy-banks.index') }}">
<i class="fa fa-sort-amount-asc fa-fw"></i> {{ 'piggyBanks'|_ }}</a>
</li>
<li class="{{ activeRoutePartial('bills') }}">
<a href="{{ route('bills.index') }}">
<i class="fa fa-calendar-o fa-fw"></i> {{ 'bills'|_ }}</a>
</li>
</ul>
</li>
<!-- options and preferences -->
<li id="option-menu" class="{{ activeRoutePartial('profile') }} {{ activeRoutePartial('preferences') }} {{ activeRoutePartial('currency') }} treeview">
<a href="#">
<i class="fa fa-gears fa-fw"></i>
<span>{{ 'options'|_ }}</span>
<i class="fa fa-angle-left pull-right"></i>
</a>
<ul class="treeview-menu">
<li class="{{ activeRoutePartial('profile') }}">
<a class="{{ activeRouteStrict('profile') }}" href="{{ route('profile') }}"><i class="fa fa-user fa-fw"></i> {{ 'profile'|_ }}</a>
</li>
<li class="{{ activeRoutePartial('preferences') }}">
<a class="{{ activeRouteStrict('preferences') }}" href="{{ route('preferences') }}"><i class="fa fa-gear fa-fw"></i> {{ 'preferences'|_ }}</a>
</li>
<li class="{{ activeRoutePartial('currency') }}">
<a class="{{ activeRoutePartial('currency') }}" href="{{ route('currency.index') }}"><i class="fa fa-usd fa-fw"></i> {{ 'currencies'|_ }}</a>
</li>
{% if Config.get('firefly.csv_import_enabled') %}
<li class="{{ activeRoutePartial('csv') }}">
<a href="{{ route('csv.index') }}"><i class="fa fa-file-text-o fa-fw"></i> {{ 'csv_import'|_ }}</a>
</li>
{% endif %}
</ul>
</li>
<!-- other options -->
<li>
<a href="{{ route('logout') }}">
<i class="fa fa-sign-out fa-fw"></i>
<span>{{ 'logout'|_ }}</span>
</a>
</li>
</ul>

View File

@@ -0,0 +1,14 @@
<h1>
{% if mainTitleIcon %}
<i class="hidden-xs fa {{ mainTitleIcon }}"></i>
{% endif %}
{{ title }}
{% if subTitle %}
<small id="subTitle">
{% if subTitleIcon %}
<i class="hidden-xs fa {{ subTitleIcon }}"></i>
{% endif %}
{{ subTitle }}
</small>
{% endif %}
</h1>

View File

@@ -0,0 +1,28 @@
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">{{ 'close'|_ }}</span>
</button>
<h4 class="modal-title" id="myModalLabel">{{ trans('firefly.add_money_to_piggy_title', {name: piggyBank.name}) }}</h4>
</div>
<form style="display: inline;" id="add" action="{{ route('piggy-banks.add', piggyBank.id) }}" method="POST">
<div class="modal-body">
<input type="hidden" name="_token" value="{{ csrf_token() }}"/>
<p>
{{ 'max_amount_add'|_ }}: {{ maxAmount|formatAmount }}.
</p>
<div class="input-group">
<div class="input-group-addon">{{ getCurrencySymbol()|raw }}</div>
<input step="any" class="form-control" id="amount" autocomplete="off" name="amount" max="{{ maxAmount|round(2) }}" type="number"/>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">{{ 'close'|_ }}</button>
<button type="submit" class="btn btn-primary">{{ 'add'|_ }}</button>
</div>
</form>
</div>
</div>

View File

@@ -0,0 +1,54 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName) }}
{% endblock %}
{% block content %}
{{ Form.open({'class' : 'form-horizontal','id' : 'store','url' : route('piggy-banks.store')}) }}
<input type="hidden" name="repeats" value="0"/>
<div class="row">
<div class="col-lg-6 col-md-12 col-sm-6">
<div class="box box-primary">
<div class="box-header with-border">
<h3 class="box-title">{{ 'mandatoryFields'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.text('name') }}
{{ ExpandedForm.select('account_id',accounts,null,{'label' : 'saveOnAccount'|_}) }}
{{ ExpandedForm.amount('targetamount') }}
</div>
</div>
</div>
<div class="col-lg-6 col-md-12 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'optionalFields'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.date('targetdate') }}
</div>
</div>
<!-- panel for options -->
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'options'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.optionsList('create','piggy bank') }}
</div>
<div class="box-footer">
<button type="submit" class="btn btn-success pull-right">
{{ 'store_piggy_bank'|_ }}
</button>
</div>
</div>
</div>
</div>
{{ Form.close|raw }}
{% endblock %}

View File

@@ -0,0 +1,33 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName, piggyBank) }}
{% endblock %}
{% block content %}
{{ Form.open({'class' : 'form-horizontal','id' : 'destroy','url' : route('piggy-banks.destroy',piggyBank.id)}) }}
<div class="row">
<div class="col-lg-6 col-lg-offset-3 col-md-12 col-sm-12">
<div class="box box-danger">
<div class="box-header with-border">
<h3 class="box-title">{{ trans('firefly.delete_piggy_bank', {'name': piggyBank.name}) }}</h3>
</div>
<div class="box-body">
<p class="text-danger">
{{ trans('form.permDeleteWarning') }}
</p>
<p>
{{ trans('form.piggyBank_areYouSure', {'name': piggyBank.name}) }}
</p>
</div>
<div class="box-footer">
<input type="submit" name="submit" value="{{ trans('form.deletePermanently') }}" class="btn btn-danger pull-right"/>
<a href="{{ URL.previous() }}" class="btn-default btn">{{ trans('form.cancel') }}</a>
</div>
</div>
</div>
</div>
{{ Form.close|raw }}
{% endblock %}

View File

@@ -0,0 +1,57 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName, piggyBank) }}
{% endblock %}
{% block content %}
{{ Form.model(piggyBank, {'class' : 'form-horizontal','id' : 'update','url' : route('piggy-banks.update',piggyBank.id)}) }}
<input type="hidden" name="repeats" value="0"/>
<input type="hidden" name="id" value="{{ piggyBank.id }}"/>
<div class="row">
<div class="col-lg-6 col-md-12 col-sm-6">
<div class="box box-primary">
<div class="box-header with-border">
<h3 class="box-title">{{ 'mandatoryFields'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.text('name') }}
{{ ExpandedForm.select('account_id',accounts,null,{'label' : 'saveOnAccount'|_}) }}
{{ ExpandedForm.amount('targetamount') }}
</div>
</div>
</div>
<div class="col-lg-6 col-md-12 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'optionalFields'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.date('targetdate') }}
</div>
</div>
<!-- panel for options -->
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'options'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.optionsList('update','piggy bank') }}
</div>
<div class="box-footer">
<button type="submit" class="btn btn-success pull-right">
{{ 'update_piggy_button'|_ }}
</button>
</div>
</div>
</div>
</div>
{{ Form.close|raw }}
{% endblock %}

View File

@@ -0,0 +1,62 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName) }}
{% endblock %}
{% block content %}
<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">{{ 'piggyBanks'|_ }}</h3></div>
<div class="box-body table-responsive no-padding">
{% include 'list/piggy-banks.twig' %}
</div>
<div class="box-footer">
<a href="{{ route('piggy-banks.create') }}" class="btn btn-success pull-right">{{ 'new_piggy_bank'|_ }}</a>
</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">{{ 'account_status'|_ }}</h3>
</div>
<div class="box-body table-responsive no-padding">
<table class="table table-hover">
<thead>
<tr>
<th>{{ 'account'|_ }}</th>
<th class="hidden-sm hidden-xs">{{ 'balance'|_ }}</th>
<th>{{ 'left_for_piggy_banks'|_ }}</th>
<th class="hidden-sm hidden-xs">{{ 'sum_of_piggy_banks'|_ }}</th>
<th class="hidden-sm hidden-xs">{{ 'saved_so_far'|_ }}</th>
<th class="hidden-sm hidden-xs">{{ 'left_to_save'|_ }}</th>
</tr>
</thead>
<tbody>
{% for id,info in accounts %}
<tr>
<td><a href="{{ route('accounts.show',id) }}">{{ info.name }}</a></td>
<td class="hidden-sm hidden-xs">{{ info.balance|formatAmount }}</td>
<td>{{ info.leftForPiggyBanks|formatAmount }}</td>
<td class="hidden-sm hidden-xs">{{ info.sumOfTargets|formatAmount }}</td>
<td class="hidden-sm hidden-xs">{{ info.sumOfSaved|formatAmount }}</td>
<td class="hidden-sm hidden-xs">{{ info.leftToSave|formatAmount }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
</div>
{% endblock %}
{% block scripts %}
<script src="js/jquery-ui.min.js" type="text/javascript"></script>
<script type="text/javascript" src="js/piggy-banks.js"></script>
{% endblock %}

View File

@@ -0,0 +1,30 @@
<div class="modal-dialog">
<div class="modal-content">
<form style="display: inline;" id="remove" action="{{ route('piggy-banks.remove', piggyBank.id) }}" method="POST">
<input type="hidden" name="_token" value="{{ csrf_token() }}"/>
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">{{ 'close'|_ }}</span>
</button>
<h4 class="modal-title" id="myModalLabel">{{ trans('firefly.remove_money_from_piggy_title', {name: piggyBank.name}) }}</h4>
</div>
<div class="modal-body">
<p>
{{ 'max_amount_remove'|_ }}: {{ currentRelevantRepAmount(piggyBank)|formatAmount }}.
</p>
<div class="input-group">
<div class="input-group-addon">{{ getCurrencySymbol()|raw }}</div>
<input step="any" class="form-control" id="amount" autocomplete="off" name="amount" max="{{ currentRelevantRepAmount(piggyBank)|round(2) }}"
type="number">
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">{{ 'close'|_ }}</button>
<button type="submit" class="btn btn-primary">{{ 'remove'|_ }}</button>
</div>
</form>
</div>
</div>

View File

@@ -0,0 +1,98 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName, piggyBank) }}
{% endblock %}
{% block content %}
<div class="row">
<div class="col-lg-8 col-md-8 col-sm-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'events'|_ }}</h3>
</div>
<div class="box-body">
<canvas id="piggy-bank-history" style="width:100%;height:400px;"></canvas>
</div>
</div>
</div>
<div class="col-lg-4 col-md-4 col-sm-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'details'|_ }}</h3>
<!-- ACTIONS MENU -->
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
<div class="btn-group">
<button class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown"><i class="fa fa-ellipsis-v"></i></button>
<ul class="dropdown-menu" role="menu">
<li><a href="{{ route('piggy-banks.edit', piggyBank.id) }}"><i class="fa fa-pencil fa-fw"></i> {{ 'edit'|_ }}</a></li>
<li><a href="{{ route('piggy-banks.delete', piggyBank.id) }}"><i class="fa fa-trash fa-fw"></i> {{ 'delete'|_ }}</a></li>
</ul>
</div>
</div>
</div>
<div class="box-body table-responsive no-padding">
<table class="table table-hover">
<tr>
<td>{{ 'account'|_ }}</td>
<td><a href="{{ route('accounts.show', piggyBank.account_id) }}">{{ piggyBank.account.name }}</a></td>
</tr>
<tr>
<td>{{ 'target_amount'|_ }}</td>
<td>{{ piggyBank.targetAmount|formatAmount }}</td>
</tr>
<tr>
<td>{{ 'saved_so_far'|_ }}</td>
<td>{{ currentRelevantRepAmount(piggyBank)|formatAmount }}</td>
</tr>
<tr>
<td>{{ 'left_to_save'|_ }}</td>
<td>{{ piggyBank.targetamount - currentRelevantRepAmount(piggyBank)|formatAmount }}</td>
</tr>
<tr>
<td>{{ 'start_date'|_ }}</td>
<td>
{% if piggyBank.startdate %}
{{ piggyBank.startdate.format('jS F Y') }}
{% else %}
<em>{{ 'no_start_date'|_ }}</em>
{% endif %}
</td>
</tr>
<tr>
<td>{{ 'target_date'|_ }}</td>
<td>
{% if piggyBank.targetdate %}
{{ piggyBank.targetdate.format('jS F Y') }}
{% else %}
<em>{{ 'no_target_date'|_ }}</em>
{% endif %}
</td>
</tr>
</table>
</div>
</div>
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'table'|_ }}</h3>
</div>
<div class="box-body table-responsive no-padding">
{% include 'list/piggy-bank-events' %}
</div>
</div>
</div>
</div>
{% endblock %}
{% block scripts %}
<script type="text/javascript">
var piggyBankID = {{ piggyBank.id }};
</script>
<script type="text/javascript" src="js/Chart.min.js"></script>
<script type="text/javascript" src="js/charts.js"></script>
<script type="text/javascript" src="js/piggy-banks.js"></script>
{% endblock %}

View File

@@ -0,0 +1,141 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName) }}
{% endblock %}
{% block content %}
{{ Form.open({'class' : 'form-horizontal','id' : 'preferences'}) }}
<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">{{ 'pref_home_screen_accounts'|_ }}</h3>
</div>
<div class="box-body">
<p class="text-info">{{ 'pref_home_screen_accounts_help'|_ }}</p>
{% for account in accounts %}
<div class="form-group">
<div class="col-sm-10">
<div class="checkbox">
<label>
{% if account.id in frontPageAccounts.data or frontPageAccounts.data|length == 0 %}
<input type="checkbox" name="frontPageAccounts[]" value="{{ account.id }}"
checked> {{ account.name }}
{% else %}
<input type="checkbox" name="frontPageAccounts[]"
value="{{ account.id }}"> {{ account.name }}
{% endif %}
</label>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'pref_budget_settings'|_ }}</h3>
</div>
<div class="box-body">
<p class="text-info">
{{ 'pref_budget_settings_help'|_ }}
</p>
{{ ExpandedForm.amount('budgetMaximum',budgetMaximum,{'label' : 'Budget maximum'}) }}
</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">{{ 'pref_view_range'|_ }}</h3>
</div>
<div class="box-body">
<p class="text-info">{{ 'pref_view_range_help'|_ }}</p>
<div class="radio">
<label>
<input type="radio" name="viewRange"
value="1D" {% if viewRange == '1D' %} checked {% endif %}>
{{ 'pref_1D'|_ }}
</label>
</div>
<div class="radio">
<label>
<input type="radio" name="viewRange"
value="1W" {% if viewRange == '1W' %} checked {% endif %}>
{{ 'pref_1W'|_ }}
</label>
</div>
<div class="radio">
<label>
<input type="radio" name="viewRange"
value="1M" {% if viewRange == '1M' %} checked {% endif %}>
{{ 'pref_1M'|_ }}
</label>
</div>
<div class="radio">
<label>
<input type="radio" name="viewRange"
value="3M" {% if viewRange == '3M' %} checked {% endif %}>
{{ 'pref_3M'|_ }}
</label>
</div>
<div class="radio">
<label>
<input type="radio" name="viewRange"
value="6M" {% if viewRange == '6M' %} checked {% endif %}>
{{ 'pref_6M'|_ }}
</label>
</div>
</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">{{ 'pref_languages'|_ }}</h3>
</div>
<div class="box-body">
<p class="text-info">{{ 'pref_languages_help'|_ }}</p>
{% for key, lang in Config.get('firefly.languages') %}
{% if lang.complete == true or (lang.complete == false and showIncomplete) %}
<div class="radio">
<label>
<input type="radio" name="language" value="{{ key }}"
{% if language == key %}
checked
{% endif %}
/>
{{ lang.name_locale }} ({{ lang.name_english }})
{% if lang.complete == false %}
<span class="small text-danger">({{ 'language_incomplete'|_ }})</span>
{% endif %}
</label>
</div>
{% endif %}
{% endfor %}
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
<div class="form-group">
<div class="col-sm-12">
<button type="submit" class="btn btn-success btn-lg">{{ 'pref_save_settings'|_ }}</button>
</div>
</div>
</div>
</div>
<!-- form close -->
{{ Form.close|raw }}
{% endblock %}

View File

@@ -0,0 +1,64 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName) }}
{% endblock %}
{% block content %}
{{ Form.open({'class' : 'form-horizontal','id' : 'change-password'}) }}
<div class="row">
<div class="col-lg-6 col-md-12 col-sm-12">
<div class="box box-primary">
<div class="box-header with-border">
<h3 class="box-title">{{ 'change_your_password'|_ }}</h3>
</div>
<div class="box-body">
{% if errors|length > 0 %}
<ul>
<ul>
{% for error in errors.all %}
<li class="text-danger">{{ error }}</li>
{% endfor %}
</ul>
</ul>
{% endif %}
<div class="form-group">
<label for="inputOldPassword" class="col-sm-4 control-label">{{ 'current_password'|_ }}</label>
<div class="col-sm-8">
<input type="password" class="form-control" id="inputOldPassword" placeholder="{{ 'current_password'|_ }}" name="current_password">
</div>
</div>
<div class="form-group">
<label for="inputNewPassword1" class="col-sm-4 control-label">{{ 'new_password'|_ }}</label>
<div class="col-sm-8">
<input type="password" class="form-control" id="inputNewPassword1" placeholder="{{ 'new_password'|_ }}" name="new_password">
</div>
</div>
<div class="form-group">
<label for="inputNewPassword2" class="col-sm-4 control-label">{{ 'new_password_again'|_ }}</label>
<div class="col-sm-8">
<input type="password" class="form-control" id="inputNewPassword2" placeholder="{{ 'new_password_again'|_ }}"
name="new_password_confirmation">
</div>
</div>
</div>
<div class="box-footer">
<button type="submit" class="btn btn-success pull-right">{{ 'change_your_password'|_ }}</button>
</div>
</div>
</div>
</div>
{{ Form.close|raw }}
{% endblock %}

View File

@@ -0,0 +1,56 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName) }}
{% endblock %}
{% block content %}
{{ Form.open({'class' : 'form-horizontal','id' : 'change-password'}) }}
<div class="row">
<div class="col-lg-6 col-md-12 col-sm-12">
<div class="box box-danger">
<div class="box-header with-border">
<h3 class="box-title">{{ 'delete_your_account'|_ }}</h3>
</div>
<div class="box-body">
<p class="text-danger">
{{ 'delete_your_account_help'|_ }}
</p>
<p class="text-danger">
{{ 'delete_your_account_password'|_ }}
</p>
{% if errors|length > 0 %}
<ul>
<ul>
{% for error in errors.all %}
<li class="text-danger">{{ error }}</li>
{% endfor %}
</ul>
</ul>
{% endif %}
<div class="form-group">
<label for="password" class="col-sm-4 control-label">{{ 'password'|_ }}</label>
<div class="col-sm-8">
<input type="password" class="form-control" id="password" placeholder="{{ 'password'|_ }}" name="password">
</div>
</div>
</div>
<div class="box-footer">
<button type="submit" onclick="confirm('{{ 'are_you_sure'|_ }}')" class="btn btn-danger pull-right">
{{ 'delete_account_button'|_ }}
</button>
</div>
</div>
</div>
</div>
{{ Form.close|raw }}
{% endblock %}

View File

@@ -0,0 +1,23 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName) }}
{% endblock %}
{% block content %}
<div class="row">
<div class="col-lg-6 col-lg-offset-3 col-md-6 col-sm-12">
<div class="box box-primary">
<div class="box-header with-border">
<h3 class="box-title">Options</h3>
</div>
<div class="box-body">
<ul>
<li><a href="{{ route('profile.change-password') }}">{{ 'change_your_password'|_ }}</a></li>
<li><a class="text-danger" href="{{ route('profile.delete-account') }}">{{ 'delete_account'|_ }}</a></li>
</ul>
</div>
</div>
</div>
</div>
{% endblock %}

View File

@@ -0,0 +1,7 @@
{% extends "./layout/default.twig" %}
<p>
No longer used.
</p>
{% endblock %}

View File

@@ -0,0 +1,5 @@
{% extends "./layout/default.twig" %}
<p>
No longer used.
</p>
{% endblock %}

View File

@@ -0,0 +1,91 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName, start, end, reportType, accountIds) }}
{% endblock %}
{% block content %}
<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;"></canvas>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-6 col-md-6 col-sm-6">
{% include 'reports/partials/accounts.twig' %}
{% include 'reports/partials/income-vs-expenses.twig' %}
</div>
<div class="col-lg-3 col-md-3 col-sm-3">
<!-- income -->
{% include 'reports/partials/income.twig' %}
</div>
<div class="col-lg-3 col-md-3 col-sm-3">
<!-- expenses -->
{% include 'reports/partials/expenses.twig' %}
</div>
</div>
<div class="row">
<div class="col-lg-8 col-md-8 col-sm-12">
<!-- budgets -->
{% include 'reports/partials/budgets.twig' %}
</div>
<div class="col-lg-4 col-md-4 col-sm-12">
<!-- categories -->
{% include 'reports/partials/categories.twig' %}
</div>
</div>
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
</div>
</div>
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
{% include 'reports/partials/balance.twig' %}
</div>
</div>
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
{% include 'reports/partials/bills.twig' %}
</div>
</div>
{% endblock %}
{% block styles %}
<link rel="stylesheet" href="css/bootstrap-sortable.css" type="text/css" media="all"/>
{% endblock %}
{% block scripts %}
<script type="text/javascript" src="js/bootstrap-sortable.js"></script>
<script type="text/javascript" src="js/Chart.min.js"></script>
<script type="text/javascript" src="js/charts.js"></script>
<script type="text/javascript">
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 }}';
var incomeTopLength = {{ incomeTopLength }};
var expenseTopLength = {{ expenseTopLength }};
var incomeRestShow = false; // starts hidden.
var expenseRestShow = false; // starts hidden.
var showTheRest = '{{ trans('firefly.showTheRest',{number:incomeTopLength}) }}';
var hideTheRest = '{{ trans('firefly.hideTheRest',{number:incomeTopLength}) }}';
var showTheRestExpense = '{{ trans('firefly.showTheRest',{number:expenseTopLength}) }}';
var hideTheRestExpense = '{{ trans('firefly.hideTheRest',{number:expenseTopLength}) }}';
</script>
<script type="text/javascript" src="js/reports/default/month.js"></script>
{% endblock %}

View File

@@ -0,0 +1,158 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName, start, end, reportType, accountIds) }}
{% endblock %}
{% block content %}
<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">{{ 'incomeVsExpenses'|_ }}</h3>
</div>
<div class="box-body">
<canvas id="income-expenses-chart" style="width:100%;height:400px;"></canvas>
</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">{{ 'incomeVsExpenses'|_ }}</h3>
</div>
<div class="box-body">
<canvas id="income-expenses-sum-chart" style="width:100%;height:400px;"></canvas>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-6 col-md-6 col-sm-6">
{% include 'reports/partials/accounts.twig' %}
{% include 'reports/partials/income-vs-expenses.twig' %}
</div>
<div class="col-lg-3 col-md-3 col-sm-3">
<!-- income -->
{% include 'reports/partials/income.twig' %}
</div>
<div class="col-lg-3 col-md-3 col-sm-3">
<!-- expenses -->
{% include 'reports/partials/expenses.twig' %}
</div>
</div>
{% for account in accounts %}
<div class="row" style="display:none;">
<div class="col-lg-12 col-md-12 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'Asset account'|_ }}: {{ account.name }}</h3>
</div>
<div class="box-body">
<canvas id="account-chart-{{ account.id }}" class="account-chart" data-id="{{ account.id }}" style="width:100%;height:400px;"></canvas>
</div>
</div>
</div>
</div>
{% endfor %}
<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">Selected budgets</h3>
</div>
<div class="box-body">
<div class="row">
<div class="col-lg-12">
<p class="well" id="budgets-chart-message" style="display:none;">
Select one or more budgets to generate this chart. Insofar possible, your selection will be saved.
</p>
<canvas id="budgets-chart" class="budgets-chart" style="width:100%;height:400px;"></canvas>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<label class="checkbox-inline">
<input type="checkbox" class="budget-checkbox" name="budgets[]" value="0"> {{ 'noBudget'|_ }}
</label>
{% for budget in budgets %}
<label class="checkbox-inline">
<input type="checkbox" class="budget-checkbox" name="budgets[]" value="{{ budget.id }}"> {{ budget.name }}
</label>
{% endfor %}
</div>
</div>
</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">Selected categories</h3>
</div>
<div class="box-body">
<div class="row">
<div class="col-lg-12">
<p class="well" id="categories-chart-message" style="display:none;">
Select one or more categories to generate this chart. Insofar possible, your selection will be saved.
</p>
<canvas id="categories-chart" class="categories-chart" style="width:100%;height:400px;"></canvas>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<label class="checkbox-inline">
<input type="checkbox" class="category-checkbox" name="categories[]" value="0"> {{ 'noCategory'|_ }}
</label>
{% for category in categories %}
<label class="checkbox-inline">
<input type="checkbox" name="categories[]" class="category-checkbox" value="{{ category.id }}"> {{ category.name }}
</label>
{% endfor %}
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
{% block styles %}
<link rel="stylesheet" href="css/bootstrap-sortable.css" type="text/css" media="all"/>
{% endblock %}
{% block scripts %}
<script type="text/javascript" src="js/bootstrap-sortable.js"></script>
<script type="text/javascript" src="js/Chart.min.js"></script>
<script type="text/javascript" src="js/charts.js"></script>
<script type="text/javascript">
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 }}';
var incomeTopLength = {{ incomeTopLength }};
var expenseTopLength = {{ expenseTopLength }};
var incomeRestShow = false; // starts hidden.
var expenseRestShow = false; // starts hidden.
var showTheRest = '{{ trans('firefly.showTheRest',{number:incomeTopLength}) }}';
var hideTheRest = '{{ trans('firefly.hideTheRest',{number:incomeTopLength}) }}';
var showTheRestExpense = '{{ trans('firefly.showTheRest',{number:expenseTopLength}) }}';
var hideTheRestExpense = '{{ trans('firefly.hideTheRest',{number:expenseTopLength}) }}';
</script>
<script type="text/javascript" src="js/reports/default/multi-year.js"></script>
{% endblock %}

View File

@@ -0,0 +1,111 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName, start, end, reportType, accountIds) }}
{% endblock %}
{% block content %}
<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">{{ 'incomeVsExpenses'|_ }}</h3>
</div>
<div class="box-body">
<canvas id="income-expenses-chart" style="width:100%;height:400px;"></canvas>
</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">{{ 'incomeVsExpenses'|_ }}</h3>
</div>
<div class="box-body">
<canvas id="income-expenses-sum-chart" style="width:100%;height:400px;"></canvas>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-6 col-md-6 col-sm-6">
{% include 'reports/partials/accounts.twig' %}
{% include 'reports/partials/income-vs-expenses.twig' %}
</div>
<div class="col-lg-3 col-md-3 col-sm-3">
{% include 'reports/partials/income.twig' %}
</div>
<div class="col-lg-3 col-md-3 col-sm-3">
{% include 'reports/partials/expenses.twig' %}
</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">{{ 'categories_spent_in_year'|_ }}</h3>
</div>
<div class="box-body">
<canvas id="categories-spent-in-period" style="width:100%;height:400px;"></canvas>
</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">{{ 'categories_earned_in_year'|_ }}</h3>
</div>
<div class="box-body">
<canvas id="categories-earned-in-period" style="width:100%;height:400px;"></canvas>
</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'|_ }}</h3>
</div>
<div class="box-body">
<canvas id="budgets" style="width:100%;height:400px;"></canvas>
</div>
</div>
</div>
</div>
{% endblock %}
{% block scripts %}
<script type="text/javascript" src="js/Chart.min.js"></script>
<script type="text/javascript" src="js/Chart.StackedBar.js"></script>
<script type="text/javascript" src="js/charts.js"></script>
<script type="text/javascript">
var year = '{{ start.year }}';
// to report another URL:
var startDate = '{{ start.format('Ymd') }}';
var endDate = '{{ end.format('Ymd') }}';
var reportType = '{{ reportType }}';
var accountIds = '{{ accountIds }}';
var incomeTopLength = {{ incomeTopLength }};
var expenseTopLength = {{ expenseTopLength }};
var incomeRestShow = false; // starts hidden.
var expenseRestShow = false; // starts hidden.
var showTheRest = '{{ trans('firefly.showTheRest',{number:incomeTopLength}) }}';
var hideTheRest = '{{ trans('firefly.hideTheRest',{number:incomeTopLength}) }}';
var showTheRestExpense = '{{ trans('firefly.showTheRest',{number:expenseTopLength}) }}';
var hideTheRestExpense = '{{ trans('firefly.hideTheRest',{number:expenseTopLength}) }}';
</script>
<script type="text/javascript" src="js/reports/default/year.js"></script>
{% endblock %}

View File

@@ -0,0 +1,140 @@
{% extends "./layout/default.twig" %}
{% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName) }}
{% endblock %}
{% block content %}
<div class="row">
<div class="col-lg-6 col-md-6 col-sm-6 col-xs-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'reports'|_ }}</h3>
</div>
<div class="box-body">
<form class="form-horizontal" id="report-form" action="{{ route('reports.index') }}" method="post">
<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 label="{{ 'report_type_default'|_ }}" value="default">{{ 'report_type_default'|_ }}</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">
{% for account in accounts %}
<div class="checkbox">
<label>
<input type="checkbox" class="account-checkbox" name="accounts[]" value="{{ account.id }}">
{{ account.name }}
{% if account.getMeta('accountRole') == 'sharedAsset' %}
({{ 'shared'|_|lower }})
{% endif %}
</label>
</div>
{% endfor %}
<p class="help-block">
{{ 'report_include_help'|_ }}
</p>
</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 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>
<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 class="form-group">
<div class="col-sm-offset-3 col-sm-9">
<button type="submit" class="btn btn-default">{{ 'submit'|_ }}</button>
</div>
</div>
</form>
</div>
</div>
</div>
<div class="col-lg-6 col-md-6 col-sm-6 col-xs-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'quick_link_reports'|_ }}</h3>
</div>
<div class="box-body">
<h4>{{ 'quick_link_default_report'|_ }}</h4>
<ul>
<li>
<a href="{{ route('reports.report',
['default',
startOfMonth.format('Ymd'),
endOfMonth.format('Ymd'),
accountList
]) }}">{{ 'report_this_month_quick'|_ }}</a>
</li>
<li>
<a href="{{ route('reports.report',
['default',
startOfYear.format('Ymd'),
endOfYear.format('Ymd'),
accountList
]) }}">{{ 'report_this_year_quick'|_ }}</a>
</li>
<li>
<a href="{{ route('reports.report',
['default',
start.format('Ymd'),
endOfMonth.format('Ymd'),
accountList
]) }}">{{ 'report_all_time_quick'|_ }}</a>
</li>
</ul>
<p>
<em>{{ 'reports_can_bookmark'|_ }}</em>
</p>
</div>
</div>
</div>
</div>
{% endblock %}
{% block scripts %}
<script type="text/javascript">
var reportURL = "{{ route('reports.report', ['']) }}";
var minDate = "{{ start.format('m/d/Y') }}";
var picker;
</script>
<script type="text/javascript" src="js/reports/index.js"></script>
{% endblock %}

View File

@@ -0,0 +1,37 @@
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'accountBalances'|_ }}</h3>
</div>
<div class="box-body table-responsive no-padding">
<table class="table table-hover sortable">
<thead>
<tr>
<th>{{ 'name'|_ }}</th>
<th>{{ 'balanceStart'|_ }}</th>
<th>{{ 'balanceEnd'|_ }}</th>
<th>{{ 'difference'|_ }}</th>
</tr>
</thead>
<tbody>
{% for account in accountReport.getAccounts %}
<tr>
<td>
<a href="{{ route('accounts.show',account.id) }}" title="{{ account.name }}">{{ account.name }}</a>
</td>
<td data-value="{{ account.startBalance }}">{{ account.startBalance|formatAmount }}</td>
<td data-value="{{ account.endBalance }}">{{ account.endBalance|formatAmount }}</td>
<td data-value="{{ (account.endBalance - account.startBalance) }}">{{ (account.endBalance - account.startBalance)|formatAmount }}</td>
</tr>
{% endfor %}
</tbody>
<tfoot>
<tr>
<td><em>{{ 'sumOfSums'|_ }}</em></td>
<td>{{ accountReport.getStart|formatAmount }}</td>
<td>{{ accountReport.getEnd|formatAmount }}</td>
<td>{{ accountReport.getDifference|formatAmount }}</td>
</tr>
</tfoot>
</table>
</div>
</div>

View File

@@ -0,0 +1,53 @@
<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">
<table class="table table-hover">
<!-- build balance report header -->
<thead>
<tr>
<th colspan="2">{{ 'budgets'|_ }}</th>
{% for account in balance.getBalanceHeader.getAccounts %}
<th><a href="{{ route('accounts.show',account.id) }}">{{ account.name }}</a></th>
{% endfor %}
<th>
{{ 'leftInBudget'|_ }}
</th>
</tr>
</thead>
<tbody>
<!-- make rows -->
{% for balanceLine in balance.getBalanceLines %}
<tr>
{% if balanceLine.getBudget %}
<td>
<a href="{{ route('budgets.show',balanceLine.getBudget.id) }}">{{ balanceLine.getTitle }}</a>
</td>
<td>{{ balanceLine.getRepetition.amount|formatAmount }}</td>
{% else %}
<td colspan="2">{{ balanceLine.getTitle }}</td>
{% endif %}
{% for balanceEntry in balanceLine.getBalanceEntries %}
<td>
{% if balanceEntry.getSpent != 0 %}
<span class="text-danger">{{ (balanceEntry.getSpent)|formatAmountPlain }}</span>
{% endif %}
{% if balanceEntry.getLeft != 0 %}
<span class="text-success">{{ (balanceEntry.getLeft)|formatAmountPlain }}</span>
{% endif %}
</td>
{% endfor %}
<td>
{{ balanceLine.leftOfRepetition|formatAmount }}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>

View File

@@ -0,0 +1,52 @@
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'bills'|_ }}</h3>
</div>
<div class="box-body table-responsive no-padding">
<table class="table table-hover sortable">
<thead>
<tr>
<th>{{ trans('form.name') }}</th>
<th>{{ trans('form.amount_min') }}</th>
<th>{{ trans('form.amount_max') }}</th>
<th>{{ trans('form.amount') }}</th>
<th>{{ trans('form.under') }}</th>
</tr>
</thead>
<tbody>
{% for line in bills.getBills %}
{% if not line.isActive %}
<tr class="text-muted">
{% else %}
<tr>
{% endif %}
<td data-value="{{ line.getBill.name }}">
<a href="{{ route('bills.show',line.getBill.id) }}">{{ line.getBill.name }}</a>
{% if not line.isActive %}
({{ 'inactive'|_|lower }})
{% endif %}
</td>
<td data-value="{{ line.getMin }}">{{ line.getMin|formatAmount }}</td>
<td data-value="{{ line.getMax }}">{{ line.getMax|formatAmount }}</td>
{% if line.isHit %}
<td data-value="{{ line.getAmount }}">{{ line.getAmount|formatAmount }}</td>
{% endif %}
{% if not line.isHit and line.isActive %}
<td data-value="0" class="bg-success">{{ 'notCharged'|_ }}</td>
{% endif %}
{% if not line.isActive %}
<td data-value="-1">&nbsp;</td>
{% endif %}
<td data-value="{{ (line.getMax - line.getAmount) }}">
{% if line.isActive %}
{{ (line.getMax + line.getAmount)|formatAmount }}
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>

Some files were not shown because too many files have changed in this diff Show More