public function stageBooking()
 {
     $flightBookingParams = new FlightBookingParams();
     $orderBooking = $this->flightBooker->orderBooking;
     $flightBookingParams->contactEmail = $orderBooking->email;
     $flightBookingParams->phoneNumber = $orderBooking->phone;
     $flightBookingParams->flightId = $this->flightBooker->flightVoyage->flightKey;
     foreach ($this->flightBooker->flightBookingPassports as $passport) {
         $passenger = new Passenger();
         $passenger->type = Passenger::TYPE_ADULT;
         $passenger->passport = $passport;
         $flightBookingParams->addPassenger($passenger);
     }
     $flightBookingResponse = Yii::app()->gdsAdapter->FlightBooking($flightBookingParams);
     SWLogActiveRecord::$requestIds = array_merge(SWLogActiveRecord::$requestIds, GDSNemoAgency::$requestIds);
     GDSNemoAgency::$requestIds = array();
     if ($flightBookingResponse->responseStatus == ResponseStatus::ERROR_CODE_NO_ERRORS) {
         $this->flightBooker->nemoBookId = $flightBookingResponse->nemoBookId;
         $this->flightBooker->pnr = $flightBookingResponse->pnr;
         $this->flightBooker->timeout = date('y-m-d H:i:s', $flightBookingResponse->expiration);
         $res = Yii::app()->cron->add(strtotime($this->flightBooker->timeout), 'flightbooking', 'ChangeState', array('flightBookerId' => $this->flightBooker->id, 'newState' => 'bookingTimeLimitError'));
         if ($res) {
             $this->flightBooker->saveTaskInfo('paymentTimeLimit', $res);
         }
         $this->status('waitingForPayment');
     } else {
         $this->status('bookingError');
     }
 }
Beispiel #2
0
 /**
  * @param FlightBookingParams $oFlightBookingParams
  * @return FlightBookingResponse
  * @throws CException
  */
 public function FlightBooking(FlightBookingParams $oFlightBookingParams)
 {
     if (!$oFlightBookingParams instanceof FlightBookingParams) {
         throw new CException(Yii::t('application', 'Parameter oFlightBookingParams not type of FlightBookingParams'));
     }
     $aParams = array('Request' => array('BookFlight' => array('FlightId' => $oFlightBookingParams->flightId, 'BookingCodes' => array('BookingCode' => array('Code' => 'Q', 'SegNumber' => '1')), 'Agency' => array('Name' => 'Easy', 'Telephone' => array('Type' => 'A', 'PhoneNumber' => '5745698'), 'Address' => array('City' => 'Saint-Petersburg')), 'Travellers' => array('Traveller' => array(array('Type' => 'ADT', 'Num' => '1', 'PersonalInfo' => array('DateOfBirth' => '01.01.1985', 'Nationality' => 'RU', 'Gender' => 'M', 'FirstName' => 'Aleksandr', 'LastName' => 'Kovalev'), 'DocumentInfo' => array('DocType' => 'М', 'DocNum' => 'asdawe131', 'CountryCode' => 'RU', 'DocElapsedTime' => '24.03.2026')), array('Type' => 'ADT', 'Count' => '1'))))), 'Source' => array('ClientId' => Yii::app()->params['GDSNemo']['agencyId'], 'APIKey' => Yii::app()->params['GDSNemo']['agencyApiKey'], 'Language' => 'RU', 'Currency' => 'RUB'));
     if ($oFlightBookingParams->checkValid()) {
         $aTraveler = array();
         $iNum = 1;
         foreach ($oFlightBookingParams->passengers as $passenger) {
             //VarDumper::dump($passenger);die();
             //$oTraveller = array();
             $oTraveller['Type'] = Yii::app()->params['aPassegerTypes'][$passenger->type];
             $oTraveller['Num'] = $iNum;
             $oTraveller['IsContact'] = $iNum == 1 ? true : false;
             $oTraveller['PersonalInfo'] = array();
             $oTraveller['PersonalInfo']['DateOfBirth'] = $passenger->passport->birthday;
             $oTraveller['PersonalInfo']['Nationality'] = Country::getCountryByPk($passenger->passport->countryId)->code;
             $oTraveller['PersonalInfo']['Gender'] = $passenger->passport->genderId == 1 ? 'M' : 'F';
             $oTraveller['PersonalInfo']['FirstName'] = $passenger->passport->firstName;
             $oTraveller['PersonalInfo']['LastName'] = $passenger->passport->lastName;
             $oTraveller['DocumentInfo'] = array();
             $oTraveller['DocumentInfo']['DocType'] = isset(self::$passportTypesMap[$passenger->passport->documentTypeId]) ? self::$passportTypesMap[$passenger->passport->documentTypeId] : 'P';
             $oTraveller['DocumentInfo']['DocNum'] = ($passenger->passport->series ? $passenger->passport->series : '') . $passenger->passport->number;
             $oTraveller['DocumentInfo']['CountryCode'] = Country::getCountryByPk($passenger->passport->countryId)->code;
             $oTraveller['DocumentInfo']['DocElapsedTime'] = UtilsHelper::dateToPointDate($passenger->passport->expiration);
             $oTraveller['ContactInfo'] = array();
             $oTraveller['ContactInfo']['EmailID'] = $oFlightBookingParams->contactEmail;
             $oTraveller['ContactInfo']['Telephone'] = array();
             $oTraveller['ContactInfo']['Telephone']['Type'] = 'M';
             $oTraveller['ContactInfo']['Telephone']['PhoneNumber'] = $oFlightBookingParams->phoneNumber;
             $aTraveler[] = $oTraveller;
             $iNum++;
         }
         $aParams['Request']['BookFlight']['Travellers']['Traveller'] = $aTraveler;
         $aParams['Request']['BookFlight']['Travellers']['Traveller'] = UtilsHelper::normalizeArray($aParams['Request']['BookFlight']['Travellers']['Traveller']);
     } else {
         throw new CException(Yii::t('application', 'Data in parameter oFlightBookingParams not valid'));
     }
     $response = self::request('BookFlight', $aParams);
     $flightBookingResponse = new FlightBookingResponse();
     if (isset($response->Response->Error)) {
         $status = 'error';
         $flightBookingResponse->status = 2;
         $flightBookingResponse->responseStatus = ResponseStatus::ERROR_CODE_EXTERNAL;
         $flightBookingResponse->addError('error', $response->Response->Error);
     } else {
         if (isset($response->Response->BookFlight->Status)) {
             $status = $response->Response->BookFlight->Status;
         } elseif (isset($response->Error->_)) {
             $status = 'error';
             $flightBookingResponse->addError($response->Error->Code, $response->Error->_);
         } else {
             $status = 'error';
             if (GDSNemoSoapClient::$lastCurlError) {
                 $flightBookingResponse->addError('connection error', GDSNemoSoapClient::$lastCurlError);
             }
         }
     }
     if ($status == 'booked') {
         $flightBookingResponse->pnr = $response->Response->BookFlight->Code;
         $flightBookingResponse->expiration = strtotime($response->Response->BookFlight->Flight->PricingInfo->PassengerFare->LastTicketDateTime->_);
         $flightBookingResponse->nemoBookId = $response->Response->BookFlight->ID;
         $flightBookingResponse->status = 1;
     } else {
         $flightBookingResponse->status = 2;
         $flightBookingResponse->responseStatus = ResponseStatus::ERROR_CODE_EXTERNAL;
         $flightBookingResponse->addError('error', 'Status is:' . $status);
     }
     return $flightBookingResponse;
 }