SDM, Absensi & Gaji

Mencatat absensi manual, lembur shift, rekap parameter gaji pokok/tunjangan karyawan, serta mencetak slip gaji berformat PNG premium.

@if($successMessage)
✅ {{ $successMessage }}
@endif @if($errorMessage)
⚠️ {{ $errorMessage }}
@endif
@if($activeTab === 'payroll')
Tampilkan:
@forelse($payrolls as $pay) @empty @endforelse @if($payrolls->isNotEmpty()) @endif
No. Slip Gaji Karyawan Gaji Pokok Tunjangan Lembur Potongan Gaji Bersih Status Aksi
{{ $pay->payroll_number }} {{ $pay->user->name }} {{ $pay->user->salary->position ?? 'Staff' }} Rp {{ number_format($pay->basic_salary, 0, ',', '.') }} Rp {{ number_format($pay->allowance_total, 0, ',', '.') }} +Rp {{ number_format($pay->overtime_total, 0, ',', '.') }} -Rp {{ number_format($pay->deduction_total, 0, ',', '.') }} Rp {{ number_format($pay->net_salary, 0, ',', '.') }} @if($pay->status === 'paid') DIBAYAR @else DRAFT @endif @if($pay->status !== 'paid') @endif
Belum ada slip gaji digenerasi untuk periode ini.
TOTAL Halaman Ini: Rp {{ number_format($payrolls->sum('basic_salary'), 0, ',', '.') }} Rp {{ number_format($payrolls->sum('allowance_total'), 0, ',', '.') }} +Rp {{ number_format($payrolls->sum('overtime_total'), 0, ',', '.') }} -Rp {{ number_format($payrolls->sum('deduction_total'), 0, ',', '.') }} Rp {{ number_format($payrolls->sum('net_salary'), 0, ',', '.') }}
{{ $payrolls->links() }}
@endif @if($activeTab === 'attendance')
📅 PILIH TANGGAL PRESENSI HARIAN:

📋 Lembar Absensi Karyawan Harian

Mengisi absensi sekaligus untuk seluruh staf pada tanggal {{ date('d M Y', strtotime($att_date)) }}

@forelse($employees as $emp) @empty @endforelse
Nama Karyawan Jabatan / Role Cabang Status Kehadiran
{{ $emp->name }} {{ $emp->salary->position ?? 'Staff' }} {{ $emp->branch->name ?? 'Kantor Pusat' }}
Tidak ada karyawan aktif untuk dicatat absensinya.

🕒 Ringkasan Harian & Riwayat Presensi

Daftar rekap kehadiran staf yang dikelompokkan per tanggal

Tampilkan:
@forelse($attendanceGroups as $group) @empty @endforelse
Tanggal Rekap Kehadiran Aksi / Koreksi
📅 {{ date('d M Y', strtotime($group->date)) }}
🟢 HADIR: {{ (int)$group->present_count }} 🟡 SAKIT: {{ (int)$group->sick_count }} 🔵 IZIN: {{ (int)$group->leave_count }} 🔘 LIBUR: {{ (int)$group->alpha_count }}
Belum ada riwayat presensi harian yang tercatat.
{{ $attendanceGroups->links() }}
@endif @if($activeTab === 'overtime')

Input Lembur Shift

💡 Terisi otomatis dari parameter gaji karyawan

📋 Daftar Log Lembur Karyawan

Seluruh catatan lembur staf

Tampilkan:
@forelse($overtimes as $ot) @empty @endforelse
Tanggal Nama Karyawan Jumlah Jam Tarif / Jam Total Lembur Tugas
{{ date('d M Y', strtotime($ot->date)) }} {{ $ot->user->name }} {{ $ot->hours }} Jam Rp {{ number_format($ot->rate_per_hour, 0, ',', '.') }} Rp {{ number_format($ot->total_amount, 0, ',', '.') }} {{ $ot->description ?? '-' }}
Belum ada log lembur.
@if($overtimes->hasPages())
{{ $overtimes->links() }}
@endif
@endif @if($activeTab === 'parameter')

Set Parameter Gaji

🎁 Detail Tunjangan
⚠️ Detail Potongan

📋 Setelan Gaji & Jabatan Staf

Daftar parameter upah, tunjangan, dan potongan karyawan

Tampilkan:
@forelse($salaries as $sal) @empty @endforelse
Nama Karyawan Jabatan & Masuk Gaji Pokok Rate Lembur Detail Tunjangan Detail Potongan Aksi
{{ $sal->user->name }} @if($sal->user->is_active) 🟢 Aktif @else 🔴 Resign @endif
{{ $sal->position }} Mulai: {{ $sal->join_date ? $sal->join_date->format('d-M-Y') : '-' }} Rp {{ number_format($sal->basic_salary, 0, ',', '.') }} Rp {{ number_format($sal->overtime_rate, 0, ',', '.') }}/jam
🚗 Rp {{ number_format($sal->transport_allowance, 0, ',', '.') }}/hari 🎖️ Rp {{ number_format($sal->service_allowance, 0, ',', '.') }} (TMK)
Absent: -Rp {{ number_format($sal->absent_deduction, 0, ',', '.') }}/hari
Belum ada parameter gaji karyawan dikonfigurasi.
@if($salaries->hasPages())
{{ $salaries->links() }}
@endif
@endif @if($activeTab === 'recap')
Periode: {{ Carbon\Carbon::create($recap_year, $recap_month, 1)->translatedFormat('F Y') }}
@if(!empty($recap_user_id) && $individualSummary)
🟢
Total Hadir {{ $individualSummary['present'] }} Hari
🟡
Total Sakit {{ $individualSummary['sick'] }} Hari
🔵
Total Izin {{ $individualSummary['leave'] }} Hari
🔘
Total Libur {{ $individualSummary['alpha'] }} Hari
Total Lembur {{ $individualSummary['overtime_hours'] ?? 0 }} Jam Rp {{ number_format($individualSummary['overtime_pay'] ?? 0, 0, ',', '.') }}
💸
Total Kasbon Rp {{ number_format($individualSummary['kasbon_total'] ?? 0, 0, ',', '.') }} Periode Terpilih
@endif

@if(empty($recap_user_id)) 📊 Rekapitulasi Kehadiran Seluruh Karyawan @else 📋 Rincian Kehadiran: {{ $employees->firstWhere('id', $recap_user_id)->name ?? 'Karyawan' }} @endif

Menampilkan rekaman absensi periode {{ Carbon\Carbon::create($recap_year, $recap_month, 1)->translatedFormat('F Y') }}

@if(empty($recap_user_id)) @forelse($recapData as $row) @php $totalDays = $row->present_count + $row->sick_count + $row->leave_count + $row->alpha_count; $ratio = $totalDays > 0 ? round(($row->present_count / $totalDays) * 100) : 0; @endphp @empty @endforelse
Nama Karyawan Jabatan / Cabang 🟢 Hadir 🟡 Sakit 🔵 Izin 🔘 Libur ⏰ Lembur 📊 Rasio Kehadiran
{{ $row->name }} {{ $row->salary->position ?? 'Staff' }} 🏢 {{ $row->branch->name ?? 'Kantor Pusat' }} {{ $row->present_count }} Hari {{ $row->sick_count }} Hari {{ $row->leave_count }} Hari {{ $row->alpha_count }} Hari {{ $row->overtime_hours_sum ?? 0 }} Jam
{{ $ratio }}%
Tidak ada data karyawan aktif ditemukan.
@else @forelse($recapDetails as $detail) @php $ot = $userOvertimes[date('Y-m-d', strtotime($detail->date))] ?? null; @endphp @empty @endforelse
Tanggal Hari Status Kehadiran ⏰ Lembur Shift Tipe Pencatatan
📅 {{ date('d M Y', strtotime($detail->date)) }} {{ Carbon\Carbon::parse($detail->date)->translatedFormat('l') }} @if($detail->status === 'present') 🟢 HADIR @elseif($detail->status === 'sick') 🟡 SAKIT @elseif($detail->status === 'leave') 🔵 IZIN @else 🔘 LIBUR @endif @if($ot) ⚡ {{ $ot->hours }} Jam @else - @endif MANUAL ERP
Tidak ada log presensi tercatat untuk karyawan ini pada periode terpilih.
@endif
@endif @if($isPayModalOpen)

Metode Bayar Gaji

@endif @if($isPreviewModalOpen)

{{ $previewSlipTitle }}

Preview & Bagikan Slip Gaji

Slip Gaji
@endif @if($showHistoryModal && $historyUser)

📜 Riwayat & Histori Karyawan

@if($historyUser->is_active) 🟢 Aktif @else 🔴 Resign @endif

Profile lengkap, performa kehadiran, dan rekam jejak gaji bulanan

👤 Informasi Profil

Nama Lengkap {{ $historyUser->name }}
Jabatan / Posisi {{ $historyUser->salary->position ?? 'Staff' }}
Tanggal Masuk {{ $historyUser->salary->join_date ? $historyUser->salary->join_date->format('d F Y') : '-' }}
Cabang Penugasan {{ $historyUser->branch->name ?? 'Kantor Pusat' }}

📊 Akumulasi Lifetime & Performa

Total Hadir
{{ $historyStats['total_present'] ?? 0 }} Hari
Total Sakit
{{ $historyStats['total_sick'] ?? 0 }} Hari
Total Izin
{{ $historyStats['total_leave'] ?? 0 }} Hari
Total Libur
{{ $historyStats['total_alpha'] ?? 0 }} Hari
Total Lembur
{{ $historyStats['total_overtime_hours'] ?? 0 }} Jam
Rp {{ number_format($historyStats['total_overtime_pay'] ?? 0, 0, ',', '.') }}
Gaji Diterima
Rp {{ number_format($historyStats['total_net_salary'] ?? 0, 0, ',', '.') }} Terbayar

🕒 Riwayat Slip Gaji Bulanan

@forelse($historyPayrolls as $pay) @php $monthNames = [ 1=>'Januari', 2=>'Februari', 3=>'Maret', 4=>'April', 5=>'Mei', 6=>'Juni', 7=>'Juli', 8=>'Agustus', 9=>'September', 10=>'Oktober', 11=>'November', 12=>'Desember' ]; $monthStr = $monthNames[$pay->month] ?? 'Bulan'; @endphp @empty @endforelse
Periode No. Slip Gaji Pokok Tunjangan Lembur Potongan Gaji Bersih Status Slip PNG
{{ $monthStr }} {{ $pay->year }} {{ $pay->payroll_number }} Rp {{ number_format($pay->basic_salary, 0, ',', '.') }} Rp {{ number_format($pay->allowance_total, 0, ',', '.') }} +Rp {{ number_format($pay->overtime_total, 0, ',', '.') }} -Rp {{ number_format($pay->deduction_total, 0, ',', '.') }} Rp {{ number_format($pay->net_salary, 0, ',', '.') }} @if($pay->status === 'paid') DIBAYAR @else DRAFT @endif
Belum ada riwayat slip gaji tercatat.
@endif