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
 | 
					        // Lấy tất cả người dùng
 | 
				
			||||||
        $users = User::where('permission', 'not like', '%admin%')->get();
 | 
					        $users = User::where('permission', 'not like', '%admin%')->get();
 | 
				
			||||||
        foreach ($users as $key => $user) {
 | 
					        foreach ($users as $key => $user) {
 | 
				
			||||||
            // if ($user->id != 2) {
 | 
					            // if ($user->id != 4) {
 | 
				
			||||||
            //     continue;
 | 
					            //     continue;
 | 
				
			||||||
            // }
 | 
					            // }
 | 
				
			||||||
            // Kiểm tra dựa trên period (Sáng 'S' hoặc Chiều 'C')
 | 
					            // 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();
 | 
					        $hasCheckIn = $records->where('status', 'check in')->isNotEmpty();
 | 
				
			||||||
        $hasCheckOut = $records->where('status', 'check out')->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)
 | 
					        $existingTicket = Ticket::where('user_id', $userId)
 | 
				
			||||||
            ->where('start_date', $today->format('Y-m-d'))
 | 
					            ->where(function ($query) use ($today, $periodCode) {
 | 
				
			||||||
            ->where('start_period', $periodCode)
 | 
					                // Check for tickets that exactly cover the current day and period
 | 
				
			||||||
            ->where('end_date', $today->format('Y-m-d'))
 | 
					                $query->where(function ($subQuery) use ($today, $periodCode) {
 | 
				
			||||||
            ->where('end_period', $periodCode)
 | 
					                    $subQuery->where('start_date', $today->format('Y-m-d'))
 | 
				
			||||||
 | 
					                        ->where('end_date', $today->format('Y-m-d'))
 | 
				
			||||||
 | 
					                        ->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'])
 | 
					            ->whereIn('status', ['WAITING', 'CONFIRMED'])
 | 
				
			||||||
            ->first();
 | 
					            ->first();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $type = 'ONLEAVE';
 | 
					        $type = 'ONLEAVE';
 | 
				
			||||||
        $reason = 'KHONG PHEP';
 | 
					        $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
 | 
					        // 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([
 | 
					            Ticket::create([
 | 
				
			||||||
                'user_id' => $userId,
 | 
					                'user_id' => $userId,
 | 
				
			||||||
                'start_date' => $today->format('Y-m-d'),
 | 
					                'start_date' => $today->format('Y-m-d'),
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue