{{-- Part E §2 — Risk-Rated Observation Matrix (UI aligned with field-officer cards + category panels) --}} @php $rrmDotBase = $rrmDotBase ?? 'report.part_e.risk_rated_matrix'; $rrmDataPath = $rrmDataPath ?? 'part_e.risk_rated_matrix'; $rrmBracketBase = $rrmBracketBase ?? 'report[part_e][risk_rated_matrix]'; $rrmRootId = $rrmRootId ?? 'report-e2-root'; $rrmShowUnitMode = $rrmShowUnitMode ?? true; $rrmApplyRiskColors = $rrmApplyRiskColors ?? false; $reportPayload = is_array($report ?? null) ? $report : []; if ($reportPayload === [] && is_array(old('report'))) { $reportPayload = old('report'); } $unitMode = old( $rrmDotBase.'.reporting_mode', report_section_reporting_mode($reportPayload, $rrmDataPath.'.reporting_mode') ); if (! in_array((string) $unitMode, ['single', 'unit_wise'], true)) { $unitMode = 'single'; } $rrmOfficerOrderFull = [ ['key' => 'meo_smeo', 'title' => 'MEO / SMEO'], ['key' => 'rd', 'title' => 'RD'], ['key' => 'sdm', 'title' => 'SDM'], ]; $mecReportWfMode = $mecReportWorkflowMode ?? null; $partEAuthorKey = $mecReportAuthorOfficerKey ?? mec_report_submitter_part_e_officer_key(); if (in_array($mecReportWfMode, ['rd', 'sdm', 'dg', 'meo_resubmit', 'initiator_resubmit'], true)) { $rrmOfficerOrder = $rrmOfficerOrderFull; } elseif ($partEAuthorKey === 'meo_smeo') { $rrmOfficerOrder = array_values(array_filter( $rrmOfficerOrderFull, static fn (array $d) => $d['key'] === 'meo_smeo' )); } elseif ($partEAuthorKey === 'rd') { $rrmOfficerOrder = array_values(array_filter( $rrmOfficerOrderFull, static fn (array $d) => $d['key'] === 'rd' )); } elseif ($partEAuthorKey === 'sdm') { $rrmOfficerOrder = array_values(array_filter( $rrmOfficerOrderFull, static fn (array $d) => $d['key'] === 'sdm' )); } else { $rrmOfficerOrder = array_values(array_filter( $rrmOfficerOrderFull, static fn (array $d) => $d['key'] === 'meo_smeo' )); } $rrmCategoryOptions = $riskRatedCategoryOptions ?? [ 'physical' => 'Physical Observations', 'financial' => 'Financial Observations', 'evm' => 'EVM', 'pc_i_compliance' => 'PC-I Compliance', 'pm_arrangements' => 'PM Arrangements', 'general' => 'General', 'procurement' => 'Procurement', 'other' => 'Other', ]; if (! is_array($rrmCategoryOptions) || $rrmCategoryOptions === []) { $rrmCategoryOptions = ['other' => 'Other']; } $rawOfficers = old($rrmDotBase.'.officers'); if (! is_array($rawOfficers) || count($rawOfficers) === 0) { $rawOfficers = data_get($reportPayload, $rrmDataPath.'.officers', []); } $byFo = collect(is_array($rawOfficers) ? $rawOfficers : [])->keyBy('field_officer'); $rrmOfficersForView = []; foreach ($rrmOfficerOrder as $def) { $merge = $byFo->get($def['key']); $rrmOfficersForView[] = [ 'key' => $def['key'], 'title' => $def['title'], 'categories' => is_array($merge['categories'] ?? null) ? $merge['categories'] : [], ]; } $rawUnits = old($rrmDotBase.'.units'); if (! is_array($rawUnits) || count($rawUnits) === 0) { $rawUnits = data_get($reportPayload, $rrmDataPath.'.units', []); } if (! is_array($rawUnits) || count($rawUnits) === 0) { $rawUnits = [['unit_name' => '', 'officers' => []]]; } $rrmUnitsForView = []; foreach ($rawUnits as $uIdx => $unitRow) { if (! is_array($unitRow)) { continue; } $uOff = is_array($unitRow['officers'] ?? null) ? $unitRow['officers'] : []; $byFoU = collect($uOff)->keyBy('field_officer'); $officersView = []; foreach ($rrmOfficerOrder as $def) { $mergeU = $byFoU->get($def['key']); $officersView[] = [ 'key' => $def['key'], 'title' => $def['title'], 'categories' => is_array($mergeU['categories'] ?? null) ? $mergeU['categories'] : [], ]; } $rrmUnitsForView[] = [ 'unit_name' => old($rrmDotBase.'.units.'.$uIdx.'.unit_name', $unitRow['unit_name'] ?? ''), 'officers' => $officersView, ]; } @endphp
@if ($rrmShowUnitMode)
{{ __('Reporting structure') }}

{{ __('Unit-wise mode shows a yellow unit banner in preview/print.') }}

@endif
@foreach ($rrmOfficersForView as $oIdx => $officer) @include('reports.partials.e2-rrm-officer-stack', [ 'officer' => $officer, 'oIdx' => $oIdx, 'unitIdx' => null, 'rrmCategoryOptions' => $rrmCategoryOptions, 'rrmBracketBase' => $rrmBracketBase, 'rrmDotBase' => $rrmDotBase, 'rrmApplyRiskColors' => $rrmApplyRiskColors, ]) @endforeach
@foreach ($rrmUnitsForView as $uIdx => $unitView)
@foreach ($unitView['officers'] as $oIdx => $officer) @include('reports.partials.e2-rrm-officer-stack', [ 'officer' => $officer, 'oIdx' => $oIdx, 'unitIdx' => $uIdx, 'rrmCategoryOptions' => $rrmCategoryOptions, 'rrmBracketBase' => $rrmBracketBase, 'rrmDotBase' => $rrmDotBase, 'rrmApplyRiskColors' => $rrmApplyRiskColors, ]) @endforeach
@endforeach
@include('reports.partials.rrm-observation-rtf-scripts') @push('scripts') @endpush