*/ public function collect(Teamer $teamer): array { $rows = []; // season assignments first: the sort is stable, so on the same start day the season, // which frames the dispositions inside it, comes before them foreach ($this->seasonAssignmentRepository->findUpcomingByTeamer($teamer) as $seasonAssignment) { $rows[] = [ 'dateFrom' => $seasonAssignment->getDateFrom(), 'dateTo' => $seasonAssignment->getDateTo(), 'disposition' => null, 'seasonAssignment' => $seasonAssignment, ]; } foreach ($this->dispositionRepository->findAllUpcomingByTeamer($teamer) as $disposition) { $destination = $disposition->getAssignment()?->getDestination(); $rows[] = [ 'dateFrom' => $destination?->getDateFrom(), 'dateTo' => $destination?->getDateTo(), 'disposition' => $disposition, 'seasonAssignment' => null, ]; } usort($rows, static fn (array $a, array $b): int => $a['dateFrom'] <=> $b['dateFrom']); return $rows; } }