@if($suratMasuk->is_tembusan)
Surat Tembusan
@else
Aksi
@endif
@php
$sminPangwapangRoute = $suratMasuk->isSminPangwapangRoute();
@endphp
{{-- Pre-check: Apakah user sudah menerima disposisi untuk surat ini --}}
@php
$userPendingDisposisi = null;
$tuNeedsToFillLembar = false; // Perlu Dilengkapi
$tuNeedsToProcess = false; // Mohon Diselesaikan
$isChildSuratCrossSatuan = false; // Flag untuk child surat dari cross-satuan
// Case 1: Child surat dari disposisi (is_from_disposisi = true)
// Gunakan sourceDisposisi untuk mendapatkan disposisi yang membuat surat ini
if ($suratMasuk->is_from_disposisi && $suratMasuk->sourceDisposisi) {
$sourceDisposisi = $suratMasuk->sourceDisposisi;
// Cek apakah user adalah TU dan merupakan penerima disposisi ini
$isRecipient = $sourceDisposisi->kepadaUsers()
->where(function($q) {
$q->where('user_id', auth()->id())
->orWhere('user_id', auth()->user()->superior_id);
})
->exists();
if ($isRecipient && in_array($sourceDisposisi->status, ['pending', 'dibaca', 'diproses'])) {
$userPendingDisposisi = $sourceDisposisi;
$isChildSuratCrossSatuan = true;
}
}
// Case 2: Surat asli dengan disposisi masuk (bukan child surat)
if (!$userPendingDisposisi) {
$userPendingDisposisi = $suratMasuk->disposisi()
->whereHas('kepadaUsers', function($q) {
$q->where('user_id', auth()->id());
})
->whereIn('status', ['pending', 'dibaca', 'diproses'])
->first();
}
// Untuk TU/Operator TU: Tentukan apakah ini "Perlu Dilengkapi" atau "Mohon Diselesaikan"
if ($userPendingDisposisi && (auth()->user()->isTU() || auth()->user()->isOperatorTU())) {
$pengirim = $userPendingDisposisi->dariUser;
$userSatuan = auth()->user()->satuan;
$pengirimSatuan = $pengirim->satuan ?? null;
// Cek apakah pengirim adalah atasan langsung (pimpinan satuan sendiri)
$isFromSuperior = $userPendingDisposisi->pengirim_id === auth()->user()->superior_id;
// Cek apakah dari satuan yang sama
$isFromSameSatuan = $pengirimSatuan === $userSatuan;
// Cek apakah dari Panglima/Wapang
$isFromPangwapang = $pengirim && ($pengirim->isPanglima() || $pengirim->isWakilPanglima());
// Logic:
// 1. Child surat dari cross-satuan → Perlu Dilengkapi (lembar disposisi satuan ini)
// 2. Dari pimpinan satuan sendiri (superior) → Mohon Diselesaikan (perintah langsung)
// 3. Dari satuan SAMA tapi bukan superior → Mohon Diselesaikan
// 4. Dari satuan BERBEDA → Perlu Dilengkapi (perlu diteruskan ke pimpinan satuan)
// 5. Dari Panglima/Wapang:
// - Jika status_agenda = 'menunggu_agenda' → Perlu Dilengkapi
// - Jika status_agenda = 'diagendakan' atau null → Mohon Diselesaikan
if ($isChildSuratCrossSatuan && !$isFromSameSatuan && !$isFromSuperior) {
// Child surat dari satuan berbeda → perlu dilengkapi lembar
$tuNeedsToFillLembar = true;
} elseif ($isFromSuperior || $isFromSameSatuan) {
// Dari pimpinan satuan sendiri atau satuan sama → langsung proses
$tuNeedsToProcess = true;
} elseif ($isFromPangwapang) {
// Dari Panglima/Wapang - cek status_agenda
if ($userPendingDisposisi->status_agenda === 'menunggu_agenda') {
$tuNeedsToFillLembar = true;
} else {
// Sudah diagendakan atau perintah langsung
$tuNeedsToProcess = true;
}
} else {
// Dari satuan berbeda (bukan Pangwapang) → perlu dilengkapi
$tuNeedsToFillLembar = true;
}
}
@endphp
{{-- PAURMIN/Sekretariat Pimpinan: Dua opsi terpisah (HANYA jika belum ada disposisi ke user ini) --}}
@if($suratMasuk->isMenungguAgenda() && auth()->user()->isPAURMIN() && !$userPendingDisposisi)
{{-- Button 1: Lengkapi Lembar Disposisi (untuk Pimpinan Utama) --}}
Lengkapi Lembar Disposisi
{{-- Button 2: Teruskan Surat (untuk Pimpinan Satuan/Staff) --}}
Teruskan Surat
Untuk surat ke Pimpinan Satuan/Staff lainnya
@endif
{{-- TU/Operator TU: Lengkapi Lembar Disposisi biasa (HANYA jika belum ada disposisi ke user ini ATAU ada disposisi dari satuan berbeda/Pangwapang yang perlu dilengkapi) --}}
@php
// TU: responsible untuk surat ke diri sendiri atau superior (pimpinan)
// Operator TU: responsible untuk surat ke diri sendiri, superior (TU), atau grand-superior (pimpinan TU)
$grandSuperiorId = auth()->user()->superior?->superior_id;
$isResponsibleTU = $suratMasuk->tujuan_akhir_id == auth()->user()->superior_id
|| $suratMasuk->tujuan_akhir_id == auth()->id()
|| ($grandSuperiorId && $suratMasuk->tujuan_akhir_id == $grandSuperiorId);
// Cek apakah TU IT - jika ya, hanya teruskan ke SES IT
$isTUIT = auth()->user()->isTU() && strtoupper(auth()->user()->satuan ?? '') === 'IT';
$isTUOrOperator = auth()->user()->isTU() || auth()->user()->isOperatorTU();
@endphp
@if(!$sminPangwapangRoute && (($suratMasuk->isMenungguAgenda() && $isTUOrOperator && !$userPendingDisposisi && $isResponsibleTU) || ($userPendingDisposisi && $isTUOrOperator && $tuNeedsToFillLembar)))
@if($tuNeedsToFillLembar && $userPendingDisposisi)
{{-- Disposisi dari satuan berbeda/Pangwapang - perlu lengkapi lembar --}}
Lengkapi Lembar Disposisi
{{-- Info alert di-hide --}}
@elseif($isTUIT)
{{-- TU IT: Teruskan ke SES IT --}}
@else
{{-- Surat masuk baru yang perlu dilengkapi lembar disposisinya --}}
@php
$pimpinanTU = auth()->user()->superior;
$pimpinanLabel = $pimpinanTU ? $pimpinanTU->jabatan_with_satuan : 'Pimpinan';
@endphp
Lengkapi Lembar Disposisi
{{-- Info alert di-hide --}}
@endif
@endif
{{-- KASMIN tidak perlu aksi di menunggu_agenda - surat akan masuk ke KASMIN setelah PAURMIN lengkapi --}}
{{-- SES IT: Lengkapi Lembar Disposisi dan pilih pimpinan IT --}}
@php
$isSesITUser = auth()->user()->isSesIT();
$sesITIsResponsible = $isSesITUser && $suratMasuk->tujuan_akhir_id == auth()->id();
@endphp
@if($suratMasuk->isMenungguAgenda() && $isSesITUser && $sesITIsResponsible && !$userPendingDisposisi)
Lengkapi Lembar Disposisi
Lengkapi lembar disposisi dan pilih pimpinan IT tujuan
@endif
{{-- Verifikasi Surat (untuk KASMIN - surat menunggu verifikasi dari PAURMIN) (HANYA jika belum ada disposisi ke user ini) --}}
@if($suratMasuk->isMenungguVerifikasiKasmin() && auth()->user()->isKASMIN() && !$userPendingDisposisi)
{{-- Button 1: Verifikasi & Teruskan ke Panglima --}}
Verifikasi & Teruskan
Surat ke Panglima/Wakil Panglima akan diverifikasi KASMIN lalu siap diproses.
@endif
{{-- Action untuk Penerima Disposisi --}}
@php
// Gunakan $userPendingDisposisi yang sudah dihitung di atas
$pendingDisposisiForUser = $userPendingDisposisi;
// Check if user has subordinates for forwarding disposisi
$hasSubordinates = auth()->user()->hasSubordinates();
$userCanCreateDisposisi = auth()->user()->canCreateDisposisi();
// Disposisi bisa diproses jika:
// 1. Sudah diagendakan oleh TU (status_agenda = 'diagendakan')
// 2. ATAU disposisi langsung tanpa melalui TU (status_agenda = null dan status bukan 'selesai')
// 3. ATAU user adalah TU/Operator TU yang menerima disposisi dan perlu proses (bukan lengkapi)
$isTuOrOperatorTU = auth()->user()->isTU() || auth()->user()->isOperatorTU();
$isTuNeedsProcess = $isTuOrOperatorTU && $pendingDisposisiForUser && $tuNeedsToProcess;
$canProcessDisposisi = $pendingDisposisiForUser &&
($pendingDisposisiForUser->isDiagendakan() ||
(is_null($pendingDisposisiForUser->status_agenda) && $pendingDisposisiForUser->status !== 'selesai') ||
$isTuNeedsProcess);
// Jika TU/Operator TU perlu lengkapi lembar, tidak bisa proses dulu
if ($isTuOrOperatorTU && $tuNeedsToFillLembar) {
$canProcessDisposisi = false;
}
// Cek apakah user adalah TU/Operator TU dan menerima disposisi dari atasannya (pimpinan)
// Jika ya, tidak boleh disposisi lagi (akan loop)
$isReceivingFromSuperior = $pendingDisposisiForUser &&
$pendingDisposisiForUser->pengirim_id === auth()->user()->superior_id;
// TU/Operator TU yang menerima disposisi dari pimpinan tidak boleh forward
$isTuReceivingFromPimpinan = $isTuOrOperatorTU && $isReceivingFromSuperior;
@endphp
@php
// Gunakan query langsung ke database untuk memastikan akurasi
$hasAlreadyDisposisiCard = \App\Models\Disposisi::where('surat_masuk_id', $suratMasuk->id)
->where('pengirim_id', auth()->id())
->exists();
@endphp
@if($pendingDisposisiForUser && $canProcessDisposisi)
@if(!$hasAlreadyDisposisiCard)
{{-- Jika user punya bawahan dan bisa create disposisi, tampilkan opsi forward --}}
{{-- KECUALI: TU yang menerima disposisi dari pimpinan (akan loop) --}}
@if($hasSubordinates && $userCanCreateDisposisi && !$isTuReceivingFromPimpinan)
Disposisikan ke Bawahan
@endif
@if($pendingDisposisiForUser->status === 'pending' || $pendingDisposisiForUser->status === 'dibaca')
@endif
@else
Sudah didisposisikan ke bawahan
@endif
@endif
{{-- Create Disposisi (untuk pimpinan yang menerima surat tapi bukan dari disposisi) --}}
@php
// Surat bisa didisposisikan jika:
// 1. Sudah diagendakan oleh TU (status_agenda = 'diagendakan')
// 2. ATAU surat langsung tanpa melalui TU (status_agenda = null dan status bukan 'selesai' atau 'menunggu_agenda')
// Note: 'menunggu_agenda' berarti lembar disposisi belum diisi, jadi belum bisa didisposisikan
$suratCanBeDisposed = !$suratMasuk->belumSiapUntukPimpinanUtama() && (
$suratMasuk->isDiagendakan() ||
(is_null($suratMasuk->status_agenda) && !in_array($suratMasuk->status, ['selesai', 'menunggu_agenda']))
);
// Cek apakah user sudah pernah membuat disposisi (hanya boleh sekali)
// Gunakan query langsung ke database untuk memastikan akurasi
$hasAlreadyDisposisiCreate = \App\Models\Disposisi::where('surat_masuk_id', $suratMasuk->id)
->where('pengirim_id', auth()->id())
->exists();
// SES IT tidak boleh buat disposisi - mereka hanya lengkapi lembar dan teruskan ke pimpinan IT
$isSesITUser = auth()->user()->isSesIT();
@endphp
@if(isset($canCreateDisposisi) && $canCreateDisposisi && $suratCanBeDisposed && !$pendingDisposisiForUser && !$hasAlreadyDisposisiCreate && !$isSesITUser)
Buat Disposisi
@endif
{{-- Selesaikan Surat langsung untuk tembusan operator (bukan TU) --}}
@php
$tembusanOperatorIsResponsible = $suratMasuk->is_tembusan && $suratMasuk->status === 'diagendakan'
&& $suratMasuk->tujuanAkhir && $suratMasuk->tujuanAkhir->id == auth()->user()->superior_id
&& auth()->user()->role === 'operator';
@endphp
@if($tembusanOperatorIsResponsible)
@php
$tembusanHasDisposisi2 = \App\Models\Disposisi::where('surat_masuk_id', $suratMasuk->id)->exists();
@endphp
@if(!$tembusanHasDisposisi2)
@endif
@endif
{{-- Cetak Lembar Disposisi (Panglima/Wapang: hanya Kasmin/Paurmin, lainnya: penerima + satuan dibawahnya, tapi bukan pembuat) --}}
@php
// Ambil disposisi terakhir untuk surat ini menggunakan query langsung
$latestDisposisiAction = \App\Models\Disposisi::where('surat_masuk_id', $suratMasuk->id)
->orderBy('created_at', 'desc')
->first();
@endphp
@if($latestDisposisiAction)
@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)
$isCreatorAction = $latestDisposisiAction->pengirim_id == auth()->id();
$isFromPanglimaAction = $latestDisposisiAction->dariUser && (
$latestDisposisiAction->dariUser->isPanglima() ||
$latestDisposisiAction->dariUser->isWakilPanglima()
);
if ($isSetumTU) {
// SETUM TU selalu bisa print semua cetak lembar
$canPrintLembarAction = true;
} elseif ($isCreatorAction) {
// Pembuat disposisi tidak boleh print
$canPrintLembarAction = false;
} elseif ($isFromPanglimaAction) {
$userRoleAction = strtolower(auth()->user()->jabatan_role ?? '');
$canPrintLembarAction = str_contains($userRoleAction, 'kasmin') || str_contains($userRoleAction, 'paurmin') || str_contains($userRoleAction, 'paurmin_smin');
} else {
$isRecipientAction = $latestDisposisiAction->kepadaUsers->contains('id', auth()->id());
$recipientSatuansAction = $latestDisposisiAction->kepadaUsers->pluck('satuan')->unique()->toArray();
$isInRecipientSatuanAction = in_array(auth()->user()->satuan, $recipientSatuansAction);
$canPrintLembarAction = $isRecipientAction || $isInRecipientSatuanAction;
}
@endphp
@if($canPrintLembarAction)
Cetak Lembar Disposisi
@endif
@endif
{{-- Edit & Hapus Surat (untuk pembuat sebelum disposisi, admin, dan hak khusus edit untuk KASMIN) --}}
@php
// Hak penuh edit + hapus (creator awal / admin, sebelum ada disposisi)
$canDeleteSurat = $suratMasuk->canBeModifiedBy(auth()->user());
// Hak edit (termasuk ganti PDF):
// - sama seperti delete, PLUS KASMIN boleh selalu mengedit
$canEditSurat = $canDeleteSurat || auth()->user()->isKASMIN();
// Hak recall/tarik surat ke draft
$canRecallSurat = $suratMasuk->canRecall(auth()->user());
@endphp
@if($canEditSurat)
@if($canRecallSurat)
@endif
Edit Surat Masuk
@if($canDeleteSurat)
@if(auth()->user()->isAdmin())
Akses Admin
@else
Dapat diedit/dihapus karena belum ada disposisi.
@endif
@endif
@endif
{{-- Back to Dashboard/List --}}
@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();
@endphp
@if($shouldGoToDashboard)
Kembali ke Dashboard
@else
Kembali ke List
@endif