/**
  * 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;
 }