Completed
Push — master ( f040ca...690db4 )
by Roberto
05:32 queued 02:31
created

Base::removeInvalidAdresses()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 8
ccs 5
cts 5
cp 1
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 4
nc 1
nop 0
crap 1
1
<?php
2
3
namespace NFePHP\Mail;
4
5
class Base
6
{
7
    /**
8
     * Html Templates
9
     * @var array
10
     */
11
    protected $templates = [
12
        'NFe'=> "<p><b>Prezados {destinatario},</b></p>".
13
                "<p>Você está recebendo a Nota Fiscal Eletrônica emitida em {data} com o número ".
14
                "{numero}, de {emitente}, no valor de R$ {valor}. ".
15
                "Junto com a mercadoria, você receberá também um DANFE (Documento ".
16
                "Auxiliar da Nota Fiscal Eletrônica), que acompanha o trânsito das mercadorias.</p>".
17
                "<p><i>Podemos conceituar a Nota Fiscal Eletrônica como um documento ".
18
                "de existência apenas digital, emitido e armazenado eletronicamente, ".
19
                "com o intuito de documentar, para fins fiscais, uma operação de ".
20
                "circulação de mercadorias, ocorrida entre as partes. Sua validade ".
21
                "jurídica garantida pela assinatura digital do remetente (garantia ".
22
                "de autoria e de integridade) e recepção, pelo Fisco, do documento ".
23
                "eletrônico, antes da ocorrência do Fato Gerador.</i></p>".
24
                "<p><i>Os registros fiscais e contábeis devem ser feitos, a partir ".
25
                "do próprio arquivo da NF-e, anexo neste e-mail, ou utilizando o ".
26
                "DANFE, que representa graficamente a Nota Fiscal Eletrônica. ".
27
                "A validade e autenticidade deste documento eletrônico pode ser ".
28
                "verificada no site nacional do projeto (www.nfe.fazenda.gov.br), ".
29
                "através da chave de acesso contida no DANFE.</i></p>".
30
                "<p><i>Para poder utilizar os dados descritos do DANFE na ".
31
                "escrituração da NF-e, tanto o contribuinte destinatário, ".
32
                "como o contribuinte emitente, terão de verificar a validade da NF-e. ".
33
                "Esta validade está vinculada à efetiva existência da NF-e nos ".
34
                "arquivos da SEFAZ, e comprovada através da emissão da Autorização de Uso.</i></p>".
35
                "<p><b>O DANFE não é uma nota fiscal, nem substitui uma nota fiscal, ".
36
                "servindo apenas como instrumento auxiliar para consulta da NF-e no ".
37
                "Ambiente Nacional.</b></p>".
38
                "<p>Para mais detalhes, consulte: <a href=\"http://www.nfe.fazenda.gov.br/\">".
39
                "www.nfe.fazenda.gov.br</a></p>".
40
                "<br>".
41
                "<p>Atenciosamente,</p>".
42
                "<p>{emitente}</p>",
43
        
44
        'CTe'=> "<p><b>Prezados {destinatario},</b></p>".
45
                "<p>Você está recebendo um Conhecimento de Transporte Eletrônico emitido em {data} com o número ".
46
                "{numero}, de {emitente}, no valor de R$ {valor}. ".
47
                "Junto com a mercadoria, você receberá também um DACTE (Documento ".
48
                "Auxiliar do Conhecimento de Transporte Eletrônico), que acompanha o trânsito das mercadorias.</p>".
49
                "<p><i>Podemos conceituar o CTe como um documento ".
50
                "de existência apenas digital, emitido e armazenado eletronicamente, ".
51
                "com o intuito de documentar, para fins fiscais, uma operação de ".
52
                "circulação de mercadorias, ocorrida entre as partes. Sua validade ".
53
                "jurídica garantida pela assinatura digital do remetente (garantia ".
54
                "de autoria e de integridade) e recepção, pelo Fisco, do documento ".
55
                "eletrônico, antes da ocorrência do Fato Gerador.</i></p>".
56
                "<p><i>Os registros fiscais e contábeis devem ser feitos, a partir ".
57
                "do próprio arquivo da NF-e, anexo neste e-mail, ou utilizando o ".
58
                "DACTE, que representa graficamente o Conhecimento de Transporte Eletrônico. ".
59
                "A validade e autenticidade deste documento eletrônico pode ser ".
60
                "verificada no site nacional do projeto (www.cte.fazenda.gov.br), ".
61
                "através da chave de acesso contida no DACTE.</i></p>".
62
                "<p><i>Para poder utilizar os dados descritos do DACTE na ".
63
                "escrituração do CT-e, tanto o contribuinte destinatário, ".
64
                "como o contribuinte emitente, terão de verificar a validade do CT-e. ".
65
                "Esta validade está vinculada à efetiva existência do CT-e nos ".
66
                "arquivos da SEFAZ, e comprovada através da emissão da Autorização de Uso.</i></p>".
67
                "<p><b>O DACTE não é um Conhecimento de transporte, nem o substitui, ".
68
                "servindo apenas como instrumento auxiliar para consulta do CT-e no ".
69
                "Ambiente Nacional.</b></p>".
70
                "<p>Para mais detalhes, consulte: <a href=\"http://www.cte.fazenda.gov.br/\">".
71
                "www.cte.fazenda.gov.br</a></p>".
72
                "<br>".
73
                "<p>Atenciosamente,</p>".
74
                "<p>{emitente}</p>",
75
                
76
        'CCe'=> "<p><b>Prezados,</b></p>".
77
                "<p>Você está recebendo uma Carta de Correção referente ao nosso documento " .
78
                "{chave}.</p><p>Essa carta de correção datada de {data} procura corrigir:</p> ".
79
                "<p><b>{correcao}</b></p>".
80
                "<p><i>{conduso}</i></p>" .
81
                "<p>Atenciosamente,</p>".
82
                "<p>{emitente}</p>"
83
    ];
84
    
85
    /**
86
     * template user-defined
87
     * @var string
88
     */
89
    public $template;
90
    /**
91
     * Type from xml document NFe, CTe or CCe
92
     * @var string
93
     */
94
    protected $type;
95
    /**
96
     * Addresses to send mail
97
     * This array should be repeated fields removed
98
     * @var array
99
     */
100
    protected $addresses;
101
    /**
102
     * Fields from xml
103
     * @var stdClass
104
     */
105
    public $fields;
106
    /**
107
     * PHPMailer class
108
     * @var \PHPMailer
109
     */
110
    protected $mail;
111
    /**
112
     * Xml content
113
     * @var string
114
     */
115
    public $xml;
116
    /**
117
     * PDF content
118
     * @var string
119
     */
120
    public $pdf;
121
    /**
122
     * config
123
     * @var stdClass
124
     */
125
    protected $config;
126
127
    /**
128
     * Render a template with valid data
129
     * @param string $template
130
     * @param string $destinatario
131
     * @param string $data
132
     * @param string $numero
133
     * @param string $valor
134
     * @param string $chave
135
     * @param string $correcao
136
     * @param string $conduso
137
     * @return string
138
     */
139
    protected function renderTemplate(
140
        $template,
141
        $destinatario = '',
142
        $data = '',
143
        $numero = '',
144
        $valor = 0,
145
        $chave = '',
146
        $correcao = '',
147
        $conduso = ''
148
    ) {
149
        $dt = new \DateTime(str_replace('T', ' ', $data));
150
        $search = array(
151
            '{destinatario}',
152
            '{data}',
153
            '{numero}',
154
            '{valor}',
155
            '{emitente}',
156
            '{chave}',
157
            '{correcao}',
158
            '{conduso}'
159
        );
160
        $replace = array(
161
          $destinatario,
162
          $dt->format('d/m/Y'),
163
          $numero,
164
          number_format($valor, 2, ',', '.'),
165
          $this->config->fantasy,
166
          $chave,
167
          $correcao,
168
          $conduso
169
        );
170
        $template = str_replace($search, $replace, $template);
171
        return $template;
172
    }
173
    
174
    /**
175
     * Remove all invalid addresses
176
     */
177 1
    protected function removeInvalidAdresses()
178
    {
179
        //This resulted array should be repeated fields removed
180
        //and all not valid strings, and also trim and strtolower strings
181 1
        $this->addresses = array_unique($this->addresses);
182 1
        $this->addresses = array_map(array($this, 'clearAddressString'), $this->addresses);
183 1
        $this->addresses = array_filter($this->addresses, array($this, 'checkEmailAddress'));
184 1
    }
185
    
186
    /**
187
     * Build Message
188
     * @return string
189
     */
190
    protected function render()
191
    {
192
        //depending on the document a different template should be loaded
193
        //and having data patterns appropriately substituted
194
        $template = $this->templates[$this->type];
195
        if (! empty($this->template)) {
196
            $template = $this->template;
197
        }
198
        return $this->renderTemplate(
199
            $template,
200
            $this->fields->destinatario,
201
            $this->fields->data,
202
            $this->fields->numero,
203
            $this->fields->valor,
204
            $this->fields->chave,
205
            $this->fields->correcao,
206
            $this->fields->conduso
207
        );
208
    }
209
    
210
    /**
211
     * Attach all documents to message
212
     */
213
    protected function attach()
214
    {
215
        $this->mail->addStringAttachment(
216
            $this->xml,
217
            $this->type . '.xml'
218
        );
219
        if (! empty($this->pdf)) {
220
            $this->mail->addStringAttachment(
221
                $this->xml,
222
                $this->type . '.pdf'
223
            );
224
        }
225
    }
226
    
227
    /**
228
     * Returns only valid email string
229
     * @param string $email
230
     * @return boolean
231
     */
232 1
    protected function checkEmailAddress($email)
233
    {
234 1
        return filter_var($email, FILTER_VALIDATE_EMAIL);
235
    }
236
    
237
    /**
238
     * Format email address string removing garbage and
239
     * set to lower characters
240
     * @param string $email
241
     * @return string
242
     */
243 1
    protected function clearAddressString($email)
244
    {
245 1
        return preg_replace('/[ ,;:]+/', '', strtolower($email));
246
    }
247
}
248