diff --git a/CHANGELOG.md b/CHANGELOG.md index 701bbb657..267b7c290 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +# 2016-09 + +* Implemented SalesReports_DisplayQueryReport +* Added support for multiple WSDL's (interfaces) in a WSAP(https://github.com/amabnl/amadeus-ws-client/issues/5) +* PSR-2 code style enforced via StyleCI + # 2016-08 * Implemented PNR_DisplayHistory diff --git a/docs/list-of-supported-messages.rst b/docs/list-of-supported-messages.rst index c76fe8571..06bc870b6 100644 --- a/docs/list-of-supported-messages.rst +++ b/docs/list-of-supported-messages.rst @@ -34,6 +34,7 @@ This is the list of messages that are at least partially supported at this time: - Info_EncodeDecodeCity - Command_Cryptic - PriceXplorer_ExtremeSearch +- SalesReports_DisplayQueryReport On the to-do list / work in progress: @@ -55,7 +56,6 @@ On the to-do list / work in progress: - Ticket_DisplayTST - Ticket_DeleteTST - Ticket_CreateTSMFromPricing -- SalesReports_DisplayQueryReport - Media_GetMedia - Service_IntegratedPricing - DocIssuance_IssueMiscellaneousDocuments diff --git a/docs/samples.rst b/docs/samples.rst index 00c3fd421..2b026f038 100644 --- a/docs/samples.rst +++ b/docs/samples.rst @@ -912,3 +912,25 @@ Request a basic Extreme Search result: $extremeSearchResult = $client->priceXplorerExtremeSearch($opt); +******************************* +SalesReports_DisplayQueryReport +******************************* + +Request a sales report from a certain date to another date, issued in all offices sharing the same IATA number; + +.. code-block:: php + + use Amadeus\Client\RequestOptions\SalesReportsDisplayQueryReportOptions; + + $opt = new SalesReportsDisplayQueryReportOptions([ + 'requestOptions' => [ + SalesReportsDisplayQueryReportOptions::SELECT_ALL_OFFICES_SHARING_IATA_NR + ], + 'agencySourceType' => SalesReportsDisplayQueryReportOptions::AGENCY_SRC_REPORTING_OFFICE, + 'agencyIataNumber' => '23491193', + 'startDate' => \DateTime::createFromFormat('Ymd', '20150101', new \DateTimeZone('UTC')), + 'endDate' => \DateTime::createFromFormat('Ymd', '20160331', new \DateTimeZone('UTC')) + ]); + + $salesReportResult = $client->salesReportsDisplayQueryReport($opt); + diff --git a/src/Amadeus/Client.php b/src/Amadeus/Client.php index d5c10e274..d32aa29d6 100644 --- a/src/Amadeus/Client.php +++ b/src/Amadeus/Client.php @@ -39,7 +39,6 @@ * TODO: * - support older versions of SoapHeader (1) * - implement calls for full online booking flow: - * SalesReports_DisplayQueryReport * Air_MultiAvailability * * - implement more PNR_AddMultiElements: @@ -663,6 +662,20 @@ public function priceXplorerExtremeSearch(RequestOptions\PriceXplorerExtremeSear return $this->callMessage($msgName, $options, $messageOptions); } + /** + * SalesReports_DisplayQueryReport + * + * @param RequestOptions\SalesReportsDisplayQueryReportOptions $options + * @param array $messageOptions + * @return Result + */ + public function salesReportsDisplayQueryReport(RequestOptions\SalesReportsDisplayQueryReportOptions $options, $messageOptions = []) + { + $msgName = 'SalesReports_DisplayQueryReport'; + + return $this->callMessage($msgName, $options, $messageOptions); + } + /** * Call a message with the given parameters * diff --git a/src/Amadeus/Client/RequestCreator/Base.php b/src/Amadeus/Client/RequestCreator/Base.php index 8d34c7b11..93f30239b 100644 --- a/src/Amadeus/Client/RequestCreator/Base.php +++ b/src/Amadeus/Client/RequestCreator/Base.php @@ -40,9 +40,7 @@ use Amadeus\Client\RequestOptions\OfferConfirmCarOptions; use Amadeus\Client\RequestOptions\OfferConfirmHotelOptions; use Amadeus\Client\RequestOptions\OfferVerifyOptions; -use Amadeus\Client\RequestOptions\Pnr\Element\ReceivedFrom; use Amadeus\Client\RequestOptions\PnrAddMultiElementsBase; -use Amadeus\Client\RequestOptions\PnrAddMultiElementsOptions; use Amadeus\Client\RequestOptions\PnrCancelOptions; use Amadeus\Client\RequestOptions\PnrCreatePnrOptions; use Amadeus\Client\RequestOptions\PnrDisplayHistoryOptions; @@ -54,6 +52,7 @@ use Amadeus\Client\RequestOptions\QueuePlacePnrOptions; use Amadeus\Client\RequestOptions\QueueRemoveItemOptions; use Amadeus\Client\RequestOptions\RequestOptionsInterface; +use Amadeus\Client\RequestOptions\SalesReportsDisplayQueryReportOptions; use Amadeus\Client\RequestOptions\SecurityAuthenticateOptions; use Amadeus\Client\RequestOptions\TicketCreateTstFromPricingOptions; use Amadeus\Client\Struct; @@ -453,6 +452,17 @@ protected function createPriceXplorerExtremeSearch(PriceXplorerExtremeSearchOpti return new Struct\PriceXplorer\ExtremeSearch($params); } + /** + * SalesReports_DisplayQueryReport + * + * @param SalesReportsDisplayQueryReportOptions $params + * @return Struct\SalesReports\DisplayQueryReport + */ + protected function createSalesReportsDisplayQueryReport(SalesReportsDisplayQueryReportOptions $params) + { + return new Struct\SalesReports\DisplayQueryReport($params); + } + /** * Check if a given message is in the active WSDL. Throws exception if it isn't. * diff --git a/src/Amadeus/Client/ResponseHandler/Base.php b/src/Amadeus/Client/ResponseHandler/Base.php index eaff5cdf4..5d72089de 100644 --- a/src/Amadeus/Client/ResponseHandler/Base.php +++ b/src/Amadeus/Client/ResponseHandler/Base.php @@ -728,6 +728,15 @@ protected function analyzePriceXplorerExtremeSearchResponse($response) return $this->analyzeSimpleResponseErrorCodeAndMessage($response); } + /** + * @param SendResult $response + * @return Result + */ + protected function analyzeSalesReportsDisplayQueryReportResponse($response) + { + return $this->analyzeSimpleResponseErrorCodeAndMessage($response); + } + /** * @param SendResult $response WebService message Send Result * @return Result diff --git a/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport.php b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport.php index d0d0d0518..3fda693e3 100644 --- a/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport.php +++ b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport.php @@ -24,7 +24,17 @@ use Amadeus\Client\RequestOptions\SalesReportsDisplayQueryReportOptions; use Amadeus\Client\Struct\BaseWsMessage; +use Amadeus\Client\Struct\SalesReports\DisplayQueryReport\ActionDetails; +use Amadeus\Client\Struct\SalesReports\DisplayQueryReport\AgencyDetails; +use Amadeus\Client\Struct\SalesReports\DisplayQueryReport\AgentUserDetails; +use Amadeus\Client\Struct\SalesReports\DisplayQueryReport\CurrencyInfo; +use Amadeus\Client\Struct\SalesReports\DisplayQueryReport\DateDetails; +use Amadeus\Client\Struct\SalesReports\DisplayQueryReport\FormOfPaymentDetails; use Amadeus\Client\Struct\SalesReports\DisplayQueryReport\RequestOption; +use Amadeus\Client\Struct\SalesReports\DisplayQueryReport\SalesIndicator; +use Amadeus\Client\Struct\SalesReports\DisplayQueryReport\SalesPeriodDetails; +use Amadeus\Client\Struct\SalesReports\DisplayQueryReport\TransactionData; +use Amadeus\Client\Struct\SalesReports\DisplayQueryReport\ValidatingCarrierDetails; /** * DisplayQueryReport @@ -150,6 +160,9 @@ protected function loadRequestOptions($requestOptions) */ protected function loadAgencySource($agencySourceType, $iataNumber, $officeId) { + if (!empty($agencySourceType) || !empty($iataNumber) || !empty($officeId)) { + $this->agencyDetails = new AgencyDetails($agencySourceType, $iataNumber, $officeId); + } } /** @@ -157,15 +170,21 @@ protected function loadAgencySource($agencySourceType, $iataNumber, $officeId) */ protected function loadAgent($agentCode) { + if (!empty($agentCode)) { + $this->agentUserDetails = new AgentUserDetails($agentCode); + } } /** - * @param string|null $type * @param string|null $code + * @param string|null $type * @param string|null $issueIndicator */ - protected function loadTransaction($type, $code, $issueIndicator) + protected function loadTransaction($code, $type, $issueIndicator) { + if (!empty($type) || !empty($code) || !empty($issueIndicator)) { + $this->transactionData[] = new TransactionData($type, $code, $issueIndicator); + } } /** @@ -173,6 +192,9 @@ protected function loadTransaction($type, $code, $issueIndicator) */ protected function loadValidatingCarrier($validatingCarrier) { + if (!empty($validatingCarrier)) { + $this->validatingCarrierDetails = new ValidatingCarrierDetails($validatingCarrier); + } } /** @@ -181,6 +203,9 @@ protected function loadValidatingCarrier($validatingCarrier) */ protected function loadDateRange($startDate, $endDate) { + if (!empty($startDate) || !empty($endDate)) { + $this->salesPeriodDetails = new SalesPeriodDetails($startDate, $endDate); + } } /** @@ -189,6 +214,9 @@ protected function loadDateRange($startDate, $endDate) */ protected function loadDate($type, $date) { + if (!empty($type) || !empty($date)) { + $this->dateDetails = new DateDetails($type, $date); + } } /** @@ -197,6 +225,9 @@ protected function loadDate($type, $date) */ protected function loadCurrency($type, $currency) { + if (!empty($type) || !empty($currency)) { + $this->currencyInfo = new CurrencyInfo($type, $currency); + } } /** @@ -205,6 +236,9 @@ protected function loadCurrency($type, $currency) */ protected function loadFormOfPayment($type, $vendor) { + if (!empty($type) || !empty($vendor)) { + $this->formOfPaymentDetails = new FormOfPaymentDetails($type, $vendor); + } } /** @@ -212,6 +246,9 @@ protected function loadFormOfPayment($type, $vendor) */ protected function loadSalesIndicator($indicator) { + if (!empty($indicator)) { + $this->salesIndicator = new SalesIndicator($indicator); + } } /** @@ -220,5 +257,8 @@ protected function loadSalesIndicator($indicator) */ protected function loadScrolling($count, $fromItem) { + if (!empty($count) || !empty($fromItem)) { + $this->actionDetails = new ActionDetails($count, $fromItem); + } } } diff --git a/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/ActionDetails.php b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/ActionDetails.php index 368a6c403..f7037af37 100644 --- a/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/ActionDetails.php +++ b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/ActionDetails.php @@ -30,4 +30,30 @@ */ class ActionDetails { + /** + * @var NumberOfItemsDetails + */ + public $numberOfItemsDetails; + + /** + * @var LastItemsDetails + */ + public $lastItemsDetails; + + /** + * ActionDetails constructor. + * + * @param int|null $amount + * @param string|null $lastItem + */ + public function __construct($amount, $lastItem) + { + if (!empty($amount)) { + $this->numberOfItemsDetails = new NumberOfItemsDetails($amount); + } + + if (!empty($lastItem)) { + $this->lastItemsDetails = new LastItemsDetails($lastItem); + } + } } diff --git a/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/AgencyDetails.php b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/AgencyDetails.php index c0167ddcf..b467a12e2 100644 --- a/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/AgencyDetails.php +++ b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/AgencyDetails.php @@ -38,4 +38,21 @@ class AgencyDetails * @var OriginatorDetails */ public $originatorDetails; + + /** + * AgencyDetails constructor. + * + * @param string $sourceType + * @param string $iataNumber + * @param string $officeId + */ + public function __construct($sourceType, $iataNumber, $officeId) + { + if (!empty($sourceType)) { + $this->sourceType = new SourceType($sourceType); + } + if (!empty($iataNumber) || !empty($officeId)) { + $this->originatorDetails = new OriginatorDetails($iataNumber, $officeId); + } + } } diff --git a/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/AgentUserDetails.php b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/AgentUserDetails.php index 0085bf137..fa1bccbcc 100644 --- a/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/AgentUserDetails.php +++ b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/AgentUserDetails.php @@ -30,4 +30,25 @@ */ class AgentUserDetails { + /** + * @var OriginIdentification + */ + public $originIdentification; + + /** + * A code given to an agent by the originating reservation system. + * + * @var string + */ + public $originator; + + /** + * AgentUserDetails constructor. + * + * @param string $agentId + */ + public function __construct($agentId) + { + $this->originIdentification = new OriginIdentification($agentId); + } } diff --git a/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/CompanyIdentification.php b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/CompanyIdentification.php new file mode 100644 index 000000000..5e7384898 --- /dev/null +++ b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/CompanyIdentification.php @@ -0,0 +1,32 @@ + + */ +class CompanyIdentification +{ + /** + * @var string + */ + public $marketingCompany; + + /** + * CompanyIdentification constructor. + * + * @param string $company + */ + public function __construct($company) + { + $this->marketingCompany = $company; + } +} diff --git a/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/CurrencyDetails.php b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/CurrencyDetails.php new file mode 100644 index 000000000..f749820b4 --- /dev/null +++ b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/CurrencyDetails.php @@ -0,0 +1,43 @@ + + */ +class CurrencyDetails +{ + const CURRENCY_TARGET = 3; + + const CURRENCY_REFERENCE = 2; + + /** + * @var int + */ + public $currencyQualifier; + + /** + * @var string + */ + public $currencyIsoCode; + + /** + * CurrencyDetails constructor. + * + * @param int $type + * @param string $currency + */ + public function __construct($type, $currency) + { + $this->currencyQualifier = $type; + $this->currencyIsoCode = $currency; + } +} diff --git a/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/CurrencyInfo.php b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/CurrencyInfo.php index c31c36e95..e4328cc6b 100644 --- a/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/CurrencyInfo.php +++ b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/CurrencyInfo.php @@ -30,4 +30,21 @@ */ class CurrencyInfo { + /** + * @var CurrencyDetails + */ + public $currencyDetails; + + /** + * CurrencyInfo constructor. + * + * @param int $type + * @param string $currency + */ + public function __construct($type, $currency) + { + if (!empty($type) || !empty($currency)) { + $this->currencyDetails = new CurrencyDetails($type, $currency); + } + } } diff --git a/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/DateDetails.php b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/DateDetails.php index fe67db943..4f3c588b9 100644 --- a/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/DateDetails.php +++ b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/DateDetails.php @@ -30,4 +30,40 @@ */ class DateDetails { + const DATE_TYPE_CURRENT = "C"; + + const DATE_TYPE_SALES_REPORT_CLOSURE = "D"; + + const DATE_TYPE_ISSUANCE = "I"; + + const DATE_TYPE_REFUNDING = "R"; + + const DATE_TYPE_SPECIFIC = "S"; + + /** + * self::DATE_TYPE_* + * + * @var string + */ + public $businessSemantic; + + /** + * @var DateTime + */ + public $dateTime; + + /** + * DateDetails constructor. + * + * @param string $dateType + * @param \DateTime $date + */ + public function __construct($dateType, $date) + { + $this->businessSemantic = $dateType; + + if (!empty($date)) { + $this->dateTime = new DateTime($date); + } + } } diff --git a/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/DateTime.php b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/DateTime.php new file mode 100644 index 000000000..2f1e19514 --- /dev/null +++ b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/DateTime.php @@ -0,0 +1,46 @@ + + */ +class DateTime +{ + /** + * @var string + */ + public $year; + + /** + * @var string + */ + public $month; + + /** + * @var string + */ + public $day; + + /** + * DateTime constructor. + * + * @param \DateTime|null $date + */ + public function __construct($date) + { + if ($date instanceof \DateTime) { + $this->year = $date->format('Y'); + $this->month = $date->format('m'); + $this->day = $date->format('d'); + } + } +} diff --git a/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/FormOfPayment.php b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/FormOfPayment.php new file mode 100644 index 000000000..a7b28cfd2 --- /dev/null +++ b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/FormOfPayment.php @@ -0,0 +1,82 @@ + + */ +class FormOfPayment +{ + /** + * On behalf of/in exchange for a document previously issued by a Sales Agent + */ + const FOP_ISSUED_BY_AGENT = "AGT"; + /** + * Cash + */ + const FOP_CASH = "CA"; + /** + * Credit Card + */ + const FOP_CREDIT_CARD = "CC"; + /** + * Check + */ + const FOP_CHECK = "CK"; + /** + * Government transportation request + */ + const FOP_GOVERNMENT_TRANSPORTATION_REQ = "GR"; + /** + * Miscellaneous + */ + const FOP_MISCELLANEOUS = "MS"; + /** + * Non-refundable (refund restricted) + */ + const FOP_NON_REFUNDABLE = "NR"; + /** + * Prepaid Ticket Advice (PTA) + */ + const FOP_PREPAID_TICKET_ADVICE = "PT"; + /** + * Single government transportation request + */ + const FOP_SINGLE_GOVERNMENT_TRANSPORTATION_REQ = "SGR"; + /** + * United Nations Transportation Request + */ + const FOP_UNITED_NATIONS_TRANSPORTATION_REQ = "UN"; + + /** + * self::FOP_* + * + * @var string + */ + public $type; + + /** + * @var string + */ + public $vendorCode; + + /** + * FormOfPayment constructor. + * + * @param string $type self::FOP_* + * @param string $vendor + */ + public function __construct($type, $vendor) + { + $this->type = $type; + $this->vendorCode = $vendor; + } +} diff --git a/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/FormOfPaymentDetails.php b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/FormOfPaymentDetails.php index 858af202e..490edc176 100644 --- a/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/FormOfPaymentDetails.php +++ b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/FormOfPaymentDetails.php @@ -30,4 +30,19 @@ */ class FormOfPaymentDetails { + /** + * @var FormOfPayment + */ + public $formOfPayment; + + /** + * FormOfPaymentDetails constructor. + * + * @param string $type FormOfPayment::FOP_* + * @param string $vendor + */ + public function __construct($type, $vendor) + { + $this->formOfPayment = new FormOfPayment($type, $vendor); + } } diff --git a/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/LastItemsDetails.php b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/LastItemsDetails.php new file mode 100644 index 000000000..19f399eaf --- /dev/null +++ b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/LastItemsDetails.php @@ -0,0 +1,32 @@ + + */ +class LastItemsDetails +{ + /** + * @var string + */ + public $lastItemIdentifier; + + /** + * LastItemsDetails constructor. + * + * @param string $lastItemIdentifier + */ + public function __construct($lastItemIdentifier) + { + $this->lastItemIdentifier = $lastItemIdentifier; + } +} diff --git a/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/NumberOfItemsDetails.php b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/NumberOfItemsDetails.php new file mode 100644 index 000000000..749f83816 --- /dev/null +++ b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/NumberOfItemsDetails.php @@ -0,0 +1,32 @@ + + */ +class NumberOfItemsDetails +{ + /** + * @var int + */ + public $numberOfItems; + + /** + * NumberOfItemsDetails constructor. + * + * @param int $amount + */ + public function __construct($amount) + { + $this->numberOfItems = $amount; + } +} diff --git a/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/OriginIdentification.php b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/OriginIdentification.php new file mode 100644 index 000000000..18d932b05 --- /dev/null +++ b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/OriginIdentification.php @@ -0,0 +1,18 @@ + + */ +class OriginIdentification extends \Amadeus\Client\Struct\Offer\ConfirmHotel\OriginIdentification +{ +} diff --git a/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/OriginatorDetails.php b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/OriginatorDetails.php new file mode 100644 index 000000000..7201ffbd1 --- /dev/null +++ b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/OriginatorDetails.php @@ -0,0 +1,39 @@ + + */ +class OriginatorDetails +{ + /** + * @var string + */ + public $originatorId; + + /** + * @var string + */ + public $inHouseIdentification1; + + /** + * OriginatorDetails constructor. + * + * @param string $iataNumber + * @param string $officeId + */ + public function __construct($iataNumber, $officeId) + { + $this->originatorId = $iataNumber; + $this->inHouseIdentification1 = $officeId; + } +} diff --git a/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/SalesIndicator.php b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/SalesIndicator.php index 8c9df1240..b8ab3c38b 100644 --- a/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/SalesIndicator.php +++ b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/SalesIndicator.php @@ -30,4 +30,18 @@ */ class SalesIndicator { + /** + * @var StatusInformation + */ + public $statusInformation; + + /** + * SalesIndicator constructor. + * + * @param string $indicator StatusInformation::SALESIND_* + */ + public function __construct($indicator) + { + $this->statusInformation = new StatusInformation($indicator); + } } diff --git a/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/SalesPeriodDetails.php b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/SalesPeriodDetails.php index 6a5dc72f1..d61e0ac6c 100644 --- a/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/SalesPeriodDetails.php +++ b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/SalesPeriodDetails.php @@ -30,4 +30,30 @@ */ class SalesPeriodDetails { + /** + * @var DateTime + */ + public $beginDateTime; + + /** + * @var DateTime + */ + public $endDateTime; + + /** + * SalesPeriodDetails constructor. + * + * @param \DateTime|null $begin + * @param \DateTime|null $end + */ + public function __construct($begin, $end) + { + if ($begin instanceof \DateTime) { + $this->beginDateTime = new DateTime($begin); + } + + if ($end instanceof \DateTime) { + $this->endDateTime = new DateTime($end); + } + } } diff --git a/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/SourceType.php b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/SourceType.php index 4e0715a7c..ee608de43 100644 --- a/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/SourceType.php +++ b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/SourceType.php @@ -31,12 +31,38 @@ class SourceType { /** - * @var int + * Reporting Office + */ + const AGENCY_SRC_REPORTING_OFFICE = "REP"; + /** + * STP office + */ + const AGENCY_SRC_STP_OFFICE = "STP"; + /** + * TDO office + */ + const AGENCY_SRC_TDO_OFFICE = "TDO"; + + + /** + * self::AGENCY_SRC_* + * + * @var string */ public $sourceQualifier1; /** - * @var int + * @var string */ public $sourceQualifier2; + + /** + * SourceType constructor. + * + * @param string $sourceType self::AGENCY_SRC_* + */ + public function __construct($sourceType) + { + $this->sourceQualifier1 = $sourceType; + } } diff --git a/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/StatusInformation.php b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/StatusInformation.php new file mode 100644 index 000000000..e551b2c07 --- /dev/null +++ b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/StatusInformation.php @@ -0,0 +1,47 @@ + + */ +class StatusInformation +{ + /** + * Domestic sale + */ + const SALESIND_DOMESTIC = "DOM"; + /** + * International sale + */ + const SALESIND_INTERNATIONAL = "INT"; + /** + * Voided document + */ + const SALESIND_VOIDED_DOCUMENT = "V"; + + /** + * self::SALESIND_* + * + * @var string + */ + public $type; + + /** + * StatusInformation constructor. + * + * @param string $indicator self::SALESIND_* + */ + public function __construct($indicator) + { + $this->type = $indicator; + } +} diff --git a/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/TransactionData.php b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/TransactionData.php index 96b50a930..ac6848e2b 100644 --- a/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/TransactionData.php +++ b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/TransactionData.php @@ -30,4 +30,20 @@ */ class TransactionData { + /** + * @var TransactionDetails + */ + public $transactionDetails; + + /** + * TransactionData constructor. + * + * @param string|null $type + * @param string|null $code + * @param string|null $issueIndicator + */ + public function __construct($type, $code, $issueIndicator) + { + $this->transactionDetails = new TransactionDetails($type, $code, $issueIndicator); + } } diff --git a/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/TransactionDetails.php b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/TransactionDetails.php new file mode 100644 index 000000000..496d9931b --- /dev/null +++ b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/TransactionDetails.php @@ -0,0 +1,46 @@ + + */ +class TransactionDetails +{ + /** + * @var string + */ + public $code; + + /** + * @var string + */ + public $type; + + /** + * @var string + */ + public $issueIndicator; + + /** + * TransactionDetails constructor. + * + * @param string|null $type + * @param string|null $code + * @param string|null $issueIndicator + */ + public function __construct($type, $code, $issueIndicator) + { + $this->code = $code; + $this->type = $type; + $this->issueIndicator = $issueIndicator; + } +} diff --git a/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/ValidatingCarrierDetails.php b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/ValidatingCarrierDetails.php index 44098b343..5f4dd03e5 100644 --- a/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/ValidatingCarrierDetails.php +++ b/src/Amadeus/Client/Struct/SalesReports/DisplayQueryReport/ValidatingCarrierDetails.php @@ -30,4 +30,18 @@ */ class ValidatingCarrierDetails { + /** + * @var CompanyIdentification + */ + public $companyIdentification; + + /** + * ValidatingCarrierDetails constructor. + * + * @param string $validatingCarrier + */ + public function __construct($validatingCarrier) + { + $this->companyIdentification = new CompanyIdentification($validatingCarrier); + } } diff --git a/tests/Amadeus/Client/ResponseHandler/BaseTest.php b/tests/Amadeus/Client/ResponseHandler/BaseTest.php index ccdb3ba05..95a6228d0 100644 --- a/tests/Amadeus/Client/ResponseHandler/BaseTest.php +++ b/tests/Amadeus/Client/ResponseHandler/BaseTest.php @@ -816,6 +816,21 @@ public function testCanHandlePriceXplorerExtremeSearchErrResponse() $this->assertEquals("Invalid departure dates range", $result->messages[0]->text); } + public function testCanHandleSalesReportsDisplayQueryReport() + { + $respHandler = new ResponseHandler\Base(); + + $sendResult = new SendResult(); + $sendResult->responseXml = $this->getTestFile('dummySalesReportsDisplayQueryReportErrorResponse.txt'); + + $result = $respHandler->analyzeResponse($sendResult, 'SalesReports_DisplayQueryReport'); + + $this->assertEquals(Result::STATUS_ERROR, $result->status); + $this->assertEquals(1, count($result->messages)); + $this->assertEquals('6466', $result->messages[0]->code); + $this->assertEquals("NO DATA FOUND", $result->messages[0]->text); + } + public function testCanHandleInvalidXmlDocument() { $this->setExpectedException('Amadeus\Client\Exception'); diff --git a/tests/Amadeus/Client/ResponseHandler/testfiles/dummySalesReportsDisplayQueryReportErrorResponse.txt b/tests/Amadeus/Client/ResponseHandler/testfiles/dummySalesReportsDisplayQueryReportErrorResponse.txt new file mode 100644 index 000000000..775bbae97 --- /dev/null +++ b/tests/Amadeus/Client/ResponseHandler/testfiles/dummySalesReportsDisplayQueryReportErrorResponse.txt @@ -0,0 +1,18 @@ + + + + + + 6466 + + + + + 1 + M + 1 + + NO DATA FOUND + + + \ No newline at end of file diff --git a/tests/Amadeus/Client/Struct/SalesReports/DisplayQueryReportTest.php b/tests/Amadeus/Client/Struct/SalesReports/DisplayQueryReportTest.php new file mode 100644 index 000000000..56334c649 --- /dev/null +++ b/tests/Amadeus/Client/Struct/SalesReports/DisplayQueryReportTest.php @@ -0,0 +1,238 @@ + + */ +class DisplayQueryReportTest extends BaseTestCase +{ + public function testCanMakeMessageEmpty() + { + $msg = new DisplayQueryReport(new SalesReportsDisplayQueryReportOptions()); + + $this->assertNull($msg->actionDetails); + $this->assertNull($msg->agencyDetails); + $this->assertNull($msg->agentUserDetails); + $this->assertNull($msg->attributeInfo); + $this->assertNull($msg->currencyInfo); + $this->assertNull($msg->dateDetails); + $this->assertNull($msg->formOfPaymentDetails); + $this->assertNull($msg->fromSequenceDocumentNumber); + $this->assertNull($msg->requestOption); + $this->assertNull($msg->salesPeriodDetails); + $this->assertNull($msg->salesIndicator); + $this->assertEmpty($msg->transactionData); + } + + public function testCanMakeMessageRequestOptions() + { + $msg = new DisplayQueryReport(new SalesReportsDisplayQueryReportOptions([ + 'requestOptions' => [ + SalesReportsDisplayQueryReportOptions::SELECT_OFFICE_ALL_AGENTS, + SalesReportsDisplayQueryReportOptions::SELECT_SATELLITE_TICKET_OFFICE + ] + ])); + + $this->assertEquals( + DisplayQueryReport\SelectionDetails::SELECT_OFFICE_ALL_AGENTS, + $msg->requestOption->selectionDetails->option + ); + $this->assertCount(1, $msg->requestOption->otherSelectionDetails); + $this->assertEquals( + DisplayQueryReport\SelectionDetails::SELECT_SATELLITE_TICKET_OFFICE, + $msg->requestOption->otherSelectionDetails[0]->option + ); + } + + public function testCanMakeMessageOfficesSharingSameIataCode() + { + $msg = new DisplayQueryReport(new SalesReportsDisplayQueryReportOptions([ + 'requestOptions' => [ + SalesReportsDisplayQueryReportOptions::SELECT_ALL_OFFICES_SHARING_IATA_NR + ], + 'agencySourceType' => SalesReportsDisplayQueryReportOptions::AGENCY_SRC_REPORTING_OFFICE, + 'agencyIataNumber' => '23491193' + ])); + + $this->assertEquals( + SalesReportsDisplayQueryReportOptions::SELECT_ALL_OFFICES_SHARING_IATA_NR, + $msg->requestOption->selectionDetails->option + ); + $this->assertEmpty($msg->requestOption->otherSelectionDetails); + + $this->assertEquals( + SalesReportsDisplayQueryReportOptions::AGENCY_SRC_REPORTING_OFFICE, + $msg->agencyDetails->sourceType->sourceQualifier1 + ); + $this->assertEquals( + '23491193', + $msg->agencyDetails->originatorDetails->originatorId + ); + $this->assertEmpty($msg->agencyDetails->originatorDetails->inHouseIdentification1); + } + + public function testCanMakeMessageIssuedForSpecificAgent() + { + $msg = new DisplayQueryReport(new SalesReportsDisplayQueryReportOptions([ + 'agentCode' => '1111AA' + ])); + + $this->assertEquals('1111AA', $msg->agentUserDetails->originIdentification->originatorId); + } + + public function testCanMakeMessageAllAgentsForSpecificOffice() + { + $msg = new DisplayQueryReport(new SalesReportsDisplayQueryReportOptions([ + 'requestOptions' => [ + SalesReportsDisplayQueryReportOptions::SELECT_OFFICE_ALL_AGENTS + ], + 'agencySourceType' => SalesReportsDisplayQueryReportOptions::AGENCY_SRC_REPORTING_OFFICE, + 'agencyIataNumber' => '23491193', + 'agencyOfficeId' => 'FRA6X098F' + ])); + + $this->assertEquals( + SalesReportsDisplayQueryReportOptions::SELECT_OFFICE_ALL_AGENTS, + $msg->requestOption->selectionDetails->option + ); + $this->assertEmpty($msg->requestOption->otherSelectionDetails); + + $this->assertEquals( + SalesReportsDisplayQueryReportOptions::AGENCY_SRC_REPORTING_OFFICE, + $msg->agencyDetails->sourceType->sourceQualifier1 + ); + $this->assertEquals( + '23491193', + $msg->agencyDetails->originatorDetails->originatorId + ); + $this->assertEquals('FRA6X098F', $msg->agencyDetails->originatorDetails->inHouseIdentification1); + } + + public function testCanMakeMessageTransactionCode() + { + $msg = new DisplayQueryReport(new SalesReportsDisplayQueryReportOptions([ + 'transactionCode' => 'TKTT' + ])); + + $this->assertCount(1, $msg->transactionData); + $this->assertEquals('TKTT', $msg->transactionData[0]->transactionDetails->code); + $this->assertNull($msg->transactionData[0]->transactionDetails->type); + $this->assertNull($msg->transactionData[0]->transactionDetails->issueIndicator); + } + + public function testCanMakeMessageTransactionType() + { + $msg = new DisplayQueryReport(new SalesReportsDisplayQueryReportOptions([ + 'transactionType' => 'SALE', + 'transactionIssueIndicator' => 'C' + ])); + + $this->assertNull($msg->transactionData[0]->transactionDetails->code); + $this->assertEquals('SALE', $msg->transactionData[0]->transactionDetails->type); + $this->assertEquals('C', $msg->transactionData[0]->transactionDetails->issueIndicator); + } + + public function testCanMakeMessageValidatingCarrier() + { + $msg = new DisplayQueryReport(new SalesReportsDisplayQueryReportOptions([ + 'validatingCarrier' => '6X' + ])); + + $this->assertEquals('6X', $msg->validatingCarrierDetails->companyIdentification->marketingCompany); + } + + public function testCanMakeMessageFopCreditCardVendor() + { + $msg = new DisplayQueryReport(new SalesReportsDisplayQueryReportOptions([ + 'fopType' => SalesReportsDisplayQueryReportOptions::FOP_CREDIT_CARD, + 'fopVendor' => 'AX' + ])); + + $this->assertEquals( + DisplayQueryReport\FormOfPayment::FOP_CREDIT_CARD, + $msg->formOfPaymentDetails->formOfPayment->type + ); + $this->assertEquals('AX', $msg->formOfPaymentDetails->formOfPayment->vendorCode); + } + + public function testCanMakeMessageWithSalesIndicator() + { + $msg = new DisplayQueryReport(new SalesReportsDisplayQueryReportOptions([ + 'salesIndicator' => SalesReportsDisplayQueryReportOptions::SALESIND_DOMESTIC + ])); + + $this->assertEquals( + DisplayQueryReport\StatusInformation::SALESIND_DOMESTIC, + $msg->salesIndicator->statusInformation->type + ); + } + + public function testCanMakeMessageCurrencyCode() + { + $msg = new DisplayQueryReport(new SalesReportsDisplayQueryReportOptions([ + 'currencyType' => SalesReportsDisplayQueryReportOptions::CURRENCY_TARGET, + 'currency' => 'USD' + ])); + + $this->assertEquals('USD', $msg->currencyInfo->currencyDetails->currencyIsoCode); + $this->assertEquals( + DisplayQueryReport\CurrencyDetails::CURRENCY_TARGET, + $msg->currencyInfo->currencyDetails->currencyQualifier + ); + } + + public function testCanMakeMessageForSpecificDate() + { + $msg = new DisplayQueryReport(new SalesReportsDisplayQueryReportOptions([ + 'specificDate' => \DateTime::createFromFormat('YmdHis', '20161023000000', new \DateTimeZone('UTC')), + 'specificDateType' => SalesReportsDisplayQueryReportOptions::DATE_TYPE_SPECIFIC + ])); + + $this->assertEquals( + DisplayQueryReport\DateDetails::DATE_TYPE_SPECIFIC, + $msg->dateDetails->businessSemantic + ); + $this->assertEquals('2016', $msg->dateDetails->dateTime->year); + $this->assertEquals('10', $msg->dateDetails->dateTime->month); + $this->assertEquals('23', $msg->dateDetails->dateTime->day); + } + + public function testCanMakeMessageSalesPeriod() + { + $msg = new DisplayQueryReport(new SalesReportsDisplayQueryReportOptions([ + 'startDate' => \DateTime::createFromFormat('YmdHis', '20150101000000', new \DateTimeZone('UTC')), + 'endDate' => \DateTime::createFromFormat('YmdHis', '20160331000000', new \DateTimeZone('UTC')) + ])); + + $this->assertEquals('2015', $msg->salesPeriodDetails->beginDateTime->year); + $this->assertEquals('01', $msg->salesPeriodDetails->beginDateTime->month); + $this->assertEquals('01', $msg->salesPeriodDetails->beginDateTime->day); + $this->assertEquals('2016', $msg->salesPeriodDetails->endDateTime->year); + $this->assertEquals('03', $msg->salesPeriodDetails->endDateTime->month); + $this->assertEquals('31', $msg->salesPeriodDetails->endDateTime->day); + } + + public function testCanMakeMessageScrollingLastFiftyRows() + { + $msg = new DisplayQueryReport(new SalesReportsDisplayQueryReportOptions([ + 'scrollingCount' => 50, + 'scrollingFromItem' => '4527896352' + ])); + + $this->assertEquals(50, $msg->actionDetails->numberOfItemsDetails->numberOfItems); + $this->assertEquals('4527896352', $msg->actionDetails->lastItemsDetails->lastItemIdentifier); + } +} diff --git a/tests/Amadeus/ClientTest.php b/tests/Amadeus/ClientTest.php index 5f3ecb3c9..06c2ec823 100644 --- a/tests/Amadeus/ClientTest.php +++ b/tests/Amadeus/ClientTest.php @@ -1576,6 +1576,65 @@ public function testCanSendPriceXplorerExtremeSearch() $this->assertEquals($messageResult, $response); } + public function testCanSendSalesReportsDisplayQueryReport() + { + $mockSessionHandler = $this->getMockBuilder('Amadeus\Client\Session\Handler\HandlerInterface')->getMock(); + + $mockedSendResult = new Client\Session\Handler\SendResult(); + $mockedSendResult->responseXml = $this->getTestFile('SalesReportsDisplayQueryReportReply.txt'); + + $messageResult = new Client\Result($mockedSendResult); + + $expectedMessageResult = new Client\Struct\SalesReports\DisplayQueryReport( + new Client\RequestOptions\SalesReportsDisplayQueryReportOptions([ + 'requestOptions' => [ + Client\RequestOptions\SalesReportsDisplayQueryReportOptions::SELECT_OFFICE_ALL_AGENTS + ] + ]) + ); + + $mockSessionHandler + ->expects($this->once()) + ->method('sendMessage') + ->with('SalesReports_DisplayQueryReport', $expectedMessageResult, ['endSession' => false]) + ->will($this->returnValue($mockedSendResult)); + $mockSessionHandler + ->expects($this->never()) + ->method('getLastResponse'); + $mockSessionHandler + ->expects($this->once()) + ->method('getMessagesAndVersions') + ->will($this->returnValue(['SalesReports_DisplayQueryReport' => "12.1"])); + + $mockResponseHandler = $this->getMockBuilder('Amadeus\Client\ResponseHandler\ResponseHandlerInterface')->getMock(); + + $mockResponseHandler + ->expects($this->once()) + ->method('analyzeResponse') + ->with($mockedSendResult, 'SalesReports_DisplayQueryReport') + ->will($this->returnValue($messageResult)); + + $par = new Params(); + $par->sessionHandler = $mockSessionHandler; + $par->requestCreatorParams = new Params\RequestCreatorParams([ + 'receivedFrom' => 'some RF string', + 'originatorOfficeId' => 'BRUXXXXXX' + ]); + $par->responseHandler = $mockResponseHandler; + + $client = new Client($par); + + $response = $client->salesReportsDisplayQueryReport( + new Client\RequestOptions\SalesReportsDisplayQueryReportOptions([ + 'requestOptions' => [ + Client\RequestOptions\SalesReportsDisplayQueryReportOptions::SELECT_OFFICE_ALL_AGENTS + ] + ]) + ); + + $this->assertEquals($messageResult, $response); + } + public function testCanFareCheckRules() { $mockSessionHandler = $this->getMockBuilder('Amadeus\Client\Session\Handler\HandlerInterface')->getMock(); diff --git a/tests/Amadeus/testfiles/SalesReportsDisplayQueryReportReply.txt b/tests/Amadeus/testfiles/SalesReportsDisplayQueryReportReply.txt new file mode 100644 index 000000000..f251fa03b --- /dev/null +++ b/tests/Amadeus/testfiles/SalesReportsDisplayQueryReportReply.txt @@ -0,0 +1,2417 @@ + + + + + EUR + + + + C + + 2011 + 11 + 8 + + + + S + + 2011 + 11 + 7 + + + + + + REP + + + 20492231 + BIQ6X00OB + + + + + + 162 + S + + + + + 0571122330359 + 1 + + CS + + + + 712 + 508.00 + + + TTX + 64.20 + + + F + 0.00 + + + OB + 30.00 + + + T + 602.20 + + + + + 0001AA + + + + + TKTM + SALE + C + + + + + + CA + + + + + FP + 602.20 + + + + + + AF/TRMD + + + + + 5JWAYS + + + + + + + 368 + S + + + + + 0572356608967 + 1 + + CS + + + + 712 + 77.00 + + + TTX + 116.71 + + + F + 0.00 + + + OB + 30.00 + + + T + 223.71 + + + + + 0001AA + + + + + TKTT + SALE + C + + + + + + CA + + + + + FP + 223.71 + + + + + + FARE/A (CHD) + + + + + 5J9BPL + + + + + + + 163 + S + + + + + 0571122334839 + 1 + + CS + + + + 712 + 508.00 + + + TTX + 64.20 + + + F + 0.00 + + + OB + 30.00 + + + T + 602.20 + + + + + 0001AA + + + + + TKTM + SALE + C + + + + + + CA + + + + + FP + 602.20 + + + + + + AF/TRMD + + + + + 5JWYWF + + + + + + + 369 + S + + + + + 0572356608968 + 1 + + CS + + + + 712 + 10.00 + + + TTX + 0.00 + + + F + 0.00 + + + OB + 0.00 + + + T + 10.00 + + + + + 0001AA + + + + + TKTT + SALE + C + + + + + + CC + + + + + FP + 10.00 + + + + + + AMADEUSTEST/TROISDS + + + + + 5KAX3G + + + + + + + 370 + S + + + + + 0572356608969 + 1 + + CS + + + + 712 + 10.00 + + + TTX + 0.00 + + + F + 0.00 + + + OB + 0.00 + + + T + 10.00 + + + + + 0001AA + + + + + TKTT + SALE + C + + + + + + CC + + + + + FP + 10.00 + + + + + + AMADEUSTEST/PAXBIS + + + + + 5KAX3G + + + + + + + 371 + S + + + + + 0572356608970 + 1 + + CS + + + + 712 + 374.00 + + + TTX + 64.57 + + + F + 0.00 + + + OB + 30.00 + + + T + 468.57 + + + + + 0001AA + + + + + TKTT + SALE + C + + + + + + CC + + + + + FP + 468.57 + + + + + + AMADEUSTEST/TROISDS + + + + + 5KA3U4 + + + + + + + 372 + S + + + + + 0572356608971 + 1 + + CS + + + + 712 + 374.00 + + + TTX + 64.57 + + + F + 0.00 + + + OB + 30.00 + + + T + 468.57 + + + + + 0001AA + + + + + TKTT + SALE + C + + + + + + CC + + + + + FP + 468.57 + + + + + + AMADEUSTEST/PAXBIS + + + + + 5KA3U4 + + + + + + + 373 + S + + + + + 0572356608972 + 1 + + CS + + + + 712 + 374.00 + + + TTX + 64.57 + + + F + 0.00 + + + OB + 30.00 + + + T + 468.57 + + + + + 0001AA + + + + + TKTT + SALE + C + + + + + + CC + + + + + FP + 468.57 + + + + + + AMADEUSTEST/TROISDS + + + + + 5KA3U4 + + + + + + + 374 + S + + + + + 0572356608973 + 1 + + CS + + + + 712 + 374.00 + + + TTX + 64.57 + + + F + 0.00 + + + OB + 30.00 + + + T + 468.57 + + + + + 0001AA + + + + + TKTT + SALE + C + + + + + + CC + + + + + FP + 468.57 + + + + + + AMADEUSTEST/PAXBIS + + + + + 5KA3U4 + + + + + + + 375 + S + + + + + 0572356608974 + 1 + + CS + + + + 712 + 10.00 + + + TTX + 0.00 + + + F + 0.00 + + + OB + 0.00 + + + T + 10.00 + + + + + 0001AA + + + + + TKTT + SALE + C + + + + + + CC + + + + + FP + 10.00 + + + + + + AMADEUSTEST/TROISDS + + + + + 5KA4D2 + + + + + + + 376 + S + + + + + 0572356608975 + 1 + + CS + + + + 712 + 10.00 + + + TTX + 0.00 + + + F + 0.00 + + + OB + 0.00 + + + T + 10.00 + + + + + 0001AA + + + + + TKTT + SALE + C + + + + + + CC + + + + + FP + 10.00 + + + + + + AMADEUSTEST/PAXBIS + + + + + 5KA4D2 + + + + + + + 164 + S + + + + + 0571122331717 + 1 + + CS + + + + 712 + 508.00 + + + TTX + 64.20 + + + F + 0.00 + + + OB + 30.00 + + + T + 602.20 + + + + + 0001AA + + + + + TKTM + SALE + C + + + + + + CA + + + + + FP + 602.20 + + + + + + AF/TRMD + + + + + 5JYRDY + + + + + + + 165 + S + + + + + 0572354909200 + 1 + + CS + + + + 712 + 10.00 + + + TTX + 0.00 + + + F + 0.00 + + + OB + 0.00 + + + T + 10.00 + + + + + 0001AA + + + + + TKTT + SALE + C + + + + + + CC + + + + + FP + 10.00 + + + + + + AMADEUSTEST/TROISDS + + + + + 5JYZET + + + + + + + 166 + S + + + + + 0572354909201 + 1 + + CS + + + + 712 + 10.00 + + + TTX + 0.00 + + + F + 0.00 + + + OB + 0.00 + + + T + 10.00 + + + + + 0001AA + + + + + TKTT + SALE + C + + + + + + CC + + + + + FP + 10.00 + + + + + + AMADEUSTEST/PAXBIS + + + + + 5JYZET + + + + + + + 167 + S + + + + + 0572354909202 + 1 + + CS + + + + 712 + 10.00 + + + TTX + 0.00 + + + F + 0.00 + + + OB + 0.00 + + + T + 10.00 + + + + + 0001AA + + + + + TKTT + SALE + C + + + + + + CC + + + + + FP + 10.00 + + + + + + AMADEUSTEST/TROISDS + + + + + 5JYZYW + + + + + + + 168 + S + + + + + 0572354909203 + 1 + + CS + + + + 712 + 10.00 + + + TTX + 0.00 + + + F + 0.00 + + + OB + 0.00 + + + T + 10.00 + + + + + 0001AA + + + + + TKTT + SALE + C + + + + + + CC + + + + + FP + 10.00 + + + + + + AMADEUSTEST/PAXBIS + + + + + 5JYZYW + + + + + + + 377 + S + + + + + 0572356608976 + 1 + + CS + + + + 712 + 77.00 + + + TTX + 116.71 + + + F + 0.00 + + + OB + 30.00 + + + T + 223.71 + + + + + 0001AA + + + + + TKTT + SALE + C + + + + + + CA + + + + + FP + 223.71 + + + + + + FARE/A (CHD) + + + + + 5KB54B + + + + + + + 169 + S + + + + + 0572354909204 + 1 + + CS + + + + 712 + 10.00 + + + TTX + 0.00 + + + F + 0.00 + + + OB + 0.00 + + + T + 10.00 + + + + + 0001AA + + + + + TKTT + SALE + C + + + + + + CC + + + + + FP + 10.00 + + + + + + AMADEUSTEST/TROISDS + + + + + 5JY3EN + + + + + + + 170 + S + + + + + 0572354909205 + 1 + + CS + + + + 712 + 10.00 + + + TTX + 0.00 + + + F + 0.00 + + + OB + 0.00 + + + T + 10.00 + + + + + 0001AA + + + + + TKTT + SALE + C + + + + + + CC + + + + + FP + 10.00 + + + + + + AMADEUSTEST/PAXBIS + + + + + 5JY3EN + + + + + + + 171 + S + + + + + 0572354909206 + 1 + + CS + + + + 712 + 10.00 + + + TTX + 0.00 + + + F + 0.00 + + + OB + 0.00 + + + T + 10.00 + + + + + 0001AA + + + + + TKTT + SALE + C + + + + + + CC + + + + + FP + 10.00 + + + + + + AMADEUSTEST/TROISDS + + + + + 5JY3UX + + + + + + + 172 + S + + + + + 0572354909207 + 1 + + CS + + + + 712 + 10.00 + + + TTX + 0.00 + + + F + 0.00 + + + OB + 0.00 + + + T + 10.00 + + + + + 0001AA + + + + + TKTT + SALE + C + + + + + + CC + + + + + FP + 10.00 + + + + + + AMADEUSTEST/PAXBIS + + + + + 5JY3UX + + + + + + + 173 + S + + + + + 0572354909208 + 1 + + CS + + + + 712 + 10.00 + + + TTX + 0.00 + + + F + 0.00 + + + OB + 0.00 + + + T + 10.00 + + + + + 0001AA + + + + + TKTT + SALE + C + + + + + + CC + + + + + FP + 10.00 + + + + + + AMADEUSTEST/TROISDS + + + + + 5JY4AT + + + + + + + 174 + S + + + + + 0572354909209 + 1 + + CS + + + + 712 + 10.00 + + + TTX + 0.00 + + + F + 0.00 + + + OB + 0.00 + + + T + 10.00 + + + + + 0001AA + + + + + TKTT + SALE + C + + + + + + CC + + + + + FP + 10.00 + + + + + + AMADEUSTEST/PAXBIS + + + + + 5JY4AT + + + + + + + 175 + S + + + + + 0572354909210 + 1 + + CS + + + + 712 + 10.00 + + + TTX + 0.00 + + + F + 0.00 + + + OB + 0.00 + + + T + 10.00 + + + + + 0001AA + + + + + TKTT + SALE + C + + + + + + CC + + + + + FP + 10.00 + + + + + + AMADEUSTEST/TROISDS + + + + + 5JY4D3 + + + + + + + 176 + S + + + + + 0572354909211 + 1 + + CS + + + + 712 + 10.00 + + + TTX + 0.00 + + + F + 0.00 + + + OB + 0.00 + + + T + 10.00 + + + + + 0001AA + + + + + TKTT + SALE + C + + + + + + CC + + + + + FP + 10.00 + + + + + + AMADEUSTEST/PAXBIS + + + + + 5JY4D3 + + + + + + + 177 + S + + + + + 0572354909212 + 1 + + CS + + + + 712 + 10.00 + + + TTX + 0.00 + + + F + 0.00 + + + OB + 0.00 + + + T + 10.00 + + + + + 0001AA + + + + + TKTT + SALE + C + + + + + + CC + + + + + FP + 10.00 + + + + + + AMADEUSTEST/TROISDS + + + + + 5JY49M + + + + + + + 178 + S + + + + + 0572354909213 + 1 + + CS + + + + 712 + 10.00 + + + TTX + 0.00 + + + F + 0.00 + + + OB + 0.00 + + + T + 10.00 + + + + + 0001AA + + + + + TKTT + SALE + C + + + + + + CC + + + + + FP + 10.00 + + + + + + AMADEUSTEST/PAXBIS + + + + + 5JY49M + + + + + + + 179 + S + + + + + 0572354909214 + 1 + + CS + + + + 712 + 10.00 + + + TTX + 0.00 + + + F + 0.00 + + + OB + 0.00 + + + T + 10.00 + + + + + 0001AA + + + + + TKTT + SALE + C + + + + + + CC + + + + + FP + 10.00 + + + + + + AMADEUSTEST/TROISDS + + + + + 5JY5BI + + + + + + + 180 + S + + + + + 0572354909215 + 1 + + CS + + + + 712 + 10.00 + + + TTX + 0.00 + + + F + 0.00 + + + OB + 0.00 + + + T + 10.00 + + + + + 0001AA + + + + + TKTT + SALE + C + + + + + + CC + + + + + FP + 10.00 + + + + + + AMADEUSTEST/PAXBIS + + + + + 5JY5BI + + + + + + + 378 + S + + + + + 0571122332046 + 1 + + CS + + + + 712 + 1070.00 + + + TTX + 73.20 + + + F + 0.00 + + + OB + 30.00 + + + T + 1173.20 + + + + + 0001AA + + + + + TKTM + SALE + C + + + + + + CA + + + + + FP + 1173.20 + + + + + + AF/TRMD + + + + + 5KCWED + + + + + + + 181 + S + + + + + 0571122332546 + 1 + + CS + + + + 712 + 508.00 + + + TTX + 64.20 + + + F + 0.00 + + + OB + 30.00 + + + T + 602.20 + + + + + 0001AA + + + + + TKTM + SALE + C + + + + + + CA + + + + + FP + 602.20 + + + + + + AF/TRMD + + + + + 5J2SZT + + + + + + + 379 + S + + + + + 0571122334618 + 1 + + CS + + + + 712 + 508.00 + + + TTX + 64.20 + + + F + 0.00 + + + OB + 30.00 + + + T + 602.20 + + + + + 0001AA + + + + + TKTM + SALE + C + + + + + + CA + + + + + FP + 602.20 + + + + + + AF/TRMD + + + + + 5KEKSJ + + + + + + + 380 + S + + + + + 0572356608977 + 1 + + CS + + + + 712 + 77.00 + + + TTX + 116.71 + + + F + 0.00 + + + OB + 30.00 + + + T + 223.71 + + + + + 0001AA + + + + + TKTT + SALE + C + + + + + + CA + + + + + FP + 223.71 + + + + + + FARE/A (CHD) + + + + + 5KELQB + + + + + + + 0001AA + + + + \ No newline at end of file