Completed
Push — develop ( af717b...520eee )
by Stefan
23s
created

InternationalForms::setPurchaseOrderNumber()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 6
rs 9.4285
cc 1
eloc 3
nc 1
nop 1
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 string $declarationStatement
139
     */
140
    private $declarationStatement;
141
142
    /**
143
     * @return array
144
     */
145
    public static function getTypes()
146
    {
147
        return self::$typeNames;
148
    }
149
150
    /**
151
     * @return string
152
     */
153
    public function getTypeName()
154
    {
155
        return self::$typeNames[$this->getType()];
156
    }
157
158
    /**
159
     * @param null|object $attributes
160
     */
161
    public function __construct($attributes = null)
162
    {
163
        if (null !== $attributes) {
164
            if (isset($attributes->FormType)) {
165
                $this->setType($attributes->FormType);
166
            }
167
            if (isset($attributes->InvoiceNumber)) {
168
                $this->setInvoiceNumber($attributes->InvoiceNumber);
169
            }
170
            if (isset($attributes->InvoiceDate)) {
171
                $this->setInvoiceDate(new DateTime($attributes->InvoiceDate));
172
            }
173
            if (isset($attributes->PurchaseOrderNumber)) {
174
                $this->setPurchaseOrderNumber($attributes->PurchaseOrderNumber);
175
            }
176
            if (isset($attributes->TermsOfShipment)) {
177
                $this->setTermsOfShipment($attributes->TermsOfShipment);
178
            }
179
            if (isset($attributes->Comments)) {
180
                $this->setComments($attributes->Comments);
181
            }
182
            if (isset($attributes->CurrencyCode)) {
183
                $this->setCurrencyCode($attributes->CurrencyCode);
184
            }
185
            if (isset($attributes->DeclarationStatement)) {
186
                $this->setDeclarationStatement($attributes->DeclarationStatement);
187
            }
188
        }
189
    }
190
191
    /**
192
     * @param $type string
193
     *
194
     * @return $this
195
     */
196
    public function setType($type)
197
    {
198
        $this->type = $type;
199
200
        return $this;
201
    }
202
203
    /**
204
     * @return string
205
     */
206
    public function getType()
207
    {
208
        return $this->type;
209
    }
210
211
    /**
212
     * @param $freightCharges FreightCharges
213
     *
214
     * @return $this
215
     */
216
    public function setFreightCharges(FreightCharges $freightCharges)
217
    {
218
        $this->freightCharges = $freightCharges;
219
220
        return $this;
221
    }
222
223
    /**
224
     * @return FreightCharges
225
     */
226
    public function getFreightCharges()
227
    {
228
        return $this->freightCharges;
229
    }
230
231
    /**
232
     * @param $discount Discount
233
     *
234
     * @return $this
235
     */
236
    public function setDiscount(Discount $discount)
237
    {
238
        $this->discount = $discount;
239
240
        return $this;
241
    }
242
243
    /**
244
     * @return Discount
245
     */
246
    public function getDiscount()
247
    {
248
        return $this->discount;
249
    }
250
251
    /**
252
     * @param Product $product
253
     *
254
     * @return $this
255
     */
256
    public function addProduct(Product $product)
257
    {
258
        array_push($this->products, $product);
259
260
        return $this;
261
    }
262
263
    /**
264
     * @return array
265
     */
266
    public function getProducts()
267
    {
268
        return $this->products;
269
    }
270
271
    /**
272
     * @param null|DOMDocument $document
273
     *
274
     * @return DOMElement
275
     */
276
    public function toNode(DOMDocument $document = null)
277
    {
278
        if (null === $document) {
279
            $document = new DOMDocument();
280
        }
281
282
        $node = $document->createElement('InternationalForms');
283
284
        if ($this->getType()) {
285
            $node->appendChild($document->createElement('FormType', $this->getType()));
286
        }
287
        if ($this->getInvoiceNumber() !== null) {
288
            $node->appendChild($document->createElement('InvoiceNumber', $this->getInvoiceNumber()));
289
        }
290
        if ($this->getInvoiceDate() !== null) {
291
            $node->appendChild($document->createElement('InvoiceDate', $this->getInvoiceDate()->format('Ymd')));
292
        }
293
        if ($this->getPurchaseOrderNumber() !== null) {
294
            $node->appendChild($document->createElement('PurchaseOrderNumber', $this->getPurchaseOrderNumber()));
295
        }
296
        if ($this->getTermsOfShipment() !== null) {
297
            $node->appendChild($document->createElement('TermsOfShipment', $this->getTermsOfShipment()));
298
        }
299
        if ($this->getReasonForExport() !== null) {
300
            $node->appendChild($document->createElement('ReasonForExport', $this->getReasonForExport()));
301
        }
302
        if ($this->getComments() !== null) {
303
            $node->appendChild($document->createElement('Comments', $this->getComments()));
304
        }
305
        if ($this->getCurrencyCode() !== null) {
306
            $node->appendChild($document->createElement('CurrencyCode', $this->getCurrencyCode()));
307
        }
308
        if ($this->getDeclarationStatement() !== null) {
309
            $node->appendChild($document->createElement('DeclarationStatement', $this->getDeclarationStatement()));
310
        }
311
        if ($this->getDiscount() !== null) {
312
            $node->appendChild($this->getDiscount()->toNode($document));
313
        }
314
        if ($this->getFreightCharges() !== null) {
315
            $node->appendChild($this->getFreightCharges()->toNode($document));
316
        }
317
        foreach ($this->products as $product) {
318
            $node->appendChild($product->toNode($document));
319
        }
320
321
        return $node;
322
    }
323
324
    /**
325
     * @param $number string
326
     *
327
     * @return $this
328
     */
329
    public function setInvoiceNumber($number)
330
    {
331
        $this->invoiceNumber = $number;
332
333
        return $this;
334
    }
335
336
    /**
337
     * @return string
338
     */
339
    public function getInvoiceNumber()
340
    {
341
        return $this->invoiceNumber;
342
    }
343
344
    /**
345
     * @param DateTime $date
346
     *
347
     * @return $this
348
     */
349
    public function setInvoiceDate(DateTime $date)
350
    {
351
        $this->invoiceDate = $date;
352
353
        return $this;
354
    }
355
356
    /**
357
     * @return DateTime
358
     */
359
    public function getInvoiceDate()
360
    {
361
        return $this->invoiceDate;
362
    }
363
364
    /**
365
     * @param $number
366
     *
367
     * @return $this
368
     */
369
    public function setPurchaseOrderNumber($number)
370
    {
371
        $this->purchaseOrderNumber = $number;
372
373
        return $this;
374
    }
375
376
    /**
377
     * @return string
378
     */
379
    public function getPurchaseOrderNumber()
380
    {
381
        return $this->purchaseOrderNumber;
382
    }
383
384
    /**
385
     * @param $terms
386
     *
387
     * @return $this
388
     */
389
    public function setTermsOfShipment($terms)
390
    {
391
        $this->termsOfShipment = $terms;
392
393
        return $this;
394
    }
395
396
    /**
397
     * @return string
398
     */
399
    public function getTermsOfShipment()
400
    {
401
        return $this->termsOfShipment;
402
    }
403
404
    /**
405
     * @param $reason
406
     *
407
     * @return $this
408
     */
409
    public function setReasonForExport($reason)
410
    {
411
        if (strlen($reason) > 20) {
412
            $reason = substr($reason, 0, 20);
413
        }
414
415
        $this->reasonForExport = $reason;
416
417
        return $this;
418
    }
419
420
    /**
421
     * @return string
422
     */
423
    public function getReasonForExport()
424
    {
425
        return $this->reasonForExport;
426
    }
427
428
    /**
429
     * @param $comments
430
     *
431
     * @return $this
432
     */
433 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...
434
    {
435
        if (strlen($comments) > 150) {
436
            $comments = substr($comments, 0, 150);
437
        }
438
439
        $this->comments = $comments;
440
441
        return $this;
442
    }
443
444
    /**
445
     * @return string
446
     */
447
    public function getComments()
448
    {
449
        return $this->comments;
450
    }
451
452
    /**
453
     * @param $code
454
     *
455
     * @return $this
456
     */
457
    public function setCurrencyCode($code)
458
    {
459
        $this->currencyCode = $code;
460
461
        return $this;
462
    }
463
464
    /**
465
     * @return string
466
     */
467
    public function getCurrencyCode()
468
    {
469
        return $this->currencyCode;
470
    }
471
472
    /**
473
     * @return string
474
     */
475
    public function getDeclarationStatement()
476
    {
477
        return $this->declarationStatement;
478
    }
479
480
    public function setDeclarationStatement($statement)
481
    {
482
        $this->declarationStatement = $statement;
483
484
        return $this;
485
    }
486
}
487