'Y-m-d'])] public ?\DateTimeImmutable $travelDateFrom = null; #[Groups(['api:single', 'api:list'])] #[Context([DateTimeNormalizer::FORMAT_KEY => 'Y-m-d'])] public ?\DateTimeImmutable $travelDateTo = null; #[Groups(['api:single', 'api:list'])] #[Context([DateTimeNormalizer::FORMAT_KEY => 'Y-m-d'])] public ?\DateTimeImmutable $bookingDateFrom = null; #[Groups(['api:single', 'api:list'])] #[Context([DateTimeNormalizer::FORMAT_KEY => 'Y-m-d'])] public ?\DateTimeImmutable $bookingDateTo = null; #[Groups(['api:single', 'api:list'])] public ?int $ageFrom = null; #[Groups(['api:single', 'api:list'])] public ?int $ageTo = null; #[Groups(['api:single', 'api:list'])] public ?float $travelPriceFrom = null; #[Groups(['api:single', 'api:list'])] public ?float $travelPriceTo = null; #[Groups(['api:single', 'api:list'])] public ?int $travelDurationFrom = null; #[Groups(['api:single', 'api:list'])] public ?int $travelDurationTo = null; #[Groups(['api:single', 'api:list'])] public ?string $urlInfo = null; #[Groups(['api:single', 'api:list'])] public ?string $urlProductInfo = null; #[Groups(['api:single', 'api:list'])] public ?string $urlTerms = null; /** * @var array Insurance products contained in this package (only for packages) */ #[Groups(['api:single', 'api:list'])] public array $containedInsurances = []; /** * @var array IDs of insurance products contained in this package (only for packages) */ #[Groups(['api:single', 'api:list'])] public array $containedInsuranceIds = []; public function __toString(): string { return (string) $this->id; } /** * Returns the subType, with virtual 'PKG' subType for insurance packages. * * @return string|null The subType (RRV, PAK, OHN, PKG) or null */ public function getSubType(): ?string { if (true === $this->package) { return 'PKG'; // Virtual subType for all insurance packages } return $this->subType; } }