350 lines
16 KiB
PHP
Raw Normal View History

2017-09-14 22:21:00 +03:00
@extends('layouts.admin')
@section('title', trans('general.dashboard'))
@section('content')
<div class="row">
<!---Income-->
<div class="col-md-4">
<div class="info-box">
2018-11-28 13:02:18 +03:00
@if ($auth_user->can('read-reports-income-summary'))
<a href="{{ url('reports/income-summary') }}"><span class="info-box-icon bg-aqua"><i class="fa fa-money"></i></span></a>
@else
2017-09-14 22:21:00 +03:00
<span class="info-box-icon bg-aqua"><i class="fa fa-money"></i></span>
2018-11-28 13:02:18 +03:00
@endif
2017-09-14 22:21:00 +03:00
<div class="info-box-content">
<span class="info-box-text">{{ trans('dashboard.total_incomes') }}</span>
<span class="info-box-number">@money($total_incomes['total'], setting('general.default_currency'), true)</span>
<div class="progress-group" title="{{ trans('dashboard.open_invoices') }}: {{ $total_incomes['open_invoice'] }}<br>{{ trans('dashboard.overdue_invoices') }}: {{ $total_incomes['overdue_invoice'] }}" data-toggle="tooltip" data-html="true">
<div class="progress sm">
<div class="progress-bar progress-bar-aqua" style="width: {{ $total_incomes['progress'] }}%"></div>
</div>
<span class="progress-text">{{ trans('dashboard.receivables') }}</span>
<span class="progress-number">{{ $total_incomes['open_invoice'] }} / {{ $total_incomes['overdue_invoice'] }}</span>
</div>
</div>
</div>
</div>
<!---Expense-->
<div class="col-md-4">
<div class="info-box">
2018-11-28 13:02:18 +03:00
@if ($auth_user->can('read-reports-expense-summary'))
<a href="{{ url('reports/expense-summary') }}"><span class="info-box-icon bg-red"><i class="fa fa-shopping-cart"></i></span></a>
@else
2017-09-14 22:21:00 +03:00
<span class="info-box-icon bg-red"><i class="fa fa-shopping-cart"></i></span>
2018-11-28 13:02:18 +03:00
@endif
2017-09-14 22:21:00 +03:00
<div class="info-box-content">
<span class="info-box-text">{{ trans('dashboard.total_expenses') }}</span>
<span class="info-box-number">@money($total_expenses['total'], setting('general.default_currency'), true)</span>
<div class="progress-group" title="{{ trans('dashboard.open_bills') }}: {{ $total_expenses['open_bill'] }}<br>{{ trans('dashboard.overdue_bills') }}: {{ $total_expenses['overdue_bill'] }}" data-toggle="tooltip" data-html="true">
<div class="progress sm">
<div class="progress-bar progress-bar-red" style="width: {{ $total_expenses['progress'] }}%"></div>
</div>
<span class="progress-text">{{ trans('dashboard.payables') }}</span>
<span class="progress-number">{{ $total_expenses['open_bill'] }} / {{ $total_expenses['overdue_bill'] }}</span>
</div>
</div>
</div>
</div>
<!---Profit-->
<div class="col-md-4">
<div class="info-box">
2018-11-28 13:02:18 +03:00
@if ($auth_user->can('read-reports-income-expense-summary'))
<a href="{{ url('reports/income-expense-summary') }}"><span class="info-box-icon bg-green"><i class="fa fa-heart"></i></span></a>
@else
2017-09-14 22:21:00 +03:00
<span class="info-box-icon bg-green"><i class="fa fa-heart"></i></span>
2018-11-28 13:02:18 +03:00
@endif
2017-09-14 22:21:00 +03:00
<div class="info-box-content">
<span class="info-box-text">{{ trans('dashboard.total_profit') }}</span>
<span class="info-box-number">@money($total_profit['total'], setting('general.default_currency'), true)</span>
<div class="progress-group" title="{{ trans('dashboard.open_profit') }}: {{ $total_profit['open'] }}<br>{{ trans('dashboard.overdue_profit') }}: {{ $total_profit['overdue'] }}" data-toggle="tooltip" data-html="true">
<div class="progress sm">
<div class="progress-bar progress-bar-green" style="width: {{ $total_profit['progress'] }}%"></div>
</div>
<span class="progress-text">{{ trans('general.upcoming') }}</span>
<span class="progress-number">{{ $total_profit['open'] }} / {{ $total_profit['overdue'] }}</span>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<!---Income, Expense and Profit Line Chart-->
<div class="col-md-12">
2017-12-12 19:09:16 +03:00
<div class="box box-success">
<div class="box-header with-border">
<h3 class="box-title">{{ trans('dashboard.cash_flow') }}</h3>
<div class="box-tools pull-right">
2017-12-13 02:21:32 +03:00
<button type="button" id="cashflow-monthly" class="btn btn-default btn-sm">{{ trans('general.monthly') }}</button>&nbsp;&nbsp;
<button type="button" id="cashflow-quarterly" class="btn btn-default btn-sm">{{ trans('general.quarterly') }}</button>&nbsp;&nbsp;
2017-12-12 19:36:36 +03:00
<input type="hidden" name="period" id="period" value="month" />
2017-12-12 19:09:16 +03:00
<div class="btn btn-default btn-sm">
<div id="cashflow-range" class="pull-right">
<i class="glyphicon glyphicon-calendar fa fa-calendar"></i>&nbsp;
<span></span> <b class="caret"></b>
</div>
</div>
2017-09-14 22:21:00 +03:00
</div>
</div>
2017-12-12 19:09:16 +03:00
<div class="box-body" id="cashflow">
{!! $cashflow->render() !!}
</div>
2017-09-14 22:21:00 +03:00
</div>
</div>
</div>
<div class="row">
2017-12-13 02:21:32 +03:00
<div class="col-md-6">
2017-09-14 22:21:00 +03:00
<div class="box box-success">
<div class="box-header with-border">
<h3 class="box-title">{{ trans('dashboard.incomes_by_category') }}</h3>
<div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="remove"><i class="fa fa-times"></i></button>
</div>
</div>
<div class="box-body">
2017-12-11 19:07:09 +03:00
{!! $donut_incomes->render() !!}
2017-09-14 22:21:00 +03:00
</div>
</div>
2017-12-13 02:21:32 +03:00
</div>
2017-09-14 22:21:00 +03:00
2017-12-13 02:21:32 +03:00
<div class="col-md-6">
2017-09-14 22:21:00 +03:00
<div class="box box-success">
<div class="box-header with-border">
<h3 class="box-title">{{ trans('dashboard.expenses_by_category') }}</h3>
<div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="remove"><i class="fa fa-times"></i></button>
</div>
</div>
<div class="box-body">
2017-12-11 19:07:09 +03:00
{!! $donut_expenses->render() !!}
2017-09-14 22:21:00 +03:00
</div>
</div>
</div>
2017-12-13 02:21:32 +03:00
</div>
2017-09-14 22:21:00 +03:00
2017-12-13 02:21:32 +03:00
<div class="row">
<!-- Account Balance List-->
2017-09-14 22:21:00 +03:00
<div class="col-md-4">
<div class="box box-success">
<div class="box-header with-border">
<h3 class="box-title">{{ trans('dashboard.account_balance') }}</h3>
<div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="remove"><i class="fa fa-times"></i></button>
</div>
</div>
<div class="box-body">
@if ($accounts->count())
2017-10-13 18:41:17 +03:00
<table class="table table-striped">
<tbody>
@foreach($accounts as $item)
<tr>
<td class="text-left">{{ $item->name }}</td>
<td class="text-right">@money($item->balance, $item->currency_code, true)</td>
</tr>
@endforeach
</tbody>
</table>
2017-09-14 22:21:00 +03:00
@else
<h5 class="text-center">{{ trans('general.no_records') }}</h5>
@endif
</div>
</div>
2017-12-13 02:21:32 +03:00
</div>
2017-09-14 22:21:00 +03:00
2017-12-13 02:21:32 +03:00
<!-- Latest Incomes List-->
<div class="col-md-4">
2017-09-14 22:21:00 +03:00
<div class="box box-success">
<div class="box-header with-border">
<h3 class="box-title">{{ trans('dashboard.latest_incomes') }}</h3>
<div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="remove"><i class="fa fa-times"></i></button>
</div>
</div>
<div class="box-body">
@if ($latest_incomes->count())
2017-10-13 18:41:17 +03:00
<table class="table table-striped">
2017-09-14 22:21:00 +03:00
<thead>
<tr>
<th class="text-left">{{ trans('general.date') }}</th>
<th class="text-left">{{ trans_choice('general.categories', 1) }}</th>
<th class="text-right">{{ trans('general.amount') }}</th>
</tr>
</thead>
<tbody>
@foreach($latest_incomes as $item)
<tr>
2017-10-13 18:41:17 +03:00
<td class="text-left">{{ Date::parse($item->paid_at)->format($date_format) }}</td>
<td class="text-left">{{ $item->category ? $item->category->name : trans_choice('general.invoices', 2) }}</td>
<td class="text-right">@money($item->amount, $item->currency_code, true)</td>
2017-09-14 22:21:00 +03:00
</tr>
@endforeach
</tbody>
</table>
@else
<h5 class="text-center">{{ trans('general.no_records') }}</h5>
@endif
</div>
</div>
2017-12-13 02:21:32 +03:00
</div>
2017-09-14 22:21:00 +03:00
2017-12-13 02:21:32 +03:00
<!-- Latest Expenses List-->
<div class="col-md-4">
2017-09-14 22:21:00 +03:00
<div class="box box-success">
<div class="box-header with-border">
<h3 class="box-title">{{ trans('dashboard.latest_expenses') }}</h3>
<div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="remove"><i class="fa fa-times"></i></button>
</div>
</div>
<div class="box-body">
@if ($latest_expenses->count())
2017-10-13 18:41:17 +03:00
<table class="table table-striped">
2017-09-14 22:21:00 +03:00
<thead>
<tr>
<th class="text-left">{{ trans('general.date') }}</th>
<th class="text-left">{{ trans_choice('general.categories', 1) }}</th>
<th class="text-right">{{ trans('general.amount') }}</th>
</tr>
</thead>
<tbody>
@foreach($latest_expenses as $item)
<tr>
2017-10-13 18:41:17 +03:00
<td class="text-left">{{ Date::parse($item->paid_at)->format($date_format) }}</td>
<td class="text-left">{{ $item->category ? $item->category->name : trans_choice('general.bills', 2) }}</td>
<td class="text-right">@money($item->amount, $item->currency_code, true)</td>
2017-09-14 22:21:00 +03:00
</tr>
@endforeach
</tbody>
</table>
@else
<h5 class="text-center">{{ trans('general.no_records') }}</h5>
@endif
</div>
</div>
</div>
</div>
@endsection
2017-12-13 02:21:32 +03:00
@push('css')
<link rel="stylesheet" type="text/css" href="{{ asset('public/css/daterangepicker.css') }}" />
@endpush
2017-11-13 21:55:15 +03:00
@push('js')
2017-12-11 19:07:09 +03:00
{!! Charts::assets() !!}
2017-12-13 02:21:32 +03:00
<script type="text/javascript" src="{{ asset('public/js/moment/moment.js') }}"></script>
2017-12-13 10:28:23 +03:00
@if (is_file(base_path('public/js/moment/locale/' . strtolower(app()->getLocale()) . '.js')))
<script type="text/javascript" src="{{ asset('public/js/moment/locale/' . strtolower(app()->getLocale()) . '.js') }}"></script>
@elseif (is_file(base_path('public/js/moment/locale/' . language()->getShortCode() . '.js')))
<script type="text/javascript" src="{{ asset('public/js/moment/locale/' . language()->getShortCode() . '.js') }}"></script>
@endif
2017-12-13 02:21:32 +03:00
<script type="text/javascript" src="{{ asset('public/js/daterangepicker/daterangepicker.js') }}"></script>
2017-12-12 19:09:16 +03:00
@endpush
@push('scripts')
<script type="text/javascript">
$(function() {
2018-12-14 11:23:15 +05:30
var start = moment('{{ $financial_start }}');
var end = moment('{{ $financial_start }}').add('1', 'years').subtract('1', 'days');
2017-12-12 19:09:16 +03:00
function cb(start, end) {
$('#cashflow-range span').html(start.format('D MMM YYYY') + ' - ' + end.format('D MMM YYYY'));
}
$('#cashflow-range').daterangepicker({
startDate: start,
endDate: end,
ranges: {
2018-12-14 11:23:15 +05:30
'{{ trans("reports.this_year") }}': [start, end],
'{{ trans("reports.previous_year") }}': [moment('{{ $financial_start }}').subtract(1, 'year'), moment('{{ $financial_start }}').subtract('1', 'days')],
2018-12-14 19:54:05 +05:30
'{{ trans("reports.this_quarter") }}': [moment().startOf('quarter'), moment().endOf('quarter')],
2018-12-14 19:52:34 +05:30
'{{ trans("reports.previous_quarter") }}': [moment().subtract(1, 'quarter').startOf('quarter'), moment().subtract(1, 'quarter').endOf('quarter')],
2017-12-13 02:21:32 +03:00
'{{ trans("reports.last_12_months") }}': [moment().subtract(11, 'months').startOf('month'), moment().endOf('month')]
2017-12-12 19:09:16 +03:00
}
}, cb);
cb(start, end);
});
$(document).ready(function () {
$('#cashflow-range').on('apply.daterangepicker', function(ev, picker) {
2017-12-12 19:36:36 +03:00
var period = $('#period').val();
range = getRange(picker);
2017-12-12 19:09:16 +03:00
$.ajax({
2018-06-10 02:48:51 +03:00
url: '{{ url("common/dashboard/cashflow") }}',
2017-12-13 02:21:32 +03:00
type: 'get',
dataType: 'html',
data: 'period=' + period + '&start=' + picker.startDate.format('YYYY-MM-DD') + '&end=' + picker.endDate.format('YYYY-MM-DD') + '&range=' + range,
2017-12-12 19:09:16 +03:00
success: function(data) {
$('#cashflow').html(data);
}
});
});
$('#cashflow-monthly').on('click', function() {
var picker = $('#cashflow-range').data('daterangepicker');
2017-12-12 19:36:36 +03:00
$('#period').val('month');
range = getRange(picker);
2017-12-12 19:09:16 +03:00
$.ajax({
2018-06-10 02:48:51 +03:00
url: '{{ url("common/dashboard/cashflow") }}',
2017-12-13 02:21:32 +03:00
type: 'get',
dataType: 'html',
data: 'period=month&start=' + picker.startDate.format('YYYY-MM-DD') + '&end=' + picker.endDate.format('YYYY-MM-DD') + '&range=' + range,
2017-12-12 19:09:16 +03:00
success: function(data) {
$('#cashflow').html(data);
}
});
});
$('#cashflow-quarterly').on('click', function() {
var picker = $('#cashflow-range').data('daterangepicker');
2017-12-12 19:36:36 +03:00
$('#period').val('quarter');
range = getRange(picker);
2017-12-12 19:09:16 +03:00
$.ajax({
2018-06-10 02:48:51 +03:00
url: '{{ url("common/dashboard/cashflow") }}',
2017-12-13 02:21:32 +03:00
type: 'get',
dataType: 'html',
data: 'period=quarter&start=' + picker.startDate.format('YYYY-MM-DD') + '&end=' + picker.endDate.format('YYYY-MM-DD') + '&range=' + range,
2017-12-12 19:09:16 +03:00
success: function(data) {
$('#cashflow').html(data);
}
});
});
});
function getRange(picker) {
ranges = {
2018-12-14 11:23:15 +05:30
'{{ trans("reports.this_year") }}': 'custom',
'{{ trans("reports.previous_year") }}': 'custom',
'{{ trans("reports.this_quarter") }}': 'this_quarter',
'{{ trans("reports.previous_quarter") }}': 'previous_quarter',
'{{ trans("reports.last_12_months") }}': 'last_12_months'
};
range = 'custom';
if (ranges[picker.chosenLabel] != undefined) {
range = ranges[picker.chosenLabel];
}
return range;
}
2017-12-12 19:09:16 +03:00
</script>
2018-12-14 11:23:15 +05:30
@endpush