@php use Illuminate\Support\Facades\DB; // Get detail rows from trs_sample_d $details = DB::table('trs_sample_d') ->leftJoin('mst_aplikasi', 'trs_sample_d.aplikasi', '=', 'mst_aplikasi.id') ->leftJoin('mst_detail', 'trs_sample_d.id_detail', '=', 'mst_detail.id') ->where('trs_sample_d.id_sample', $doc->id_sample) ->where('trs_sample_d.isactive', '1') ->select('trs_sample_d.*', 'mst_aplikasi.nama as aplikasi_nama', 'mst_detail.nama as detail_nama') ->orderBy('trs_sample_d.id') ->get(); // Get approval record for this sample dengan approver dan level yang sama // FIXED: Untuk pending, ambil yang statusnya Pending. Untuk decided, gunakan approval_status yang sudah di-attach if ($isPending) { $approvalRecord = DB::table('trs_approval') ->where('id_sample', $doc->id_sample) ->where('id_approval', $approver->id) ->where('level', $approval->level) ->where('status', 'Pending') ->first(); $currentStatus = $approvalRecord ? $approvalRecord->status : 'Pending'; } else { // Untuk decided docs, gunakan approval_status yang sudah di-attach di controller $currentStatus = isset($doc->approval_status) ? $doc->approval_status : 'Pending'; // Ambil approval record untuk token $approvalRecord = DB::table('trs_approval') ->where('id_sample', $doc->id_sample) ->where('id_approval', $approver->id) ->where('level', $approval->level) ->whereIn('status', ['Accepted', 'Approved', 'Rejected']) ->first(); } // Get token untuk sample ini - gunakan token dari approval record atau dari property doc jika ada $sampleToken = $approvalRecord ? $approvalRecord->token : (isset($doc->approval_token) ? $doc->approval_token : $token); // Check if locked (rejected) $isLocked = !$isPending && isset($rejectedBy[$doc->id_sample]); // Prepare logo base64 $logoPath = public_path('storage/secondary_logo.png'); $logoType = pathinfo($logoPath, PATHINFO_EXTENSION); $logoData = file_get_contents($logoPath); $base64 = 'data:image/' . $logoType . ';base64,' . base64_encode($logoData); // Format deadline $deadlineFormatted = $doc->deadline ? \Carbon\Carbon::parse($doc->deadline)->translatedFormat('d F Y') : '-'; $sampleDateFormatted = $doc->sample_date ? \Carbon\Carbon::parse($doc->sample_date)->translatedFormat('d F Y') : ($doc->created_at ? \Carbon\Carbon::parse($doc->created_at)->translatedFormat('d F Y') : '-'); // Fetch Ship To Name if exists $shipToName = null; if (!empty($doc->ship_to)) { $shipToName = DB::table('mst_customer')->where('id', $doc->ship_to)->value('nama'); } @endphp
@if ($isLocked)
Perhatian: Dokumen ini telah DITOLAK oleh {{ $rejectedBy[$doc->id_sample] }}. Anda tidak dapat memproses dokumen ini.
@endif {{-- Header --}}
Company Logo

No. {{ $doc->id_sample }}

STATUS: @if ($currentStatus === 'Approved' || $currentStatus === 'Accepted') ACCEPTED @elseif ($currentStatus === 'Rejected') REJECTED @else PENDING @endif

Pengajuan Sample
Customer: {{ $doc->customer ?? '-' }} Project: {{ $doc->project ?? '-' }} End User: {{ $doc->end_user ?? '-' }} Deliver To: {{ $doc->deliver_to ?? '-' }} Attention To: {{ $doc->attn_to ?? '-' }}
Deadline: {{ $deadlineFormatted }} Sales: {{ $doc->nama_slsman ?? $doc->nama_sales ?? '-' }} Classify: {{ $doc->classify_sample ?? '-' }} @if ($doc->classify_sample === 'Improved' && !empty($doc->gedung_sample)) Gedung: {{ $doc->gedung_sample }} @endif @if (!empty($doc->ship_to)) Ship To: {{ $doc->ship_to }}{{ $shipToName ? ' - ' . $shipToName : '' }} @endif
{{-- TABLE --}}
@foreach ($details as $i => $item) @endforeach
No Aplikasi Detail Warna Deskripsi Item Gsm Width Length Qty UOM
{{ $i + 1 }} {{ $item->aplikasi_nama }} {{ $item->detail_nama ?? '-' }} {{ $item->color ?? '-' }} {{ $item->item }} {{ $item->size_gsm }} {{ $item->size_width }} {{ $item->size_length }} {{ $item->qty }} {{ $item->uom }}
{{-- Display previous notes di bawah tabel dengan layout ramping --}} @if (isset($doc->previous_notes) && !empty($doc->previous_notes))
Catatan
@foreach ($doc->previous_notes as $index => $note)
{{ $note['level_label'] ?? $note['level'] }} @if (isset($note['date'])) {{ \Carbon\Carbon::parse($note['date'])->format('d/m/Y H:i') }} @endif

{{ trim($note['note']) }}

@endforeach
@endif @php $isDecided = in_array($currentStatus, ['Accepted', 'Approved', 'Rejected']); $existingNote = $approvalRecord->approval_note ?? ''; $currentLevel = $approval->level ?? 0; $docClassify = strtoupper(trim($doc->classify_sample ?? '')); $nextTitle = ''; if ($currentLevel == 1) { $nextTitle = 'Head Marketing'; } elseif ($currentLevel == 2) { $nextTitle = 'Manager Marketing'; } elseif ($currentLevel == 3) { if ($docClassify === 'IMPROVED') { $nextTitle = 'SPV Gedung'; } else { $nextTitle = 'SPV PD'; } } elseif ($currentLevel == 4) { $nextTitle = 'SPV PD'; } $placeholderText = "Pesan akan diteruskan ke " . ($nextTitle ?: 'pihak terkait') . "\n Jika Reject: note penolakan dapat diisi setelah menekan tombol Reject."; @endphp @if (!empty($is_cc_mode)) {{-- CC MODE: Hanya tampilkan banner informasi, tidak ada form action --}}
Anda menerima email ini sebagai CC — tidak diperlukan tindakan
@elseif ($isPending && !$isDecided)
@elseif ($isDecided)
Keputusan Terkirim:
Status: @if ($currentStatus === 'Accepted' || $currentStatus === 'Approved') ACCEPTED @else REJECTED @endif
Catatan Anda:

{{ $existingNote ?: '(Tidak ada catatan)' }}

@elseif ($isPending && isset($doc->isViewOnly) && $doc->isViewOnly)
Informasi Sample (View Only - Harus melalui QC View Form)
@endif