Completed
Push — master ( d2b3f3...05ef8e )
by João Felipe Magro
02:25
created

Cart::serializeProducts()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 16
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 16
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 10
nc 2
nop 0
1
<?php
2
3
namespace Ipag\Classes;
4
5
use Ipag\Classes\Contracts\Emptiable;
6
use Ipag\Classes\Contracts\Serializable;
7
use Ipag\Classes\Traits\EmptiableTrait;
8
9
final class Cart implements Emptiable, Serializable
10
{
11
    use EmptiableTrait;
12
13
    /**
14
     * @var array of Product
15
     */
16
    private $products = [];
17
18
    /**
19
     * @return array of Product
20
     */
21
    public function getProducts()
22
    {
23
        if (empty($this->products)) {
24
            return [];
25
        }
26
27
        return $this->products;
28
    }
29
30
    /**
31
     * @param Product $product
32
     */
33
    public function addProduct(Product $product)
34
    {
35
        $this->products[] = $product;
36
37
        return $this;
38
    }
39
40
    /**
41
     * @param array of Product $products
42
     */
43
    public function addProducts(array $products)
44
    {
45
        foreach ($products as $product) {
46
            $this->addProduct($product);
47
        }
48
49
        return $this;
50
    }
51
52
    public function serialize()
53
    {
54
        if ($this->isEmpty()) {
55
            return [];
56
        }
57
58
        return [
59
            'descricao_pedido' => urlencode(json_encode($this->serializeProducts())),
60
        ];
61
    }
62
63
    private function serializeProducts()
64
    {
65
        $_products = [];
66
        $productId = 1;
67
68
        foreach ($this->getProducts() as $product) {
69
            $_products[$productId++] = [
70
                'descr' => $product->getName(),
71
                'valor' => $product->getUnitPrice(),
72
                'quant' => $product->getQuantity(),
73
                'id'    => $product->getSku(),
74
            ];
75
        }
76
77
        return $_products;
78
    }
79
}
80