Merge pull request #681 from sausin/master
Support for financial year customisation
This commit is contained in:
commit
57352840e2
@ -20,6 +20,9 @@ class Dashboard extends Controller
|
||||
use Currencies;
|
||||
|
||||
public $today;
|
||||
|
||||
// get any custom financial year beginning
|
||||
public $financial_start;
|
||||
|
||||
public $income_donut = ['colors' => [], 'labels' => [], 'values' => []];
|
||||
|
||||
@ -33,6 +36,7 @@ class Dashboard extends Controller
|
||||
public function index()
|
||||
{
|
||||
$this->today = Date::today();
|
||||
$this->financial_start = $financial_start = Date::parse(setting('general.financial_start'))->format('Y-m-d');
|
||||
|
||||
list($total_incomes, $total_expenses, $total_profit) = $this->getTotals();
|
||||
|
||||
@ -55,7 +59,8 @@ class Dashboard extends Controller
|
||||
'donut_expenses',
|
||||
'accounts',
|
||||
'latest_incomes',
|
||||
'latest_expenses'
|
||||
'latest_expenses',
|
||||
'financial_start'
|
||||
));
|
||||
}
|
||||
|
||||
@ -123,8 +128,13 @@ class Dashboard extends Controller
|
||||
|
||||
private function getCashFlow()
|
||||
{
|
||||
$start = Date::parse(request('start', $this->today->startOfYear()->format('Y-m-d')));
|
||||
$end = Date::parse(request('end', $this->today->endOfYear()->format('Y-m-d')));
|
||||
// check and assign year start
|
||||
if (($year_start = $this->today->startOfYear()->format('Y-m-d')) !== $this->financial_start) {
|
||||
$year_start = $this->financial_start;
|
||||
}
|
||||
|
||||
$start = Date::parse(request('start', $year_start));
|
||||
$end = Date::parse(request('end', Date::parse($year_start)->addYear(1)->subDays(1)->format('Y-m-d')));
|
||||
$period = request('period', 'month');
|
||||
$range = request('range', 'custom');
|
||||
|
||||
|
@ -26,6 +26,17 @@ class ExpenseSummary extends Controller
|
||||
|
||||
$status = request('status');
|
||||
$year = request('year', Date::now()->year);
|
||||
|
||||
// check and assign year start
|
||||
if (($financial_start = Date::parse(setting('general.financial_start')))->month != 1) {
|
||||
// check if a specific year is requested
|
||||
if (!is_null(request('year'))) {
|
||||
$financial_start->year = $year;
|
||||
}
|
||||
|
||||
$year = [$financial_start->format('Y'), $financial_start->addYear()->format('Y')];
|
||||
$financial_start->subYear()->subMonth();
|
||||
}
|
||||
|
||||
$categories = Category::enabled()->type('expense')->orderBy('name')->pluck('name', 'id')->toArray();
|
||||
|
||||
@ -39,9 +50,11 @@ class ExpenseSummary extends Controller
|
||||
|
||||
// Dates
|
||||
for ($j = 1; $j <= 12; $j++) {
|
||||
$dates[$j] = Date::parse($year . '-' . $j)->format('F');
|
||||
$ym_string = is_array($year) ? $financial_start->addMonth()->format('Y-m') : $year . '-' . $j;
|
||||
|
||||
$dates[$j] = Date::parse($ym_string)->format('F');
|
||||
|
||||
$expenses_graph[Date::parse($year . '-' . $j)->format('F-Y')] = 0;
|
||||
$expenses_graph[Date::parse($ym_string)->format('F-Y')] = 0;
|
||||
|
||||
// Totals
|
||||
$totals[$dates[$j]] = array(
|
||||
@ -112,7 +125,7 @@ class ExpenseSummary extends Controller
|
||||
$view_template = 'reports.expense_summary.index';
|
||||
}
|
||||
|
||||
$print_url = $this->getPrintUrl($year);
|
||||
$print_url = $this->getPrintUrl(is_array($year) ? $year[0] : $year);
|
||||
|
||||
// Expenses chart
|
||||
$chart = Charts::multi('line', 'chartjs')
|
||||
|
@ -30,6 +30,18 @@ class IncomeExpenseSummary extends Controller
|
||||
|
||||
$status = request('status');
|
||||
$year = request('year', Date::now()->year);
|
||||
|
||||
// check and assign year start
|
||||
if (($financial_start = Date::parse(setting('general.financial_start')))->month != 1) {
|
||||
// check if a specific year is requested
|
||||
if (!is_null(request('year'))) {
|
||||
$financial_start->year = $year;
|
||||
}
|
||||
|
||||
$year = [$financial_start->format('Y'), $financial_start->addYear()->format('Y')];
|
||||
$financial_start->subYear()->subMonth();
|
||||
}
|
||||
|
||||
$categories_filter = request('categories');
|
||||
|
||||
$income_categories = Category::enabled()->type('income')->when($categories_filter, function ($query) use ($categories_filter) {
|
||||
@ -42,9 +54,11 @@ class IncomeExpenseSummary extends Controller
|
||||
|
||||
// Dates
|
||||
for ($j = 1; $j <= 12; $j++) {
|
||||
$dates[$j] = Date::parse($year . '-' . $j)->format('F');
|
||||
$ym_string = is_array($year) ? $financial_start->addMonth()->format('Y-m') : $year . '-' . $j;
|
||||
|
||||
$dates[$j] = Date::parse($ym_string)->format('F');
|
||||
|
||||
$profit_graph[Date::parse($year . '-' . $j)->format('F-Y')] = 0;
|
||||
$profit_graph[Date::parse($ym_string)->format('F-Y')] = 0;
|
||||
|
||||
// Totals
|
||||
$totals[$dates[$j]] = array(
|
||||
@ -153,7 +167,7 @@ class IncomeExpenseSummary extends Controller
|
||||
$view_template = 'reports.income_expense_summary.index';
|
||||
}
|
||||
|
||||
$print_url = $this->getPrintUrl($year);
|
||||
$print_url = $this->getPrintUrl(is_array($year) ? $year[0] : $year);
|
||||
|
||||
// Profit chart
|
||||
$chart = Charts::multi('line', 'chartjs')
|
||||
|
@ -26,6 +26,17 @@ class IncomeSummary extends Controller
|
||||
|
||||
$status = request('status');
|
||||
$year = request('year', Date::now()->year);
|
||||
|
||||
// check and assign year start
|
||||
if (($financial_start = Date::parse(setting('general.financial_start')))->month != 1) {
|
||||
// check if a specific year is requested
|
||||
if (!is_null(request('year'))) {
|
||||
$financial_start->year = $year;
|
||||
}
|
||||
|
||||
$year = [$financial_start->format('Y'), $financial_start->addYear()->format('Y')];
|
||||
$financial_start->subYear()->subMonth();
|
||||
}
|
||||
|
||||
$categories = Category::enabled()->type('income')->orderBy('name')->pluck('name', 'id')->toArray();
|
||||
|
||||
@ -39,9 +50,11 @@ class IncomeSummary extends Controller
|
||||
|
||||
// Dates
|
||||
for ($j = 1; $j <= 12; $j++) {
|
||||
$dates[$j] = Date::parse($year . '-' . $j)->format('F');
|
||||
$ym_string = is_array($year) ? $financial_start->addMonth()->format('Y-m') : $year . '-' . $j;
|
||||
|
||||
$dates[$j] = Date::parse($ym_string)->format('F');
|
||||
|
||||
$incomes_graph[Date::parse($year . '-' . $j)->format('F-Y')] = 0;
|
||||
$incomes_graph[Date::parse($ym_string)->format('F-Y')] = 0;
|
||||
|
||||
// Totals
|
||||
$totals[$dates[$j]] = array(
|
||||
@ -112,7 +125,7 @@ class IncomeSummary extends Controller
|
||||
$view_template = 'reports.income_summary.index';
|
||||
}
|
||||
|
||||
$print_url = $this->getPrintUrl($year);
|
||||
$print_url = $this->getPrintUrl(is_array($year) ? $year[0] : $year);
|
||||
|
||||
// Incomes chart
|
||||
$chart = Charts::multi('line', 'chartjs')
|
||||
|
@ -26,6 +26,17 @@ class ProfitLoss extends Controller
|
||||
|
||||
$status = request('status');
|
||||
$year = request('year', Date::now()->year);
|
||||
|
||||
// check and assign year start
|
||||
if (($financial_start = Date::parse(setting('general.financial_start')))->month != 1) {
|
||||
// check if a specific year is requested
|
||||
if (!is_null(request('year'))) {
|
||||
$financial_start->year = $year;
|
||||
}
|
||||
|
||||
$year = [$financial_start->format('Y'), $financial_start->addYear()->format('Y')];
|
||||
$financial_start->subYear()->subQuarter();
|
||||
}
|
||||
|
||||
$income_categories = Category::enabled()->type('income')->orderBy('name')->pluck('name', 'id')->toArray();
|
||||
|
||||
@ -33,7 +44,9 @@ class ProfitLoss extends Controller
|
||||
|
||||
// Dates
|
||||
for ($j = 1; $j <= 12; $j++) {
|
||||
$dates[$j] = Date::parse($year . '-' . $j)->quarter;
|
||||
$ym_string = is_array($year) ? $financial_start->addQuarter()->format('Y-m') : $year . '-' . $j;
|
||||
|
||||
$dates[$j] = Date::parse($ym_string)->quarter;
|
||||
|
||||
// Totals
|
||||
$totals[$dates[$j]] = array(
|
||||
|
@ -28,6 +28,17 @@ class TaxSummary extends Controller
|
||||
|
||||
$status = request('status');
|
||||
$year = request('year', Date::now()->year);
|
||||
|
||||
// check and assign year start
|
||||
if (($financial_start = Date::parse(setting('general.financial_start')))->month != 1) {
|
||||
// check if a specific year is requested
|
||||
if (!is_null(request('year'))) {
|
||||
$financial_start->year = $year;
|
||||
}
|
||||
|
||||
$year = [$financial_start->format('Y'), $financial_start->addYear()->format('Y')];
|
||||
$financial_start->subYear()->subMonth();
|
||||
}
|
||||
|
||||
$t = Tax::enabled()->where('rate', '<>', '0')->pluck('name')->toArray();
|
||||
|
||||
@ -35,7 +46,9 @@ class TaxSummary extends Controller
|
||||
|
||||
// Dates
|
||||
for ($j = 1; $j <= 12; $j++) {
|
||||
$dates[$j] = Date::parse($year . '-' . $j)->format('M');
|
||||
$ym_string = is_array($year) ? $financial_start->addMonth()->format('Y-m') : $year . '-' . $j;
|
||||
|
||||
$dates[$j] = Date::parse($ym_string)->format('M');
|
||||
|
||||
foreach ($taxes as $tax_name) {
|
||||
$incomes[$tax_name][$dates[$j]] = [
|
||||
|
@ -29,6 +29,18 @@ trait DateTime
|
||||
|
||||
$start = Date::parse($year . '-01-01')->format('Y-m-d');
|
||||
$end = Date::parse($year . '-12-31')->format('Y-m-d');
|
||||
|
||||
// check if financial year has been customized
|
||||
$financial_start = Date::parse(setting('general.financial_start'));
|
||||
|
||||
if (Date::now()->startOfYear()->format('Y-m-d') !== $financial_start->format('Y-m-d')) {
|
||||
if (!is_null(request('year'))) {
|
||||
$financial_start->year = $year;
|
||||
}
|
||||
|
||||
$start = $financial_start->format('Y-m-d');
|
||||
$end = $financial_start->addYear(1)->subDays(1)->format('Y-m-d');
|
||||
}
|
||||
|
||||
return $query->whereBetween($field, [$start, $end]);
|
||||
}
|
||||
@ -70,4 +82,4 @@ trait DateTime
|
||||
|
||||
return $groups;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4,6 +4,7 @@ namespace Database\Seeds;
|
||||
|
||||
use App\Models\Model;
|
||||
use Illuminate\Database\Seeder;
|
||||
use Date;
|
||||
use Setting;
|
||||
|
||||
class Settings extends Seeder
|
||||
@ -28,6 +29,7 @@ class Settings extends Seeder
|
||||
|
||||
Setting::set([
|
||||
'general.date_format' => 'd M Y',
|
||||
'general.financial_start' => Date::now()->startOfYear()->format('d F'),
|
||||
'general.date_separator' => 'space',
|
||||
'general.timezone' => 'Europe/London',
|
||||
'general.percent_position' => 'after',
|
||||
|
@ -12,13 +12,14 @@ return [
|
||||
'localisation' => [
|
||||
'tab' => 'Localisation',
|
||||
'date' => [
|
||||
'format' => 'Date Format',
|
||||
'separator' => 'Date Separator',
|
||||
'dash' => 'Dash (-)',
|
||||
'dot' => 'Dot (.)',
|
||||
'comma' => 'Comma (,)',
|
||||
'slash' => 'Slash (/)',
|
||||
'space' => 'Space ( )',
|
||||
'format' => 'Date Format',
|
||||
'financial_start' => 'Financial year start',
|
||||
'separator' => 'Date Separator',
|
||||
'dash' => 'Dash (-)',
|
||||
'dot' => 'Dot (.)',
|
||||
'comma' => 'Comma (,)',
|
||||
'slash' => 'Slash (/)',
|
||||
'space' => 'Space ( )',
|
||||
],
|
||||
'timezone' => 'Time Zone',
|
||||
'percent' => [
|
||||
|
@ -252,8 +252,8 @@
|
||||
@push('scripts')
|
||||
<script type="text/javascript">
|
||||
$(function() {
|
||||
var start = moment().startOf('year');
|
||||
var end = moment().endOf('year');
|
||||
var start = moment('{{ $financial_start }}');
|
||||
var end = moment('{{ $financial_start }}').add('1', 'years').subtract('1', 'days');
|
||||
|
||||
function cb(start, end) {
|
||||
$('#cashflow-range span').html(start.format('D MMM YYYY') + ' - ' + end.format('D MMM YYYY'));
|
||||
@ -263,8 +263,8 @@
|
||||
startDate: start,
|
||||
endDate: end,
|
||||
ranges: {
|
||||
'{{ trans("reports.this_year") }}': [moment().startOf('year'), moment().endOf('year')],
|
||||
'{{ trans("reports.previous_year") }}': [moment().subtract(1, 'year').startOf('year'), moment().subtract(1, 'year').endOf('year')],
|
||||
'{{ trans("reports.this_year") }}': [start, end],
|
||||
'{{ trans("reports.previous_year") }}': [moment('{{ $financial_start }}').subtract(1, 'year'), moment('{{ $financial_start }}').subtract('1', 'days')],
|
||||
'{{ trans("reports.this_quarter") }}': [moment().startOf('quarter'), moment().endOf('quarter')],
|
||||
'{{ trans("reports.previous_quarter") }}': [moment().subtract(1, 'quarter').startOf('quarter'), moment().subtract(1, 'quarter').endOf('quarter')],
|
||||
'{{ trans("reports.last_12_months") }}': [moment().subtract(11, 'months').startOf('month'), moment().endOf('month')]
|
||||
@ -330,8 +330,8 @@
|
||||
|
||||
function getRange(picker) {
|
||||
ranges = {
|
||||
'{{ trans("reports.this_year") }}': 'this_year',
|
||||
'{{ trans("reports.previous_year") }}': 'previous_year',
|
||||
'{{ 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'
|
||||
@ -346,4 +346,4 @@
|
||||
return range;
|
||||
}
|
||||
</script>
|
||||
@endpush
|
||||
@endpush
|
||||
|
@ -45,6 +45,8 @@
|
||||
|
||||
<div class="tab-pane tab-margin" id="localisation">
|
||||
{{ Form::selectGroup('date_format', trans('settings.localisation.date.format'), 'calendar', $date_formats, null, ['autocomplete' => 'off']) }}
|
||||
|
||||
{{ Form::textGroup('financial_start', trans('settings.localisation.date.financial_start'), 'calendar-check-o', []) }}
|
||||
|
||||
{{ Form::selectGroup('date_separator', trans('settings.localisation.date.separator'), 'minus', $date_separators, null, []) }}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user