Completed
Push — master ( 4b31fe...fd90eb )
by Stefan
05:33
created

InternationalForms::toNode()   F

Complexity

Conditions 15
Paths 16384

Size

Total Lines 50
Code Lines 31

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 22
CRAP Score 45.04

Importance

Changes 3
Bugs 1 Features 0
Metric Value
c 3
b 1
f 0
dl 0
loc 50
ccs 22
cts 45
cp 0.4889
rs 2.6974
cc 15
eloc 31
nc 16384
nop 1
crap 45.04

How to fix   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
namespace Ups\Entity;
4
5
use DateTime;
6
use DOMDocument;
7
use DOMElement;
8
use Ups\NodeInterface;
9
10
class InternationalForms implements NodeInterface
11
{
12
    /**
13
     * @var string
14
     */
15
    private $type = self::TYPE_INVOICE;
16
17
    /**
18
     * Form Types.
19
     */
20
    const TYPE_INVOICE = '01';
21
    const TYPE_CO = '03';
22
    const TYPE_NAFTA_CO = '04';
23
    const TYPE_PARTIAL_INVOICE = '05';
24
    const TYPE_PACKINGLIST = '06';
25
    const TYPE_CUSTOMER_GENERATED_FORMS = '07';
26
    const TYPE_AIR_FREIGHT_PACKING_LIST = '08';
27
    const TYPE_CN22_FORMS = '09';
28
    const TYPE_UPS_PREMIUM_CARE = '10';
29
    const TYPE_EEI_SHIPMENT_WITH_RETURN_SERVICE = '11';
30
31
    private static $typeNames = [
32
        '01' => 'Invoice',
33
        '03' => 'CO',
34
        '04' => 'NAFTA CO',
35
        '05' => 'Partial Invoice',
36
        '06' => 'Packinglist',
37
        '07' => 'Customer Generated Forms',
38
        '08' => 'Air Freight Packing List',
39
        '09' => 'CN22 Forms',
40
        '10' => 'UPS Premium Care',
41
        '11' => 'EEI. For shipment with return service',
42
    ];
43
44
    /**
45
     * @var string
46
     */
47
    private $termsOfShipment;
48
49
    /**
50
     * Terms of Shipment.
51
     */
52
    const TOS_COST_AND_FREIGHT = 'CFR';
53
    const TOS_COST_INSURANCE_AND_FREIGHT = 'CIF';
54
    const TOS_CARRIAGE_AND_INSURANCE_PAID = 'CIP';
55
    const TOS_CARRIAGE_PAID_TO = 'CPT';
56
    const TOS_DELIVERED_AT_FRONTIER = 'DAF';
57
    const TOS_DELIVERY_DUTY_PAID = 'DDP';
58
    const TOS_DELIVERY_DUTY_UNPAID = 'DDU';
59
    const TOS_DELIVERED_EX_QUAY = 'DEQ';
60
    const TOS_DELIVERED_EX_SHIP = 'DES';
61
    const TOS_EX_WORKS = 'EXW';
62
    const TOS_FREE_ALONGSIDE_SHIP = 'FAS';
63
    const TOS_FREE_CARRIER = 'FCA';
64
    const TOS_FREE_ON_BOARD = 'FOB';
65
66
    private static $termsOfShipmentNames = [
0 ignored issues
show
Unused Code introduced by
The property $termsOfShipmentNames is not used and could be removed.

This check marks private properties in classes that are never used. Those properties can be removed.

Loading history...
67
        'CFR' => 'Cost and Freight',
68
        'CIF' => 'Cost, Insurance and Freight',
69
        'CIP' => 'Carriage and Insurance Paid',
70
        'CPT' => 'Carriage Paid To',
71
        'DAF' => 'Delivered at Frontier',
72
        'DDP' => 'Delivery Duty Paid',
73
        'DDU' => 'Delivery Duty Unpaid',
74
        'DEQ' => 'Delivered Ex Quay',
75
        'DES' => 'Delivered Ex Ship',
76
        'EXW' => 'Ex Works',
77
        'FAS' => 'Free Alongside Ship',
78
        'FCA' => 'Free Carrier',
79
        'FOB' => 'Free On Board',
80
    ];
81
82
    /**
83
     * @var string
84
     */
85
    private $reasonForExport;
86
87
    /**
88
     * Reasons for export.
89
     */
90
    const RFE_SALE = 'SALE';
91
    const RFE_GIFT = 'GIFT';
92
    const RFE_SAMPLE = 'SAMPLE';
93
    const RFE_RETURN = 'RETURN';
94
    const RFE_REPAIR = 'REPAIR';
95
    const RFE_INTERCOMPANYDATA = 'INTERCOMPANYDATA';
96
97
    /**
98
     * @var string
99
     */
100
    private $comments;
101
102
    /**
103
     * @var string
104
     */
105
    private $currencyCode;
106
107
    /**
108
     * @var string
109
     */
110
    private $invoiceNumber;
111
112
    /**
113
     * @var DateTime
114
     */
115
    private $invoiceDate;
116
117
    /**
118
     * @var string
119
     */
120
    private $purchaseOrderNumber;
121
122
    /**
123
     * @var array
124
     */
125
    private $products = [];
126
127
    /**
128
     * @var Discount
129
     */
130
    private $discount;
131
132
    /**
133
     * @var FreightCharges
134
     */
135
    private $freightCharges;
136
137
    /**
138
     * @var bool
139
     */
140
    private $additionalDocumentIndicator;
141
142
    /**
143
     * @var EEIFilingOption
144
     */
145
    private $eeiFilingOption;
146
147
    /**
148
     * @return array
149
     */
150
    public static function getTypes()
151
    {
152
        return self::$typeNames;
153
    }
154
155
    /**
156
     * @return string
157
     */
158
    public function getTypeName()
159
    {
160
        return self::$typeNames[$this->getType()];
161
    }
162
163
    /**
164
     * @param null|object $attributes
165
     */
166 3
    public function __construct($attributes = null)
167
    {
168 3
        if (null !== $attributes) {
169 2
            if (isset($attributes->FormType)) {
170
                $this->setType($attributes->FormType);
171
            }
172 2
            if (isset($attributes->InvoiceNumber)) {
173
                $this->setInvoiceNumber($attributes->InvoiceNumber);
174
            }
175 2
            if (isset($attributes->InvoiceDate)) {
176
                $this->setInvoiceDate(new DateTime($attributes->InvoiceDate));
177
            }
178 2
            if (isset($attributes->PurchaseOrderNumber)) {
179
                $this->setPurchaseOrderNumber($attributes->PurchaseOrderNumber);
180
            }
181 2
            if (isset($attributes->TermsOfShipment)) {
182
                $this->setTermsOfShipment($attributes->TermsOfShipment);
183
            }
184 2
            if (isset($attributes->Comments)) {
185
                $this->setComments($attributes->Comments);
186
            }
187 2
            if (isset($attributes->CurrencyCode)) {
188
                $this->setCurrencyCode($attributes->CurrencyCode);
189
            }
190 2
            if (isset($attributes->EEIFilingOption)) {
191 2
                $this->setEEIFilingOption(new EEIFilingOption($attributes->EEIFilingOption));
192 2
            }
193 2
        }
194 3
    }
195
196
    /**
197
     * @param $type string
198
     *
199
     * @return $this
200
     */
201
    public function setType($type)
202
    {
203
        $this->type = $type;
204
205
        return $this;
206
    }
207
208
    /**
209
     * @return string
210
     */
211 1
    public function getType()
212
    {
213 1
        return $this->type;
214
    }
215
216
    /**
217
     * @param $freightCharges FreightCharges
218
     *
219
     * @return $this
220
     */
221
    public function setFreightCharges(FreightCharges $freightCharges)
222
    {
223
        $this->freightCharges = $freightCharges;
224
225
        return $this;
226
    }
227
228
    /**
229
     * @return FreightCharges
230
     */
231 1
    public function getFreightCharges()
232
    {
233 1
        return $this->freightCharges;
234
    }
235
236
    /**
237
     * @param $discount Discount
238
     *
239
     * @return $this
240
     */
241
    public function setDiscount(Discount $discount)
242
    {
243
        $this->discount = $discount;
244
245
        return $this;
246
    }
247
248
    /**
249
     * @return Discount
250
     */
251 1
    public function getDiscount()
252
    {
253 1
        return $this->discount;
254
    }
255
256
    /**
257
     * @param Product $product
258
     *
259
     * @return $this
260
     */
261
    public function addProduct(Product $product)
262
    {
263
        array_push($this->products, $product);
264
265
        return $this;
266
    }
267
268
    /**
269
     * @return array
270
     */
271
    public function getProducts()
272
    {
273
        return $this->products;
274
    }
275
276
    /**
277
     * @param null|DOMDocument $document
278
     *
279
     * @return DOMElement
280
     */
281 1
    public function toNode(DOMDocument $document = null)
282
    {
283 1
        if (null === $document) {
284
            $document = new DOMDocument();
285
        }
286
287 1
        $node = $document->createElement('InternationalForms');
288
289 1
        if ($this->getType()) {
290 1
            $node->appendChild($document->createElement('FormType', $this->getType()));
291 1
        }
292 1
        if ($this->getInvoiceNumber() !== null) {
293
            $node->appendChild($document->createElement('InvoiceNumber', $this->getInvoiceNumber()));
294
        }
295 1
        if ($this->getInvoiceDate() !== null) {
296
            $node->appendChild($document->createElement('InvoiceDate', $this->getInvoiceDate()->format('Ymd')));
297
        }
298 1
        if ($this->getPurchaseOrderNumber() !== null) {
299
            $node->appendChild($document->createElement('PurchaseOrderNumber', $this->getPurchaseOrderNumber()));
300
        }
301 1
        if ($this->getTermsOfShipment() !== null) {
302
            $node->appendChild($document->createElement('TermsOfShipment', $this->getTermsOfShipment()));
303
        }
304 1
        if ($this->getReasonForExport() !== null) {
305
            $node->appendChild($document->createElement('ReasonForExport', $this->getReasonForExport()));
306
        }
307 1
        if ($this->getComments() !== null) {
308
            $node->appendChild($document->createElement('Comments', $this->getComments()));
309
        }
310 1
        if ($this->getCurrencyCode() !== null) {
311
            $node->appendChild($document->createElement('CurrencyCode', $this->getCurrencyCode()));
312
        }
313 1
        if ($this->getDiscount() !== null) {
314
            $node->appendChild($this->getDiscount()->toNode($document));
315
        }
316 1
        if ($this->getFreightCharges() !== null) {
317
            $node->appendChild($this->getFreightCharges()->toNode($document));
318
        }
319 1
        if ($this->getAdditionalDocumentIndicator() !== null) {
320
            $node->appendChild($document->createElement('AdditionalDocumentIndicator'));
321
        }
322 1
        if ($this->getEEIFilingOption() !== null) {
323 1
            $node->appendChild($this->getEEIFilingOption()->toNode($document));
324 1
        }
325 1
        foreach ($this->products as $product) {
326
            $node->appendChild($product->toNode($document));
327 1
        }
328
329 1
        return $node;
330
    }
331
332
    /**
333
     * @param $number string
334
     *
335
     * @return $this
336
     */
337
    public function setInvoiceNumber($number)
338
    {
339
        $this->invoiceNumber = $number;
340
341
        return $this;
342
    }
343
344
    /**
345
     * @return string
346
     */
347 1
    public function getInvoiceNumber()
348
    {
349 1
        return $this->invoiceNumber;
350
    }
351
352
    /**
353
     * @param DateTime $date
354
     *
355
     * @return $this
356
     */
357
    public function setInvoiceDate(DateTime $date)
358
    {
359
        $this->invoiceDate = $date;
360
361
        return $this;
362
    }
363
364
    /**
365
     * @return DateTime
366
     */
367 1
    public function getInvoiceDate()
368
    {
369 1
        return $this->invoiceDate;
370
    }
371
372
    /**
373
     * @param $number
374
     *
375
     * @return $this
376
     */
377
    public function setPurchaseOrderNumber($number)
378
    {
379
        $this->purchaseOrderNumber = $number;
380
381
        return $this;
382
    }
383
384
    /**
385
     * @return string
386
     */
387 1
    public function getPurchaseOrderNumber()
388
    {
389 1
        return $this->purchaseOrderNumber;
390
    }
391
392
    /**
393
     * @param $terms
394
     *
395
     * @return $this
396
     */
397
    public function setTermsOfShipment($terms)
398
    {
399
        $this->termsOfShipment = $terms;
400
401
        return $this;
402
    }
403
404
    /**
405
     * @return string
406
     */
407 1
    public function getTermsOfShipment()
408
    {
409 1
        return $this->termsOfShipment;
410
    }
411
412
    /**
413
     * @param $reason
414
     *
415
     * @return $this
416
     */
417
    public function setReasonForExport($reason)
418
    {
419
        if (strlen($reason) > 20) {
420
            $reason = substr($reason, 0, 20);
421
        }
422
423
        $this->reasonForExport = $reason;
424
425
        return $this;
426
    }
427
428
    /**
429
     * @return string
430
     */
431 1
    public function getReasonForExport()
432
    {
433 1
        return $this->reasonForExport;
434
    }
435
436
    /**
437
     * @param $comments
438
     *
439
     * @return $this
440
     */
441 View Code Duplication
    public function setComments($comments)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in 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...
442
    {
443
        if (strlen($comments) > 150) {
444
            $comments = substr($comments, 0, 150);
445
        }
446
447
        $this->comments = $comments;
448
449
        return $this;
450
    }
451
452
    /**
453
     * @return string
454
     */
455 1
    public function getComments()
456
    {
457 1
        return $this->comments;
458
    }
459
460
    /**
461
     * @param $code
462
     *
463
     * @return $this
464
     */
465
    public function setCurrencyCode($code)
466
    {
467
        $this->currencyCode = $code;
468
469
        return $this;
470
    }
471
472
    /**
473
     * @return string
474
     */
475 1
    public function getCurrencyCode()
476
    {
477 1
        return $this->currencyCode;
478
    }
479
480
    /**
481
     * @param $additionalDocumentIndicator
482
     *
483
     * @return $this
484
     */
485
    public function setAdditionalDocumentIndicator($additionalDocumentIndicator)
486
    {
487
        $this->additionalDocumentIndicator = $additionalDocumentIndicator;
488
    }
489
490
    /**
491
     * @return bool
492
     */
493 1
    public function getAdditionalDocumentIndicator()
494
    {
495 1
        return $this->additionalDocumentIndicator;
496
    }
497
498
    /**
499
     * @param EEIFilingOption $eeiFilingOption
500
     *
501
     * @return $this
502
     */
503 3
    public function setEEIFilingOption(EEIFilingOption $eeiFilingOption)
504
    {
505 3
        $this->eeiFilingOption = $eeiFilingOption;
506
507 3
        return $this;
508
    }
509
510
    /**
511
     * @return EEIFilingOption
512
     */
513 3
    public function getEEIFilingOption()
514
    {
515 3
        return $this->eeiFilingOption;
516
    }
517
}
518