From 5b65415d767b33e8641bc35e5a13621eeea5d68b Mon Sep 17 00:00:00 2001 From: Truong Vo <41848815+vmtruong301296@users.noreply.github.com> Date: Mon, 16 Jun 2025 09:41:54 +0700 Subject: [PATCH] =?UTF-8?q?B=E1=BB=95=20sung=20check=20ticket=20=C4=91ang?= =?UTF-8?q?=20=C4=91=C6=B0=E1=BB=A3c=20duy=E1=BB=87t=20k=20th=E1=BB=83=20t?= =?UTF-8?q?=E1=BA=A1o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/Http/Controllers/TicketController.php | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/BACKEND/Modules/Admin/app/Http/Controllers/TicketController.php b/BACKEND/Modules/Admin/app/Http/Controllers/TicketController.php index 4f38421..9b4fdd7 100644 --- a/BACKEND/Modules/Admin/app/Http/Controllers/TicketController.php +++ b/BACKEND/Modules/Admin/app/Http/Controllers/TicketController.php @@ -238,6 +238,15 @@ class TicketController extends Controller } } + $ticketsWaitingWFH = Ticket::where('user_id', $user->id)->where('status', 'WAITING')->whereIn('type', ['WFH']) + ->get(); + $dataListPeriodWaitingWFH = []; + if ($ticketsWaitingWFH->count() > 0) { + foreach ($ticketsWaitingWFH as $ticket) { + $dataListPeriodWaitingWFH = array_merge($dataListPeriodWaitingWFH, $this->getAllPeriodNew($ticket->start_date, $ticket->start_period, $ticket->end_date, $ticket->end_period)); + } + } + // 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') @@ -269,6 +278,7 @@ class TicketController extends Controller // Chuyển đổi mảng đa chiều thành mảng chuỗi để có thể so sánh $periodStrings = []; $waitingPeriodStrings = []; + $waitingPeriodStringsWFH = []; $confirmedPeriodStrings = []; foreach ($dataListPeriod as $period) { @@ -289,6 +299,15 @@ class TicketController extends Controller } } + foreach ($dataListPeriodWaitingWFH as $period) { + if ($period['period'] == 'ALL') { + $waitingPeriodStringsWFH[] = $period['date'] . '_S'; + $waitingPeriodStringsWFH[] = $period['date'] . '_C'; + } else { + $waitingPeriodStringsWFH[] = $period['date'] . '_' . $period['period']; + } + } + foreach ($dataListPeriodConfirmed as $period) { if ($period['period'] == 'ALL') { $confirmedPeriodStrings[] = $period['date'] . '_S'; @@ -303,6 +322,11 @@ class TicketController extends Controller return AbstractController::ResultError('Đã có ticket đang chờ duyệt trong thời gian này, không thể tạo ticket mới!'); } + // Kiểm tra xem có sự trùng lặp giữa request mới và tickets đang chờ duyệt WFH + if (count(array_intersect($periodStrings, $waitingPeriodStringsWFH)) > 0) { + return AbstractController::ResultError('Đã có ticket đang chờ duyệt trong thời gian này, không thể tạo ticket mới!'); + } + // Kiểm tra xem có sự trùng lặp giữa request mới và tickets đã được duyệt 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!'); @@ -354,6 +378,16 @@ class TicketController extends Controller return AbstractController::ResultError("Không thỏa mãn điều kiện ngày phép", $balanceCheckResult); } } else if ($type === 'WFH') { + // Lấy thông tin tickets nghỉ phép đang ở trạng thái WAITING + $ticketsWaiting = Ticket::where('user_id', $user->id)->where('status', 'WAITING')->whereIn('type', ['WFH', 'ONLEAVE']) + ->get(); + $dataListPeriodWaiting = []; + if ($ticketsWaiting->count() > 0) { + foreach ($ticketsWaiting as $ticket) { + $dataListPeriodWaiting = array_merge($dataListPeriodWaiting, $this->getAllPeriodNew($ticket->start_date, $ticket->start_period, $ticket->end_date, $ticket->end_period)); + } + } + // 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') @@ -405,6 +439,19 @@ class TicketController extends Controller } } + foreach ($dataListPeriodWaiting as $period) { + if ($period['period'] == 'ALL') { + $waitingPeriodStrings[] = $period['date'] . '_S'; + $waitingPeriodStrings[] = $period['date'] . '_C'; + } else { + $waitingPeriodStrings[] = $period['date'] . '_' . $period['period']; + } + } + // Kiểm tra xem có sự trùng lặp giữa request mới và tickets đang chờ duyệt + if (count(array_intersect($periodStrings, $waitingPeriodStrings)) > 0) { + return AbstractController::ResultError('Đã có ticket đang chờ duyệt trong thời gian này, không thể tạo ticket mới!'); + } + // Kiểm tra xem có sự trùng lặp giữa request mới và tickets đã được duyệt 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!');