@php
$tagIntestazioneConsentiti = '
';
$headerDecodificato = html_entity_decode((string) ($header ?? ''), ENT_QUOTES | ENT_HTML5, 'UTF-8');
$intestazioneProfessionista = trim(strip_tags($headerDecodificato, $tagIntestazioneConsentiti));
$intestazioneProfessionistaPresente = trim(strip_tags($intestazioneProfessionista)) !== '';
$logoImg = $logoImg ?? null;
$blocchiOpzioni = $blocchiOpzioni ?? [];
$grigliaPranzi = $grigliaPranzi ?? [];
$grigliaCene = $grigliaCene ?? [];
$giorniGriglia = $giorniGriglia ?? array_keys($grigliaPranzi);
$noteAggregate = $noteAggregate ?? [];
$haNote = count($noteAggregate) > 0;
$giorniTop = array_slice($giorniGriglia, 0, 4);
$giorniBottom = array_slice($giorniGriglia, 4, 3);
// Entrambe le sezioni usano sempre 4 slot giorno per allineamento omogeneo.
$slotTop = array_pad($giorniTop, 4, null);
$slotBottom = array_pad($giorniBottom, 4, null);
// Palette azzurra allineata ai PDF diete manuali (AdminLTE #3c8dbc).
$coloreAccento = '#3c8dbc';
$bgPage = '#f4f8fb';
$bordoChiaro = '#c5d4e0';
$bordoCelle = '#b8c9d6';
$bordoTratteggiato = '#cdd8e3';
/**
* DomPDF non centra verticalmente il testo nelle TD alte: bilancia con
* righe vuote in base al numero massimo di alimenti nella stessa riga.
*
* @param string $etichetta Testo etichetta (es. Pranzi)
* @param array
$slotGiorni
* @param array}> $griglia
*/
$etichettaCentrata = static function (string $etichetta, array $slotGiorni, array $griglia): string {
$maxRighe = 1;
foreach ($slotGiorni as $giornoKey) {
if (! is_string($giornoKey) || $giornoKey === '') {
continue;
}
$maxRighe = max($maxRighe, count($griglia[$giornoKey]['righe'] ?? []));
}
$maxRighe = max(1, $maxRighe);
$spazioExtra = max(0, $maxRighe - 1);
$righeSopra = (int) floor($spazioExtra / 2);
$righeSotto = $spazioExtra - $righeSopra;
$spacer = static fn (int $n): string => $n > 0
? str_repeat('
', $n)
: '';
return $spacer($righeSopra)
. '' . e($etichetta) . '
'
. $spacer($righeSotto);
};
@endphp
{{-- Header --}}
{{-- Griglia settimanale a tutta larghezza --}}
@if(count($giorniTop) > 0)
|
@foreach($slotTop as $giornoKey)
@if($giornoKey)
@else
@endif
@endforeach
| {!! $etichettaCentrata('Pranzi', $slotTop, $grigliaPranzi) !!} |
@foreach($slotTop as $giornoKey)
@if($giornoKey)
@forelse(($grigliaPranzi[$giornoKey]['righe'] ?? []) as $riga)
{{ $riga }}
@empty
—
@endforelse
|
@else
|
@endif
@endforeach
| {!! $etichettaCentrata('Cene', $slotTop, $grigliaCene) !!} |
@foreach($slotTop as $giornoKey)
@if($giornoKey)
@forelse(($grigliaCene[$giornoKey]['righe'] ?? []) as $riga)
{{ $riga }}
@empty
—
@endforelse
|
@else
|
@endif
@endforeach
@endif
@if(count($giorniBottom) > 0)
|
@foreach($slotBottom as $indiceSlot => $giornoKey)
@if($giornoKey)
@elseif($indiceSlot === 3)
@else
@endif
@endforeach
| {!! $etichettaCentrata('Pranzi', $slotBottom, $grigliaPranzi) !!} |
@foreach($slotBottom as $indiceSlot => $giornoKey)
@if($giornoKey)
@forelse(($grigliaPranzi[$giornoKey]['righe'] ?? []) as $riga)
{{ $riga }}
@empty
—
@endforelse
|
@elseif($indiceSlot === 3)
@if($haNote)
Importante
@foreach($noteAggregate as $nota)
• {{ $nota }}
@endforeach
@else
@endif
|
@else
|
@endif
@endforeach
| {!! $etichettaCentrata('Cene', $slotBottom, $grigliaCene) !!} |
@foreach($slotBottom as $indiceSlot => $giornoKey)
@if($giornoKey)
@forelse(($grigliaCene[$giornoKey]['righe'] ?? []) as $riga)
{{ $riga }}
@empty
—
@endforelse
|
@elseif($indiceSlot === 3)
|
@else
|
@endif
@endforeach
@endif
{{-- Colazione / spuntini: righe allineate all'altezza della cella più alta --}}
@if(count($blocchiOpzioni) > 0)
@php
$blocchiAffiancati = array_slice($blocchiOpzioni, 0, 3);
while (count($blocchiAffiancati) < 3) {
$blocchiAffiancati[] = null;
}
$maxOpzioni = 0;
foreach ($blocchiAffiancati as $bloccoTmp) {
if ($bloccoTmp !== null) {
$maxOpzioni = max($maxOpzioni, count($bloccoTmp['opzioni'] ?? []));
}
}
@endphp
@foreach($blocchiAffiancati as $blocco)
@if($blocco !== null)
| {{ $blocco['label'] ?? '' }} |
@else
|
@endif
@endforeach
@for($indiceOpzione = 0; $indiceOpzione < $maxOpzioni; $indiceOpzione++)
@foreach($blocchiAffiancati as $blocco)
@php
$opzione = ($blocco !== null) ? (($blocco['opzioni'] ?? [])[$indiceOpzione] ?? null) : null;
@endphp
@if($opzione !== null)
|
{{ $opzione['numero'] ?? '' }}.
@foreach(($opzione['righe'] ?? []) as $riga)
{{ $riga }}@if(!$loop->last) + @endif
@endforeach
|
@else
|
@endif
@endforeach
@endfor
@endif