diff --git a/docs/samples.rst b/docs/samples.rst index 6053eb1dc..08e2ca58c 100644 --- a/docs/samples.rst +++ b/docs/samples.rst @@ -1296,9 +1296,9 @@ Get fare rules providing corporate number and departure date: ]) ); ------------------ +----------------------------- Fare_GetFareFamilyDescription ------------------ +----------------------------- Basic request to get Fare Families in stateful mode (after pricing): @@ -1318,6 +1318,50 @@ Basic request to get Fare Families in stateful mode (after pricing): ]) ); +Requesting an Airline Fare Family (AFF) description in standalone mode: + +.. code-block:: php + + use Amadeus\Client\RequestOptions\FareGetFareFamilyDescriptionOptions; + use Amadeus\Client\RequestOptions\Fare\GetFareFamilyDescription; + + $fareFamiliesResponse = $client->fareGetFareFamilyDescription( + new FareGetFareFamilyDescriptionOptions([ + 'bookingDateInformation' => new \DateTime('2021-10-08'), + 'standaloneDescriptionRequest' => new GetFareFamilyDescription\StandaloneDescriptionRequest([ + 'items' => [ + new GetFareFamilyDescription\StandaloneDescriptionRequestOption([ + 'fareInfo' => new GetFareFamilyDescription\FareInfo([ + 'fareQualifier' => 'FF', + 'rateCategory' => 'BASICECON', + ]), + 'itineraryInfo' => new GetFareFamilyDescription\ItineraryInfo([ + 'origin' => 'JFK', + 'destination' => 'DUB', + ]), + 'carrierInfo' => new GetFareFamilyDescription\CarrierInfo([ + 'airline' => 'DL', + ]), + ]), + new GetFareFamilyDescription\StandaloneDescriptionRequestOption([ + 'fareInfo' => new GetFareFamilyDescription\FareInfo([ + 'fareQualifier' => 'FF', + 'rateCategory' => 'BASIC', + ]), + 'itineraryInfo' => new GetFareFamilyDescription\ItineraryInfo([ + 'origin' => 'MIA', + 'destination' => 'AUA', + ]), + 'carrierInfo' => new GetFareFamilyDescription\CarrierInfo([ + 'airline' => 'AA', + ]), + ]), + ], + ]), + ]), + ); + + -------------------- Fare_ConvertCurrency -------------------- diff --git a/src/Amadeus/Client/RequestOptions/Fare/GetFareFamilyDescription/CarrierInfo.php b/src/Amadeus/Client/RequestOptions/Fare/GetFareFamilyDescription/CarrierInfo.php new file mode 100644 index 000000000..d19b2f341 --- /dev/null +++ b/src/Amadeus/Client/RequestOptions/Fare/GetFareFamilyDescription/CarrierInfo.php @@ -0,0 +1,37 @@ + + */ +class CarrierInfo extends LoadParamsFromArray +{ + /** @var string */ + public $airline; +} diff --git a/src/Amadeus/Client/RequestOptions/Fare/GetFareFamilyDescription/FareInfo.php b/src/Amadeus/Client/RequestOptions/Fare/GetFareFamilyDescription/FareInfo.php new file mode 100644 index 000000000..d3a18ec50 --- /dev/null +++ b/src/Amadeus/Client/RequestOptions/Fare/GetFareFamilyDescription/FareInfo.php @@ -0,0 +1,40 @@ + + */ +class FareInfo extends LoadParamsFromArray +{ + /** @var string */ + public $fareQualifier; + + /** @var string */ + public $rateCategory; +} diff --git a/src/Amadeus/Client/RequestOptions/Fare/GetFareFamilyDescription/ItineraryInfo.php b/src/Amadeus/Client/RequestOptions/Fare/GetFareFamilyDescription/ItineraryInfo.php new file mode 100644 index 000000000..4da1db872 --- /dev/null +++ b/src/Amadeus/Client/RequestOptions/Fare/GetFareFamilyDescription/ItineraryInfo.php @@ -0,0 +1,40 @@ + + */ +class ItineraryInfo extends LoadParamsFromArray +{ + /** @var string */ + public $origin; + + /** @var string */ + public $destination; +} diff --git a/src/Amadeus/Client/RequestOptions/Fare/GetFareFamilyDescription/StandaloneDescriptionRequest.php b/src/Amadeus/Client/RequestOptions/Fare/GetFareFamilyDescription/StandaloneDescriptionRequest.php new file mode 100644 index 000000000..8ceb3049b --- /dev/null +++ b/src/Amadeus/Client/RequestOptions/Fare/GetFareFamilyDescription/StandaloneDescriptionRequest.php @@ -0,0 +1,39 @@ + + */ +class StandaloneDescriptionRequest extends LoadParamsFromArray +{ + /** + * @var StandaloneDescriptionRequestOption[] + */ + public $items = []; +} diff --git a/src/Amadeus/Client/RequestOptions/Fare/GetFareFamilyDescription/StandaloneDescriptionRequestOption.php b/src/Amadeus/Client/RequestOptions/Fare/GetFareFamilyDescription/StandaloneDescriptionRequestOption.php new file mode 100644 index 000000000..2267e592d --- /dev/null +++ b/src/Amadeus/Client/RequestOptions/Fare/GetFareFamilyDescription/StandaloneDescriptionRequestOption.php @@ -0,0 +1,43 @@ + + */ +class StandaloneDescriptionRequestOption extends LoadParamsFromArray +{ + /** @var FareInfo */ + public $fareInfo; + + /** @var ItineraryInfo */ + public $itineraryInfo; + + /** @var CarrierInfo */ + public $carrierInfo; +} diff --git a/src/Amadeus/Client/RequestOptions/FareGetFareFamilyDescriptionOptions.php b/src/Amadeus/Client/RequestOptions/FareGetFareFamilyDescriptionOptions.php index d60c2a2f7..27fde2b5b 100644 --- a/src/Amadeus/Client/RequestOptions/FareGetFareFamilyDescriptionOptions.php +++ b/src/Amadeus/Client/RequestOptions/FareGetFareFamilyDescriptionOptions.php @@ -2,6 +2,8 @@ namespace Amadeus\Client\RequestOptions; +use Amadeus\Client\RequestOptions\Fare\GetFareFamilyDescription\StandaloneDescriptionRequest; + /** * Class FareGetFareFamilyDescriptionOptions * @package Amadeus\Client\RequestOptions @@ -12,4 +14,10 @@ class FareGetFareFamilyDescriptionOptions extends Base * @var ReferenceGroup[]|array */ public $referenceGroups = []; + + /** @var \DateTime|null */ + public $bookingDateInformation; + + /** @var StandaloneDescriptionRequest|null */ + public $standaloneDescriptionRequest; } diff --git a/src/Amadeus/Client/Struct/Fare/GetFareFamilyDescription.php b/src/Amadeus/Client/Struct/Fare/GetFareFamilyDescription.php index 0af7d96fb..2f3730807 100644 --- a/src/Amadeus/Client/Struct/Fare/GetFareFamilyDescription.php +++ b/src/Amadeus/Client/Struct/Fare/GetFareFamilyDescription.php @@ -5,8 +5,13 @@ use Amadeus\Client\RequestOptions\FareGetFareFamilyDescriptionOptions; use Amadeus\Client\RequestOptions\Reference; use Amadeus\Client\Struct\BaseWsMessage; +use Amadeus\Client\Struct\Fare\GetFareFamilyDescription\BookingDateInformation; +use Amadeus\Client\Struct\Fare\GetFareFamilyDescription\CarrierInformation; +use Amadeus\Client\Struct\Fare\GetFareFamilyDescription\FareInformation; +use Amadeus\Client\Struct\Fare\GetFareFamilyDescription\ItineraryInformation; use Amadeus\Client\Struct\Fare\GetFareFamilyDescription\ReferenceDetails; use Amadeus\Client\Struct\Fare\GetFareFamilyDescription\ReferenceInformation; +use Amadeus\Client\Struct\Fare\GetFareFamilyDescription\StandaloneDescriptionRequest; /** * Class GetFareFamilyDescription @@ -19,6 +24,12 @@ class GetFareFamilyDescription extends BaseWsMessage */ public $referenceInformation; + /** @var BookingDateInformation */ + public $bookingDateInformation; + + /** @var StandaloneDescriptionRequest[] */ + public $standaloneDescriptionRequest; + /** * GetFareFamilyDescription constructor. * @@ -36,5 +47,19 @@ public function __construct($options) $this->referenceInformation[] = new ReferenceInformation($references); } + + if ($bookingDateInformation = $options->bookingDateInformation) { + $this->bookingDateInformation = new BookingDateInformation($bookingDateInformation); + } + + if ($standaloneDescriptionRequest = $options->standaloneDescriptionRequest) { + foreach ($standaloneDescriptionRequest->items as $standaloneDescriptionRequestOption) { + $this->standaloneDescriptionRequest[] = new StandaloneDescriptionRequest( + new FareInformation($standaloneDescriptionRequestOption->fareInfo), + new ItineraryInformation($standaloneDescriptionRequestOption->itineraryInfo), + new CarrierInformation($standaloneDescriptionRequestOption->carrierInfo) + ); + } + } } } diff --git a/src/Amadeus/Client/Struct/Fare/GetFareFamilyDescription/BookingDateInformation.php b/src/Amadeus/Client/Struct/Fare/GetFareFamilyDescription/BookingDateInformation.php new file mode 100644 index 000000000..d9ff79376 --- /dev/null +++ b/src/Amadeus/Client/Struct/Fare/GetFareFamilyDescription/BookingDateInformation.php @@ -0,0 +1,40 @@ + + */ +class BookingDateInformation +{ + /** @var DateTime */ + public $dateTime; + + public function __construct(\DateTime $dateTime) + { + $this->dateTime = new DateTime($dateTime); + } +} diff --git a/src/Amadeus/Client/Struct/Fare/GetFareFamilyDescription/CarrierInformation.php b/src/Amadeus/Client/Struct/Fare/GetFareFamilyDescription/CarrierInformation.php new file mode 100644 index 000000000..1bf5356dc --- /dev/null +++ b/src/Amadeus/Client/Struct/Fare/GetFareFamilyDescription/CarrierInformation.php @@ -0,0 +1,42 @@ + + */ +class CarrierInformation +{ + /** @var CompanyIdentification */ + public $companyIdentification; + + public function __construct(CarrierInfo $carrierInfo) + { + $this->companyIdentification = new CompanyIdentification($carrierInfo->airline); + } +} diff --git a/src/Amadeus/Client/Struct/Fare/GetFareFamilyDescription/CompanyIdentification.php b/src/Amadeus/Client/Struct/Fare/GetFareFamilyDescription/CompanyIdentification.php new file mode 100644 index 000000000..76814043b --- /dev/null +++ b/src/Amadeus/Client/Struct/Fare/GetFareFamilyDescription/CompanyIdentification.php @@ -0,0 +1,40 @@ + + */ +class CompanyIdentification +{ + /** @var string */ + public $otherCompany; + + public function __construct($otherCompany) + { + $this->otherCompany = (string)$otherCompany; + } +} diff --git a/src/Amadeus/Client/Struct/Fare/GetFareFamilyDescription/DateTime.php b/src/Amadeus/Client/Struct/Fare/GetFareFamilyDescription/DateTime.php new file mode 100644 index 000000000..93efd8c69 --- /dev/null +++ b/src/Amadeus/Client/Struct/Fare/GetFareFamilyDescription/DateTime.php @@ -0,0 +1,48 @@ + + */ +class DateTime +{ + /** @var int */ + public $year; + + /** @var int */ + public $month; + + /** @var int */ + public $day; + + public function __construct(\DateTime $dateTime) + { + $this->year = (int)$dateTime->format('Y'); + $this->month = (int)$dateTime->format('m'); + $this->day = (int)$dateTime->format('d'); + } +} diff --git a/src/Amadeus/Client/Struct/Fare/GetFareFamilyDescription/DiscountDetails.php b/src/Amadeus/Client/Struct/Fare/GetFareFamilyDescription/DiscountDetails.php new file mode 100644 index 000000000..df6068a21 --- /dev/null +++ b/src/Amadeus/Client/Struct/Fare/GetFareFamilyDescription/DiscountDetails.php @@ -0,0 +1,44 @@ + + */ +class DiscountDetails +{ + /** @var string */ + public $fareQualifier; + + /** @var string */ + public $rateCategory; + + public function __construct($fareQualifier, $rateCategory) + { + $this->fareQualifier = (string)$fareQualifier; + $this->rateCategory = (string)$rateCategory; + } +} diff --git a/src/Amadeus/Client/Struct/Fare/GetFareFamilyDescription/FareInformation.php b/src/Amadeus/Client/Struct/Fare/GetFareFamilyDescription/FareInformation.php new file mode 100644 index 000000000..5e6bfe846 --- /dev/null +++ b/src/Amadeus/Client/Struct/Fare/GetFareFamilyDescription/FareInformation.php @@ -0,0 +1,42 @@ + + */ +class FareInformation +{ + /** @var DiscountDetails */ + public $discountDetails; + + public function __construct(FareInfo $fareInfo) + { + $this->discountDetails = new DiscountDetails($fareInfo->fareQualifier, $fareInfo->rateCategory); + } +} diff --git a/src/Amadeus/Client/Struct/Fare/GetFareFamilyDescription/ItineraryInformation.php b/src/Amadeus/Client/Struct/Fare/GetFareFamilyDescription/ItineraryInformation.php new file mode 100644 index 000000000..61be57c1f --- /dev/null +++ b/src/Amadeus/Client/Struct/Fare/GetFareFamilyDescription/ItineraryInformation.php @@ -0,0 +1,46 @@ + + */ +class ItineraryInformation +{ + /** @var string */ + public $origin; + + /** @var string */ + public $destination; + + public function __construct(ItineraryInfo $itineraryInfo) + { + $this->origin = (string)$itineraryInfo->origin; + $this->destination = (string)$itineraryInfo->destination; + } +} diff --git a/src/Amadeus/Client/Struct/Fare/GetFareFamilyDescription/StandaloneDescriptionRequest.php b/src/Amadeus/Client/Struct/Fare/GetFareFamilyDescription/StandaloneDescriptionRequest.php new file mode 100644 index 000000000..24c07851c --- /dev/null +++ b/src/Amadeus/Client/Struct/Fare/GetFareFamilyDescription/StandaloneDescriptionRequest.php @@ -0,0 +1,51 @@ + + */ +class StandaloneDescriptionRequest +{ + /** @var FareInformation */ + public $fareInformation; + + /** @var ItineraryInformation */ + public $itineraryInformation; + + /** @var CarrierInformation */ + public $carrierInformation; + + public function __construct( + FareInformation $fareInformation, + ItineraryInformation $itineraryInformation, + CarrierInformation $carrierInformation + ) { + $this->fareInformation = $fareInformation; + $this->itineraryInformation = $itineraryInformation; + $this->carrierInformation = $carrierInformation; + } +} diff --git a/tests/Amadeus/Client/Struct/Fare/GetFareFamilyDescriptionTest.php b/tests/Amadeus/Client/Struct/Fare/GetFareFamilyDescriptionTest.php index 2a7454bcb..fef8791da 100644 --- a/tests/Amadeus/Client/Struct/Fare/GetFareFamilyDescriptionTest.php +++ b/tests/Amadeus/Client/Struct/Fare/GetFareFamilyDescriptionTest.php @@ -23,9 +23,11 @@ namespace Test\Amadeus\Client\Struct\Fare; use Amadeus\Client\RequestOptions\FareGetFareFamilyDescriptionOptions; +use Amadeus\Client\RequestOptions\Fare\GetFareFamilyDescription as GetFareFamilyDescriptionRequest; use Amadeus\Client\RequestOptions\Reference; use Amadeus\Client\RequestOptions\ReferenceGroup; use Amadeus\Client\Struct\Fare\GetFareFamilyDescription; +use DateTime; use Test\Amadeus\BaseTestCase; use Amadeus\Client\Struct\Fare\GetFareFamilyDescription\ReferenceDetails; use Amadeus\Client\Struct\Fare\GetFareFamilyDescription\ReferenceInformation; @@ -73,4 +75,60 @@ public function testCanMakeMessage() ]), ], $message->referenceInformation); } + + public function testCanMakeStandaloneDescriptionMessage() + { + $options = new FareGetFareFamilyDescriptionOptions([ + 'bookingDateInformation' => new DateTime('2021-10-08'), + 'standaloneDescriptionRequest' => new GetFareFamilyDescriptionRequest\StandaloneDescriptionRequest([ + 'items' => [ + new GetFareFamilyDescriptionRequest\StandaloneDescriptionRequestOption([ + 'fareInfo' => new GetFareFamilyDescriptionRequest\FareInfo([ + 'fareQualifier' => 'FF', + 'rateCategory' => 'BASICECON', + ]), + 'itineraryInfo' => new GetFareFamilyDescriptionRequest\ItineraryInfo([ + 'origin' => 'JFK', + 'destination' => 'DUB', + ]), + 'carrierInfo' => new GetFareFamilyDescriptionRequest\CarrierInfo([ + 'airline' => 'DL', + ]), + ]), + new GetFareFamilyDescriptionRequest\StandaloneDescriptionRequestOption([ + 'fareInfo' => new GetFareFamilyDescriptionRequest\FareInfo([ + 'fareQualifier' => 'FF', + 'rateCategory' => 'BASIC', + ]), + 'itineraryInfo' => new GetFareFamilyDescriptionRequest\ItineraryInfo([ + 'origin' => 'MIA', + 'destination' => 'AUA', + ]), + 'carrierInfo' => new GetFareFamilyDescriptionRequest\CarrierInfo([ + 'airline' => 'AA', + ]), + ]), + ], + ]), + ]); + + $message = new GetFareFamilyDescription($options); + + self::assertEquals(2021, $message->bookingDateInformation->dateTime->year); + self::assertEquals(10, $message->bookingDateInformation->dateTime->month); + self::assertEquals(8, $message->bookingDateInformation->dateTime->day); + + self::assertCount(2, $message->standaloneDescriptionRequest); + self::assertEquals('FF', $message->standaloneDescriptionRequest[0]->fareInformation->discountDetails->fareQualifier); + self::assertEquals('BASICECON', $message->standaloneDescriptionRequest[0]->fareInformation->discountDetails->rateCategory); + self::assertEquals('JFK', $message->standaloneDescriptionRequest[0]->itineraryInformation->origin); + self::assertEquals('DUB', $message->standaloneDescriptionRequest[0]->itineraryInformation->destination); + self::assertEquals('DL', $message->standaloneDescriptionRequest[0]->carrierInformation->companyIdentification->otherCompany); + + self::assertEquals('FF', $message->standaloneDescriptionRequest[1]->fareInformation->discountDetails->fareQualifier); + self::assertEquals('BASIC', $message->standaloneDescriptionRequest[1]->fareInformation->discountDetails->rateCategory); + self::assertEquals('MIA', $message->standaloneDescriptionRequest[1]->itineraryInformation->origin); + self::assertEquals('AUA', $message->standaloneDescriptionRequest[1]->itineraryInformation->destination); + self::assertEquals('AA', $message->standaloneDescriptionRequest[1]->carrierInformation->companyIdentification->otherCompany); + } }