public function selectAirport($data, $column, $lineData, $outfp, $city)
 {
     if (!$data[$column['icao_code']]) {
         echo "Dont found ICAO code. Skipping line: {$lineData} \n";
         fwrite($outfp, $lineData . "|icao\n");
         return;
     }
     if (!$data[$column['iata_code']]) {
         echo "Dont found IATA code. Skipping line: {$lineData} \n";
         fwrite($outfp, $lineData . "|iata\n");
         return;
     }
     try {
         $airport = Airport::getAirportByCode($data[$column['iata_code']]);
     } catch (CException $e) {
         $airport = null;
     }
     if (!$airport) {
         if (strpos($data[$column['airport_name_ru']], 'Metropolitan') !== FALSE && strpos($data[$column['airport_name_ru']], 'Airport') === FALSE) {
             return;
         }
         echo "Do you want create airport? type y\n";
         echo "Data line: {$lineData} \n";
         $char = trim(fgets(STDIN));
         if ($char == 'y') {
             $airport = new Airport();
             $airport->cityId = $city->id;
             $data[$column['airport_name_ru']] = $data[$column['airport_name_ru']] ? $data[$column['airport_name_ru']] : $data[$column['airport_name_en']];
             if (!$data[$column['airport_name_ru']]) {
                 echo "Airport name not found. Skipped line: {$lineData} \n";
                 fwrite($outfp, $lineData . "|iata\n");
                 return;
             }
             $airport->localRu = $data[$column['airport_name_ru']];
             $airport->localEn = $data[$column['airport_name_en']];
             $airport->code = $data[$column['iata_code']];
             $airport->icaoCode = $data[$column['icao_code']];
             $airport->latitude = $data[$column['latitude']];
             $airport->longitude = $data[$column['longitude']];
             $airport->position = 0;
             $airport->site = $data[$column['website']];
             $airport->validate();
             print_r($airport->errors);
             $airport->save();
             $airport->id = $airport->getPrimaryKey();
         }
     }
     if ($airport) {
         $changed = false;
         if (!$airport->localRu) {
             if ($data[$column['airport_name_ru']]) {
                 $airport->localRu = $data[$column['airport_name_ru']];
                 $changed = true;
             }
         }
         if (!$airport->localEn) {
             if ($data[$column['airport_name_en']]) {
                 $airport->localEn = $data[$column['airport_name_en']];
                 $changed = true;
             }
         }
         if (!$airport->latitude) {
             if ($data[$column['latitude']]) {
                 $airport->latitude = $data[$column['latitude']];
                 $changed = true;
             }
         }
         if (!$airport->longitude) {
             if ($data[$column['longitude']]) {
                 $airport->longitude = $data[$column['longitude']];
                 $changed = true;
             }
         }
         if (!$airport->icaoCode) {
             if ($data[$column['icao_code']]) {
                 $airport->icaoCode = $data[$column['icao_code']];
                 $changed = true;
             }
         }
         if (!$airport->site) {
             if ($data[$column['website']]) {
                 $airport->site = $data[$column['website']];
                 $changed = true;
             }
         }
         if ($changed) {
             $airport->save();
         }
     }
 }
예제 #2
0
 public function FlightTicketing(FlightTicketingParams $flightTicketingRequest)
 {
     $aParams = array('Request' => array('Ticketing' => array('BookID' => $flightTicketingRequest->nemoBookId, 'Commision' => array('Percent' => '2'))), 'Source' => array('ClientId' => Yii::app()->params['GDSNemo']['agencyId'], 'APIKey' => Yii::app()->params['GDSNemo']['agencyApiKey'], 'Language' => 'RU', 'Currency' => 'RUB'));
     $response = self::request('Ticketing', $aParams, $bCache = FALSE, $iExpiration = 0);
     $flightTicketingResponse = new FlightTicketingResponse();
     if (isset($response->Response->Error)) {
         $status = 'error';
         $flightTicketingResponse->status = 2;
         $flightTicketingResponse->responseStatus = ResponseStatus::ERROR_CODE_EXTERNAL;
         $flightTicketingResponse->addError('error', $response->Response->Error);
     } else {
         if (isset($response->Response->Ticketing->Status)) {
             $status = $response->Response->Ticketing->Status;
         } elseif (isset($response->Error->_)) {
             $status = 'error';
             $flightTicketingResponse->addError($response->Error->Code, $response->Error->_);
         } else {
             $status = 'error';
             if (GDSNemoSoapClient::$lastCurlError) {
                 $flightTicketingResponse->addError('connection error', GDSNemoSoapClient::$lastCurlError);
             }
         }
     }
     if ($status == 'ticket') {
         $flightTicketingResponse->status = 1;
         $aParts = array();
         UtilsHelper::soapObjectsArray($response->Response->Ticketing->Flight->Segments->Segment);
         foreach ($response->Response->Ticketing->Flight->Segments->Segment as $arrKey => $oSegment) {
             $oPart = new stdClass();
             //Yii::beginProfile('loadAirportData');
             if (!isset($oSegment->DepAirp)) {
                 Yii::log(print_r($oSegment, true) . '|||' . $arrKey, 'info');
             }
             try {
                 $oPart->departure_airport = Airport::getAirportByCode(UtilsHelper::soapElementValue($oSegment->DepAirp));
                 $oPart->departure_city = $oPart->departure_airport->city;
                 $oPart->arrival_airport = Airport::getAirportByCode(UtilsHelper::soapElementValue($oSegment->ArrAirp));
                 $oPart->arrival_city = $oPart->arrival_airport->city;
                 $oPart->departure_terminal_code = isset($oSegment->DepTerminal) ? UtilsHelper::soapElementValue($oSegment->DepTerminal) : '';
                 $oPart->arrival_terminal_code = isset($oSegment->ArrTerminal) ? UtilsHelper::soapElementValue($oSegment->ArrTerminal) : '';
                 $oPart->markAirline = Airline::getAirlineByCode($oSegment->MarkAirline);
                 if ($oSegment->OpAirline == '**') {
                     $oPart->opAirline = $oPart->markAirline;
                     $oPart->transport_airline = $oPart->markAirline;
                 } else {
                     $oPart->opAirline = Airline::getAirlineByCode($oSegment->OpAirline);
                     $oPart->transport_airline = Airline::getAirlineByCode($oSegment->OpAirline);
                 }
                 $oPart->code = $oSegment->FlightNumber;
                 $oPart->duration = $oSegment->FlightTime * 60;
                 $oPart->datetime_begin = UtilsHelper::soapElementValue($oSegment->DepDateTime);
                 $oPart->datetime_end = UtilsHelper::soapElementValue($oSegment->ArrDateTime);
                 $oPart->stopNum = UtilsHelper::soapElementValue($oSegment->StopNum);
                 $oPart->aircraft_code = $oSegment->AircraftType;
                 $oPart->aTariffs = array();
                 $oPart->aTaxes = array();
                 $oPart->aBookingCodes = array();
                 UtilsHelper::soapObjectsArray($oSegment->BookingCodes->BookingCode);
                 foreach ($oSegment->BookingCodes->BookingCode as $sBookingCode) {
                     $oPart->aBookingCodes[] = UtilsHelper::soapElementValue($sBookingCode);
                 }
                 $aParts[$oSegment->SegNum] = $oPart;
             } catch (CException $e) {
             }
         }
         if ($aParts) {
             $flightTicketingResponse->aParts = $aParts;
         }
         UtilsHelper::soapObjectsArray($response->Response->Ticketing->Travellers->Traveller);
         foreach ($response->Response->Ticketing->Travellers->Traveller as $traveller) {
             $ticket = array('ticketNumber' => $traveller->Ticket->TickectNum, 'documentNumber' => $traveller->DocumentInfo->DocNum);
             $flightTicketingResponse->tickets[] = $ticket;
         }
     } else {
         $flightTicketingResponse->responseStatus = ResponseStatus::ERROR_CODE_EXTERNAL;
         $flightTicketingResponse->addError('error', 'Status is:' . $status);
         $flightTicketingResponse->status = 2;
     }
     return $flightTicketingResponse;
 }