82 lines
2.3 KiB
PHP
82 lines
2.3 KiB
PHP
<?php
|
|
|
|
namespace Modules\Member;
|
|
|
|
use Modules\Dashboard\Block;
|
|
use App\Member\Membership;
|
|
use Illuminate\Database\Eloquent\Builder;
|
|
|
|
class AgeGroupCountBlock extends Block
|
|
{
|
|
|
|
public $groups;
|
|
|
|
/**
|
|
* @return Builder<Membership>
|
|
*/
|
|
protected function memberQuery(): Builder
|
|
{
|
|
return Membership::select('subactivities.slug', 'subactivities.name')
|
|
->selectRaw('COUNT(member_id) AS count')
|
|
->join('activities', 'memberships.activity_id', 'activities.id')
|
|
->join('subactivities', 'memberships.subactivity_id', 'subactivities.id')
|
|
->isAgeGroup()
|
|
->isMember()
|
|
->active()
|
|
->groupBy('subactivities.slug', 'subactivities.name')
|
|
->orderBy('subactivity_id');
|
|
}
|
|
|
|
/**
|
|
* @return Builder<Membership>
|
|
*/
|
|
protected function leaderQuery(): Builder
|
|
{
|
|
return Membership::selectRaw('"leiter" AS slug, "Leiter" AS name, COUNT(member_id) AS count')
|
|
->join('activities', 'memberships.activity_id', 'activities.id')
|
|
->join('subactivities', 'memberships.subactivity_id', 'subactivities.id')
|
|
->active()
|
|
->isLeader();
|
|
}
|
|
|
|
public function mount(): void
|
|
{
|
|
$this->groups = [
|
|
...$this->memberQuery()->get(),
|
|
...$this->leaderQuery()->get(),
|
|
];
|
|
}
|
|
|
|
public function title(): string
|
|
{
|
|
return 'Gruppierungs-Verteilung';
|
|
}
|
|
|
|
public function groupColor(string $slug): string
|
|
{
|
|
return data_get([
|
|
'biber' => 'text-biber',
|
|
'woelfling' => 'text-woelfling',
|
|
'jungpfadfinder' => 'text-jungpfadfinder',
|
|
'pfadfinder' => 'text-pfadfinder',
|
|
'rover' => 'text-rover',
|
|
'leiter' => 'text-leiter',
|
|
], $slug);
|
|
}
|
|
|
|
public function render(): string
|
|
{
|
|
return <<<'HTML'
|
|
<div>
|
|
@foreach($groups as $group)
|
|
<div class="flex mt-2 items-center leading-none text-gray-100">
|
|
<x-ui::sprite class="w-4 h-4 mr-2 {{ $this->groupColor($group->slug) }}" src="lilie"></x-ui::sprite>
|
|
<span class="grow">{{$group->name}}</span>
|
|
<span>{{$group->count}}</span>
|
|
</div>
|
|
@endforeach
|
|
</div>
|
|
HTML;
|
|
}
|
|
}
|