{{-- Action Card --}}
@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.
{{-- Button 2: Teruskan Surat (ke Pimpinan lain) --}} Teruskan ke Pimpinan Lain
Untuk surat ke Pimpinan Satuan/Staff lainnya
@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
{{-- Modal Konfirmasi Selesaikan Surat (untuk tembusan operator) --}} @if($suratMasuk->is_tembusan && $suratMasuk->status === 'diagendakan' && $suratMasuk->tujuanAkhir && $suratMasuk->tujuanAkhir->id == auth()->user()->superior_id && auth()->user()->role === 'operator') @php $tembusanHasDisposisi3 = \App\Models\Disposisi::where('surat_masuk_id', $suratMasuk->id)->exists(); @endphp @if(!$tembusanHasDisposisi3) @endif @endif {{-- Modal Konfirmasi Teruskan ke SES IT --}} @if(isset($isTUIT) && $isTUIT && $suratMasuk->isMenungguAgenda()) @endif {{-- Modal Konfirmasi Tarik Surat --}} @if(isset($canRecallSurat) && $canRecallSurat) @endif {{-- Modal Konfirmasi Hapus Surat Masuk --}} @if(isset($canDeleteSurat) && $canDeleteSurat) @endif