/** This is where they pick the staff */
 function booking3Action()
 {
     $this->layout('layout/layout-appointment-summary');
     $layoutViewModel = $this->layout();
     $progress = new ViewModel(['step' => 5]);
     $progress->setTemplate('application/progress');
     $layoutViewModel->addChild($progress, 'progress');
     $form = new \Application\BookingForm3();
     $day = date('N', strtotime($this->params('day')));
     $availabilityArray = $this->selectAvailability($day, $this->params('service'), $this->params('staff'));
     $availabilityModel = $this->removeBookingsFrom($availabilityArray, $this->params('day'), $this->params('staff'));
     $form->populate($this->params()->fromRoute());
     $booking = new \Application\Booking(array('start' => $this->params('time'), 'duration' => $this->params('appointment_duration')));
     $availabilityObject = new \Bookingbat\Engine\Availability($availabilityModel->getAvailabilityTimes());
     $possibleUserIdsForBooking = $availabilityObject->possibleUserIdsForBooking($booking);
     if (!$possibleUserIdsForBooking) {
         throw new \Exception('No staff available to take this appointment');
     }
     $db = \Zend_Registry::get('db');
     $stafResult = $db->select()->from('user')->where('type IN ("staff","admin")')->where('id IN(' . implode(',', $possibleUserIdsForBooking) . ')')->query()->fetchAll();
     $staff = array();
     foreach ($stafResult as $stafResult) {
         $staff[$stafResult['id']] = $stafResult['username'];
     }
     $form->getElement('staff')->setMultiOptions($staff);
     if ($this->getRequest()->isPost() && $form->isValid($this->params()->fromPost())) {
         $url = $this->url()->fromRoute('make-booking', array('action' => 'booking4', 'duration' => $this->params('duration'), 'service' => $this->params('service'), 'day' => $this->params('day'), 'time' => $this->params('time'), 'staff' => $form->getValue('staff')));
         return $this->redirect()->toUrl($url);
     }
     $summary = new ViewModel($this->params()->fromRoute());
     $summary->setTemplate('application/summary');
     $layoutViewModel->addChild($summary, 'appointment_summary');
     $this->viewParams['form'] = $form;
     $viewModel = new ViewModel($this->viewParams);
     $viewModel->setTemplate('application/booking');
     return $viewModel;
 }
示例#2
0
 function test_ShouldGetSingleUserId_When2ndAvailabilityEndsBeforeFirst()
 {
     $availabilityForUser1 = array(array('user_id' => 1, 'start' => '01:00:00', 'end' => '04:00:00'));
     $availabilityForUser2 = array(array('user_id' => 2, 'start' => '02:00:00', 'end' => '03:00:00'));
     $availability = new \Bookingbat\Engine\Availability(array_merge($availabilityForUser1, $availabilityForUser2));
     $possibleUserIds = $availability->possibleUserIdsForBooking(new \Bookingbat\Engine\Booking(array('start' => '03:00', 'end' => '03:30')));
     $this->assertEquals(array(1), $possibleUserIds);
 }