Completed
Push — develop ( 13e4b5...a8951f )
by Dieter
06:26
created

TravellerInfo   A

Complexity

Total Complexity 19

Size/Duplication

Total Lines 145
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 9

Importance

Changes 0
Metric Value
wmc 19
c 0
b 0
f 0
lcom 1
cbo 9
dl 0
loc 145
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 8 3
A loadTravellerGroup() 0 11 1
C loadTraveller() 0 32 7
B addInfant() 0 38 6
A makePassengerIfNeeded() 0 6 2
1
<?php
2
/**
3
 * amadeus-ws-client
4
 *
5
 * Copyright 2015 Amadeus Benelux NV
6
 *
7
 * Licensed under the Apache License, Version 2.0 (the "License");
8
 * you may not use this file except in compliance with the License.
9
 * You may obtain a copy of the License at
10
 *
11
 * http://www.apache.org/licenses/LICENSE-2.0
12
 *
13
 * Unless required by applicable law or agreed to in writing, software
14
 * distributed under the License is distributed on an "AS IS" BASIS,
15
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
 * See the License for the specific language governing permissions and
17
 * limitations under the License.
18
 *
19
 * @package Amadeus
20
 * @license https://opensource.org/licenses/Apache-2.0 Apache 2.0
21
 */
22
23
namespace Amadeus\Client\Struct\Pnr\AddMultiElements;
24
25
use Amadeus\Client\RequestOptions\Pnr\Traveller;
0 ignored issues
show
Bug introduced by
This use statement conflicts with another class in this namespace, Amadeus\Client\Struct\Pn...MultiElements\Traveller.

Let’s assume that you have a directory layout like this:

.
|-- OtherDir
|   |-- Bar.php
|   `-- Foo.php
`-- SomeDir
    `-- Foo.php

and let’s assume the following content of Bar.php:

// Bar.php
namespace OtherDir;

use SomeDir\Foo; // This now conflicts the class OtherDir\Foo

If both files OtherDir/Foo.php and SomeDir/Foo.php are loaded in the same runtime, you will see a PHP error such as the following:

PHP Fatal error:  Cannot use SomeDir\Foo as Foo because the name is already in use in OtherDir/Foo.php

However, as OtherDir/Foo.php does not necessarily have to be loaded and the error is only triggered if it is loaded before OtherDir/Bar.php, this problem might go unnoticed for a while. In order to prevent this error from surfacing, you must import the namespace with a different alias:

// Bar.php
namespace OtherDir;

use SomeDir\Foo as SomeDirFoo; // There is no conflict anymore.
Loading history...
26
use Amadeus\Client\RequestOptions\Pnr\TravellerGroup;
27
use Amadeus\Client\Struct\Pnr\AddMultiElements\Traveller as PnrAddMultiTraveller;
28
29
/**
30
 * TravellerInfo
31
 *
32
 * @package Amadeus\Client\Struct\Pnr\AddMultiElements
33
 * @author Dieter Devlieghere <[email protected]>
34
 */
35
class TravellerInfo
36
{
37
    /**
38
     * @var ElementManagementPassenger
39
     */
40
    public $elementManagementPassenger;
41
    /**
42
     * Up to 2 PassengerData elements
43
     *
44
     * @var PassengerData[]
45
     */
46
    public $passengerData = [];
47
    /**
48
     * @todo expand this structure
49
     * @var array
50
     */
51
    public $enhancedPassengerData = [];
52
53
    /**
54
     * TravellerInfo constructor.
55
     *
56
     * @param Traveller|null $traveller
57
     * @param TravellerGroup|null $travellerGroup
58
     */
59
    public function __construct($traveller = null, $travellerGroup = null)
60
    {
61
        if ($traveller instanceof Traveller) {
62
            $this->loadTraveller($traveller);
63
        } elseif ($travellerGroup instanceof TravellerGroup) {
64
            $this->loadTravellerGroup($travellerGroup);
65
        }
66
    }
67
68
    /**
69
     * @param TravellerGroup $group
70
     */
71
    protected function loadTravellerGroup($group)
72
    {
73
        $this->elementManagementPassenger = new ElementManagementPassenger(
74
            ElementManagementPassenger::SEG_GROUPNAME
75
        );
76
77
        $this->passengerData[] = new PassengerData($group->name);
78
79
        $this->passengerData[0]->travellerInformation->traveller->quantity = $group->nrOfTravellers;
80
        $this->passengerData[0]->travellerInformation->traveller->qualifier = PnrAddMultiTraveller::QUAL_GROUP;
81
    }
82
83
    /**
84
     * @param Traveller $traveller
85
     */
86
    protected function loadTraveller(Traveller $traveller)
87
    {
88
        $this->elementManagementPassenger = new ElementManagementPassenger(
89
            ElementManagementPassenger::SEG_NAME
90
        );
91
92
        $this->passengerData[] = new PassengerData($traveller->lastName);
93
94
        if (!is_null($traveller->number)) {
95
            $this->elementManagementPassenger->reference = new Reference(
96
                Reference::QUAL_PASSENGER,
97
                $traveller->number
98
            );
99
        }
100
101
        if ($traveller->firstName !== null || $traveller->travellerType !== null) {
102
            $this->passengerData[0]->travellerInformation->passenger[] = new Passenger(
103
                $traveller->firstName,
104
                $traveller->travellerType
105
            );
106
        }
107
108
        if ($traveller->withInfant === true || $traveller->infant !== null) {
109
            $this->addInfant($traveller);
110
        }
111
112
        if ($traveller->dateOfBirth instanceof \DateTime) {
113
            $this->passengerData[0]->dateOfBirth = new DateOfBirth(
114
                $traveller->dateOfBirth->format('dmY')
115
            );
116
        }
117
    }
118
119
    /**
120
     * Add infant
121
     *
122
     * 3 scenario's:
123
     * - infant without additional information
124
     * - infant with only first name provided
125
     * - infant with first name, last name & date of birth provided.
126
     *
127
     * @param Traveller $traveller
128
     */
129
    protected function addInfant($traveller)
130
    {
131
        $this->passengerData[0]->travellerInformation->traveller->quantity = 2;
132
133
        if ($traveller->withInfant && is_null($traveller->infant)) {
134
            $this->makePassengerIfNeeded();
135
            $this->passengerData[0]->travellerInformation->passenger[0]->infantIndicator = Passenger::INF_NOINFO;
136
        } elseif ($traveller->infant instanceof Traveller) {
137
            if (empty($traveller->infant->lastName)) {
138
                $this->makePassengerIfNeeded();
139
                $this->passengerData[0]->travellerInformation->passenger[0]->infantIndicator = Passenger::INF_GIVEN;
140
141
                $tmpInfantPassenger = new Passenger(
142
                    $traveller->infant->firstName,
143
                    Passenger::PASST_INFANT
144
                );
145
146
                $this->passengerData[0]->travellerInformation->passenger[] = $tmpInfantPassenger;
147
            } else {
148
                $this->makePassengerIfNeeded();
149
                $this->passengerData[0]->travellerInformation->passenger[0]->infantIndicator = Passenger::INF_FULL;
150
151
                $tmpInfant = new PassengerData($traveller->infant->lastName);
152
                $tmpInfant->travellerInformation->passenger[] = new Passenger(
153
                    $traveller->infant->firstName,
154
                    Passenger::PASST_INFANT
155
                );
156
157
                if ($traveller->infant->dateOfBirth instanceof \DateTime) {
158
                    $tmpInfant->dateOfBirth = new DateOfBirth(
159
                        $traveller->infant->dateOfBirth->format('dmY')
160
                    );
161
                }
162
163
                $this->passengerData[] = $tmpInfant;
164
            }
165
        }
166
    }
167
168
    /**
169
     * If there is no passenger node at
170
     * $travellerInfo->passengerData[0]->travellerInformation->passenger[0]
171
     * create one
172
     */
173
    protected function makePassengerIfNeeded()
174
    {
175
        if (count($this->passengerData[0]->travellerInformation->passenger) < 1) {
176
            $this->passengerData[0]->travellerInformation->passenger[0] = new Passenger(null, null);
177
        }
178
    }
179
}
180