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; }
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; }
function incrementize($availabilityParams, $duration = null, $lengthOfAppointmentToMake = null) { $availability = new \Bookingbat\Engine\Availability($availabilityParams); return $availability->incrementize($availabilityParams, $duration, $lengthOfAppointmentToMake); }