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