Completed
Push — fopcreatefop ( 97f2d4...a66afc )
by Dieter
07:35
created

MopDescription::__construct()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 10
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 10
c 0
b 0
f 0
ccs 7
cts 7
cp 1
rs 9.4285
cc 2
eloc 5
nc 2
nop 1
crap 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\Fop;
24
25
use Amadeus\Client\RequestOptions\Fop\MopInfo;
26
use Amadeus\Client\Struct\WsMessageUtility;
27
28
/**
29
 * MopDescription
30
 *
31
 * @package Amadeus\Client\Struct\Fop
32
 * @author Dieter Devlieghere <[email protected]>
33
 */
34
class MopDescription extends WsMessageUtility
35
{
36
    /**
37
     * @var FopSequenceNumber
38
     */
39
    public $fopSequenceNumber;
40
    /**
41
     * @var FopMasterElementReference
42
     */
43
    public $fopMasterElementReference;
44
    /**
45
     * @var StakeholderPayerReference
46
     */
47
    public $stakeholderPayerReference;
48
    /**
49
     * @var MopDetails
50
     */
51
    public $mopDetails;
52
    /**
53
     * @var PaymentModule
54
     */
55
    public $paymentModule;
56
57
    /**
58
     * MopDescription constructor.
59
     *
60
     * @param MopInfo $options
61
     */
62 15
    public function __construct(MopInfo $options)
63
    {
64 15
        if (!empty($options->sequenceNr)) {
65 15
            $this->fopSequenceNumber = new FopSequenceNumber($options->sequenceNr);
66 15
        }
67
68 15
        $this->loadMopDetails($options);
69
70 15
        $this->loadPaymentModule($options);
71 15
    }
72
73
    /**
74
     * load Method of Payment Details
75
     *
76
     * @param MopInfo $options
77
     */
78 15
    protected function loadMopDetails(MopInfo $options)
79
    {
80 15
        $this->mopDetails = new MopDetails();
81
82 15
        if ($this->checkAnyNotEmpty($options->fopCode, $options->fopStatus)) {
83 15
            $this->mopDetails->fopPNRDetails = new FopPNRDetails(
84 15
                $options->fopCode,
85 15
                $options->fopStatus
86 15
            );
87 15
        }
88
89 15
        if (!empty($options->freeFlowText)) {
90 3
            $this->mopDetails->oldFopFreeflow = new OldFopFreeflow(
91 2
                $options->freeFlowText,
92 2
                $options->freeFlowEncoding
93 2
            );
94 2
        }
95
96 15 View Code Duplication
        if (!empty($options->supplementaryData)) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
97 2
            $this->mopDetails->pnrSupplementaryData[] = new PnrSupplementaryData(
98 2
                DataAndSwitchMap::TYPE_DATA_INFORMATION,
99 2
                $options->supplementaryData
100 2
            );
101 2
        }
102 15 View Code Duplication
        if (!empty($options->supplementarySwitches)) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
103 2
            $this->mopDetails->pnrSupplementaryData[] = new PnrSupplementaryData(
104 1
                DataAndSwitchMap::TYPE_SWITCH_INFORMATION,
105 1
                $options->supplementarySwitches
106 2
            );
107 1
        }
108 15
    }
109
110
    /**
111
     * Payment Module information
112
     *
113
     * @param MopInfo $options
114
     */
115 15
    protected function loadPaymentModule(MopInfo $options)
116
    {
117 15
        if ($this->checkAnyNotEmpty(
118 15
            $options->fopType,
119 15
            $options->payMerchant,
120 15
            $options->payments,
121 15
            $options->installmentsInfo,
122 15
            $options->mopPaymentType,
123 15
            $options->creditCardInfo,
124 15
            $options->fraudScreening,
125 15
            $options->payIds,
126 15
            $options->paySupData
127 15
        )) {
128 13
            $this->paymentModule = new PaymentModule($options->fopType);
129
130 13
            if (!empty($options->payMerchant)) {
131 10
                $this->checkAndCreatePaymentData();
132 10
                $this->paymentModule->paymentData->merchantInformation = new MerchantInformation($options->payMerchant);
133 10
            }
134
135 13
            if (!empty($options->transactionDate)) {
136 1
                $this->checkAndCreatePaymentData();
137 1
                $this->paymentModule->paymentData->transactionDateTime = new TransactionDateTime(
138 1
                    null,
139 1
                    $options->transactionDate
140 1
                );
141 1
            }
142
143 13
            if (!empty($options->payments)) {
144 5
                $this->checkAndCreatePaymentData();
145 5
                $this->paymentModule->paymentData->monetaryInformation[] = new MonetaryInformation($options->payments);
146 5
            }
147
148 13
            if (!empty($options->installmentsInfo)) {
149 2
                $this->checkAndCreatePaymentData();
150 2
                $this->paymentModule->paymentData->extendedPaymentInfo = new ExtendedPaymentInfo(
151 2
                    $options->installmentsInfo
152 2
                );
153 2
            }
154
155 13
            if (!empty($options->fraudScreening)) {
156 1
                $this->checkAndCreatePaymentData();
157 1
                $this->paymentModule->paymentData->fraudScreeningData = new FraudScreeningData(
158 1
                    $options->fraudScreening
159 1
                );
160 1
            }
161
162 13
            if (!empty($options->payIds)) {
163 1
                $this->checkAndCreatePaymentData();
164 1
                foreach ($options->payIds as $payId) {
165 1
                    $this->paymentModule->paymentData->paymentId[] = new PaymentId(
166 1
                        $payId->id,
167 1
                        $payId->type
168 1
                    );
169 1
                }
170 1
            }
171
172 13
            if (!empty($options->mopPaymentType)) {
173 10
                $this->checkAndCreateMopInformation();
174 10
                $this->paymentModule->mopInformation->fopInformation = new FopInformation($options->mopPaymentType);
175 10
            }
176
177 13
            if (!empty($options->creditCardInfo)) {
178 9
                $this->checkAndCreateMopInformation();
179 9
                $this->paymentModule->mopInformation->creditCardData = new CreditCardData($options->creditCardInfo);
180 9
                if ($this->checkAnyNotEmpty(
181 9
                    $options->creditCardInfo->approvalCode,
182 9
                    $options->creditCardInfo->threeDSecure
183 9
                )) {
184 2
                    $this->checkAndCreateMopDetailedData($options->fopType);
185 2
                    $this->paymentModule->mopDetailedData->creditCardDetailedData = new CreditCardDetailedData(
186 2
                        $options->creditCardInfo->approvalCode,
187 2
                        $options->creditCardInfo->sourceOfApproval,
188 2
                        $options->creditCardInfo->threeDSecure
189 2
                    );
190 2
                }
191 9
            }
192
193 13
            if (!empty($options->invoiceInfo)) {
194 1
                $this->checkAndCreateMopInformation();
195 1
                $this->paymentModule->mopInformation->invoiceDataGroup = new InvoiceDataGroup($options->invoiceInfo);
196 1
            }
197
198 13
            foreach ($options->paySupData as $paySupData) {
199 1
                $this->paymentModule->paymentSupplementaryData[] = new PaymentSupplementaryData(
200 1
                    $paySupData->function,
201 1
                    $paySupData->data
202 1
                );
203 13
            }
204 13
        }
205 15
    }
206
207
    /**
208
     * Create Payment Data node if needed
209
     */
210 10
    private function checkAndCreatePaymentData()
211
    {
212 10
        if (is_null($this->paymentModule->paymentData)) {
213 10
            $this->paymentModule->paymentData = new PaymentData();
214 10
        }
215 10
    }
216
217
    /**
218
     * Create MopInformation node if needed
219
     */
220 10
    private function checkAndCreateMopInformation()
221
    {
222 10
        if (is_null($this->paymentModule->mopInformation)) {
223 10
            $this->paymentModule->mopInformation = new MopInformation();
224 10
        }
225 10
    }
226
227
    /**
228
     * @param $fopType
229
     */
230 2
    private function checkAndCreateMopDetailedData($fopType)
231
    {
232 2
        if (is_null($this->paymentModule->mopDetailedData)) {
233 2
            $this->paymentModule->mopDetailedData = new MopDetailedData($fopType);
234 2
        }
235 2
    }
236
}
237