- Fix: Notifiable-Trait zum User-Model hinzugefuegt (behebt notify()-500er) - Installer: SMTP-Verbindungstest mit EsmtpTransport + Ueberspringen-Link - Admin: Neuer E-Mail-Tab mit SMTP-Konfiguration + Verbindungstest - Admin: Lazy Quill-Initialisierung (nur sichtbare Locale wird geladen) - Uebersetzungen: 17 neue Mail-Keys in allen 6 Sprachen Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
79 lines
3.7 KiB
PHP
Executable File
79 lines
3.7 KiB
PHP
Executable File
@props(['event'])
|
|
|
|
@php
|
|
use App\Enums\ParticipantStatus;
|
|
use App\Enums\CateringStatus;
|
|
use App\Enums\EventType;
|
|
|
|
$isMeeting = $event->type === EventType::Meeting;
|
|
$yesCount = $event->participants->where('status', ParticipantStatus::Yes)->count();
|
|
$noCount = $event->participants->where('status', ParticipantStatus::No)->count();
|
|
$openCount = $event->participants->where('status', ParticipantStatus::Unknown)->count();
|
|
|
|
// withCount-Attribute nutzen wenn vorhanden (Index-Views), sonst Collection filtern (Show-View)
|
|
$hasCatering = $event->type->hasCatering();
|
|
$hasTimekeepers = $event->type->hasTimekeepers();
|
|
$cateringYes = $hasCatering ? ($event->caterings_yes_count ?? $event->caterings->where('status', CateringStatus::Yes)->count()) : 0;
|
|
$timekeeperYes = $hasTimekeepers ? ($event->timekeepers_yes_count ?? $event->timekeepers->where('status', CateringStatus::Yes)->count()) : 0;
|
|
|
|
// Individual minimum status
|
|
if ($event->min_players !== null) {
|
|
$playersMet = $yesCount >= $event->min_players;
|
|
} else {
|
|
$playersMet = null;
|
|
}
|
|
|
|
$cateringMet = ($hasCatering && $event->min_catering !== null) ? $cateringYes >= $event->min_catering : null;
|
|
$timekeepersMet = ($hasTimekeepers && $event->min_timekeepers !== null) ? $timekeeperYes >= $event->min_timekeepers : null;
|
|
|
|
// Box size classes
|
|
$boxClass = 'inline-flex items-center justify-center w-9 h-9 rounded text-sm font-bold';
|
|
$participantsLabel = $isMeeting ? __('admin.nav_users') : __('admin.nav_players');
|
|
@endphp
|
|
|
|
<div class="flex items-start gap-4 sm:gap-6">
|
|
{{-- Spieler / Benutzer --}}
|
|
<div class="text-center">
|
|
<div class="text-[10px] font-semibold text-gray-500 uppercase tracking-wide mb-1">{{ $participantsLabel }}</div>
|
|
<div class="flex gap-0.5">
|
|
@if ($playersMet === true)
|
|
<span class="{{ $boxClass }} bg-green-500 text-white">{{ $yesCount }}</span>
|
|
<span class="{{ $boxClass }} bg-green-500 text-white">{{ $noCount }}</span>
|
|
<span class="{{ $boxClass }} bg-green-500 text-white">{{ $openCount }}</span>
|
|
@else
|
|
<span class="{{ $boxClass }} bg-green-500 text-white">{{ $yesCount }}</span>
|
|
<span class="{{ $boxClass }} bg-red-500 text-white">{{ $noCount }}</span>
|
|
<span class="{{ $boxClass }} bg-gray-300 text-gray-700">{{ $openCount }}</span>
|
|
@endif
|
|
</div>
|
|
</div>
|
|
|
|
@if ($hasCatering)
|
|
{{-- Catering --}}
|
|
<div class="text-center">
|
|
<div class="text-[10px] font-semibold text-gray-500 uppercase tracking-wide mb-1">{{ __('events.catering_short') }}</div>
|
|
@if ($cateringMet === true)
|
|
<span class="{{ $boxClass }} bg-green-500 text-white">{{ $cateringYes }}</span>
|
|
@elseif ($cateringMet === false)
|
|
<span class="{{ $boxClass }} bg-red-500 text-white">{{ $cateringYes }}</span>
|
|
@else
|
|
<span class="{{ $boxClass }} bg-gray-200 text-gray-600">{{ $cateringYes }}</span>
|
|
@endif
|
|
</div>
|
|
@endif
|
|
|
|
@if ($hasTimekeepers)
|
|
{{-- Zeitnehmer --}}
|
|
<div class="text-center">
|
|
<div class="text-[10px] font-semibold text-gray-500 uppercase tracking-wide mb-1">{{ __('events.timekeeper_short') }}</div>
|
|
@if ($timekeepersMet === true)
|
|
<span class="{{ $boxClass }} bg-green-500 text-white">{{ $timekeeperYes }}</span>
|
|
@elseif ($timekeepersMet === false)
|
|
<span class="{{ $boxClass }} bg-red-500 text-white">{{ $timekeeperYes }}</span>
|
|
@else
|
|
<span class="{{ $boxClass }} bg-gray-200 text-gray-600">{{ $timekeeperYes }}</span>
|
|
@endif
|
|
</div>
|
|
@endif
|
|
</div>
|