{{-- Disposisi History Card - Full Journey Timeline --}}
Perjalanan Surat @if($suratMasuk->disposisi->count() > 0) {{ $suratMasuk->disposisi->count() }} disposisi @endif
{{-- 1. AWAL: Surat Dibuat oleh SETUM --}}
SURAT DIBUAT
{{ $suratMasuk->created_at->format('d F Y') }} {{ $suratMasuk->created_at->format('H:i') }} WIB
{{ $suratMasuk->createdBy->jabatan_with_satuan ?? 'SETUM' }}
Membuat surat masuk
Nomor Surat : {{ $suratMasuk->nomor_surat }}
Asal Surat : {{ $suratMasuk->asal_surat_short ?? $suratMasuk->asal_surat }}
Tujuan Akhir : {{ $suratMasuk->tujuanAkhir->jabatan_with_satuan ?? '-' }}
{{-- 2. Dilembar Disposisi (jika ada) --}} @if($suratMasuk->diagendakan_at && $suratMasuk->diagendakanBy) {{-- Arrow Down --}}
@php // Kumpulkan semua target lembar disposisi dengan status disposisi $agendaTargets = collect(); $hasChildTargets = $suratMasuk->childSurat && $suratMasuk->childSurat->count() > 0 && $suratMasuk->childSurat->contains(fn($c) => $c->diagendakan_at && $c->nomor_agenda_internal); if ($hasChildTargets) { foreach ($suratMasuk->childSurat as $child) { if ($child->diagendakan_at && $child->nomor_agenda_internal) { $childDisposisiCount = $child->disposisi ? $child->disposisi->count() : 0; $childStatus = $child->status; // Determine disposisi status for this child if ($childDisposisiCount > 0) { $disposisiStatus = 'sudah_disposisi'; $disposisiLabel = 'Sudah Didisposisi'; $disposisiIcon = 'bi-check-circle-fill'; $disposisiBadgeClass = 'bg-success'; } elseif (in_array($childStatus, ['diagendakan', 'pending'])) { $disposisiStatus = 'menunggu_disposisi'; $disposisiLabel = 'Menunggu Disposisi'; $disposisiIcon = 'bi-hourglass-split'; $disposisiBadgeClass = 'bg-warning text-dark'; } else { $disposisiStatus = $childStatus; $disposisiLabel = \App\Models\SuratMasuk::getStatusLabelFor($childStatus); $disposisiIcon = 'bi-clock-history'; $disposisiBadgeClass = 'bg-secondary'; } $agendaTargets->push((object)[ 'id' => $child->id, 'nomor_agenda_internal' => $child->nomor_agenda_internal, 'tujuan_akhir' => $child->tujuanAkhir, 'status' => $childStatus, 'disposisi_count' => $childDisposisiCount, 'disposisi_status' => $disposisiStatus, 'disposisi_label' => $disposisiLabel, 'disposisi_icon' => $disposisiIcon, 'disposisi_badge_class' => $disposisiBadgeClass, ]); } } } else { // Fallback: parent sendiri sebagai target (data lama / single target tanpa child) $parentDisposisiCount = $suratMasuk->disposisi ? $suratMasuk->disposisi->count() : 0; $agendaTargets->push((object)[ 'id' => $suratMasuk->id, 'nomor_agenda_internal' => $suratMasuk->nomor_agenda_internal, 'tujuan_akhir' => $suratMasuk->tujuanAkhir, 'status' => $suratMasuk->status, 'disposisi_count' => $parentDisposisiCount, 'disposisi_status' => $parentDisposisiCount > 0 ? 'sudah_disposisi' : 'menunggu_disposisi', 'disposisi_label' => $parentDisposisiCount > 0 ? 'Sudah Didisposisi' : 'Menunggu Disposisi', 'disposisi_icon' => $parentDisposisiCount > 0 ? 'bi-check-circle-fill' : 'bi-hourglass-split', 'disposisi_badge_class' => $parentDisposisiCount > 0 ? 'bg-success' : 'bg-warning text-dark', ]); } $totalTargets = $agendaTargets->count(); $disposisiDone = $agendaTargets->where('disposisi_status', 'sudah_disposisi')->count(); @endphp
LEMBAR DISPOSISI @if($totalTargets > 1) {{ $totalTargets }} target @endif {{ $disposisiDone }}/{{ $totalTargets }} didisposisi
{{ $suratMasuk->diagendakan_at->format('d F Y') }} {{ $suratMasuk->diagendakan_at->format('H:i') }} WIB
{{ strtoupper(substr($suratMasuk->diagendakanBy->jabatan_short ?? 'TU', 0, 2)) }}
{{ $suratMasuk->diagendakanBy->jabatan_with_satuan ?? 'TU' }}
Melengkapi lembar disposisi
{{-- Target List with Disposisi Status --}}
Catatan Pelengkapan Lembar Disposisi dari {{ $suratMasuk->diagendakanBy->jabatan_with_satuan ?? 'TU' }}
{{-- Arrow Down - hanya tampil jika sudah ada disposisi --}} @if($suratMasuk->disposisi->count() > 0)
@endif @endif {{-- 3. DISPOSISI - Urut dari yang terlama ke terbaru --}} @foreach($suratMasuk->disposisi->sortBy('created_at') as $disposisi)
{{-- Badge Status --}}
@if($loop->first) DISPOSISI PERTAMA @else DISPOSISI LANJUTAN @endif
{{ $disposisi->tanggal_disposisi_format }} WIB
{{ strtoupper(substr($disposisi->dariUser->jabatan_short ?? '-', 0, 2)) }}
{{ $disposisi->dariUser->jabatan_with_satuan ?? '-' }}
@forelse($disposisi->kepadaUsers as $recipientUser) @php $matchedSurat = $disposisi->relationLoaded('generatedSuratMasuk') ? $disposisi->generatedSuratMasuk->first(fn($sm) => $sm->tujuan_akhir_id === $recipientUser->id) : null; if (!$matchedSurat && $disposisi->relationLoaded('generatedSuratMasuk') && $disposisi->generatedSuratMasuk->count() === 1) { $matchedSurat = $disposisi->generatedSuratMasuk->first(); } @endphp @if($matchedSurat) @endif
{{ strtoupper(substr($recipientUser->jabatan_short ?? '-', 0, 2)) }}
{{ $recipientUser->jabatan_with_satuan ?? '-' }} @if($matchedSurat) @endif
@if($matchedSurat)
@endif @empty - @endforelse
@if($disposisi->instruksis && $disposisi->instruksis->count() > 0)
@foreach($disposisi->instruksis as $instruksi) {{ $instruksi->nama_instruksi }} @endforeach
@endif
Catatan dari {{ $disposisi->dariUser->jabatan_with_satuan ?? 'Pengirim' }}
@if($disposisi->catatan_gambar)
Catatan Tulisan Tangan:
Catatan Gambar
@endif
@if($disposisi->status === 'pending') Menunggu @elseif($disposisi->status === 'dibaca') Dibaca @elseif($disposisi->status === 'diproses') Diproses @elseif($disposisi->status === 'selesai') Selesai @elseif($disposisi->status === 'menunggu_agenda') {{ \App\Models\SuratMasuk::getStatusLabelFor('menunggu_agenda') }} @elseif($disposisi->status === 'diagendakan') {{ \App\Models\SuratMasuk::getStatusLabelFor('diagendakan') }} @else {{ ucfirst($disposisi->status) }} @endif @if($disposisi->level) {{ $disposisi->level->nama_level }} @endif
{{-- Catatan Tambahan - Hanya tampilkan jika ada isi DAN disposisi belum selesai --}} {{-- Jika selesai, catatan ditampilkan di card DISPOSISI SELESAI --}} @if($disposisi->catatan_balasan && strtolower($disposisi->status) !== 'selesai') @php $historyBalasanUser = $disposisi->kepadaUsers->first(); @endphp
Catatan Tambahan dari {{ $historyBalasanUser->jabatan_with_satuan ?? 'Penerima' }}
@if($disposisi->selesai_pada) @endif
@endif {{-- @if($disposisi->kepadaUsers->contains('id', auth()->id()) && $disposisi->status !== 'selesai') @endif --}}
{{-- Arrow Down --}} @php $hasSelesaiDisposisi = $suratMasuk->disposisi->contains(fn($d) => strtolower($d->status) === 'selesai'); @endphp @if(!$loop->last || $hasSelesaiDisposisi || ($suratMasuk->status === 'selesai' && $suratMasuk->selesai_at))
@endif @endforeach {{-- 4. DISPOSISI SELESAI - Card untuk setiap disposisi yang sudah diselesaikan --}} @php $selesaiDisposisi = $suratMasuk->disposisi->filter(fn($d) => strtolower($d->status) === 'selesai'); @endphp @foreach($selesaiDisposisi as $selesaiItem) @php $penyelesai = $selesaiItem->kepadaUsers->first(); @endphp
DISPOSISI SELESAI
@if($selesaiItem->selesai_pada)
{{ $selesaiItem->selesai_pada->format('d F Y') }} {{ $selesaiItem->selesai_pada->format('H:i') }} WIB
@endif
Diselesaikan oleh {{ $penyelesai->jabatan_with_satuan ?? 'Penerima' }}
Disposisi dari {{ $selesaiItem->dariUser->jabatan_with_satuan ?? '-' }}
@if($selesaiItem->catatan_balasan)
Catatan Penyelesaian
@if($selesaiItem->selesai_pada) @endif
@endif
@if(!$loop->last || ($suratMasuk->status === 'selesai' && $suratMasuk->selesai_at))
@endif @endforeach {{-- 5. AKHIR: Status Surat Selesai (jika semua selesai) --}} @if($suratMasuk->status === 'selesai' && $suratMasuk->selesai_at)
SURAT SELESAI
{{ $suratMasuk->selesai_at->format('d F Y') }} {{ $suratMasuk->selesai_at->format('H:i') }} WIB
Surat Telah Selesai Diproses
Semua disposisi telah ditindaklanjuti
@if($suratMasuk->catatan_selesai)
Catatan Penyelesaian:
@endif
@endif {{-- Empty state dihilangkan - bagian disposisi hanya muncul jika sudah ada disposisi --}}