{{-- 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
Riwayat Approval
@foreach($sortedApprovals as $approval)
@php $showJabatan = true; $showName = false; $approver = $approval->approver; $jabatan = $approver?->jabatan; $jabatanShort = $approver?->jabatan_short; $name = $approver?->name ?? 'Pengguna Tidak Ditemukan'; $role = $approver?->role ?? 'operator'; // Aturan khusus if ($role === 'tata_usaha' || !$approver) { $showJabatan = false; $showName = true; } elseif (in_array($role, ['operator', 'staf_pelaksana'])) { if ($jabatanShort && $jabatanShort !== '-') { $showJabatan = true; $showName = false; } elseif ($jabatan && $jabatan !== '-') { $showJabatan = true; $showName = false; } else { $showJabatan = false; $showName = true; } } @endphp @if($showJabatan)
{{ $jabatanShort && $jabatanShort !== '-' ? $jabatanShort : $jabatan }}
@endif @if($showName)
{{ $name }}
@endif {{ $approval->approver?->satuan ?? '-' }} @if($approval->catatan)
@endif @if($approval->annotations)
Ada Anotasi
@endif
{{ $approval->status_label }} @if($approval->reviewed_at)
{{ $approval->reviewed_at->format('d/m/Y H:i') }}
@elseif($approval->submitted_at)
Diajukan: {{ $approval->submitted_at->format('d/m/Y H:i') }}
@endif
@endforeach
@endif