예제 #1
0
 /**
  * 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);
     }
 }
예제 #2
0
 /**
  * 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;
 }