@php // Stato di visibilità delle sezioni passato dal componente Livewire $visibilityState = $visibilityState ?? []; $sectionVisibility = [ 'intestazione' => $visibilityState['showIntestazione'] ?? true, 'DatiCliente' => $visibilityState['showDatiCliente'] ?? true, 'StudioPeso' => $visibilityState['showStudioPeso'] ?? true, 'plicometria' => $visibilityState['showPlicometria'] ?? true, 'circonferenze' => $visibilityState['showCirconferenze'] ?? true, 'AnalisiBIA' => $visibilityState['showAnalisiBIA'] ?? true, 'bodyComp' => $visibilityState['showBodyComposition'] ?? true, 'LymphaDex' => $visibilityState['showLymphaDex'] ?? true, 'andamenti' => $visibilityState['showAndamenti'] ?? true, 'tabelle' => $visibilityState['showTabelle'] ?? true, 'note' => $visibilityState['showNote'] ?? true, ]; // Applichiamo lo stesso filtro di visibilità usato nell'anteprima if (is_array($components)) { $components = array_values(array_filter($components, function ($component) use ($sectionVisibility) { if (!is_array($component) || !isset($component['type'])) { return false; } $type = $component['type']; if (isset($sectionVisibility[$type])) { return $sectionVisibility[$type]; } return true; })); } // Prepariamo una lista di componenti da utilizzare $processedComponents = []; // Identifichiamo i componenti AnalisiBIA e BodyComp che devono stare insieme $biaPairs = []; // Flag per identificare se stiamo iniziando con AnalisiBIA $startWithAnalisiBIA = false; // Controllo di sicurezza: verifica che components sia un array valido if (is_array($components) && !empty($components)) { for ($i = 0; $i < count($components); $i++) { // Controllo di sicurezza per ogni componente if (!isset($components[$i]) || !is_array($components[$i])) { continue; } $component = $components[$i]; // Controllo che il componente abbia il tipo necessario if (!isset($component['type'])) { continue; } if ($component['type'] === 'AnalisiBIA') { // Cerchiamo il prossimo bodyComp for ($j = 0; $j < count($components); $j++) { if ($i != $j && isset($components[$j]) && is_array($components[$j]) && isset($components[$j]['type']) && $components[$j]['type'] === 'bodyComp') { // Trovato un bodyComp, lo associamo a questo AnalisiBIA $biaPairs[$i] = $j; break; } } } } } // Valutiamo se la prima AnalisiBIA deve davvero iniziare da una nuova pagina. // Se prima ci sono solo intestazione o pochi blocchi leggeri, la lasciamo risalire. $tipiPrimaDiAnalisiBia = []; $deveForzareSaltoPrimaDiAnalisiBia = false; if (is_array($components) && !empty($components)) { foreach ($components as $component) { if (!is_array($component) || !isset($component['type'])) { continue; } if ($component['type'] === 'AnalisiBIA') { break; } if (!isset($component['content']) || empty($component['content'])) { continue; } $tipiPrimaDiAnalisiBia[] = $component['type']; } $haStudioPesoPrimaDiAnalisiBia = in_array('StudioPeso', $tipiPrimaDiAnalisiBia, true); $haDatiClientePrimaDiAnalisiBia = in_array('DatiCliente', $tipiPrimaDiAnalisiBia, true); $haPlicometriaPrimaDiAnalisiBia = in_array('plicometria', $tipiPrimaDiAnalisiBia, true); $haCirconferenzePrimaDiAnalisiBia = in_array('circonferenze', $tipiPrimaDiAnalisiBia, true); $deveForzareSaltoPrimaDiAnalisiBia = $haStudioPesoPrimaDiAnalisiBia || $haDatiClientePrimaDiAnalisiBia || ($haPlicometriaPrimaDiAnalisiBia && $haCirconferenzePrimaDiAnalisiBia); } // Ora prepariamo i gruppi di componenti $groupedComponents = []; $currentGroup = []; $currentRowWidth = 0; $foundFirstAnalisiBIA = false; // Controllo di sicurezza: verifica che components sia un array valido if (is_array($components) && !empty($components)) { for ($i = 0; $i < count($components); $i++) { // Se questo indice è stato già processato, lo saltiamo if (in_array($i, $processedComponents)) { continue; } // Controllo di sicurezza per ogni componente if (!isset($components[$i]) || !is_array($components[$i])) { continue; } $component = $components[$i]; // Controllo che il componente abbia le proprietà necessarie if (!isset($component['type']) || !isset($component['colSize'])) { continue; } $componentWidth = $component['colSize']; // Verifichiamo se il componente ha contenuto valido $hasValidContent = false; if (isset($component['content']) && !empty($component['content'])) { $hasValidContent = true; } // Se incontriamo un AnalisiBIA e non è il primo componente, // chiudiamo il gruppo corrente anche se non è pieno per forzare un cambio pagina if ($component['type'] === 'AnalisiBIA' && !empty($groupedComponents) && !$foundFirstAnalisiBIA && $hasValidContent) { if (!empty($currentGroup)) { $groupedComponents[] = $currentGroup; $currentGroup = []; $currentRowWidth = 0; } $foundFirstAnalisiBIA = true; } // Caso speciale: se è un AnalisiBIA con un bodyComp associato if ($component['type'] === 'AnalisiBIA' && isset($biaPairs[$i])) { $bodyCompIndex = $biaPairs[$i]; $bodyComp = $components[$bodyCompIndex]; // Verifichiamo se entrambi i componenti hanno contenuto $biaHasContent = isset($component['content']) && !empty($component['content']); $bodyCompHasContent = isset($bodyComp['content']) && !empty($bodyComp['content']); // Solo se almeno uno dei due ha contenuto, li aggiungiamo if ($biaHasContent || $bodyCompHasContent) { $totalWidth = $componentWidth + $bodyComp['colSize']; // Se i due componenti non possono stare davvero nella stessa riga, // evitiamo di trattarli come un blocco unico: altrimenti Chrome // prova a spostare l'intero gruppo alla pagina successiva. if ($totalWidth > 12) { if ($biaHasContent) { if ($currentRowWidth + $componentWidth > 12 && !empty($currentGroup)) { $groupedComponents[] = $currentGroup; $currentGroup = []; $currentRowWidth = 0; } $currentGroup[] = $component; $currentRowWidth += $componentWidth; $processedComponents[] = $i; if ($currentRowWidth >= 12) { $groupedComponents[] = $currentGroup; $currentGroup = []; $currentRowWidth = 0; } } else { $processedComponents[] = $i; } if ($bodyCompHasContent) { if ($currentRowWidth + $bodyComp['colSize'] > 12 && !empty($currentGroup)) { $groupedComponents[] = $currentGroup; $currentGroup = []; $currentRowWidth = 0; } $currentGroup[] = $bodyComp; $currentRowWidth += $bodyComp['colSize']; $processedComponents[] = $bodyCompIndex; if ($currentRowWidth >= 12) { $groupedComponents[] = $currentGroup; $currentGroup = []; $currentRowWidth = 0; } } else { $processedComponents[] = $bodyCompIndex; } continue; } // Se l'aggiunta di entrambi supera la larghezza, creiamo un nuovo gruppo if ($currentRowWidth + $totalWidth > 12) { if (!empty($currentGroup)) { $groupedComponents[] = $currentGroup; $currentGroup = []; } $currentRowWidth = 0; } // Aggiungiamo AnalisiBIA solo se ha contenuto if ($biaHasContent) { $currentGroup[] = $component; $currentRowWidth += $componentWidth; } $processedComponents[] = $i; // Aggiungiamo bodyComp solo se ha contenuto if ($bodyCompHasContent) { $currentGroup[] = $bodyComp; $currentRowWidth += $bodyComp['colSize']; } $processedComponents[] = $bodyCompIndex; // Se abbiamo superato la larghezza massima, chiudiamo il gruppo if ($currentRowWidth >= 12) { $groupedComponents[] = $currentGroup; $currentGroup = []; $currentRowWidth = 0; } } else { // Se nessuno dei due ha contenuto, li marchiamo come processati ma non li aggiungiamo $processedComponents[] = $i; $processedComponents[] = $bodyCompIndex; } } // Caso normale else { // Solo se il componente ha contenuto valido, lo aggiungiamo if ($hasValidContent) { // Se l'aggiunta supera la larghezza, creiamo un nuovo gruppo if ($currentRowWidth + $componentWidth > 12) { if (!empty($currentGroup)) { $groupedComponents[] = $currentGroup; $currentGroup = []; } $currentRowWidth = 0; } // Aggiungiamo il componente al gruppo corrente $currentGroup[] = $component; $currentRowWidth += $componentWidth; // Se abbiamo superato la larghezza massima, chiudiamo il gruppo if ($currentRowWidth >= 12) { $groupedComponents[] = $currentGroup; $currentGroup = []; $currentRowWidth = 0; } } $processedComponents[] = $i; } } } // Aggiungiamo l'ultimo gruppo solo se non è vuoto e ha componenti validi if (!empty($currentGroup)) { $hasValidComponents = false; foreach ($currentGroup as $component) { if (isset($component['content']) && !empty($component['content'])) { $hasValidComponents = true; break; } } if ($hasValidComponents) { $groupedComponents[] = $currentGroup; } } // Rimuovi gruppi vuoti dalla fine while (!empty($groupedComponents) && empty(end($groupedComponents))) { array_pop($groupedComponents); } @endphp
@foreach ($groupedComponents as $groupIndex => $group) @php // Verifichiamo se il gruppo ha componenti con contenuto valido $hasValidComponents = false; foreach ($group as $component) { if (isset($component['content']) && !empty($component['content'])) { $hasValidComponents = true; break; } } // Se il gruppo non ha componenti validi, lo saltiamo if (!$hasValidComponents) { continue; } // Determina se questo gruppo contiene un AnalisiBIA $containsAnalisiBIA = false; foreach ($group as $component) { if ($component['type'] === 'AnalisiBIA') { $containsAnalisiBIA = true; break; } } // Determina se dobbiamo aggiungere la classe per forzare page break $rowClass = 'no-break-container'; if ($containsAnalisiBIA && $groupIndex > 0 && $deveForzareSaltoPrimaDiAnalisiBia) { $rowClass .= ' force-page-break-before'; } // Aggiungiamo classe specifica per Chrome se contiene AnalisiBIA if ($containsAnalisiBIA) { $rowClass .= ' chrome-analisi-bia-group'; } // Aggiungiamo classe specifica se il gruppo contiene bodyComp $containsBodyComp = false; foreach ($group as $component) { if ($component['type'] === 'bodyComp') { $containsBodyComp = true; break; } } if ($containsBodyComp) { $rowClass .= ' body-comp-group'; } // Aggiungiamo classe specifica se il gruppo contiene andamenti $containsAndamenti = false; foreach ($group as $component) { if ($component['type'] === 'andamenti') { $containsAndamenti = true; break; } } if ($containsAndamenti) { $rowClass .= ' andamenti-group'; } // Determina se questo gruppo contiene plicometria $containsPlicometria = false; foreach ($group as $component) { if ($component['type'] === 'plicometria') { $containsPlicometria = true; break; } } // La plicometria deve restare compatta, ma non deve piu creare da sola una pagina vuota. if ($containsPlicometria && $groupIndex > 0) { $rowClass .= ' plicometria-group'; } elseif ($containsPlicometria) { $rowClass .= ' plicometria-group'; } @endphp
@foreach ($group as $component) @php // Verifichiamo se il componente ha contenuto valido $hasValidContent = isset($component['content']) && !empty($component['content']); // Se il componente non ha contenuto valido, lo saltiamo if (!$hasValidContent) { continue; } // Determina classi aggiuntive in base al tipo di componente $additionalClass = ''; if ($component['type'] === 'AnalisiBIA') { $additionalClass = 'analisi-bia-component'; } elseif ($component['type'] === 'bodyComp') { $additionalClass = 'body-comp-component'; } @endphp @switch($component['type']) @case('intestazione')
@livewire('report-generator.components.Intestazione',['visita' => $component['content']])
@break @case('StudioPeso')
@livewire('report-generator.components.StudioPeso',['misurazione' => $component['content'],'visita' => $visita])
@break @case('plicometria')
@livewire('report-generator.components.Plicometria',['misurazione' => $component['content']])
@break @case('circonferenze')
@livewire('report-generator.components.Circonferenze',['misurazione' => $component['content']])
@break @case('AnalisiBIA')
@livewire('report-generator.components.AnalisiBia',['misurazione' => $component['content']])
@break @case('bodyComp')
@livewire('report-generator.components.BodyComposition',['misurazione' => $component['content']])
@break @case('LymphaDex')
@livewire('report-generator.components.LymphaDex',['misurazione' => $component['content']])
@break @case('andamenti')
@livewire('report-generator.components.Andamenti',['cliente' => $component['content'],'visita' => $visita])
@break @case('tabelle')
@livewire('report-generator.components.Tabelle',['cliente' => $component['content'],'tabella' => "AnalisiBIA",'data_da' => $data_da,'data_a' => $data_a])
@break @case('note')
@livewire('report-generator.components.Note',['visita' => $component['content']])
@break @endswitch @endforeach
@endforeach