feat: persist travel snapshots and refresh extended availability

This commit is contained in:
Björn Fromme committed 2026-03-23 17:29:10 +01:00
1 parent c1ab6d8687
commit bc7fb794bf
31 files changed
+2328 -91

No files matched your search

+36
View File
@@ -36,14 +36,50 @@ class Booking
public ?string $paymentType = null;
public ?string $paymentLabel = null;
public ?BankAccount $bankAccount = null;
/**
* @var array<int, string>
*/
public array $participantsStatus = [];
/**
* @var array<int, PersonalData>
*/
public array $participants = [];
/**
* @var array<int, Service>
*/
public array $transportationServices = [];
/**
* @var array<int, Service>
*/
public array $additionalServices = [];
/**
* @var array<int, Room>
*/
public array $rooms = [];
/**
* @var array<int, Pickup>
*/
public array $pickups = [];
/**
* @var array<int, Pickup>
*/
public array $dropOffs = [];
/**
* @var array<int, Surcharge>
*/
public array $surcharges = [];
/**
* @var array<string|int, Insurance>
*/
public array $insurances = [];
public ?int $invoiceNumber = null;
public ?float $totalPrice = null;
+15
View File
@@ -12,8 +12,23 @@ namespace App\BusProNet\Model;
*/
class CrmAttributes
{
/**
* @var array<int, CrmSelectionGroup>|null
*/
public ?array $selectionGroups = null;
/**
* @var array<int, CrmAction>|null
*/
public ?array $crmActions = null;
/**
* @var array<int, string>
*/
public array $hotelCodes = [];
/**
* @var array<int, string>
*/
public array $roles = [];
}
@@ -38,6 +38,9 @@ class CrmSelectionGroup
#[Groups(['api:single'])]
public ?string $label = null;
/**
* @var array<int, CrmSelection>|null
*/
#[Groups(['api:single'])]
public ?array $selections = null;
@@ -0,0 +1,26 @@
<?php
declare(strict_types=1);
namespace App\BusProNet\Model;
/**
* Extended availability details for one service from VERFUEGBARKEIT2.
*
* This model augments classic availability with optional timing/date/description
* fields used to enrich persisted travel snapshots.
*/
class ExtendedAvailability
{
public ?int $serviceId = null;
public ?string $status = null;
public ?int $available = null;
public ?float $price = null;
public ?\DateTimeImmutable $dateFrom = null;
public ?\DateTimeImmutable $dateTo = null;
public ?string $timeFrom = null;
public ?string $description = null;
public ?int $ageFrom = null;
public ?int $ageTo = null;
public ?bool $mandatory = null;
}
@@ -0,0 +1,30 @@
<?php
declare(strict_types=1);
namespace App\BusProNet\Model;
/**
* Response model for extended availability endpoint payloads.
*/
class ExtendedServiceAvailabilityResponse
{
/**
* @param array<int, ExtendedAvailability> $services
* @param array<string> $allowedBookingStatus
*/
public function __construct(
private readonly array $services,
public readonly array $allowedBookingStatus = [],
public readonly ?string $travelStatus = null,
) {
}
/**
* @return array<int, ExtendedAvailability>
*/
public function getServices(): array
{
return $this->services;
}
}
+22 -1
View File
@@ -29,6 +29,9 @@ class Travel
#[Groups(['api:list', 'api:single'])]
public ?string $productCode = null;
#[Groups(['api:list', 'api:single'])]
public ?int $productId = null;
#[Groups(['api:list', 'api:single'])]
public ?string $label = null;
@@ -68,30 +71,48 @@ class Travel
#[Groups(['api:list', 'api:single'])]
public ?float $priceFrom = null;
/**
* @var array<int, CrmSelectionGroup>
*/
#[Groups(['api:single'])]
public array $selectionGroups = [];
/**
* @var array<int, Service>
*/
#[Groups(['api:single'])]
public array $additionalServices = [];
#[Groups(['api:single'])]
public bool $additionalServicesMutable = true;
/**
* @var array<int, Service>
*/
#[Groups(['api:single'])]
public array $transportationServices = [];
#[Groups(['api:single'])]
public bool $transportationServicesMutable = true;
/**
* @var array<int, Pickup>
*/
#[Groups(['api:single'])]
public array $pickups = [];
/**
* @var array<int, Pickup>
*/
#[Groups(['api:single'])]
public array $dropOffs = [];
#[Groups(['api:single'])]
public bool $pickupsMutable = true;
/**
* @var array<int, Room>
*/
#[Groups(['api:single'])]
public array $rooms = [];
@@ -108,7 +129,7 @@ class Travel
public ?Guide $guide = null;
/**
* @var array<Insurance> Available insurances for this travel package
* @var array<string|int, Insurance> Available insurances for this travel package
*/
#[Groups(['api:single'])]
public array $insurances = [];