Completed
Push — master ( 335763...aa43e9 )
by Caio
02:30
created

BoletoCEF   A

Complexity

Total Complexity 34

Size/Duplication

Total Lines 362
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 6

Importance

Changes 7
Bugs 2 Features 0
Metric Value
wmc 34
c 7
b 2
f 0
lcom 1
cbo 6
dl 0
loc 362
rs 9.2

26 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 11 1
A getCodigoBarras() 0 9 1
A getLinhaDigitavelFormatada() 0 4 1
A getNossoNumeroFormatado() 0 9 1
A formataLinhaDigitavel() 0 10 1
A getCodigoBarrasInicio() 0 6 1
A getCodigoBarrasFinal() 0 15 1
A getCodigoDeBarrasSemDV() 0 6 1
B calculaLinhaDigitavel() 0 31 1
A setDateFormat() 0 4 1
A getCampoLivreDoCodigoDeBarras() 0 7 1
A formataNossoNumeroSemDV() 0 7 1
A calculaFatorVencimento() 0 17 3
B calculaDVNossoNumero() 0 24 3
A calculaDVCodigoBeneficiario() 0 10 2
A calculaDVLinhaDigitavel() 0 4 1
A calculaDVGeralCodigoBarras() 0 10 2
A calculaDVCampoLivre() 0 10 2
A getNossoNumeroConst1() 0 4 1
A getNossoNumeroConst2() 0 4 1
A getNossoNumeroSeq1() 0 4 1
A getNossoNumeroSeq2() 0 4 1
A getNossoNumeroSeq3() 0 4 1
A getCampoLivreSemDV() 0 13 1
A getNossoNumeroSemDV() 0 11 2
A getAgenciaCodigoBeneficiarioDv() 0 8 1
1
<?php
2
namespace CbCaio\Boletos\Models\Boletos;
3
4
use CbCaio\Boletos\Calculators\Calculator;
5
use CbCaio\Boletos\Models\Bancos\BancoCEF;
6
use CbCaio\Boletos\Models\Beneficiario\BeneficiarioCEF;
7
use CbCaio\Boletos\Models\BoletoInfo\BoletoInfo;
8
use CbCaio\Boletos\Models\Boletos\Base\Boleto;
9
use Carbon\Carbon;
10
use CbCaio\Boletos\Models\Pagador\Pagador;
11
12
class BoletoCEF extends Boleto
13
{
14
    protected $date_format = 'Y-m-d';
15
16
    /**
17
     * @param BancoCEF        $banco
18
     * @param BeneficiarioCEF $beneficiario
19
     * @param Pagador         $pagador
20
     * @param BoletoInfo      $info
21
     */
22
    public function __construct(
23
        BancoCEF $banco,
24
        BeneficiarioCEF $beneficiario,
25
        Pagador $pagador,
26
        BoletoInfo $info
27
    )
28
    {
29
        parent::__construct(
30
            $banco, $beneficiario, $pagador, $info
31
        );
32
    }
33
34
    /**
35
     * @return string
36
     */
37
    public function getCodigoBarras()
38
    {
39
        $codigo_barras =
40
            $this->getCodigoBarrasInicio() .
41
            $this->calculaDVGeralCodigoBarras() .
42
            $this->getCodigoBarrasFinal();
43
44
        return "$codigo_barras";
45
    }
46
47
    /**
48
     * @return string
49
     */
50
    public function getLinhaDigitavelFormatada()
51
    {
52
        return $this->formataLinhaDigitavel($this->calculaLinhaDigitavel());
53
    }
54
55
    /**
56
     * @return string
57
     */
58
    public function getNossoNumeroFormatado()
59
    {
60
        $nosso_numero_sem_dv = $this->getNossoNumeroSemDV();
61
        $parte_1             = substr($nosso_numero_sem_dv, 0, 2);
62
        $parte_2             = substr($nosso_numero_sem_dv, 2, 15);
63
        $parte_3             = $this->calculaDVNossoNumero($this->getNossoNumeroSemDV());
64
65
        return $parte_1 . '/' . $parte_2 . '-' . $parte_3;
66
    }
67
68
    /**
69
     * @param string $linha_digitavel
70
     * @return string
71
     */
72
    public function formataLinhaDigitavel($linha_digitavel)
73
    {
74
        $campo_1 = substr($linha_digitavel, 0, 5) . '.' . substr($linha_digitavel, 5, 5) . ' ';
75
        $campo_2 = substr($linha_digitavel, 10, 5) . '.' . substr($linha_digitavel, 15, 6) . ' ';
76
        $campo_3 = substr($linha_digitavel, 21, 5) . '.' . substr($linha_digitavel, 26, 6) . ' ';
77
        $campo_4 = substr($linha_digitavel, 32, 1) . ' ';
78
        $campo_5 = substr($linha_digitavel, 33, 14);
79
80
        return $campo_1 . $campo_2 . $campo_3 . $campo_4 . $campo_5;
81
    }
82
83
    /**
84
     * @return string
85
     */
86
    protected function getCodigoBarrasInicio()
87
    {
88
        $banco = $this->banco;
89
90
        return $banco->getCodigoBanco() . $banco->getCodigoMoeda();
91
    }
92
93
    /**
94
     * @return string
95
     */
96
    protected function getCodigoBarrasFinal()
97
    {
98
        $codigo_barras_final = $this->calculaFatorVencimento($this->info->getDataVencimentoCalculada()) .
99
            $this->info->getValorFinal(TRUE, TRUE) .
100
            $this->beneficiario->getCodigoBeneficiario() .
101
            $this->calculaDVCodigoBeneficiario() .
102
            $this->getNossoNumeroSeq1() .
103
            $this->getNossoNumeroConst1() .
104
            $this->getNossoNumeroSeq2() .
105
            $this->getNossoNumeroConst2() .
106
            $this->getNossoNumeroSeq3() .
107
            $this->calculaDVCampoLivre();
108
109
        return "$codigo_barras_final";
110
    }
111
112
    /**
113
     * @return string
114
     */
115
    protected function getCodigoDeBarrasSemDV()
116
    {
117
        $codigo_barras_sem_dv = $this->getCodigoBarrasInicio() . $this->getCodigoBarrasFinal();
118
119
        return $codigo_barras_sem_dv;
120
    }
121
122
    /**
123
     * @return string
124
     */
125
    protected function calculaLinhaDigitavel()
126
    {
127
        $codigo_barras  = $this->getCodigoBarras();
128
        $campo_1_sem_dv =
129
            substr($codigo_barras, 0, 3) .
130
            substr($codigo_barras, 3, 1) .
131
            substr($codigo_barras, 19, 5);
132
133
        $campo_1 =
134
            $campo_1_sem_dv .
135
            $this->calculaDVLinhaDigitavel($campo_1_sem_dv);
136
137
        $campo_2_sem_dv = substr($codigo_barras, 24, 10);
138
        $campo_2        =
139
            $campo_2_sem_dv .
140
            $this->calculaDVLinhaDigitavel($campo_2_sem_dv);
141
142
        $campo_3_sem_dv = substr($codigo_barras, 34, 10);
143
        $campo_3        =
144
            $campo_3_sem_dv .
145
            $this->calculaDVLinhaDigitavel($campo_3_sem_dv);
146
147
        $campo_4 = substr($codigo_barras, 4, 1);
148
        $campo_5 =
149
            substr($codigo_barras, 5, 4) .
150
            Calculator::formataNumero(substr($codigo_barras, 9, 10), 10, 0);
151
152
        $linha_digitavel = $campo_1 . $campo_2 . $campo_3 . $campo_4 . $campo_5;
153
154
        return $linha_digitavel;
155
    }
156
157
    /**
158
     * @param string $date_format
159
     */
160
    public function setDateFormat($date_format)
161
    {
162
        $this->date_format = $date_format;
163
    }
164
165
    /**
166
     * @return string
167
     */
168
    protected function getCampoLivreDoCodigoDeBarras()
169
    {
170
        $campo_livre_sem_dv = $this->getCampoLivreSemDV();
171
        $dv_campo_livre     = $this->calculaDVCampoLivre($campo_livre_sem_dv);
172
173
        return "$campo_livre_sem_dv$dv_campo_livre";
174
    }
175
176
    /**
177
     * @param string $nosso_numero
178
     * @return string
179
     */
180
    public function formataNossoNumeroSemDV($nosso_numero)
181
    {
182
        $nosso_numero_sem_dv = str_replace('/', "", $nosso_numero);
183
        $nosso_numero_sem_dv = preg_replace('/(\-.\b)/', "", $nosso_numero_sem_dv);
184
185
        return "$nosso_numero_sem_dv";
186
    }
187
188
    /**
189
     * @param Carbon $data_vencimento
190
     * @return string
191
     */
192
    public function calculaFatorVencimento($data_vencimento)
193
    {
194
        if ($data_vencimento == NULL)
195
        {
196
            return "0000";
197
        }
198
199
        if (!($data_vencimento instanceof Carbon))
200
        {
201
            $data_vencimento = Carbon::createFromFormat($this->date_format, $data_vencimento)->setTime(0, 0, 0);
202
        }
203
204
        $data_base      = Carbon::create(1997, 10, 7, 0);
205
        $diferenca_dias = $data_base->diffInDays($data_vencimento);
206
207
        return "$diferenca_dias";
208
    }
209
210
    /**
211
     * @param string $nosso_numero_sem_dv
212
     * @return int
213
     */
214
    public function calculaDVNossoNumero($nosso_numero_sem_dv = NULL)
215
    {
216
        $peso_inferior = 2;
0 ignored issues
show
Unused Code introduced by
$peso_inferior is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
217
        $peso_superior = 9;
0 ignored issues
show
Unused Code introduced by
$peso_superior is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
218
219
        if ($nosso_numero_sem_dv === NULL)
220
        {
221
            $nosso_numero = $this->getNossoNumeroSemDV();
222
        } else
223
        {
224
            $nosso_numero = $nosso_numero_sem_dv;
225
        }
226
        $soma_resultados = Calculator::getResultadoSomaModulo11($nosso_numero);
227
        $resto_divisao   = $soma_resultados % 11;
228
        $valor_final     = 11 - $resto_divisao;
229
230
        if ($valor_final > 9)
231
        {
232
            return 0;
233
        } else
234
        {
235
            return $valor_final;
236
        }
237
    }
238
239
    /**
240
     * @param string $codigo_beneficiario
241
     * @return int
242
     */
243
    public function calculaDVCodigoBeneficiario($codigo_beneficiario = NULL)
244
    {
245
        if ($codigo_beneficiario === NULL)
246
        {
247
            return Calculator::calculaModulo11($this->beneficiario->getCodigoBeneficiario());
248
        } else
249
        {
250
            return Calculator::calculaModulo11($codigo_beneficiario);
251
        }
252
    }
253
254
    /**
255
     * @param string $campo
256
     * @return int
257
     */
258
    public function calculaDVLinhaDigitavel($campo)
259
    {
260
        return Calculator::calculaModulo10("$campo");
261
    }
262
263
    /**
264
     * @param string $codigo_barras_sem_dv
265
     * @return int
266
     */
267
    public function calculaDVGeralCodigoBarras($codigo_barras_sem_dv = NULL)
268
    {
269
        if ($codigo_barras_sem_dv === NULL)
270
        {
271
            return Calculator::calculaModulo11SemDV0($this->getCodigoDeBarrasSemDV());
272
        } else
273
        {
274
            return Calculator::calculaModulo11SemDV0($codigo_barras_sem_dv);
275
        }
276
    }
277
278
    /**
279
     * @param string $campo_livre_sem_dv
280
     * @return int
281
     */
282
    public function calculaDVCampoLivre($campo_livre_sem_dv = NULL)
283
    {
284
        if ($campo_livre_sem_dv === NULL)
285
        {
286
            return Calculator::calculaModulo11($this->getCampoLivreSemDV());
287
        } else
288
        {
289
            return Calculator::calculaModulo11($campo_livre_sem_dv);
290
        }
291
    }
292
293
    /**
294
     * @return string
295
     */
296
    private function getNossoNumeroConst1()
297
    {
298
        return substr($this->getNossoNumeroSemDV(), 0, 1);
299
    }
300
301
    /**
302
     * @return string
303
     */
304
    private function getNossoNumeroConst2()
305
    {
306
        return substr($this->getNossoNumeroSemDV(), 1, 1);
307
    }
308
309
    /**
310
     * @return string
311
     */
312
    private function getNossoNumeroSeq1()
313
    {
314
        return substr($this->getNossoNumeroSemDV(), 2, 3);
315
    }
316
317
    /**
318
     * @return string
319
     */
320
    private function getNossoNumeroSeq2()
321
    {
322
        return substr($this->getNossoNumeroSemDV(), 5, 3);
323
    }
324
325
    /**
326
     * @return string
327
     */
328
    private function getNossoNumeroSeq3()
329
    {
330
        return substr($this->getNossoNumeroSemDV(), 8, 9);
331
    }
332
333
    /**
334
     * @return string
335
     */
336
    private function getCampoLivreSemDV()
337
    {
338
        $campo_livre_parcial =
339
            $this->beneficiario->getCodigoBeneficiario() .
340
            $this->calculaDVCodigoBeneficiario($this->beneficiario->getCodigoBeneficiario()) .
341
            $this->getNossoNumeroSeq1() .
342
            $this->getNossoNumeroConst1() .
343
            $this->getNossoNumeroSeq2() .
344
            $this->getNossoNumeroConst2() .
345
            $this->getNossoNumeroSeq3();
346
347
        return "$campo_livre_parcial";
348
    }
349
350
    /**
351
     * @return string
352
     */
353
    public function getNossoNumeroSemDV()
354
    {
355
        $nosso_numero_recebido = $this->info->getNossoNumeroRecebido();
356
357
        if (strlen($nosso_numero_recebido) == 15)
358
        {
359
            $nosso_numero_recebido = $this->banco->getInicioNossoNumero() . $nosso_numero_recebido;
360
        }
361
362
        return $this->formataNossoNumeroSemDV($nosso_numero_recebido);
363
    }
364
365
    public function getAgenciaCodigoBeneficiarioDv()
366
    {
367
        $codigo_beneficiario = $this->beneficiario->getCodigoBeneficiario();
368
        $agencia             = $this->beneficiario->getAgencia();
369
        $dv                  = $this->calculaDVCodigoBeneficiario($codigo_beneficiario);
370
371
        return $agencia . ' / ' . $codigo_beneficiario . '-' . $dv;
372
    }
373
}