Fix issues found during testing for getNearestHubsAndSlots

This commit is contained in:
Korina Cordero 2020-04-27 07:49:34 +00:00
parent ede1d04123
commit 9e9c5759bb

View file

@ -2958,15 +2958,6 @@ class APIController extends Controller implements LoggedController
protected function getHubRiderSlots(Hub $hub, EntityManagerInterface $em) 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 // check hub's advance orders for the day
// get number of advance orders for the next day if request came in before midnight // 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 // 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 // get JOs assigned to hub that are advance orders and scheduled for the next three days with
// for hub assignment status // for hub assignment status
$query = $em->createQuery('select jo from App\Entity\JobOrder jo where jo.hub = :hub and jo.flag_advance = true and $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([ $jos_advance_orders = $query->setParameters([
'hub' => $hub, 'hub' => $hub,
'date_start' => $start_date, 'date_start' => $start_date,
'date_end' => $end_date, 'date_end' => $end_date,
'status' => JOStatus::ASSIGNED, 'status_cancelled' => JOStatus::CANCELLED,
'status_fulfilled' => JOStatus::FULFILLED,
]) ])
->getResult(); ->getResult();
@ -3026,278 +3019,349 @@ class APIController extends Controller implements LoggedController
// third day // third day
$third_date = $end_date->format('Y-m-d'); $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 // no advance orders
if (empty($jos_advance_orders)) if (empty($jos_advance_orders))
{ {
// set hub slots for the next three days // set hub slots for the next three days
$index = -1; // set all slots
$slot_status = true; $slot_status = true;
$hub_slots[$first_date] = $this->setHubSlots($index, $slot_status); $hub_slots[$first_date] = $this->setAllHubSlots($slot_status);
$hub_slots[$sec_date] = $this->setHubSlots($index, $slot_status); $hub_slots[$sec_date] = $this->setAllHubSlots($slot_status);
$hub_slots[$third_date] = $this->setHubSlots($index, $slot_status); $hub_slots[$third_date] = $this->setAllHubSlots($slot_status);
} }
else else
{ {
foreach ($jos_advance_orders as $advance_jo) foreach ($jos_advance_orders as $advance_jo)
{ {
error_log('advance jo ' . $advance_jo->getID()); // get date schedules of JO
// get time schedule
// dili date schedule ang isulod sa hub slots!
$jo_date_schedule = $advance_jo->getDateSchedule(); $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'); $time_schedule = $jo_date_schedule->format('H:i');
$hour_schedule = $jo_date_schedule->format('H'); $hour_schedule = $jo_date_schedule->format('H');
$minute_schedule = $jo_date_schedule->format('i'); $minute_schedule = $jo_date_schedule->format('i');
// check if date in hub slots // check which of the three dates does date schedule fall
if (!isset($hub_slots[$date_schedule])) // and if date is already in hub slots
{ if (($first_date == $date_schedule) &&
$hub_slots[$date_schedule] = []; (!isset($hub_slots[$first_date])))
} $hub_slots[$first_date] = [];
if ($minute_schedule != '00') if (($sec_date == $date_schedule) &&
{ (!isset($hub_slots[$sec_date])))
switch($hour_schedule) { $hub_slots[$sec_date] = [];
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);
}
}
// check values of hub_rider_slot to mark if available or not if (($third_date == $date_schedule) &&
for ($i = 0; $i <=7; $i++) (!isset($hub_slots[$third_date])))
{ $hub_slots[$third_date] = [];
if ($hub_rider_slots[$i] > 0)
{ // decrement number of hub rider slots then
// set the time label // set hub slots
switch($i) { if ($date_schedule == $first_date)
case '8': $this->decrementRiderSlots($hub_rider_slots, $first_date, $hour_schedule, $minute_schedule);
$hub_slots[$date_schedule] = [
'label' => '8-9 AM', if ($date_schedule == $sec_date)
'available' => true, $this->decrementRiderSlots($hub_rider_slots, $sec_date, $hour_schedule, $minute_schedule);
];
break; if ($date_schedule == $third_date)
case '9': $this->decrementRiderSlots($hub_rider_slots, $third_date, $hour_schedule, $minute_schedule);
$hub_slots[$date_schedule] = [
'label' => '9-10 AM', $hub_slots[$first_date] = $this->setHubSlots($hub_rider_slots, $first_date);
'available' => true, $hub_slots[$sec_date] = $this->setHubSlots($hub_rider_slots, $sec_date);
]; $hub_slots[$third_date] = $this->setHubSlots($hub_rider_slots, $third_date);
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.');
}
}
}
} }
} }
return $hub_slots; return $hub_slots;
} }
protected function setHubSlots($index, $status) protected function setAllHubSlots($status)
{ {
$data = []; $data = [];
// set all slots to true // set all slots to true
if ($index = -1) $data[] = [
{ [
$data[] = [ 'label' => '8-9 AM',
[ 'available' => $status,
'label' => '8-9 AM', ],
'available' => $status, [
], 'label' => '9-10 AM',
[ 'available' => $status,
'label' => '9-10 AM', ],
'available' => $status, [
], 'label' => '10-11 AM',
[ 'available' => $status,
'label' => '10-11 AM', ],
'available' => $status, [
], 'label' => '11 AM-12 PM',
[ 'available' => $status,
'label' => '11 AM-12 PM', ],
'available' => $status, [
], 'label' => '12 PM-1 PM',
[ 'available' => $status,
'label' => '12 PM-1 PM', ],
'available' => $status, [
], 'label' => '1-2 PM',
[ 'available' => $status,
'label' => '1-2 PM', ],
'available' => $status, [
], 'label' => '2-3 PM',
[ 'available' => $status,
'label' => '2-3 PM', ],
'available' => $status, [
], 'label' => '3-4 PM',
[ 'available' => $status,
'label' => '3-4 PM', ]
'available' => $status, ];
]
];
}
else
{
}
return $data; 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);
}
}
}
} }