input('id_teknisi'); if (!$idTeknisi) { return response()->json([ 'success' => false, 'message' => 'ID Teknisi tidak ditemukan' ], 401); } $riwayat = Penggajian::where('id_teknisi', $idTeknisi) ->orderBy('periode_tahun', 'desc') ->orderBy('periode_bulan', 'desc') ->paginate(12); $riwayat->getCollection()->transform(function ($item) { return [ 'id_penggajian' => $item->id_penggajian, 'periode_bulan' => $item->periode_bulan, 'periode_tahun' => $item->periode_tahun, 'nama_bulan' => Penggajian::getNamaBulan($item->periode_bulan), 'tanggal_penggajian' => $item->tanggal_penggajian->format('d M Y'), 'total_ongkos' => (float) $item->total_ongkos_pekerjaan, 'potongan_kasbon' => (float) $item->total_kasbon, 'potongan_makan' => (float) $item->biaya_makan, 'gaji_bersih' => (float) $item->gaji_bersih, 'status_pembayaran' => $item->status_pembayaran, 'is_paid' => $item->isPaid(), ]; }); return response()->json([ 'success' => true, 'message' => 'Riwayat gaji berhasil diambil', 'data' => $riwayat ]); } catch (Exception $e) { return response()->json([ 'success' => false, 'message' => 'Gagal mengambil data: ' . $e->getMessage() ], 500); } } /** * GET - Detail slip gaji */ public function show(Request $request, $id) { try { $idTeknisi = $request->input('id_teknisi'); $penggajian = Penggajian::with(['detailPenggajian.penugasan'])->findOrFail($id); // Keamanan: Pastikan teknisi hanya bisa lihat gajinya sendiri if ($idTeknisi && $penggajian->id_teknisi != $idTeknisi) { return response()->json([ 'success' => false, 'message' => 'Akses ditolak' ], 403); } $details = $penggajian->detailPenggajian->map(function ($detail) { return [ 'id_penugasan' => $detail->id_penugasan, 'pekerjaan' => $detail->penugasan->label_jenis_pekerjaan ?? 'Pekerjaan', 'lokasi' => $detail->lokasi, 'bagian_ongkos' => (float) $detail->bagian_ongkos, 'rincian' => $detail->rincian_pekerjaan, 'tanggal_selesai' => $detail->tanggal_selesai ? $detail->tanggal_selesai->format('d/m/Y') : '-', ]; }); return response()->json([ 'success' => true, 'message' => 'Detail gaji berhasil diambil', 'data' => [ 'header' => [ 'id_penggajian' => $penggajian->id_penggajian, 'periode' => Penggajian::getNamaBulan($penggajian->periode_bulan) . ' ' . $penggajian->periode_tahun, 'tanggal_hitung' => $penggajian->tanggal_penggajian->format('d M Y'), 'hari_kerja' => $penggajian->jumlah_hari_kerja, 'gaji_kotor' => (float) $penggajian->total_ongkos_pekerjaan, 'potongan_kasbon' => (float) $penggajian->total_kasbon, 'potongan_makan' => (float) $penggajian->biaya_makan, 'gaji_bersih' => (float) $penggajian->gaji_bersih, 'status_pembayaran' => $penggajian->status_pembayaran, ], 'items' => $details ] ]); } catch (Exception $e) { return response()->json([ 'success' => false, 'message' => 'Data tidak ditemukan: ' . $e->getMessage() ], 404); } } }