SIPDAM/samooapk/laravel/app/Http/Controllers/Api/GajiApiController.php

117 lines
4.6 KiB
PHP

<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\Penggajian;
use Illuminate\Http\Request;
use Exception;
class GajiApiController extends Controller
{
/**
* GET - Riwayat penggajian teknisi
*/
public function riwayat(Request $request)
{
try {
$idTeknisi = $request->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);
}
}
}