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
+
+ 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