{{-- Approval History Card --}} @if($surat->approvals && $surat->approvals->count() > 0) @php // Filter logic: // 1. Tampilkan SEMUA yang sudah approved/rejected (history) // 2. Untuk pending: hanya tampilkan SATU per approver (yang terbaru) $historyApprovals = $surat->approvals->whereIn('status', ['approved', 'rejected']); // Untuk pending, group by approver_id dan ambil yang terbaru saja $pendingApprovals = $surat->approvals ->where('status', 'pending') ->groupBy('approver_id') ->map(function($approvals) { return $approvals->sortByDesc('id')->first(); }) ->values(); // Gabungkan history + pending (tanpa duplikasi pending) $filteredApprovals = $historyApprovals->merge($pendingApprovals); // Group by approver_id untuk mengelompokkan history per orang $groupedByApprover = $filteredApprovals->groupBy('approver_id'); // Sort groups by role hierarchy (pangkat tertinggi di atas) // Urutan: pimpinan_tertinggi > pimpinan_staf (Asisten) > pimpinan_satuan (Komandan) > kepala_bagian > tata_usaha > staf_pelaksana $roleHierarchy = [ 'pimpinan_tertinggi' => 10, 'sekretariat_pimpinan' => 20, 'pimpinan_staf' => 30, 'pimpinan_2' => 35, 'pimpinan_satuan' => 40, 'kasmin' => 42, 'paurmin' => 44, 'kepala_bagian' => 50, 'tata_usaha' => 60, 'staf_pelaksana' => 70, 'operator' => 80, ]; $sortedGroups = $groupedByApprover->sortBy(function($approvals, $approverId) use ($roleHierarchy) { $approver = $approvals->first()->approver; $role = $approver?->role ?? 'operator'; $roleScore = $roleHierarchy[$role] ?? 75; // Wakil jabatan sedikit lebih rendah dari jabatan utama dalam role yang sama $jabatan = strtolower($approver?->jabatan ?? ''); $isWakil = str_starts_with($jabatan, 'wakil') || str_starts_with($jabatan, 'wadan'); return $roleScore + ($isWakil ? 5 : 0); }); // Flatten: untuk setiap approver, tampilkan semua approval-nya // Sorted by id DESC - terbaru di atas, terlama di bawah $sortedApprovals = $sortedGroups->flatMap(function($approvals) { return $approvals->sortByDesc('id'); }); @endphp