diff --git a/app/AccountClass.php b/app/AccountClass.php index 0b1e366..ef2510d 100644 --- a/app/AccountClass.php +++ b/app/AccountClass.php @@ -25,4 +25,9 @@ class AccountClass extends Model { return $this->belongsTo('App\Scope'); } + + public function accountTypes() + { + return $this->hasMany('App\AccountType'); + } } diff --git a/app/AccountType.php b/app/AccountType.php index 74b38e2..aaa6d0d 100644 --- a/app/AccountType.php +++ b/app/AccountType.php @@ -20,6 +20,11 @@ class AccountType extends Model return $this->belongsTo('App\AccountClass'); } + public function subBookings() + { + return $this->hasMany('App\SubBooking'); + } + /************************************************************************** * INDIRECT RELATIONS * **************************************************************************/ diff --git a/app/Http/Controllers/ReportsController.php b/app/Http/Controllers/ReportsController.php index 9a19919..ce1b5f5 100644 --- a/app/Http/Controllers/ReportsController.php +++ b/app/Http/Controllers/ReportsController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers; use App\Project; use App\SubBooking; +use App\Scope; use Illuminate\Http\Request; @@ -116,7 +117,47 @@ class ReportsController extends Controller */ public function scopes($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', compact('scopes', 'year', + 'startBalance', 'endBalance')); + } elseif ($type == 'detailed') { + return view('reports.scopes.detailed'); + } else { + abort(404); + } } /** diff --git a/app/Scope.php b/app/Scope.php index 219c006..77f389f 100644 --- a/app/Scope.php +++ b/app/Scope.php @@ -6,5 +6,7 @@ use Illuminate\Database\Eloquent\Model; class Scope extends Model { - // + public function accountClasses() { + return $this->hasMany('App\AccountClass'); + } } diff --git a/resources/views/bookings/index.blade.php b/resources/views/bookings/index.blade.php index 80e73cd..27952c0 100644 --- a/resources/views/bookings/index.blade.php +++ b/resources/views/bookings/index.blade.php @@ -6,6 +6,8 @@ @endsection diff --git a/resources/views/reports/scopes/compact.blade.php b/resources/views/reports/scopes/compact.blade.php new file mode 100644 index 0000000..a91e496 --- /dev/null +++ b/resources/views/reports/scopes/compact.blade.php @@ -0,0 +1,95 @@ +@extends('layout.master') + +@section('title', 'Abrechnung ' . $year) + +@section('subnav') + + Zurück + +@endsection + +@section('content') +

@yield('title')

+ + + + + + + @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.blade.php b/resources/views/reports/scopes/detailed.blade.php new file mode 100644 index 0000000..e69de29