diff --git a/app/Http/Controllers/ReportsController.php b/app/Http/Controllers/ReportsController.php index ddb5601..aac09a1 100644 --- a/app/Http/Controllers/ReportsController.php +++ b/app/Http/Controllers/ReportsController.php @@ -186,6 +186,78 @@ class ReportsController extends Controller abort(404); } } + + public function printScopes($type, $year) + { + if ($type == 'compact') { + $yearFilter = function($query) use ($year) { + $query->whereHas('booking', function($query) use ($year) { + $query->whereYear('date', $year); + }); + }; + + $scopes = Scope::select('id', 'name') + ->with([ + 'accountClasses:id,io_type_id,scope_id,name', + 'accountClasses.ioType:id,factor', + 'accountClasses.accountTypes' => function($query) use ($year, $yearFilter) { + return $query->select('id', 'account_class_id', 'name', 'number') + ->whereHas('subBookings', $yearFilter) + ->with(['subBookings' => $yearFilter]); + } + ])->get(); + + foreach ($scopes as $scope) { + foreach ($scope->accountClasses as $accountClass) { + $accountClass->amount = + $accountClass->accountTypes->sum(function ($accountType) { + return $accountType->subBookings->sum('amount'); + }); + } + + $scope->balance = $scope->accountClasses->sum(function ($accountClass) { + return $accountClass->amount * $accountClass->ioType->factor; + }); + } + + $startBalance = SubBooking::balanceAt(lastDayOfYear($year - 1)); + $endBalance = $startBalance + $scopes->sum('balance'); + + return view('reports.scopes.compact_print', compact('scopes', 'year', + 'startBalance', 'endBalance')); + } elseif ($type == 'detailed') { + $yearFilter = function($query) use ($year) { + $query->whereHas('booking', function($query) use ($year) { + $query->whereYear('date', $year); + }); + }; + + $scopes = Scope::select('id', 'name') + ->with([ + 'accountClasses:id,io_type_id,scope_id,name', + 'accountClasses.ioType:id,factor', + 'accountClasses.accountTypes' => function($query) use ($year, $yearFilter) { + return $query->select('id', 'account_class_id', 'name', 'number') + ->whereHas('subBookings', $yearFilter) + ->with(['subBookings' => $yearFilter, + 'subBookings.booking:id,person_or_company,date']); + } + ])->get(); + + foreach ($scopes as $scope) { + foreach ($scope->accountClasses as $accountClass) { + $accountClass->amount = + $accountClass->accountTypes->sum(function ($accountType) { + return $accountType->subBookings->sum('amount'); + }); + } + } + + return view('reports.scopes.detailed_print', compact('scopes', 'year')); + } else { + abort(404); + } + } /** * Display a list of all open targets. diff --git a/resources/views/layout/master.blade.php b/resources/views/layout/master.blade.php index 2f70ec6..7af4375 100644 --- a/resources/views/layout/master.blade.php +++ b/resources/views/layout/master.blade.php @@ -68,7 +68,5 @@ $('[data-toggle="tooltip"]').tooltip() }); - - diff --git a/resources/views/layout/print.blade.php b/resources/views/layout/print.blade.php new file mode 100644 index 0000000..13ba7fc --- /dev/null +++ b/resources/views/layout/print.blade.php @@ -0,0 +1,19 @@ + + + Pollux - @yield('title') + + + + + + + @yield('content') + + diff --git a/resources/views/reports/scopes/compact_print.blade.php b/resources/views/reports/scopes/compact_print.blade.php new file mode 100644 index 0000000..d6f7cb5 --- /dev/null +++ b/resources/views/reports/scopes/compact_print.blade.php @@ -0,0 +1,88 @@ +@extends('layout.print') + +@section('title', 'Abrechnung ' . $year) + +@section('content') + + + + + + + @foreach($scopes as $scope) + + + + @foreach($scope->accountClasses as $accountClass) + + + + @foreach($accountClass->accountTypes as $accountType) + + + + + @endforeach + + @endforeach + + + + @foreach($scope->accountClasses as $accountClass) + + + + + @endforeach + + + + + + @endforeach + + + + @foreach($scopes as $scope) + + + + + @endforeach + + + + + + + + + +
+ Kontostand am 1. 1. {{ $year }} + + {!! formatAmount($startBalance) !!} +
{{ $scope->name }}
+ {{ $accountClass->name }} +
+ {{$accountType->number}} - {{$accountType->name}} + + {!! formatAmount($accountType->subBookings->sum('amount')) !!} +
+ GESAMT +
+ {{ $accountClass->name }} + + {!! formatAmount($accountClass->amount) !!} +
+ Saldo {{ $scope->name }} + {!! formatAmount($scope->balance) !!}
+ Übersicht +
+ Saldo {{ $scope->name }} + {!! formatAmount($scope->balance) !!}
Gesamtsaldo{!! formatAmount($scopes->sum('balance')) !!}
+ Kontostand am 31. 12. {{ $year }} + + {!! formatAmount($endBalance) !!} +
+@endsection diff --git a/resources/views/reports/scopes/detailed_print.blade.php b/resources/views/reports/scopes/detailed_print.blade.php new file mode 100644 index 0000000..c777b99 --- /dev/null +++ b/resources/views/reports/scopes/detailed_print.blade.php @@ -0,0 +1,43 @@ +@extends('layout.print') + +@section('title', 'Buchungen nach Konten ' . $year) + +@section('content') + @foreach($scopes as $scope) + @foreach($scope->accountClasses as $accountClass) +
{{ $scope->name }}
+ {{ $accountClass->name }} + + + + + + + + + + @foreach($accountClass->accountTypes as $accountType) + + + + @foreach($accountType->subBookings as $subBooking) + + + + + + + @endforeach + + + + @endforeach +
DatumPositionPerson / FirmaBetrag
+ {{ $accountType->number . ' - ' . $accountType->name }} +
{{ formatDate($subBooking->date()) }}{{ $subBooking->reference }}{{ $subBooking->personOrCompany() }}{!! formatAmount($subBooking->amount) !!}
+ {!! formatAmount($accountType->subBookings + ->sum('amount')) !!} +
+ @endforeach + @endforeach +@endsection diff --git a/routes/web.php b/routes/web.php index 6055736..2ec9b6c 100644 --- a/routes/web.php +++ b/routes/web.php @@ -74,6 +74,7 @@ Route::middleware(['auth'])->group(function() { Route::get('/reports/projects/{project}', 'ReportsController@project'); Route::get('/reports/balances/{year}', 'ReportsController@balances'); Route::get('/reports/scopes/{type}/{year}', 'ReportsController@scopes'); + Route::get('/reports/scopes/{type}/{year}/print', 'ReportsController@printScopes'); Route::get('/reports/targets/', 'ReportsController@targets'); });