From 95ed1fb6ba7f2af34ede0af61c05da677085ab72 Mon Sep 17 00:00:00 2001 From: Dimas <124556325+Diz09@users.noreply.github.com> Date: Tue, 1 Jul 2025 08:25:22 +0700 Subject: [PATCH] add slip gaji --- app/Http/Controllers/GajiController.php | 84 +++++++++ public/js/gaji.js | 5 + resources/views/operator/gaji/index.blade.php | 11 +- resources/views/operator/gaji/slip.blade.php | 178 ++++++++++++++++++ routes/web.php | 2 + 5 files changed, 279 insertions(+), 1 deletion(-) create mode 100644 resources/views/operator/gaji/slip.blade.php diff --git a/app/Http/Controllers/GajiController.php b/app/Http/Controllers/GajiController.php index c064962..4c7da56 100644 --- a/app/Http/Controllers/GajiController.php +++ b/app/Http/Controllers/GajiController.php @@ -7,6 +7,7 @@ use Carbon\CarbonPeriod; use Carbon\Carbon; +use Barryvdh\DomPDF\Facade\Pdf; use App\Models\Karyawan; use App\Models\Kloter; @@ -259,4 +260,87 @@ public function export($id) return Excel::download(new GajiKloterExport($data, $tanggalUnik), 'detail_gaji_' . $kloter->nama_kloter . '.xlsx'); } + + public function unduhSlipGaji($id) + { + $kloter = Kloter::with(['presensis.karyawan', 'tonIkan'])->findOrFail($id); + + $tanggalUnik = $kloter->presensis + ->pluck('tanggal') + ->unique() + ->sort() + ->map(fn ($tgl) => Carbon::parse($tgl)) + ->values(); + + $dataKaryawan = $kloter->presensis->groupBy('karyawan_id'); + $banyakPekerja = $dataKaryawan->count(); + + $jumlahTon = $kloter->tonIkan->jumlah_ton ?? 0; + $hargaPerTon = $kloter->tonIkan->harga_ikan_per_ton ?? 1000000; + + $gajiPerJamGlobal = $banyakPekerja > 0 ? ($jumlahTon * $hargaPerTon) / $banyakPekerja : 0; + + $slipData = []; + + foreach ($dataKaryawan as $karyawanId => $presensis) { + $karyawan = $presensis->first()->karyawan; + + $jamPerTanggal = []; + $totalJam = 0; + + foreach ($tanggalUnik as $tanggal) { + $presensi = $presensis->firstWhere('tanggal', $tanggal->toDateString()); + $jamKerja = 0; + + if ($presensi && $presensi->jam_masuk && $presensi->jam_pulang) { + $jamMasuk = strtotime($presensi->jam_masuk); + $jamPulang = strtotime($presensi->jam_pulang); + $jamKerja = ($jamPulang - $jamMasuk) / 3600; + } + + $jamPerTanggal[$tanggal->format('d-M-Y')] = $jamKerja; + $totalJam += $jamKerja; + } + + $gajiPerJam = $karyawan->jenis_kelamin === 'P' + ? $gajiPerJamGlobal * 0.6 + : $gajiPerJamGlobal; + + $totalGaji = $gajiPerJam * $totalJam; + + $slipData[] = [ + 'karyawan' => $karyawan, + 'jam_per_tanggal' => $jamPerTanggal, + 'total_jam' => $totalJam, + 'gaji_per_jam' => round($gajiPerJam), + 'total_gaji' => round($totalGaji), + ]; + } + + $tanggalCetak = now()->translatedFormat('d F Y'); + + $pdf = Pdf::loadView('operator.gaji.slip', [ + 'kloter' => $kloter, + 'tanggalCetak' => $tanggalCetak, + 'slipData' => $slipData, + // bila template butuh periode: + 'tanggalMulai' => Carbon::parse($kloter->tanggal_mulai), + 'tanggalAkhir' => Carbon::parse($kloter->tanggal_akhir), + ]) + ->setPaper('A4', 'portrait'); + + // Untuk mengunduh file PDF + return $pdf->download('slip_gaji_kloter_'.$kloter->id.'.pdf'); + + // Jika ingin menampilkan di browser, gunakan: + // return view('operator.gaji.slip', [ + // 'kloter' => $kloter, + // 'tanggalCetak' => $tanggalCetak, + // 'slipData' => $slipData, + // // bila template butuh periode: + // 'tanggalMulai' => Carbon::parse($kloter->tanggal_mulai), + // 'tanggalAkhir' => Carbon::parse($kloter->tanggal_akhir), + // ]); + } + } diff --git a/public/js/gaji.js b/public/js/gaji.js index e943d11..2ec4a10 100644 --- a/public/js/gaji.js +++ b/public/js/gaji.js @@ -80,6 +80,11 @@ document.addEventListener("DOMContentLoaded", function () { }).then((result) => { if (result.isConfirmed) { form.submit(); + const kloterId = form.getAttribute('data-kloter-id'); + const tombolUnduh = document.getElementById(`unduh-kloter-${kloterId}`); + if (tombolUnduh) { + tombolUnduh.style.display = 'inline-block'; + } } }); }); diff --git a/resources/views/operator/gaji/index.blade.php b/resources/views/operator/gaji/index.blade.php index 10ab61e..b6f2ea8 100644 --- a/resources/views/operator/gaji/index.blade.php +++ b/resources/views/operator/gaji/index.blade.php @@ -64,11 +64,20 @@ @if ($isSelesai) Selesai + + Unduh Slip Gaji + @else -
+ @csrf
+ @endif diff --git a/resources/views/operator/gaji/slip.blade.php b/resources/views/operator/gaji/slip.blade.php new file mode 100644 index 0000000..031e8eb --- /dev/null +++ b/resources/views/operator/gaji/slip.blade.php @@ -0,0 +1,178 @@ + + + + + Slip Gaji Kloter {{ $kloter->id }} + + + + @foreach ($slipData as $slip) +
+
+

UD. DNL PUTRA

+

KP.Nyamplong, Desa Sumberanyar, Kecamatan Banyuputih, Kabupaten Situbondo

+

Telp: 0812-3913-9713 | Email: info@ud-dnlputra.com

+
+
+ +

SLIP GAJI KARYAWAN
Periode: {{ $tanggalMulai->format('d M Y') }} - {{ $tanggalAkhir->format('d M Y') }}

+ + + + + + + + + + + + + + + + + + + + + + +
Nama Karyawan:{{ $slip['karyawan']->nama }}
Jenis Kelamin:{{ $slip['karyawan']->jenis_kelamin == 'L' ? 'Laki-laki' : 'Perempuan' }}
Kloter:{{ $kloter->id }}
Tanggal Cetak:{{ $tanggalCetak }}
+ + + + + + + @foreach ($slip['jam_per_tanggal'] as $tanggal => $jam) + + + + + @endforeach + + + + + +
TanggalJam Kerja
{{ $tanggal }}{{ floor($jam) }} jam {{ round(($jam - floor($jam)) * 60) }} menit
Total{{ floor($slip['total_jam']) }} jam {{ round(($slip['total_jam'] - floor($slip['total_jam'])) * 60) }} menit
+ + + + + +
Gaji per JamRp{{ number_format($slip['gaji_per_jam'], 0, ',', '.') }}
Total Jam Kerja{{ floor($slip['total_jam']) }} jam {{ round(($slip['total_jam'] - floor($slip['total_jam'])) * 60) }} menit
Total GajiRp{{ number_format($slip['total_gaji'], 0, ',', '.') }}
+ + + + + + +
+ Mengetahui,




+ Poniman +
+ Diterima oleh,




+ {{ $slip['karyawan']->nama }} +
+
+
+ @endforeach + + diff --git a/routes/web.php b/routes/web.php index 6bcaafb..ccc9ed6 100644 --- a/routes/web.php +++ b/routes/web.php @@ -189,6 +189,8 @@ // export Route::get('/gaji/kloter/{id}/export', [GajiController::class, 'export'])->name('gaji.kloter.export'); + Route::get('/gaji/{kloter}/unduh-slip', [GajiController::class, 'unduhSlipGaji'])->name('gaji.unduh'); + Route::get('operator/transaksi/export', [TransaksiController::class, 'exportExcel'])->name('operator.transaksi.export'); Route::get('/laporan/transaksi/export-pdf', [TransaksiController::class, 'exportPDF'])->name('operator.transaksi.export_pdf');