feat: sort pickups by their times

This commit is contained in:
Björn Fromme
2025-11-17 09:50:00 +01:00
parent 66eb392151
commit d0d1edb3ae
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 public function patchPickupsDetails(Travel $travel): void
{ {
foreach ($travel->pickupsTo as $pickupId => $pickup) { $travel->pickupsTo = $this->patchAndSortPickups($travel->pickupsTo);
$travel->pickupsFro = $this->patchAndSortPickups($travel->pickupsFro);
}
private function patchAndSortPickups(array $pickups): array
{
foreach ($pickups as $pickupId => $pickup) {
$pickupData = $this->loadById($pickupId); $pickupData = $this->loadById($pickupId);
$pickup->code = $pickupData->code; $pickup->code = $pickupData->code;
@@ -69,13 +75,24 @@ class PickupLoader extends AbstractLoader
$pickup->city = $pickupData->city; $pickup->city = $pickupData->city;
$pickup->street = $pickupData->street; $pickup->street = $pickupData->street;
} }
foreach ($travel->pickupsFro as $pickupId => $pickup) {
$pickupData = $this->loadById($pickupId);
$pickup->code = $pickupData->code; uasort($pickups, fn (Pickup $a, Pickup $b): int => $this->comparePickupsByTime($a, $b));
$pickup->postalCode = $pickupData->postalCode;
$pickup->city = $pickupData->city; return $pickups;
$pickup->street = $pickupData->street; }
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
@@ -133,13 +133,14 @@ class TravelLoader extends AbstractLoader
$hotelNode = $this->getHotelNode($node, $hotelId); $hotelNode = $this->getHotelNode($node, $hotelId);
$dateFrom = $this->stringToDate($node->attr('termin')); $dateFrom = $this->stringToDate($node->attr('termin'));
$dateTo = $this->stringToDate($node->attr('bis'));
$travel = new Travel(); $travel = new Travel();
$travel->id = (int) $node->attr('idbuspro'); $travel->id = (int) $node->attr('idbuspro');
$travel->hotelId = (int) $hotelNode->attr('idbuspro'); $travel->hotelId = (int) $hotelNode->attr('idbuspro');
$travel->label = $this->getStringOrNullValue($node->filterXPath('//text')); $travel->label = $this->getStringOrNullValue($node->filterXPath('//text'));
$travel->dateFrom = $dateFrom; $travel->dateFrom = $dateFrom;
$travel->dateTo = $this->stringToDate($node->attr('bis')); $travel->dateTo = $dateTo;
$travel->code = $node->attr('code'); $travel->code = $node->attr('code');
$travel->type = $node->attr('reiseart'); $travel->type = $node->attr('reiseart');
$travel->priceFrom = $this->stringToFloat($this->getStringOrNullValue($node->filterXPath('//abpreis'))); $travel->priceFrom = $this->stringToFloat($this->getStringOrNullValue($node->filterXPath('//abpreis')));
@@ -150,7 +151,7 @@ class TravelLoader extends AbstractLoader
->getTransportationServices($node->filterXPath('//lei_befoerderung/leistung')); ->getTransportationServices($node->filterXPath('//lei_befoerderung/leistung'));
$travel->rooms = $this->getRooms($hotelNode); $travel->rooms = $this->getRooms($hotelNode);
$travel->pickupsTo = $this->getPickups($node->filterXPath('//zustiege/zustieg'), $dateFrom); $travel->pickupsTo = $this->getPickups($node->filterXPath('//zustiege/zustieg'), $dateFrom);
$travel->pickupsFro = $this->getPickups($node->filterXPath('//zustiege_rueck/zustieg_rueck')); $travel->pickupsFro = $this->getPickups($node->filterXPath('//zustiege_rueck/zustieg_rueck'), $dateTo);
$travel->guide = $this->getGuide($node); $travel->guide = $this->getGuide($node);
return $travel; return $travel;