input('id_teknisi'); if (!$idTeknisi) { return response()->json([ 'success' => false, 'message' => 'ID Teknisi tidak ditemukan' ], 401); } $teknisi = Teknisi::findOrFail($idTeknisi); // 1. Tugas Hari Ini / Aktif $tugasAktif = Penugasan::where(function ($q) use ($idTeknisi) { $q->where('id_teknisi', $idTeknisi) ->orWhereHas('timTeknisi', function ($sq) use ($idTeknisi) { $sq->where('id_teknisi', $idTeknisi); }); }) ->whereIn('status_pekerjaan', ['belum_mulai', 'dalam_proses']) ->count(); // 2. Gaji Bulan Berjalan (Estimasi Ongkos Kerja) $now = Carbon::now(); $estimasiGaji = Penugasan::where(function ($q) use ($idTeknisi) { $q->where('id_teknisi', $idTeknisi) ->orWhereHas('timTeknisi', function ($sq) use ($idTeknisi) { $sq->where('id_teknisi', $idTeknisi); }); }) ->where('status_pekerjaan', 'selesai') ->whereMonth('tanggal_diselesaikan', $now->month) ->whereYear('tanggal_diselesaikan', $now->year) ->get() ->sum(function($t) use ($idTeknisi) { // Jika tim, bagi ongkos if ($t->id_teknisi != $idTeknisi) { $jumlahTim = $t->timTeknisi->count(); return $jumlahTim > 0 ? $t->total_nilai_pekerjaan / $jumlahTim : 0; } return $t->total_nilai_pekerjaan; }); // 3. Total Kasbon Aktif $totalKasbon = Kasbon::where('id_teknisi', $idTeknisi) ->where('status', 'belum_lunas') ->sum('jumlah_kasbon'); // 4. Gaji Terakhir Diterima $gajiTerakhir = Penggajian::where('id_teknisi', $idTeknisi) ->where('status_pembayaran', 'sudah_bayar') ->orderBy('periode_tahun', 'desc') ->orderBy('periode_bulan', 'desc') ->first(); return response()->json([ 'success' => true, 'message' => 'Data dashboard berhasil diambil', 'data' => [ 'teknisi' => [ 'nama' => $teknisi->nama, 'spesialisasi' => $teknisi->spesialisasi, 'foto' => $teknisi->foto_url ], 'statistik' => [ 'tugas_aktif' => $tugasAktif, 'estimasi_gaji' => (float) $estimasiGaji, 'total_kasbon' => (float) $totalKasbon, 'gaji_terakhir' => $gajiTerakhir ? (float) $gajiTerakhir->gaji_bersih : 0, 'periode_terakhir' => $gajiTerakhir ? Penggajian::getNamaBulan($gajiTerakhir->periode_bulan) . ' ' . $gajiTerakhir->periode_tahun : '-' ] ] ]); } catch (Exception $e) { return response()->json([ 'success' => false, 'message' => 'Gagal mengambil data dashboard: ' . $e->getMessage() ], 500); } } }