/** * Display */ public function display($tpl = null) { // load data $this->month = CHLibDate::getMonth(substr($this->search->start_date, 0, -3)); $this->months_list = CHLibDate::getMonthsList(); $this->availability = $this->get('Availability'); // check availability if (!$this->availability || $this->availability->errors->errors) { // errors view $this->setLayout('errors'); } // rooms with extras if (isset($this->availability->results)) { $this->rooms_with_extras = []; $rooms_with_extras = []; foreach ($this->availability->results->search_rooms as $search_room) { foreach ($search_room->available_rooms as $available_room) { if (count($available_room->extras)) { $rooms_with_extras[] = (int) $available_room->room_id; } } } $this->rooms_with_extras = array_values(array_unique($rooms_with_extras)); } // extend view $this->extendView(); // display the view parent::display($tpl); }
/** * Get the availability data for a hotel */ public function getCalendar() { // hotel_id $hotel_id = $this->getHotelId(); if (!$hotel_id) { throw new Exception(CHClient::string('error_resource_not_found'), 404); } // load search $search = CHClient::getSearch(); // get month start and end dates $default_month = substr($search->start_date, 0, -3); $month_date = $this->app->getUserStateFromRequest('chclient.month', 'month', $default_month, 'string'); // init calendar object $calendar = new stdClass(); $calendar->month = CHLibDate::getMonth($month_date); $calendar->months_list = CHLibDate::getMonthsList(); // get ari from api $request = (object) ['hotel_id' => $hotel_id, 'start_date' => $calendar->month->start, 'end_date' => $calendar->month->end, 'currency' => $search->currency, 'lang' => JFactory::getLanguage()->getTag()]; $api_request = $this->apiRequest('ari_get', $request); // check for errors if ($api_request->errors->errors) { return $api_request; } // finalise calendar object $calendar->ari = $api_request->response; return $calendar; }
/** * Get Availability */ public function getAvailability() { // init request $search = $this->search; $search->hotels_ids = $this->getHotelsIds(); $api_request = $this->apiRequest('search_results', $search); if (!$api_request) { return false; } // prepare availability object $availability = (object) []; $availability->errors = $api_request->errors; $availability->request = $api_request->request->data; if (isset($api_request->app)) { $availability->app = $api_request->app; $availability->app->voucher_text_html = CHLibDisplay::convertMarkdownToHtml($availability->app->voucher_text); } // inventory tasks if (isset($api_request->response->inventory)) { // prepare hotel info $availability->hotel = CHInventory::prepare($api_request->response->inventory[0]); // update inventory db foreach ($api_request->response->inventory as $inventory) { $this->_db->setQuery("DELETE FROM `#__chclient_inventory` WHERE id = {$inventory->id}")->execute(); $insert = (object) ['id' => $inventory->id, 'title' => $inventory->title, 'slug' => $inventory->slug, 'data' => json_encode($inventory)]; $this->_db->insertObject('#__chclient_inventory', $insert, 'id'); } } // check for errors if ($api_request->errors->errors) { // init calendar object if (isset($api_request->response->month_ari)) { $calendar = new stdClass(); $calendar->month = CHLibDate::getMonth(substr($search->start_date, 0, -3)); $calendar->months_list = CHLibDate::getMonthsList(); $calendar->ari = $api_request->response->month_ari; $availability->calendar = $calendar; } return $availability; } // prepare the info $availability->results = $api_request->response->results[0]; $availability->month_ari = $api_request->response->month_ari; return $availability; }