Completed
Push — master ( c92705...398954 )
by Roberto
47s
created

Mail::zTemplate()   B

Complexity

Conditions 2
Paths 2

Size

Total Lines 36
Code Lines 33

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 36
rs 8.8571
cc 2
eloc 33
nc 2
nop 0
1
<?php
2
3
namespace NFePHP\CTe;
4
5
/**
6
 * Classe para envio dos emails aos interessados
7
 *
8
 * @category  NFePHP
9
 * @package   NFePHP\CTe\MailCTe
10
 * @copyright Copyright (c) 2008-2015
11
 * @license   http://www.gnu.org/licenses/lesser.html LGPL v3
12
 * @author    Roberto L. Machado <linux.rlm at gmail dot com>
13
 * @link      http://github.com/nfephp-org/nfephp for the canonical source repository
14
 */
15
16
use NFePHP\Common\Dom\Dom;
17
use NFePHP\Common\DateTime\DateTime;
18
use NFePHP\Common\Base\BaseMail;
19
use NFePHP\Common\Exception;
20
use Html2Text\Html2Text;
21
use \DOMDocument;
22
23
class Mail extends BaseMail
24
{
25
    public $error = '';
26
    protected $msgHtml = '';
27
    protected $msgTxt = '';
28
    protected $aMail = array();
29
    
30
    /**
31
     * envia
32
     *
33
     * @param  string $pathFile
34
     * @param  array  $aMail
35
     * @param  bool   $comPdf
36
     * @param  string $pathPdf
37
     * @return bool
38
     */
39
    public function envia($pathFile = '', $aMail = array(), $comPdf = false, $pathPdf = '')
40
    {
41
        if ($comPdf && $pathPdf != '') {
42
            $this->addAttachment($pathPdf, '');
43
        }
44
        $assunto = $this->zMontaMessagem($pathFile);
45
        //cria o anexo do xml
46
        $this->addAttachment($pathFile, '');
47
        //constroi a mensagem
48
        $this->buildMessage($this->msgHtml, $this->msgTxt);
49
        if (sizeof($aMail)) {
50
            // Se for informado um ou mais e-mails no $aMail, utiliza eles
51
            $this->aMail = $aMail;
52
        } elseif (!sizeof($this->aMail)) {
53
            // Caso não seja informado nenhum e-mail e não tenha sido recuperado qualquer e-mail do xml
54
            throw new Exception\RuntimeException('Nenhum e-mail informado ou recuperado do XML.');
55
        }
56
        $err = $this->sendMail($assunto, $this->aMail);
57
        if ($err === true) {
58
            return true;
59
        } else {
60
            $this->error = $err;
0 ignored issues
show
Documentation Bug introduced by
It seems like $err of type object<Zend\Mail\Protoco...ption\RuntimeException> or boolean is incompatible with the declared type string of property $error.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
61
            return false;
62
        }
63
        return true;
0 ignored issues
show
Unused Code introduced by
return true; does not seem to be reachable.

This check looks for unreachable code. It uses sophisticated control flow analysis techniques to find statements which will never be executed.

Unreachable code is most often the result of return, die or exit statements that have been added for debug purposes.

function fx() {
    try {
        doSomething();
        return true;
    }
    catch (\Exception $e) {
        return false;
    }

    return false;
}

In the above example, the last return false will never be executed, because a return statement has already been met in every possible execution path.

Loading history...
64
    }
65
    
66
    /**
67
     * zMontaMessagem
68
     *
69
     * @param string $pathFile
70
     */
71
    protected function zMontaMessagem($pathFile)
72
    {
73
        $dom = new Dom();
74
        $dom->loadXMLFile($pathFile);
75
        $infCTe = $dom->getNode('infCte', 0);
76
        $ide = $infCTe->getElementsByTagName('ide')->item(0);
77
        $dest = $infCTe->getElementsByTagName('dest')->item(0);
78
        $emit = $infCTe->getElementsByTagName('emit')->item(0);
79
        $vPrest = $infCTe->getElementsByTagName('vPrest')->item(0);
80
        $razao = $emit->getElementsByTagName('xNome')->item(0)->nodeValue;
81
        $nCT = $ide->getElementsByTagName('nCT')->item(0)->nodeValue;
82
        $serie = $ide->getElementsByTagName('serie')->item(0)->nodeValue;
83
        $xNome = $dest->getElementsByTagName('xNome')->item(0)->nodeValue;
84
        $dhEmi = ! empty($ide->getElementsByTagName('dhEmi')->item(0)->nodeValue) ?
85
                $ide->getElementsByTagName('dhEmi')->item(0)->nodeValue :
86
                $ide->getElementsByTagName('dEmi')->item(0)->nodeValue;
87
        $data = date('d/m/Y', DateTime::convertSefazTimeToTimestamp($dhEmi));
88
        $vCT = $vPrest->getElementsByTagName('vTPrest')->item(0)->nodeValue;
89
        $this->aMail[] = !empty($dest->getElementsByTagName('email')->item(0)->nodeValue) ?
90
                $dest->getElementsByTagName('email')->item(0)->nodeValue :
91
                '';
92
        
93
        $this->msgHtml = $this->zRenderTemplate($xNome, $data, $nCT, $serie, $vCT, $razao);
94
        $cHTT = new Html2Text($this->msgHtml);
95
        $this->msgTxt = $cHTT->getText();
96
        return "CTe n. $nCT - $razao";
97
    }
98
    
99
    /**
100
     * zRenderTemplate
101
     *
102
     * @param  string $xNome
103
     * @param  string $data
104
     * @param  string $nCT
105
     * @param  string $serie
106
     * @param  string $vCT
107
     * @param  string $razao
108
     * @return string
109
     */
110
    protected function zRenderTemplate($xNome, $data, $nCT, $serie, $vCT, $razao)
111
    {
112
        $this->zTemplate();
113
        $temp = $this->template;
114
        $aSearch = array(
115
            '{contato}',
116
            '{data}',
117
            '{numero}',
118
            '{serie}',
119
            '{valor}',
120
            '{emitente}'
121
        );
122
        $aReplace = array(
123
          $xNome,
124
          $data,
125
          $nCT,
126
          $serie,
127
          $vCT,
128
          $razao
129
        );
130
        $temp = str_replace($aSearch, $aReplace, $temp);
131
        return $temp;
132
    }
133
134
    /**
135
     * zTemplate
136
     * Seo template estiver vazio cria o basico
137
     */
138
    protected function zTemplate()
139
    {
140
        if (empty($this->template)) {
141
            $this->template = "<p><b>Prezados {contato},</b></p>".
142
                "<p>Você está recebendo o Conhecimento de Transporte Eletrônico emitido em {data} com o número ".
143
                "{numero}, série {serie} de {emitente}, no valor de R$ {valor}. ".
144
                "Junto com a mercadoria, você receberá também um DACTE (Documento ".
145
                "Auxiliar da Conhecimento de Transporte Eletrônico), que acompanha o trânsito das mercadorias.</p>".
146
                "<p><i>Podemos conceituar a Conhecimento de Transporte Eletrônico como um documento ".
147
                "de existência apenas digital, emitido e armazenado eletronicamente, ".
148
                "com o intuito de documentar, para fins fiscais, uma operação de ".
149
                "circulação de mercadorias, ocorrida entre as partes. Sua validade ".
150
                "jurídica garantida pela assinatura digital do remetente (garantia ".
151
                "de autoria e de integridade) e recepção, pelo Fisco, do documento ".
152
                "eletrônico, antes da ocorrência do Fato Gerador.</i></p>".
153
                "<p><i>Os registros fiscais e contábeis devem ser feitos, a partir ".
154
                "do próprio arquivo do CT-e, anexo neste e-mail, ou utilizando o ".
155
                "DACTE, que representa graficamente a Conhecimento de Transporte Eletrônico. ".
156
                "A validade e autenticidade deste documento eletrônico pode ser ".
157
                "verificada no site nacional do projeto (www.cte.fazenda.gov.br), ".
158
                "através da chave de acesso contida no DACTE.</i></p>".
159
                "<p><i>Para poder utilizar os dados descritos do DACTE na ".
160
                "escrituração do CT-e, tanto o contribuinte destinatário, ".
161
                "como o contribuinte emitente, terão de verificar a validade do CT-e. ".
162
                "Esta validade está vinculada à efetiva existência do CT-e nos ".
163
                "arquivos da SEFAZ, e comprovada através da emissão da Autorização de Uso.</i></p>".
164
                "<p><b>O DACTE não é um conhecimento de transporte, nem substitui um conhecimento de transporte, ".
165
                "servindo apenas como instrumento auxiliar para consulta do CT-e no ".
166
                "Ambiente Nacional.</b></p>".
167
                "<p>Para mais detalhes, consulte: <a href=\"http://www.cte.fazenda.gov.br/\">".
168
                "www.cte.fazenda.gov.br</a></p>".
169
                "<br>".
170
                "<p>Atenciosamente,</p>".
171
                "<p>{emitente}</p>";
172
        }
173
    }
174
}
175