Test Setup Failed
Push — master ( aa40a2...69297c )
by Eduardo
06:24
created

ETicket::objCol()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 7
c 0
b 0
f 0
nc 1
nop 1
dl 0
loc 9
ccs 0
cts 0
cp 0
crap 2
rs 10
1
<?php
2
namespace Eduardokum\CorreiosPhp\Entities;
3
4
use Eduardokum\CorreiosPhp\Exception\InvalidArgumentException;
5
6
class ETicket
7
{
8
    /**
9
     * @var int
10
     */
11
    private $id = 1;
12
13
    /**
14
     * @var \DOMDocument
15
     */
16
    private $dom;
17
18
    /**
19
     * @var array
20
     */
21
    private $objects = [];
22
23
    /**
24
     * @var int
25
     */
26
    private $serviceCode;
27
28
    /**
29
     * ETicket constructor.
30
     *
31
     * @param $id
32
     * @param $serviceCode
33
     */
34
    public function __construct($id, $serviceCode)
35
    {
36
        $this->id = $id;
37
        $this->serviceCode = $serviceCode;
38
    }
39
40
    /**
41
     * @return int
42
     */
43
    public function getId()
44
    {
45
        return $this->id;
46
    }
47
48
    /**
49
     * @return int
50
     */
51
    public function getServiceCode()
52
    {
53
        return $this->serviceCode;
54
    }
55
56
    /**
57
     * @param PostalObjectReverse $postalObjectReverse
58
     */
59
    public function addObject(PostalObjectReverse $postalObjectReverse)
60
    {
61
62
        if (count($this->objects) >= 10) {
63
            throw new InvalidArgumentException('Too many tags added. Max 10.');
64
        }
65
66
        $this->objects[] = $postalObjectReverse;
67
    }
68
69
    /**
70
     * @param bool $simultaneous
71
     *
72
     * @return string
73
     */
74
    public function save($simultaneous = false)
75
    {
76
        $this->dom = new \DOMDocument('1.0', 'UTF-8');
77
        $this->dom->preserveWhiteSpace = false;
78
        $this->dom->formatOutput = false;
79
80
        foreach ($this->objects as $object) {
81
            /** @var PostalObjectReverse $object */
82
            $coletas_solicitadas = $this->dom->createElement('coletas_solicitadas');
83
            $coletas_solicitadas->appendChild($this->dom->createElement('tipo', $object->getType()));
84
            $coletas_solicitadas->appendChild($this->dom->createElement('id_cliente', $object->getInvoiceNumber()));
85
            $coletas_solicitadas->appendChild($this->dom->createElement('valor_declarado', $object->getValueDeclared()));
86
            $coletas_solicitadas->appendChild($this->dom->createElement('descricao', ''));
87
            $coletas_solicitadas->appendChild($this->dom->createElement('cklist'));
88
            $coletas_solicitadas->appendChild($this->dom->createElement('documento', $object->getRecipientDocument()));
89
            $coletas_solicitadas->appendChild($this->remetente($object));
90
            if ($simultaneous) {
91
                if (!$tagDv = $object->getTagDv()) {
92
                    throw new InvalidArgumentException('Object has no tag');
93
                }
94
                $coletas_solicitadas->appendChild($this->dom->createElement('obj', $tagDv));
95
            } else {
96
                $coletas_solicitadas->appendChild($this->dom->createElement('ar', (int) array_key_exists('001', $object->getAdditionalServices())));
97
                $coletas_solicitadas->appendChild($this->dom->createElement('numero', $object->getPickupNumber()));
98
                $coletas_solicitadas->appendChild($this->dom->createElement('ag'));
99
                $coletas_solicitadas->appendChild($this->dom->createElement('cartao'));
100
                $coletas_solicitadas->appendChild($this->dom->createElement('servico_adicional'));
101
                $coletas_solicitadas->appendChild($this->objCol($object));
102
            }
103
104
            $this->dom->appendChild($coletas_solicitadas);
105
        }
106
107
        return preg_replace('/\<\?xml.+?\?\>|[\n\t\r]/', '', $this->dom->saveXML($this->dom));
108
    }
109
110
    /**
111
     * @param PostalObjectReverse $postalObjectReverse
112
     *
113
     * @return \DOMElement
114
     */
115
    private function remetente(PostalObjectReverse $postalObjectReverse)
116
    {
117
        $remetente = $this->dom->createElement('remetente');
118
        $remetente->appendChild($this->dom->createElement('nome', $postalObjectReverse->getRecipient()->getName()));
119
        $remetente->appendChild($this->dom->createElement('logradouro', $postalObjectReverse->getRecipient()->getStreet()));
120
        $remetente->appendChild($this->dom->createElement('numero', $postalObjectReverse->getRecipient()->getNumber()));
121
        $remetente->appendChild($this->dom->createElement('complemento', $postalObjectReverse->getRecipient()->getComplement()));
122
        $remetente->appendChild($this->dom->createElement('bairro', $postalObjectReverse->getRecipient()->getDistrict()));
123
        $remetente->appendChild($this->dom->createElement('cep', $postalObjectReverse->getRecipient()->getCep()));
124
        $remetente->appendChild($this->dom->createElement('referencia', ''));
125
        $remetente->appendChild($this->dom->createElement('cidade', $postalObjectReverse->getRecipient()->getCity()));
126
        $remetente->appendChild($this->dom->createElement('uf', $postalObjectReverse->getRecipient()->getState()));
127
        $remetente->appendChild($this->dom->createElement('telefone', $phone = $postalObjectReverse->getRecipient()->getPhone()));
128
        $remetente->appendChild($this->dom->createElement('ddd', (strlen($phone) > 9 ? substr($phone, 0, 2) : '')));
129
        $remetente->appendChild($this->dom->createElement('email', $postalObjectReverse->getRecipient()->getMail()));
130
        $remetente->appendChild($this->dom->createElement('celular', ''));
131
        $remetente->appendChild($this->dom->createElement('ddd_celular', ''));
132
        $remetente->appendChild($this->dom->createElement('sms', 'N'));
133
        $remetente->appendChild($this->dom->createElement('identificacao', ''));
134
        return $remetente;
135
    }
136
137
    /**
138
     * @param PostalObjectReverse $postalObjectReverse
139
     *
140
     * @return \DOMElement
141
     */
142
    private function objCol(PostalObjectReverse $postalObjectReverse)
143
    {
144
        $remetente = $this->dom->createElement('obj_col');
145
        $remetente->appendChild($this->dom->createElement('item', '1'));
146
        $remetente->appendChild($this->dom->createElement('desc', $postalObjectReverse->getDescription()));
147
        $remetente->appendChild($this->dom->createElement('entrega', ''));
148
        $remetente->appendChild($this->dom->createElement('num', ''));
149
        $remetente->appendChild($this->dom->createElement('id', $this->getId()));
150
        return $remetente;
151
    }
152
}
153