truong-leave-day #116
			
				
			
		
		
		
	| 
						 | 
					@ -229,38 +229,69 @@ class TicketController extends Controller
 | 
				
			||||||
                return AbstractController::ResultError('Không thể tính toán khoảng thời gian nghỉ hợp lệ.');
 | 
					                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
 | 
					            // 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 = [];
 | 
					            $dataListPeriodWaiting = [];
 | 
				
			||||||
            if ($ticketsWaiting->count() > 0) {
 | 
					            if ($ticketsWaiting->count() > 0) {
 | 
				
			||||||
                foreach ($ticketsWaiting as $ticket) {
 | 
					                foreach ($ticketsWaiting as $ticket) {
 | 
				
			||||||
                    $dataListPeriodWaiting = array_merge($dataListPeriodWaiting, $this->getAllPeriodNew($ticket->start_date, $ticket->start_period, $ticket->end_date, $ticket->end_period));
 | 
					                    $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
 | 
					            // Chuyển đổi mảng đa chiều thành mảng chuỗi để có thể so sánh
 | 
				
			||||||
            $periodStrings = [];
 | 
					            $periodStrings = [];
 | 
				
			||||||
            $waitingPeriodStrings = [];
 | 
					            $waitingPeriodStrings = [];
 | 
				
			||||||
 | 
					            $confirmedPeriodStrings = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            foreach ($dataListPeriod as $period) {
 | 
					            foreach ($dataListPeriod as $period) {
 | 
				
			||||||
                if($period['period'] == 'ALL'){
 | 
					                if ($period['period'] == 'ALL') {
 | 
				
			||||||
                    $periodStrings[] = $period['date'] . '_S';
 | 
					                    $periodStrings[] = $period['date'] . '_S';
 | 
				
			||||||
                    $periodStrings[] = $period['date'] . '_C';
 | 
					                    $periodStrings[] = $period['date'] . '_C';
 | 
				
			||||||
                }else{
 | 
					                } else {
 | 
				
			||||||
                    $periodStrings[] = $period['date'] . '_' . $period['period'];
 | 
					                    $periodStrings[] = $period['date'] . '_' . $period['period'];
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            foreach ($dataListPeriodWaiting as $period) {
 | 
					            foreach ($dataListPeriodWaiting as $period) {
 | 
				
			||||||
                if($period['period'] == 'ALL'){
 | 
					                if ($period['period'] == 'ALL') {
 | 
				
			||||||
                    $waitingPeriodStrings[] = $period['date'] . '_S';
 | 
					                    $waitingPeriodStrings[] = $period['date'] . '_S';
 | 
				
			||||||
                    $waitingPeriodStrings[] = $period['date'] . '_C';
 | 
					                    $waitingPeriodStrings[] = $period['date'] . '_C';
 | 
				
			||||||
                }else{
 | 
					                } else {
 | 
				
			||||||
                    $waitingPeriodStrings[] = $period['date'] . '_' . $period['period'];
 | 
					                    $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) {
 | 
					            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ó
 | 
					            // Tạo thông báo về tickets waiting nếu có
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue