diff --git a/src/Controller/APIController.php b/src/Controller/APIController.php index aae32486..1a7f96d7 100644 --- a/src/Controller/APIController.php +++ b/src/Controller/APIController.php @@ -2958,15 +2958,6 @@ class APIController extends Controller implements LoggedController protected function getHubRiderSlots(Hub $hub, EntityManagerInterface $em) { - // array of # of riders that can handle JOs in a timeslot - $hub_rider_slots = []; - - // populate the array with the hub's rider slots - for ($i = 0; $i <=7; $i++) - { - $hub_rider_slots[$i] = $hub->getRiderSlots(); - } - // check hub's advance orders for the day // get number of advance orders for the next day if request came in before midnight // or for current day if request came in after midnight @@ -2995,12 +2986,14 @@ class APIController extends Controller implements LoggedController // get JOs assigned to hub that are advance orders and scheduled for the next three days with // for hub assignment status $query = $em->createQuery('select jo from App\Entity\JobOrder jo where jo.hub = :hub and jo.flag_advance = true and - jo.date_schedule >= :date_start and jo.date_schedule <= :date_end and jo.status = :status'); + jo.date_schedule >= :date_start and jo.date_schedule <= :date_end and jo.status != :status_cancelled + and jo.status != :status_fulfilled'); $jos_advance_orders = $query->setParameters([ 'hub' => $hub, 'date_start' => $start_date, 'date_end' => $end_date, - 'status' => JOStatus::ASSIGNED, + 'status_cancelled' => JOStatus::CANCELLED, + 'status_fulfilled' => JOStatus::FULFILLED, ]) ->getResult(); @@ -3026,278 +3019,349 @@ class APIController extends Controller implements LoggedController // third day $third_date = $end_date->format('Y-m-d'); + // 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 <=7; $i++) + { + $hub_rider_slots[$first_date][$i] = $hub->getRiderSlots(); + } + for ($i = 0; $i <=7; $i++) + { + $hub_rider_slots[$sec_date][$i] = $hub->getRiderSlots(); + } + for ($i = 0; $i <=7; $i++) + { + $hub_rider_slots[$third_date][$i] = $hub->getRiderSlots(); + } + // no advance orders if (empty($jos_advance_orders)) { // set hub slots for the next three days - $index = -1; // set all slots $slot_status = true; - $hub_slots[$first_date] = $this->setHubSlots($index, $slot_status); - $hub_slots[$sec_date] = $this->setHubSlots($index, $slot_status); - $hub_slots[$third_date] = $this->setHubSlots($index, $slot_status); + $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) { - error_log('advance jo ' . $advance_jo->getID()); - // get time schedule - - // dili date schedule ang isulod sa hub slots! - + // get date schedules of JO $jo_date_schedule = $advance_jo->getDateSchedule(); - $date_schedule = $jo_date_schedule->format('m-d-Y'); + $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 if date in hub slots - if (!isset($hub_slots[$date_schedule])) - { - $hub_slots[$date_schedule] = []; - } + // 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 ($minute_schedule != '00') - { - switch($hour_schedule) { - case '8': - $hub_rider_slots[0]--; - $hub_rider_slots[1]--; - break; - case '9': - $hub_rider_slots[1]--; - $hub_rider_slots[2]--; - break; - case '10': - $hub_rider_slots[2]--; - $hub_rider_slots[3]--; - break; - case '11': - $hub_rider_slots[3]--; - $hub_rider_slots[4]--; - break; - case '12': - $hub_rider_slots[4]--; - $hub_rider_slots[5]--; - break; - case '13': - $hub_rider_slots[5]--; - $hub_rider_slots[6]--; - break; - case '14': - $hub_rider_slots[6]--; - $hub_rider_slots[7]--; - break; - case '15': - 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[0]--; - break; - case '9': - $hub_rider_slots[1]--; - break; - case '10': - $hub_rider_slots[2]--; - break; - case '11': - $hub_rider_slots[3]--; - break; - case '12': - $hub_rider_slots[4]--; - break; - case '13': - $hub_rider_slots[5]--; - break; - case '14': - $hub_rider_slots[6]--; - break; - case '15': - $hub_rider_slots[7]--; - break; - default: - error_log('Does not fit in any time slot.' . $time_schedule); - } - } + if (($sec_date == $date_schedule) && + (!isset($hub_slots[$sec_date]))) + $hub_slots[$sec_date] = []; - // check values of hub_rider_slot to mark if available or not - for ($i = 0; $i <=7; $i++) - { - if ($hub_rider_slots[$i] > 0) - { - // set the time label - switch($i) { - case '8': - $hub_slots[$date_schedule] = [ - 'label' => '8-9 AM', - 'available' => true, - ]; - break; - case '9': - $hub_slots[$date_schedule] = [ - 'label' => '9-10 AM', - 'available' => true, - ]; - break; - case '10': - $hub_slots[$date_schedule] = [ - 'label' => '10-11 AM', - 'available' => true, - ]; - break; - case '11': - $hub_slots[$date_schedule] = [ - 'label' => '11 AM-12 PM', - 'available' => true, - ]; - break; - case '12': - $hub_slots[$date_schedule] = [ - 'label' => '12-1 PM', - 'available' => true, - ]; - break; - case '13': - $hub_slots[$date_schedule] = [ - 'label' => '1-2 PM', - 'available' => true, - ]; - break; - case '14': - $hub_slots[$date_schedule] = [ - 'label' => '2-3 PM', - 'available' => true, - ]; - break; - case '15': - $hub_slots[$date_schedule] = [ - 'label' => '3-4 PM', - 'available' => true, - ]; - break; - default: - error_log('Invalid rider slot index.'); - } - } - else - { - // set the time label - switch($i) { - case '8': - $hub_slots[$date_schedule] = [ - 'label' => '8-9 AM', - 'available' => true, - ]; - break; - case '9': - $hub_slots[$date_schedule] = [ - 'label' => '9-10 AM', - 'available' => true, - ]; - break; - case '10': - $hub_slots[$date_schedule] = [ - 'label' => '10-11 AM', - 'available' => true, - ]; - break; - case '11': - $hub_slots[$date_schedule] = [ - 'label' => '11 AM-12 PM', - 'available' => true, - ]; - break; - case '12': - $hub_slots[$date_schedule] = [ - 'label' => '12-1 PM', - 'available' => true, - ]; - break; - case '13': - $hub_slots[$date_schedule] = [ - 'label' => '1-2 PM', - 'available' => true, - ]; - break; - case '14': - $hub_slots[$date_schedule] = [ - 'label' => '2-3 PM', - 'available' => true, - ]; - break; - case '15': - $hub_slots[$date_schedule] = [ - 'label' => '3-4 PM', - 'available' => true, - ]; - break; - default: - error_log('Invalid rider slot index.'); - } - } - } + 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); } } return $hub_slots; } - protected function setHubSlots($index, $status) + protected function setAllHubSlots($status) { $data = []; // set all slots to true - if ($index = -1) - { - $data[] = [ - [ - 'label' => '8-9 AM', - 'available' => $status, - ], - [ - 'label' => '9-10 AM', - 'available' => $status, - ], - [ - 'label' => '10-11 AM', - 'available' => $status, - ], - [ - 'label' => '11 AM-12 PM', - 'available' => $status, - ], - [ - 'label' => '12 PM-1 PM', - 'available' => $status, - ], - [ - 'label' => '1-2 PM', - 'available' => $status, - ], - [ - 'label' => '2-3 PM', - 'available' => $status, - ], - [ - 'label' => '3-4 PM', - 'available' => $status, - ] - ]; - } - else - { - } + $data[] = [ + [ + 'label' => '8-9 AM', + 'available' => $status, + ], + [ + 'label' => '9-10 AM', + 'available' => $status, + ], + [ + 'label' => '10-11 AM', + 'available' => $status, + ], + [ + 'label' => '11 AM-12 PM', + 'available' => $status, + ], + [ + 'label' => '12 PM-1 PM', + 'available' => $status, + ], + [ + 'label' => '1-2 PM', + 'available' => $status, + ], + [ + 'label' => '2-3 PM', + 'available' => $status, + ], + [ + 'label' => '3-4 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 <=7; $i++) + { + if ($hub_rider_slots[$schedule_date][$i] > 0) + { + // set the time label + switch($i) { + case '0': + $data[] = [ + [ + 'label' => '8-9 AM', + 'available' => true, + ] + ]; + break; + case '1': + $data[] = [ + [ + 'label' => '9-10 AM', + 'available' => true, + ] + ]; + break; + case '2': + $data[] = [ + [ + 'label' => '10-11 AM', + 'available' => true, + ] + ]; + break; + case '3': + $data[] = [ + [ + 'label' => '11 AM-12 PM', + 'available' => true, + ] + ]; + break; + case '4': + $data[] = [ + [ + 'label' => '12 PM-1 PM', + 'available' => true, + ] + ]; + break; + case '5': + $data[] = [ + [ + 'label' => '1-2 PM', + 'available' => true, + ] + ]; + break; + case '6': + $data[] = [ + [ + 'label' => '2-3 PM', + 'available' => true, + ] + ]; + break; + case '7': + $data[] = [ + [ + 'label' => '3-4 PM', + 'available' => true, + ] + ]; + break; + default: + error_log('Invalid rider slot index.'); + } + } + else + { + // set the time label + switch($i) { + case '0': + $data[] = [ + [ + 'label' => '8-9 AM', + 'available' => false, + ] + ]; + break; + case '1': + $data[] = [ + [ + 'label' => '9-10 AM', + 'available' => false, + ] + ]; + break; + case '2': + $data[] = [ + [ + 'label' => '10-11 AM', + 'available' => false, + ] + ]; + break; + case '3': + $data[] = [ + [ + 'label' => '11 AM-12 PM', + 'available' => false, + ] + ]; + break; + case '4': + $data[] = [ + [ + 'label' => '12 PM-1 PM', + 'available' => false, + ] + ]; + break; + case '5': + $data[] = [ + [ + 'label' => '1-2 PM', + 'available' => false, + ] + ]; + break; + case '6': + $data[] = [ + [ + 'label' => '2-3 PM', + 'available' => false, + ] + ]; + break; + case '7': + $data[] = [ + [ + 'label' => '3-4 PM', + 'available' => false, + ] + ]; + break; + default: + error_log('Invalid rider slot index.'); + } + } + } + + 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': + 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; + default: + error_log('Does not fit in any time slot.' . $time_schedule); + } + } + } }