feat: extended insurance parsing, pass info urls to view
This commit is contained in:
@@ -607,6 +607,10 @@ class TravelDataService
|
||||
try {
|
||||
$insurances = $this->insuranceLoader->loadAll();
|
||||
$travel->insurances = array_values($insurances);
|
||||
|
||||
// Hydrate package relationships after loading
|
||||
// Packages lose their containedInsurances during serialization, so rebuild them
|
||||
$this->hydrateInsurancePackageRelationships($travel->insurances);
|
||||
} catch (\Exception $e) {
|
||||
$this->logger->warning('Failed to load insurance data', [
|
||||
'travelId' => $travel->id,
|
||||
@@ -614,4 +618,36 @@ class TravelDataService
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Reconstructs containedInsurances arrays for insurance packages.
|
||||
*
|
||||
* Insurance packages reference other insurances via containedInsuranceIds.
|
||||
* After deserialization, the containedInsurances array is empty due to
|
||||
* circular reference prevention. This method rebuilds those relationships.
|
||||
*
|
||||
* @param array<Insurance> $insurances All insurances including packages
|
||||
*/
|
||||
private function hydrateInsurancePackageRelationships(array $insurances): void
|
||||
{
|
||||
// Build lookup map of all insurances by ID (includes complementary insurances)
|
||||
$insuranceById = [];
|
||||
foreach ($insurances as $insurance) {
|
||||
$insuranceById[$insurance->id] = $insurance;
|
||||
}
|
||||
|
||||
// Reconstruct containedInsurances for each package
|
||||
foreach ($insurances as $insurance) {
|
||||
if (!$insurance->package || empty($insurance->containedInsuranceIds)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$insurance->containedInsurances = [];
|
||||
foreach ($insurance->containedInsuranceIds as $containedId) {
|
||||
if (isset($insuranceById[$containedId])) {
|
||||
$insurance->containedInsurances[] = $insuranceById[$containedId];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user