Merge pull request #681 from sausin/master

Support for financial year customisation
This commit is contained in:
Denis Duliçi 2018-12-24 10:18:48 +03:00 committed by GitHub
commit 57352840e2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 122 additions and 29 deletions

View File

@ -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');

View File

@ -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')

View File

@ -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')

View File

@ -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')

View File

@ -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(

View File

@ -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]] = [

View File

@ -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;
}
}
}

View File

@ -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',

View File

@ -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' => [

View File

@ -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

View File

@ -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, []) }}