PT. TROCON INDAH PERKASA

{{ $title }}
@php // Nominal di header diambil dari DATA hasil payroll (bukan field master periode yg 0): // utk tarif yang beda per karyawan/proyek (TLK Varian B, TLM) dipakai baris pertama // yang punya hari, karena angkanya memang sama/default di semua data. $e0 = $results->first()?->employee; $firstTlk = $results->first(fn ($x) => (float) $x->travel_allowance > 0 && (float) $x->tunj_luar_kota > 0); // TLK header: prioritas tarif master proyek sesuai status (Staff → tunj_luar_kota_staff, // Tenaga Kerja → tunj_luar_kota_tk) bila proyek dipilih & terisi; jika tidak (semua proyek // / proyek tanpa tarif) fallback ke tarif hasil data (baris pertama yg punya hari). $tlkProject = $project ? (float) ((int) $type === 1 ? $project->tunj_luar_kota_staff : $project->tunj_luar_kota_tk) : 0.0; $rateTlkHdr = $tlkProject > 0 ? $tlkProject : ($firstTlk ? round((float) $firstTlk->tunj_luar_kota / (float) $firstTlk->travel_allowance, 2) : (float) ($e0?->tunj_luar_kota ?: $period->tunj_luar_kota)); $firstTlm = $results->first(fn ($x) => (float) $x->overtime_hours_night > 0 && (float) $x->tunj_malam > 0); $rateTlmHdr = $firstTlm ? round((float) $firstTlm->tunj_malam / (float) $firstTlm->overtime_hours_night, 2) : (float) ($e0?->tunj_malam ?: $period->tunj_malam); $firstLembur = $results->first(fn ($x) => (float) ($x->employee?->overtime_rate ?: $x->employee?->tunj_lembur) > 0); $rateLemburHdr = (float) ($firstLembur?->employee?->overtime_rate ?: $firstLembur?->employee?->tunj_lembur ?: $e0?->staffStatus?->tunj_lembur ?: $period->tunj_lembur); $rateTelatHdr = (float) ($e0?->pot_telat ?: $period->pot_telat); @endphp
@if ($type === 2) @endif
Proyek: {{ $project?->name ?? 'Semua Proyek' }}
Periode: {{ \Carbon\Carbon::parse($period->start_date)->format('d/m/Y') }} s/d {{ \Carbon\Carbon::parse($period->end_date)->format('d/m/Y') }}
Tunjangan Luar Kota: {{ number_format($rateTlkHdr, 0, ',', '.') }}
Tunjangan Malam: {{ number_format($rateTlmHdr, 0, ',', '.') }}
Jam Lembur: {{ number_format($rateLemburHdr, 0, ',', '.') }}
Potongan Telat: {{ number_format($rateTelatHdr, 0, ',', '.') }}
{{-- No --}} {{-- Nama --}} {{-- UM / Upah --}} @foreach ($dates as $d) {{-- Masuk --}} {{-- Keluar --}} @endforeach {{-- Masuk (Hari kerja) --}} {{-- TLK --}} {{-- TLM --}} {{-- Pot. Telat --}} @if ($type === 1) {{-- Insentif Produksi --}} {{-- Total UM --}} @else {{-- Upah Lembur --}} {{-- Upah Harian --}} {{-- Insentif --}} @endif {{-- TLK,TLM, Pot Telat --}} {{-- Grand Total --}} {{-- TTD --}} {{-- Baris A: tanggal --}} @foreach ($dates as $d) @endforeach {{-- Baris B: nama hari + label kolom --}} @foreach ($dates as $d) @endforeach @if ($type === 1) @else @endif {{-- Baris C: sub-kolom --}} @foreach ($dates as $d) @endforeach @php // Nilai kolom "TLK,TLM, Pot Telat" (= legacy payroll.totalallowance / total_produksi): // INSENTIF + TLK + TLM − Pot Telat. Baris lama yang total_allowance-nya masih 0 // (hasil simpan sebelum rumus ini) dihitung ulang dari komponennya. $allowOf = fn ($r) => (float) $r->total_allowance ?: ((float) $r->incentive + (float) $r->tunj_luar_kota + (float) $r->tunj_malam - (float) $r->pot_telat); @endphp @forelse ($results as $idx => $r) @php $e = $r->employee; $m = $matrix[$r->employee_id . '|' . ($r->project_id ?? 'x')] ?? []; $dayJob = (float) $r->day_job; $rate = $type === 1 ? ((float) $r->meal_allowance ?: (float) ($e?->meal_allowance)) : ((float) ($e?->basic_salary) ?: ($dayJob > 0 ? (float) $r->base_wage / $dayJob : 0)); $tlk = (float) $r->travel_allowance ?: (float) $r->tunj_luar_kota; $tlm = (float) $r->overtime_hours_night; $potTelat = (float) $r->pot_telat; $insentif = (float) $r->incentive; $upahLembur = (float) $r->overtime_amount; $upah = (float) $r->base_wage; $totalUM = (float) $r->total_meal_amount ?: (float) $r->meal_total; $totalAllow = $allowOf($r); $thp = (float) $r->thp; $totalWork = array_sum(array_column(array_values($m), 'work')); $otHrs = (float) ($r->overtime_hours ?? 0); $otHrsFmt = fmod($otHrs, 1.0) == 0.0 ? number_format($otHrs, 0, ',', '.') : number_format($otHrs, 1, ',', '.'); $fmt = fn ($v) => number_format((float) $v, 0, ',', '.'); @endphp @foreach ($dates as $d) @php $c = $m[$d['date']] ?? null; @endphp {{-- Jam tampil apa adanya (jam aktual bila telat/melebihi shift) — tanpa tebal. --}} @endforeach @if ($type === 1) @else @endif @foreach ($dates as $d) @php $c = $m[$d['date']] ?? null; @endphp @endforeach @empty @endforelse @if ($results->count()) {{-- Baris TOTAL: 2 kolom rekap dijumlahkan → "TLK,TLM, Pot Telat" dan "Grand Total" --}} @endif
{{ $d['label'] }}
No Nama {{ $type === 1 ? 'UM' : 'Upah' }}{{ $d['day'] }}Hari kerjaInsentif Produksi Total UMUpah Lembur Upah InsentifTLK,TLM, Pot Telat Grand Total TTD
Masuk KeluarMasuk TLK TLM Pot. Telat {{ $type === 1 ? '' : 'Harian' }}
{{ $idx + 1 }} {{ $e?->nik ?? '' }}
{{ $e?->name ?? '' }}
{{ $fmt($rate) }}{{ $c && $c['in'] ? $c['in'] : '-' }} {{ $c && $c['out'] ? $c['out'] : '-' }}{{ $fmt($dayJob) }} {{ $fmt($tlk) }} {{ $fmt($tlm) }} {{ $fmt($potTelat) }}{{ $fmt($insentif) }} {{ $fmt($totalUM) }}{{ $fmt($upahLembur) }} {{ $fmt($upah) }} {{ $fmt($insentif) }}{{ $fmt($totalAllow) }} {{ $fmt($thp) }} @if ($type === 1)
{{ $fmt($totalWork) }} @elseif ($otHrs > 0)
{{ $otHrsFmt }}@endif
{{ $c ? $c['work'] : '' }}
Tidak ada data payroll untuk periode ini.
TOTAL {{ number_format((float) $results->sum($allowOf), 0, ',', '.') }} {{ number_format((float) $results->sum('thp'), 0, ',', '.') }}

Mengetahui,

( Project Manager )
( Site Manager )

Dibuat Oleh,

( Site Engineer / Admin )