@extends( ! empty($previewBrowsershotPdf) || empty($previewPdfExport) ? 'layouts.report-preview' : 'layouts.report-preview-pdf' ) @section('content') @php use App\Support\MecReportType; $usesReportHtml = ! empty($previewUsesReportHtmlLayout); $htmlPageTotal = $usesReportHtml ? MecReportType::previewReportHtmlPageTotal((string) ($reportType ?? ''), $previewMecSectorId ?? null) : (int) ($previewPageTotal ?? 0); $htmlPageNum = 0; $hasCoverSheet = in_array('cover', $previewSheets, true) || in_array('pmr_cover', $previewSheets, true) || in_array('sar_cover', $previewSheets, true) || in_array('drr_cover', $previewSheets, true); $htmlContentPageTotal = max(1, $htmlPageTotal - ($hasCoverSheet ? 1 : 0)); $legacyContentPageTotal = max(1, (int) ($previewPageTotal ?? 0) - ($hasCoverSheet ? 1 : 0)); $previewPageGroups = $usesReportHtml ? MecReportType::previewReportHtmlPageGroups((string) ($reportType ?? ''), $previewMecSectorId ?? null) : array_map(static fn (string $sheet): array => [$sheet], $previewSheets); $isBrowserPreview = empty($previewBrowsershotPdf) && empty($previewPdfExport); if ($usesReportHtml && ! empty($previewBrowsershotPdf)) { $mergedGroups = []; for ($gi = 0, $gn = count($previewPageGroups); $gi < $gn; $gi++) { if (($previewPageGroups[$gi][0] ?? '') === 'part_e2_e3') { $landscapeFlow = ['part_e2_matrix', 'part_e3_assessment']; $gi++; while ($gi < $gn) { $nextGroup = $previewPageGroups[$gi]; if ($nextGroup === ['part_f_compliance', 'part_g']) { $landscapeFlow[] = 'part_f_compliance'; $landscapeFlow[] = 'part_g'; $gi++; break; } if (($nextGroup[0] ?? '') === 'part_f_compliance') { $landscapeFlow[] = 'part_f_compliance'; $gi++; if ($gi < $gn && ($previewPageGroups[$gi][0] ?? '') === 'part_g') { $landscapeFlow[] = 'part_g'; $gi++; } break; } if (($nextGroup[0] ?? '') === 'part_g') { $landscapeFlow[] = 'part_g'; $gi++; break; } break; } $mergedGroups[] = $landscapeFlow; continue; } if (($previewPageGroups[$gi][0] ?? '') === 'part_f_compliance') { $previousGroup = $mergedGroups[array_key_last($mergedGroups)] ?? []; if (in_array('part_f_compliance', $previousGroup, true)) { $gi++; continue; } } if (($previewPageGroups[$gi][0] ?? '') === 'part_g') { $previousGroup = $mergedGroups[array_key_last($mergedGroups)] ?? []; if (in_array('part_g', $previousGroup, true)) { $gi++; continue; } } $mergedGroups[] = $previewPageGroups[$gi]; } $previewPageGroups = $mergedGroups; $htmlContentPageTotal = 0; foreach ($previewPageGroups as $browsershotGroup) { if (! in_array($browsershotGroup[0] ?? '', ['cover', 'pmr_cover'], true)) { $htmlContentPageTotal++; } } $htmlContentPageTotal = max(1, $htmlContentPageTotal); } $g1AdditionalDocCount = 0; if (MecReportType::isCmr((string) ($reportType ?? ''))) { $g1AdditionalRows = data_get($report ?? [], 'part_g.additional_picture_documents', []); if (is_array($g1AdditionalRows)) { foreach ($g1AdditionalRows as $g1AdditionalRow) { if (! is_array($g1AdditionalRow)) { continue; } $hasG1Additional = trim((string) ($g1AdditionalRow['attachment_storage'] ?? '')) !== '' || trim((string) ($g1AdditionalRow['attachment_original_name'] ?? '')) !== ''; if ($hasG1Additional) { $g1AdditionalDocCount++; } } } } if ($g1AdditionalDocCount > 1) { $htmlContentPageTotal += $g1AdditionalDocCount - 1; } /* * One portrait page-container for Part A financial → Part D (Part B is its own landscape page). */ if ($usesReportHtml) { $portraitFlowSheetSet = array_flip([ 'pmr_part_a_profile', 'part_a_financial', 'part_c_part1', 'part_c_part2', 'pmr_part_c', 'part_d_e1', 'pmr_part_d_e1', ]); $nonFlowPrimarySheets = [ 'cover', 'pmr_cover', 'part_a_profile', 'pmr_part_a_profile', 'part_b', 'pmr_part_b', 'part_e2_matrix', 'part_e3_assessment', 'part_e2_e3', 'part_f_compliance', 'part_g', 'part_g_additional_documents', 'pmr_part_f', ]; $coalescedGroups = []; $flowBuffer = []; foreach ($previewPageGroups as $group) { $primary = $group[0] ?? ''; if (in_array($primary, $nonFlowPrimarySheets, true)) { if ($flowBuffer !== []) { $coalescedGroups[] = $flowBuffer; $flowBuffer = []; } $coalescedGroups[] = $group; continue; } foreach ($group as $sheet) { if (isset($portraitFlowSheetSet[$sheet])) { $flowBuffer[] = $sheet; } else { if ($flowBuffer !== []) { $coalescedGroups[] = $flowBuffer; $flowBuffer = []; } $coalescedGroups[] = [$sheet]; } } } if ($flowBuffer !== []) { $coalescedGroups[] = $flowBuffer; } $previewPageGroups = $coalescedGroups; /* * PDF: portrait flow for Part A → financial / Part C → D (Part B is landscape, same as Part E). */ if (! empty($previewBrowsershotPdf)) { $pdfPortraitSheetSet = array_flip([ 'part_a_profile', 'pmr_part_a_profile', 'part_a_financial', 'part_c_part1', 'part_c_part2', 'pmr_part_c', 'part_d_e1', 'pmr_part_d_e1', ]); $pdfPortraitMerged = []; $pdfPortraitBuffer = []; foreach ($previewPageGroups as $pdfGroup) { $pdfGroupIsPortraitFlow = $pdfGroup !== [] && ! in_array($pdfGroup[0] ?? '', ['cover', 'pmr_cover'], true) && collect($pdfGroup)->every(static fn (string $sheet): bool => isset($pdfPortraitSheetSet[$sheet])); if ($pdfGroupIsPortraitFlow) { foreach ($pdfGroup as $pdfSheet) { $pdfPortraitBuffer[] = $pdfSheet; } continue; } if ($pdfPortraitBuffer !== []) { $pdfPortraitMerged[] = $pdfPortraitBuffer; $pdfPortraitBuffer = []; } $pdfPortraitMerged[] = $pdfGroup; } if ($pdfPortraitBuffer !== []) { $pdfPortraitMerged[] = $pdfPortraitBuffer; } $previewPageGroups = $pdfPortraitMerged; } $htmlContentPageTotal = 0; foreach ($previewPageGroups as $contentGroup) { if (! in_array($contentGroup[0] ?? '', ['cover', 'pmr_cover'], true)) { $htmlContentPageTotal++; } } $htmlContentPageTotal = max(1, $htmlContentPageTotal); } @endphp @include('reports.preview.partials.publish-letter-sheet') @foreach ($previewPageGroups as $group) @php $primarySheet = $group[0]; $isSarDoc = MecReportType::isSar((string) ($reportType ?? '')); $isDrrDoc = MecReportType::isDrr((string) ($reportType ?? '')); if ($usesReportHtml) { if (in_array($primarySheet, ['cover', 'pmr_cover'], true)) { $sheetPageNum = null; $sheetPageTotal = $htmlContentPageTotal; } else { $htmlPageNum++; $sheetPageNum = $htmlPageNum; $sheetPageTotal = $htmlContentPageTotal; } } elseif ($isSarDoc && $primarySheet === 'sar_cover') { $sheetPageNum = null; $sheetPageTotal = max(1, count($previewSheets) - 1); } elseif ($isSarDoc) { $sheetPageNum = array_search($primarySheet, $previewSheets, true); $sheetPageTotal = max(1, count($previewSheets) - 1); } elseif ($isDrrDoc && $primarySheet === 'drr_cover') { $sheetPageNum = null; $sheetPageTotal = count($previewSheets) - 1; } elseif ($isDrrDoc) { $sheetPageNum = array_search($primarySheet, $previewSheets, true); $sheetPageTotal = count($previewSheets) - 1; } elseif ($primarySheet === 'cover') { $sheetPageNum = null; $sheetPageTotal = $legacyContentPageTotal; } elseif ($hasCoverSheet) { $sheetPageNum = array_search($primarySheet, $previewSheets, true); $sheetPageTotal = $legacyContentPageTotal; } else { $sheetPageNum = array_search($primarySheet, $previewSheets, true) + 1; $sheetPageTotal = $previewPageTotal; } $landscapePage = $usesReportHtml && ( in_array('part_b', $group, true) || in_array('pmr_part_b', $group, true) || in_array('part_e2_e3', $group, true) || in_array('part_e2_matrix', $group, true) || in_array('part_e3_assessment', $group, true) || in_array('part_f_compliance', $group, true) || (MecReportType::isCmr((string) ($reportType ?? '')) && in_array('part_g', $group, true)) ); $skipReportHtmlWrapper = in_array($primarySheet, ['cover', 'pmr_cover', 'part_g_additional_documents'], true) || (in_array($primarySheet, ['part_a_profile', 'pmr_part_a_profile'], true) && count($group) === 1 && empty($previewBrowsershotPdf)); $previewOwnPageShell = in_array($primarySheet, ['part_a_profile', 'pmr_part_a_profile'], true) && $skipReportHtmlWrapper; $isCombinedGroup = count($group) > 1; $isMergedFinancialPartB = $isCombinedGroup && in_array('part_a_financial', $group, true) && (in_array('part_b', $group, true) || in_array('pmr_part_b', $group, true)); $closePageNum = $sheetPageNum; $closePageTotal = $sheetPageTotal; if ($isMergedFinancialPartB && $sheetPageNum !== null) { $closePageNum = (int) $sheetPageNum + 1; } $showReportPageHeader = $closePageNum !== null && is_numeric($closePageNum) && is_numeric($closePageTotal) && (int) $closePageTotal > 0 && ((int) $closePageNum === 1 || (int) $closePageNum === (int) $closePageTotal); $showReportPageChrome = $showReportPageHeader; $showFooterDisclaimer = ! $isSarDoc && ! $isDrrDoc && $isBrowserPreview && $closePageNum !== null && is_numeric($closePageNum) && is_numeric($closePageTotal) && (int) $closePageTotal > 0 && (int) $closePageNum === (int) $closePageTotal; @endphp @php ob_start(); @endphp @foreach ($group as $groupSheet) @php $sheetPageNumForSheet = $sheetPageNum; if ($isMergedFinancialPartB && in_array($groupSheet, ['part_b', 'pmr_part_b'], true) && $sheetPageNum !== null) { $sheetPageNumForSheet = (int) $sheetPageNum + 1; } @endphp @include('reports.preview.sheets.'.$groupSheet, [ 'pageNum' => $sheetPageNumForSheet, 'pageTotal' => $sheetPageTotal, 'previewMecSectorId' => $previewMecSectorId ?? null, 'landscapePage' => $landscapePage, 'previewCombinedPage' => $isCombinedGroup, 'previewCombinedContinuation' => $isCombinedGroup && $groupSheet !== $primarySheet, 'previewInlineFooterAfterChart' => $isMergedFinancialPartB && $groupSheet === 'part_a_financial', 'previewMergedWithPartB' => $isMergedFinancialPartB && in_array($groupSheet, ['part_b', 'pmr_part_b'], true), 'previewBrowsershotPdf' => ! empty($previewBrowsershotPdf), 'showReportPageHeader' => $showReportPageHeader, 'previewOwnPageShell' => $previewOwnPageShell, 'showFooterDisclaimer' => $showFooterDisclaimer, 'previewPdfExport' => ! empty($previewPdfExport), ]) @endforeach @php $groupSheetHtml = (string) ob_get_clean(); $alwaysKeepSheets = [ 'cover', 'pmr_cover', 'sar_cover', 'drr_cover', 'part_a_profile', 'pmr_part_a_profile', 'sar_sheet1', 'ddr_sheet1', 'ddr_sheet2', 'ddr_sheet3', ]; $groupHasContent = in_array($primarySheet, $alwaysKeepSheets, true) || \App\Services\ReportPreviewPresenter::previewRenderedGroupHasContent($groupSheetHtml); if (! $groupHasContent && $usesReportHtml && ! in_array($primarySheet, ['cover', 'pmr_cover'], true)) { $htmlPageNum = max(0, $htmlPageNum - 1); } @endphp @if ($groupHasContent) @if ($usesReportHtml && ! $skipReportHtmlWrapper) @include('reports.preview.partials.report-html-page-open', [ 'landscapePage' => $landscapePage, 'showReportPageHeader' => $showReportPageChrome, 'showFooterDisclaimer' => $showFooterDisclaimer, ]) @endif {!! $groupSheetHtml !!} @if ($usesReportHtml && ! $skipReportHtmlWrapper) @include('reports.preview.partials.report-html-page-close', [ 'pageNum' => $closePageNum, 'pageTotal' => $closePageTotal, 'showReportPageChrome' => $showReportPageChrome, 'showFooterDisclaimer' => $showFooterDisclaimer, 'previewBrowsershotPdf' => ! empty($previewBrowsershotPdf), 'previewPdfExport' => ! empty($previewPdfExport), ]) @endif @endif @endforeach @include('reports.preview.partials.section-head-keep-with-table-script') @endsection