diff --git a/app/Http/Controllers/Common/Dashboard.php b/app/Http/Controllers/Common/Dashboard.php index 176953682..a33f8fb42 100644 --- a/app/Http/Controllers/Common/Dashboard.php +++ b/app/Http/Controllers/Common/Dashboard.php @@ -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'); diff --git a/app/Http/Controllers/Reports/ExpenseSummary.php b/app/Http/Controllers/Reports/ExpenseSummary.php index d3d5ea2fe..91697e4d0 100644 --- a/app/Http/Controllers/Reports/ExpenseSummary.php +++ b/app/Http/Controllers/Reports/ExpenseSummary.php @@ -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') diff --git a/app/Http/Controllers/Reports/IncomeExpenseSummary.php b/app/Http/Controllers/Reports/IncomeExpenseSummary.php index 0f80a0bbd..7c9074489 100644 --- a/app/Http/Controllers/Reports/IncomeExpenseSummary.php +++ b/app/Http/Controllers/Reports/IncomeExpenseSummary.php @@ -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') diff --git a/app/Http/Controllers/Reports/IncomeSummary.php b/app/Http/Controllers/Reports/IncomeSummary.php index 50a02a5f4..66825cc24 100644 --- a/app/Http/Controllers/Reports/IncomeSummary.php +++ b/app/Http/Controllers/Reports/IncomeSummary.php @@ -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') diff --git a/app/Http/Controllers/Reports/ProfitLoss.php b/app/Http/Controllers/Reports/ProfitLoss.php index fd1f7b460..fa640b6af 100644 --- a/app/Http/Controllers/Reports/ProfitLoss.php +++ b/app/Http/Controllers/Reports/ProfitLoss.php @@ -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( diff --git a/app/Http/Controllers/Reports/TaxSummary.php b/app/Http/Controllers/Reports/TaxSummary.php index 1907ac90d..7a588a468 100644 --- a/app/Http/Controllers/Reports/TaxSummary.php +++ b/app/Http/Controllers/Reports/TaxSummary.php @@ -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]] = [ diff --git a/app/Traits/DateTime.php b/app/Traits/DateTime.php index afa8e346b..549f68af9 100644 --- a/app/Traits/DateTime.php +++ b/app/Traits/DateTime.php @@ -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; } -} \ No newline at end of file +} diff --git a/database/seeds/Settings.php b/database/seeds/Settings.php index 6856a7540..a1d3217ff 100644 --- a/database/seeds/Settings.php +++ b/database/seeds/Settings.php @@ -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', diff --git a/resources/lang/en-GB/settings.php b/resources/lang/en-GB/settings.php index 4ba42cacb..3b7409ced 100644 --- a/resources/lang/en-GB/settings.php +++ b/resources/lang/en-GB/settings.php @@ -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' => [ diff --git a/resources/views/common/dashboard/index.blade.php b/resources/views/common/dashboard/index.blade.php index 920f67a19..384c53ad1 100644 --- a/resources/views/common/dashboard/index.blade.php +++ b/resources/views/common/dashboard/index.blade.php @@ -252,8 +252,8 @@ @push('scripts') -@endpush \ No newline at end of file +@endpush diff --git a/resources/views/settings/settings/edit.blade.php b/resources/views/settings/settings/edit.blade.php index db20f3eee..6f84b4e0a 100644 --- a/resources/views/settings/settings/edit.blade.php +++ b/resources/views/settings/settings/edit.blade.php @@ -45,6 +45,8 @@