Passed
Push — master ( ac9048...2fe939 )
by João
11:03
created

IPI::getCEnq()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 1
dl 0
loc 3
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Gbbs\NfeCalculos;
6
7
use Exception;
8
9
class IPI
10
{
11
    public $descCST;
12
    public $clEnq;
13
    public $CodNCM;
14
    public $REIDE;
15
    public $SUFRAMA;
16
    public $CSTNotaRef;
17
    public $Zerar;
18
19
    private $CNPJProd;
20
    private $cSelo;
21
    private $qSelo;
22
    private $cEnq;
23
    private $CST;
24
    private $vBC;
25
    private $pIPI;
26
    private $vIPI;
27
    private $qUnid;
28
    private $vUnid;
29
30
    /**
31
     * @param $IPI
32
     * @param $pIPI
33
     * @return mixed
34
     * @throws Exception
35
     */
36
    public static function calcular(IPI $IPI, $pIPI)
37
    {
38
        $IPI->pIPI = $pIPI;
39
40
        if ($IPI->Zerar === 1) {
41
            $IPI->vBC = '0';
42
            if ($IPI->vIPI === 0) {
43
                $IPI->pIPI = 0;
44
            }
45
            return $IPI;
46
        }
47
48
        if ($IPI->getCST() === '00') {
49
            /* ENTRADA COM RECUPERAÇÃO DE CRÉDITO */
50
            return self::calcAliquotaAdValoren($IPI);
51
        } elseif ($IPI->getCST() === '49') {
52
            /* OUTRAS ENTRADAS */
53
            return self::calcRetornoIsentoValorOutros($IPI);
54
        } elseif ($IPI->getCST() === '50') {
55
            /* SAÍDA TRIBUTADA */
56
            return self::calcAliquotaAdValoren($IPI);
57
        } elseif ($IPI->getCST() === '99') {
58
            /* OUTRAS SAÍDAS */
59
            return self::calcAliquotaAdValoren($IPI);
60
        } elseif ($IPI->getCST() === '01') {
61
            /* 01 ENTRADA TRIBUTADA COM ALICOTA ZERO */
62
            return self::calcIsento($IPI);
63
        } elseif ($IPI->getCST() === '02') {
64
            /* ENTRADA ISENTA */
65
            return self::calcIsento($IPI);
66
        } elseif ($IPI->getCST() === '03') {
67
            /* ENTRADA NÃO TRIBUTADA */
68
            return self::calcIsento($IPI);
69
        } elseif ($IPI->getCST() === '04') {
70
            /* ENTRADA IMUNE */
71
            return self::calcIsento($IPI);
72
        } elseif ($IPI->getCST() === '05') {
73
            /* ENTRADA COM SUSPENSAO */
74
            return self::calcIsento($IPI);
75
        } elseif ($IPI->getCST() === '51') {
76
            /* SAÍDA TRIBUTADA COM ALICOTA ZERO */
77
            return self::calcIsento($IPI);
78
        } elseif ($IPI->getCST() === '52') {
79
            /* SAÍDA ISENTA */
80
            return self::calcIsento($IPI);
81
        } elseif ($IPI->getCST() === '53') {
82
            /* SAÍDA NÃO-TRIBUTADA */
83
            return self::calcIsento($IPI);
84
        } elseif ($IPI->getCST() === '54') {
85
            /* SAÍDA IMUNE */
86
            return self::calcIsento($IPI);
87
        } elseif ($IPI->getCST() === '55') {
88
            /* SAÍDA COM SUSPENSAO */
89
            return self::calcIsento($IPI);
90
        }
91
        throw new Exception('Erro ao calcular IPI' . print_r($IPI, true));
92
    }
93
94
    /*
95
     * @ISENTO
96
     */
97
    private static function calcIsento($IPI)
98
    {
99
        $IPI->vIPI = '0';
100
        $IPI->vBC = '0';
101
        $IPI->pIPI = '0';
102
        $IPI->qUnid = null;
103
        $IPI->vUnid = null;
104
        return $IPI;
105
    }
106
107
    /*
108
     * @Calcula o Valor IPI Ad Valoren
109
     */
110
    private static function calcAliquotaAdValoren($IPI)
111
    {
112
        $IPI->vIPI = ($IPI->vBC * ($IPI->pIPI / 100));
113
        return $IPI;
114
    }
115
116
    private static function calcRetornoIsentoValorOutros($IPI)
117
    {
118
        if ($IPI->CSTNotaRef === '00' || $IPI->CSTNotaRef === '50' || $IPI->CSTNotaRef === '99') {
119
            $IPI->vIPI = ($IPI->vBC * ($IPI->pIPI / 100));
120
            $IPI->pIPI = 0;
121
            return $IPI;
122
        } else {
123
            return self::calcIsento($IPI);
124
        }
125
    }
126
127
    /**
128
     * @return string
129
     */
130
    public function getCNPJProd(): string
131
    {
132
        return $this->CNPJProd;
133
    }
134
135
    /**
136
     * @param string $CNPJProd
137
     */
138
    public function setCNPJProd(string $CNPJProd): void
139
    {
140
        $this->CNPJProd = $CNPJProd;
141
    }
142
143
    /**
144
     * @return string
145
     */
146
    public function getCSelo(): string
147
    {
148
        return $this->cSelo;
149
    }
150
151
    /**
152
     * @param string $cSelo
153
     */
154
    public function setCSelo(string $cSelo): void
155
    {
156
        $this->cSelo = $cSelo;
157
    }
158
159
    /**
160
     * @return float
161
     */
162
    public function getQSelo(): float
163
    {
164
        return $this->qSelo;
165
    }
166
167
    /**
168
     * @param float $qSelo
169
     */
170
    public function setQSelo(float $qSelo): void
171
    {
172
        $this->qSelo = $qSelo;
173
    }
174
175
    /**
176
     * @return string
177
     */
178
    public function getCEnq(): string
179
    {
180
        return $this->cEnq;
181
    }
182
183
    /**
184
     * @param string $cEnq
185
     */
186
    public function setCEnq(string $cEnq): void
187
    {
188
        $this->cEnq = $cEnq;
189
    }
190
191
    /**
192
     * @return string
193
     */
194
    public function getCST(): string
195
    {
196
        return $this->CST;
197
    }
198
199
    /**
200
     * @param string $CST
201
     */
202
    public function setCST(string $CST): void
203
    {
204
        $this->CST = $CST;
205
    }
206
207
    /**
208
     * @return float
209
     */
210
    public function getVBC(): float
211
    {
212
        return $this->vBC;
213
    }
214
215
    /**
216
     * @param float $vBC
217
     */
218
    public function setVBC(float $vBC): void
219
    {
220
        $this->vBC = $vBC;
221
    }
222
223
    /**
224
     * @return float
225
     */
226
    public function getPIPI(): float
227
    {
228
        return $this->pIPI;
229
    }
230
231
    /**
232
     * @param float $pIPI
233
     */
234
    public function setPIPI(float $pIPI): void
235
    {
236
        $this->pIPI = $pIPI;
237
    }
238
239
    /**
240
     * @return float
241
     */
242
    public function getVIPI(): float
243
    {
244
        return $this->vIPI;
245
    }
246
247
    /**
248
     * @param float $vIPI
249
     */
250
    public function setVIPI(float $vIPI): void
251
    {
252
        $this->vIPI = $vIPI;
253
    }
254
255
    /**
256
     * @return float
257
     */
258
    public function getQUnid(): float
259
    {
260
        return $this->qUnid;
261
    }
262
263
    /**
264
     * @param float $qUnid
265
     */
266
    public function setQUnid(float $qUnid): void
267
    {
268
        $this->qUnid = $qUnid;
269
    }
270
271
    /**
272
     * @return float
273
     */
274
    public function getVUnid(): float
275
    {
276
        return $this->vUnid;
277
    }
278
279
    /**
280
     * @param float $vUnid
281
     */
282
    public function setVUnid(float $vUnid): void
283
    {
284
        $this->vUnid = $vUnid;
285
    }
286
}
287