Product::createFromXML()   B
last analyzed

Complexity

Conditions 5
Paths 4

Size

Total Lines 29
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 30

Importance

Changes 0
Metric Value
dl 0
loc 29
ccs 0
cts 17
cp 0
rs 8.439
c 0
b 0
f 0
cc 5
eloc 13
nc 4
nop 1
crap 30
1
<?php
2
3
namespace Bpost\BpostApiClient\Bpost\ProductConfiguration;
4
5
use SimpleXMLElement;
6
7
/**
8
 * Class Product
9
 * @package Bpost\BpostApiClient\Bpost\ProductConfiguration
10
 */
11
class Product
12
{
13
    const PRODUCT_NAME_BPACK_EASY_RETOUR = 'bpack Easy Retour';
14
    const PRODUCT_NAME_BPACK_24H_PRO = 'bpack 24h Pro';
15
    const PRODUCT_NAME_BPACK_24H_BUSINESS = 'bpack 24h business';
16
    const PRODUCT_NAME_BPACK_AT_BPOST = 'bpack@bpost';
17
    const PRODUCT_NAME_BPACK_CLICK_AND_COLLECT = 'bpack Click & Collect';
18
    const PRODUCT_NAME_BPACK_24_7 = 'bpack 24/7';
19
    const PRODUCT_NAME_BPACK_BUSINESS = 'bpack Bus';
20
    const PRODUCT_NAME_BPACK_PALLET = 'bpack Pallet';
21
    const PRODUCT_NAME_BPACK_WORLD_EASY_RETURN = 'bpack World Easy Return';
22
    const PRODUCT_NAME_BPACK_WORLD_EXPRESS_PRO = 'bpack World Express Pro';
23
    const PRODUCT_NAME_BPACK_WORLD_BUSINESS = 'bpack World Business';
24
    const PRODUCT_NAME_BPACK_EUROPE_BUSINESS = 'bpack Europe Business';
25
26
    /** @var  bool */
27
    private $default;
28
    /** @var  string */
29
    private $name;
30
31
    /** @var  Price[] */
32
    private $prices = array();
33
    /** @var  Option[] */
34
    private $options = array();
35
36
    /**
37
     * @param SimpleXMLElement $xml
38
     *
39
     * @return Product
40
     */
41
    public static function createFromXML(SimpleXMLElement $xml)
42
    {
43
        /*
44
        <product default="true" name="bpack 24/7">
45
          <price price20To30="750" price10To20="650" price5To10="550" price2To5="450" priceLessThan2="350" countryIso2Code="BE"/>
46
          <option visiblity="NOT_VISIBLE_BY_CONSUMER_OPTIONAL" price="0" name="Saturday"/>
47
          <option visiblity="NOT_VISIBLE_BY_CONSUMER_OPTIONAL" price="0" name="Info &quot;Distributed&quot;"/>
48
          <option visiblity="NOT_VISIBLE_BY_CONSUMER_OPTIONAL" price="0" name="Insurance"/>
49
        </product>
50
        */
51
        $attributes = $xml->attributes();
52
        $children = $xml->children();
53
54
        $product = new self();
55
        $product->setDefault($attributes['default'] == 'true');
56
        $product->setName($attributes['name']);
57
58
        if (isset($children->price)) {
59
            foreach ($children->price as $priceXml) {
60
                $product->addPrice(Price::createFromXML($priceXml));
61
            }
62
        }
63
        if (isset($children->option)) {
64
            foreach ($children->option as $optionXml) {
65
                $product->addOption(Option::createFromXML($optionXml));
66
            }
67
        }
68
        return $product;
69
    }
70
71
    /**
72
     * @return bool
73
     */
74
    public function isDefault()
75
    {
76
        return $this->default;
77
    }
78
79
    /**
80
     * @param bool $default
81
     */
82
    public function setDefault($default)
83
    {
84
        $this->default = (bool) $default;
85
    }
86
87
    /**
88
     * @return string
89
     */
90
    public function getName()
91
    {
92
        return $this->name;
93
    }
94
95
    /**
96
     * @param string $name
97
     */
98
    public function setName($name)
99
    {
100
        $this->name = (string) $name;
101
    }
102
103
    /**
104
     * @return Price[]
105
     */
106
    public function getPrices()
107
    {
108
        return $this->prices;
109
    }
110
111
    /**
112
     * @param Price $price
113
     */
114
    public function addPrice(Price $price)
115
    {
116
        $this->prices[] = $price;
117
    }
118
119
    /**
120
     * @return Option[]
121
     */
122
    public function getOptions()
123
    {
124
        return $this->options;
125
    }
126
127
    /**
128
     * @param Option $option
129
     */
130
    public function addOption(Option $option)
131
    {
132
        $this->options[] = $option;
133
    }
134
135
    /**
136
     * @return bool
137
     */
138
    public function isForNationalShipping()
139
    {
140
        switch ($this->getName()) {
141
            case self::PRODUCT_NAME_BPACK_EASY_RETOUR:
142
            case self::PRODUCT_NAME_BPACK_24H_PRO:
143
            case self::PRODUCT_NAME_BPACK_24H_BUSINESS:
144
            case self::PRODUCT_NAME_BPACK_AT_BPOST:
145
            case self::PRODUCT_NAME_BPACK_CLICK_AND_COLLECT:
146
            case self::PRODUCT_NAME_BPACK_24_7:
147
                return true;
148
149
            case self::PRODUCT_NAME_BPACK_WORLD_EASY_RETURN:
150
            case self::PRODUCT_NAME_BPACK_WORLD_EXPRESS_PRO:
151
            case self::PRODUCT_NAME_BPACK_WORLD_BUSINESS:
152
            case self::PRODUCT_NAME_BPACK_EUROPE_BUSINESS:
153
            default:
154
                return false;
155
        }
156
    }
157
}
158