Esempio n. 1
0
 function setAvailability($availabilityTimes, $incrementDuration)
 {
     $availability = new \Bookingbat\Engine\Availability($availabilityTimes);
     $availabilityTimes = $availability->incrementize($availabilityTimes, $incrementDuration);
     foreach ($availabilityTimes as $time) {
         $timeFormatted = $this->time($time);
         $this->getElement('time')->addMultiOption($time, $timeFormatted);
     }
 }
 /** 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;
 }
Esempio n. 3
0
 function removeBookingsFrom($availability, $dayString, $filterByTherapist = null)
 {
     $availabilityModel = new \Bookingbat\Engine\Availability($availability);
     $db = $this->db();
     $select = $db->select()->from('appointments')->where('date=?', date('Y-m-d', strtotime($dayString)))->where('canceled=0');
     if ($filterByTherapist) {
         $select->where('staff_userid=?', $filterByTherapist);
     }
     $bookings = $select->query()->fetchAll();
     foreach ($bookings as $bookingArray) {
         $booking = new Booking(array('start' => $bookingArray['time'], 'user_id' => $bookingArray['staff_userid'], 'duration' => $bookingArray['duration']));
         $availabilityModel->addBooking($booking);
     }
     return $availabilityModel;
 }
Esempio n. 4
0
 function incrementize($availabilityParams, $duration = null, $lengthOfAppointmentToMake = null)
 {
     $availability = new \Bookingbat\Engine\Availability($availabilityParams);
     return $availability->incrementize($availabilityParams, $duration, $lengthOfAppointmentToMake);
 }