feat: sort pickups by their times
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user