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('end_date', $today->format('Y-m-d'))
|
||||
->where('end_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(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