Merge branch 'master' of https://gitea.nswteam.net/joseph/ManagementSystem
This commit is contained in:
		
						commit
						2eed0f006b
					
				| 
						 | 
				
			
			@ -39,7 +39,7 @@ class CheckUserAttendanceJob implements ShouldQueue
 | 
			
		|||
        // Lấy tất cả người dùng
 | 
			
		||||
        $users = User::where('permission', 'not like', '%admin%')->get();
 | 
			
		||||
        foreach ($users as $key => $user) {
 | 
			
		||||
            // if ($user->id != 2) {
 | 
			
		||||
            // if ($user->id != 4) {
 | 
			
		||||
            //     continue;
 | 
			
		||||
            // }
 | 
			
		||||
            // Kiểm tra dựa trên period (Sáng 'S' hoặc Chiều 'C')
 | 
			
		||||
| 
						 | 
				
			
			@ -69,18 +69,71 @@ class CheckUserAttendanceJob implements ShouldQueue
 | 
			
		|||
        $hasCheckIn = $records->where('status', 'check in')->isNotEmpty();
 | 
			
		||||
        $hasCheckOut = $records->where('status', 'check out')->isNotEmpty();
 | 
			
		||||
 | 
			
		||||
        // Kiểm tra nếu đã có ticket chờ xử lý hoặc đã được xác nhận
 | 
			
		||||
        // Kiểm tra nếu đã có ticket chờ xử lý hoặc đã được xác nhận, cho cả sáng và chiều
 | 
			
		||||
        $existingTicket = Ticket::where('user_id', $userId)
 | 
			
		||||
            ->where('start_date', $today->format('Y-m-d'))
 | 
			
		||||
            ->where('start_period', $periodCode)
 | 
			
		||||
            ->where(function ($query) use ($today, $periodCode) {
 | 
			
		||||
                // Check for tickets that exactly cover the current day and period
 | 
			
		||||
                $query->where(function ($subQuery) use ($today, $periodCode) {
 | 
			
		||||
                    $subQuery->where('start_date', $today->format('Y-m-d'))
 | 
			
		||||
                        ->where('end_date', $today->format('Y-m-d'))
 | 
			
		||||
            ->where('end_period', $periodCode)
 | 
			
		||||
                        ->where(function ($periodQuery) use ($periodCode) {
 | 
			
		||||
                            // Check if the ticket covers the current period
 | 
			
		||||
                            $periodQuery->where('start_period', $periodCode)
 | 
			
		||||
                                ->orWhere(function ($query) {
 | 
			
		||||
                                    // Check for a full-day ticket (S -> C)
 | 
			
		||||
                                    $query->where('start_period', 'S')
 | 
			
		||||
                                        ->where('end_period', 'C');
 | 
			
		||||
                                });
 | 
			
		||||
                        });
 | 
			
		||||
                })
 | 
			
		||||
                    // Check for tickets that span multiple days
 | 
			
		||||
                    ->orWhere(function ($subQuery) use ($today, $periodCode) {
 | 
			
		||||
                        $subQuery->where('start_date', '<=', $today->format('Y-m-d'))
 | 
			
		||||
                            ->where('end_date', '>=', $today->format('Y-m-d'))
 | 
			
		||||
                            ->where(function ($periodQuery) use ($periodCode, $today) {
 | 
			
		||||
                                $periodQuery->where(function ($query)  use ($today) {
 | 
			
		||||
                                    $query->where('start_date', '<', $today->format('Y-m-d'))
 | 
			
		||||
                                        ->where('end_date', '>', $today->format('Y-m-d'));
 | 
			
		||||
                                })
 | 
			
		||||
                                    ->orWhere(function ($query) use ($today, $periodCode) {
 | 
			
		||||
                                        $query->where(function ($queryDateStart) use ($today, $periodCode) {
 | 
			
		||||
                                            $queryDateStart->where('start_date', '=', $today->format('Y-m-d'))
 | 
			
		||||
                                                ->where('end_date', '>', $today->format('Y-m-d'))
 | 
			
		||||
                                                ->where(function ($queryDateStartChild) use ($periodCode) {
 | 
			
		||||
                                                    $queryDateStartChild->where('start_period', $periodCode)
 | 
			
		||||
                                                        ->orWhere(function ($query) {
 | 
			
		||||
                                                            $query->where('start_period', 'S');
 | 
			
		||||
                                                        });
 | 
			
		||||
                                                });
 | 
			
		||||
                                        })
 | 
			
		||||
                                            ->orWhere(function ($queryDateEnd) use ($today, $periodCode) {
 | 
			
		||||
                                                $queryDateEnd->where('end_date', '=', $today->format('Y-m-d'))
 | 
			
		||||
                                                    ->where('start_date', '<', $today->format('Y-m-d'))
 | 
			
		||||
                                                    ->where(function ($queryDateStartChild) use ($periodCode) {
 | 
			
		||||
                                                        $queryDateStartChild->where('end_period', $periodCode)
 | 
			
		||||
                                                            ->orWhere(function ($query) {
 | 
			
		||||
                                                                $query->where('end_period', 'C');
 | 
			
		||||
                                                            });
 | 
			
		||||
                                                    });
 | 
			
		||||
                                            });
 | 
			
		||||
                                    });
 | 
			
		||||
                            });
 | 
			
		||||
                    });
 | 
			
		||||
            })
 | 
			
		||||
            ->whereIn('status', ['WAITING', 'CONFIRMED'])
 | 
			
		||||
            ->first();
 | 
			
		||||
 | 
			
		||||
        $type = 'ONLEAVE';
 | 
			
		||||
        $reason = 'KHONG PHEP';
 | 
			
		||||
 | 
			
		||||
        //Check ngày hợp lệ nếu có check và check out của user khác
 | 
			
		||||
        $dateNow = Tracking::whereBetween('time_string', [$startTime, $endTime])
 | 
			
		||||
            ->get();
 | 
			
		||||
        $hasCheckIndateNow = $dateNow->where('status', 'check in')->isNotEmpty();
 | 
			
		||||
        $hasCheckOutdateNow = $dateNow->where('status', 'check out')->isNotEmpty();
 | 
			
		||||
 | 
			
		||||
        // Nếu không có check-in hoặc check-out, và chưa có ticket, tạo ticket mới
 | 
			
		||||
        if (!$hasCheckIn && !$hasCheckOut && !$existingTicket) {
 | 
			
		||||
        if (($hasCheckIndateNow && $hasCheckOutdateNow) && !$hasCheckIn && !$hasCheckOut && !$existingTicket) {
 | 
			
		||||
            Ticket::create([
 | 
			
		||||
                'user_id' => $userId,
 | 
			
		||||
                'start_date' => $today->format('Y-m-d'),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue