diff --git a/BACKEND/Modules/Admin/app/Http/Controllers/TicketController.php b/BACKEND/Modules/Admin/app/Http/Controllers/TicketController.php index 8ea27d8..2e21060 100644 --- a/BACKEND/Modules/Admin/app/Http/Controllers/TicketController.php +++ b/BACKEND/Modules/Admin/app/Http/Controllers/TicketController.php @@ -238,10 +238,24 @@ class TicketController extends Controller } // Lấy thông tin tickets nghỉ phép đang ở trạng thái CONFIRMED - $ticketsConfirmed = Ticket::where('user_id', $user->id)->where('status', 'CONFIRMED') + $ticketsConfirmed = Ticket::where('user_id', $user->id) + ->where('status', 'CONFIRMED') ->whereIn('type', ['ONLEAVE']) - ->where(DB::raw('DATE(start_date)'), '>=', $start_date->toDateString()) - ->where(DB::raw('DATE(end_date)'), '<=', $end_date->toDateString()) + ->where(function($query) use ($start_date, $end_date) { + $query->where(function($q) use ($start_date, $end_date) { + // Trường hợp 1: start_date nằm trong khoảng + $q->whereBetween(DB::raw('DATE(start_date)'), [$start_date->toDateString(), $end_date->toDateString()]); + }) + ->orWhere(function($q) use ($start_date, $end_date) { + // Trường hợp 2: end_date nằm trong khoảng + $q->whereBetween(DB::raw('DATE(end_date)'), [$start_date->toDateString(), $end_date->toDateString()]); + }) + ->orWhere(function($q) use ($start_date, $end_date) { + // Trường hợp 3: Khoảng thời gian được chọn nằm trong khoảng của ticket + $q->where(DB::raw('DATE(start_date)'), '<=', $start_date->toDateString()) + ->where(DB::raw('DATE(end_date)'), '>=', $end_date->toDateString()); + }); + }) ->get(); $dataListPeriodConfirmed = []; @@ -250,7 +264,7 @@ class TicketController extends Controller $dataListPeriodConfirmed = array_merge($dataListPeriodConfirmed, $this->getAllPeriodNew($ticket->start_date, $ticket->start_period, $ticket->end_date, $ticket->end_period)); } } - + // dd($dataListPeriodConfirmed,$ticketsConfirmed,$start_date->toDateString(),$end_date->toDateString()); // Chuyển đổi mảng đa chiều thành mảng chuỗi để có thể so sánh $periodStrings = []; $waitingPeriodStrings = []; @@ -292,7 +306,7 @@ class TicketController extends Controller if (count(array_intersect($periodStrings, $confirmedPeriodStrings)) > 0) { return AbstractController::ResultError('Đã có ticket được duyệt trong thời gian này, không thể tạo ticket mới!'); } - + // Tạo thông báo về tickets waiting nếu có $waitingTicketsMessage = ''; if (!empty($dataListPeriodWaiting)) {