diff --git a/src/Controller/APIController.php b/src/Controller/APIController.php index 53186f51..5ef19fba 100644 --- a/src/Controller/APIController.php +++ b/src/Controller/APIController.php @@ -3022,391 +3022,91 @@ class APIController extends Controller implements LoggedController ->getResult(); // check request_time - // check each JO's date_schedule, decrement rider_slots if date schedule falls in that slot - // index - equivalent time - // 0 - 8-9 - // 1 - 9-10 - // 2 - 10-11 - // 3 - 11-12 - // 4 - 12 -13 - // 5 - 13-14 - // 6 - 14-15 - // 7 - 15-16 - // 8 - 16-17 - $hub_slots = []; + // define slots + $slots = [ + '08_09' => '8:00 AM', + '09_10' => '9:00 AM', + '10_11' => '10:00 AM', + '11_12' => '11:00 AM', + '12_13' => '12:00 PM', + '13_14' => '1:00 PM', + '14_15' => '2:00 PM', + '15_16' => '3:00 PM', + '16_17' => '4:00 PM', + ]; + // get the dates for the next three days $first_date = $start_date->format('Y-m-d'); - - // 2nd day $second_date = $start_date->add(new DateInterval('P1D')); $sec_date = $second_date->format('Y-m-d'); - - // third day $third_date = $end_date->format('Y-m-d'); + // define days + $days = [ + $first_date => $first_date, + $sec_date => $sec_date, + $third_date => $third_date, + ]; + + // initialize hub slots + $hub_rider_slots = []; + foreach ($days as $day) + { + foreach ($slots as $slot_key => $slot) + { + $hub_rider_slots[$day][$slot_key] = $hub->getRiderSlots(); + } + } + // array of # of riders that can handle JOs in a timeslot $hub_rider_slots = []; - // populate the array with the hub's rider slots per day - for ($i = 0; $i <= self::RIDER_SLOT_ARRAY_LENGTH; $i++) + // check each JO's date_schedule, decrement rider_slots if date schedule falls in that slot + foreach ($jos_advance_order as $jo) { - $hub_rider_slots[$first_date][$i] = $hub->getRiderSlots(); - } - for ($i = 0; $i <= self::RIDER_SLOT_ARRAY_LENGTH; $i++) - { - $hub_rider_slots[$sec_date][$i] = $hub->getRiderSlots(); - } - for ($i = 0; $i <= self::RIDER_SLOT_ARRAY_LENGTH; $i++) - { - $hub_rider_slots[$third_date][$i] = $hub->getRiderSlots(); + // get date key + $date_sched = $jo->getDateSchedule(); + $date_string = $date_sched->format('Y-m-d'); + $hour = $date_sched->format('H'); + $slot_id = sprintf('%02d_%02d', $hour, $hour + 1); + + // decrement rider slot + $hub_rider_slots[$date_string][$slot_id]--; } - // no advance orders - if (empty($jos_advance_orders)) - { - // set hub slots for the next three days - $slot_status = true; + error_log(print_r($hub_rider_slots, true)); - $hub_slots[$first_date] = $this->setAllHubSlots($slot_status); - $hub_slots[$sec_date] = $this->setAllHubSlots($slot_status); - $hub_slots[$third_date] = $this->setAllHubSlots($slot_status); - } - else - { - foreach ($jos_advance_orders as $advance_jo) - { - // get date schedules of JO - $jo_date_schedule = $advance_jo->getDateSchedule(); - - $date_schedule = $jo_date_schedule->format('Y-m-d'); - $time_schedule = $jo_date_schedule->format('H:i'); - - $hour_schedule = $jo_date_schedule->format('H'); - $minute_schedule = $jo_date_schedule->format('i'); - - // check which of the three dates does date schedule fall - // and if date is already in hub slots - if (($first_date == $date_schedule) && - (!isset($hub_slots[$first_date]))) - $hub_slots[$first_date] = []; - - if (($sec_date == $date_schedule) && - (!isset($hub_slots[$sec_date]))) - $hub_slots[$sec_date] = []; - - if (($third_date == $date_schedule) && - (!isset($hub_slots[$third_date]))) - $hub_slots[$third_date] = []; - - // decrement number of hub rider slots then - // set hub slots - if ($date_schedule == $first_date) - $this->decrementRiderSlots($hub_rider_slots, $first_date, $hour_schedule, $minute_schedule); - - if ($date_schedule == $sec_date) - $this->decrementRiderSlots($hub_rider_slots, $sec_date, $hour_schedule, $minute_schedule); - - if ($date_schedule == $third_date) - $this->decrementRiderSlots($hub_rider_slots, $third_date, $hour_schedule, $minute_schedule); - - $hub_slots[$first_date] = $this->setHubSlots($hub_rider_slots, $first_date); - $hub_slots[$sec_date] = $this->setHubSlots($hub_rider_slots, $sec_date); - $hub_slots[$third_date] = $this->setHubSlots($hub_rider_slots, $third_date); - } - } + $hub_slots = $this->generateHubSlots($hub_rider_slots, $slots); return $hub_slots; } - protected function setAllHubSlots($status) + protected function generateHubSlots($rider_slots, $slots) { $data = []; - - // set all slots to true - $data = [ - [ - 'id' => '08_09', - 'label' => '8:00 AM', - 'available' => $status, - ], - [ - 'id' => '09_10', - 'label' => '9:00 AM', - 'available' => $status, - ], - [ - 'id' => '10_11', - 'label' => '10:00 AM', - 'available' => $status, - ], - [ - 'id' =>'11_12', - 'label' => '11:00 AM', - 'available' => $status, - ], - [ - 'id' => '12_13', - 'label' => '12:00 PM', - 'available' => $status, - ], - [ - 'id' => '13_14', - 'label' => '1:00 PM', - 'available' => $status, - ], - [ - 'id' => '14_15', - 'label' => '2:00 PM', - 'available' => $status, - ], - [ - 'id' => '15_16', - 'label' => '3:00 PM', - 'available' => $status, - ], - [ - 'id' => '16_17', - 'label' => '4:00 PM', - 'available' => $status, - ], - ]; - - return $data; - } - - protected function setHubSlots($hub_rider_slots, $schedule_date) - { - $data = []; - // check values of hub_rider_slot to mark if available or not - for ($i = 0; $i <= self::RIDER_SLOT_ARRAY_LENGTH; $i++) + foreach ($rider_slots as $day_id => $rslot) { - if ($hub_rider_slots[$schedule_date][$i] > 0) + $data[$day_id] = []; + + foreach ($rslot as $slot_id => $avail_slots) { - // set the time label - switch($i) { - case '0': - $data[] = [ - 'id' => '08_09', - 'label' => '8:00 AM', - 'available' => true, - ]; - break; - case '1': - $data[] = [ - 'id' => '09_10', - 'label' => '9:00 AM', - 'available' => true, - ]; - break; - case '2': - $data[] = [ - 'id' => '10_11', - 'label' => '10:00 AM', - 'available' => true, - ]; - break; - case '3': - $data[] = [ - 'id' => '11_12', - 'label' => '11:00 AM', - 'available' => true, - ]; - break; - case '4': - $data[] = [ - 'id' => '12_13', - 'label' => '12:00 PM', - 'available' => true, - ]; - break; - case '5': - $data[] = [ - 'id' => '13_14', - 'label' => '1:00 PM', - 'available' => true, - ]; - break; - case '6': - $data[] = [ - 'id' => '14_15', - 'label' => '2:00 PM', - 'available' => true, - ]; - break; - case '7': - $data[] = [ - 'id' => '15_16', - 'label' => '3:00 PM', - 'available' => true, - ]; - break; - case '8': - $data[] = [ - 'id' => '16_17', - 'label' => '4:00 PM', - 'available' => true, - ]; - break; - default: - error_log('Invalid rider slot index.'); - } - } - else - { - // set the time label - switch($i) { - case '0': - $data[] = [ - 'id' => '08_09', - 'label' => '8:00 AM', - 'available' => false, - ]; - break; - case '1': - $data[] = [ - 'id' => '09_10', - 'label' => '9:00 AM', - 'available' => false, - ]; - break; - case '2': - $data[] = [ - 'id' => '10_11', - 'label' => '10:00 AM', - 'available' => false, - ]; - break; - case '3': - $data[] = [ - 'id' => '11_12', - 'label' => '11:00 AM', - 'available' => false, - ]; - break; - case '4': - $data[] = [ - 'id' => '12_13', - 'label' => '12:00 PM', - 'available' => false, - ]; - break; - case '5': - $data[] = [ - 'id' => '13_14', - 'label' => '1:00 PM', - 'available' => false, - ]; - break; - case '6': - $data[] = [ - 'id' => '14_15', - 'label' => '2:00 PM', - 'available' => false, - ]; - break; - case '7': - $data[] = [ - 'id' => '15_16', - 'label' => '3:00 PM', - 'available' => false, - ]; - break; - case '8': - $data[] = [ - 'id' => '16_17', - 'label' => '4:00 PM', - 'available' => false, - ]; - break; - default: - error_log('Invalid rider slot index.'); - } + $slot_data = [ + 'id' => $slot_id, + 'label' => $slots[$slot_id], + 'available' => true, + ]; + + // mark unavailable ones + if ($avail_slots <= 0) + $slot_data['available'] = false; + + // add to day data + $data[$day_id][] = $slot_data; } } return $data; - - } - - protected function decrementRiderSlots(&$hub_rider_slots, $date_schedule, $hour_schedule, $minute_schedule) - { - if ($minute_schedule != '00') - { - switch($hour_schedule) { - case '8': - $hub_rider_slots[$date_schedule][0]--; - $hub_rider_slots[$date_schedule][1]--; - break; - case '9': - $hub_rider_slots[$date_schedule][1]--; - $hub_rider_slots[$date_schedule][2]--; - break; - case '10': - $hub_rider_slots[$date_schedule][2]--; - $hub_rider_slots[$date_schedule][3]--; - break; - case '11': - $hub_rider_slots[$date_schedule][3]--; - $hub_rider_slots[$date_schedule][4]--; - break; - case '12': - $hub_rider_slots[$date_schedule][4]--; - $hub_rider_slots[$date_schedule][5]--; - break; - case '13': - $hub_rider_slots[$date_schedule][5]--; - $hub_rider_slots[$date_schedule][6]--; - break; - case '14': - $hub_rider_slots[$date_schedule][6]--; - $hub_rider_slots[$date_schedule][7]--; - break; - case '15': - $hub_rider_slots[$date_schedule][7]--; - $hub_rider_slots[$date_schedule][8]--; - break; - case '16': - error_log('No slots for the day'); - break; - default: - error_log('Does not fit in any time slot. ' . $time_schedule); - } - } - else - { - switch ($hour_schedule) { - case '8': - $hub_rider_slots[$date_schedule][0]--; - break; - case '9': - $hub_rider_slots[$date_schedule][1]--; - break; - case '10': - $hub_rider_slots[$date_schedule][2]--; - break; - case '11': - $hub_rider_slots[$date_schedule][3]--; - break; - case '12': - $hub_rider_slots[$date_schedule][4]--; - break; - case '13': - $hub_rider_slots[$date_schedule][5]--; - break; - case '14': - $hub_rider_slots[$date_schedule][6]--; - break; - case '15': - $hub_rider_slots[$date_schedule][7]--; - break; - case '16': - $hub_rider_slots[$date_schedule][8]--; - break; - default: - error_log('Does not fit in any time slot.' . $time_schedule); - } - } } protected function getTimeFromSlot($slot_id)