Merge branch '403-resq-refactor-setting-of-each-day-in-auto-assign-advance-order-jo' into 'master'
Resolve "Resq - refactor setting of each day in auto-assign advance order JO" Closes #403 See merge request jankstudio/resq!456
This commit is contained in:
commit
a60aee7472
1 changed files with 59 additions and 359 deletions
|
|
@ -3022,391 +3022,91 @@ class APIController extends Controller implements LoggedController
|
||||||
->getResult();
|
->getResult();
|
||||||
// check request_time
|
// check request_time
|
||||||
|
|
||||||
// check each JO's date_schedule, decrement rider_slots if date schedule falls in that slot
|
// define slots
|
||||||
// index - equivalent time
|
$slots = [
|
||||||
// 0 - 8-9
|
'08_09' => '8:00 AM',
|
||||||
// 1 - 9-10
|
'09_10' => '9:00 AM',
|
||||||
// 2 - 10-11
|
'10_11' => '10:00 AM',
|
||||||
// 3 - 11-12
|
'11_12' => '11:00 AM',
|
||||||
// 4 - 12 -13
|
'12_13' => '12:00 PM',
|
||||||
// 5 - 13-14
|
'13_14' => '1:00 PM',
|
||||||
// 6 - 14-15
|
'14_15' => '2:00 PM',
|
||||||
// 7 - 15-16
|
'15_16' => '3:00 PM',
|
||||||
// 8 - 16-17
|
'16_17' => '4:00 PM',
|
||||||
$hub_slots = [];
|
];
|
||||||
|
|
||||||
|
|
||||||
// get the dates for the next three days
|
// get the dates for the next three days
|
||||||
$first_date = $start_date->format('Y-m-d');
|
$first_date = $start_date->format('Y-m-d');
|
||||||
|
|
||||||
// 2nd day
|
|
||||||
$second_date = $start_date->add(new DateInterval('P1D'));
|
$second_date = $start_date->add(new DateInterval('P1D'));
|
||||||
$sec_date = $second_date->format('Y-m-d');
|
$sec_date = $second_date->format('Y-m-d');
|
||||||
|
|
||||||
// third day
|
|
||||||
$third_date = $end_date->format('Y-m-d');
|
$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
|
// array of # of riders that can handle JOs in a timeslot
|
||||||
$hub_rider_slots = [];
|
$hub_rider_slots = [];
|
||||||
|
|
||||||
// populate the array with the hub's rider slots per day
|
// check each JO's date_schedule, decrement rider_slots if date schedule falls in that slot
|
||||||
for ($i = 0; $i <= self::RIDER_SLOT_ARRAY_LENGTH; $i++)
|
foreach ($jos_advance_order as $jo)
|
||||||
{
|
{
|
||||||
$hub_rider_slots[$first_date][$i] = $hub->getRiderSlots();
|
// get date key
|
||||||
}
|
$date_sched = $jo->getDateSchedule();
|
||||||
for ($i = 0; $i <= self::RIDER_SLOT_ARRAY_LENGTH; $i++)
|
$date_string = $date_sched->format('Y-m-d');
|
||||||
{
|
$hour = $date_sched->format('H');
|
||||||
$hub_rider_slots[$sec_date][$i] = $hub->getRiderSlots();
|
$slot_id = sprintf('%02d_%02d', $hour, $hour + 1);
|
||||||
}
|
|
||||||
for ($i = 0; $i <= self::RIDER_SLOT_ARRAY_LENGTH; $i++)
|
// decrement rider slot
|
||||||
{
|
$hub_rider_slots[$date_string][$slot_id]--;
|
||||||
$hub_rider_slots[$third_date][$i] = $hub->getRiderSlots();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// no advance orders
|
error_log(print_r($hub_rider_slots, true));
|
||||||
if (empty($jos_advance_orders))
|
|
||||||
{
|
|
||||||
// set hub slots for the next three days
|
|
||||||
$slot_status = true;
|
|
||||||
|
|
||||||
$hub_slots[$first_date] = $this->setAllHubSlots($slot_status);
|
$hub_slots = $this->generateHubSlots($hub_rider_slots, $slots);
|
||||||
$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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $hub_slots;
|
return $hub_slots;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function setAllHubSlots($status)
|
protected function generateHubSlots($rider_slots, $slots)
|
||||||
{
|
{
|
||||||
$data = [];
|
$data = [];
|
||||||
|
foreach ($rider_slots as $day_id => $rslot)
|
||||||
// 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++)
|
|
||||||
{
|
{
|
||||||
if ($hub_rider_slots[$schedule_date][$i] > 0)
|
$data[$day_id] = [];
|
||||||
|
|
||||||
|
foreach ($rslot as $slot_id => $avail_slots)
|
||||||
{
|
{
|
||||||
// set the time label
|
$slot_data = [
|
||||||
switch($i) {
|
'id' => $slot_id,
|
||||||
case '0':
|
'label' => $slots[$slot_id],
|
||||||
$data[] = [
|
'available' => true,
|
||||||
'id' => '08_09',
|
];
|
||||||
'label' => '8:00 AM',
|
|
||||||
'available' => true,
|
// mark unavailable ones
|
||||||
];
|
if ($avail_slots <= 0)
|
||||||
break;
|
$slot_data['available'] = false;
|
||||||
case '1':
|
|
||||||
$data[] = [
|
// add to day data
|
||||||
'id' => '09_10',
|
$data[$day_id][] = $slot_data;
|
||||||
'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.');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $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)
|
protected function getTimeFromSlot($slot_id)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue