public function makeBooking(CheckfrontBookingModel $booking) { $sessionID = CheckfrontModule::session()->getID(); $params = array_merge(array('session_id' => $sessionID), $booking->toCheckfront('booking/create')); return new CheckfrontAPIBookingResponse($this()->api(new CheckfrontAPIRequest('booking/create', $params))); }
public function getBooking() { return CheckfrontBookingModel::create_from_checkfront($this->data, 'response'); }
/** * - setup session in checkfront * - add package to session * - add items to session * - call the 'book' endpoint to make the booking * * @param SS_HTTPRequest $request * * @return CheckfrontForm */ protected function book(SS_HTTPRequest $request) { $message = ''; $messageType = ''; $result = array(); // only post request should route here $postVars = $request->postVars(); try { $this->clearCheckfrontSession(); $packageID = $this->getTokenInfo(CheckfrontModule::TokenItemIDIndex, $postVars[CheckfrontForm::AccessKeyFieldName]); if ($request->isPOST()) { $startDate = $request->postVar('StartDate'); $endDate = $request->postVar('EndDate'); $ratedPackageResponse = $this->api()->fetchPackage($packageID, $startDate, $endDate); if ($ratedPackageResponse->isValid()) { $package = $ratedPackageResponse->getPackage(); $this->api()->addPackageToSession($package); foreach ($postVars['ItemID'] as $index => $itemID) { if (isset($postVars['Quantity'][$index])) { if ($quantity = $postVars['Quantity'][$index]) { /** * CheckfrontAPIItemResponse */ $response = $this->api()->fetchItem($itemID, $quantity, $startDate, $endDate); if ($response->isValid()) { if ($item = $response->getItem()) { $this->api()->addItemToSession($item); } } else { throw new CheckfrontBookingException($response->getMessage(), CheckfrontException::TypeError); } } } } $bookingResponse = $this->api()->makeBooking(CheckfrontBookingModel::create_from_checkfront($postVars, 'from-form')); if ($bookingResponse->isValid()) { $paymentMethod = $this->getTokenInfo(CheckfrontModule::TokenPaymentTypeIndex, $postVars[CheckfrontForm::AccessKeyFieldName]); if ($paymentMethod == CheckfrontModule::PaymentPayNow) { $message = 'Thanks for booking, please click the link below to complete payment on your booking'; $messageType = CheckfrontException::TypeOK; if ($paymentURL = $bookingResponse->getPaymentURL()) { $result = array('PaymentURL' => $paymentURL); $this()->redirect($paymentURL); } } else { $message = 'Thanks for booking, you will receive email confirmation shortly'; $messageType = CheckfrontException::TypeOK; $result = array('CurrentPackage' => $package, 'Booking' => $bookingResponse->getBooking(), 'Items' => $bookingResponse->getItems()); } } else { throw new CheckfrontBookingException($bookingResponse->getMessage(), CheckfrontException::TypeError); } } } } catch (CheckfrontException $e) { $message = $e->getMessage(); $messageType = $e->getType(); $this->api()->clearSession(); Session::setFormMessage(CheckfrontPackageBookingForm::FormName, $message, 'bad'); $result = $this->buildBookingForm($request); } return array_merge(array(self::MessageKey => $message, self::MessageTypeKey => $messageType), $result); }