@extends('layouts.app', ['class' => 'g-sidenav-show bg-gray-100']) @section('content') @include('layouts.navbars.auth.topnav', ['title' => 'Report Analisa NCR']) @php $auditTypeLabel = ($auditType ?? '') === 'internal' ? 'Internal' : 'External'; $totL = $totalLastYear ?? []; $totC = $totalCurrentYear ?? []; $hasData = ($totL['total'] ?? 0) > 0 || ($totC['total'] ?? 0) > 0; $allDepts = $departments ?? collect(); $deptMapL = collect($deptLastYear)->keyBy('department'); $deptMapC = collect($deptCurrentYear)->keyBy('department'); /* --- Kategori & ISO helper --- */ $catMajor = $categoryList->firstWhere('severity_level', 3); $catMinor = $categoryList->firstWhere('severity_level', 2); $catRekom = $categoryList->firstWhere('severity_level', 1); $keyMajor = $catMajor ? 'cat_' . $catMajor->idcategories : null; $keyMinor = $catMinor ? 'cat_' . $catMinor->idcategories : null; $keyRekom = $catRekom ? 'cat_' . $catRekom->idcategories : null; $iso9001 = $isoList->firstWhere('code', 'ISO 9001'); $iso45001 = $isoList->firstWhere('code', 'ISO 45001'); $keyIso9001 = $iso9001 ? 'iso_' . $iso9001->idstandards : null; $keyIso45001 = $iso45001 ? 'iso_' . $iso45001->idstandards : null; /* --- Klausul PDCA --- */ $klPdcaL = [4 => 0, 5 => 0, 6 => 0, 7 => 0, 8 => 0, 9 => 0, 10 => 0]; $klPdcaC = [4 => 0, 5 => 0, 6 => 0, 7 => 0, 8 => 0, 9 => 0, 10 => 0]; foreach (collect($clauseLastYear) as $r) { $p = (int) explode('.', (string) ($r->clause_number ?? ''))[0]; if (array_key_exists($p, $klPdcaL)) { $klPdcaL[$p] += (int) $r->total; } } foreach (collect($clauseCurrentYear) as $r) { $p = (int) explode('.', (string) ($r->clause_number ?? ''))[0]; if (array_key_exists($p, $klPdcaC)) { $klPdcaC[$p] += (int) $r->total; } } $deptClauseL = $clauseByDeptLastYear ?? collect(); $deptClauseC = $clauseByDeptCurrentYear ?? collect(); $getCl = function ($map, $deptName, $prefix) { $total = 0; foreach ($map->get($deptName, collect()) as $cn => $row) { if ((int) explode('.', (string) $cn)[0] === (int) $prefix) { $total += (int) ($row->total ?? 0); } } return $total; }; /* --- Auto Kesimpulan --- */ $isoLabels = $isoList ->map(fn($iso) => $iso->code . ($iso->version_year ? ' : ' . $iso->version_year : '')) ->implode(' dan '); $totalL = $totL['total'] ?? 0; $totalC = $totC['total'] ?? 0; $trendTotal = $totalC < $totalL ? 'penurunan' : ($totalC > $totalL ? 'kenaikan' : 'tidak ada perubahan'); $majorL = $keyMajor ? $totL[$keyMajor] ?? 0 : 0; $majorC = $keyMajor ? $totC[$keyMajor] ?? 0 : 0; $minorL = $keyMinor ? $totL[$keyMinor] ?? 0 : 0; $minorC = $keyMinor ? $totC[$keyMinor] ?? 0 : 0; $rekL = $keyRekom ? $totL[$keyRekom] ?? 0 : 0; $rekC = $keyRekom ? $totC[$keyRekom] ?? 0 : 0; $trendMinor = $minorC < $minorL ? 'penurunan' : ($minorC > $minorL ? 'kenaikan' : 'tidak berubah'); $trendRekom = $rekC < $rekL ? 'penurunan' : ($rekC > $rekL ? 'kenaikan' : 'tidak berubah'); $iso9L = $keyIso9001 ? $totL[$keyIso9001] ?? 0 : 0; $iso9C = $keyIso9001 ? $totC[$keyIso9001] ?? 0 : 0; $iso45L = $keyIso45001 ? $totL[$keyIso45001] ?? 0 : 0; $iso45C = $keyIso45001 ? $totC[$keyIso45001] ?? 0 : 0; $trend9001 = $iso9C > $iso9L ? 'kenaikan' : ($iso9C < $iso9L ? 'penurunan' : 'tidak berubah'); $trend45001 = $iso45C < $iso45L ? 'penurunan' : ($iso45C > $iso45L ? 'kenaikan' : 'tidak berubah'); $klMaxVal = max($klPdcaC) > 0 ? max($klPdcaC) : 0; $klMaxKey = $klMaxVal > 0 ? array_search($klMaxVal, $klPdcaC) : null; $label9001 = $iso9001 ? $iso9001->code . ($iso9001->version_year ? ' : ' . $iso9001->version_year : '') : null; $label45001 = $iso45001 ? $iso45001->code . ($iso45001->version_year ? ' : ' . $iso45001->version_year : '') : null; $otherCats = $categoryList->filter( fn($cat) => !in_array( $cat->idcategories, array_filter([ optional($catMajor)->idcategories, optional($catMinor)->idcategories, optional($catRekom)->idcategories, ]), ), ); $autoKesimpulan = "> Audit {$auditTypeLabel} {$isoLabels}, jumlah temuan mengalami {$trendTotal} dari thn {$lastYear} sebanyak {$totalL}, thn {$year} sebanyak {$totalC}\n"; if ($catMajor) { $autoKesimpulan .= $majorL === 0 && $majorC === 0 ? "> Temuan {$catMajor->name} thn {$lastYear} & thn {$year} tidak ada\n" : "> Temuan {$catMajor->name} thn {$lastYear} : {$majorL} → thn {$year} : {$majorC}\n"; } if ($catMinor) { $autoKesimpulan .= "> Temuan {$catMinor->name} mengalami {$trendMinor} yaitu thn {$lastYear} : {$minorL} dan thn {$year} : {$minorC}\n"; } if ($catRekom) { $autoKesimpulan .= "> Temuan {$catRekom->name} juga mengalami {$trendRekom} yaitu thn {$lastYear} : {$rekL} dan thn {$year} : {$rekC}\n"; } foreach ($otherCats as $cat) { $ck = 'cat_' . $cat->idcategories; $vL = $totL[$ck] ?? 0; $vC = $totC[$ck] ?? 0; $trend = $vC > $vL ? 'kenaikan' : ($vC < $vL ? 'penurunan' : 'tidak berubah'); $autoKesimpulan .= "> {$cat->name}, jumlahnya ada {$trend} yaitu thn {$lastYear} : {$vL} dan thn {$year} : {$vC}\n"; } if ($label9001) { $autoKesimpulan .= "> Temuan {$label9001} pada thn {$lastYear} : {$iso9L} mengalami {$trend9001} di thn {$year} : {$iso9C}\n"; } if ($label45001) { $autoKesimpulan .= "> Temuan {$label45001} pada thn {$lastYear} : {$iso45L} mengalami {$trend45001} di thn {$year} : {$iso45C}\n"; } if ($klMaxKey !== null) { $autoKesimpulan .= "> Klausul pada temuan thn {$year} yang paling banyak adalah klausul {$klMaxKey} sebanyak {$klMaxVal}"; } $autoKesimpulan = trim($autoKesimpulan); $autoPelaksanaan = $auto_pelaksanaan ?? null; /* --- Data Chart JS --- */ $jsCatL = []; $jsCatC = []; foreach ($categoryList->sortBy('severity_level') as $cat) { $ck = 'cat_' . $cat->idcategories; $jsCatL[$cat->name] = $allDepts ->map(fn($d) => (int) (optional($deptMapL->get($d->name))->{$ck} ?? 0)) ->values() ->toArray(); $jsCatC[$cat->name] = $allDepts ->map(fn($d) => (int) (optional($deptMapC->get($d->name))->{$ck} ?? 0)) ->values() ->toArray(); } $jsIsoL = []; $jsIsoC = []; foreach ($isoList as $iso) { $ik = 'iso_' . $iso->idstandards; $jsIsoL[$iso->code] = $allDepts ->map(fn($d) => (int) (optional($deptMapL->get($d->name))->{$ik} ?? 0)) ->values() ->toArray(); $jsIsoC[$iso->code] = $allDepts ->map(fn($d) => (int) (optional($deptMapC->get($d->name))->{$ik} ?? 0)) ->values() ->toArray(); } $klausulLaluArr = []; $klausulIniArr = []; foreach ([4, 5, 6, 7, 8, 9, 10] as $p) { $klausulLaluArr[] = $klPdcaL[$p] ?? 0; $klausulIniArr[] = $klPdcaC[$p] ?? 0; } $jsClauseL = []; $jsClauseC = []; foreach ($allDepts as $dept) { $jsClauseL[$dept->name] = []; $jsClauseC[$dept->name] = []; foreach ([4, 5, 6, 7, 8, 9, 10] as $p) { $jsClauseL[$dept->name][] = $getCl($deptClauseL, $dept->name, $p); $jsClauseC[$dept->name][] = $getCl($deptClauseC, $dept->name, $p); } } /* --- Dropdown Approver (admin/MR) --- */ $approvers = DB::table('users') ->whereIn('idroles', ['admins', 'admin', 'mr', 3, 4]) ->where('isactive', '1') ->orderBy('firstname') ->select('id', 'firstname', 'lastname') ->get() ->map( fn($u) => (object) [ 'id' => $u->id, 'name' => trim($u->firstname . ' ' . $u->lastname), ], ); @endphp
NCR {{ $auditTypeLabel }} Perbandingan {{ $lastYear }} vs {{ $year }}
@if ($hasData)
Temuan Thn {{ $lastYear }}
@foreach ($categoryList->sortBy('severity_level') as $cat) @endforeach @foreach ($isoList as $iso) @endforeach @foreach ($allDepts as $no => $dept) @php $row = $deptMapL->get($dept->name); $tot = (int) (optional($row)->total ?? 0); @endphp @foreach ($categoryList->sortBy('severity_level') as $cat) @endforeach @foreach ($isoList as $iso) @endforeach @endforeach @foreach ($categoryList->sortBy('severity_level') as $cat) @endforeach @foreach ($isoList as $iso) @endforeach
No Departemen{{ $cat->name }}Jml{{ $iso->code }}Jml
{{ $no + 1 }} {{ $dept->name }} {{ (int) (optional($row)->{'cat_' . $cat->idcategories} ?? 0) ?: '-' }} {{ $tot ?: '-' }} {{ (int) (optional($row)->{'iso_' . $iso->idstandards} ?? 0) ?: '-' }} {{ $tot ?: '-' }}
Total{{ $totL['cat_' . $cat->idcategories] ?? 0 }}{{ $totL['total'] ?? 0 }}{{ $totL['iso_' . $iso->idstandards] ?? 0 }}{{ $totL['total'] ?? 0 }}
Temuan Thn {{ $year }}
@foreach ($categoryList->sortBy('severity_level') as $cat) @endforeach @foreach ($isoList as $iso) @endforeach @foreach ($allDepts as $no => $dept) @php $row = $deptMapC->get($dept->name); $tot = (int) (optional($row)->total ?? 0); @endphp @foreach ($categoryList->sortBy('severity_level') as $cat) @endforeach @foreach ($isoList as $iso) @endforeach @endforeach @foreach ($categoryList->sortBy('severity_level') as $cat) @endforeach @foreach ($isoList as $iso) @endforeach
No Departemen{{ $cat->name }}Jml{{ $iso->code }}Jml
{{ $no + 1 }} {{ $dept->name }} {{ (int) (optional($row)->{'cat_' . $cat->idcategories} ?? 0) ?: '-' }} {{ $tot ?: '-' }} {{ (int) (optional($row)->{'iso_' . $iso->idstandards} ?? 0) ?: '-' }} {{ $tot ?: '-' }}
Total{{ $totC['cat_' . $cat->idcategories] ?? 0 }}{{ $totC['total'] ?? 0 }}{{ $totC['iso_' . $iso->idstandards] ?? 0 }}{{ $totC['total'] ?? 0 }}
Kategori — {{ $lastYear }} vs {{ $year }}
Standar ISO — {{ $lastYear }} vs {{ $year }}
@foreach (['L' => $lastYear, 'C' => $year] as $mode => $thn) @php $isLast = $mode === 'L'; $clauseByDept = $isLast ? $deptClauseL : $deptClauseC; $klPdca = $isLast ? $klPdcaL : $klPdcaC; @endphp
Temuan Thn {{ $thn }} — Sebaran Klausul
@foreach ($allDepts as $no => $dept) @php $rv = []; $rt = 0; foreach ([4, 5, 6, 7, 8, 9, 10] as $p) { $v = $getCl($clauseByDept, $dept->name, $p); $rv[$p] = $v; $rt += $v; } @endphp @foreach ([4, 5, 6, 7, 8, 9, 10] as $p) @endforeach @endforeach @foreach ([4, 5, 6, 7, 8, 9, 10] as $p) @endforeach
No Departemen Plan Do Check Action Total
Kl 4 Kl 5 Kl 6 Kl 7 Kl 8 Kl 9 Kl 10
{{ $no + 1 }} {{ $dept->name }}{{ $rv[$p] ?: '-' }} {{ $rt ?: '-' }}
Total{{ $klPdca[$p] ?? 0 ?: '-' }}{{ array_sum($klPdca) ?: '-' }}
@endforeach @php $payload = encrypt( json_encode([ 'audit_type' => $auditType, 'year_lalu' => $lastYear, 'year_ini' => $year, ]), ); @endphp
Perbandingan Temuan per Klausul — {{ $lastYear }} vs {{ $year }}
Kesimpulan & Informasi Tambahan
@if (empty($savedKesimpulan)) Input Kesimpulan @endif
@if (empty(optional($savedKesimpulan)->conclusion))
Kesimpulan masih kosong.

Silakan klik tombol Input Kesimpulan untuk mengisi data.
@endif
{{-- ===== PRINT ===== --}}
@if (isset($kesimpulan) && $kesimpulan) @foreach (explode("\n", $kesimpulan) as $line) @if (trim($line)) @endif @endforeach @endif
Kesimpulan
{{ trim($line) }}
Pelaksanaan tgl {{ $audit_date_range ?? '-' }} Telah disetujui oleh : {{ $approved_by ?? '' }}
Penyelesaian tgl {{ $completion_date ? \Carbon\Carbon::parse($completion_date)->translatedFormat('d F Y') : '-' }}
@else

Data Tidak Ditemukan

Tidak terdapat data NCR pada Tahun {{ $lastYear }} maupun Tahun {{ $year }}.

Silakan ubah filter kemudian Execute kembali.
@endif
@endsection