Passed
Push — master ( 1d4724...87feaa )
by Luiz Kim
01:43
created

NFePHP::montaChave()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 19
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 15
nc 2
nop 9
dl 0
loc 19
rs 9.7666
c 0
b 0
f 0

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

1
<?php
2
3
namespace ControleOnline\Library;
4
5
use ControleOnline\Entity\Config;
0 ignored issues
show
Bug introduced by
The type ControleOnline\Entity\Config was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
6
use ControleOnline\Entity\Order;
0 ignored issues
show
Bug introduced by
The type ControleOnline\Entity\Order was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
7
use ControleOnline\Entity\Product;
0 ignored issues
show
Bug introduced by
The type ControleOnline\Entity\Product was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
8
use ControleOnline\Entity\SalesInvoiceTax;
0 ignored issues
show
Bug introduced by
The type ControleOnline\Entity\SalesInvoiceTax was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
9
use ControleOnline\Entity\SalesOrderInvoiceTax;
0 ignored issues
show
Bug introduced by
The type ControleOnline\Entity\SalesOrderInvoiceTax was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
10
use Doctrine\ORM\EntityManagerInterface;
0 ignored issues
show
Bug introduced by
The type Doctrine\ORM\EntityManagerInterface was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
11
use NFePHP\Common\Certificate;
0 ignored issues
show
Bug introduced by
The type NFePHP\Common\Certificate was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
12
use Symfony\Component\Security\Core\Security;
0 ignored issues
show
Bug introduced by
The type Symfony\Component\Security\Core\Security was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
13
use NFePHP\CTe\Common\Standardize;
0 ignored issues
show
Bug introduced by
The type NFePHP\CTe\Common\Standardize was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
14
use Symfony\Component\HttpKernel\KernelInterface;
0 ignored issues
show
Bug introduced by
The type Symfony\Component\HttpKernel\KernelInterface was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
15
16
class NFePHP
17
{
18
    protected $make;
19
    protected $model;
20
    protected $tools;
21
    protected $version;
22
23
    public function __construct(
24
        protected EntityManagerInterface $manager,
25
        protected Security $security,
26
        protected    KernelInterface $appKernel
27
    ) {
28
    }
29
30
    //ide OBRIGATÓRIA
31
    protected function makeIde(Order $order)
32
    {
33
        $provider = $order->getProvider();
34
        $document = $provider->getOneDocument();
35
        //$dhEmi = date("Y-m-d\TH:i:s-03:00"); Para obter a data com diferença de fuso usar 'P'
36
        $dhEmi = date("Y-m-d\TH:i:sP");
37
38
        $numeroCTE = $this->getLastDacte();
39
40
        // CUIDADO: Observe que mesmo os parâmetros fixados abaixo devem ser preenchidos conforme os dados do CT-e, estude a composição da CHAVE para saber o que vai em cada campo
41
        $chave = $this->montaChave(
42
            '43',
43
            date('y', strtotime($dhEmi)),
44
            date('m', strtotime($dhEmi)),
45
            $document->getDOcument(),
46
            $this->tools->model(),
47
            '1',
48
            $numeroCTE,
49
            '1',
50
            '10'
51
        );
52
53
        $cDV = substr($chave, -1);      //Digito Verificador
54
55
        /**
56
         * @todo
57
         */
58
        $ide = new \stdClass();
59
        $ide->cUF = '43'; // Codigo da UF da tabela do IBGE
60
        $ide->cCT = '99999999'; // Codigo numerico que compoe a chave de acesso
61
        $ide->CFOP = '6932'; // Codigo fiscal de operacoes e prestacoes
62
        $ide->natOp = 'PRESTACAO DE SERVICO DE TRANSPORTE A ESTABELECIMENTO FORA DO ESTADO DE ORIGEM'; // Natureza da operacao
63
64
        /**
65
         * @todo
66
         */
67
68
        //$ide->forPag = '';              // 0-Pago; 1-A pagar; 2-Outros
69
        $ide->mod = '57'; // Modelo do documento fiscal: 57 para identificação do CT-e
70
        $ide->serie = '1'; // Serie do CTe
71
        $ide->nCT = $numeroCTE; // Numero do CTe
72
        $ide->dhEmi = $dhEmi; // Data e hora de emissão do CT-e: Formato AAAA-MM-DDTHH:MM:DD
73
        $ide->tpImp = '1'; // Formato de impressao do DACTE: 1-Retrato; 2-Paisagem.
74
        $ide->tpEmis = '1'; // Forma de emissao do CTe: 1-Normal; 4-EPEC pela SVC; 5-Contingência
75
        $ide->cDV = $cDV; // Codigo verificador
76
        $ide->tpAmb = '2'; // 1- Producao; 2-homologacao
77
        $ide->tpCTe = '0'; // 0- CT-e Normal; 1 - CT-e de Complemento de Valores;
78
        // 2 -CT-e de Anulação; 3 - CT-e Substituto
79
        $ide->procEmi = '0'; // Descricao no comentario acima
80
        $ide->verProc = '3.0'; // versao do aplicativo emissor
81
        $ide->indGlobalizado = '';
82
        //$ide->refCTE = '';             // Chave de acesso do CT-e referenciado            
83
        $ide->xMunEnv = 'FOZ DO IGUACU'; // Informar PAIS/Municipio para as operações com o exterior.
84
        $ide->UFEnv = 'RS'; // Informar 'EX' para operações com o exterior.
85
        $ide->modal = '01'; // Preencher com:01-Rodoviário; 02-Aéreo; 03-Aquaviário;04-
86
        $ide->tpServ = '0'; // 0- Normal; 1- Subcontratação; 2- Redespacho;
87
        $ide->cMunEnv = $this->getCodMunicipio($ide->xMunEnv, $ide->UFEnv); // Código do município (utilizar a tabela do IBGE)
88
89
90
        /**
91
         * @todo
92
         */
93
        // 3- Redespacho Intermediário; 4- Serviço Vinculado a Multimodal            
94
        $ide->xMunIni = 'FOZ DO IGUACU'; // Informar 'EXTERIOR' para operações com o exterior.
95
        $ide->UFIni = 'RS'; // Informar 'EX' para operações com o exterior.
96
        $ide->cMunFim = '3523909'; // Utilizar a tabela do IBGE. Informar 9999999 para operações com o exterior.
97
        $ide->cMunFim = $this->getCodMunicipio($ide->xMunIni, $ide->UFIni); // Código do município (utilizar a tabela do IBGE)
98
99
100
        /**
101
         * @todo
102
         */
103
        $ide->xMunFim = 'ITU'; // Informar 'EXTERIOR' para operações com o exterior.
104
        $ide->UFFim = 'SP'; // Informar 'EX' para operações com o exterior.
105
        $ide->cMunIni = $this->getCodMunicipio($ide->xMunFim, $ide->UFFim); // Código do município (utilizar a tabela do IBGE)
106
107
        $ide->retira = '1'; // Indicador se o Recebedor retira no Aeroporto; Filial,
108
        // Porto ou Estação de Destino? 0-sim; 1-não
109
        $ide->xDetRetira = ''; // Detalhes do retira
110
        $ide->indIEToma = '1';
111
        $ide->dhCont = ''; // Data e Hora da entrada em contingência; no formato AAAAMM-DDTHH:MM:SS
112
        $ide->xJust = '';                 // Justificativa da entrada em contingência
113
114
        $this->make->tagide($ide);
115
    }
116
117
118
    //toma OBRIGATÓRIA
119
    protected function makeTomador(Order $order)
120
    {
121
122
123
124
        // Indica o "papel" do tomador: 0-Remetente; 1-Expedidor; 2-Recebedor; 3-Destinatário
125
        $toma3 = new \stdClass();
126
        $toma3->toma = '3';
127
        $this->make->tagtoma3($toma3);
128
        //
129
        //$toma4 = new stdClass();
130
        //$toma4->toma = '4'; // 4-Outros; informar os dados cadastrais do tomador quando ele for outros
131
        //$toma4->CNPJ = '11509962000197'; // CNPJ
132
        //$toma4->CPF = ''; // CPF
133
        //$toma4->IE = 'ISENTO'; // Iscricao estadual
134
        //$toma4->xNome = 'RAZAO SOCIAL'; // Razao social ou Nome
135
        //$toma4->xFant = 'NOME FANTASIA'; // Nome fantasia
136
        //$toma4->fone = '5532128202'; // Telefone
137
        //$toma4->email = '[email protected]';   // email
138
        //$cte->tagtoma4($toma4);
139
140
        //endertoma OBRIGATÓRIA
141
        $this->makeTomadorAddress($order);
142
    }
143
144
    protected function makeTomadorAddress(Order $order)
0 ignored issues
show
Unused Code introduced by
The parameter $order is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

144
    protected function makeTomadorAddress(/** @scrutinizer ignore-unused */ Order $order)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
145
    {
146
147
        /**
148
         * @todo
149
         */
150
        $enderToma = new \stdClass();
151
        $enderToma->xLgr = 'Avenida Independência'; // Logradouro
152
        $enderToma->nro = '482'; // Numero
153
        $enderToma->xCpl = ''; // COmplemento
154
        $enderToma->xBairro = 'Centro'; // Bairro
155
        $enderToma->cMun = '4308607'; // Codigo do municipio do IBEGE Informar 9999999 para operações com o exterior
156
        $enderToma->xMun = 'Garibaldi'; // Nome do município (Informar EXTERIOR para operações com o exterior.
157
        $enderToma->CEP = '95720000'; // CEP
158
        $enderToma->UF = 'SP'; //$arr['siglaUF']; // Sigla UF (Informar EX para operações com o exterior.)
159
        $enderToma->cPais = '1058'; // Codigo do país ( Utilizar a tabela do BACEN )
160
        $enderToma->xPais = 'Brasil';                   // Nome do pais
161
        $this->make->tagenderToma($enderToma);
162
    }
163
164
    //emit OBRIGATÓRIA
165
    protected function makeEmit(Order $order)
166
    {
167
        $provider = $order->getProvider();
168
        $document = $provider->getOneDocument();
169
170
        $std = new \stdClass();
171
        $std->IE = '111111111';
172
        $std->IEST = null;
173
        //$std->IM = '95095870';
174
        $std->CNAE = '4642701';
175
        $std->CRT = 1;
176
        $std->CNPJ = '99999999999999';
177
        //$std->CPF = '12345678901'; //NÃO PASSE TAGS QUE NÃO EXISTEM NO CASO
178
179
        $emit = new \stdClass();
180
        $emit->CNPJ = $document->getDOcument(); // CNPJ do emitente
181
        //$emit->IE = '0100072968'; // Inscricao estadual
182
        //$emit->IEST = ""; // Inscricao estadual
183
        $emit->xNome = $provider->getName(); // Razao social
184
        $emit->xFant = $provider->getAlias(); // Nome fantasia
185
186
        $this->make->tagemit($std);
187
188
        //enderEmit OBRIGATÓRIA
189
        $this->makeEmitAddress($order);
190
    }
191
192
    protected function makeEmitAddress(Order $order)
193
    {
194
        $provider = $order->getProvider();
195
        /**
196
         * @var \ControleOnline\Entity\Address $providerAddress
197
         */
198
        $providerAddress = $provider->getAddress()[0];
199
200
        $enderEmit = new \stdClass();
201
        $enderEmit->xLgr = $providerAddress->getStreet()->getStreet(); // Logradouro
202
        $enderEmit->nro = $providerAddress->getNumber(); // Numero
203
        $enderEmit->xCpl = $providerAddress->getComplement(); // Complemento
204
        $enderEmit->xBairro = $providerAddress->getStreet()->getDistrict()->getDistrict(); // Bairro
205
        $enderEmit->xMun = $providerAddress->getStreet()->getDistrict()->getCity()->getCity(); // Nome do municipio            
206
        $enderEmit->CEP = $providerAddress->getStreet()->getCep()->getCep(); // CEP
207
        $enderEmit->UF =  $providerAddress->getStreet()->getDistrict()->getCity()->getState()->getUf(); // Sigla UF
208
        $enderEmit->cMun = $this->getCodMunicipio($enderEmit->xMun, $enderEmit->UF); // Código do município (utilizar a tabela do IBGE)
209
        $enderEmit->fone = $provider->getPhone()[0]->getDdd() . $provider->getPhone()[0]->getPhone(); // Fone
210
        $this->make->tagenderemit($enderEmit);
211
    }
212
    //dest OPCIONAL
213
    protected function makeDest(Order $order)
214
    {
215
        $std = new \stdClass();
216
        $std->xNome = 'Eu Ltda';
217
        $std->CNPJ = '01234123456789';
218
        //$std->CPF = '12345678901';
219
        //$std->idEstrangeiro = 'AB1234';
220
        $std->indIEDest = 9;
221
        //$std->IE = '';
222
        //$std->ISUF = '12345679';
223
        //$std->IM = 'XYZ6543212';
224
        $std->email = '[email protected]';
225
        $dest = $this->make->tagdest($std);
0 ignored issues
show
Unused Code introduced by
The assignment to $dest is dead and can be removed.
Loading history...
226
227
228
        $this->makeDestAddress($order);
229
    }
230
    //enderDest OPCIONAL
231
    protected function makeDestAddress(Order $order)
0 ignored issues
show
Unused Code introduced by
The parameter $order is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

231
    protected function makeDestAddress(/** @scrutinizer ignore-unused */ Order $order)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
232
    {
233
234
        $std = new \stdClass();
235
        $std->xLgr = 'Avenida Sebastião Diniz';
236
        $std->nro = '458';
237
        $std->xCpl = null;
238
        $std->xBairro = 'CENTRO';
239
        $std->cMun = 1400100;
240
        $std->xMun = 'Boa Vista';
241
        $std->UF = 'RR';
242
        $std->CEP = '69301088';
243
        $std->cPais = 1058;
244
        $std->xPais = 'Brasil';
245
        $std->fone = '1111111111';
246
        $this->make->tagenderdest($std);
247
    }
248
249
    //prod OBRIGATÓRIA
250
    protected function makeProds(Order $order)
251
    {
252
        $orderProducts  = $order->getOrderProducts();
253
        $item = 1;
254
        foreach ($orderProducts as $orderProducts) {
255
            $product = $orderProducts->getProduct();
256
257
            $std = new \stdClass();
258
            $std->item = $item;
259
            $std->cProd = '00341';
260
            $std->cEAN = 'SEM GTIN';
261
            $std->cEANTrib = 'SEM GTIN';
262
            $std->xProd = 'Produto com serviço';
263
            $std->NCM = '96081000';
264
            $std->CFOP = '5933';
265
            $std->uCom = 'JG';
266
            $std->uTrib = 'JG';
267
            $std->cBarra = NULL;
268
            $std->cBarraTrib = NULL;
269
            $std->qCom = '1';
270
            $std->qTrib = '1';
271
            $std->vUnCom = '200';
272
            $std->vUnTrib = '200';
273
            $std->vProd = '200';
274
            $std->vDesc = NULL;
275
            $std->vOutro = NULL;
276
            $std->vSeg = NULL;
277
            $std->vFrete = NULL;
278
            $std->cBenef = NULL;
279
            $std->xPed = NULL;
280
            $std->nItemPed = NULL;
281
            $std->indTot = 1;
282
            $this->make->tagprod($std);
283
            $this->makeImpostos($product, $item);
284
        }
285
    }
286
    protected function makeImpostos(Product $product, $item)
287
    {
288
        $this->makePIS($product, $item);
289
        $this->makeCOFINS($product, $item);
290
        $this->makeISSQN($product, $item);
291
292
        //Imposto
293
        $std = new \stdClass();
294
        $std->item = $item; //item da NFe
295
        $std->vTotTrib = 0;
296
        $this->make->tagimposto($std);
297
298
299
300
        $std = new \stdClass();
301
        $this->make->tagICMSTot($std);
302
303
        $std = new \stdClass();
304
        $std->dCompet = '2010-09-12';
305
        $std->cRegTrib = 6;
306
        $this->make->tagISSQNTot($std);
307
        $this->make->tagISSQNTot($std);
308
    }
309
310
    protected function makeInfNFe($version)
311
    {
312
        //infNFe OBRIGATÓRIA
313
        $std = new \stdClass();
314
        $std->Id = '';
315
        $std->versao =  $version;
316
        $this->make->taginfNFe($std);
317
    }
318
319
    protected function makeISSQN(Product $product, $item)
0 ignored issues
show
Unused Code introduced by
The parameter $product is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

319
    protected function makeISSQN(/** @scrutinizer ignore-unused */ Product $product, $item)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
320
    {
321
        // Monta a tag de impostos mas não adiciona no xml
322
        $std = new \stdClass();
323
        $std->item = $item; //item da NFe
324
        $std->vBC = 2.0;
325
        $std->vAliq = 8.0;
326
        $std->vISSQN = 0.16;
327
        $std->cMunFG = 1300029;
328
        $std->cMun = 1300029;
329
        $std->cPais = '1058';
330
        $std->cListServ = '01.01';
331
        $std->indISS = 1;
332
        $std->indIncentivo = 2;
333
        // Adiciona a tag de imposto ISSQN no xml
334
        $this->make->tagISSQN($std);
335
    }
336
337
    protected function makePIS(Product $product, $item)
0 ignored issues
show
Unused Code introduced by
The parameter $product is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

337
    protected function makePIS(/** @scrutinizer ignore-unused */ Product $product, $item)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
338
    {
339
        //PIS
340
        $std = new \stdClass();
341
        $std->item = $item; //item da NFe
342
        $std->CST = '99';
343
        $std->vBC = 200;
344
        $std->pPIS = 0.65;
345
        $std->vPIS = 13;
346
        $this->make->tagPIS($std);
347
    }
348
    protected function makeCOFINS(Product $product, $item)
0 ignored issues
show
Unused Code introduced by
The parameter $product is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

348
    protected function makeCOFINS(/** @scrutinizer ignore-unused */ Product $product, $item)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
349
    {
350
        //COFINS
351
        $std = new \stdClass();
352
        $std->item = $item; //item da NFe
353
        $std->CST = '99';
354
        $std->vBC = 200;
355
        $std->pCOFINS = 3;
356
        $std->vCOFINS = 60;
357
        $this->make->tagCOFINS($std);
358
    }
359
360
    protected function sign(Order $order)
0 ignored issues
show
Unused Code introduced by
The parameter $order is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

360
    protected function sign(/** @scrutinizer ignore-unused */ Order $order)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
361
    {
362
        $this->tools->model($this->model);
363
        //$tools->disableCertValidation(true); //tem que desabilitar
364
        return $this->tools->signNFe($this->make->getXML());
365
    }
366
367
    protected function getCertificate(Order $order)
368
    {
369
        $provider = $order->getProvider();
370
371
        $dacteKey = $this->manager->getRepository(Config::class)->findOneBy([
372
            'people'  => $provider,
373
            'config_key' => 'cert-path'
374
        ]);
375
376
        $dacteKeyPass = $this->manager->getRepository(Config::class)->findOneBy([
377
            'people'  => $provider,
378
            'config_key' => 'cert-pass'
379
        ]);
380
        if (!$dacteKey || !$dacteKeyPass)
381
            throw new \Exception("DACTE key cert is required", 1);
382
383
        $certPath = $this->appKernel->getProjectDir() . $dacteKey->getConfigValue();
384
        if (!is_file($certPath))
385
            throw new \Exception("DACTE key cert path is invalid", 1);
386
        return Certificate::readPfx($this->getSignData($order), $dacteKeyPass->getConfigValue());
387
    }
388
389
    protected function getSignData(Order $order)
390
    {
391
392
        $provider = $order->getProvider();
393
        $document = $provider->getOneDocument();
394
395
        /**
396
         * @var \ControleOnline\Entity\Address $providerAddress
397
         */
398
        $providerAddress = $provider->getAddress()[0];
399
400
        $arr = [
401
            "atualizacao" => date('Y-m-d H:m:i'),
402
            "tpAmb" => 2, //2 - Homologação / 1 - Produção
403
            "razaosocial" => $provider->getName(),
404
            "cnpj" => $document->getDocument(),
405
            //"cpf" => "00000000000",
406
            "siglaUF" => $providerAddress->getStreet()->getDistrict()->getCity()->getState()->getUf(),
407
            "schemes" => "PL_CTe_300",
408
            "versao" => '3.00',
409
            "proxyConf" => [
410
                "proxyIp" => "",
411
                "proxyPort" => "",
412
                "proxyUser" => "",
413
                "proxyPass" => ""
414
            ]
415
        ];
416
417
        return json_encode($arr);
418
    }
419
420
    protected function makeTransp(Order $order)
0 ignored issues
show
Unused Code introduced by
The parameter $order is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

420
    protected function makeTransp(/** @scrutinizer ignore-unused */ Order $order)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
421
    {
422
        //transp OBRIGATÓRIA
423
        $std = new \stdClass();
424
        $this->make->tagtransp($std);
425
    }
426
427
428
    protected function makePag(Order $order)
0 ignored issues
show
Unused Code introduced by
The parameter $order is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

428
    protected function makePag(/** @scrutinizer ignore-unused */ Order $order)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
429
    {
430
        //pag OBRIGATÓRIA
431
        $std = new \stdClass();
432
        $std->vTroco = 0;
433
        $this->make->tagpag($std);
434
    }
435
436
437
    protected function makedetPag(Order $order)
0 ignored issues
show
Unused Code introduced by
The parameter $order is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

437
    protected function makedetPag(/** @scrutinizer ignore-unused */ Order $order)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
438
    {
439
        //detPag OBRIGATÓRIA
440
        $std = new \stdClass();
441
        $std->indPag = '0';
442
        $std->xPag = NULL;
443
        $std->tPag = '01';
444
        $std->vPag = 2.01;
445
        $this->make->tagdetpag($std);
446
    }
447
    protected function makeInfRespTec()
448
    {
449
450
        $std = new \stdClass();
451
        $std->CNPJ = '99999999999999'; //CNPJ da pessoa jurídica responsável pelo sistema utilizado na emissão do documento fiscal eletrônico
452
        $std->xContato = 'Fulano de Tal'; //Nome da pessoa a ser contatada
453
        $std->email = '[email protected]'; //E-mail da pessoa jurídica a ser contatada
454
        $std->fone = '1155551122'; //Telefone da pessoa jurídica/física a ser contatada
455
        //$std->CSRT = 'G8063VRTNDMO886SFNK5LDUDEI24XJ22YIPO'; //Código de Segurança do Responsável Técnico
456
        //$std->idCSRT = '01'; //Identificador do CSRT
457
        $this->make->taginfRespTec($std);
458
    }
459
460
461
    protected function getCodMunicipio($mun, $uf)
462
    {
463
464
        /**
465
         * @todo
466
         */
467
        $cod['sp'] = [
0 ignored issues
show
Comprehensibility Best Practice introduced by
$cod was never initialized. Although not strictly required by PHP, it is generally a good practice to add $cod = array(); before regardless.
Loading history...
468
            'Guarulhos' => '4108304',
469
            'São Paulo' => '4108304'
470
        ];
471
472
        return $cod[$uf][$mun];
473
    }
474
    protected function getLastDacte()
475
    {
476
        return '127'; //@todo
477
    }
478
479
    protected function montaChave($cUF, $ano, $mes, $cnpj, $mod, $serie, $numero, $tpEmis, $codigo = '')
480
    {
481
        if ($codigo == '') {
482
            $codigo = $numero;
483
        }
484
        $forma = "%02d%02d%02d%s%02d%03d%09d%01d%08d";
485
        $chave = sprintf(
486
            $forma,
487
            $cUF,
488
            $ano,
489
            $mes,
490
            $cnpj,
491
            $mod,
492
            $serie,
493
            $numero,
494
            $tpEmis,
495
            $codigo
496
        );
497
        return $chave . $this->calculaDV($chave);
498
    }
499
500
501
    protected function sendData($xml)
502
    {
503
504
        //Envia lote e autoriza
505
        $axmls[] = $xml;
0 ignored issues
show
Comprehensibility Best Practice introduced by
$axmls was never initialized. Although not strictly required by PHP, it is generally a good practice to add $axmls = array(); before regardless.
Loading history...
506
        $lote = substr(str_replace(',', '', number_format(microtime(true) * 1000000, 0)), 0, 15);
507
        $res = $this->tools->sefazEnviaLote($axmls, $lote);
508
509
        //Converte resposta
510
        $stdCl = new Standardize($res);
511
        //Output array
512
        $arr = $stdCl->toArray();
513
        //print_r($arr);
514
        //Output object
515
        $std = $stdCl->toStd();
516
517
        if ($std->cStat != 103) { //103 - Lote recebido com Sucesso
518
            //processa erros
519
            print_r($arr);
520
        }
521
522
        //Consulta Recibo
523
        $res = $this->tools->sefazConsultaRecibo($std->infRec->nRec);
524
        $stdCl = new Standardize($res);
525
        $arr = $stdCl->toArray();
526
        $std = $stdCl->toStd();
527
        if ($std->protCTe->infProt->cStat == 100) { //Autorizado o uso do CT-e
528
            //adicionar protocolo
529
        }
530
        echo '<pre>';
531
        print_r($arr);
532
    }
533
534
    protected function calculaDV($chave43)
535
    {
536
        $multiplicadores = array(2, 3, 4, 5, 6, 7, 8, 9);
537
        $iCount = 42;
538
        $somaPonderada = 0;
539
        while ($iCount >= 0) {
540
            for ($mCount = 0; $mCount < count($multiplicadores) && $iCount >= 0; $mCount++) {
541
                $num = (int) substr($chave43, $iCount, 1);
542
                $peso = (int) $multiplicadores[$mCount];
543
                $somaPonderada += $num * $peso;
544
                $iCount--;
545
            }
546
        }
547
        $resto = $somaPonderada % 11;
548
        if ($resto == '0' || $resto == '1') {
549
            $cDV = 0;
550
        } else {
551
            $cDV = 11 - $resto;
552
        }
553
        return (string) $cDV;
554
    }
555
556
    public function  getNfNumber($xml)
0 ignored issues
show
Unused Code introduced by
The parameter $xml is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

556
    public function  getNfNumber(/** @scrutinizer ignore-unused */ $xml)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
557
    {
558
        return 1;
559
    }
560
561
    protected function persist(Order $order, $xml)
562
    {
563
        $provider = $order->getProvider();
564
        $invoiceTax = new SalesInvoiceTax();
565
        $invoiceTax->setInvoice($xml);
566
        $invoiceTax->setInvoiceNumber($this->getNfNumber($xml));
567
568
        $this->manager->persist($invoiceTax);
569
        $this->manager->flush();
570
571
572
        $orderInvoiceTax = new SalesOrderInvoiceTax();
573
        $orderInvoiceTax->setOrder($order);
574
        $orderInvoiceTax->setInvoiceType(57);
575
        $orderInvoiceTax->setInvoiceTax($invoiceTax);
576
        $orderInvoiceTax->setIssuer($provider);
577
578
        $this->manager->persist($orderInvoiceTax);
579
        $this->manager->flush();
580
    }
581
}
582