98 lines
3.7 KiB
PHP
98 lines
3.7 KiB
PHP
<?php
|
|
|
|
namespace App\Repositories;
|
|
|
|
use App\Enumerations\EatingHabit;
|
|
use App\Models\Event;
|
|
use Illuminate\Http\Request;
|
|
|
|
class EventParticipantRepository {
|
|
public function getForList(Event $event, Request $request) : array {
|
|
$participants = [];
|
|
foreach ($event->participants()->orderBy('lastname')->orderBy('firstname')->get() as $participant) {
|
|
$participants[] = $participant->toResource()->toArray($request);
|
|
};
|
|
|
|
return $participants;
|
|
}
|
|
|
|
public function getParticipantsWithIntolerances(Event $event, Request $request) : array {
|
|
$participants = [];
|
|
foreach ($event->participants()->whereNotNull('intolerances')->whereNot('intolerances' , '=', '')->get() as $participant) {
|
|
$participants[] = $participant->toResource()->toArray($request);
|
|
};
|
|
|
|
return $participants;
|
|
}
|
|
|
|
public function getKitchenOverview(Event $event) : array {
|
|
$data = [];
|
|
$participants = $event->participants()->get();
|
|
|
|
|
|
for ($cur_date = $event->start_date; $cur_date <= $event->end_date; $cur_date->modify('+1 day')) {
|
|
$dateKey = $cur_date->format('d.m.Y');
|
|
|
|
$data[$dateKey] = [
|
|
'1' => [],
|
|
'2' => [],
|
|
'3' => [],
|
|
];
|
|
|
|
foreach (EatingHabit::all() as $eatingHabit) {
|
|
$data[$dateKey]['1'][$eatingHabit->slug] = 0;
|
|
$data[$dateKey]['2'][$eatingHabit->slug] = 0;
|
|
$data[$dateKey]['3'][$eatingHabit->slug] = 0;
|
|
}
|
|
|
|
foreach ($participants as $participant) {
|
|
$eatingHabitSlug = $participant->eating_habit;
|
|
if ($eatingHabitSlug === null) {
|
|
continue;
|
|
}
|
|
|
|
$anreise = $participant->arrival_date;
|
|
$abreise = $participant->departure_date;
|
|
|
|
if ($anreise->getTimestamp() === $cur_date->getTimestamp()) {
|
|
switch ((int)$participant->arrival_eating) {
|
|
case 1:
|
|
$data[$dateKey]['3'][$eatingHabitSlug]++;
|
|
break;
|
|
case 2:
|
|
$data[$dateKey]['2'][$eatingHabitSlug]++;
|
|
$data[$dateKey]['3'][$eatingHabitSlug]++;
|
|
break;
|
|
case 3:
|
|
$data[$dateKey]['1'][$eatingHabitSlug]++;
|
|
$data[$dateKey]['2'][$eatingHabitSlug]++;
|
|
$data[$dateKey]['3'][$eatingHabitSlug]++;
|
|
break;
|
|
}
|
|
} elseif ($abreise->getTimestamp() === $cur_date->getTimestamp()) {
|
|
switch ((int)$participant->departure_eating) {
|
|
case 1:
|
|
$data[$dateKey]['1'][$eatingHabitSlug]++;
|
|
break;
|
|
case 2:
|
|
$data[$dateKey]['1'][$eatingHabitSlug]++;
|
|
$data[$dateKey]['2'][$eatingHabitSlug]++;
|
|
break;
|
|
case 3:
|
|
$data[$dateKey]['1'][$eatingHabitSlug]++;
|
|
$data[$dateKey]['2'][$eatingHabitSlug]++;
|
|
$data[$dateKey]['3'][$eatingHabitSlug]++;
|
|
break;
|
|
}
|
|
} else {
|
|
$data[$dateKey]['1'][$eatingHabitSlug]++;
|
|
$data[$dateKey]['2'][$eatingHabitSlug]++;
|
|
$data[$dateKey]['3'][$eatingHabitSlug]++;
|
|
}
|
|
}
|
|
}
|
|
|
|
return $data;
|
|
}
|
|
}
|