189 lines
5.7 KiB
PHP
189 lines
5.7 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Attendance;
|
|
use App\Models\UserDosen;
|
|
use App\Models\UserStaff;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
|
|
class WelcomeController extends Controller
|
|
{
|
|
/**
|
|
* Display the welcome/management dashboard
|
|
*/
|
|
public function index()
|
|
{
|
|
// Jika user sudah login, ambil data user dan attendance
|
|
// Jika belum login, tampilkan halaman welcome dengan data default
|
|
|
|
$nama = null;
|
|
$durasiMingguan = null;
|
|
|
|
// Cek apakah ada user yang sudah login
|
|
if (Auth::check()) {
|
|
$user = Auth::user();
|
|
$nama = $user->nama ?? null;
|
|
|
|
// Ambil data durasi mingguan dari attendance table
|
|
try {
|
|
$durasiMingguan = Attendance::getDurationByDayThisWeek($user->id);
|
|
} catch (\Exception $e) {
|
|
// Jika table belum dibuat, gunakan data default
|
|
$durasiMingguan = [
|
|
'Senin' => 7.5,
|
|
'Selasa' => 6.8,
|
|
'Rabu' => 8.2,
|
|
'Kamis' => 7.1,
|
|
'Jumat' => 5.4,
|
|
];
|
|
}
|
|
} else {
|
|
// Data default jika tidak ada user terautentikasi
|
|
$nama = 'Dosen/Staff';
|
|
$durasiMingguan = [
|
|
'Senin' => 7.5,
|
|
'Selasa' => 6.8,
|
|
'Rabu' => 8.2,
|
|
'Kamis' => 7.1,
|
|
'Jumat' => 5.4,
|
|
];
|
|
}
|
|
|
|
return view('welcome', [
|
|
'nama' => $nama,
|
|
'durasiMingguan' => $durasiMingguan,
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Get attendance data for a specific user
|
|
* API endpoint untuk parsing data
|
|
*/
|
|
public function getAttendanceData(Request $request)
|
|
{
|
|
if (!Auth::check()) {
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'User tidak terautentikasi',
|
|
], 401);
|
|
}
|
|
|
|
$user = Auth::user();
|
|
|
|
try {
|
|
$durasiMingguan = Attendance::getDurationByDayThisWeek($user->id);
|
|
} catch (\Exception $e) {
|
|
// Jika table belum dibuat, gunakan data default
|
|
$durasiMingguan = [
|
|
'Senin' => 7.5,
|
|
'Selasa' => 6.8,
|
|
'Rabu' => 8.2,
|
|
'Kamis' => 7.1,
|
|
'Jumat' => 5.4,
|
|
];
|
|
}
|
|
|
|
$totalJam = array_sum($durasiMingguan);
|
|
|
|
return response()->json([
|
|
'success' => true,
|
|
'nama' => $user->nama,
|
|
'durasiMingguan' => $durasiMingguan,
|
|
'totalJam' => round($totalJam, 2),
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Record user check-in/check-out attendance
|
|
*/
|
|
public function recordAttendance(Request $request)
|
|
{
|
|
if (!Auth::check()) {
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'User tidak terautentikasi',
|
|
], 401);
|
|
}
|
|
|
|
try {
|
|
$validated = $request->validate([
|
|
'action' => 'required|in:check_in,check_out', // check_in atau check_out
|
|
]);
|
|
|
|
$user = Auth::user();
|
|
$today = now()->toDateString();
|
|
|
|
// Cari atau buat record attendance untuk hari ini
|
|
$attendance = Attendance::firstOrCreate(
|
|
[
|
|
'user_id' => $user->id,
|
|
'tanggal' => $today,
|
|
],
|
|
[
|
|
'user_type' => $user instanceof UserDosen ? 'dosen' : 'staff',
|
|
]
|
|
);
|
|
|
|
if ($validated['action'] === 'check_in') {
|
|
$attendance->jam_masuk = now()->toTimeString();
|
|
$attendance->keterangan = 'hadir';
|
|
} else {
|
|
$attendance->jam_keluar = now()->toTimeString();
|
|
|
|
// Hitung durasi jika sudah ada jam_masuk
|
|
if ($attendance->jam_masuk) {
|
|
$masuk = \Carbon\Carbon::createFromTimeString($attendance->jam_masuk);
|
|
$keluar = \Carbon\Carbon::createFromTimeString($attendance->jam_keluar);
|
|
$durasi = $masuk->diffInMinutes($keluar) / 60; // convert ke jam
|
|
$attendance->durasi_jam = round($durasi, 2);
|
|
}
|
|
}
|
|
|
|
$attendance->save();
|
|
|
|
return response()->json([
|
|
'success' => true,
|
|
'message' => $validated['action'] === 'check_in' ? 'Check-in berhasil' : 'Check-out berhasil',
|
|
'attendance' => $attendance,
|
|
]);
|
|
} catch (\Exception $e) {
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Attendance table belum tersedia. Jalankan migration terlebih dahulu.',
|
|
'error' => $e->getMessage(),
|
|
], 500);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Update status (online/tidak bisa diganggu)
|
|
*/
|
|
public function updateStatus(Request $request)
|
|
{
|
|
if (!Auth::check()) {
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'User tidak terautentikasi',
|
|
], 401);
|
|
}
|
|
|
|
$validated = $request->validate([
|
|
'status' => 'required|in:online,dnd', // dnd = do not disturb
|
|
]);
|
|
|
|
$user = Auth::user();
|
|
|
|
// Simpan status ke session atau database
|
|
// Untuk sekarang, simpan di session
|
|
session(['user_status' => $validated['status']]);
|
|
|
|
return response()->json([
|
|
'success' => true,
|
|
'message' => 'Status diperbarui',
|
|
'status' => $validated['status'],
|
|
]);
|
|
}
|
|
}
|