@php $hrdRoute = $puRouteBases['trhrd'] ?? 'pengajuan-hrd'; // Get real data untuk HRD approval $items = $table_detail_d ?? collect(); // Jika kosong, query langsung dari database if ($items->isEmpty()) { $items = \Illuminate\Support\Facades\DB::table('tr_non_periodic') ->leftJoin('ms_area', 'tr_non_periodic.area_id', '=', 'ms_area.id') ->leftJoin('users as worker', 'tr_non_periodic.worker_id', '=', 'worker.id') ->select( 'tr_non_periodic.*', 'ms_area.nama_area as area_name', \Illuminate\Support\Facades\DB::raw("CONCAT(COALESCE(worker.firstname, ''), ' ', COALESCE(worker.lastname, '')) as worker_name") ) ->orderBy('tr_non_periodic.created_at', 'desc') ->get(); } // Pastikan area_name selalu tersedia untuk tampilan tabel $areaMap = \Illuminate\Support\Facades\DB::table('ms_area') ->pluck('nama_area', 'id'); // Query petugas untuk dropdown - prefer ms_employee.nama $workers = \Illuminate\Support\Facades\DB::table('users') ->leftJoin('ms_employee as emp', 'users.id', '=', 'emp.user_id') ->where(function ($q) { $q->whereRaw("FIND_IN_SET('ptgoff', REPLACE(LOWER(users.idroles), ' ', ''))") ->orWhereRaw("FIND_IN_SET('ptgspu', REPLACE(LOWER(users.idroles), ' ', ''))"); }) ->where('users.isactive', '1') ->select('users.id', 'users.idroles', 'users.firstname', 'users.lastname', 'emp.nama as emp_name') ->orderBy('emp.nama') ->orderBy('users.firstname') ->get() ->map(function ($worker) { $worker->display_name = trim(($worker->emp_name ?? '') ?: trim(($worker->firstname ?? '') . ' ' . ($worker->lastname ?? ''))) ?: ($worker->idroles ?? ''); return $worker; }) ->unique('display_name') ->values(); $displayItems = $items->map(function ($item) use ($areaMap) { if (empty($item->area_name) && !empty($item->area_id)) { $item->area_name = $areaMap->get((int) $item->area_id) ?? $areaMap->get((string) $item->area_id); } return $item; }); $formatDateInput = function ($value) { if (empty($value) || $value === '0000-00-00' || $value === '0000-00-00 00:00:00') { return ''; } return \Illuminate\Support\Carbon::parse($value)->format('Y-m-d'); }; $formatDateRange = function ($start, $end) { if (empty($start) || $start === '0000-00-00' || $start === '0000-00-00 00:00:00') { return '-'; } $startDate = \Illuminate\Support\Carbon::parse($start)->format('d-m-Y'); $endDate = (!empty($end) && $end !== '0000-00-00' && $end !== '0000-00-00 00:00:00') ? \Illuminate\Support\Carbon::parse($end)->format('d-m-Y') : '-'; return $startDate . ' s/d ' . $endDate; }; // Step 1: approval items dari head (status review dan belum di-approval HRD) $approvalItems = $displayItems->filter(function ($item) { $statusValue = strtolower($item->request_status ?? ''); return in_array($statusValue, ['review', 'pending', 'approved']) && !empty($item->head_approval_date) && empty($item->hrd_approval_date); }); // Step 2: in-progress items setelah HRD approve $pendingItems = $displayItems->filter(function ($item) { $statusValue = strtolower($item->request_status ?? ''); return !empty($item->hrd_approval_date) && in_array($statusValue, ['review', 'pengadaan', 'pengerjaan']); }); // History items - status yang sudah selesai atau ditolak $historyItems = $displayItems->filter(function ($item) { $statusValue = strtolower($item->request_status ?? ''); return in_array($statusValue, ['completed', 'rejected', 'reject', 'cancel', 'cancelled', 'canceled']); }); @endphp {{-- ================================================================ TAB: Approval HRD (trhrd) HRD approval & status tracking after head approval ================================================================ --}}
| Aksi | ID Trans | Tanggal Pengajuan | Area | Deskripsi | Status | Catatan HRD |
|---|---|---|---|---|---|---|
|
|
{{ $detail->id_trans ?: '-' }} | {{ $displayDate }} | {{ $detail->area_name ?? $detail->area ?? $detail->area_id ?? '-' }} | {{ $detail->job_description ?? $detail->description ?? '-' }} | {{ $statusText ?: 'approved' }} | {{ $displayNote }} |
| Aksi | ID Trans | Tanggal Pengajuan | Area | Deskripsi | Pelaksana | Status | Estimasi | Catatan HRD |
|---|---|---|---|---|---|---|---|---|
|
{{-- Button View --}}
{{-- Button Toggle --}}
|
{{ $detail->id_trans ?: '-' }} | {{ $displayDate }} | {{ $detail->area_name ?? $detail->area ?? $detail->area_id ?? '-' }} | {{ $detail->job_description ?? $detail->description ?? '-' }} | @if ($detail->work_type === 'vendor') {{ $detail->vendor_name ?? '-' }} @elseif ($detail->work_type === 'internal') @php $pelaksanaLabel = null; // Prioritas 1: petugas_names (JSON) — diisi petugas saat konfirmasi selesai if (!empty($detail->petugas_names)) { $names = is_array($detail->petugas_names) ? $detail->petugas_names : json_decode($detail->petugas_names, true); if (is_array($names)) { $filtered = array_values(array_filter($names)); if (!empty($filtered)) { $pelaksanaLabel = implode(', ', $filtered); } } } // Prioritas 2: worker_name dari join users if (!$pelaksanaLabel) { $workerNameRaw = trim((string) ($detail->worker_name ?? '')); if ($workerNameRaw !== '') { $pelaksanaLabel = $workerNameRaw; } } // Prioritas 3: ms_employee.nama via worker_id if (!$pelaksanaLabel && !empty($detail->worker_id)) { $empName = \Illuminate\Support\Facades\DB::table('ms_employee') ->where('user_id', $detail->worker_id) ->where('is_active', '1') ->value('nama'); if ($empName) $pelaksanaLabel = $empName; } @endphp {{ $pelaksanaLabel ?: '-' }} @else - @endif | {{ $status ?: 'pending' }} |
Pengadaan: {{ $displayPengadaanEstimate }}
Pengerjaan: {{ $displayPengerjaanEstimate }}
|
{{ $displayNote }} |
| ID Trans | Tanggal Pengajuan | Area | Deskripsi | Pelaksana | Waktu Pengadaan | Waktu Pengerjaan |
|---|---|---|---|---|---|---|
| {{ $detail->id_trans ?: '-' }} | {{ $displayDate }} | {{ $detail->area_name ?? $detail->area ?? $detail->area_id ?? '-' }} | {{ $detail->job_description ?? $detail->description ?? '-' }} | @if ($detail->work_type === 'vendor') {{ $detail->vendor_name ?? '-' }} @elseif ($detail->work_type === 'internal') @php $pelaksanaLabel = null; // Prioritas 1: petugas_names (JSON) — diisi petugas saat konfirmasi selesai if (!empty($detail->petugas_names)) { $names = is_array($detail->petugas_names) ? $detail->petugas_names : json_decode($detail->petugas_names, true); if (is_array($names)) { $filtered = array_values(array_filter($names)); if (!empty($filtered)) { $pelaksanaLabel = implode(', ', $filtered); } } } // Prioritas 2: worker_name dari join users if (!$pelaksanaLabel) { $workerNameRaw = trim((string) ($detail->worker_name ?? '')); if ($workerNameRaw !== '') { $pelaksanaLabel = $workerNameRaw; } } // Prioritas 3: ms_employee.nama via worker_id if (!$pelaksanaLabel && !empty($detail->worker_id)) { $empName = \Illuminate\Support\Facades\DB::table('ms_employee') ->where('user_id', $detail->worker_id) ->where('is_active', '1') ->value('nama'); if ($empName) $pelaksanaLabel = $empName; } @endphp {{ $pelaksanaLabel ?: '-' }} @else - @endif | {{ $displayPengadaan }} | {{ $displayPengerjaan }} |