@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 ================================================================ --}}
Menunggu Persetujuan
Approval HRD
@forelse ($approvalItems as $detail) @php $primary = ''; if (isset($table_primary_d) && count($table_primary_d) > 0) { foreach ($table_primary_d as $p) { $primary = $primary == '' ? $detail->{$p->field} : $primary . ':' . $detail->{$p->field}; } } if ($primary == '' && isset($detail->id)) { $primary = $detail->id; } $rawStatus = $detail->request_status ?? 'review'; $status = strtolower($rawStatus); if (in_array($status, ['approved'], true)) { $status = 'review'; } elseif ($status === 'reject') { $status = 'rejected'; } elseif (in_array($status, ['canceled', 'cancelled'], true)) { $status = 'cancel'; } $statusText = $status === 'review' ? 'review' : $status; $badgeClass = 'status-badge status-' . ($statusText ?: 'review'); $dateValue = $detail->created_at ?? $detail->tanggal ?? $detail->date ?? null; $displayDate = $dateValue ? \Illuminate\Support\Carbon::parse($dateValue)->format('d-m-Y') : '-'; $displayNote = $detail->hrd_note ?? '-'; $pengadaanEstimatedStart = $formatDateInput($detail->pengadaan_estimated_started_at ?? null); $pengadaanEstimatedEnd = $formatDateInput($detail->pengadaan_estimated_ended_at ?? null); $pengerjaanEstimatedStart = $formatDateInput($detail->pengerjaan_estimated_started_at ?? null); $pengerjaanEstimatedEnd = $formatDateInput($detail->pengerjaan_estimated_ended_at ?? null); @endphp @empty @endforelse
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 }}
Daftar Pengajuan
Menunggu penyelesaian
@forelse ($pendingItems as $detail) @php $primary = ''; if (isset($table_primary_d) && count($table_primary_d) > 0) { foreach ($table_primary_d as $p) { $primary = $primary == '' ? $detail->{$p->field} : $primary . ':' . $detail->{$p->field}; } } if ($primary == '' && isset($detail->id)) { $primary = $detail->id; } $rawStatus = $detail->request_status ?? ''; $status = strtolower($rawStatus); if (in_array($status, ['approved'], true)) { $status = 'review'; } elseif ($status === 'reject') { $status = 'rejected'; } elseif (in_array($status, ['canceled', 'cancelled'], true)) { $status = 'cancel'; } $badgeClass = 'status-badge status-' . ($status ?: 'pending'); $dateValue = $detail->created_at ?? $detail->tanggal ?? $detail->date ?? null; $displayDate = $dateValue ? \Illuminate\Support\Carbon::parse($dateValue)->format('d-m-Y') : '-'; $displayNote = $detail->hrd_note ?? '-'; $pengadaanEstimatedStart = $formatDateInput($detail->pengadaan_estimated_started_at ?? null); $pengadaanEstimatedEnd = $formatDateInput($detail->pengadaan_estimated_ended_at ?? null); $pengerjaanEstimatedStart = $formatDateInput($detail->pengerjaan_estimated_started_at ?? null); $pengerjaanEstimatedEnd = $formatDateInput($detail->pengerjaan_estimated_ended_at ?? null); $displayPengadaanEstimate = $formatDateRange($detail->pengadaan_estimated_started_at ?? null, $detail->pengadaan_estimated_ended_at ?? null); $displayPengerjaanEstimate = $formatDateRange($detail->pengerjaan_estimated_started_at ?? null, $detail->pengerjaan_estimated_ended_at ?? null); @endphp @empty @endforelse
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 }}
Riwayat Pengajuan
Total selesai: {{ $historyItems->count() }}
@forelse ($historyItems as $detail) @php $rawStatus = $detail->request_status ?? ''; $status = strtolower($rawStatus); if (in_array($status, ['pending', 'approved'], true)) { $status = 'review'; } elseif ($status === 'reject') { $status = 'rejected'; } elseif (in_array($status, ['canceled', 'cancelled'], true)) { $status = 'cancel'; } $dateValue = $detail->created_at ?? $detail->tanggal ?? $detail->date ?? null; $displayDate = $dateValue ? \Illuminate\Support\Carbon::parse($dateValue)->format('d-m-Y') : '-'; // Format Waktu Pengadaan sebagai range if ($detail->pengadaan_started_at) { $startPengadaan = \Illuminate\Support\Carbon::parse($detail->pengadaan_started_at)->format('d-m-Y'); if ($detail->pengadaan_ended_at) { $endPengadaan = \Illuminate\Support\Carbon::parse($detail->pengadaan_ended_at)->format('d-m-Y'); $displayPengadaan = $startPengadaan . ' s/d ' . $endPengadaan; } else { $displayPengadaan = $startPengadaan . ' s/d -'; } } else { $displayPengadaan = '-'; } // Format Waktu Pengerjaan sebagai range if ($detail->pengerjaan_started_at) { $startPengerjaan = \Illuminate\Support\Carbon::parse($detail->pengerjaan_started_at)->format('d-m-Y'); if ($detail->pengerjaan_ended_at) { $endPengerjaan = \Illuminate\Support\Carbon::parse($detail->pengerjaan_ended_at)->format('d-m-Y'); $displayPengerjaan = $startPengerjaan . ' s/d ' . $endPengerjaan; } else { $displayPengerjaan = $startPengerjaan . ' s/d -'; } } else { $displayPengerjaan = '-'; } @endphp @empty @endforelse
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 }}
@push('js') @endpush