@section('page-title', 'Detail Surat dari Disposisi') @section('page-subtitle', $suratMasuk->nomor_surat)
@include('surat-masuk.partials.alerts')
@if($suratMasuk->file_surat) @include('surat-masuk.partials.pdf-preview-with-pdfjs') @endif
Aksi Cepat
@php $isTujuanAkhir = $suratMasuk->tujuan_akhir_id == auth()->id(); // Hanya penerima disposisi (atau jika tanpa source disposisi) yang berhak melengkapi lembar $isPenerimaSourceDisposisi = !$suratMasuk->sourceDisposisi || $suratMasuk->sourceDisposisi->kepadaUsers()->where('user_id', auth()->id())->exists(); @endphp @if(isset($disposisiUntukEditPenyampaian) && $disposisiUntukEditPenyampaian) Edit Penyampaian
@if(auth()->user()->isPanglima() || auth()->user()->isWakilPanglima()) Sesuaikan ceklist penerima, instruksi, dan catatan penyampaian (seperti edit WA). @else Ubah penerima, instruksi, dan catatan ke jajaran SMIN dari halaman surat ini. @endif
@endif {{-- TU/KASMIN penerima disposisi: Lengkapi Lembar Disposisi (jika masih menunggu) --}} @if($suratMasuk->isMenungguAgenda() && (auth()->user()->isTU() || auth()->user()->isKASMIN()) && $isPenerimaSourceDisposisi) Lengkapi Lembar Disposisi
Lembar disposisi perlu dilengkapi sebelum surat diteruskan ke {{ $suratMasuk->tujuanAkhir->jabatan_with_satuan ?? 'tujuan' }}
@endif {{-- Pimpinan: Buat Disposisi (jika sudah dibuatkan lembar disposisi atau pending dari disposisi) --}} @php // Cek apakah user sudah pernah membuat disposisi untuk surat ini (hanya boleh sekali) // Gunakan query langsung ke database untuk memastikan akurasi $hasAlreadyDisposisi = \App\Models\Disposisi::where('surat_masuk_id', $suratMasuk->id) ->where('pengirim_id', auth()->id()) ->exists(); // Cek apakah user adalah TU dan menerima disposisi dari atasannya (pimpinan) // Jika ya, tidak boleh disposisi lagi (akan loop) // Gunakan loose comparison == untuk menghindari type mismatch $isReceivingFromSuperior = $suratMasuk->sourceDisposisi && $suratMasuk->sourceDisposisi->pengirim_id == auth()->user()->superior_id; // TU yang menerima disposisi dari pimpinan tidak boleh forward $isTuReceivingFromPimpinan = auth()->user()->isTU() && $isReceivingFromSuperior; @endphp @if($canCreateDisposisi && ($suratMasuk->isDiagendakan() || $suratMasuk->isPending()) && !$hasAlreadyDisposisi && !$isTuReceivingFromPimpinan) @php $hasRecipients = auth()->user()->getDisposisiRecipients()->count() > 0; @endphp @if($hasRecipients) Disposisikan Surat Ini @endif {{-- Pimpinan tanpa bawahan atau pimpinan yang tidak ingin disposisi: bisa langsung selesaikan --}} @endif {{-- Proses Surat (jika user adalah tujuan akhir, BUKAN pimpinan yang bisa disposisi, dan surat pending/sudah ada lembar disposisi) --}} @if($isTujuanAkhir && !$canCreateDisposisi && ($suratMasuk->isDiagendakan() || $suratMasuk->isPending()) && $suratMasuk->status !== 'selesai' && $suratMasuk->status !== 'diproses') @endif {{-- Selesaikan Surat (jika user adalah tujuan akhir, BUKAN pimpinan yang bisa disposisi, dan surat sedang diproses) --}} @if($isTujuanAkhir && !$canCreateDisposisi && $suratMasuk->isDiproses() && $suratMasuk->status !== 'selesai') @endif {{-- Status Diproses Info (hanya untuk non-pimpinan) --}} @if($suratMasuk->status === 'diproses' && !$canCreateDisposisi && $isTujuanAkhir)
Surat Sedang Diproses

Setelah selesai ditindaklanjuti, klik tombol "Selesaikan Surat" di atas.

@endif {{-- Status Diproses Info untuk Pimpinan (surat sudah didisposisikan) --}} @if($suratMasuk->status === 'diproses' && $canCreateDisposisi)
Surat Sedang Diproses

Surat ini sudah didisposisikan. Status akan otomatis selesai ketika semua disposisi telah diselesaikan.

@if(!$hasAlreadyDisposisi) {{-- Pimpinan yang belum disposisi bisa selesaikan manual --}} @endif @endif {{-- Info: View Only (bukan tujuan akhir) - hidden --}} {{-- @if(!$isTujuanAkhir && $suratMasuk->status !== 'selesai')
Mode Lihat
Surat ini ditujukan ke {{ $suratMasuk->tujuanAkhir->jabatan_short ?? '-' }}. Anda dapat melihat surat ini karena berada dalam satuan yang sama.
@endif --}} {{-- Status Selesai --}} @if($suratMasuk->status === 'selesai')
Surat Selesai @if($suratMasuk->catatan_selesai)
@endif @if($suratMasuk->selesai_at) Diselesaikan: {{ format_tanggal($suratMasuk->selesai_at, 'd F Y, H:i') }} @if($suratMasuk->selesaiBy) oleh {{ $suratMasuk->selesaiBy->jabatan_with_satuan }} @endif @endif
@endif {{-- Link ke form Selesaikan Disposisi (hanya muncul jika belum re-disposisi) --}} @if($suratMasuk->sourceDisposisi && $suratMasuk->sourceDisposisi->status !== 'selesai' && $suratMasuk->status === 'diproses' && !$hasAlreadyDisposisi) @php $isRecipientOfSource = $suratMasuk->sourceDisposisi->kepadaUsers() ->where('user_id', auth()->id()) ->exists(); @endphp @if($isRecipientOfSource) Form Selesaikan Disposisi @endif @endif {{-- Cetak Lembar Disposisi (Panglima/Wapang: hanya Kasmin/Paurmin, lainnya: penerima + satuan dibawahnya, tapi bukan pembuat) --}} @php // Ambil disposisi terakhir menggunakan query langsung $latestDisposisi = \App\Models\Disposisi::where('surat_masuk_id', $suratMasuk->id) ->orderBy('created_at', 'desc') ->first(); @endphp @if($latestDisposisi) @php // PAURTUUD SETUM selalu bisa melihat cetak lembar $isSetumTU = auth()->user()->isSETUM() && auth()->user()->isTU(); // Pembuat disposisi tidak boleh melihat cetak lembar (gunakan == untuk loose comparison) $isCreatorLatest = $latestDisposisi->pengirim_id == auth()->id(); $isFromPanglimaLatest = $latestDisposisi->dariUser && ( $latestDisposisi->dariUser->isPanglima() || $latestDisposisi->dariUser->isWakilPanglima() ); if ($isSetumTU) { $canPrintLembarLatest = true; } elseif ($isCreatorLatest) { // Pembuat disposisi tidak boleh print $canPrintLembarLatest = false; } elseif ($isFromPanglimaLatest) { $userRoleLatest = strtolower(auth()->user()->jabatan_role ?? ''); $canPrintLembarLatest = str_contains($userRoleLatest, 'kasmin') || str_contains($userRoleLatest, 'paurmin'); } else { $isRecipientLatest = $latestDisposisi->kepadaUsers->contains('id', auth()->id()); $recipientSatuansLatest = $latestDisposisi->kepadaUsers->pluck('satuan')->unique()->toArray(); $isInRecipientSatuanLatest = in_array(auth()->user()->satuan, $recipientSatuansLatest); $canPrintLembarLatest = $isRecipientLatest || $isInRecipientSatuanLatest; } @endphp @if($canPrintLembarLatest) Cetak Lembar Disposisi @endif @endif @php // Pimpinan yang kembali ke dashboard: // - pimpinan_tertinggi (Panglima, Wakil Panglima) // - pimpinan_staf (ASREN, ASINTEL, ASOPS, ASPERS, ASLOG dan wakil-wakilnya) // - pimpinan_satuan (Komandan satuan dan wakil-wakilnya) $shouldGoToDashboard = auth()->user()->isPanglima() || auth()->user()->isWakilPanglima() || auth()->user()->role === 'pimpinan_staf' || auth()->user()->role === 'pimpinan_satuan' || auth()->user()->isWakilPimpinanStafSatuan(); // Izin edit surat (termasuk ganti PDF) dari tampilan disposisi // Sama seperti aturan umum, plus KASMIN selalu boleh mengedit $canModifyFromDisposisi = $suratMasuk->canBeModifiedBy(auth()->user()) || auth()->user()->isKASMIN(); @endphp @if($canModifyFromDisposisi) Edit Surat / PDF @endif @if($shouldGoToDashboard) Kembali ke Dashboard @else Kembali ke Daftar @endif
@php // Count total events for badge $totalJourneyEvents = $suratMasuk->disposisi->count() + ($suratMasuk->sourceDisposisi ? 1 : 0) + (isset($ancestorChain) ? $ancestorChain->sum(fn($a) => $a->sourceDisposisi ? 1 : 0) : 0) + (isset($ancestorChain) && $ancestorChain->count() > 0 && !$ancestorChain->last()->disposisi_id ? 1 : 0); @endphp @if($totalJourneyEvents > 0)
Timeline Perjalanan Surat {{ $totalJourneyEvents }}
@php $hasRenderedItem = false; @endphp {{-- ====== SECTION 1: Outgoing disposisi from CURRENT surat (newest) ====== --}} @foreach($suratMasuk->disposisi->sortByDesc('tanggal_disposisi') as $item) @if($hasRenderedItem)
@endif
{{ $item->tanggal_disposisi_format }} WIB
@if($item->status === 'pending') Pending @elseif($item->status === 'dibaca') Dibaca @elseif($item->status === 'diproses') Diproses @elseif($item->status === 'selesai') Selesai @else {{ ucfirst($item->status) }} @endif
{{ strtoupper(substr($item->dariUser->jabatan_short ?? '-', 0, 2)) }}
Dari {{ $item->dariUser->jabatan_with_satuan ?? '-' }}
@php $kepadaUser = $item->kepadaUsers->first(); @endphp @if($kepadaUser)
{{ strtoupper(substr($kepadaUser->jabatan_short ?? '-', 0, 2)) }}
Kepada {{ $kepadaUser->jabatan_with_satuan ?? '-' }}
@else - @endif
@if($item->instruksis && $item->instruksis->count() > 0)
@foreach($item->instruksis as $instruksi) {{ $instruksi->nama_instruksi }} @endforeach
@endif @if($item->catatan)
Catatan
@endif @php $isSetumTU = auth()->user()->isSETUM() && auth()->user()->isTU(); $isCreatorItem = $item->pengirim_id === auth()->id(); $isFromPanglimaItem = $item->dariUser && ($item->dariUser->isPanglima() || $item->dariUser->isWakilPanglima()); if ($isSetumTU) { $canPrintLembarItem = true; } elseif ($isCreatorItem) { $canPrintLembarItem = false; } elseif ($isFromPanglimaItem) { $userRoleItem = strtolower(auth()->user()->jabatan_role ?? ''); $canPrintLembarItem = str_contains($userRoleItem, 'kasmin') || str_contains($userRoleItem, 'paurmin'); } else { $isRecipientItem = $item->kepadaUsers->contains('id', auth()->id()); $recipientSatuansItem = $item->kepadaUsers->pluck('satuan')->unique()->toArray(); $isInRecipientSatuanItem = in_array(auth()->user()->satuan, $recipientSatuansItem); $canPrintLembarItem = $isRecipientItem || $isInRecipientSatuanItem; } @endphp @if($canPrintLembarItem) @endif
@php $hasRenderedItem = true; @endphp @endforeach {{-- ====== SECTION 2: Current surat's sourceDisposisi (how this surat was received) ====== --}} @if($suratMasuk->sourceDisposisi) @if($hasRenderedItem)
@endif
{{ $suratMasuk->sourceDisposisi->tanggal_disposisi_format }} WIB
{{ ucfirst($suratMasuk->sourceDisposisi->status) }}
{{ strtoupper(substr($suratMasuk->sourceDisposisi->dariUser->jabatan_short ?? '-', 0, 2)) }}
Dari {{ $suratMasuk->sourceDisposisi->dariUser->jabatan_with_satuan ?? '-' }}
@php $sourceRecipients = $suratMasuk->sourceDisposisi ? $suratMasuk->sourceDisposisi->getKepadaUsersForDisplay() : collect(); @endphp @if($sourceRecipients->count() > 0)
{{ $sourceRecipients->count() }}
Kepada ({{ $sourceRecipients->count() }} penerima) {{ $sourceRecipients->first()->jabatan_with_satuan ?? '-' }} @if($sourceRecipients->count() > 1) + {{ $sourceRecipients->count() - 1 }} penerima lain @endif
@else
{{ strtoupper(substr($suratMasuk->tujuanAkhir->jabatan_short ?? '-', 0, 2)) }}
Kepada {{ $suratMasuk->tujuanAkhir->jabatan_with_satuan ?? '-' }}
@endif
@if($sourceRecipients->count() > 1)
Daftar Penerima Disposisi
@foreach($sourceRecipients as $recipient)
{{ strtoupper(substr($recipient->jabatan_short ?? '-', 0, 2)) }}
{{ $recipient->jabatan_with_satuan ?? '-' }}
@if((int) $recipient->id === (int) auth()->id()) Anda @elseif((int) $recipient->id === (int) $suratMasuk->tujuan_akhir_id) Surat Ini @endif
@endforeach
@endif {{-- Informasi Surat --}} @php $rootSurat = isset($ancestorChain) && $ancestorChain->count() > 0 ? $ancestorChain->last() : null; $infoSurat = $rootSurat ?? $suratMasuk; @endphp
Informasi Surat
NO.AGD {{ $infoSurat->nomor_agenda_internal ?? $suratMasuk->nomor_agenda_internal ?? '-' }}
Nomor Surat Asli {{ $suratMasuk->parentSurat->nomor_surat ?? $suratMasuk->nomor_surat }}
Tanggal Surat {{ format_tanggal($infoSurat->tanggal_surat) }}
Tanggal Diterima {{ $suratMasuk->created_at ? format_tanggal($suratMasuk->created_at, 'd F Y, H:i') . ' WIB' : '-' }}
Asal Surat {{ $infoSurat->asal_surat_short ?? $infoSurat->asal_surat }}
Perihal {{ $infoSurat->perihal }}
@if($suratMasuk->sourceDisposisi->instruksis && $suratMasuk->sourceDisposisi->instruksis->count() > 0)
@foreach($suratMasuk->sourceDisposisi->instruksis as $instruksi) {{ $instruksi->nama_instruksi }} @endforeach
@endif
Catatan
@if($suratMasuk->sourceDisposisi->catatan) @else - @endif
Coretan
@if($suratMasuk->sourceDisposisi->catatan_gambar) Catatan Gambar @else - @endif
@if($suratMasuk->diagendakan_at && $suratMasuk->diagendakanBy)
Catatan Pelengkapan dari {{ $suratMasuk->diagendakanBy->jabatan_with_satuan ?? 'TU' }}
@endif @php $isSetumTU = auth()->user()->isSETUM() && auth()->user()->isTU(); $isCreatorSource = $suratMasuk->sourceDisposisi->pengirim_id == auth()->id(); $isFromPanglimaSource = $suratMasuk->sourceDisposisi->dariUser && ($suratMasuk->sourceDisposisi->dariUser->isPanglima() || $suratMasuk->sourceDisposisi->dariUser->isWakilPanglima()); if ($isSetumTU) { $canPrintLembarSource = true; } elseif ($isCreatorSource) { $canPrintLembarSource = false; } elseif ($isFromPanglimaSource) { $userRoleSource = strtolower(auth()->user()->jabatan_role ?? ''); $canPrintLembarSource = str_contains($userRoleSource, 'kasmin') || str_contains($userRoleSource, 'paurmin'); } else { $isRecipientSource = $suratMasuk->sourceDisposisi->kepadaUsers->contains('id', auth()->id()); $recipientSatuansSource = $suratMasuk->sourceDisposisi->kepadaUsers->pluck('satuan')->unique()->toArray(); $isInRecipientSatuanSource = in_array(auth()->user()->satuan, $recipientSatuansSource); $canPrintLembarSource = $isRecipientSource || $isInRecipientSatuanSource; } @endphp @if($canPrintLembarSource) @endif
@php $hasRenderedItem = true; @endphp @endif {{-- ====== SECTION 3: Ancestor chain (parent → grandparent → ... → root) ====== --}} @if(isset($ancestorChain)) @foreach($ancestorChain as $ancestor) {{-- Ancestor's sourceDisposisi (the disposisi that delivered surat to this level) --}} @if($ancestor->sourceDisposisi) @if($hasRenderedItem)
@endif
{{ $ancestor->sourceDisposisi->tanggal_disposisi_format }} WIB
{{ ucfirst($ancestor->sourceDisposisi->status) }}
{{ strtoupper(substr($ancestor->sourceDisposisi->dariUser->jabatan_short ?? '-', 0, 2)) }}
Dari {{ $ancestor->sourceDisposisi->dariUser->jabatan_with_satuan ?? '-' }}
{{ strtoupper(substr($ancestor->tujuanAkhir->jabatan_short ?? '-', 0, 2)) }}
Kepada {{ $ancestor->tujuanAkhir->jabatan_with_satuan ?? '-' }}
@if($ancestor->sourceDisposisi->instruksis && $ancestor->sourceDisposisi->instruksis->count() > 0)
@foreach($ancestor->sourceDisposisi->instruksis as $instruksi) {{ $instruksi->nama_instruksi }} @endforeach
@endif @if($ancestor->sourceDisposisi->catatan)
Catatan
@endif @if($ancestor->diagendakan_at && $ancestor->diagendakanBy)
Pelengkapan oleh {{ $ancestor->diagendakanBy->jabatan_with_satuan ?? 'TU' }}
@if($ancestor->catatan_agenda)
@endif
@endif
@php $hasRenderedItem = true; @endphp @endif {{-- Root surat creation (no sourceDisposisi) --}} @if(!$ancestor->disposisi_id) @if($hasRenderedItem)
@endif {{-- Lembar Disposisi --}} @if($ancestor->diagendakan_at && $ancestor->diagendakanBy && !$ancestor->sourceDisposisi)
{{ format_tanggal($ancestor->diagendakan_at, 'd F Y, H:i') }} WIB
Lembar Disposisi
{{ strtoupper(substr($ancestor->diagendakanBy->jabatan_short ?? '-', 0, 2)) }}
Dilengkapi oleh {{ $ancestor->diagendakanBy->jabatan_with_satuan ?? '-' }}
@if($ancestor->catatan_agenda)
Catatan Pelengkapan
@endif
@endif {{-- Root surat creation --}}
{{ format_tanggal($ancestor->created_at, 'd F Y, H:i') }} WIB
Surat Dibuat
{{ strtoupper(substr($ancestor->createdBy->jabatan_short ?? '-', 0, 2)) }}
Dibuat oleh {{ $ancestor->createdBy->jabatan_with_satuan ?? '-' }}
{{ $ancestor->nomor_surat }} — {{ $ancestor->perihal }}
@php $hasRenderedItem = true; @endphp @endif @endforeach @endif
@endif
@push('styles') @endpush