fix: filter rentals by skipass duration

This commit is contained in:
Björn Fromme
2026-03-16 11:59:10 +01:00
parent 08d534e39b
commit 201b223813
@@ -75,9 +75,12 @@ class ParticipantRentalsFieldHandler extends AbstractParticipantFieldHandler
$selectedRentals = $this->getFieldValue($submittedData, $this->getFieldName()) ?? [];
$availableRentals = $bookingDto->travel->getAdditionalServicesBySubTypes(Constants::TOKEN_RENTALS, true, true);
// Filter rentals by skipass duration to ensure only matching rentals are available
$durationFilteredRentals = $this->filterRentalsBySkiPassDuration($availableRentals, $participant);
$validSelections = $this->filterValidServiceSelections(
$selectedRentals,
$availableRentals,
$durationFilteredRentals,
$bookingDto,
$participantIndex
);
@@ -157,4 +160,37 @@ class ParticipantRentalsFieldHandler extends AbstractParticipantFieldHandler
return false;
}
/**
* Filters rentals to only include those matching the skipass duration.
*
* Rentals must have exact date matching with the selected skipass:
* - rental.dateFrom === skipass.dateFrom
* - rental.dateTo === skipass.dateTo
*
* @param array $rentals All available rental services
* @param \App\Form\Model\ParticipantDto $participant The participant with skipass selection
*
* @return array Filtered rentals matching the skipass duration
*/
private function filterRentalsBySkiPassDuration(array $rentals, $participant): array
{
$selectedSkiPass = $participant->skiPass;
// If skipass has no valid dates, return empty rentals
if (null === $selectedSkiPass->dateFrom || null === $selectedSkiPass->dateTo) {
return [];
}
return array_filter($rentals, function (Service $rental) use ($selectedSkiPass) {
// Rental must have valid dates to be considered
if (null === $rental->dateFrom || null === $rental->dateTo) {
return false;
}
// Exact date matching: rental dates must match skipass dates exactly
return $rental->dateFrom == $selectedSkiPass->dateFrom
&& $rental->dateTo == $selectedSkiPass->dateTo;
});
}
}