feat: sort pickups by their times

This commit is contained in:
Björn Fromme
2026-03-16 11:59:11 +01:00
parent ba7de8fa01
commit fc05350ae4
2 changed files with 27 additions and 9 deletions
+24 -7
View File
@@ -61,7 +61,13 @@ class PickupLoader extends AbstractLoader
public function patchPickupsDetails(Travel $travel): void
{
foreach ($travel->pickupsOutbound as $pickupId => $pickup) {
$travel->pickupsOutbound = $this->patchAndSortPickups($travel->pickupsOutbound);
$travel->pickupsInbound = $this->patchAndSortPickups($travel->pickupsInbound);
}
private function patchAndSortPickups(array $pickups): array
{
foreach ($pickups as $pickupId => $pickup) {
$pickupData = $this->loadById($pickupId);
$pickup->code = $pickupData->code;
@@ -69,13 +75,24 @@ class PickupLoader extends AbstractLoader
$pickup->city = $pickupData->city;
$pickup->street = $pickupData->street;
}
foreach ($travel->pickupsInbound as $pickupId => $pickup) {
$pickupData = $this->loadById($pickupId);
$pickup->code = $pickupData->code;
$pickup->postalCode = $pickupData->postalCode;
$pickup->city = $pickupData->city;
$pickup->street = $pickupData->street;
uasort($pickups, fn (Pickup $a, Pickup $b): int => $this->comparePickupsByTime($a, $b));
return $pickups;
}
private function comparePickupsByTime(Pickup $a, Pickup $b): int
{
if (null === $a->time && null === $b->time) {
return 0;
}
if (null === $a->time) {
return -1;
}
if (null === $b->time) {
return 1;
}
return $a->time <=> $b->time;
}
}
+3 -2
View File
@@ -45,13 +45,14 @@ class TravelParser extends AbstractParser
$hotelNode = $this->getHotelNode($node, $hotelId);
$dateFrom = $this->stringToDate($node->attr('termin'));
$dateTo = $this->stringToDate($node->attr('bis'));
$travel = new Travel();
$travel->id = (int) $node->attr('idbuspro');
$travel->hotelId = (int) $hotelNode->attr('idbuspro');
$travel->label = $this->getStringOrNullValue($node->filterXPath('//text'));
$travel->dateFrom = $dateFrom;
$travel->dateTo = $this->stringToDate($node->attr('bis'));
$travel->dateTo = $dateTo;
$travel->code = $node->attr('code');
$travel->type = $node->attr('reiseart');
$travel->status = $this->getStringOrNullValue($node->filterXPath('//status_hin'));
@@ -63,7 +64,7 @@ class TravelParser extends AbstractParser
->getTransportationServices($node->filterXPath('//lei_befoerderung/leistung'));
$travel->rooms = $this->getRooms($hotelNode);
$travel->pickupsOutbound = $this->getPickups($node->filterXPath('//zustiege/zustieg'), $dateFrom);
$travel->pickupsInbound = $this->getPickups($node->filterXPath('//zustiege_rueck/zustieg_rueck'));
$travel->pickupsInbound = $this->getPickups($node->filterXPath('//zustiege_rueck/zustieg_rueck'), $dateTo);
$travel->guide = $this->getGuide($node);
return $travel;