Fix issues found during testing for getNearestHubsAndSlots
This commit is contained in:
parent
ede1d04123
commit
9e9c5759bb
1 changed files with 316 additions and 252 deletions
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue