/** * Display a listing of the resource. * * @return Response */ public function book($cell, $reference, $counter = 0) { $retval = array(); $retval['status'] = -1; $retval['srvr_msg'] = 'Bookings Closed'; $vendor = new Vendor(); $apointment = new Appointments(); $reference = strtoupper(trim($reference)); ## Return if invalid vendor if (!$vendor->isValidVendor($cell)) { $retval['srvr_msg'] = 'Invalid Vendor'; return $retval; } else { if (!$vendor->isAcceptingAppointments($cell)) { $retval['srvr_msg'] = 'Bookings Closed'; return $retval; } else { if ($apointment->isbBoked($cell, $reference) > 0) { $retval['srvr_msg'] = 'Already Booked'; $retval['status'] = -1; return $retval; } else { $booking_successful = 0; $initial_empty_positions = Settings::get($cell, Settings::INITIAL_EMPTY_POSITIONS); $periodic_empty_position = Settings::get($cell, Settings::PERIODIC_EMPTY_POSITION); $next_counter = $vendor->getNextAvailableCounter($cell); if ($next_counter <= $initial_empty_positions) { $this->reset($cell); $vendor->resetNextAvailableCounter($cell, $initial_empty_positions + 1); $next_counter = $initial_empty_positions + 1; } while (!$booking_successful) { if ($counter > $next_counter) { if ($periodic_empty_position > 0 && $counter % $periodic_empty_position == 0) { $apointment->book($cell, '* FREE *-- ' . $counter, $counter); $counter++; } if ($apointment->book($cell, $reference, $counter) > 0) { $booking_successful = 1; $retval['counter'] = $counter; $retval['status'] = 1; $retval['srvr_msg'] = 'Booking Successful'; } else { $counter++; } } else { if ($periodic_empty_position > 0 && $next_counter % $periodic_empty_position == 0) { $vendor->setNextAvailableCounter($cell); $apointment->book($cell, 'FREE: ' . $next_counter, $next_counter); $next_counter = $vendor->getNextAvailableCounter($cell); } if ($apointment->book($cell, $reference, $next_counter) > 0) { $booking_successful = 1; $retval['counter'] = $next_counter; $retval['status'] = 1; $retval['srvr_msg'] = 'Booking Successful'; } $vendor->setNextAvailableCounter($cell); $next_counter = $vendor->getNextAvailableCounter($cell); } } } } } return $retval; }