'date', 'jam_masuk' => 'time', 'jam_keluar' => 'time', ]; public $timestamps = true; /** * Generate UUID untuk new records */ protected static function boot(): void { parent::boot(); static::creating(function ($model) { if (empty($model->{$model->getKeyName()})) { $model->{$model->getKeyName()} = \Illuminate\Support\Str::uuid()->toString(); } }); } /** * Get duration attendance for each day this week * Return array dengan format: ['Senin' => 7.5, 'Selasa' => 6.8, ...] */ public static function getDurationByDayThisWeek($userId) { $today = Carbon::today(); $startOfWeek = $today->copy()->startOfWeek(Carbon::MONDAY); $endOfWeek = $today->copy()->endOfWeek(Carbon::SUNDAY); $attendances = self::where('user_id', $userId) ->whereBetween('tanggal', [$startOfWeek, $endOfWeek]) ->get(); // Map hari dalam Bahasa Indonesia $daysIndonesian = [ 'Monday' => 'Senin', 'Tuesday' => 'Selasa', 'Wednesday' => 'Rabu', 'Thursday' => 'Kamis', 'Friday' => 'Jumat', 'Saturday' => 'Sabtu', 'Sunday' => 'Minggu', ]; // Initialize durasi untuk Senin - Jumat (workdays) $durasiMingguan = [ 'Senin' => 0, 'Selasa' => 0, 'Rabu' => 0, 'Kamis' => 0, 'Jumat' => 0, ]; // Fill durasi dari data attendance foreach ($attendances as $attendance) { $dayName = $attendance->tanggal->format('l'); // e.g., 'Monday' $dayIndonesian = $daysIndonesian[$dayName] ?? null; if ($dayIndonesian && isset($durasiMingguan[$dayIndonesian])) { $durasiMingguan[$dayIndonesian] = $attendance->durasi_jam ?? 0; } } return $durasiMingguan; } /** * Relationship to User (polymorphic concept) */ public function userDosen() { return $this->belongsTo(UserDosen::class, 'user_id', 'id'); } public function userStaff() { return $this->belongsTo(UserStaff::class, 'user_id', 'id'); } }