fix: enable bookings without ski passes
This commit is contained in:
@@ -102,8 +102,8 @@ class ParticipantDto
|
||||
/** @var list<int> */
|
||||
public array $autoBookOptOutRentalIds = [];
|
||||
|
||||
// Note: Ski pass validation is conditional - see ParticipantEditDto::validateSkiPassRequired()
|
||||
// Babies (0-2 years) are exempt from ski pass requirement
|
||||
// Note: Ski pass validation is conditional - see App\Validator\Constraints\SkiPassSelectionValidator.
|
||||
// Babies (0-2 years) and travels that offer no ski passes at all are exempt.
|
||||
public ?Service $skiPass = null;
|
||||
|
||||
/** @var list<Service> */
|
||||
|
||||
@@ -4,7 +4,6 @@ declare(strict_types=1);
|
||||
|
||||
namespace App\Form\Model;
|
||||
|
||||
use App\BusProNet\Constants;
|
||||
use App\Validator\Constraints as AppAssert;
|
||||
use Symfony\Component\Validator\Constraints as Assert;
|
||||
use Symfony\Component\Validator\Context\ExecutionContextInterface;
|
||||
@@ -21,6 +20,7 @@ use function Symfony\Component\String\u;
|
||||
#[AppAssert\PurchaseVoucher(groups: ['booking_create', 'booking_edit'])]
|
||||
#[AppAssert\PromoVoucher(groups: ['booking_create', 'booking_edit'])]
|
||||
#[AppAssert\MandatoryAdditionalServicesSelected(groups: ['booking_create', 'booking_edit'])]
|
||||
#[AppAssert\SkiPassSelection(groups: ['strict_required'])]
|
||||
class ParticipantEditDto
|
||||
{
|
||||
public function __construct(
|
||||
@@ -30,39 +30,6 @@ class ParticipantEditDto
|
||||
) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates that ski pass is selected when required.
|
||||
*
|
||||
* Ski pass is required for all participants in create mode, EXCEPT for babies
|
||||
* (participants aged 0-2 years at travel date). Babies don't qualify for any
|
||||
* ski pass and the field is hidden for them.
|
||||
*
|
||||
* In edit submissions, this validation is skipped as the ski pass is readonly.
|
||||
*
|
||||
* This validation only runs when strict_required group is active.
|
||||
*/
|
||||
#[Assert\Callback(groups: ['strict_required'])]
|
||||
public function validateSkiPassRequired(ExecutionContextInterface $context): void
|
||||
{
|
||||
// Skip validation in edit submissions - ski pass is readonly there.
|
||||
if (BookingDto::MODE_EDIT === $this->bookingContext->getMode()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Baby age exemption: skip validation for participants at or under BABY_MAX_AGE
|
||||
$age = $this->participant->getAge($this->bookingContext->travel->dateFrom);
|
||||
if (null !== $age && $age <= Constants::BABY_MAX_AGE) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Ski pass is required for non-baby participants
|
||||
if (null === $this->participant->skiPass) {
|
||||
$context->buildViolation('Bitte auswählen')
|
||||
->atPath('participant.skiPass')
|
||||
->addViolation();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates that insurance is selected when required.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user