Completed
Push — develop ( a8951f...6805ee )
by Dieter
05:48
created

RequestSection::loadAvailabilityOptions()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 8
rs 9.4285
c 0
b 0
f 0
cc 3
eloc 4
nc 3
nop 1
1
<?php
2
/**
3
 * Amadeus
4
 *
5
 * Copyright 2015 Amadeus Benelux NV
6
 */
7
8
namespace Amadeus\Client\Struct\Air\MultiAvailability;
9
use Amadeus\Client\RequestOptions\Air\MultiAvailability\RequestOptions;
10
11
/**
12
 * RequestSection
13
 *
14
 * @package Amadeus\Client\Struct\Air\MultiAvailability
15
 * @author Dieter Devlieghere <[email protected]>
16
 */
17
class RequestSection
18
{
19
    /**
20
     * @var AvailabilityProductInfo
21
     */
22
    public $availabilityProductInfo;
23
24
    /**
25
     * @var BoardOffDetails[]
26
     */
27
    public $boardOffDetails = [];
28
29
    /**
30
     * @var TravelChoiceInfo
31
     */
32
    public $travelChoiceInfo;
33
34
    /**
35
     * @var OptionClass
36
     */
37
    public $optionClass;
38
39
    /**
40
     * @var ConnectionOption[]
41
     */
42
    public $connectionOption = [];
43
44
    /**
45
     * @var NumberOfSeatsInfo
46
     */
47
    public $numberOfSeatsInfo;
48
49
    /**
50
     * @var AirlineOrFlightOption[]
51
     */
52
    public $airlineOrFlightOption = [];
53
54
    /**
55
     * @var CabinOption
56
     */
57
    public $cabinOption;
58
59
    /**
60
     * @var NegoSpaceDetails
61
     */
62
    public $negoSpaceDetails;
63
64
    /**
65
     * @var AvailabilityOptions
66
     */
67
    public $availabilityOptions;
68
69
    /**
70
     * @var UmRequest
71
     */
72
    public $umRequest;
73
74
    /**
75
     * RequestSection constructor.
76
     *
77
     * @param RequestOptions $params
78
     */
79
    public function __construct(RequestOptions $params)
80
    {
81
        $this->availabilityProductInfo = new AvailabilityProductInfo(
82
            $params->from,
83
            $params->to,
84
            $params->departureDate,
85
            $params->arrivalDate
86
        );
87
88
        $this->availabilityOptions = new AvailabilityOptions(
89
            $params->requestType
90
        );
91
92
        $this->loadCabinAndClass($params->cabinCode, $params->bookingClasses);
93
94
        $this->loadAirlines(
95
            $params->includedAirlines,
96
            $params->excludedAirlines,
97
            $params->operationalAirline,
98
            $params->flightNumber
99
        );
100
101
        $this->loadConnections($params->includedConnections, $params->excludedConnections);
102
103
        $this->loadSeats($params->nrOfSeats);
104
105
        $this->loadAvailabilityOptions($params->availabilityOptions);
106
    }
107
108
    /**
109
     * @param string|null $cabinCode
110
     * @param string[] $bookingClasses
111
     */
112
    protected function loadCabinAndClass($cabinCode, $bookingClasses)
113
    {
114
        if (!empty($cabinCode)) {
115
            $this->cabinOption = new CabinOption($cabinCode);
116
        }
117
118
        if (!empty($bookingClasses)) {
119
            $this->optionClass = new OptionClass($bookingClasses);
120
        }
121
    }
122
123
    /**
124
     * @param string[] $included
125
     * @param string[] $excluded
126
     * @param string|null $operational
127
     * @param string|null $flightNumber
128
     */
129
    protected function loadAirlines($included, $excluded, $operational, $flightNumber)
130
    {
131
        if (!empty($included)) {
132
            $this->airlineOrFlightOption[] = new AirlineOrFlightOption($included, $flightNumber);
133
        }
134
135
        if (!empty($excluded)) {
136
            $this->airlineOrFlightOption[] = new AirlineOrFlightOption(
137
                $excluded,
138
                null,
139
                AirlineOrFlightOption::INDICATOR_EXCLUDE
140
            );
141
        }
142
143
        if (!empty($operational)) {
144
            $this->airlineOrFlightOption[] = new AirlineOrFlightOption(
145
                [$operational],
146
                $flightNumber,
147
                AirlineOrFlightOption::INDICATOR_OPERATIONAL_CARRIER
148
            );
149
        }
150
    }
151
152
    /**
153
     * @param string[] $included
154
     * @param string[] $excluded
155
     */
156
    protected function loadConnections($included, $excluded)
157
    {
158
        if (!empty($included)) {
159
            $this->connectionOption[] = new ConnectionOption($included);
160
        }
161
162
        if (!empty($excluded)) {
163
            $this->connectionOption[] = new ConnectionOption($excluded, Connection::INDICATOR_EXCLUDE);
164
        }
165
    }
166
167
    /**
168
     * @param int|null $nrOfSeats
169
     */
170
    protected function loadSeats($nrOfSeats)
171
    {
172
        if (!empty($nrOfSeats)) {
173
            $this->numberOfSeatsInfo = new NumberOfSeatsInfo($nrOfSeats);
174
        }
175
    }
176
177
    /**
178
     * Availability options:
179
     * Keys are option types (RequestOptions::OPTION_TYPE_*),
180
     * values are option arguments.
181
     *
182
     * @param $availabilityOptions
183
     */
184
    protected function loadAvailabilityOptions($availabilityOptions)
185
    {
186
        if (!empty($availabilityOptions)) {
187
            foreach ($availabilityOptions as $type=>$argument) {
188
                $this->availabilityOptions->optionInfo[] = new OptionInfo($type, $argument);
189
            }
190
        }
191
    }
192
}
193