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 -
+ + Unduh Slip Gaji + @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 @@ + + + + +KP.Nyamplong, Desa Sumberanyar, Kecamatan Banyuputih, Kabupaten Situbondo
+Telp: 0812-3913-9713 | Email: info@ud-dnlputra.com
+Nama Karyawan | +: | +{{ $slip['karyawan']->nama }} | +
Jenis Kelamin | +: | +{{ $slip['karyawan']->jenis_kelamin == 'L' ? 'Laki-laki' : 'Perempuan' }} | +
Kloter | +: | +{{ $kloter->id }} | +
Tanggal Cetak | +: | +{{ $tanggalCetak }} | +
Tanggal | Jam 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 Jam | Rp{{ 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 Gaji | Rp{{ number_format($slip['total_gaji'], 0, ',', '.') }} |
+ Mengetahui, + Poniman + |
+
+ Diterima oleh, + {{ $slip['karyawan']->nama }} + |
+