truong-leave-day #116
			
				
			
		
		
		
	| 
						 | 
				
			
			@ -229,40 +229,71 @@ class TicketController extends Controller
 | 
			
		|||
                return AbstractController::ResultError('Không thể tính toán khoảng thời gian nghỉ hợp lệ.');
 | 
			
		||||
            }
 | 
			
		||||
            // Lây thông tin tickets đang ở trạng thái WAITING
 | 
			
		||||
            $ticketsWaiting = Ticket::where('user_id', $user->id)->where('status', 'WAITING')->where('type', 'ONLEAVE')->get();
 | 
			
		||||
            $ticketsWaiting = Ticket::where('user_id', $user->id)->where('status', 'WAITING')->where('type', '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 đang ở trạng thái CONFIRMED
 | 
			
		||||
            $ticketsConfirmed = Ticket::where('user_id', $user->id)->where('status', 'CONFIRMED')
 | 
			
		||||
                ->whereIn('type', ['ONLEAVE', 'LEAVE_WITHOUT_PAY'])
 | 
			
		||||
                ->where(DB::raw('DATE(start_date)'), '>=', $start_date->toDateString())
 | 
			
		||||
                ->where(DB::raw('DATE(end_date)'), '<=', $end_date->toDateString())
 | 
			
		||||
                ->get();
 | 
			
		||||
 | 
			
		||||
            $dataListPeriodConfirmed = [];
 | 
			
		||||
            if ($ticketsConfirmed->count() > 0) {
 | 
			
		||||
                foreach ($ticketsConfirmed as $ticket) {
 | 
			
		||||
                    $dataListPeriodConfirmed = array_merge($dataListPeriodConfirmed, $this->getAllPeriodNew($ticket->start_date, $ticket->start_period, $ticket->end_date, $ticket->end_period));
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Chuyển đổi mảng đa chiều thành mảng chuỗi để có thể so sánh
 | 
			
		||||
            $periodStrings = [];
 | 
			
		||||
            $waitingPeriodStrings = [];
 | 
			
		||||
            $confirmedPeriodStrings = [];
 | 
			
		||||
 | 
			
		||||
            foreach ($dataListPeriod as $period) {
 | 
			
		||||
                if($period['period'] == 'ALL'){
 | 
			
		||||
                if ($period['period'] == 'ALL') {
 | 
			
		||||
                    $periodStrings[] = $period['date'] . '_S';
 | 
			
		||||
                    $periodStrings[] = $period['date'] . '_C';
 | 
			
		||||
                }else{
 | 
			
		||||
                } else {
 | 
			
		||||
                    $periodStrings[] = $period['date'] . '_' . $period['period'];
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            foreach ($dataListPeriodWaiting as $period) {
 | 
			
		||||
                if($period['period'] == 'ALL'){
 | 
			
		||||
                if ($period['period'] == 'ALL') {
 | 
			
		||||
                    $waitingPeriodStrings[] = $period['date'] . '_S';
 | 
			
		||||
                    $waitingPeriodStrings[] = $period['date'] . '_C';
 | 
			
		||||
                }else{
 | 
			
		||||
                } else {
 | 
			
		||||
                    $waitingPeriodStrings[] = $period['date'] . '_' . $period['period'];
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            // Kiểm tra xem có sự trùng lặp giữa hai mảng không
 | 
			
		||||
 | 
			
		||||
            foreach ($dataListPeriodConfirmed as $period) {
 | 
			
		||||
                if ($period['period'] == 'ALL') {
 | 
			
		||||
                    $confirmedPeriodStrings[] = $period['date'] . '_S';
 | 
			
		||||
                    $confirmedPeriodStrings[] = $period['date'] . '_C';
 | 
			
		||||
                } else {
 | 
			
		||||
                    $confirmedPeriodStrings[] = $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('Đã tồn tại ticket đang trong thời gian chọn, không thể tạo ticket mới!');
 | 
			
		||||
                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!');
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Tạo thông báo về tickets waiting nếu có
 | 
			
		||||
            $waitingTicketsMessage = '';
 | 
			
		||||
            if (!empty($dataListPeriodWaiting)) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue