Test Failed
Branch master (62528d)
by Zangra
14:14 queued 12:04
created

Product::isForNationalShipping()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 13
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 9
c 1
b 0
f 0
dl 0
loc 13
rs 9.9666
cc 1
nc 1
nop 0
1
<?php
2
declare(strict_types=1);
3
4
namespace Bpost\BpostApiClient\Bpost\ProductConfiguration;
5
6
use SimpleXMLElement;
7
8
/**
9
 * Class Product
10
 */
11
class Product
12
{
13
    public const PRODUCT_NAME_BPACK_EASY_RETOUR           = 'bpack Easy Retour';
14
    public const PRODUCT_NAME_BPACK_24H_PRO               = 'bpack 24h Pro';
15
    public const PRODUCT_NAME_BPACK_24H_BUSINESS          = 'bpack 24h business';
16
    public const PRODUCT_NAME_BPACK_AT_BPOST              = 'bpack@bpost';
17
    public const PRODUCT_NAME_BPACK_CLICK_AND_COLLECT     = 'bpack Click & Collect';
18
    public const PRODUCT_NAME_BPACK_24_7                  = 'bpack 24/7';
19
    public const PRODUCT_NAME_BPACK_BUSINESS              = 'bpack Bus';
20
    public const PRODUCT_NAME_BPACK_PALLET                = 'bpack Pallet';
21
    public const PRODUCT_NAME_BPACK_WORLD_EASY_RETURN     = 'bpack World Easy Return';
22
    public const PRODUCT_NAME_BPACK_WORLD_EXPRESS_PRO     = 'bpack World Express Pro';
23
    public const PRODUCT_NAME_BPACK_WORLD_BUSINESS        = 'bpack World Business';
24
    public const PRODUCT_NAME_BPACK_EUROPE_BUSINESS       = 'bpack Europe Business';
25
    public const PRODUCT_NAME_BPACK_AT_BPOST_INTERNATIONAL= 'bpack@bpost international';
26
27
    private bool $default;
28
    private string $name;
29
30
    /** @var Price[] */
31
    private array $prices = [];
32
    /** @var Option[] */
33
    private array $options = [];
34
35
    public static function createFromXML(SimpleXMLElement $xml): self
36
    {
37
        // <product default="true" name="bpack 24/7"> ... </product>
38
        $a = $xml->attributes();
39
40
        $self = new self();
41
        $self->setDefault(((string) $a['default']) === 'true');
42
        $self->setName((string) $a['name']);
43
44
        foreach ($xml->children()->price ?? [] as $priceXml) {
45
            $self->addPrice(Price::createFromXML($priceXml));
46
        }
47
        foreach ($xml->children()->option ?? [] as $optionXml) {
48
            $self->addOption(Option::createFromXML($optionXml));
49
        }
50
51
        return $self;
52
    }
53
54
    public function isDefault(): bool
55
    {
56
        return $this->default;
57
    }
58
    public function setDefault(bool $default): void
59
    {
60
        $this->default = $default;
61
    }
62
63
    public function getName(): string
64
    {
65
        return $this->name;
66
    }
67
    public function setName(string $name): void
68
    {
69
        $this->name = $name;
70
    }
71
72
    public function getPrices(): array
73
    {
74
        return $this->prices;
75
    }
76
    public function addPrice(Price $price): void
77
    {
78
        $this->prices[] = $price;
79
    }
80
81
    public function getOptions(): array
82
    {
83
        return $this->options;
84
    }
85
    public function addOption(Option $option): void
86
    {
87
        $this->options[] = $option;
88
    }
89
90
    public function isForNationalShipping(): bool
91
    {
92
        return in_array(
93
            $this->getName(),
94
            [
95
                self::PRODUCT_NAME_BPACK_EASY_RETOUR,
96
                self::PRODUCT_NAME_BPACK_24H_PRO,
97
                self::PRODUCT_NAME_BPACK_24H_BUSINESS,
98
                self::PRODUCT_NAME_BPACK_AT_BPOST,
99
                self::PRODUCT_NAME_BPACK_CLICK_AND_COLLECT,
100
                self::PRODUCT_NAME_BPACK_24_7,
101
            ],
102
            true
103
        );
104
    }
105
}
106