/** * Load selected rooms info * * @return mixed * @throws Exception */ protected function loadRooms() { // get & check selection list($rates, $boards) = CHClient::loadRoomsFromRequest(); // to determine the worst conditions $conditions = []; // get rooms units $this->rooms = (object) []; $this->rooms->total = 0; $this->rooms->currency_total = 0; $this->rooms->conditions = 'pay_at_hotel'; $this->rooms->units = []; $this->rooms->amount = []; $this->rooms->currency_amount = []; foreach ($this->availability->results->search_rooms as $i => $search_room) { // look in the rates to determine the room_id foreach ($search_room->available_rooms as $available_room) { $board = $boards[$i]; $rate = CHLibData::getObjectFromList($available_room->rates, $rates[$i], 'rate_id'); if ($rate) { $room = CHLibData::getObjectFromList($this->availability->hotel->rooms, $available_room->room_id, 'id'); $data = (object) []; $data->id = $available_room->room_id; $data->title = $room->title; $data->info = $room->info; $data->image = $room->image; $data->available = $available_room->available; $data->smoking = $available_room->smoking; $data->bed_preference = $available_room->bed_preference; $data->party = $search_room->party; $data->board = $board; $data->rate_id = $rate->rate_id; $data->rate_master = $rate->master; $data->rate_title = $rate->title; $data->rate_conditions = $rate->conditions; $data->rate_deposit = $rate->deposit; $data->rate_deadline = $rate->deadline; $data->rate_free_cancellation = $rate->free_cancellation; $data->rate_cancellation_policy = $rate->cancellation_policy; if (!isset($rate->currency->amount->{$board})) { throw new Exception(CHClient::string('error_bad_request'), 400); } $data->amount = $rate->amount->{$board}; $data->currency_amount = $rate->currency->amount->{$board}; $data->currency = $rate->currency; $data->discounts = $rate->discounts; foreach ($data->discounts as $discount) { unset($discount->detail); } $this->rooms->units[] = $data; // determine the dominant (worst) conditions $conditions[] = $rate->conditions; $this->rooms->total += $rate->amount->{$board}; $this->rooms->currency_total += $rate->currency->amount->{$board}; break; } } } // get the worst conditions found $this->rooms->conditions = CHClient::worstConditions($conditions); // check rooms units if (count($this->rooms->units) != count($this->availability->results->search_rooms)) { throw new Exception(CHClient::string('error_bad_request'), 400); } }
/** * displayProcessing */ private function displayProcessing() { // load config $this->config = CHClient::getConfig(); // submit confirmation method $this->submit_confirm = false; if ($this->app->getUserState('chclient.submit_confirm', false)) { $this->submit_confirm = true; $this->app->setUserState('chclient.submit_confirm', null); $this->loadConfirmationMethod(); } // load needed data $this->data->special_conditions = false; $this->data->worst_conditions = false; $conditions_array = []; foreach ($this->booking->rooms as $room) { $conditions_array[] = $room->rate->conditions; $room->special_conditions = false; $room->free_cancellation = CHClient::freeCancellation($room->rate->conditions, $room->rate->deadline); $room->non_refundable = in_array($room->rate->conditions, ['deposit_non_refundable', 'prepay_non_refundable']); if (!$room->free_cancellation && !$room->non_refundable) { $room->special_conditions = true; $this->data->special_conditions = true; } } $this->data->worst_conditions = CHClient::worstConditions($conditions_array); // display $this->setLayout('processing'); parent::display(); return; }