Bổ sung check ticket đang được duyệt k thể tạo

This commit is contained in:
Truong Vo 2025-06-16 09:41:54 +07:00
parent 655d9cd4c6
commit 5b65415d76
1 changed files with 47 additions and 0 deletions

View File

@ -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!');