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

MopDescription::loadPaymentModule()   F

Complexity

Conditions 14
Paths 1537

Size

Total Lines 91
Code Lines 58

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 80
CRAP Score 14

Importance

Changes 0
Metric Value
dl 0
loc 91
c 0
b 0
f 0
ccs 80
cts 80
cp 1
rs 2
cc 14
eloc 58
nc 1537
nop 1
crap 14

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

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