Files
WebAPP/resources/views/components/event-status-boxes.blade.php
Rhino 2e24a40d68 Stand: SMTP-Test, Admin-Mail-Tab, Notifiable-Fix, Lazy-Quill
- 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>
2026-03-02 07:30:37 +01:00

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>