mirror of
				https://github.com/firefly-iii/firefly-iii.git
				synced 2025-10-31 10:47:00 +00:00 
			
		
		
		
	Move v1 views
This commit is contained in:
		
							
								
								
									
										92
									
								
								resources/views/reports/audit/report.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								resources/views/reports/audit/report.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,92 @@ | ||||
| {% extends './v1/layout/default' %} | ||||
|  | ||||
| {% block breadcrumbs %} | ||||
|     {{ Breadcrumbs.render(Route.getCurrentRoute.getName, accountIds, start, end) }} | ||||
| {% endblock %} | ||||
|  | ||||
| {% block content %} | ||||
|  | ||||
| <div class="row no-print"> | ||||
|     <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12"> | ||||
|         <div class="box" id="optionsBox"> | ||||
|             <div class="box-header with-border"> | ||||
|                 <h3 class="box-title">{{ 'options'|_ }}</h3> | ||||
|             </div> | ||||
|             <div class="box-body"> | ||||
|                 <ul class="list-inline"> | ||||
|                     {% for hide in hideable %} | ||||
|                         <li><input | ||||
|                                     {% if hide in defaultShow %}checked{% endif %} | ||||
|                                     type="checkbox" class="audit-option-checkbox" name="option[]" value="{{ hide }}" id="option_{{ hide }}"/> <label | ||||
|                                     for="option_{{ hide }}" style="font-weight:normal;">{{ trans('list.'~hide) }}</label></li> | ||||
|                     {% endfor %} | ||||
|  | ||||
|                 </ul> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
| </div> | ||||
|  | ||||
|  | ||||
| {% for account in accounts %} | ||||
| <div class="row"> | ||||
|     <div class="col-lg-12 col-md-12 col-sm-12"> | ||||
|         <div class="box"> | ||||
|             <div class="box-header with-border"> | ||||
|                 <h3 class="box-title">{{ account.name }}</h3> | ||||
|             </div> | ||||
|             {% set url = route('accounts.show',account.id) %} | ||||
|             {% if not auditData[account.id].exists %} | ||||
|             <div class="box-body"> | ||||
|  | ||||
|                 <em> | ||||
|                     {{ trans('firefly.no_audit_activity', | ||||
|                         { | ||||
|                             account_name: account.name|escape, | ||||
|                             url: url, | ||||
|                             start: start.formatLocalized(monthAndDayFormat), | ||||
|                             end: end.formatLocalized(monthAndDayFormat), | ||||
|                         })|raw }} | ||||
|  | ||||
|                 </em> | ||||
|             </div> | ||||
|             {% else %} | ||||
|             <div class="box-body no-padding"> | ||||
|                 <p style="padding:10px;"> | ||||
|                     {{ trans('firefly.audit_end_balance', | ||||
|                         { | ||||
|                             account_name: account.name|escape, | ||||
|                             url: url, | ||||
|                             end: auditData[account.id].dayBefore, | ||||
|                             balance: formatAmountByAccount(account, auditData[account.id].dayBeforeBalance) | ||||
|                         })|raw }} | ||||
|                 </p> | ||||
|                 {% include 'v1.reports.partials.journals-audit'  with {'journals': auditData[account.id].journals,'account':account} %} | ||||
|  | ||||
|                 <p style="padding:10px;"> | ||||
|  | ||||
|                     {{ trans('firefly.audit_end_balance', | ||||
|                         { | ||||
|                             account_name: account.name|escape, | ||||
|                             url: url, | ||||
|                             end: auditData[account.id].end, | ||||
|                             balance: formatAmountByAccount(account,auditData[account.id].endBalance) | ||||
|                         })|raw }} | ||||
|                 </p> | ||||
|             </div> | ||||
|             {% endif %} | ||||
|         </div> | ||||
|     </div> | ||||
| </div> | ||||
| {% endfor %} | ||||
|  | ||||
| {% endblock %} | ||||
| {% block styles %} | ||||
| {% endblock %} | ||||
| {% block scripts %} | ||||
|     <script type="text/javascript" nonce="{{ JS_NONCE }}"> | ||||
|         var hideable = {{ hideable|json_encode|raw }}; | ||||
|     </script> | ||||
|     <script type="text/javascript" src="v1/js/ff/reports/all.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|     <script type="text/javascript" src="v1/js/ff/reports/audit/all.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
| {% endblock %} | ||||
							
								
								
									
										186
									
								
								resources/views/reports/budget/month.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										186
									
								
								resources/views/reports/budget/month.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,186 @@ | ||||
| {% extends './v1/layout/default' %} | ||||
|  | ||||
| {% block breadcrumbs %} | ||||
|     {{ Breadcrumbs.render(Route.getCurrentRoute.getName, accountIds, budgetIds, start, end) }} | ||||
| {% endblock %} | ||||
|  | ||||
| {% block content %} | ||||
|  | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'accounts'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="accountsHolder"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|         <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'budgets'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="budgetsHolder"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'account_per_budget'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="accountPerbudgetHolder"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-6 col-md-6"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'expense_per_budget'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body"> | ||||
|                     <div style="width:100%;margin:0 auto;"> | ||||
|                         <canvas id="budgets-out-pie-chart" style="width:100%;height:250px;" height="250"></canvas> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|         <div class="col-lg-6 col-md-6"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'expense_per_category'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body"> | ||||
|                     <div style="width:100%;margin:0 auto;"> | ||||
|                         <canvas id="categories-out-pie-chart" style="width:100%;height:250px;" height="250"></canvas> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-6 col-md-6"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'expense_per_source_account'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body"> | ||||
|                     <div style="width:100%;margin:0 auto;"> | ||||
|                         <canvas id="source-accounts-pie-chart" style="width:100%;height:250px;" height="250"></canvas> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|         <div class="col-lg-6 col-md-6"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'expense_per_destination_account'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body"> | ||||
|                     <div style="width:100%;margin:0 auto;"> | ||||
|                         <canvas id="dest-accounts-pie-chart" style="width:100%;height:250px;" height="250"></canvas> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
|     {% for budget in budgets %} | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-12"> | ||||
|             <div class="box main_budget_chart"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'expenses'|_ }} ({{ budget.name }})</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body"> | ||||
|                     <canvas class="main_budget_canvas" data-url="{{ route('chart.budget.main', [accountIds, budget.id, start.format('Ymd'), end.format('Ymd')]) }}" id="in-out-chart-{{ budget.id }}" style="width:100%;height:400px;" height="400" width="100%"></canvas> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|     {% endfor %} | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-6"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'average_spending_per_destination'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="avgExpensesHolder"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|         <div class="col-lg-6"> | ||||
|  | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'expenses'|_ }} ({{ trans('firefly.topX', {number: listLength}) }})</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="topExpensesHolder"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
| {% endblock %} | ||||
|  | ||||
| {% block scripts %} | ||||
|     <script type="text/javascript" src="v1/js/lib/Chart.bundle.min.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|     <script type="text/javascript" src="v1/js/ff/charts.defaults.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|     <script type="text/javascript" src="v1/js/ff/charts.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|     <script type="text/javascript" src="v1/js/lib/bootstrap-sortable.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|  | ||||
|     <script type="text/javascript" nonce="{{ JS_NONCE }}"> | ||||
|         // to report another URL: | ||||
|         var startDate = '{{ start.format('Ymd') }}'; | ||||
|         var endDate = '{{ end.format('Ymd') }}'; | ||||
|         var accountIds = '{{ accountIds }}'; | ||||
|         var budgetIds = '{{ budgetIds }}'; | ||||
|  | ||||
|         // html block URI's: | ||||
|         var accountsUri = '{{ route('report-data.budget.accounts', [accountIds, budgetIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var budgetsUri = '{{ route('report-data.budget.budgets', [accountIds, budgetIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var accountPerBudgetUri = '{{ route('report-data.budget.account-per-budget', [accountIds, budgetIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var avgExpensesUri = '{{ route('report-data.budget.avg-expenses', [accountIds, budgetIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var topExpensesUri = '{{ route('report-data.budget.top-expenses', [accountIds, budgetIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|  | ||||
|         // chart uri's | ||||
|         var budgetExpenseUri = '{{ route('chart.budget.budget-expense', [accountIds, budgetIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var categoryExpenseUri = '{{ route('chart.budget.category-expense', [accountIds, budgetIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var sourceExpenseUri = '{{ route('chart.budget.source-account-expense', [accountIds, budgetIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var destinationExpenseUri = '{{ route('chart.budget.destination-account-expense', [accountIds, budgetIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|     </script> | ||||
|  | ||||
|  | ||||
|     <script type="text/javascript" src="v1/js/ff/reports/all.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|     <script type="text/javascript" src="v1/js/ff/reports/budget/month.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|  | ||||
| {% endblock %} | ||||
|  | ||||
| {% block styles %} | ||||
|     <link rel="stylesheet" href="v1/css/bootstrap-sortable.css?v={{ FF_VERSION }}" type="text/css" media="all" nonce="{{ JS_NONCE }}"> | ||||
| {% endblock %} | ||||
| @@ -0,0 +1,30 @@ | ||||
| <table class="table table-hover sortable"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th data-defaultsign="az">{{ 'name'|_ }}</th> | ||||
|         {% for budget in budgets %} | ||||
|             <th data-defaultsign="_19" style="text-align: right;">{{ budget.name }}</th> | ||||
|         {% endfor %} | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|     {% for account in report %} | ||||
|         {% for currency in account.currencies %} | ||||
|             <tr> | ||||
|                 <td data-value="{{ account.name }} ({{ currency.currency_name }})"> | ||||
|                     <a href="{{ route('accounts.show', account.id) }}" title="{{ account.iban }}">{{ account.name }} ({{ currency.currency_name }})</a> | ||||
|                 </td> | ||||
|                 {% for budget in budgets %} | ||||
|                     <td style="text-align: right;"> | ||||
|                         {% if currency.budgets[budget.id] %} | ||||
|                             {{ formatAmountBySymbol(currency.budgets[budget.id], currency.currency_symbol, currency.currency_decimal_places) }} | ||||
|                         {% else %} | ||||
|                             — | ||||
|                         {% endif %} | ||||
|                     </td> | ||||
|                 {% endfor %} | ||||
|             </tr> | ||||
|         {% endfor %} | ||||
|     {% endfor %} | ||||
|     </tbody> | ||||
| </table> | ||||
							
								
								
									
										32
									
								
								resources/views/reports/budget/partials/accounts.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								resources/views/reports/budget/partials/accounts.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
| <table class="table table-hover sortable"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th data-defaultsign="az">{{ 'name'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'spent'|_ }}</th> | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|     {% for account in report %} | ||||
|         {% for currency in account.currencies %} | ||||
|             <tr> | ||||
|                 <td data-value="{{ account.name }} ({{ currency.currency_name }})"> | ||||
|                     <a href="{{ route('accounts.show', account.id) }}" title="{{ account.iban }}">{{ account.name }} ({{ currency.currency_name }})</a> | ||||
|                 </td> | ||||
|                 <td data-value="{{ currency.sum }}" style="text-align: right;"> | ||||
|                     {{ formatAmountBySymbol(currency.sum, currency.currency_symbol, currency.currency_decimal_places) }} | ||||
|                 </td> | ||||
|             </tr> | ||||
|         {% endfor %} | ||||
|     {% endfor %} | ||||
|     </tbody> | ||||
|     <tfoot> | ||||
|     {% for sum in sums %} | ||||
|         <tr> | ||||
|             <td>{{ 'sum'|_ }} ({{ sum.currency_name }})</td> | ||||
|             <td style="text-align: right;"> | ||||
|                 {{ formatAmountBySymbol(sum.sum, sum.currency_symbol, sum.currency_decimal_places) }} | ||||
|             </td> | ||||
|         </tr> | ||||
|     {% endfor %} | ||||
|     </tfoot> | ||||
| </table> | ||||
							
								
								
									
										46
									
								
								resources/views/reports/budget/partials/avg-expenses.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								resources/views/reports/budget/partials/avg-expenses.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,46 @@ | ||||
| <table class="table table-hover sortable"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th data-defaultsign="az">{{ 'account'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'spent_average'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'total'|_ }}</th> | ||||
|         <th data-defaultsign="_19">{{ 'transaction_count'|_ }}</th> | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|     {% for row in result %} | ||||
|         {% if loop.index > listLength %} | ||||
|             <tr class="overListLength"> | ||||
|         {% else %} | ||||
|             <tr> | ||||
|         {% endif %} | ||||
|         <td data-sortable="false"> | ||||
|             <a href="{{ route('accounts.show', row.destination_account_id) }}"> | ||||
|                 {{ row.destination_account_name }} | ||||
|             </a> | ||||
|         </td> | ||||
|         <td data-value="{{ row.avg }}" style="text-align: right;"> | ||||
|             {{ formatAmountBySymbol(row.avg, row.currency_symbol, row.currency_decimal_places) }} | ||||
|         </td> | ||||
|  | ||||
|         <td data-value="{{ row.sum }}" style="text-align: right;"> | ||||
|             {{ formatAmountBySymbol(row.sum, row.currency_symbol, row.currency_decimal_places) }} | ||||
|         </td> | ||||
|  | ||||
|         <td data-value="{{ row.transactions }}"> | ||||
|             {{ row.transactions }} | ||||
|         </td> | ||||
|  | ||||
|         </tr> | ||||
|     {% endfor %} | ||||
|     </tbody> | ||||
|     <tfoot> | ||||
|     {% if result|length > listLength %} | ||||
|         <tr> | ||||
|             <td colspan="5" class="active"> | ||||
|                 <a href="#" class="listLengthTrigger">{{ trans('firefly.show_full_list',{number:incomeTopLength}) }}</a> | ||||
|             </td> | ||||
|         </tr> | ||||
|     {% endif %} | ||||
|     </tfoot> | ||||
| </table> | ||||
							
								
								
									
										44
									
								
								resources/views/reports/budget/partials/budgets.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								resources/views/reports/budget/partials/budgets.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,44 @@ | ||||
| <table class="table table-hover sortable"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th data-defaultsign="az">{{ 'name'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'spent'|_ }}</th> | ||||
|         <th data-defaultsign="_19">{{ trans('list.percentage') }}</th> | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|     {% for budget in report %} | ||||
|         {% if budget.currencies|length == 0 %} | ||||
|             <tr> | ||||
|                 <td data-value="{{ budget.name }}"> | ||||
|                     <a href="{{ route('budgets.show', budget.id) }}" title="{{ budget.name }}">{{ budget.name }}</a> | ||||
|                 </td> | ||||
|                 <td style="text-align: right;">—</td> | ||||
|                 <td> </td> | ||||
|             </tr> | ||||
|         {% endif %} | ||||
|         {% for currency in budget.currencies %} | ||||
|             <tr> | ||||
|                 <td data-value="{{ budget.name }} ({{ currency.currency_name }})"> | ||||
|                     <a href="{{ route('budgets.show', budget.id) }}" title="{{ budget.name }}">{{ budget.name }} ({{ currency.currency_name }})</a> | ||||
|                 </td> | ||||
|                 <td data-value="{{ currency.sum }}" style="text-align: right;"> | ||||
|                     {{ formatAmountBySymbol(currency.sum, currency.currency_symbol, currency.currency_decimal_places) }} | ||||
|                 </td> | ||||
|                 <td data-value="{{ currency.sum_pct }}">{{ currency.sum_pct }}%</td> | ||||
|             </tr> | ||||
|         {% endfor %} | ||||
|     {% endfor %} | ||||
|     </tbody> | ||||
|     <tfoot> | ||||
|     {% for sum in sums %} | ||||
|         <tr> | ||||
|             <td>{{ 'sum'|_ }} ({{ sum.currency_name }})</td> | ||||
|             <td style="text-align: right;"> | ||||
|                 {{ formatAmountBySymbol(sum.sum, sum.currency_symbol, sum.currency_decimal_places) }} | ||||
|             </td> | ||||
|             <td> </td> | ||||
|         </tr> | ||||
|     {% endfor %} | ||||
|     </tfoot> | ||||
| </table> | ||||
							
								
								
									
										54
									
								
								resources/views/reports/budget/partials/top-expenses.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								resources/views/reports/budget/partials/top-expenses.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | ||||
| <table class="table table-hover sortable"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th data-defaultsort="disabled">{{ 'description'|_ }}</th> | ||||
|         <th data-defaultsign="month">{{ 'date'|_ }}</th> | ||||
|         <th data-defaultsign="az">{{ 'account'|_ }}</th> | ||||
|         <th data-defaultsign="az">{{ 'budget'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'amount'|_ }}</th> | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|     {% for row in result %} | ||||
|         {% if loop.index > listLength %} | ||||
|             <tr class="overListLength"> | ||||
|         {% else %} | ||||
|             <tr> | ||||
|         {% endif %} | ||||
|         <td data-sortable="false"> | ||||
|             <a href="{{ route('transactions.show', row.transaction_group_id) }}"> | ||||
|                 {{ row.description }} | ||||
|             </a> | ||||
|         </td> | ||||
|         <td data-value="{{ row.date_sort }}"> | ||||
|             {{ row.date }} | ||||
|         </td> | ||||
|  | ||||
|         <td data-sortable="false"> | ||||
|             <a href="{{ route('accounts.show', row.destination_account_id) }}"> | ||||
|                 {{ row.destination_account_name }} | ||||
|             </a> | ||||
|         </td> | ||||
|         <td data-sortable="false"> | ||||
|             <a href="{{ route('budgets.show', row.budget_id) }}"> | ||||
|                 {{ row.budget_name }} | ||||
|             </a> | ||||
|         </td> | ||||
|  | ||||
|         <td data-value="{{ row.amount }}" style="text-align: right;"> | ||||
|             {{ formatAmountBySymbol(row.amount, row.currency_symbol, row.currency_decimal_places) }} | ||||
|         </td> | ||||
|  | ||||
|         </tr> | ||||
|     {% endfor %} | ||||
|     </tbody> | ||||
|     <tfoot> | ||||
|     {% if result|length > listLength %} | ||||
|         <tr> | ||||
|             <td colspan="5" class="active"> | ||||
|                 <a href="#" class="listLengthTrigger">{{ trans('firefly.show_full_list',{number:incomeTopLength}) }}</a> | ||||
|             </td> | ||||
|         </tr> | ||||
|     {% endif %} | ||||
|     </tfoot> | ||||
| </table> | ||||
							
								
								
									
										257
									
								
								resources/views/reports/category/month.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										257
									
								
								resources/views/reports/category/month.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,257 @@ | ||||
| {% extends './v1/layout/default' %} | ||||
|  | ||||
| {% block breadcrumbs %} | ||||
|     {{ Breadcrumbs.render(Route.getCurrentRoute.getName, accountIds, categoryIds, start, end) }} | ||||
| {% endblock %} | ||||
|  | ||||
| {% block content %} | ||||
|  | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'accounts'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="accountsHolder"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|         <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'categories'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="categoriesHolder"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'account_per_category'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="accountPerCategoryHolder"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-4 col-md-6"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'expense_per_category'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body"> | ||||
|                     <div style="width:100%;margin:0 auto;"> | ||||
|                         <canvas id="category-out-pie-chart" style="width:100%;height:250px;" height="250"></canvas> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|         <div class="col-lg-4 col-md-6"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'income_per_category'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body"> | ||||
|                     <div style="width:100%;margin:0 auto;"> | ||||
|                         <canvas id="category-in-pie-chart" style="width:100%;height:250px;" height="250"></canvas> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|         <div class="col-lg-4 col-md-6"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'expense_per_budget'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body"> | ||||
|                     <div style="width:100%;margin:0 auto;"> | ||||
|                         <canvas id="budgets-out-pie-chart" style="width:100%;height:250px;" height="250"></canvas> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-6 col-md-6"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'expense_per_source_account'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body"> | ||||
|                     <div style="width:100%;margin:0 auto;"> | ||||
|                         <canvas id="source-out-pie-chart" style="width:100%;height:250px;" height="250"></canvas> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|         <div class="col-lg-6 col-md-6"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'income_per_source_account'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body"> | ||||
|                     <div style="width:100%;margin:0 auto;"> | ||||
|                         <canvas id="source-in-pie-chart" style="width:100%;height:250px;" height="250"></canvas> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-6 col-md-6"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'expense_per_destination_account'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body"> | ||||
|                     <div style="width:100%;margin:0 auto;"> | ||||
|                         <canvas id="dest-out-pie-chart" style="width:100%;height:250px;" height="250"></canvas> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|         <div class="col-lg-6 col-md-6"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'income_per_destination_account'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body"> | ||||
|                     <div style="width:100%;margin:0 auto;"> | ||||
|                         <canvas id="dest-in-pie-chart" style="width:100%;height:250px;" height="250"></canvas> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
|     {% for category in categories %} | ||||
|         <div class="row"> | ||||
|             <div class="col-lg-12"> | ||||
|                 <div class="box main_budget_chart"> | ||||
|                     <div class="box-header with-border"> | ||||
|                         <h3 class="box-title">{{ 'income_and_expenses'|_ }} ({{ category.name }})</h3> | ||||
|                     </div> | ||||
|                     <div class="box-body"> | ||||
|                         <canvas class="main_category_canvas" data-url="{{ route('chart.category.main', [accountIds, category.id, start.format('Ymd'), end.format('Ymd')]) }}" id="in-out-chart-{{ category.id }}" style="width:100%;height:400px;" height="400" width="100%"></canvas> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     {% endfor %} | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-6"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'average_spending_per_destination'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="avgExpensesHolder"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|         <div class="col-lg-6"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'average_earning_per_source'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="avgIncomeHolder"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-6"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'expenses'|_ }} ({{ trans('firefly.topX', {number: listLength}) }})</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="topExpensesHolder"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|         <div class="col-lg-6"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'income'|_ }} ({{ trans('firefly.topX', {number: listLength}) }})</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="topIncomeHolder"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
| {% endblock %} | ||||
|  | ||||
| {% block scripts %} | ||||
|     <script type="text/javascript" src="v1/js/lib/Chart.bundle.min.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|     <script type="text/javascript" src="v1/js/ff/charts.defaults.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|     <script type="text/javascript" src="v1/js/ff/charts.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|     <script type="text/javascript" src="v1/js/lib/bootstrap-sortable.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|  | ||||
|     <script type="text/javascript" src="v1/js/ff/reports/all.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|     <script type="text/javascript" nonce="{{ JS_NONCE }}"> | ||||
|         // to report another URL: | ||||
|         var startDate = '{{ start.format('Ymd') }}'; | ||||
|         var endDate = '{{ end.format('Ymd') }}'; | ||||
|         var accountIds = '{{ accountIds }}'; | ||||
|         var categoryIds = '{{ categoryIds }}'; | ||||
|  | ||||
|         // html block URI's: | ||||
|  | ||||
|         var accountsUri = '{{ route('report-data.category.accounts', [accountIds, categoryIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var categoriesUri = '{{ route('report-data.category.categories', [accountIds, categoryIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var accountPerCategoryUri = '{{ route('report-data.category.account-per-category', [accountIds, categoryIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|  | ||||
|         // pie charts: | ||||
|         var categoryOutUri = '{{ route('chart.category.category-expense', [accountIds, categoryIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var categoryInUri = '{{ route('chart.category.category-income', [accountIds, categoryIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var budgetsOutUri = '{{ route('chart.category.budget-expense', [accountIds, categoryIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var sourceOutUri = '{{ route('chart.category.source-expense', [accountIds, categoryIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var sourceInUri = '{{ route('chart.category.source-income', [accountIds, categoryIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var destOutUri = '{{ route('chart.category.dest-expense', [accountIds, categoryIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var destInUri = '{{ route('chart.category.dest-income', [accountIds, categoryIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|  | ||||
|         var avgExpensesUri = '{{ route('report-data.category.avg-expenses', [accountIds, categoryIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var topExpensesUri = '{{ route('report-data.category.top-expenses', [accountIds, categoryIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var avgIncomeUri = '{{ route('report-data.category.avg-income', [accountIds, categoryIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var topIncomeUri = '{{ route('report-data.category.top-income', [accountIds, categoryIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|  | ||||
|     </script> | ||||
|     <script type="text/javascript" src="v1/js/ff/reports/category/month.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|  | ||||
| {% endblock %} | ||||
|  | ||||
| {% block styles %} | ||||
|     <link rel="stylesheet" href="v1/css/bootstrap-sortable.css?v={{ FF_VERSION }}" type="text/css" media="all" nonce="{{ JS_NONCE }}"> | ||||
| {% endblock %} | ||||
| @@ -0,0 +1,31 @@ | ||||
| <table class="table table-hover sortable"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th data-defaultsign="az">{{ 'name'|_ }}</th> | ||||
|         {% for category in categories %} | ||||
|             <th data-defaultsign="_19" style="text-align: right;">{{ category.name }}</th> | ||||
|         {% endfor %} | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|     {% for account in report %} | ||||
|         {% for currency in account.currencies %} | ||||
|             <tr> | ||||
|                 <td data-value="{{ account.name }} ({{ currency.currency_name }})"> | ||||
|                     <a href="{{ route('accounts.show', account.id) }}" title="{{ account.iban }}">{{ account.name }} ({{ currency.currency_name }})</a> | ||||
|                 </td> | ||||
|                 {% for category in categories %} | ||||
|                     <td style="text-align: right;"> | ||||
|                         {% if currency.categories[category.id] %} | ||||
|                             <span title="{{ 'earned'|_ }}: {{ formatAmountBySymbol(currency.categories[category.id].earned, currency.currency_symbol, currency.currency_decimal_places, false) }}, {{ 'spent'|_ }}: {{ formatAmountBySymbol(currency.categories[category.id].spent, currency.currency_symbol, currency.currency_decimal_places, false) }}" | ||||
|                             {{ formatAmountBySymbol(currency.categories[category.id].sum, currency.currency_symbol, currency.currency_decimal_places) }} | ||||
|                         {% else %} | ||||
|                             — | ||||
|                         {% endif %} | ||||
|                     </td> | ||||
|                 {% endfor %} | ||||
|             </tr> | ||||
|         {% endfor %} | ||||
|     {% endfor %} | ||||
|     </tbody> | ||||
| </table> | ||||
							
								
								
									
										46
									
								
								resources/views/reports/category/partials/accounts.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								resources/views/reports/category/partials/accounts.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,46 @@ | ||||
| <table class="table table-hover sortable"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th data-defaultsign="az">{{ 'name'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'spent'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'earned'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'sum'|_ }}</th> | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|     {% for account in report %} | ||||
|         {% for currency in account.currencies %} | ||||
|             <tr> | ||||
|                 <td data-value="{{ account.name }} ({{ currency.currency_name }})"> | ||||
|                     <a href="{{ route('accounts.show', account.id) }}" title="{{ account.iban }}">{{ account.name }} ({{ currency.currency_name }})</a> | ||||
|                 </td> | ||||
|                 <td data-value="{{ currency.spent }}" style="text-align: right;"> | ||||
|                     {{ formatAmountBySymbol(currency.spent, currency.currency_symbol, currency.currency_decimal_places) }} | ||||
|                 </td> | ||||
|                 <td data-value="{{ currency.earned }}" style="text-align: right;"> | ||||
|                     {{ formatAmountBySymbol(currency.earned, currency.currency_symbol, currency.currency_decimal_places) }} | ||||
|                 </td> | ||||
|                 <td data-value="{{ currency.sum }}" style="text-align: right;"> | ||||
|                     {{ formatAmountBySymbol(currency.sum, currency.currency_symbol, currency.currency_decimal_places) }} | ||||
|                 </td> | ||||
|             </tr> | ||||
|         {% endfor %} | ||||
|     {% endfor %} | ||||
|     </tbody> | ||||
|     <tfoot> | ||||
|     {% for sum in sums %} | ||||
|         <tr> | ||||
|             <td>{{ 'sum'|_ }} ({{ sum.currency_name }})</td> | ||||
|             <td style="text-align: right;"> | ||||
|                 {{ formatAmountBySymbol(sum.spent_sum, sum.currency_symbol, sum.currency_decimal_places) }} | ||||
|             </td> | ||||
|             <td style="text-align: right;"> | ||||
|                 {{ formatAmountBySymbol(sum.earned_sum, sum.currency_symbol, sum.currency_decimal_places) }} | ||||
|             </td> | ||||
|             <td style="text-align: right;"> | ||||
|                 {{ formatAmountBySymbol(sum.total_sum, sum.currency_symbol, sum.currency_decimal_places) }} | ||||
|             </td> | ||||
|         </tr> | ||||
|     {% endfor %} | ||||
|     </tfoot> | ||||
| </table> | ||||
							
								
								
									
										46
									
								
								resources/views/reports/category/partials/avg-expenses.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								resources/views/reports/category/partials/avg-expenses.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,46 @@ | ||||
| <table class="table table-hover sortable"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th data-defaultsign="az">{{ 'account'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'spent_average'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'total'|_ }}</th> | ||||
|         <th data-defaultsign="_19">{{ 'transaction_count'|_ }}</th> | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|     {% for row in result %} | ||||
|         {% if loop.index > listLength %} | ||||
|             <tr class="overListLength"> | ||||
|         {% else %} | ||||
|             <tr> | ||||
|         {% endif %} | ||||
|         <td data-sortable="false"> | ||||
|             <a href="{{ route('accounts.show', row.destination_account_id) }}"> | ||||
|                 {{ row.destination_account_name }} | ||||
|             </a> | ||||
|         </td> | ||||
|         <td data-value="{{ row.avg }}" style="text-align: right;"> | ||||
|             {{ formatAmountBySymbol(row.avg, row.currency_symbol, row.currency_decimal_places) }} | ||||
|         </td> | ||||
|  | ||||
|         <td data-value="{{ row.sum }}" style="text-align: right;"> | ||||
|             {{ formatAmountBySymbol(row.sum, row.currency_symbol, row.currency_decimal_places) }} | ||||
|         </td> | ||||
|  | ||||
|         <td data-value="{{ row.transactions }}"> | ||||
|             {{ row.transactions }} | ||||
|         </td> | ||||
|  | ||||
|         </tr> | ||||
|     {% endfor %} | ||||
|     </tbody> | ||||
|     <tfoot> | ||||
|     {% if result|length > listLength %} | ||||
|         <tr> | ||||
|             <td colspan="5" class="active"> | ||||
|                 <a href="#" class="listLengthTrigger">{{ trans('firefly.show_full_list',{number:incomeTopLength}) }}</a> | ||||
|             </td> | ||||
|         </tr> | ||||
|     {% endif %} | ||||
|     </tfoot> | ||||
| </table> | ||||
							
								
								
									
										46
									
								
								resources/views/reports/category/partials/avg-income.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								resources/views/reports/category/partials/avg-income.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,46 @@ | ||||
| <table class="table table-hover sortable"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th data-defaultsign="az">{{ 'account'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'spent_average'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'total'|_ }}</th> | ||||
|         <th data-defaultsign="_19">{{ 'transaction_count'|_ }}</th> | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|     {% for row in result %} | ||||
|         {% if loop.index > listLength %} | ||||
|             <tr class="overListLength"> | ||||
|         {% else %} | ||||
|             <tr> | ||||
|         {% endif %} | ||||
|         <td data-sortable="false"> | ||||
|             <a href="{{ route('accounts.show', row.source_account_id) }}"> | ||||
|                 {{ row.source_account_name }} | ||||
|             </a> | ||||
|         </td> | ||||
|         <td data-value="{{ row.avg }}" style="text-align: right;"> | ||||
|             {{ formatAmountBySymbol(row.avg, row.currency_symbol, row.currency_decimal_places) }} | ||||
|         </td> | ||||
|  | ||||
|         <td data-value="{{ row.sum }}" style="text-align: right;"> | ||||
|             {{ formatAmountBySymbol(row.sum, row.currency_symbol, row.currency_decimal_places) }} | ||||
|         </td> | ||||
|  | ||||
|         <td data-value="{{ row.transactions }}"> | ||||
|             {{ row.transactions }} | ||||
|         </td> | ||||
|  | ||||
|         </tr> | ||||
|     {% endfor %} | ||||
|     </tbody> | ||||
|     <tfoot> | ||||
|     {% if result|length > listLength %} | ||||
|         <tr> | ||||
|             <td colspan="5" class="active"> | ||||
|                 <a href="#" class="listLengthTrigger">{{ trans('firefly.show_full_list',{number:incomeTopLength}) }}</a> | ||||
|             </td> | ||||
|         </tr> | ||||
|     {% endif %} | ||||
|     </tfoot> | ||||
| </table> | ||||
							
								
								
									
										56
									
								
								resources/views/reports/category/partials/categories.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								resources/views/reports/category/partials/categories.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | ||||
| <table class="table table-hover sortable"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th data-defaultsign="az">{{ 'name'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'spent'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'earned'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'sum'|_ }}</th> | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|     {% for category in report %} | ||||
|         {% if category.currencies|length == 0 %} | ||||
|             <tr> | ||||
|                 <td data-value="{{ category.name }}"> | ||||
|                     <a href="{{ route('categories.show', category.id) }}" title="{{ category.name }}">{{ category.name }}</a> | ||||
|                 </td> | ||||
|                 <td style="text-align: right;">—</td> | ||||
|                 <td style="text-align: right;">—</td> | ||||
|                 <td style="text-align: right;">—</td> | ||||
|             </tr> | ||||
|         {% endif %} | ||||
|         {% for currency in category.currencies %} | ||||
|             <tr> | ||||
|                 <td data-value="{{ category.name }} ({{ currency.currency_name }})"> | ||||
|                     <a href="{{ route('categories.show', category.id) }}" title="{{ category.name }}">{{ category.name }} ({{ currency.currency_name }})</a> | ||||
|                 </td> | ||||
|                 <td data-value="{{ currency.spent }}" style="text-align: right;"> | ||||
|                     {{ formatAmountBySymbol(currency.spent, currency.currency_symbol, currency.currency_decimal_places) }} | ||||
|                 </td> | ||||
|                 <td data-value="{{ currency.earned }}" style="text-align: right;"> | ||||
|                     {{ formatAmountBySymbol(currency.earned, currency.currency_symbol, currency.currency_decimal_places) }} | ||||
|                 </td> | ||||
|                 <td data-value="{{ currency.sum }}" style="text-align: right;"> | ||||
|                     {{ formatAmountBySymbol(currency.sum, currency.currency_symbol, currency.currency_decimal_places) }} | ||||
|                 </td> | ||||
|             </tr> | ||||
|         {% endfor %} | ||||
|     {% endfor %} | ||||
|     </tbody> | ||||
|     <tfoot> | ||||
|     {% for sum in sums %} | ||||
|         <tr> | ||||
|             <td>{{ 'sum'|_ }} ({{ sum.currency_name }})</td> | ||||
|             <td style="text-align: right;"> | ||||
|                 {{ formatAmountBySymbol(sum.spent_sum, sum.currency_symbol, sum.currency_decimal_places) }} | ||||
|             </td> | ||||
|             <td style="text-align: right;"> | ||||
|                 {{ formatAmountBySymbol(sum.earned_sum, sum.currency_symbol, sum.currency_decimal_places) }} | ||||
|             </td> | ||||
|             <td style="text-align: right;"> | ||||
|                 {{ formatAmountBySymbol(sum.total_sum, sum.currency_symbol, sum.currency_decimal_places) }} | ||||
|             </td> | ||||
|         </tr> | ||||
|     {% endfor %} | ||||
|     </tfoot> | ||||
| </table> | ||||
							
								
								
									
										54
									
								
								resources/views/reports/category/partials/top-expenses.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								resources/views/reports/category/partials/top-expenses.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | ||||
| <table class="table table-hover sortable"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th data-defaultsort="disabled">{{ 'description'|_ }}</th> | ||||
|         <th data-defaultsign="month">{{ 'date'|_ }}</th> | ||||
|         <th data-defaultsign="az">{{ 'account'|_ }}</th> | ||||
|         <th data-defaultsign="az">{{ 'category'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'amount'|_ }}</th> | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|     {% for row in result %} | ||||
|         {% if loop.index > listLength %} | ||||
|             <tr class="overListLength"> | ||||
|         {% else %} | ||||
|             <tr> | ||||
|         {% endif %} | ||||
|         <td data-sortable="false"> | ||||
|             <a href="{{ route('transactions.show', row.transaction_group_id) }}"> | ||||
|                 {{ row.description }} | ||||
|             </a> | ||||
|         </td> | ||||
|         <td data-value="{{ row.date_sort }}"> | ||||
|             {{ row.date }} | ||||
|         </td> | ||||
|  | ||||
|         <td data-sortable="false"> | ||||
|             <a href="{{ route('accounts.show', row.destination_account_id) }}"> | ||||
|                 {{ row.destination_account_name }} | ||||
|             </a> | ||||
|         </td> | ||||
|         <td data-sortable="false"> | ||||
|             <a href="{{ route('categories.show', row.category_id) }}"> | ||||
|                 {{ row.category_name }} | ||||
|             </a> | ||||
|         </td> | ||||
|  | ||||
|         <td data-value="{{ row.amount }}" style="text-align: right;"> | ||||
|             {{ formatAmountBySymbol(row.amount, row.currency_symbol, row.currency_decimal_places) }} | ||||
|         </td> | ||||
|  | ||||
|         </tr> | ||||
|     {% endfor %} | ||||
|     </tbody> | ||||
|     <tfoot> | ||||
|     {% if result|length > listLength %} | ||||
|         <tr> | ||||
|             <td colspan="5" class="active"> | ||||
|                 <a href="#" class="listLengthTrigger">{{ trans('firefly.show_full_list',{number:incomeTopLength}) }}</a> | ||||
|             </td> | ||||
|         </tr> | ||||
|     {% endif %} | ||||
|     </tfoot> | ||||
| </table> | ||||
							
								
								
									
										54
									
								
								resources/views/reports/category/partials/top-income.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								resources/views/reports/category/partials/top-income.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | ||||
| <table class="table table-hover sortable"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th data-defaultsort="disabled">{{ 'description'|_ }}</th> | ||||
|         <th data-defaultsign="month">{{ 'date'|_ }}</th> | ||||
|         <th data-defaultsign="az">{{ 'account'|_ }}</th> | ||||
|         <th data-defaultsign="az">{{ 'category'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'amount'|_ }}</th> | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|     {% for row in result %} | ||||
|         {% if loop.index > listLength %} | ||||
|             <tr class="overListLength"> | ||||
|         {% else %} | ||||
|             <tr> | ||||
|         {% endif %} | ||||
|         <td data-sortable="false"> | ||||
|             <a href="{{ route('transactions.show', row.transaction_group_id) }}"> | ||||
|                 {{ row.description }} | ||||
|             </a> | ||||
|         </td> | ||||
|         <td data-value="{{ row.date_sort }}"> | ||||
|             {{ row.date }} | ||||
|         </td> | ||||
|  | ||||
|         <td data-sortable="false"> | ||||
|             <a href="{{ route('accounts.show', row.source_account_id) }}"> | ||||
|                 {{ row.source_account_name }} | ||||
|             </a> | ||||
|         </td> | ||||
|         <td data-sortable="false"> | ||||
|             <a href="{{ route('categories.show', row.category_id) }}"> | ||||
|                 {{ row.category_name }} | ||||
|             </a> | ||||
|         </td> | ||||
|  | ||||
|         <td data-value="{{ row.amount }}" style="text-align: right;"> | ||||
|             {{ formatAmountBySymbol(row.amount, row.currency_symbol, row.currency_decimal_places) }} | ||||
|         </td> | ||||
|  | ||||
|         </tr> | ||||
|     {% endfor %} | ||||
|     </tbody> | ||||
|     <tfoot> | ||||
|     {% if result|length > listLength %} | ||||
|         <tr> | ||||
|             <td colspan="5" class="active"> | ||||
|                 <a href="#" class="listLengthTrigger">{{ trans('firefly.show_full_list',{number:incomeTopLength}) }}</a> | ||||
|             </td> | ||||
|         </tr> | ||||
|     {% endif %} | ||||
|     </tfoot> | ||||
| </table> | ||||
							
								
								
									
										180
									
								
								resources/views/reports/default/month.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										180
									
								
								resources/views/reports/default/month.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,180 @@ | ||||
| {% extends './v1/layout/default' %} | ||||
|  | ||||
| {% block breadcrumbs %} | ||||
|     {{ Breadcrumbs.render(Route.getCurrentRoute.getName, accountIds, start, end) }} | ||||
| {% endblock %} | ||||
|  | ||||
| {% block content %} | ||||
|  | ||||
|     {# chart #} | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-12 col-md-12 col-sm-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'accountBalances'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body"> | ||||
|                     <canvas id="account-balances-chart" style="width:100%;height:400px;" height="400" width="100%"></canvas> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
|     {# account balances and income vs. expense #} | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-6 col-md-6 col-sm-6"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'accountBalances'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="accountReport"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|         <div class="col-lg-6 col-md-6 col-sm-6"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'incomeVsExpenses'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="incomeVsExpenseReport"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
|     {# in and out #} | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'income'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="incomeReport"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|         <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'expenses'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="expenseReport"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-8 col-md-8 col-sm-12"> | ||||
|             <div class="box"> | ||||
|  | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'budgets'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="budgetReport"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|  | ||||
|  | ||||
|         </div> | ||||
|         <div class="col-lg-4 col-md-4 col-sm-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'categories'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="categoryReport"></div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-12 col-md-12 col-sm-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'budgets'|_ }} ({{ 'splitByAccount'|_|lower }})</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="balanceReport"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|  | ||||
|         </div> | ||||
|     </div> | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-12 col-md-12 col-sm-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'bills'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="billReport"></div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
| {% endblock %} | ||||
| {% block styles %} | ||||
|     <link rel="stylesheet" href="v1/css/bootstrap-sortable.css?v={{ FF_VERSION }}" type="text/css" media="all" nonce="{{ JS_NONCE }}"> | ||||
| {% endblock %} | ||||
| {% block scripts %} | ||||
|  | ||||
|     <script type="text/javascript" src="v1/js/lib/bootstrap-sortable.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|     <script type="text/javascript" src="v1/js/lib/Chart.bundle.min.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|     <script type="text/javascript" src="v1/js/ff/charts.defaults.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|     <script type="text/javascript" src="v1/js/ff/charts.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|     <script type="text/javascript" nonce="{{ JS_NONCE }}"> | ||||
|         var year = {{ start.year }}; | ||||
|         var month = {{ start.month }}; | ||||
|  | ||||
|         // to report another URL: | ||||
|         var startDate = '{{ start.format('Ymd') }}'; | ||||
|         var endDate = '{{ end.format('Ymd') }}'; | ||||
|         var reportType = '{{ reportType }}'; | ||||
|         var accountIds = '{{ accountIds }}'; | ||||
|  | ||||
|         // uri's for data | ||||
|         var accountReportUri = '{{ route('report-data.account.general', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var categoryReportUri = '{{ route('report-data.category.operations', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var budgetReportUri = '{{ route('report-data.budget.general', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var balanceReportUri = '{{ route('report-data.balance.general', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var incomeReportUri = '{{ route('report-data.operations.income', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var expenseReportUri = '{{ route('report-data.operations.expenses', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var incExpReportUri = '{{ route('report-data.operations.operations', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var billReportUri = '{{ route('report-data.bills.overview', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|  | ||||
|         // uri's for charts: | ||||
|         var accountChartUri = '{{ route('chart.account.report', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|  | ||||
|     </script> | ||||
|     <script type="text/javascript" src="v1/js/ff/reports/all.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|     <script type="text/javascript" src="v1/js/ff/reports/default/all.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|     <script type="text/javascript" src="v1/js/ff/reports/default/month.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
| {% endblock %} | ||||
							
								
								
									
										224
									
								
								resources/views/reports/default/multi-year.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										224
									
								
								resources/views/reports/default/multi-year.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,224 @@ | ||||
| {% extends './v1/layout/default' %} | ||||
|  | ||||
| {% block breadcrumbs %} | ||||
|     {{ Breadcrumbs.render(Route.getCurrentRoute.getName, accountIds, start, end) }} | ||||
| {% endblock %} | ||||
|  | ||||
| {% block content %} | ||||
|  | ||||
|     {# charts #} | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-12 col-md-12 col-sm-12"> | ||||
|             <div class="box" id="year-inc-exp"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'incomeVsExpenses'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body"> | ||||
|                     <canvas id="income-expenses-chart" style="width:100%;height:400px;" height="400" width="100%"></canvas> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
|     {# balances and income vs. expense. #} | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'accountBalances'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="accountReport"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|         <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'incomeVsExpenses'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="incomeVsExpenseReport"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
|     {# block with income #} | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'income'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="incomeReport"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|         {# block with expenses #} | ||||
|         <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'expenses'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="expenseReport"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
|     {# net worth #} | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-12 col-md-12 col-sm-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'net_worth'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body"> | ||||
|                     <canvas id="net-worth" style="width:100%;height:400px;" height="400" width="100%"></canvas> | ||||
|                 </div> | ||||
|                 <div class="box-footer"> | ||||
|                     <small> | ||||
|                         {{ 'net_filtered_prefs'|_ }} | ||||
|                     </small> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
|  | ||||
|     {# This is the budget overview generated by budget period report #} | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-12 col-md-12 col-sm-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'budgets'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body no-padding table-responsive" id="budgetPeriodReport"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
|  | ||||
|     {# This is the chart that belongs to the above overview. #} | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-12 col-md-12 col-sm-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'chart'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body"> | ||||
|                     <p id="budget_help" class="text-muted text-center">{{ 'budget_chart_click'|_ }}</p> | ||||
|                     <canvas id="budget_chart" style="width:100%;height:400px;" height="400" width="100%"></canvas> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
|     {# same thing but for categories (expenses) #} | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-12 col-md-12 col-sm-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'categories'|_ }} ({{ 'expenses'|_ }})</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body no-padding table-responsive" id="categoryExpense"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
|     {# same thing but for categories (income) #} | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-12 col-md-12 col-sm-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'categories'|_ }} ({{ 'income'|_ }})</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body no-padding table-responsive" id="categoryIncome"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
|     {# and the same chart too! #} | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-12 col-md-12 col-sm-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'chart'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body"> | ||||
|                     <p id="category_help" class="text-muted text-center">{{ 'category_chart_click'|_ }}</p> | ||||
|                     <canvas id="category_chart" style="width:100%;height:400px;" height="400" width="100%"></canvas> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
| {% endblock %} | ||||
| {% block styles %} | ||||
|     <link rel="stylesheet" href="v1/css/bootstrap-sortable.css?v={{ FF_VERSION }}" type="text/css" media="all" nonce="{{ JS_NONCE }}"> | ||||
| {% endblock %} | ||||
| {% block scripts %} | ||||
|  | ||||
|     <script type="text/javascript" src="v1/js/lib/bootstrap-sortable.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|     <script type="text/javascript" src="v1/js/lib/Chart.bundle.min.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|     <script type="text/javascript" src="v1/js/ff/charts.defaults.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|     <script type="text/javascript" src="v1/js/ff/charts.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|     <script type="text/javascript" nonce="{{ JS_NONCE }}"> | ||||
|         var year = {{ start.year }}; | ||||
|         var month = {{ start.month }}; | ||||
|  | ||||
|         // to report another URL: | ||||
|         var startDate = '{{ start.format('Ymd') }}'; | ||||
|         var endDate = '{{ end.format('Ymd') }}'; | ||||
|         var accountIds = '{{ accountIds }}'; | ||||
|  | ||||
|         // report uri's | ||||
|         var opChartUri = '{{ route('chart.report.operations', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var netWorthUri = '{{ route('chart.report.net-worth', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|  | ||||
|         // data uri's | ||||
|         var accountReportUri = '{{ route('report-data.account.general', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var incomeReportUri = '{{ route('report-data.operations.income', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var expenseReportUri = '{{ route('report-data.operations.expenses', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var incExpReportUri = '{{ route('report-data.operations.operations', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|  | ||||
|         var budgetPeriodReportUri = '{{ route('report-data.budget.period', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var categoryExpenseUri = '{{ route('report-data.category.expenses', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var categoryIncomeUri = '{{ route('report-data.category.income', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var billReportUri = ''; | ||||
|  | ||||
|     </script> | ||||
|     <script type="text/javascript" src="v1/js/ff/reports/all.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|     <script type="text/javascript" src="v1/js/ff/reports/default/all.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|     <script type="text/javascript" src="v1/js/ff/reports/default/multi-year.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
| {% endblock %} | ||||
							
								
								
									
										222
									
								
								resources/views/reports/default/year.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										222
									
								
								resources/views/reports/default/year.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,222 @@ | ||||
| {% extends './v1/layout/default' %} | ||||
|  | ||||
| {% block breadcrumbs %} | ||||
|     {{ Breadcrumbs.render(Route.getCurrentRoute.getName, accountIds, start, end) }} | ||||
| {% endblock %} | ||||
|  | ||||
| {% block content %} | ||||
|  | ||||
|     {# charts #} | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-12 col-md-12 col-sm-12"> | ||||
|             <div class="box" id="year-inc-exp"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'incomeVsExpenses'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body"> | ||||
|                     <canvas id="income-expenses-chart" style="width:100%;height:400px;" height="400" width="100%"></canvas> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
|     {# balances and inc vs exp #} | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'accountBalances'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="accountReport"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|         <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'incomeVsExpenses'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="incomeVsExpenseReport"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
|     {# income and expenses. #} | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'income'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="incomeReport"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|         <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'expenses'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="expenseReport"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
|     {# net worth #} | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-12 col-md-12 col-sm-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'net_worth'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body"> | ||||
|                     <canvas id="net-worth" style="width:100%;height:400px;" height="400" width="100%"></canvas> | ||||
|                 </div> | ||||
|                 <div class="box-footer"> | ||||
|                     <small> | ||||
|                         {{ 'net_filtered_prefs'|_ }} | ||||
|                     </small> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
|     {# This is the budget overview generated by budget period report #} | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-12 col-md-12 col-sm-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'budgets'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body no-padding table-responsive" id="budgetPeriodReport"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
|  | ||||
|     {# This is the chart that belongs to the above overview. #} | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-12 col-md-12 col-sm-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'chart'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body"> | ||||
|                     <p id="budget_help" class="text-muted text-center">{{ 'budget_chart_click'|_ }}</p> | ||||
|                     <canvas id="budget_chart" style="width:100%;height:400px;" height="400" width="100%"></canvas> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
|     {# same thing but for categories (expenses) #} | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-12 col-md-12 col-sm-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'categories'|_ }} ({{ 'expenses'|_ }})</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body no-padding table-responsive" id="categoryExpense"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
|     {# same thing but for categories (income) #} | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-12 col-md-12 col-sm-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'categories'|_ }} ({{ 'income'|_ }})</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body no-padding table-responsive" id="categoryIncome"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
|     {# and the same chart too! #} | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-12 col-md-12 col-sm-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'chart'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body"> | ||||
|                     <p id="category_help" class="text-muted text-center">{{ 'category_chart_click'|_ }}</p> | ||||
|                     <canvas id="category_chart" style="width:100%;height:400px;" height="400" width="100%"></canvas> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
|  | ||||
| {% endblock %} | ||||
| {% block scripts %} | ||||
|     <script type="text/javascript" src="v1/js/lib/bootstrap-sortable.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|     <script type="text/javascript" src="v1/js/lib/Chart.bundle.min.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|     <script type="text/javascript" src="v1/js/ff/charts.defaults.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|     <script type="text/javascript" src="v1/js/ff/charts.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|     <script type="text/javascript" nonce="{{ JS_NONCE }}"> | ||||
|         var year = '{{ start.year }}'; | ||||
|  | ||||
|         // to report another URL: | ||||
|         var startDate = '{{ start.format('Ymd') }}'; | ||||
|         var endDate = '{{ end.format('Ymd') }}'; | ||||
|         var accountIds = '{{ accountIds }}'; | ||||
|  | ||||
|         // report uri's | ||||
|         var opChartUri = '{{ route('chart.report.operations', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var netWorthUri = '{{ route('chart.report.net-worth', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|  | ||||
|         // data uri's | ||||
|         var accountReportUri = '{{ route('report-data.account.general', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var incomeReportUri = '{{ route('report-data.operations.income', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var expenseReportUri = '{{ route('report-data.operations.expenses', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var incExpReportUri = '{{ route('report-data.operations.operations', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|  | ||||
|         var budgetPeriodReportUri = '{{ route('report-data.budget.period', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var categoryExpenseUri = '{{ route('report-data.category.expenses', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var categoryIncomeUri = '{{ route('report-data.category.income', [accountIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var billReportUri = ''; | ||||
|  | ||||
|     </script> | ||||
|     <script type="text/javascript" src="v1/js/ff/reports/all.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|     <script type="text/javascript" src="v1/js/ff/reports/default/all.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|     <script type="text/javascript" src="v1/js/ff/reports/default/year.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|  | ||||
| {% endblock %} | ||||
| {% block styles %} | ||||
|     <link rel="stylesheet" href="v1/css/bootstrap-sortable.css?v={{ FF_VERSION }}" type="text/css" media="all" nonce="{{ JS_NONCE }}"> | ||||
| {% endblock %} | ||||
| @@ -0,0 +1,44 @@ | ||||
| <table class="table table-hover sortable"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th data-defaultsign="az">{{ 'name'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'spent'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'earned'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'sum'|_ }}</th> | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|     {% for account in report %} | ||||
|         <tr> | ||||
|             <td> | ||||
|                 <a href="{{ route('accounts.show', [account.account_id]) }}" title="{{ account.account_name }}">{{ account.account_name }}</a> | ||||
|             </td> | ||||
|             <td style="text-align: right;"> | ||||
|                 {{ formatAmountBySymbol(account.spent, account.currency_symbol, account.currency_decimal_places) }} | ||||
|             </td> | ||||
|             <td style="text-align: right;"> | ||||
|                 {{ formatAmountBySymbol(account.earned, account.currency_symbol, account.currency_decimal_places) }} | ||||
|             </td> | ||||
|             <td style="text-align: right;"> | ||||
|                 {{ formatAmountBySymbol(account.sum, account.currency_symbol, account.currency_decimal_places) }} | ||||
|             </td> | ||||
|         </tr> | ||||
|     {% endfor %} | ||||
|     </tbody> | ||||
|     <tfoot> | ||||
|     {% for sum in sums %} | ||||
|         <tr> | ||||
|             <td>{{ 'sum'|_ }} ({{ sum.currency_name }})</td> | ||||
|             <td style="text-align: right;"> | ||||
|                 {{ formatAmountBySymbol(sum.spent, sum.currency_symbol, sum.currency_decimal_places) }} | ||||
|             </td> | ||||
|             <td style="text-align: right;"> | ||||
|                 {{ formatAmountBySymbol(sum.earned, sum.currency_symbol, sum.currency_decimal_places) }} | ||||
|             </td> | ||||
|             <td style="text-align: right;"> | ||||
|                 {{ formatAmountBySymbol(sum.sum, sum.currency_symbol, sum.currency_decimal_places) }} | ||||
|             </td> | ||||
|         </tr> | ||||
|     {% endfor %} | ||||
|     </tfoot> | ||||
| </table> | ||||
							
								
								
									
										55
									
								
								resources/views/reports/double/partials/accounts.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								resources/views/reports/double/partials/accounts.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,55 @@ | ||||
| <table class="table table-hover sortable"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th data-defaultsign="az">{{ 'name'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'spent'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'earned'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'sum'|_ }}</th> | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|     {% for account in report %} | ||||
|         <tr> | ||||
|             <td> | ||||
|                 {% if account.source_name == account.dest_name %} | ||||
|                     {{ account.source_name }} | ||||
|                 {% else %} | ||||
|                     {{ account.source_name }} / {{ account.dest_name }} | ||||
|                 {% endif %} | ||||
|                 {% if account.source_iban != '' and account.dest_iban != '' %} | ||||
|                     {% if account.source_iban == account.dest_iban %} | ||||
|                         ({{ account.source_iban }}) | ||||
|                     {% else %} | ||||
|                         ({{ account.source_iban }} / ({{ account.dest_iban }})) | ||||
|                     {% endif %} | ||||
|                 {% endif %} | ||||
|             </td> | ||||
|             <td style="text-align: right;"> | ||||
|                 {{ formatAmountBySymbol(account.spent, account.currency_symbol, account.currency_decimal_places) }} | ||||
|             </td> | ||||
|             <td style="text-align: right;"> | ||||
|                 {{ formatAmountBySymbol(account.earned, account.currency_symbol, account.currency_decimal_places) }} | ||||
|             </td> | ||||
|             <td style="text-align: right;"> | ||||
|                 {{ formatAmountBySymbol(account.sum, account.currency_symbol, account.currency_decimal_places) }} | ||||
|             </td> | ||||
|         </tr> | ||||
|     {% endfor %} | ||||
|     </tbody> | ||||
|     <tfoot> | ||||
|     {% for sum in sums %} | ||||
|         <tr> | ||||
|             <td>{{ 'sum'|_ }} ({{ sum.currency_name }})</td> | ||||
|             <td style="text-align: right;"> | ||||
|                 {{ formatAmountBySymbol(sum.spent, sum.currency_symbol, sum.currency_decimal_places) }} | ||||
|             </td> | ||||
|             <td style="text-align: right;"> | ||||
|                 {{ formatAmountBySymbol(sum.earned, sum.currency_symbol, sum.currency_decimal_places) }} | ||||
|             </td> | ||||
|             <td style="text-align: right;"> | ||||
|                 {{ formatAmountBySymbol(sum.sum, sum.currency_symbol, sum.currency_decimal_places) }} | ||||
|             </td> | ||||
|         </tr> | ||||
|     {% endfor %} | ||||
|     </tfoot> | ||||
| </table> | ||||
							
								
								
									
										46
									
								
								resources/views/reports/double/partials/avg-expenses.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								resources/views/reports/double/partials/avg-expenses.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,46 @@ | ||||
| <table class="table table-hover sortable"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th data-defaultsign="az">{{ 'account'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'spent_average'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'total'|_ }}</th> | ||||
|         <th data-defaultsign="_19">{{ 'transaction_count'|_ }}</th> | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|     {% for row in result %} | ||||
|         {% if loop.index > listLength %} | ||||
|             <tr class="overListLength"> | ||||
|         {% else %} | ||||
|             <tr> | ||||
|         {% endif %} | ||||
|         <td data-sortable="false"> | ||||
|             <a href="{{ route('accounts.show', row.source_account_id) }}"> | ||||
|                 {{ row.source_account_name }} | ||||
|             </a> | ||||
|         </td> | ||||
|         <td data-value="{{ row.avg }}" style="text-align: right;"> | ||||
|             {{ formatAmountBySymbol(row.avg, row.currency_symbol, row.currency_decimal_places) }} | ||||
|         </td> | ||||
|  | ||||
|         <td data-value="{{ row.sum }}" style="text-align: right;"> | ||||
|             {{ formatAmountBySymbol(row.sum, row.currency_symbol, row.currency_decimal_places) }} | ||||
|         </td> | ||||
|  | ||||
|         <td data-value="{{ row.transactions }}"> | ||||
|             {{ row.transactions }} | ||||
|         </td> | ||||
|  | ||||
|         </tr> | ||||
|     {% endfor %} | ||||
|     </tbody> | ||||
|     <tfoot> | ||||
|     {% if result|length > listLength %} | ||||
|         <tr> | ||||
|             <td colspan="5" class="active"> | ||||
|                 <a href="#" class="listLengthTrigger">{{ trans('firefly.show_full_list',{number:incomeTopLength}) }}</a> | ||||
|             </td> | ||||
|         </tr> | ||||
|     {% endif %} | ||||
|     </tfoot> | ||||
| </table> | ||||
							
								
								
									
										46
									
								
								resources/views/reports/double/partials/avg-income.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								resources/views/reports/double/partials/avg-income.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,46 @@ | ||||
| <table class="table table-hover sortable"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th data-defaultsign="az">{{ 'account'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'spent_average'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'total'|_ }}</th> | ||||
|         <th data-defaultsign="_19">{{ 'transaction_count'|_ }}</th> | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|     {% for row in result %} | ||||
|         {% if loop.index > listLength %} | ||||
|             <tr class="overListLength"> | ||||
|         {% else %} | ||||
|             <tr> | ||||
|         {% endif %} | ||||
|         <td data-sortable="false"> | ||||
|             <a href="{{ route('accounts.show', row.destination_account_id) }}"> | ||||
|                 {{ row.destination_account_name }} | ||||
|             </a> | ||||
|         </td> | ||||
|         <td data-value="{{ row.avg }}" style="text-align: right;"> | ||||
|             {{ formatAmountBySymbol(row.avg, row.currency_symbol, row.currency_decimal_places) }} | ||||
|         </td> | ||||
|  | ||||
|         <td data-value="{{ row.sum }}" style="text-align: right;"> | ||||
|             {{ formatAmountBySymbol(row.sum, row.currency_symbol, row.currency_decimal_places) }} | ||||
|         </td> | ||||
|  | ||||
|         <td data-value="{{ row.transactions }}"> | ||||
|             {{ row.transactions }} | ||||
|         </td> | ||||
|  | ||||
|         </tr> | ||||
|     {% endfor %} | ||||
|     </tbody> | ||||
|     <tfoot> | ||||
|     {% if result|length > listLength %} | ||||
|         <tr> | ||||
|             <td colspan="5" class="active"> | ||||
|                 <a href="#" class="listLengthTrigger">{{ trans('firefly.show_full_list',{number:incomeTopLength}) }}</a> | ||||
|             </td> | ||||
|         </tr> | ||||
|     {% endif %} | ||||
|     </tfoot> | ||||
| </table> | ||||
							
								
								
									
										55
									
								
								resources/views/reports/double/partials/top-expenses.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								resources/views/reports/double/partials/top-expenses.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,55 @@ | ||||
| <table class="table table-hover sortable"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th data-defaultsort="disabled">{{ 'description'|_ }}</th> | ||||
|         <th data-defaultsign="month">{{ 'date'|_ }}</th> | ||||
|         <th data-defaultsign="az">{{ 'source_account'|_ }}</th> | ||||
|         <th data-defaultsign="az">{{ 'destination_account'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'amount'|_ }}</th> | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|     {% for row in result %} | ||||
|         {% if loop.index > listLength %} | ||||
|             <tr class="overListLength"> | ||||
|         {% else %} | ||||
|             <tr> | ||||
|         {% endif %} | ||||
|         <td data-sortable="false"> | ||||
|             <a href="{{ route('transactions.show', row.transaction_group_id) }}"> | ||||
|                 {{ row.description }} | ||||
|             </a> | ||||
|         </td> | ||||
|         <td data-value="{{ row.date_sort }}"> | ||||
|             {{ row.date }} | ||||
|         </td> | ||||
|  | ||||
|         <td data-sortable="false"> | ||||
|             <a href="{{ route('accounts.show', row.source_account_id) }}"> | ||||
|                 {{ row.source_account_name }} | ||||
|             </a> | ||||
|         </td> | ||||
|         <td data-sortable="false"> | ||||
|             <a href="{{ route('accounts.show', row.destination_account_id) }}"> | ||||
|                 {{ row.destination_account_name }} | ||||
|             </a> | ||||
|         </td> | ||||
|  | ||||
|  | ||||
|         <td data-value="{{ row.amount }}" style="text-align: right;"> | ||||
|             {{ formatAmountBySymbol(row.amount, row.currency_symbol, row.currency_decimal_places) }} | ||||
|         </td> | ||||
|  | ||||
|         </tr> | ||||
|     {% endfor %} | ||||
|     </tbody> | ||||
|     <tfoot> | ||||
|     {% if result|length > listLength %} | ||||
|         <tr> | ||||
|             <td colspan="5" class="active"> | ||||
|                 <a href="#" class="listLengthTrigger">{{ trans('firefly.show_full_list',{number:incomeTopLength}) }}</a> | ||||
|             </td> | ||||
|         </tr> | ||||
|     {% endif %} | ||||
|     </tfoot> | ||||
| </table> | ||||
							
								
								
									
										55
									
								
								resources/views/reports/double/partials/top-income.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								resources/views/reports/double/partials/top-income.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,55 @@ | ||||
| <table class="table table-hover sortable"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th data-defaultsort="disabled">{{ 'description'|_ }}</th> | ||||
|         <th data-defaultsign="month">{{ 'date'|_ }}</th> | ||||
|         <th data-defaultsign="az">{{ 'source_account'|_ }}</th> | ||||
|         <th data-defaultsign="az">{{ 'destination_account'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'amount'|_ }}</th> | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|     {% for row in result %} | ||||
|         {% if loop.index > listLength %} | ||||
|             <tr class="overListLength"> | ||||
|         {% else %} | ||||
|             <tr> | ||||
|         {% endif %} | ||||
|         <td data-sortable="false"> | ||||
|             <a href="{{ route('transactions.show', row.transaction_group_id) }}"> | ||||
|                 {{ row.description }} | ||||
|             </a> | ||||
|         </td> | ||||
|         <td data-value="{{ row.date_sort }}"> | ||||
|             {{ row.date }} | ||||
|         </td> | ||||
|  | ||||
|         <td data-sortable="false"> | ||||
|             <a href="{{ route('accounts.show', row.source_account_id) }}"> | ||||
|                 {{ row.source_account_name }} | ||||
|             </a> | ||||
|         </td> | ||||
|         <td data-sortable="false"> | ||||
|             <a href="{{ route('accounts.show', row.destination_account_id) }}"> | ||||
|                 {{ row.destination_account_name }} | ||||
|             </a> | ||||
|         </td> | ||||
|  | ||||
|  | ||||
|         <td data-value="{{ row.amount }}" style="text-align: right;"> | ||||
|             {{ formatAmountBySymbol(row.amount, row.currency_symbol, row.currency_decimal_places) }} | ||||
|         </td> | ||||
|  | ||||
|         </tr> | ||||
|     {% endfor %} | ||||
|     </tbody> | ||||
|     <tfoot> | ||||
|     {% if result|length > listLength %} | ||||
|         <tr> | ||||
|             <td colspan="5" class="active"> | ||||
|                 <a href="#" class="listLengthTrigger">{{ trans('firefly.show_full_list',{number:incomeTopLength}) }}</a> | ||||
|             </td> | ||||
|         </tr> | ||||
|     {% endif %} | ||||
|     </tfoot> | ||||
| </table> | ||||
							
								
								
									
										234
									
								
								resources/views/reports/double/report.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										234
									
								
								resources/views/reports/double/report.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,234 @@ | ||||
| {% extends './v1/layout/default' %} | ||||
|  | ||||
| {% block breadcrumbs %} | ||||
|     {{ Breadcrumbs.render(Route.getCurrentRoute.getName, accountIds, doubleIds, start, end) }} | ||||
| {% endblock %} | ||||
|  | ||||
| {% block content %} | ||||
|  | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-6 col-md-12 col-sm-12 col-xs-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'in_out_accounts'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="opsAccounts"> | ||||
|                     {# loading indicator #} | ||||
|                     <div class="overlay"> | ||||
|                         <span class="fa fa-refresh fa-spin"></span> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|  | ||||
|         <div class="col-lg-6 col-md-12 col-sm-12 col-xs-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'in_out_accounts_per_asset'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="opsAccountsAsset"> | ||||
|                     {# loading indicator #} | ||||
|                     <div class="overlay"> | ||||
|                         <span class="fa fa-refresh fa-spin"></span> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-4 col-md-6"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'expense_per_category'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body"> | ||||
|                     <div style="width:100%;margin:0 auto;"> | ||||
|                         <canvas id="category-out-pie-chart" style="width:100%;height:250px;" height="250"></canvas> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|         <div class="col-lg-4 col-md-6"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'income_per_category'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body"> | ||||
|                     <div style="width:100%;margin:0 auto;"> | ||||
|                         <canvas id="category-in-pie-chart" style="width:100%;height:250px;" height="250"></canvas> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|         <div class="col-lg-4 col-md-6"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'expense_per_budget'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body"> | ||||
|                     <div style="width:100%;margin:0 auto;"> | ||||
|                         <canvas id="budgets-out-pie-chart" style="width:100%;height:250px;" height="250"></canvas> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-6 col-md-6"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'expense_per_tag'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body"> | ||||
|                     <div style="width:100%;margin:0 auto;"> | ||||
|                         <canvas id="tag-out-pie-chart" style="width:100%;height:250px;" height="250"></canvas> | ||||
|                     </div> | ||||
|                 </div> | ||||
|                 <div class="box-footer"> | ||||
|                     <p class="text-info"> | ||||
|                         <em>{{ 'double_report_expenses_charted_once'|_ }}</em> | ||||
|                     </p> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|         <div class="col-lg-6 col-md-6"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'income_per_tag'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body"> | ||||
|                     <div style="width:100%;margin:0 auto;"> | ||||
|                         <canvas id="tag-in-pie-chart" style="width:100%;height:250px;" height="250"></canvas> | ||||
|                     </div> | ||||
|                 </div> | ||||
|                 <div class="box-footer"> | ||||
|                     <p class="text-info"> | ||||
|                         <em>{{ 'double_report_expenses_charted_once'|_ }}</em> | ||||
|                     </p> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
|  | ||||
|     {% for account in doubles %} | ||||
|         <div class="row"> | ||||
|             <div class="col-lg-12"> | ||||
|                 <div class="box" id="incomeAndExpensesChart"> | ||||
|                     <div class="box-header with-border"> | ||||
|                         <h3 class="box-title">{{ 'income_and_expenses'|_ }} ({{ account.name }}) {% if account.iban %}({{ account.iban }}){% endif %}</h3> | ||||
|                     </div> | ||||
|                     <div class="box-body"> | ||||
|                         <canvas class="main_double_canvas" | ||||
|                                 data-url="{{ route('chart.double.main', [accountIds, account.id, start.format('Ymd'), end.format('Ymd')]) }}" | ||||
|                                 id="in-out-chart-{{ account.id }}" style="width:100%;height:400px;" height="400" width="100%"></canvas> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     {% endfor %} | ||||
|  | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'expenses'|_ }} ({{ trans('firefly.topX', {number: listLength}) }})</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="topExpensesHolder"> | ||||
|                     {# loading indicator #} | ||||
|                     <div class="overlay"> | ||||
|                         <span class="fa fa-refresh fa-spin"></span> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|  | ||||
|         <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'income'|_ }} ({{ trans('firefly.topX', {number: listLength}) }})</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="topIncomeHolder"> | ||||
|                     {# loading indicator #} | ||||
|                     <div class="overlay"> | ||||
|                         <span class="fa fa-refresh fa-spin"></span> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-6"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'average_spending_per_source'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="avgExpensesHolder"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|         <div class="col-lg-6"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'average_earning_per_destination'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="avgIncomeHolder"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
| {% endblock %} | ||||
|  | ||||
| {% block scripts %} | ||||
|     <script type="text/javascript" src="v1/js/lib/Chart.bundle.min.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|     <script type="text/javascript" src="v1/js/ff/charts.defaults.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|     <script type="text/javascript" src="v1/js/ff/charts.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|     <script type="text/javascript" src="v1/js/lib/bootstrap-sortable.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|  | ||||
|     <script type="text/javascript" nonce="{{ JS_NONCE }}"> | ||||
|         // to report another URL: | ||||
|         var startDate = '{{ start.format('Ymd') }}'; | ||||
|         var endDate = '{{ end.format('Ymd') }}'; | ||||
|         var accountIds = '{{ accountIds }}'; | ||||
|         var doubleIds = '{{ doubleIds }}'; | ||||
|  | ||||
|         // chart uri's | ||||
|         {#var mainUri = '{{ route('chart.expense.main', [accountIds, expenseIds, start.format('Ymd'), end.format('Ymd')]) }}';#} | ||||
|  | ||||
|         // html blocks. | ||||
|         var opsAccountsUri = '{{ route('report-data.double.operations', [accountIds, doubleIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var opsAccountsAssetUri = '{{ route('report-data.double.ops-asset', [accountIds, doubleIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|  | ||||
|         // pie charts: | ||||
|         var categoryOutUri = '{{ route('chart.double.category-expense', [accountIds, doubleIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var categoryInUri = '{{ route('chart.double.category-income', [accountIds, doubleIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var budgetsOutUri = '{{ route('chart.double.budget-expense', [accountIds, doubleIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var tagOutUri = '{{ route('chart.double.tag-expense', [accountIds, doubleIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var tagInUri = '{{ route('chart.double.tag-income', [accountIds, doubleIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|  | ||||
|         var avgExpensesUri = '{{ route('report-data.double.avg-expenses', [accountIds, doubleIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var topExpensesUri = '{{ route('report-data.double.top-expenses', [accountIds, doubleIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var avgIncomeUri = '{{ route('report-data.double.avg-income', [accountIds, doubleIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var topIncomeUri = '{{ route('report-data.double.top-income', [accountIds, doubleIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|  | ||||
|     </script> | ||||
|     <script type="text/javascript" src="v1/js/ff/reports/all.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|     <script type="text/javascript" src="v1/js/ff/reports/double/month.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|  | ||||
| {% endblock %} | ||||
|  | ||||
| {% block styles %} | ||||
|     <link rel="stylesheet" href="v1/css/bootstrap-sortable.css?v={{ FF_VERSION }}" type="text/css" media="all" nonce="{{ JS_NONCE }}"> | ||||
| {% endblock %} | ||||
							
								
								
									
										195
									
								
								resources/views/reports/index.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										195
									
								
								resources/views/reports/index.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,195 @@ | ||||
| {% extends './v1/layout/default' %} | ||||
|  | ||||
| {% block breadcrumbs %} | ||||
|     {{ Breadcrumbs.render(Route.getCurrentRoute.getName) }} | ||||
| {% endblock %} | ||||
|  | ||||
| {% block content %} | ||||
|  | ||||
|     <div class="row"> | ||||
|         <form class="form-horizontal nodisablebutton" id="report-form" action="{{ route('reports.index.post') }}" method="post"> | ||||
|             <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12"> | ||||
|                 <div class="box"> | ||||
|                     <div class="box-header with-border"> | ||||
|                         <h3 class="box-title">{{ 'reports'|_ }}</h3> | ||||
|                     </div> | ||||
|                     <div class="box-body"> | ||||
|                         <p class="text-info"> | ||||
|                             {{ 'more_info_help'|_ }} | ||||
|                         </p> | ||||
|  | ||||
|                         <input type="hidden" name="_token" value="{{ csrf_token() }}"/> | ||||
|                         <div class="form-group"> | ||||
|                             <label for="inputReportType" class="col-sm-3 control-label">{{ 'report_type'|_ }}</label> | ||||
|  | ||||
|                             <div class="col-sm-9"> | ||||
|                                 <select name="report_type" class="form-control" id="inputReportType"> | ||||
|                                     <option selected label="{{ 'report_type_default'|_ }}" value="default">{{ 'report_type_default'|_ }}</option> | ||||
|                                     <option label="{{ 'report_type_audit'|_ }}" value="audit">{{ 'report_type_audit'|_ }}</option> | ||||
|                                     <option label="{{ 'report_type_budget'|_ }}" value="budget">{{ 'report_type_budget'|_ }}</option> | ||||
|                                     <option label="{{ 'report_type_category'|_ }}" value="category">{{ 'report_type_category'|_ }}</option> | ||||
|                                     <option label="{{ 'report_type_tag'|_ }}" value="tag">{{ 'report_type_tag'|_ }}</option> | ||||
|                                     <option label="{{ 'report_type_double'|_ }}" value="double">{{ 'report_type_double'|_ }}</option> | ||||
|                                 </select> | ||||
|                             </div> | ||||
|                         </div> | ||||
|                         <div class="form-group"> | ||||
|                             <label for="inputAccounts" class="col-sm-3 control-label">{{ 'report_included_accounts'|_ }}</label> | ||||
|  | ||||
|                             <div class="col-sm-9" id="inputAccountsSelect"> | ||||
|                                 <select id="inputAccounts" name="accounts[]" multiple class="form-control"> | ||||
|                                     {% for role, accountList in groupedAccounts  %} | ||||
|                                         <optgroup label="{{ role }}"> | ||||
|                                     {% for account in accountList %} | ||||
|                                         <option | ||||
|                                                 value="{{ account.id }}" | ||||
|                                                 label="{{ account.name }}{% if accountGetMetaField(account, 'accountRole') == 'sharedAsset' %} ({{ 'shared'|_|lower }}){% endif %}"> | ||||
|                                             {{ account.name }}{% if accountGetMetaField(account, 'accountRole') == 'sharedAsset' %} ({{ 'shared'|_|lower }}){% endif %} | ||||
|                                         </option> | ||||
|                                     {% endfor %} | ||||
|                                         </optgroup> | ||||
|                                     {% endfor %} | ||||
|                                 </select> | ||||
|  | ||||
|                             </div> | ||||
|                         </div> | ||||
|  | ||||
|  | ||||
|                         <div class="form-group"> | ||||
|                             <label for="inputDateRange" class="col-sm-3 control-label">{{ 'report_date_range'|_ }}</label> | ||||
|  | ||||
|                             <div class="col-sm-9"> | ||||
|                                 <input autocomplete="off" type="text" class="form-control" id="inputDateRange" name="daterange" | ||||
|                                        value="{{ Session.get('start').format('Y-m-d') }} - {{ Session.get('end').format('Y-m-d') }}"> | ||||
|                             </div> | ||||
|                         </div> | ||||
|                         <div class="form-group"> | ||||
|                             <label for="__none__" class="col-sm-3 control-label">{{ 'report_preset_ranges'|_ }}</label> | ||||
|  | ||||
|                             <div class="col-sm-9"> | ||||
|                                 {% for year, data in months %} | ||||
|                                     <a href="#" class="date-select" data-start="{{ data.start }}" data-end="{{ data.end }}">{{ year }}</a> | ||||
|                                     {% if customFiscalYear == 1 %} | ||||
|                                         <br/> | ||||
|                                         <a href="#" class="date-select" data-start="{{ data.fiscal_start }}" data-end="{{ data.fiscal_end }}">{{ year }} | ||||
|                                             ({{ 'fiscal_year'|_|lower }})</a> | ||||
|                                     {% endif %} | ||||
|                                     <ul class="list-inline"> | ||||
|                                         {% for month in data.months %} | ||||
|                                             <li> | ||||
|                                                 <a data-start="{{ month.start }}" data-end="{{ month.end }}" class="date-select" | ||||
|                                                    href="#">{{ month.formatted }}</a> | ||||
|                                             </li> | ||||
|                                         {% endfor %} | ||||
|                                     </ul> | ||||
|                                 {% endfor %} | ||||
|                             </div> | ||||
|                         </div> | ||||
|  | ||||
|                     </div> | ||||
|                 </div> | ||||
|                 <div class="box" id="extra-options-box"> | ||||
|                     <div class="box-header with-border"> | ||||
|                         <h3 class="box-title">{{ 'reports_extra_options'|_ }}</h3> | ||||
|                     </div> | ||||
|                     <div class="box-body" id="extra-options"> | ||||
|                     </div> | ||||
|                     {# loading indicator #} | ||||
|                     <div class="overlay"> | ||||
|                         <span class="fa fa-refresh fa-spin"></span> | ||||
|                     </div> | ||||
|                 </div> | ||||
|  | ||||
|                 <div class="box"> | ||||
|                     <div class="box-header with-border"> | ||||
|                         <h3 class="box-title">{{ 'reports_submit'|_ }}</h3> | ||||
|                     </div> | ||||
|                     <div class="box-body"> | ||||
|                         <div class="form-group"> | ||||
|                             <div class="col-sm-offset-3 col-sm-9"> | ||||
|                                 <button type="submit" class="btn btn-default">{{ 'submit'|_ }}</button> | ||||
|                             </div> | ||||
|                         </div> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </form> | ||||
|  | ||||
|  | ||||
|         <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'quick_link_reports'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body"> | ||||
|                     <p> | ||||
|                         {{ 'quick_link_examples'|_ }} | ||||
|                     </p> | ||||
|                     <h4>{{ ('quick_link_default_report')|_ }}</h4> | ||||
|                     <ul> | ||||
|                         <li> | ||||
|                             <a href="{{ route('reports.report.default',[accountList, 'currentMonthStart','currentMonthEnd']) }}">{{ 'report_this_month_quick'|_ }}</a> | ||||
|                         </li> | ||||
|                         <li> | ||||
|                             <a href="{{ route('reports.report.default',[accountList, 'currentYearStart','currentYearEnd']) }}">{{ 'report_this_year_quick'|_ }}</a> | ||||
|                         </li> | ||||
|                         {% if customFiscalYear == 1 %} | ||||
|                             <li> | ||||
|                                 <a href="{{ route('reports.report.default',[accountList, 'currentFiscalYearStart','currentFiscalYearEnd']) }}">{{ 'report_this_fiscal_year_quick'|_ }}</a> | ||||
|                             </li> | ||||
|                         {% endif %} | ||||
|                         <li> | ||||
|                             <a href="{{ route('reports.report.default',[accountList, 'previousMonthStart','previousMonthEnd']) }}">{{ 'report_last_month_quick'|_ }}</a> | ||||
|                         </li> | ||||
|                         <li> | ||||
|                             <a href="{{ route('reports.report.default',[accountList, start.format('Ymd'),'currentMonthEnd']) }}">{{ 'report_all_time_quick'|_ }}</a> | ||||
|                         </li> | ||||
|                     </ul> | ||||
|  | ||||
|                     <h4>{{ ('quick_link_audit_report')|_ }}</h4> | ||||
|                     <ul> | ||||
|                         <li> | ||||
|                             <a href="{{ route('reports.report.audit',[accountList, 'currentMonthStart','currentMonthEnd']) }}">{{ 'report_this_month_quick'|_ }}</a> | ||||
|                         </li> | ||||
|                         <li> | ||||
|                             <a href="{{ route('reports.report.audit',[accountList, 'currentYearStart','currentYearEnd']) }}">{{ 'report_this_year_quick'|_ }}</a> | ||||
|                         </li> | ||||
|                         {% if customFiscalYear == 1 %} | ||||
|                             <li> | ||||
|                                 <a href="{{ route('reports.report.audit',[accountList, 'currentFiscalYearStart','currentFiscalYearEnd']) }}">{{ 'report_this_fiscal_year_quick'|_ }}</a> | ||||
|                             </li> | ||||
|                         {% endif %} | ||||
|                         <li> | ||||
|                             <a href="{{ route('reports.report.audit',[accountList, start.format('Ymd'),'currentMonthEnd']) }}">{{ 'report_all_time_quick'|_ }}</a> | ||||
|                         </li> | ||||
|                     </ul> | ||||
|                     <p> | ||||
|                         <em>{{ 'reports_can_bookmark'|_ }}</em> | ||||
|                     </p> | ||||
|                 </div> | ||||
|             </div> | ||||
|  | ||||
|         </div> | ||||
|     </div> | ||||
|     <div style="height:400px;"> </div> | ||||
|  | ||||
| {% endblock %} | ||||
|  | ||||
| {% block styles %} | ||||
|     <link href="v1/css/bootstrap-multiselect.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css" nonce="{{ JS_NONCE }}"> | ||||
| {% endblock %} | ||||
|  | ||||
| {% block scripts %} | ||||
|     <script type="text/javascript" nonce="{{ JS_NONCE }}"> | ||||
|         var minDate = "{{ start.format('Y-m-d') }}"; | ||||
|         var picker; | ||||
|         var selectAllText = "{{ trans('firefly.multi_select_select_all')|escape('js') }}"; | ||||
|         var nonSelectedText = "{{ trans('firefly.multi_select_no_selection')|escape('js') }}"; | ||||
|         var nSelectedText = "{{ trans('firefly.multi_select_n_selected')|escape('js') }}"; | ||||
|         var allSelectedText = "{{ trans('firefly.multi_select_all_selected')|escape('js')   }}"; | ||||
|         var filterPlaceholder = "{{ trans('firefly.multi_select_filter_placeholder')|escape('js') }}"; | ||||
|     </script> | ||||
|     <script type="text/javascript" src="v1/js/lib/bootstrap-multiselect.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|     <script type="text/javascript" src="v1/js/ff/reports/all.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|     <script type="text/javascript" src="v1/js/ff/reports/index.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
| {% endblock %} | ||||
							
								
								
									
										10
									
								
								resources/views/reports/options/budget.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								resources/views/reports/options/budget.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| <div class="form-group"> | ||||
|     <label for="inputBudgets" class="col-sm-3 control-label">{{ 'select_budget'|_ }}</label> | ||||
|     <div class="col-sm-9"> | ||||
|         <select id="inputBudgets" name="budget[]" multiple="multiple" class="form-control"> | ||||
|             {% for budget in budgets %} | ||||
|                 <option value="{{ budget.id }}" label="{{ budget.name }}">{{ budget.name }}</option> | ||||
|             {% endfor %} | ||||
|         </select> | ||||
|     </div> | ||||
| </div> | ||||
							
								
								
									
										11
									
								
								resources/views/reports/options/category.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								resources/views/reports/options/category.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| <div class="form-group"> | ||||
|     <label for="inputCategories" class="col-sm-3 control-label">{{ 'select_category'|_ }}</label> | ||||
|     <div class="col-sm-9"> | ||||
|         <select id="inputCategories" name="category[]" multiple="multiple" class="form-control"> | ||||
|             {% for category in categories %} | ||||
|                 <option value="{{ category.id }}" label="{{ category.name }}">{{ category.name }}</option> | ||||
|             {% endfor %} | ||||
|         </select> | ||||
|  | ||||
|     </div> | ||||
| </div> | ||||
							
								
								
									
										10
									
								
								resources/views/reports/options/double.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								resources/views/reports/options/double.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| <div class="form-group"> | ||||
|     <label for="inputDoubleAccounts" class="col-sm-3 control-label">{{ 'select_expense_revenue'|_ }}</label> | ||||
|     <div class="col-sm-9"> | ||||
|         <select id="inputDoubleAccounts" name="double[]" multiple="multiple" class="form-control"> | ||||
|             {% for account in set %} | ||||
|                 <option value="{{ account.id }}" label="{{ account.name }}{% if account.iban !='' %} ({{ account.iban }}){% endif %}">{{ account.name }}{% if account.iban !='' %} ({{ account.iban }}){% endif %}</option> | ||||
|             {% endfor %} | ||||
|         </select> | ||||
|     </div> | ||||
| </div> | ||||
							
								
								
									
										3
									
								
								resources/views/reports/options/no-options.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								resources/views/reports/options/no-options.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| <p id="no_extra_options"> | ||||
|     <em>{{ 'report_has_no_extra_options'|_ }}</em> | ||||
| </p> | ||||
							
								
								
									
										10
									
								
								resources/views/reports/options/tag.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								resources/views/reports/options/tag.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| <div class="form-group"> | ||||
|     <label for="inputTags" class="col-sm-3 control-label">{{ 'select_tag'|_ }}</label> | ||||
|     <div class="col-sm-9"> | ||||
|         <select id="inputTags" name="tag[]" multiple="multiple" class="form-control"> | ||||
|             {% for tag in tags %} | ||||
|                 <option value="{{ tag.id }}" label="{{ tag.tag|e('html') }}">{{ tag.tag|e('html') }}</option> | ||||
|             {% endfor %} | ||||
|         </select> | ||||
|     </div> | ||||
| </div> | ||||
							
								
								
									
										48
									
								
								resources/views/reports/partials/accounts.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								resources/views/reports/partials/accounts.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,48 @@ | ||||
| <table class="table table-hover sortable"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th data-defaultsign="az">{{ 'name'|_ }}</th> | ||||
|         <th data-defaultsign="_19" class="hidden-xs" style="text-align: right;">{{ 'balanceStart'|_ }}</th> | ||||
|         <th data-defaultsign="_19" class="hidden-xs" style="text-align: right;">{{ 'balanceEnd'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'difference'|_ }}</th> | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|     {% for account in accountReport.accounts %} | ||||
|         <tr> | ||||
|             <td data-value="{{ account.name }}"> | ||||
|                 <a href="{{ route('accounts.show',account.id) }}" title="{{ account.name }}">{{ account.name }}</a> | ||||
|             </td> | ||||
|             <td class="hidden-xs" data-value="{{ account.start_balance }}" style="text-align: right;"> | ||||
|                 {{ formatAmountBySymbol(account.start_balance, account.currency_symbol, account.currency_decimal_places) }} | ||||
|             </td> | ||||
|             <td class="hidden-xs" data-value="{{ account.end_balance }}" style="text-align: right;"> | ||||
|                 {{ formatAmountBySymbol(account.end_balance, account.currency_symbol, account.currency_decimal_places) }} | ||||
|             </td> | ||||
|             <td style="text-align: right;" | ||||
|                 data-value="{{ (account.end_balance - account.start_balance) }}"> | ||||
|                 {{ formatAmountBySymbol(account.end_balance - account.start_balance, account.currency_symbol, account.currency_decimal_places) }} | ||||
|             </td> | ||||
|         </tr> | ||||
|     {% endfor %} | ||||
|     <tr> | ||||
|         <td colspan="4"><em>{{ 'sumOfSums'|_ }}</em></td> | ||||
|     </tr> | ||||
|     {% for sum in accountReport.sums %} | ||||
|     <tr> | ||||
|         <td> | ||||
|               | ||||
|         </td> | ||||
|         <td style="text-align: right;"> | ||||
|             {{ formatAmountBySymbol(sum.start, sum.currency_symbol, sum.currency_decimal_places) }} | ||||
|         </td> | ||||
|         <td style="text-align: right;"> | ||||
|             {{ formatAmountBySymbol(sum.end, sum.currency_symbol, sum.currency_decimal_places) }} | ||||
|         </td> | ||||
|         <td style="text-align: right;"> | ||||
|             {{ formatAmountBySymbol(sum.difference, sum.currency_symbol, sum.currency_decimal_places) }} | ||||
|         </td> | ||||
|     </tr> | ||||
|     {% endfor %} | ||||
|     </tbody> | ||||
| </table> | ||||
							
								
								
									
										61
									
								
								resources/views/reports/partials/balance.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								resources/views/reports/partials/balance.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,61 @@ | ||||
| <table class="table table-hover"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th>{{ 'budgets'|_ }}</th> | ||||
|         {% for account in report.accounts %} | ||||
|             {% if account.sum != 0 %} | ||||
|                 <th class="hidden-xs" style="text-align: right;"><a href="{{ route('accounts.show',account.id) }}" | ||||
|                                                                     title="{{ account.iban|default(account.name) }}">{{ account.name }}</a></th> | ||||
|             {% endif %} | ||||
|         {% endfor %} | ||||
|         <th style="text-align: right;">{{ 'sum'|_ }}</th> | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|  | ||||
|     {% for budget in report.budgets %} | ||||
|         {% if budget.spent|length > 0 %} | ||||
|             <tr> | ||||
|                 <td> | ||||
|                     <a href="{{ route('budgets.show', [budget.budget_id]) }}">{{ budget.budget_name }}</a> | ||||
|                 </td> | ||||
|                 {% for account in report.accounts %} | ||||
|                     {% if budget.spent[account.id] %} | ||||
|                         <td style="text-align: right;"> | ||||
|                             {{ formatAmountBySymbol(budget.spent[account.id].spent, budget.spent[account.id].currency_symbol, budget.spent[account.id].currency_decimal_places) }} | ||||
|                             <span data-location="budget-entry" | ||||
|                                data-budget-id="{{ budget.budget_id }}" | ||||
|                                data-account-id="{{ account.id }}" | ||||
|                                data-currency-id="{{ budget.spent[account.id].currency_id }}" | ||||
|                                class="fa fa-fw fa-info-circle text-muted firefly-info-button"></span> | ||||
|                         </td> | ||||
|                     {% else %} | ||||
|                         {% if report.accounts[account.id].sum != 0 %} | ||||
|                             <td> </td> | ||||
|                         {% endif %} | ||||
|                     {% endif %} | ||||
|  | ||||
|                 {% endfor %} | ||||
|                 <td style="text-align: right;"> | ||||
|                     {% for sum in report.sums[budget.budget_id] %} | ||||
|                         {{ formatAmountBySymbol(sum.sum, sum.currency_symbol, sum.currency_decimal_places) }} <span class="fa fa-fw fa-info-circle text-muted"></span> | ||||
|                         <br/> | ||||
|                     {% endfor %} | ||||
|                 </td> | ||||
|             </tr> | ||||
|         {% endif %} | ||||
|     {% endfor %} | ||||
|     </tbody> | ||||
|     <tfoot> | ||||
|     <tr> | ||||
|         <td><em>{{ 'sum'|_ }}</em></td> | ||||
|         {% for account in report.accounts %} | ||||
|             {% if account.sum != 0 %} | ||||
|                 <td style="text-align: right;"> | ||||
|                     {{ formatAmountBySymbol(account.sum, account.currency_symbol, account.currency_decimal_places) }} | ||||
|                 </td> | ||||
|             {% endif %} | ||||
|         {% endfor %} | ||||
|     </tr> | ||||
|     </tfoot> | ||||
| </table> | ||||
							
								
								
									
										84
									
								
								resources/views/reports/partials/bills.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								resources/views/reports/partials/bills.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,84 @@ | ||||
| <table class="table table-hover sortable"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th data-defaultsign="az">{{ trans('form.name') }}</th> | ||||
|         <th data-defaultsign="_19" class="hidden-xs" style="text-align: right;">{{ trans('form.amount_min') }}</th> | ||||
|         <th data-defaultsign="_19" class="hidden-xs" style="text-align: right;">{{ trans('form.amount_max') }}</th> | ||||
|         <th data-defaultsign="_19">{{ trans('form.expected_on') }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ trans('form.paid') }}</th> | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|     {% for bill in report.bills %} | ||||
|         {% if (bill.expected_dates|length > 0 or bill.paid_moments|length > 0) and bill.active %} | ||||
|             <tr> | ||||
|                 <td> | ||||
|                     <a href="{{ route('bills.show',bill.id) }}">{{ bill.name }}</a> | ||||
|                 </td> | ||||
|                 <td class="hidden-xs" style="text-align:right;"> | ||||
|                     {{ formatAmountBySymbol(bill.amount_min, bill.currency_symbol, bill.currency_decimal_places) }} | ||||
|                 </td> | ||||
|                 <td class="hidden-xs" style="text-align:right;"> | ||||
|                     {{ formatAmountBySymbol(bill.amount_max, bill.currency_symbol, bill.currency_decimal_places) }} | ||||
|                 </td> | ||||
|                 <td data-value="{{ bill.expected_dates[0].format('Y-m-d')|default('0000-00-00') }}"> | ||||
|                     {% for date in bill.expected_dates %} | ||||
|                         {{ date.formatLocalized(monthAndDayFormat) }}<br/> | ||||
|                     {% endfor %} | ||||
|                 </td> | ||||
|                 <td style="text-align:right;"> | ||||
|                     {% set hitCount = 0 %} | ||||
|                     {% for journals in bill.paid_moments %} | ||||
|                         {% for journal in journals %} | ||||
|                             {% set hitCount = hitCount+1 %} | ||||
|                             <a title="{{ journal.date.formatLocalized(monthAndDayFormat) }}" | ||||
|                                href="{{ route('transactions.show', [journal.transaction_group_id]) }}">{{ journal.description }}</a>, | ||||
|                             {{ formatAmountBySymbol(journal.amount, journal.currency_symbol, journal.currency_decimal_places) }} | ||||
|                             <br/> | ||||
|                         {% endfor %} | ||||
|                     {% endfor %} | ||||
|                     {% if hitCount == 0 %} | ||||
|                         <em>{{ 'notCharged'|_ }}</em> | ||||
|                     {% endif %} | ||||
|                 </td> | ||||
|             </tr> | ||||
|         {% endif %} | ||||
|     {% endfor %} | ||||
|  | ||||
|  | ||||
|     {% for line in bills.getBills %} | ||||
|         <tr> | ||||
|             <td data-value="{{ line.getBill.name }}"> | ||||
|                 <a href="{{ route('bills.show',line.getBill.id) }}">{{ line.getBill.name }}</a> | ||||
|                 <small class="text-muted"><br/> | ||||
|                     {{ trans('firefly.bill_expected_between', {start: line.getPayDate.formatLocalized(monthAndDayFormat), end: line.getEndOfPayDate.formatLocalized(monthAndDayFormat) }) }} | ||||
|                 </small> | ||||
|             </td> | ||||
|             <td class="hidden-xs" data-value="{{ line.getMin }}" style="text-align: right;">{{ formatAmountByCurrency(line.getCurrency, line.getMin) }}</td> | ||||
|             <td class="hidden-xs" data-value="{{ line.getMax }}" style="text-align: right;">{{ formatAmountByCurrency(line.getCurrency, line.getMax) }}</td> | ||||
|  | ||||
|             {# if bill is hit, show hit amount #} | ||||
|             {% if line.isHit %} | ||||
|                 <td data-value="{{ line.getAmount }}" style="text-align: right;"> | ||||
|                     <a href="{{ route('transactions.show', line.getTransactionJournalId) }}"> | ||||
|                         {{ formatAmountByCurrency(line.getCurrency, line.getAmount) }} | ||||
|                     </a> | ||||
|                 </td> | ||||
|             {% endif %} | ||||
|             {# if not but is active, show "not yet charged #} | ||||
|             {% if not line.isHit and line.isActive %} | ||||
|                 <td data-value="0" class="bg-success">{{ 'notCharged'|_ }}</td> | ||||
|             {% endif %} | ||||
|             {% if not line.isActive and not line.isHit %} | ||||
|                 <td data-value="-1"> </td> | ||||
|             {% endif %} | ||||
|             <td data-value="{{ (line.getMax - line.getAmount) }}" style="text-align: right;" class="hidden-xs"> | ||||
|                 {% if line.isHit %} | ||||
|                     {{ formatAmountByCurrency(line.getCurrency, (line.getMax + line.getAmount)) }} | ||||
|                 {% endif %} | ||||
|             </td> | ||||
|         </tr> | ||||
|  | ||||
|     {% endfor %} | ||||
|     </tbody> | ||||
| </table> | ||||
							
								
								
									
										46
									
								
								resources/views/reports/partials/budget-period.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								resources/views/reports/partials/budget-period.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,46 @@ | ||||
| <table class="table table-hover sortable"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th data-defaultsign="az" colspan="2">{{ 'budget'|_ }}</th> | ||||
|         {% for period in periods %} | ||||
|             <th data-defaultsign="_19" style="text-align: right;">{{ period }}</th> | ||||
|         {% endfor %} | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'average'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'sum'|_ }}</th> | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|     {% for key, info in report %} | ||||
|         <tr> | ||||
|             <td data-value="{{ info.name }}"> | ||||
|                 {% if info.id != 0 %} | ||||
|                     <a class="btn btn-default btn-xs" href="{{ route('budgets.show', [info.id]) }}"><span class="fa fa-external-link"></span></a> | ||||
|                 {% else %} | ||||
|                     <a class="btn btn-default btn-xs" href="{{ route('budgets.no-budget') }}"><span class="fa fa-external-link"></span></a> | ||||
|                 {% endif %} | ||||
|             </td> | ||||
|             <td data-value="{{ info.name }}"> | ||||
|                 <a title="{{ info.name }}" href="#" data-budget="{{ info.id }}" data-currency="{{ info.currency_id }}" class="budget-chart-activate">{{ info.name }}</a> | ||||
|             </td> | ||||
|             {% for key, period in periods %} | ||||
|                 {% if(info.entries[key]) %} | ||||
|                     <td data-value="{{ info.entries[key] }}" style="text-align: right;"> | ||||
|                         {{ formatAmountBySymbol(info.entries[key], info.currency_symbol, info.currency_decimal_places) }} | ||||
|                     </td> | ||||
|                 {% else %} | ||||
|                     <td data-value="0" style="text-align: right;"> | ||||
|                         {{ formatAmountBySymbol(0, info.currency_symbol, info.currency_decimal_places) }} | ||||
|                     </td> | ||||
|                 {% endif %} | ||||
|  | ||||
|             {% endfor %} | ||||
|             <td data-value="{{ info.avg }}" style="text-align: right;"> | ||||
|                 {{ formatAmountBySymbol(info.avg, info.currency_symbol, info.currency_decimal_places) }} | ||||
|             </td> | ||||
|             <td data-value="{{ info.sum }}" style="text-align: right;"> | ||||
|                 {{ formatAmountBySymbol(info.sum, info.currency_symbol, info.currency_decimal_places) }} | ||||
|             </td> | ||||
|         </tr> | ||||
|     {% endfor %} | ||||
|     </tbody> | ||||
| </table> | ||||
							
								
								
									
										100
									
								
								resources/views/reports/partials/budgets.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								resources/views/reports/partials/budgets.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,100 @@ | ||||
| <table class="table table-hover sortable"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th data-defaultsign="az">{{ 'budget'|_ }}</th> | ||||
|         <th data-defaultsign="month" class="hidden-xs">{{ 'date'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;" class="hidden-xs">{{ 'budgeted'|_ }}</th> | ||||
|         <th data-defaultsign="_19" class="hidden-xs">{{ trans('list.percentage') }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'spent'|_ }}</th> | ||||
|         <th data-defaultsign="_19" class="hidden-xs">{{ trans('list.percentage') }}</th> | ||||
|         <th data-defaultsort="disabled" class="hidden-xs"> </th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;" class="hidden-xs">{{ 'left'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'overspent'|_ }}</th> | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|     {% for budget in report.budgets %} | ||||
|         {% for budget_limit in budget.budget_limits %} | ||||
|             <tr> | ||||
|                 {% if budget.no_budget %} | ||||
|                     <td data-value="zzz"> | ||||
|                         <em>{{ 'no_budget'|_ }} ({{ budget_limit.currency_name }})</em> | ||||
|                     </td> | ||||
|                 {% else %} | ||||
|                     <td data-value="{{ budget.budget_name }}"> | ||||
|                         <a href="{{ route('budgets.show', [budget.budget_id]) }}">{{ budget.budget_name }}</a> | ||||
|                     </td> | ||||
|                 {% endif %} | ||||
|                 <!-- date, hidden on mobile  --> | ||||
|                 <td class="hidden-xs" data-value="{{ budget_limit.start_date.format('Y-m-d')|default('0000-00-00') }}"> | ||||
|                     {% if null != budget_limit.budget_limit_id %} | ||||
|                         <a href="{{ route('budgets.show.limit', [budget.budget_id, budget_limit.budget_limit_id]) }}"> | ||||
|                             {{ budget_limit.start_date.formatLocalized(monthAndDayFormat) }} | ||||
|                             — | ||||
|                             {{ budget_limit.end_date.formatLocalized(monthAndDayFormat) }} | ||||
|                         </a> | ||||
|                     {% endif %} | ||||
|                 </td> | ||||
|  | ||||
|                 <!-- budgeted, hidden on mobile --> | ||||
|                 <td data-value="{{ budget_limit.budgeted|default(0) }}" style="text-align: right;" class="hidden-xs"> | ||||
|                     {% if null != budget_limit.budgeted %} | ||||
|                         {{ formatAmountBySymbol(budget_limit.budgeted, budget_limit.currency_symbol, budget_limit.currency_decimal_places) }} | ||||
|                     {% endif %} | ||||
|                 </td> | ||||
|                 <!-- percentage, hidden --> | ||||
|                 <td data-value="{{ budget_limit.budgeted_pct|default(0) }}" class="hidden-xs"> | ||||
|                     {{ budget_limit.budgeted_pct }}% | ||||
|                 </td> | ||||
|  | ||||
|  | ||||
|                 <!-- spent, visible on mobile --> | ||||
|                 <td data-value="{{ budget_limit.spent|default(0) }}" style="text-align: right;"> | ||||
|                     {{ formatAmountBySymbol(budget_limit.spent, budget_limit.currency_symbol, budget_limit.currency_decimal_places) }} | ||||
|                 </td> | ||||
|                 <!-- percentage, hidden --> | ||||
|                 <td data-value="{{ budget_limit.spent_pct|default(0) }}" class="hidden-xs"> | ||||
|                     {{ budget_limit.spent_pct }}% | ||||
|                 </td> | ||||
|  | ||||
|                 <!-- info button, not visible on mobile --> | ||||
|                 <td class="hidden-xs"> | ||||
|                     {% if budget_limit.spent != 0 %} | ||||
|                         <span class="fa fa-fw text-muted fa-info-circle firefly-info-button" | ||||
|                            data-location="budget-spent-amount" data-currency-id="{{ budget_limit.currency_id }}" data-budget-id="{{ budget.budget_id }}"></span> | ||||
|                     {% endif %} | ||||
|                 </td> | ||||
|  | ||||
|  | ||||
|                 <!-- left, hidden on mobile  --> | ||||
|                 <td data-value="{{ budget_limit.left|default(0) }}" style="text-align: right;" class="hidden-xs"> | ||||
|                     {% if null != budget_limit.left %} | ||||
|                         {{ formatAmountBySymbol(budget_limit.left, budget_limit.currency_symbol, budget_limit.currency_decimal_places) }} | ||||
|                     {% endif %} | ||||
|                 </td> | ||||
|                 <!-- overspent, visible. --> | ||||
|                 <td data-value="{{ budget_limit.overspent|default(0) }}" style="text-align: right;"> | ||||
|                     {% if null != budget_limit.overspent %} | ||||
|                         {{ formatAmountBySymbol(budget_limit.overspent, budget_limit.currency_symbol, budget_limit.currency_decimal_places) }} | ||||
|                     {% endif %} | ||||
|                 </td> | ||||
|             </tr> | ||||
|         {% endfor %} | ||||
|     {% endfor %} | ||||
|     </tbody> | ||||
|     <tfoot> | ||||
|     {% for sum in report.sums %} | ||||
|         <tr> | ||||
|             <td colspan="2"><em>{{ 'sum'|_ }} ({{ sum.currency_name }})</em></td> | ||||
|             <td style="text-align: right;">{{ formatAmountBySymbol(sum.budgeted, sum.currency_symbol, sum.currency_decimal_places) }}</td> | ||||
|             <td> </td> | ||||
|             <td style="text-align: right;">{{ formatAmountBySymbol(sum.spent, sum.currency_symbol, sum.currency_decimal_places) }}</td> | ||||
|             <td> </td> | ||||
|             <td> </td> | ||||
|             <td style="text-align: right;">{{ formatAmountBySymbol(sum.left, sum.currency_symbol, sum.currency_decimal_places) }}</td> | ||||
|             <td style="text-align: right;">{{ formatAmountBySymbol(sum.overspent, sum.currency_symbol, sum.currency_decimal_places) }}</td> | ||||
|  | ||||
|         </tr> | ||||
|         {% endfor %} | ||||
|     </tfoot> | ||||
| </table> | ||||
							
								
								
									
										54
									
								
								resources/views/reports/partials/categories.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								resources/views/reports/partials/categories.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | ||||
| <table class="table table-hover sortable"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th data-defaultsign="az">{{ 'category'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'spent'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'earned'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'sum'|_ }}</th> | ||||
|         <th data-defaultsort="disabled"> </th> | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|     {% for category in report.categories %} | ||||
|         {% if loop.index > listLength %} | ||||
|             <tr class="overListLength"> | ||||
|         {% else %} | ||||
|             <tr> | ||||
|         {% endif %} | ||||
|         <td data-value="{{ category.title }}"> | ||||
|             <a href="{{ route('categories.show', category.id) }}">{{ category.title }}</a> | ||||
|         </td> | ||||
|         <td data-value="{{ category.spent }}" style="text-align: right;">{{ formatAmountBySymbol(category.spent, category.currency_symbol, category.currency_decimal_places, true) }}</td> | ||||
|         <td data-value="{{ category.earned }}" style="text-align: right;">{{ formatAmountBySymbol(category.earned, category.currency_symbol, category.currency_decimal_places, true) }}</td> | ||||
|         <td data-value="{{ category.sum }}" style="text-align: right;">{{ formatAmountBySymbol(category.sum, category.currency_symbol, category.currency_decimal_places, true) }}</td> | ||||
|         <td style="width:20px;"> | ||||
|             <span class="fa fa-fw fa-info-circle text-muted firefly-info-button" data-location="category-entry" data-category-id="{{ category.id }}" data-currency-id="{{ category.currency_id }}" | ||||
|             ></span> | ||||
|         </td> | ||||
|     </tr> | ||||
|     {% endfor %} | ||||
|     </tbody> | ||||
|     <tfoot> | ||||
|     {% if report.categories|length > listLength %} | ||||
|         <tr> | ||||
|             <td colspan="4" class="active"> | ||||
|                 <a href="#" class="listLengthTrigger">{{ trans('firefly.show_full_list',{number:incomeTopLength}) }}</a> | ||||
|             </td> | ||||
|         </tr> | ||||
|     {% endif %} | ||||
|     {% for sum in report.sums %} | ||||
|     <tr> | ||||
|         <td><em>{{ 'sum'|_ }} ({{ sum.currency_name }})</em></td> | ||||
|         <td style="text-align: right;"> | ||||
|             {{ formatAmountBySymbol(sum.spent, sum.currency_symbol, sum.currency_decimal_places) }} | ||||
|         </td> | ||||
|         <td style="text-align: right;"> | ||||
|             {{ formatAmountBySymbol(sum.earned, sum.currency_symbol, sum.currency_decimal_places) }} | ||||
|         </td> | ||||
|         <td style="text-align: right;"> | ||||
|             {{ formatAmountBySymbol(sum.sum, sum.currency_symbol, sum.currency_decimal_places) }} | ||||
|         </td> | ||||
|     </tr> | ||||
|     {% endfor %} | ||||
|     </tfoot> | ||||
| </table> | ||||
							
								
								
									
										50
									
								
								resources/views/reports/partials/category-period.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								resources/views/reports/partials/category-period.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,50 @@ | ||||
| <table class="table table-hover sortable table-condensed"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th data-defaultsign="az" colspan="2">{{ 'category'|_ }}</th> | ||||
|         {% for period in periods %} | ||||
|             <th data-defaultsign="_19" style="text-align: right;">{{ period }}</th> | ||||
|         {% endfor %} | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'sum'|_ }}</th> | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|     {% for info in report %} | ||||
|         <tr> | ||||
|             <td data-value="{{ info.title }}"> | ||||
|                 {% if info.id != 0 %} | ||||
|                     <a class="btn btn-default btn-xs" href="{{ route('categories.show', [info.id]) }}"><span class="fa fa-external-link"></span></a> | ||||
|                 {% else %} | ||||
|                     <a class="btn btn-default btn-xs" href="{{ route('categories.no-category') }}"><span class="fa fa-external-link"></span></a> | ||||
|                 {% endif %} | ||||
|             </td> | ||||
|             <td data-value="{{ info.title }}"> | ||||
|                 <a title="{{ info.title }}" href="#" data-currency="{{ info.currency_id }}" data-category="{{ info.id }}" class="category-chart-activate">{{ info.title }}</a> | ||||
|             </td> | ||||
|             {% for key, period in periods %} | ||||
|                 {# income first #} | ||||
|                 {% if(info.entries[key]) %} | ||||
|                     <td data-value="{{ info.entries[key] }}" style="text-align: right;"> | ||||
|                         {{ formatAmountBySymbol(info.entries[key], info.currency_symbol, info.currency_decimal_places) }} | ||||
|                     </td> | ||||
|                 {% else %} | ||||
|                     <td data-value="0" style="text-align: right;"> | ||||
|                         {{ formatAmountBySymbol(0, info.currency_symbol, info.currency_decimal_places) }} | ||||
|                     </td> | ||||
|                 {% endif %} | ||||
|             {% endfor %} | ||||
|  | ||||
|             {# if sum of income, display: #} | ||||
|             {% if info.sum %} | ||||
|                 <td data-value="{{ info.sum }}" style="text-align: right;"> | ||||
|                     {{ formatAmountBySymbol(info.sum, info.currency_symbol, info.currency_decimal_places) }} | ||||
|                 </td> | ||||
|             {% else %} | ||||
|                 <td data-value="0" style="text-align: right;"> | ||||
|                     {{ formatAmountBySymbol(0, info.currency_symbol, info.currency_decimal_places) }} | ||||
|                 </td> | ||||
|             {% endif %} | ||||
|         </tr> | ||||
|     {% endfor %} | ||||
|     </tbody> | ||||
| </table> | ||||
							
								
								
									
										30
									
								
								resources/views/reports/partials/exp-budgets.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								resources/views/reports/partials/exp-budgets.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | ||||
| <table class="table table-hover sortable"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th style="width:66%;" data-defaultsign="az" data-defaultsort="asc">{{ 'category'|_ }}</th> | ||||
|         <th style="width:34%;" data-defaultsign="_19">{{ 'spent'|_ }}</th> | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|     {% for budgetId, entry in together %} | ||||
|         <tr> | ||||
|             <td data-value="{% if entry.budget == null %}zzzzzzzzzzz{% else %}{{ entry.budget }}{% endif %}"> | ||||
|                 {% if entry.budget == null %} | ||||
|                     <a href="{{ route('budgets.no-budget') }}">{{ 'no_budget_squared'|_ }}</a> | ||||
|                 {% else %} | ||||
|                     <a href="{{ route('budgets.show', budgetId) }}">{{ entry.budget }}</a> | ||||
|                 {% endif %} | ||||
|             </td> | ||||
|             <td data-value="{{ entry.spent.grand_total }}"> | ||||
|                 {% if entry.spent.per_currency|length ==0 %} | ||||
|                     {{ '0'|formatAmount }} | ||||
|                 {% else %} | ||||
|                     {% for expense in entry.spent.per_currency %} | ||||
|                         {{ formatAmountBySymbol(expense.sum, expense.currency.symbol, expense.currency.dp) }}<br/> | ||||
|                     {% endfor %} | ||||
|                 {% endif %} | ||||
|             </td> | ||||
|         </tr> | ||||
|     {% endfor %} | ||||
|     </tbody> | ||||
| </table> | ||||
							
								
								
									
										41
									
								
								resources/views/reports/partials/exp-categories.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								resources/views/reports/partials/exp-categories.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,41 @@ | ||||
| <table class="table table-hover sortable"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th style="width:50%;" data-defaultsign="az" data-defaultsort="asc">{{ 'category'|_ }}</th> | ||||
|         <th style="width:25%;" data-defaultsign="_19">{{ 'spent'|_ }}</th> | ||||
|         <th style="width:25%;" data-defaultsign="_19">{{ 'earned'|_ }}</th> | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|     {% for categoryId, entry in together %} | ||||
|         <tr> | ||||
|             <td data-value="{% if entry.category == null %}zzzzzzzzzzz{% else %}{{ entry.category }}{% endif %}"> | ||||
|                 {% if entry.category == null %} | ||||
|                     <a href="{{ route('categories.no-category') }}">{{ 'noCategory'|_ }}</a> | ||||
|                 {% else %} | ||||
|                     <a href="{{ route('categories.show', categoryId) }}">{{ entry.category }}</a> | ||||
|  | ||||
|                 {% endif %} | ||||
|             </td> | ||||
|             <td data-value="{{ entry.spent.grand_total }}"> | ||||
|                 {% if entry.spent.per_currency|length ==0 %} | ||||
|                     {{ '0'|formatAmount }} | ||||
|                 {% else %} | ||||
|                     {% for expense in entry.spent.per_currency %} | ||||
|                         {{ formatAmountBySymbol(expense.sum, expense.currency.symbol, expense.currency.dp) }}<br/> | ||||
|                     {% endfor %} | ||||
|                 {% endif %} | ||||
|             </td> | ||||
|             <td data-value="{{ entry.earned.grand_total }}"> | ||||
|                 {% if entry.earned.per_currency|length ==0 %} | ||||
|                     {{ '0'|formatAmount }} | ||||
|                 {% else %} | ||||
|                     {% for income in entry.earned.per_currency %} | ||||
|                         {{ formatAmountBySymbol(income.sum * -1, income.currency.symbol, income.currency.dp) }}<br/> | ||||
|                     {% endfor %} | ||||
|                 {% endif %} | ||||
|             </td> | ||||
|         </tr> | ||||
|     {% endfor %} | ||||
|     </tbody> | ||||
| </table> | ||||
							
								
								
									
										32
									
								
								resources/views/reports/partials/exp-not-grouped.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								resources/views/reports/partials/exp-not-grouped.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
| <table class="table table-hover sortable"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th style="width:50%;" data-defaultsign="az">{{ 'name'|_ }}</th> | ||||
|         <th style="width:25%;" class="hidden-xs" data-defaultsign="_19">{{ 'spent'|_ }}</th> | ||||
|         <th style="width:25%;" class="hidden-xs" data-defaultsign="_19">{{ 'earned'|_ }}</th> | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|     {% for name, amounts in result %} | ||||
|         <tr> | ||||
|             <td data-value="{{ name }}">{{ name }}</td> | ||||
|             <td data-value="{{ amounts.spent.grand_sum }}"> | ||||
|                 {% if amounts.spent.per_currency|length == 0 %} | ||||
|                     {{ '0'|formatAmount }} | ||||
|                 {% endif %} | ||||
|                 {% for expense in amounts.spent.per_currency %} | ||||
|                     {{ formatAmountBySymbol(expense.sum, expense.currency.symbol, expense.currency.dp) }}<br/> | ||||
|                 {% endfor %} | ||||
|             </td> | ||||
|             <td data-value="{{ amounts.earned.grand_sum }}"> | ||||
|                 {% if amounts.earned.per_currency|length == 0 %} | ||||
|                     {{ '0'|formatAmount }} | ||||
|                 {% endif %} | ||||
|                 {% for income in amounts.earned.per_currency %} | ||||
|                     {{ formatAmountBySymbol(income.sum * -1, income.currency.symbol, income.currency.dp) }}<br/> | ||||
|                 {% endfor %} | ||||
|             </td> | ||||
|         </tr> | ||||
|     {% endfor %} | ||||
|     </tbody> | ||||
| </table> | ||||
							
								
								
									
										61
									
								
								resources/views/reports/partials/income-expenses.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								resources/views/reports/partials/income-expenses.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,61 @@ | ||||
| <table class="table table-hover sortable"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th data-defaultsign="az">{{ 'name'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'total'|_ }}</th> | ||||
|         <th data-defaultsign="_19" class="hidden-xs" style="text-align: right;">{{ 'average'|_ }}</th> | ||||
|         <th data-defaultsort="disabled"></th> | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|     {% for account in report.accounts %} | ||||
|         {% if loop.index > listLength %} | ||||
|             <tr class="overListLength"> | ||||
|         {% else %} | ||||
|             <tr> | ||||
|         {% endif %} | ||||
|         <td data-value="{{ account.name }}"> | ||||
|             <a href="{{ route('accounts.show',account.id) }}">{{ account.name }}</a> | ||||
|             {% if account.count > 1 %} | ||||
|                 <br/> | ||||
|                 <small> | ||||
|                     {{ account.count }} {{ 'transactions'|_|lower }} | ||||
|                 </small> | ||||
|             {% endif %} | ||||
|         </td> | ||||
|         <td data-value="{{ account.sum }}" style="text-align: right;"> | ||||
|             {{ formatAmountBySymbol(account.sum, account.currency_symbol, account.currency_decimal_places) }} | ||||
|         </td> | ||||
|         <td class="hidden-xs" data-value="{{ account.average }}" style="text-align: right;"> | ||||
|             {% if account.count > 1 %} | ||||
|                 {{ formatAmountBySymbol(account.average, account.currency_symbol, account.currency_decimal_places) }} | ||||
|             {% else %} | ||||
|                 — | ||||
|             {% endif %} | ||||
|         </td> | ||||
|         <td> | ||||
|             <span class="fa fa-fw text-muted fa-info-circle firefly-info-button" data-location="{{ type }}" | ||||
|                data-account-id="{{ account.id }}" data-currency-id="{{ account.currency_id }}"></span> | ||||
|         </td> | ||||
|         </tr> | ||||
|     {% endfor %} | ||||
|     </tbody> | ||||
|  | ||||
|     <tfoot> | ||||
|     {% if report.accounts|length > listLength %} | ||||
|         <tr> | ||||
|             <td colspan="4" class="active"> | ||||
|                 <a href="#" class="listLengthTrigger">{{ trans('firefly.show_full_list',{number:incomeTopLength}) }}</a> | ||||
|             </td> | ||||
|         </tr> | ||||
|     {% endif %} | ||||
|     {% for sum in report.sums %} | ||||
|         <tr> | ||||
|             <td><em>{{ 'sum'|_ }} ({{ sum.currency_name }})</em></td> | ||||
|             <td style="text-align: right;"> | ||||
|                 {{ formatAmountBySymbol(sum.sum, sum.currency_symbol, sum.currency_decimal_places) }} | ||||
|             </td> | ||||
|             <td> </td> | ||||
|         </tr> | ||||
|     {% endfor %} | ||||
| </table> | ||||
							
								
								
									
										184
									
								
								resources/views/reports/partials/journals-audit.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										184
									
								
								resources/views/reports/partials/journals-audit.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,184 @@ | ||||
| <table class="table table-hover table-compressed table-responsive "> | ||||
|     <thead> | ||||
|     <tr class="ignore"> | ||||
|         <th class="hide-buttons"> </th> | ||||
|         <th class="hide-icon"> </th> | ||||
|  | ||||
|         <th class="hide-description">{{ trans('list.description') }}</th> | ||||
|         <th class="hide-balance_before" style="text-align: right;">{{ trans('list.balance_before') }}</th> | ||||
|         <th class="hide-amount" style="text-align: right;">{{ trans('list.amount') }}</th> | ||||
|         <th class="hide-balance_after" style="text-align: right;">{{ trans('list.balance_after') }}</th> | ||||
|  | ||||
|         <th class="hide-date">{{ trans('list.date') }}</th> | ||||
|         {# new optional fields (3x) #} | ||||
|         <th class="hide-from">{{ trans('list.from') }}</th> | ||||
|         <th class="hide-to">{{ trans('list.to') }}</th> | ||||
|  | ||||
|         <th class="hide-budget"><span class="fa fa-pie-chart fa-fw" title="{{ trans('list.budget') }}"></span></th> | ||||
|         <th class="hide-category"><span class="fa fa-bookmark fa-fw" title="{{ trans('list.category') }}"></span></th> | ||||
|         <th class="hide-bill">{{ trans('list.bill') }}</th> | ||||
|  | ||||
|         {# more optional fields (2x) #} | ||||
|         <th class="hide-create_date">{{ trans('list.create_date') }}</th> | ||||
|         <th class="hide-update_date">{{ trans('list.update_date') }}</th> | ||||
|  | ||||
|         {# even more optional fields #} | ||||
|         <th class="hide-interest_date">{{ trans('list.interest_date') }}</th> | ||||
|         <th class="hide-book_date">{{ trans('list.book_date') }}</th> | ||||
|         <th class="hide-process_date">{{ trans('list.process_date') }}</th> | ||||
|         <th class="hide-due_date">{{ trans('list.due_date') }}</th> | ||||
|         <th class="hide-payment_date">{{ trans('list.payment_date') }}</th> | ||||
|         <th class="hide-invoice_date">{{ trans('list.invoice_date') }}</th> | ||||
|  | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|     {% for journal in journals %} | ||||
|         <tr data-date="{{ journal.date.format('Y-m-d') }}" data-id="{{ journal.id }}"> | ||||
|  | ||||
|             <td class="hide-buttons"> | ||||
|                 <div class="btn-group btn-group-xs"> | ||||
|                     <a href="{{ route('transactions.edit',journal.transaction_group_id) }}" class="btn btn-xs btn-default"><span class="fa fa-fw fa-pencil"></span></a> | ||||
|                     <a href="{{ route('transactions.delete',journal.transaction_group_id) }}" class="btn btn-xs btn-danger"><span class="fa fa-fw fa-trash-o"></span></a> | ||||
|                 </div> | ||||
|             </td> | ||||
|  | ||||
|             <td class="hide-icon"> | ||||
|                 {% if journal.transaction_type_type == 'Withdrawal' %} | ||||
|                     <span class="fa fa-long-arrow-left fa-fw" title="{{ trans('firefly.Withdrawal') }}"></span> | ||||
|                 {% endif %} | ||||
|  | ||||
|                 {% if journal.transaction_type_type == 'Deposit' %} | ||||
|                     <span class="fa fa-long-arrow-right fa-fw" title="{{ trans('firefly.Deposit') }}"></span> | ||||
|                 {% endif %} | ||||
|  | ||||
|                 {% if journal.transaction_type_type == 'Transfer' %} | ||||
|                     <span class="fa fa-exchange fa-fw" title="{{ trans('firefly.Deposit') }}"></span> | ||||
|                 {% endif %} | ||||
|  | ||||
|                 {% if journal.transaction_type_type == 'Reconciliation' %} | ||||
|                     <span class="fa-fw fa fa-calculator" title="{{ trans('firefly.reconciliation_transaction') }}"></span> | ||||
|                 {% endif %} | ||||
|  | ||||
|                 {% if journal.transaction_type_type == 'Opening balance' %} | ||||
|                     <span class="fa-fw fa fa-star-o" title="{{ trans('firefly.Opening balance') }}"></span> | ||||
|                 {% endif %} | ||||
|  | ||||
|             </td> | ||||
|  | ||||
|             <td class="hide-description"> | ||||
|                 <a href="{{ route('transactions.show',journal.transaction_group_id) }}"> | ||||
|                     {% if journal.group_title|length > 0 %} | ||||
|                         {{ journal.group_title }} ({{ journal.description }}) | ||||
|                     {% else %} | ||||
|                         {{ journal.description }} | ||||
|                     {% endif %} | ||||
|                 </a> | ||||
|             </td> | ||||
|  | ||||
|             <td class="hide-balance_before" style="text-align: right;"> | ||||
|                 {{ formatAmountBySymbol(journal.balance_before, auditData[account.id].currency.symbol, auditData[account.id].currency.decimal_places) }} | ||||
|             </td> | ||||
|             <td class="hide-amount" style="text-align: right;"> | ||||
|  | ||||
|                 {% if auditData[account.id].currency.id == journal.currency_id %} | ||||
|                     {% if account.id == journal.destination_account_id and journal.transaction_type_type == 'Opening balance' %} | ||||
|                         {{ formatAmountBySymbol(journal.amount*-1, journal.currency_symbol, journal.currency_decimal_places) }} | ||||
|                     {% elseif account.id == journal.destination_account_id and journal.transaction_type_type == 'Deposit' %} | ||||
|                         {{ formatAmountBySymbol(journal.amount*-1, journal.currency_symbol, journal.currency_decimal_places) }} | ||||
|                     {% elseif account.id == journal.destination_account_id and journal.transaction_type_type == 'Transfer' %} | ||||
|                         {{ formatAmountBySymbol(journal.amount*-1, journal.currency_symbol, journal.currency_decimal_places) }} | ||||
|                     {% else %} | ||||
|                         {{ formatAmountBySymbol(journal.amount, journal.currency_symbol, journal.currency_decimal_places) }} | ||||
|                     {% endif %} | ||||
|                 {% endif %} | ||||
|  | ||||
|                 {% if auditData[account.id].currency.id == journal.foreign_currency_id %} | ||||
|                     {% if account.id == journal.destination_account_id and journal.transaction_type_type == 'Opening balance' %} | ||||
|                         {{ formatAmountBySymbol(journal.foreign_amount*-1, journal.foreign_currency_symbol, journal.foreign_currency_decimal_places) }} | ||||
|                     {% elseif account.id == journal.destination_account_id and journal.transaction_type_type == 'Deposit' %} | ||||
|                         {{ formatAmountBySymbol(journal.foreign_amount*-1, journal.foreign_currency_symbol, journal.foreign_currency_decimal_places) }} | ||||
|                     {% elseif account.id == journal.destination_account_id and journal.transaction_type_type == 'Transfer' %} | ||||
|                         {{ formatAmountBySymbol(journal.foreign_amount*-1, journal.foreign_currency_symbol, journal.foreign_currency_decimal_places) }} | ||||
|                     {% else %} | ||||
|                         {{ formatAmountBySymbol(journal.foreign_amount, journal.foreign_currency_symbol, journal.foreign_currency_decimal_places) }} | ||||
|                     {% endif %} | ||||
|                 {% endif %} | ||||
|  | ||||
|             </td> | ||||
|  | ||||
|             <td class="hide-balance_after" style="text-align: right;"> | ||||
|                 {{ formatAmountBySymbol(journal.balance_after, auditData[account.id].currency.symbol, auditData[account.id].currency.decimal_places) }} | ||||
|             </td> | ||||
|  | ||||
|             <td class="hide-date">{{ journal.date.formatLocalized(monthAndDayFormat) }}</td> | ||||
|  | ||||
|             <td class="hide-from"> | ||||
|                 <a href="{{ route('accounts.show', [journal.source_account_id]) }}" title="{{ journal.source_account_iban|default(journal.source_account_name) }}">{{ journal.source_account_name }}</a> | ||||
|             </td> | ||||
|  | ||||
|             <td class="hide-to"> | ||||
|                 <a href="{{ route('accounts.show', [journal.destination_account_id]) }}" title="{{ journal.destination_account_iban|default(journal.destination_account_name) }}">{{ journal.destination_account_name }}</a> | ||||
|             </td> | ||||
|             <td class="hide-budget"> | ||||
|                 {% if journal.budget_id %} | ||||
|                     <a href="{{ route('budgets.show', [journal.budget_id]) }}" title="{{ journal.budget_name }}">{{ journal.budget_name }}</a> | ||||
|                 {% endif %} | ||||
|             </td> | ||||
|             <td class="hide-category"> | ||||
|                 {% if journal.category_id %} | ||||
|                     <a href="{{ route('categories.show', [journal.category_id]) }}" title="{{ journal.category_name }}">{{ journal.category_name }}</a> | ||||
|                 {% endif %} | ||||
|             </td> | ||||
|             <td class="hide-bill"> | ||||
|                 {% if journal.bill_id %} | ||||
|                     <a href="{{ route('bills.show', [journal.bill_id]) }}" title="{{ journal.bill_name }}">{{ journal.bill_name }}</a> | ||||
|                 {% endif %} | ||||
|             </td> | ||||
|  | ||||
|             <!-- new optional fields (2x) --> | ||||
|             <td class="hide-create_date"> | ||||
|                 {{ journal.created_at.formatLocalized(dateTimeFormat) }} | ||||
|             </td> | ||||
|  | ||||
|             <td class="hide-update_date"> | ||||
|                 {{ journal.updated_at.formatLocalized(dateTimeFormat) }} | ||||
|             </td> | ||||
|  | ||||
|             <!-- more new dates --> | ||||
|             <td class="hide-interest_date"> | ||||
|                 {% if null != journal.interest_date %} | ||||
|                     {{ journal.interest_date.formatLocalized(monthAndDayFormat) }} | ||||
|                 {% endif %} | ||||
|             </td> | ||||
|             <td class="hide-book_date"> | ||||
|                 {% if null != journal.book_date %} | ||||
|                     {{ journal.book_date.formatLocalized(monthAndDayFormat) }} | ||||
|                 {% endif %} | ||||
|             </td> | ||||
|             <td class="hide-process_date"> | ||||
|                 {% if null != journal.process_date %} | ||||
|                     {{ journal.process_date.formatLocalized(monthAndDayFormat) }} | ||||
|                 {% endif %} | ||||
|             </td> | ||||
|             <td class="hide-due_date"> | ||||
|                 {% if null != journal.due_date %} | ||||
|                     {{ journal.due_date.formatLocalized(monthAndDayFormat) }} | ||||
|                 {% endif %} | ||||
|             </td> | ||||
|             <td class="hide-payment_date"> | ||||
|                 {% if null != journal.payment_date %} | ||||
|                     {{ journal.payment_date.formatLocalized(monthAndDayFormat) }} | ||||
|                 {% endif %} | ||||
|             </td> | ||||
|             <td class="hide-invoice_date"> | ||||
|                 {% if null != journal.invoice_date %} | ||||
|                     {{ journal.invoice_date.formatLocalized(monthAndDayFormat) }} | ||||
|                 {% endif %} | ||||
|             </td> | ||||
|         </tr> | ||||
|  | ||||
|     {% endfor %} | ||||
|  | ||||
|     </tbody> | ||||
| </table> | ||||
							
								
								
									
										26
									
								
								resources/views/reports/partials/operations.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								resources/views/reports/partials/operations.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | ||||
| <table class="table table-hover sortable"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th data-defaultsign="az">{{'currency'|_}}</th> | ||||
|         <th data-defaultsign="_19">{{ 'money_flowing_in'|_ }}</th> | ||||
|         <th data-defaultsign="_19">{{ 'money_flowing_out'|_ }}</th> | ||||
|         <th data-defaultsign="_19">{{ 'difference'|_ }}</th> | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|     {% for sum in sums %} | ||||
|     <tr> | ||||
|         <td>{{ sum.currency_name }} ({{ sum.currency_symbol }})</td> | ||||
|         <td data-value="{{ sum.in }}"> | ||||
|             {{ formatAmountBySymbol(sum.in, sum.currency_symbol, sum.currency_decimal_places) }} | ||||
|         </td> | ||||
|         <td data-value="{{ sum.out }}"> | ||||
|             {{ formatAmountBySymbol(sum.out, sum.currency_symbol, sum.currency_decimal_places) }} | ||||
|         </td> | ||||
|         <td data-value="{{ sum.sum }}"> | ||||
|             {{ formatAmountBySymbol(sum.sum, sum.currency_symbol, sum.currency_decimal_places) }} | ||||
|         </td> | ||||
|     </tr> | ||||
|     {% endfor %} | ||||
|     </tbody> | ||||
| </table> | ||||
							
								
								
									
										23
									
								
								resources/views/reports/partials/tags.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								resources/views/reports/partials/tags.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | ||||
| {% if tags|length > 0 %} | ||||
|     <div class="box"> | ||||
|         <div class="box-header with-border"> | ||||
|             <h3 class="box-title">{{ 'tags'|_ }}</h3> | ||||
|         </div> | ||||
|         <div class="box-body"> | ||||
|  | ||||
|             {% if tags|length == 1 %} | ||||
|                 {% set multiplier = 12 %} | ||||
|             {% else %} | ||||
|                 {% set multiplier = 30 %} | ||||
|             {% endif %} | ||||
|  | ||||
|             {% for tag in tags %} | ||||
|                 <span title="{{ tag.amount|formatAmountPlain }}" | ||||
|                       style="font-size: {{ tag.fontsize * multiplier }}px" | ||||
|  | ||||
|                 > <a href="{{ route('tags.show', tag.id) }}">{{ tag.tag }}</a> </span> | ||||
|             {% endfor %} | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
| {% endif %} | ||||
							
								
								
									
										31
									
								
								resources/views/reports/partials/top-transactions.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								resources/views/reports/partials/top-transactions.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,31 @@ | ||||
| <table class="table table-hover sortable"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th data-defaultsign="az">{{ 'account'|_ }}</th> | ||||
|         <th data-defaultsign="az">{{ 'description'|_ }}</th> | ||||
|         <th data-defaultsign="month">{{ 'date'|_ }}</th> | ||||
|         <th style="width:25%;" class="hidden-xs" data-defaultsign="_19">{{ 'amount'|_ }}</th> | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|     {% for transaction in sorted %} | ||||
|         <tr> | ||||
|             <td data-value="{{ transaction.destination_account_name }}"> | ||||
|                 <a href="{{ route('accounts.show',transaction.destination_account_id) }}">{{ transaction.destination_account_name }}</a> | ||||
|             </td> | ||||
|             <td data-value="{{ transaction.description }}">{{ transaction.description }}</td> | ||||
|             <td data-value="{{ transaction.date.format('Y-m-d') }}"> | ||||
|                 {{ transaction.date.formatLocalized(monthAndDayFormat) }} | ||||
|             </td><!-- See reference nr. 3 --> | ||||
|             <td style="text-align: right;" data-value="{{ transaction.amount}}"><span | ||||
|                         style="margin-right:5px;"> | ||||
|  | ||||
|                     {{ formatAmountBySymbol(transaction.amount, transaction.currency_symbol, transaction.currency_decimal_places) }} | ||||
|                     {% if null != transaction.foreign_amount %} | ||||
|                         ({{ formatAmountBySymbol(transaction.foreign_amount, transaction.foreign_currency_symbol, transaction.foreign_currency_decimal_places) }}) | ||||
|                     {% endif %} | ||||
|                 </span></td> | ||||
|         </tr> | ||||
|     {% endfor %} | ||||
|     </tbody> | ||||
| </table> | ||||
							
								
								
									
										290
									
								
								resources/views/reports/tag/month.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										290
									
								
								resources/views/reports/tag/month.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,290 @@ | ||||
| {% extends './v1/layout/default' %} | ||||
|  | ||||
| {% block breadcrumbs %} | ||||
|     {{ Breadcrumbs.render(Route.getCurrentRoute.getName, accountIds, tagIds, start, end) }} | ||||
| {% endblock %} | ||||
|  | ||||
| {% block content %} | ||||
|  | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'accounts'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="accountsHolder"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|         <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'tags'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="tagsHolder"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'account_per_tag'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="accountPerTagHolder"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-6 col-md-6"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'expense_per_tag'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body"> | ||||
|                     <div style="width:100%;margin:0 auto;"> | ||||
|                         <canvas id="tag-out-pie-chart" style="width:100%;height:250px;" height="250"></canvas> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|         <div class="col-lg-6 col-md-6"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'income_per_tag'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body"> | ||||
|                     <div style="width:100%;margin:0 auto;"> | ||||
|                         <canvas id="tag-in-pie-chart" style="width:100%;height:250px;" height="250"></canvas> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-4 col-md-6"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'expense_per_category'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body"> | ||||
|                     <div style="width:100%;margin:0 auto;"> | ||||
|                         <canvas id="category-out-pie-chart" style="width:100%;height:250px;" height="250"></canvas> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|         <div class="col-lg-4 col-md-6"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'income_per_category'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body"> | ||||
|                     <div style="width:100%;margin:0 auto;"> | ||||
|                         <canvas id="category-in-pie-chart" style="width:100%;height:250px;" height="250"></canvas> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|         <div class="col-lg-4 col-md-6"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'expense_per_budget'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body"> | ||||
|                     <div style="width:100%;margin:0 auto;"> | ||||
|                         <canvas id="budgets-out-pie-chart" style="width:100%;height:250px;" height="250"></canvas> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-6 col-md-6"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'expense_per_source_account'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body"> | ||||
|                     <div style="width:100%;margin:0 auto;"> | ||||
|                         <canvas id="source-out-pie-chart" style="width:100%;height:250px;" height="250"></canvas> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|         <div class="col-lg-6 col-md-6"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'income_per_source_account'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body"> | ||||
|                     <div style="width:100%;margin:0 auto;"> | ||||
|                         <canvas id="source-in-pie-chart" style="width:100%;height:250px;" height="250"></canvas> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-6 col-md-6"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'expense_per_destination_account'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body"> | ||||
|                     <div style="width:100%;margin:0 auto;"> | ||||
|                         <canvas id="dest-out-pie-chart" style="width:100%;height:250px;" height="250"></canvas> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|         <div class="col-lg-6 col-md-6"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'income_per_destination_account'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body"> | ||||
|                     <div style="width:100%;margin:0 auto;"> | ||||
|                         <canvas id="dest-in-pie-chart" style="width:100%;height:250px;" height="250"></canvas> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
|     {% for tag in tags %} | ||||
|         <div class="row"> | ||||
|             <div class="col-lg-12"> | ||||
|                 <div class="box main_budget_chart"> | ||||
|                     <div class="box-header with-border"> | ||||
|                         <h3 class="box-title">{{ 'income_and_expenses'|_ }} ({{ tag.tag }})</h3> | ||||
|                     </div> | ||||
|                     <div class="box-body"> | ||||
|                         <canvas class="main_tag_canvas" | ||||
|                                 data-url="{{ route('chart.tag.main', [accountIds, tag.id, start.format('Ymd'), end.format('Ymd')]) }}" | ||||
|                                 id="in-out-chart-{{ tag.id }}" style="width:100%;height:400px;" height="400" width="100%"></canvas> | ||||
|                     </div> | ||||
|                     <div class="box-footer"> | ||||
|                         <p class="text-info"><em>{{ 'tag_report_chart_single_tag'|_ }}</em></p> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     {% endfor %} | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-6"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'average_spending_per_destination'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="avgExpensesHolder"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|         <div class="col-lg-6"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'average_earning_per_source'|_ }}</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="avgIncomeHolder"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|     <div class="row"> | ||||
|         <div class="col-lg-6"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'expenses'|_ }} ({{ trans('firefly.topX', {number: listLength}) }})</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="topExpensesHolder"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|         <div class="col-lg-6"> | ||||
|             <div class="box"> | ||||
|                 <div class="box-header with-border"> | ||||
|                     <h3 class="box-title">{{ 'income'|_ }} ({{ trans('firefly.topX', {number: listLength}) }})</h3> | ||||
|                 </div> | ||||
|                 <div class="box-body table-responsive no-padding" id="topIncomeHolder"> | ||||
|                 </div> | ||||
|                 {# loading indicator #} | ||||
|                 <div class="overlay"> | ||||
|                     <span class="fa fa-refresh fa-spin"></span> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
| {% endblock %} | ||||
|  | ||||
| {% block scripts %} | ||||
|     <script type="text/javascript" src="v1/js/lib/Chart.bundle.min.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|     <script type="text/javascript" src="v1/js/ff/charts.defaults.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|     <script type="text/javascript" src="v1/js/ff/charts.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|     <script type="text/javascript" src="v1/js/lib/bootstrap-sortable.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|  | ||||
|     <script type="text/javascript" src="v1/js/ff/reports/all.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|     <script type="text/javascript" nonce="{{ JS_NONCE }}"> | ||||
|         // to report another URL: | ||||
|         var startDate = '{{ start.format('Ymd') }}'; | ||||
|         var endDate = '{{ end.format('Ymd') }}'; | ||||
|         var accountIds = '{{ accountIds }}'; | ||||
|         var tagIds = '{{ tagIds }}'; | ||||
|  | ||||
|         // html block URI's: | ||||
|  | ||||
|         var accountsUri = '{{ route('report-data.tag.accounts', [accountIds, tagIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var tagsUri = '{{ route('report-data.tag.tags', [accountIds, tagIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var accountPerTagUri = '{{ route('report-data.tag.account-per-tag', [accountIds, tagIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|  | ||||
|         // pie charts: | ||||
|         var tagOutUri = '{{ route('chart.tag.tag-expense', [accountIds, tagIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var tagInUri = '{{ route('chart.tag.tag-income', [accountIds, tagIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var categoryOutUri = '{{ route('chart.tag.category-expense', [accountIds, tagIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var categoryInUri = '{{ route('chart.tag.category-income', [accountIds, tagIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var budgetsOutUri = '{{ route('chart.tag.budget-expense', [accountIds, tagIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var sourceOutUri = '{{ route('chart.tag.source-expense', [accountIds, tagIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var sourceInUri = '{{ route('chart.tag.source-income', [accountIds, tagIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var destOutUri = '{{ route('chart.tag.dest-expense', [accountIds, tagIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var destInUri = '{{ route('chart.tag.dest-income', [accountIds, tagIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|  | ||||
|         var avgExpensesUri = '{{ route('report-data.tag.avg-expenses', [accountIds, tagIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var topExpensesUri = '{{ route('report-data.tag.top-expenses', [accountIds, tagIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var avgIncomeUri = '{{ route('report-data.tag.avg-income', [accountIds, tagIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|         var topIncomeUri = '{{ route('report-data.tag.top-income', [accountIds, tagIds, start.format('Ymd'), end.format('Ymd')]) }}'; | ||||
|  | ||||
|     </script> | ||||
|     <script type="text/javascript" src="v1/js/ff/reports/tag/month.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script> | ||||
|  | ||||
| {% endblock %} | ||||
|  | ||||
| {% block styles %} | ||||
|     <link rel="stylesheet" href="v1/css/bootstrap-sortable.css?v={{ FF_VERSION }}" type="text/css" media="all" nonce="{{ JS_NONCE }}"> | ||||
| {% endblock %} | ||||
							
								
								
									
										40
									
								
								resources/views/reports/tag/partials/account-per-tag.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								resources/views/reports/tag/partials/account-per-tag.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,40 @@ | ||||
| <table class="table table-hover sortable"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th data-defaultsign="az">{{ 'name'|_ }}</th> | ||||
|         {% for tag in tags %} | ||||
|             <th data-defaultsign="_19" style="text-align: right;">{{ tag.tag }}</th> | ||||
|         {% endfor %} | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|     {% for account in report %} | ||||
|         {% for currency in account.currencies %} | ||||
|             <tr> | ||||
|                 <td data-value="{{ account.name }} ({{ currency.currency_name }})"> | ||||
|                     <a href="{{ route('accounts.show', account.id) }}" title="{{ account.iban }}">{{ account.name }} ({{ currency.currency_name }})</a> | ||||
|                 </td> | ||||
|                 {% for tag in tags %} | ||||
|                     <td style="text-align: right;"> | ||||
|                         {% if currency.tags[tag.id] %} | ||||
|                             <span title="{{ 'earned'|_ }}: {{ formatAmountBySymbol(currency.tags[tag.id].earned, currency.currency_symbol, currency.currency_decimal_places, false) }}, {{ 'spent'|_ }}: {{ formatAmountBySymbol(currency.tags[tag.id].spent, currency.currency_symbol, currency.currency_decimal_places, false) }}" | ||||
|                             {{ formatAmountBySymbol(currency.tags[tag.id].sum, currency.currency_symbol, currency.currency_decimal_places) }} | ||||
|                         {% else %} | ||||
|                             — | ||||
|                         {% endif %} | ||||
|                     </td> | ||||
|                 {% endfor %} | ||||
|             </tr> | ||||
|         {% endfor %} | ||||
|     {% endfor %} | ||||
|     </tbody> | ||||
|     <tfoot> | ||||
|     <tr> | ||||
|         <td colspan="{{ 1 + tags|length }}"> | ||||
|             <p class="text-info"> | ||||
|                 <em>{{ 'tag_report_expenses_listed_once'|_ }}</em> | ||||
|             </p> | ||||
|         </td> | ||||
|     </tr> | ||||
|     </tfoot> | ||||
| </table> | ||||
							
								
								
									
										46
									
								
								resources/views/reports/tag/partials/accounts.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								resources/views/reports/tag/partials/accounts.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,46 @@ | ||||
| <table class="table table-hover sortable"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th data-defaultsign="az">{{ 'name'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'spent'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'earned'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'sum'|_ }}</th> | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|     {% for account in report %} | ||||
|         {% for currency in account.currencies %} | ||||
|             <tr> | ||||
|                 <td data-value="{{ account.name }} ({{ currency.currency_name }})"> | ||||
|                     <a href="{{ route('accounts.show', account.id) }}" title="{{ account.iban }}">{{ account.name }} ({{ currency.currency_name }})</a> | ||||
|                 </td> | ||||
|                 <td data-value="{{ currency.spent }}" style="text-align: right;"> | ||||
|                     {{ formatAmountBySymbol(currency.spent, currency.currency_symbol, currency.currency_decimal_places) }} | ||||
|                 </td> | ||||
|                 <td data-value="{{ currency.earned }}" style="text-align: right;"> | ||||
|                     {{ formatAmountBySymbol(currency.earned, currency.currency_symbol, currency.currency_decimal_places) }} | ||||
|                 </td> | ||||
|                 <td data-value="{{ currency.sum }}" style="text-align: right;"> | ||||
|                     {{ formatAmountBySymbol(currency.sum, currency.currency_symbol, currency.currency_decimal_places) }} | ||||
|                 </td> | ||||
|             </tr> | ||||
|         {% endfor %} | ||||
|     {% endfor %} | ||||
|     </tbody> | ||||
|     <tfoot> | ||||
|     {% for sum in sums %} | ||||
|         <tr> | ||||
|             <td>{{ 'sum'|_ }} ({{ sum.currency_name }})</td> | ||||
|             <td style="text-align: right;"> | ||||
|                 {{ formatAmountBySymbol(sum.spent_sum, sum.currency_symbol, sum.currency_decimal_places) }} | ||||
|             </td> | ||||
|             <td style="text-align: right;"> | ||||
|                 {{ formatAmountBySymbol(sum.earned_sum, sum.currency_symbol, sum.currency_decimal_places) }} | ||||
|             </td> | ||||
|             <td style="text-align: right;"> | ||||
|                 {{ formatAmountBySymbol(sum.total_sum, sum.currency_symbol, sum.currency_decimal_places) }} | ||||
|             </td> | ||||
|         </tr> | ||||
|     {% endfor %} | ||||
|     </tfoot> | ||||
| </table> | ||||
							
								
								
									
										46
									
								
								resources/views/reports/tag/partials/avg-expenses.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								resources/views/reports/tag/partials/avg-expenses.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,46 @@ | ||||
| <table class="table table-hover sortable"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th data-defaultsign="az">{{ 'account'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'spent_average'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'total'|_ }}</th> | ||||
|         <th data-defaultsign="_19">{{ 'transaction_count'|_ }}</th> | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|     {% for row in result %} | ||||
|         {% if loop.index > listLength %} | ||||
|             <tr class="overListLength"> | ||||
|         {% else %} | ||||
|             <tr> | ||||
|         {% endif %} | ||||
|         <td data-sortable="false"> | ||||
|             <a href="{{ route('accounts.show', row.destination_account_id) }}"> | ||||
|                 {{ row.destination_account_name }} | ||||
|             </a> | ||||
|         </td> | ||||
|         <td data-value="{{ row.avg }}" style="text-align: right;"> | ||||
|             {{ formatAmountBySymbol(row.avg, row.currency_symbol, row.currency_decimal_places) }} | ||||
|         </td> | ||||
|  | ||||
|         <td data-value="{{ row.sum }}" style="text-align: right;"> | ||||
|             {{ formatAmountBySymbol(row.sum, row.currency_symbol, row.currency_decimal_places) }} | ||||
|         </td> | ||||
|  | ||||
|         <td data-value="{{ row.transactions }}"> | ||||
|             {{ row.transactions }} | ||||
|         </td> | ||||
|  | ||||
|         </tr> | ||||
|     {% endfor %} | ||||
|     </tbody> | ||||
|     <tfoot> | ||||
|     {% if result|length > listLength %} | ||||
|         <tr> | ||||
|             <td colspan="5" class="active"> | ||||
|                 <a href="#" class="listLengthTrigger">{{ trans('firefly.show_full_list',{number:incomeTopLength}) }}</a> | ||||
|             </td> | ||||
|         </tr> | ||||
|     {% endif %} | ||||
|     </tfoot> | ||||
| </table> | ||||
							
								
								
									
										46
									
								
								resources/views/reports/tag/partials/avg-income.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								resources/views/reports/tag/partials/avg-income.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,46 @@ | ||||
| <table class="table table-hover sortable"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th data-defaultsign="az">{{ 'account'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'spent_average'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'total'|_ }}</th> | ||||
|         <th data-defaultsign="_19">{{ 'transaction_count'|_ }}</th> | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|     {% for row in result %} | ||||
|         {% if loop.index > listLength %} | ||||
|             <tr class="overListLength"> | ||||
|         {% else %} | ||||
|             <tr> | ||||
|         {% endif %} | ||||
|         <td data-sortable="false"> | ||||
|             <a href="{{ route('accounts.show', row.source_account_id) }}"> | ||||
|                 {{ row.source_account_name }} | ||||
|             </a> | ||||
|         </td> | ||||
|         <td data-value="{{ row.avg }}" style="text-align: right;"> | ||||
|             {{ formatAmountBySymbol(row.avg, row.currency_symbol, row.currency_decimal_places) }} | ||||
|         </td> | ||||
|  | ||||
|         <td data-value="{{ row.sum }}" style="text-align: right;"> | ||||
|             {{ formatAmountBySymbol(row.sum, row.currency_symbol, row.currency_decimal_places) }} | ||||
|         </td> | ||||
|  | ||||
|         <td data-value="{{ row.transactions }}"> | ||||
|             {{ row.transactions }} | ||||
|         </td> | ||||
|  | ||||
|         </tr> | ||||
|     {% endfor %} | ||||
|     </tbody> | ||||
|     <tfoot> | ||||
|     {% if result|length > listLength %} | ||||
|         <tr> | ||||
|             <td colspan="5" class="active"> | ||||
|                 <a href="#" class="listLengthTrigger">{{ trans('firefly.show_full_list',{number:incomeTopLength}) }}</a> | ||||
|             </td> | ||||
|         </tr> | ||||
|     {% endif %} | ||||
|     </tfoot> | ||||
| </table> | ||||
							
								
								
									
										64
									
								
								resources/views/reports/tag/partials/tags.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								resources/views/reports/tag/partials/tags.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,64 @@ | ||||
| <table class="table table-hover sortable"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th data-defaultsign="az">{{ 'name'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'spent'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'earned'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'sum'|_ }}</th> | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|     {% for tag in report %} | ||||
|         {% if tag.currencies|length == 0 %} | ||||
|             <tr> | ||||
|                 <td data-value="{{ tag.name }}"> | ||||
|                     <a href="{{ route('tags.show', tag.id) }}" title="{{ tag.name }}">{{ tag.name }}</a> | ||||
|                 </td> | ||||
|                 <td style="text-align: right;">—</td> | ||||
|                 <td style="text-align: right;">—</td> | ||||
|                 <td style="text-align: right;">—</td> | ||||
|             </tr> | ||||
|         {% endif %} | ||||
|         {% for currency in tag.currencies %} | ||||
|             <tr> | ||||
|                 <td data-value="{{ tag.name }} ({{ currency.currency_name }})"> | ||||
|                     <a href="{{ route('tags.show', tag.id) }}" title="{{ tag.name }}">{{ tag.name }} ({{ currency.currency_name }})</a> | ||||
|                 </td> | ||||
|                 <td data-value="{{ currency.spent }}" style="text-align: right;"> | ||||
|                     {{ formatAmountBySymbol(currency.spent, currency.currency_symbol, currency.currency_decimal_places) }} | ||||
|                 </td> | ||||
|                 <td data-value="{{ currency.earned }}" style="text-align: right;"> | ||||
|                     {{ formatAmountBySymbol(currency.earned, currency.currency_symbol, currency.currency_decimal_places) }} | ||||
|                 </td> | ||||
|                 <td data-value="{{ currency.sum }}" style="text-align: right;"> | ||||
|                     {{ formatAmountBySymbol(currency.sum, currency.currency_symbol, currency.currency_decimal_places) }} | ||||
|                 </td> | ||||
|             </tr> | ||||
|         {% endfor %} | ||||
|     {% endfor %} | ||||
|     </tbody> | ||||
|     <tfoot> | ||||
|     {% for sum in sums %} | ||||
|         <tr> | ||||
|             <td>{{ 'sum'|_ }} ({{ sum.currency_name }})</td> | ||||
|             <td style="text-align: right;"> | ||||
|                 {{ formatAmountBySymbol(sum.spent_sum, sum.currency_symbol, sum.currency_decimal_places) }} | ||||
|             </td> | ||||
|             <td style="text-align: right;"> | ||||
|                 {{ formatAmountBySymbol(sum.earned_sum, sum.currency_symbol, sum.currency_decimal_places) }} | ||||
|             </td> | ||||
|             <td style="text-align: right;"> | ||||
|                 {{ formatAmountBySymbol(sum.total_sum, sum.currency_symbol, sum.currency_decimal_places) }} | ||||
|             </td> | ||||
|         </tr> | ||||
|     {% endfor %} | ||||
|     <tr> | ||||
|         <td colspan="4"> | ||||
|             <p class="text-info"> | ||||
|                 <em>{{ 'tag_report_expenses_listed_once'|_ }}</em> | ||||
|             </p> | ||||
|         </td> | ||||
|     </tr> | ||||
|     </tfoot> | ||||
| </table> | ||||
|  | ||||
							
								
								
									
										54
									
								
								resources/views/reports/tag/partials/top-expenses.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								resources/views/reports/tag/partials/top-expenses.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | ||||
| <table class="table table-hover sortable"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th data-defaultsort="disabled">{{ 'description'|_ }}</th> | ||||
|         <th data-defaultsign="month">{{ 'date'|_ }}</th> | ||||
|         <th data-defaultsign="az">{{ 'account'|_ }}</th> | ||||
|         <th data-defaultsign="az">{{ 'tag'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'amount'|_ }}</th> | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|     {% for row in result %} | ||||
|         {% if loop.index > listLength %} | ||||
|             <tr class="overListLength"> | ||||
|         {% else %} | ||||
|             <tr> | ||||
|         {% endif %} | ||||
|         <td data-sortable="false"> | ||||
|             <a href="{{ route('transactions.show', row.transaction_group_id) }}"> | ||||
|                 {{ row.description }} | ||||
|             </a> | ||||
|         </td> | ||||
|         <td data-value="{{ row.date_sort }}"> | ||||
|             {{ row.date }} | ||||
|         </td> | ||||
|  | ||||
|         <td data-sortable="false"> | ||||
|             <a href="{{ route('accounts.show', row.destination_account_id) }}"> | ||||
|                 {{ row.destination_account_name }} | ||||
|             </a> | ||||
|         </td> | ||||
|         <td data-sortable="false"> | ||||
|             <a href="{{ route('tags.show', row.tag_id) }}"> | ||||
|                 {{ row.tag_name }} | ||||
|             </a> | ||||
|         </td> | ||||
|  | ||||
|         <td data-value="{{ row.amount }}" style="text-align: right;"> | ||||
|             {{ formatAmountBySymbol(row.amount, row.currency_symbol, row.currency_decimal_places) }} | ||||
|         </td> | ||||
|  | ||||
|         </tr> | ||||
|     {% endfor %} | ||||
|     </tbody> | ||||
|     <tfoot> | ||||
|     {% if result|length > listLength %} | ||||
|         <tr> | ||||
|             <td colspan="5" class="active"> | ||||
|                 <a href="#" class="listLengthTrigger">{{ trans('firefly.show_full_list',{number:incomeTopLength}) }}</a> | ||||
|             </td> | ||||
|         </tr> | ||||
|     {% endif %} | ||||
|     </tfoot> | ||||
| </table> | ||||
							
								
								
									
										54
									
								
								resources/views/reports/tag/partials/top-income.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								resources/views/reports/tag/partials/top-income.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | ||||
| <table class="table table-hover sortable"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th data-defaultsort="disabled">{{ 'description'|_ }}</th> | ||||
|         <th data-defaultsign="month">{{ 'date'|_ }}</th> | ||||
|         <th data-defaultsign="az">{{ 'account'|_ }}</th> | ||||
|         <th data-defaultsign="az">{{ 'tag'|_ }}</th> | ||||
|         <th data-defaultsign="_19" style="text-align: right;">{{ 'amount'|_ }}</th> | ||||
|     </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|     {% for row in result %} | ||||
|         {% if loop.index > listLength %} | ||||
|             <tr class="overListLength"> | ||||
|         {% else %} | ||||
|             <tr> | ||||
|         {% endif %} | ||||
|         <td data-sortable="false"> | ||||
|             <a href="{{ route('transactions.show', row.transaction_group_id) }}"> | ||||
|                 {{ row.description }} | ||||
|             </a> | ||||
|         </td> | ||||
|         <td data-value="{{ row.date_sort }}"> | ||||
|             {{ row.date }} | ||||
|         </td> | ||||
|  | ||||
|         <td data-sortable="false"> | ||||
|             <a href="{{ route('accounts.show', row.source_account_id) }}"> | ||||
|                 {{ row.source_account_name }} | ||||
|             </a> | ||||
|         </td> | ||||
|         <td data-sortable="false"> | ||||
|             <a href="{{ route('tags.show', row.tag_id) }}"> | ||||
|                 {{ row.tag_name }} | ||||
|             </a> | ||||
|         </td> | ||||
|  | ||||
|         <td data-value="{{ row.amount }}" style="text-align: right;"> | ||||
|             {{ formatAmountBySymbol(row.amount, row.currency_symbol, row.currency_decimal_places) }} | ||||
|         </td> | ||||
|  | ||||
|         </tr> | ||||
|     {% endfor %} | ||||
|     </tbody> | ||||
|     <tfoot> | ||||
|     {% if result|length > listLength %} | ||||
|         <tr> | ||||
|             <td colspan="5" class="active"> | ||||
|                 <a href="#" class="listLengthTrigger">{{ trans('firefly.show_full_list',{number:incomeTopLength}) }}</a> | ||||
|             </td> | ||||
|         </tr> | ||||
|     {% endif %} | ||||
|     </tfoot> | ||||
| </table> | ||||
		Reference in New Issue
	
	Block a user