diff --git a/docs/samples.rst b/docs/samples.rst index 834fa2543..12b6ce51c 100644 --- a/docs/samples.rst +++ b/docs/samples.rst @@ -476,7 +476,17 @@ Verify if an offer is still valid: --------------------- Offer_ConfirmAirOffer --------------------- -Confirm a given AIR offer: +Confirm a given AIR offer by providing office reference / tatoo: + +.. code-block:: php + + use Amadeus\Client\RequestOptions\OfferConfirmAirOptions; + + $response = $client->offerConfirmAir( + new OfferConfirmAirOptions([ + 'tatooNumber' => 1 + ]) + ); ----------------------- Offer_ConfirmHotelOffer diff --git a/src/Amadeus/Client.php b/src/Amadeus/Client.php index 6e36f00b9..068bf855e 100644 --- a/src/Amadeus/Client.php +++ b/src/Amadeus/Client.php @@ -49,9 +49,7 @@ * * * - implement more PNR_AddMultiElements: - * ABU segment * OSI segment - * SSR segment * * @package Amadeus * @author Dieter Devlieghere diff --git a/src/Amadeus/Client/RequestOptions/Pnr/Element/Address.php b/src/Amadeus/Client/RequestOptions/Pnr/Element/Address.php index c2c0b0e57..c2eeffdee 100644 --- a/src/Amadeus/Client/RequestOptions/Pnr/Element/Address.php +++ b/src/Amadeus/Client/RequestOptions/Pnr/Element/Address.php @@ -22,6 +22,8 @@ namespace Amadeus\Client\RequestOptions\Pnr\Element; +use Amadeus\Client\RequestOptions\Pnr\Element; + /** * Address * @@ -29,7 +31,7 @@ * * @package Amadeus\Client\RequestOptions\Pnr\Element */ -class Address +class Address extends Element { const TYPE_BILLING_UNSTRUCTURED = "ABU"; diff --git a/src/Amadeus/Client/RequestOptions/Pnr/Element/OtherServiceInfo.php b/src/Amadeus/Client/RequestOptions/Pnr/Element/OtherServiceInfo.php new file mode 100644 index 000000000..87d17ecb0 --- /dev/null +++ b/src/Amadeus/Client/RequestOptions/Pnr/Element/OtherServiceInfo.php @@ -0,0 +1,34 @@ + + */ +class OtherServiceInfo +{ + +} diff --git a/src/Amadeus/Client/Struct/Pnr/AddMultiElements.php b/src/Amadeus/Client/Struct/Pnr/AddMultiElements.php index a5e431ea8..bd73ebe6a 100644 --- a/src/Amadeus/Client/Struct/Pnr/AddMultiElements.php +++ b/src/Amadeus/Client/Struct/Pnr/AddMultiElements.php @@ -369,7 +369,7 @@ protected function createElement($element, &$tatooCounter) case 'Address': /** @var Element\Address $element */ $createdElement = new DataElementsIndiv($element->type, $tatooCounter); - if ($element->type === ElementManagementData::SEGNAME_ADDRESS_BILLING_UNSTRUCTURED || ElementManagementData::SEGNAME_ADDRESS_MAILING_UNSTRUCTURED) { + if ($element->type === ElementManagementData::SEGNAME_ADDRESS_BILLING_UNSTRUCTURED || $element->type === ElementManagementData::SEGNAME_ADDRESS_MAILING_UNSTRUCTURED) { $createdElement->freetextData = new FreetextData($element->freeText, FreetextDetail::TYPE_MAILING_ADDRESS); } else { $createdElement->structuredAddress = new StructuredAddress($element); diff --git a/src/Amadeus/Client/Struct/Pnr/AddMultiElements/StructuredAddress.php b/src/Amadeus/Client/Struct/Pnr/AddMultiElements/StructuredAddress.php index 27013800b..4e781b173 100644 --- a/src/Amadeus/Client/Struct/Pnr/AddMultiElements/StructuredAddress.php +++ b/src/Amadeus/Client/Struct/Pnr/AddMultiElements/StructuredAddress.php @@ -52,7 +52,7 @@ class StructuredAddress public $address; /** - * @var OptionalData + * @var OptionalData[] */ public $optionalData = []; diff --git a/tests/Amadeus/Client/Struct/Offer/ConfirmAirOfferTest.php b/tests/Amadeus/Client/Struct/Offer/ConfirmAirOfferTest.php new file mode 100644 index 000000000..efa5cec9e --- /dev/null +++ b/tests/Amadeus/Client/Struct/Offer/ConfirmAirOfferTest.php @@ -0,0 +1,64 @@ + + */ +class ConfirmAirOfferTest extends BaseTestCase +{ + public function testCanMakeMessageWithPassengerReassociation() + { + $opt = new OfferConfirmAirOptions([ + 'tatooNumber' => 2, + 'passengerReassociation' => [ + new PassengerReAssocOptions([ + 'pricingReference' => 5, + 'paxReferences' => [ + new PassengerDef([ + 'passengerType' => "PA", //ADULT + 'passengerTatoo' => 1 + ]) + ] + ]) + ] + ]); + + $message = new ConfirmAir($opt); + + $this->assertEquals(2, $message->offerTatoo->reference->value); + $this->assertEquals(Reference::TYPE_OFFER_TATOO, $message->offerTatoo->reference->type); + $this->assertEquals(OfferTatoo::SEGMENT_AIR, $message->offerTatoo->segmentName); + $this->assertEquals('PA', $message->passengerReassociation[0]->paxReference->passengerReference[0]->type); + $this->assertEquals(1, $message->passengerReassociation[0]->paxReference->passengerReference[0]->value); + $this->assertEquals(PricingRecordId::REFTYPE_PRODQUOTREC, $message->passengerReassociation[0]->pricingRecordId->referenceType); + $this->assertEquals(5, $message->passengerReassociation[0]->pricingRecordId->uniqueReference); + } +} diff --git a/tests/Amadeus/Client/Struct/Pnr/AddMultiElementsTest.php b/tests/Amadeus/Client/Struct/Pnr/AddMultiElementsTest.php index 7442dcc51..03a2e17e6 100644 --- a/tests/Amadeus/Client/Struct/Pnr/AddMultiElementsTest.php +++ b/tests/Amadeus/Client/Struct/Pnr/AddMultiElementsTest.php @@ -22,8 +22,12 @@ namespace Test\Amadeus\Client\Struct\Pnr; +use Amadeus\Client\RequestOptions\Pnr\Element\AccountingInfo; +use Amadeus\Client\RequestOptions\Pnr\Element\Address; use Amadeus\Client\RequestOptions\Pnr\Element\Contact; use Amadeus\Client\RequestOptions\Pnr\Element\FormOfPayment; +use Amadeus\Client\RequestOptions\Pnr\Element\MiscellaneousRemark; +use Amadeus\Client\RequestOptions\Pnr\Element\ReceivedFrom; use Amadeus\Client\RequestOptions\Pnr\Element\ServiceRequest; use Amadeus\Client\RequestOptions\Pnr\Element\Ticketing; use Amadeus\Client\RequestOptions\Pnr\Reference; @@ -345,6 +349,7 @@ public function testMakePnrWithPassengerDateOfBirth() 'company' => '1A' ]); + $requestStruct = new AddMultiElements($createPnrOptions); $this->assertEquals(1, count($requestStruct->travellerInfo)); @@ -352,4 +357,144 @@ public function testMakePnrWithPassengerDateOfBirth() $this->assertEquals(706, $requestStruct->travellerInfo[0]->passengerData[0]->dateOfBirth->dateAndTimeDetails->qualifier); $this->assertEquals('08011947', $requestStruct->travellerInfo[0]->passengerData[0]->dateOfBirth->dateAndTimeDetails->date); } + + public function testMakePnrWithGenericRemarkAndExplicitReceivedFrom() + { + $createPnrOptions = new PnrCreatePnrOptions(); + $createPnrOptions->receivedFrom = "unittest"; + $createPnrOptions->travellers[] = new Traveller([ + 'number' => 1, + 'lastName' => 'Bowie', + 'firstName' => 'David' + ]); + $createPnrOptions->actionCode = PnrActions::ACTIONOPTION_END_TRANSACT_W_RETRIEVE; + $createPnrOptions->tripSegments[] = new Miscellaneous([ + 'date' => \DateTime::createFromFormat('Y-m-d', "2016-10-02", new \DateTimeZone('UTC')), + 'cityCode' => 'BRU', + 'freeText' => 'GENERIC TRAVEL REQUEST', + 'company' => '1A' + ]); + $createPnrOptions->elements[] = new MiscellaneousRemark([ + 'text' => 'MARKUP: 20.00 EUR' + ]); + $createPnrOptions->elements[] = new ReceivedFrom([ + 'receivedFrom' => 'my magical robot' + ]); + + $requestStruct = new AddMultiElements($createPnrOptions); + + $this->assertEquals(2, count($requestStruct->dataElementsMaster->dataElementsIndiv)); + $this->assertEquals(AddMultiElements\ElementManagementData::SEGNAME_GENERAL_REMARK, $requestStruct->dataElementsMaster->dataElementsIndiv[0]->elementManagementData->segmentName); + $this->assertEquals('MARKUP: 20.00 EUR', $requestStruct->dataElementsMaster->dataElementsIndiv[0]->miscellaneousRemark->remarks->freetext); + $this->assertEquals(MiscellaneousRemark::TYPE_MISCELLANEOUS, $requestStruct->dataElementsMaster->dataElementsIndiv[0]->miscellaneousRemark->remarks->type); + $this->assertEquals(AddMultiElements\ElementManagementData::SEGNAME_RECEIVE_FROM, $requestStruct->dataElementsMaster->dataElementsIndiv[1]->elementManagementData->segmentName); + $this->assertEquals('my magical robot', $requestStruct->dataElementsMaster->dataElementsIndiv[1]->freetextData->longFreetext); + $this->assertEquals(AddMultiElements\FreetextDetail::TYPE_RECEIVE_FROM, $requestStruct->dataElementsMaster->dataElementsIndiv[1]->freetextData->freetextDetail->type); + } + + public function testCanCreateAccountingInfoElement() + { + $createPnrOptions = new PnrCreatePnrOptions(); + $createPnrOptions->receivedFrom = "unittest"; + $createPnrOptions->travellers[] = new Traveller([ + 'number' => 1, + 'lastName' => 'Bowie', + 'firstName' => 'David' + ]); + $createPnrOptions->actionCode = PnrActions::ACTIONOPTION_END_TRANSACT_W_RETRIEVE; + $createPnrOptions->tripSegments[] = new Miscellaneous([ + 'date' => \DateTime::createFromFormat('Y-m-d', "2016-10-02", new \DateTimeZone('UTC')), + 'cityCode' => 'BRU', + 'freeText' => 'GENERIC TRAVEL REQUEST', + 'company' => '1A' + ]); + $createPnrOptions->elements[] = new AccountingInfo([ + 'accountNumber' => 'BUZA' + ]); + + $requestStruct = new AddMultiElements($createPnrOptions); + + $this->assertEquals(2, count($requestStruct->dataElementsMaster->dataElementsIndiv)); + $this->assertEquals(AddMultiElements\ElementManagementData::SEGNAME_ACCOUNTING_INFORMATION, $requestStruct->dataElementsMaster->dataElementsIndiv[0]->elementManagementData->segmentName); + $this->assertEquals('BUZA', $requestStruct->dataElementsMaster->dataElementsIndiv[0]->accounting->account->number); + } + + public function testCanCreateUnstructuredAddress() + { + $createPnrOptions = new PnrCreatePnrOptions(); + $createPnrOptions->receivedFrom = "unittest"; + $createPnrOptions->travellers[] = new Traveller([ + 'number' => 1, + 'lastName' => 'Bowie', + 'firstName' => 'David' + ]); + $createPnrOptions->actionCode = PnrActions::ACTIONOPTION_END_TRANSACT_W_RETRIEVE; + $createPnrOptions->tripSegments[] = new Miscellaneous([ + 'date' => \DateTime::createFromFormat('Y-m-d', "2016-10-02", new \DateTimeZone('UTC')), + 'cityCode' => 'BRU', + 'freeText' => 'GENERIC TRAVEL REQUEST', + 'company' => '1A' + ]); + $createPnrOptions->elements[] = new Address([ + 'type' => Address::TYPE_BILLING_UNSTRUCTURED, + 'freeText' => 'Amadeus Benelux NV,Medialaan 30,1800 Vilvoorde' + ]); + + $requestStruct = new AddMultiElements($createPnrOptions); + + $this->assertEquals(2, count($requestStruct->dataElementsMaster->dataElementsIndiv)); + $this->assertEquals(AddMultiElements\ElementManagementData::SEGNAME_ADDRESS_BILLING_UNSTRUCTURED, $requestStruct->dataElementsMaster->dataElementsIndiv[0]->elementManagementData->segmentName); + $this->assertEquals('Amadeus Benelux NV,Medialaan 30,1800 Vilvoorde', $requestStruct->dataElementsMaster->dataElementsIndiv[0]->freetextData->longFreetext); + $this->assertEquals(AddMultiElements\FreetextDetail::TYPE_MAILING_ADDRESS, $requestStruct->dataElementsMaster->dataElementsIndiv[0]->freetextData->freetextDetail->type); + $this->assertEquals(AddMultiElements\FreetextDetail::QUALIFIER_LITERALTEXT, $requestStruct->dataElementsMaster->dataElementsIndiv[0]->freetextData->freetextDetail->subjectQualifier); + } + + public function testCanCreateStructuredAddress() + { + $createPnrOptions = new PnrCreatePnrOptions(); + $createPnrOptions->receivedFrom = "unittest"; + $createPnrOptions->travellers[] = new Traveller([ + 'number' => 1, + 'lastName' => 'Bowie', + 'firstName' => 'David' + ]); + $createPnrOptions->actionCode = PnrActions::ACTIONOPTION_END_TRANSACT_W_RETRIEVE; + $createPnrOptions->tripSegments[] = new Miscellaneous([ + 'date' => \DateTime::createFromFormat('Y-m-d', "2016-10-02", new \DateTimeZone('UTC')), + 'cityCode' => 'BRU', + 'freeText' => 'GENERIC TRAVEL REQUEST', + 'company' => '1A' + ]); + $createPnrOptions->elements[] = new Address([ + 'type' => Address::TYPE_MAILING_STRUCTURED, + 'name' => 'Mister Amadeus', + 'addressLine1' => 'Amadeus Benelux NV', + 'addressLine2' => 'Medialaan 30', + 'city' => 'Vilvoorde', + 'state' => 'Vlaams-Brabant', + 'country' => 'Belgium', + 'zipCode' => '1800', + + ]); + + $requestStruct = new AddMultiElements($createPnrOptions); + + $this->assertEquals(2, count($requestStruct->dataElementsMaster->dataElementsIndiv)); + $this->assertEquals(AddMultiElements\ElementManagementData::SEGNAME_ADDRESS_MAILING_STRUCTURED, $requestStruct->dataElementsMaster->dataElementsIndiv[0]->elementManagementData->segmentName); + $this->assertEquals(AddMultiElements\Address::OPT_ADDRESS_LINE_1, $requestStruct->dataElementsMaster->dataElementsIndiv[0]->structuredAddress->address->optionA1); + $this->assertEquals('Amadeus Benelux NV', $requestStruct->dataElementsMaster->dataElementsIndiv[0]->structuredAddress->address->optionTextA1); + $this->assertEquals(6, count($requestStruct->dataElementsMaster->dataElementsIndiv[0]->structuredAddress->optionalData)); + $this->assertEquals(AddMultiElements\OptionalData::OPT_ADDRESS_LINE_2, $requestStruct->dataElementsMaster->dataElementsIndiv[0]->structuredAddress->optionalData[0]->option); + $this->assertEquals('Medialaan 30', $requestStruct->dataElementsMaster->dataElementsIndiv[0]->structuredAddress->optionalData[0]->optionText); + $this->assertEquals(AddMultiElements\OptionalData::OPT_CITY, $requestStruct->dataElementsMaster->dataElementsIndiv[0]->structuredAddress->optionalData[1]->option); + $this->assertEquals('Vilvoorde', $requestStruct->dataElementsMaster->dataElementsIndiv[0]->structuredAddress->optionalData[1]->optionText); + $this->assertEquals(AddMultiElements\OptionalData::OPT_COUNTRY, $requestStruct->dataElementsMaster->dataElementsIndiv[0]->structuredAddress->optionalData[2]->option); + $this->assertEquals('Belgium', $requestStruct->dataElementsMaster->dataElementsIndiv[0]->structuredAddress->optionalData[2]->optionText); + $this->assertEquals(AddMultiElements\OptionalData::OPT_NAME, $requestStruct->dataElementsMaster->dataElementsIndiv[0]->structuredAddress->optionalData[3]->option); + $this->assertEquals('Mister Amadeus', $requestStruct->dataElementsMaster->dataElementsIndiv[0]->structuredAddress->optionalData[3]->optionText); + $this->assertEquals(AddMultiElements\OptionalData::OPT_STATE, $requestStruct->dataElementsMaster->dataElementsIndiv[0]->structuredAddress->optionalData[4]->option); + $this->assertEquals('Vlaams-Brabant', $requestStruct->dataElementsMaster->dataElementsIndiv[0]->structuredAddress->optionalData[4]->optionText); + $this->assertEquals(AddMultiElements\OptionalData::OPT_ZIP_CODE, $requestStruct->dataElementsMaster->dataElementsIndiv[0]->structuredAddress->optionalData[5]->option); + $this->assertEquals('1800', $requestStruct->dataElementsMaster->dataElementsIndiv[0]->structuredAddress->optionalData[5]->optionText); + } } diff --git a/tests/Amadeus/Client/Struct/Pnr/CancelTest.php b/tests/Amadeus/Client/Struct/Pnr/CancelTest.php index 956770fac..4813f4855 100644 --- a/tests/Amadeus/Client/Struct/Pnr/CancelTest.php +++ b/tests/Amadeus/Client/Struct/Pnr/CancelTest.php @@ -108,4 +108,26 @@ public function testCanMakeCancelPassengerMessage() $this->assertEquals(Cancel\Element::IDENT_PASSENGER_TATOO, $message->cancelElements[0]->element[0]->identifier); $this->assertEquals(3, $message->cancelElements[0]->element[0]->number); } + + public function testCanMakeCancelGroupPassengerMessage() + { + $message = new Cancel( + new PnrCancelOptions([ + 'actionCode' => 0, + 'groupPassengers' => [5,6] + ]) + ); + + $this->assertEquals(0, $message->pnrActions->optionCode); + $this->assertNull($message->reservationInfo); + $this->assertEquals(1, count($message->cancelElements)); + $this->assertEquals(Cancel\Elements::ENTRY_NAME_INTEGRATION, $message->cancelElements[0]->entryType); + $this->assertEquals(2, count($message->cancelElements[0]->element)); + $this->assertEquals(Cancel\Element::IDENT_PASSENGER_TATOO, $message->cancelElements[0]->element[0]->identifier); + $this->assertEquals(5, $message->cancelElements[0]->element[0]->number); + $this->assertEquals(Cancel\Element::IDENT_PASSENGER_TATOO, $message->cancelElements[0]->element[1]->identifier); + $this->assertEquals(6, $message->cancelElements[0]->element[1]->number); + } + + } diff --git a/tests/Amadeus/ClientTest.php b/tests/Amadeus/ClientTest.php index 5ee4127f5..c7debf94e 100644 --- a/tests/Amadeus/ClientTest.php +++ b/tests/Amadeus/ClientTest.php @@ -214,12 +214,11 @@ public function testCanDoCreatePnrCall() $expectedPnrResult = new Client\Struct\Pnr\AddMultiElements($options); - $receivedFromElement = new Client\Struct\Pnr\AddMultiElements\DataElementsIndiv(Client\Struct\Pnr\AddMultiElements\ElementManagementData::SEGNAME_RECEIVE_FROM); + $receivedFromElement = new Client\Struct\Pnr\AddMultiElements\DataElementsIndiv(Client\Struct\Pnr\AddMultiElements\ElementManagementData::SEGNAME_RECEIVE_FROM, 4); $receivedFromElement->freetextData = new Client\Struct\Pnr\AddMultiElements\FreetextData( 'some RF string amabnl-amadeus-ws-client-0.0.1dev', Client\Struct\Pnr\AddMultiElements\FreetextDetail::TYPE_RECEIVE_FROM ); - $expectedPnrResult->dataElementsMaster->dataElementsIndiv[] = $receivedFromElement; $mockSessionHandler @@ -297,7 +296,7 @@ public function testCanDoAddMultiElementsSavePNRWithRf() $expectedPnrResult->dataElementsMaster = new Client\Struct\Pnr\AddMultiElements\DataElementsMaster(); - $receivedFromElement = new Client\Struct\Pnr\AddMultiElements\DataElementsIndiv(Client\Struct\Pnr\AddMultiElements\ElementManagementData::SEGNAME_RECEIVE_FROM); + $receivedFromElement = new Client\Struct\Pnr\AddMultiElements\DataElementsIndiv(Client\Struct\Pnr\AddMultiElements\ElementManagementData::SEGNAME_RECEIVE_FROM, 2); $receivedFromElement->freetextData = new Client\Struct\Pnr\AddMultiElements\FreetextData( 'a unit test machine thingie', Client\Struct\Pnr\AddMultiElements\FreetextDetail::TYPE_RECEIVE_FROM