Completed
Pull Request — master (#350)
by
unknown
10:34
created

PriceInfo::fromUdb3ModelPriceInfo()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 12
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 12
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 7
nc 2
nop 1
1
<?php
2
3
namespace CultuurNet\UDB3\PriceInfo;
4
5
use Broadway\Serializer\SerializableInterface;
6
use CultuurNet\UDB3\Model\ValueObject\Price\PriceInfo as Udb3ModelPriceInfo;
7
8
class PriceInfo implements SerializableInterface
9
{
10
    /**
11
     * @var BasePrice
12
     */
13
    private $basePrice;
14
15
    /**
16
     * @var Tariff[]
17
     */
18
    private $tariffs;
19
20
    /**
21
     * @param BasePrice $basePrice
22
     */
23
    public function __construct(BasePrice $basePrice)
24
    {
25
        $this->basePrice = $basePrice;
26
        $this->tariffs = [];
27
    }
28
29
    /**
30
     * @param Tariff $tariff
31
     * @return PriceInfo
32
     */
33
    public function withExtraTariff(Tariff $tariff)
34
    {
35
        $c = clone $this;
36
        $c->tariffs[] = $tariff;
37
        return $c;
38
    }
39
40
    /**
41
     * @return BasePrice
42
     */
43
    public function getBasePrice()
44
    {
45
        return $this->basePrice;
46
    }
47
48
    /**
49
     * @return Tariff[]
50
     */
51
    public function getTariffs()
52
    {
53
        return $this->tariffs;
54
    }
55
56
    /**
57
     * @return array
58
     */
59
    public function serialize()
60
    {
61
        $serialized = [
62
            'base' => $this->basePrice->serialize(),
63
            'tariffs' => [],
64
        ];
65
66
        foreach ($this->tariffs as $tariff) {
67
            $serialized['tariffs'][] = $tariff->serialize();
68
        }
69
70
        return $serialized;
71
    }
72
73
    /**
74
     * @param array $data
75
     * @return PriceInfo
76
     */
77
    public static function deserialize(array $data)
78
    {
79
        $basePriceInfo = BasePrice::deserialize($data['base']);
80
81
        $priceInfo = new PriceInfo($basePriceInfo);
82
83
        foreach ($data['tariffs'] as $tariffData) {
84
            $priceInfo = $priceInfo->withExtraTariff(
85
                Tariff::deserialize($tariffData)
86
            );
87
        }
88
89
        return $priceInfo;
90
    }
91
92
    /**
93
     * @param Udb3ModelPriceInfo $udb3ModelPriceInfo
94
     * @return PriceInfo
95
     */
96
    public static function fromUdb3ModelPriceInfo(Udb3ModelPriceInfo $udb3ModelPriceInfo)
97
    {
98
        $basePrice = BasePrice::fromUdb3ModelTariff($udb3ModelPriceInfo->getBasePrice());
99
        $priceInfo = new PriceInfo($basePrice);
100
101
        foreach ($udb3ModelPriceInfo->getTariffs() as $udb3ModelTariff) {
102
            $tariff = Tariff::fromUdb3ModelTariff($udb3ModelTariff);
103
            $priceInfo = $priceInfo->withExtraTariff($tariff);
104
        }
105
106
        return $priceInfo;
107
    }
108
}
109