Subversion Repositories Integrator Subversion

Rev

Rev 472 | Rev 480 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
259 espaco 1
package br.com.ec.domain.model;
2
 
3
import java.io.ByteArrayInputStream;
4
import java.io.ByteArrayOutputStream;
5
import java.io.IOException;
6
import java.io.Serializable;
7
import java.io.StringReader;
8
import java.util.Date;
9
import java.util.List;
10
 
11
import javax.persistence.Column;
12
import javax.persistence.Entity;
13
import javax.persistence.GeneratedValue;
14
import javax.persistence.GenerationType;
15
import javax.persistence.Id;
16
import javax.persistence.JoinColumn;
17
import javax.persistence.ManyToOne;
474 blopes 18
import javax.persistence.OneToOne;
259 espaco 19
import javax.persistence.SequenceGenerator;
20
import javax.persistence.Table;
21
import javax.persistence.Transient;
22
import javax.validation.constraints.NotNull;
23
import javax.validation.constraints.Size;
24
import javax.xml.bind.JAXBContext;
25
import javax.xml.bind.JAXBException;
26
import javax.xml.bind.Unmarshaller;
27
import javax.xml.parsers.DocumentBuilder;
28
import javax.xml.parsers.DocumentBuilderFactory;
29
import javax.xml.transform.Transformer;
30
import javax.xml.transform.TransformerFactory;
31
import javax.xml.transform.dom.DOMSource;
32
import javax.xml.transform.stream.StreamResult;
33
import javax.xml.transform.stream.StreamSource;
34
 
35
import org.apache.commons.io.IOUtils;
36
import org.hibernate.annotations.ForeignKey;
37
import org.primefaces.model.DefaultStreamedContent;
38
import org.w3c.dom.Document;
39
 
40
import br.com.ec.core.exception.NegocioException;
41
import br.com.ec.core.generic.identidade.Identidade;
42
import br.com.ec.core.interfaces.Alterar;
43
import br.com.ec.core.interfaces.Cadastrar;
44
import br.com.ec.core.util.StringUtil;
45
import br.com.ec.core.util.VerificadorUtil;
449 blopes 46
import br.com.ec.domain.dto.NotaFiscalProdutoDTO;
259 espaco 47
import br.com.ec.domain.model.nfe.TipoModeloNotaFiscal;
48
import br.com.ec.domain.model.nfe.TipoNotaFiscal;
49
import br.com.ec.domain.model.nfe.TipoNotaFiscalNaturezaOperacao;
50
import br.com.ec.domain.model.nfe.TipoNotaFiscalPresencaComprador;
51
import br.com.ec.domain.model.nfe.TipoNotaFiscalStatusRetorno;
52
import br.com.ec.relatorio.util.RelatorioUtils;
53
import br.com.ec.web.util.DataUtil;
54
import nfce.TNfeProc;
55
 
56
@Entity
57
@Table(name="sec_nota_fiscal", schema="sc_sec")
58
public class NotaFiscal implements Serializable, Identidade {
59
 
60
        private static final long serialVersionUID = 1L;
61
 
62
        private Long sequencial;
63
        private String tipoModeloNotaFiscal;
64
        private String serie;
65
        private Long numeroNotaFiscal;
66
        private Date dataHoraEmissao;
67
 
68
        private String chave;
69
 
70
        private String tipoNotaFiscalNaturezaOperacao; // NOVO
71
        private String tipoNotaFiscalPresencaComprador; //NOVO
72
        private Boolean indicadorOperacaoConsumidorFinal;
73
 
74
        private Venda venda;
75
        private Pessoa pessoaEmitente;
76
        private Pessoa pessoaDestinatario;
77
        private String observacaoVenda;
474 blopes 78
 
259 espaco 79
        private String descricaoComplementares;
80
 
81
        private String textoXml;
82
        private String tipoNotaFiscal;
83
 
84
        private String protocoloAutorizacao;
85
        private String caminhoQrcode;
86
 
87
        private String statusRetorno;
88
        private String motivoRetorno;
89
        private Date dataHoraEvento;
90
        private String textoXmlEvento;
91
 
474 blopes 92
        private Double valorFrete;
93
        private Double valorSeguro;
94
        private Double valorDesconto;
95
        private Double outrasDespesas;
96
 
97
        private Transporte transporte;
98
 
259 espaco 99
        private byte[] arquivoXml;
100
 
101
//      private List<Parcela> listaParcelas;
102
//      private List<CompraProduto> listaCompraProduto;
103
        private List<Lancamento> listaLancamento;
104
        private List<VendaFormaPagamento> listaFormaPagamento;
105
 
449 blopes 106
        private List<NotaFiscalProdutoDTO> listaProdutosVinculadosDTO;
107
 
259 espaco 108
        private Boolean notaFiscalPendente;
109
 
414 espaco 110
        public NotaFiscal() {}
111
 
112
        public NotaFiscal(Long sequencial) {
113
                this.sequencial = sequencial;
114
        }
115
 
259 espaco 116
        @Override
117
        @Transient
118
        public Object getId() {
119
                return this.getSequencial();
120
        }
121
        @Override
122
        public void setId(Object id) {
123
                this.sequencial = (Long) id;
124
        }
125
 
126
        @Id
127
        @SequenceGenerator(name = "sq_notafiscal")
128
        @GeneratedValue(strategy = GenerationType.IDENTITY)
129
        @Column(name="seq_nota_fiscal", nullable=false)
130
        public Long getSequencial() {
131
                return sequencial;
132
        }
133
        public void setSequencial(Long sequencial) {
134
                this.sequencial = sequencial;
135
        }
136
 
137
        @Column(name="dsc_serie")
138
        public String getSerie() {
139
                return serie;
140
        }
141
        public void setSerie(String serie) {
142
                this.serie = serie;
143
        }
144
 
145
        @Column(name="num_nota_fiscal", nullable=false)
146
        public Long getNumeroNotaFiscal() {
147
                return numeroNotaFiscal;
148
        }
149
        public void setNumeroNotaFiscal(Long numeroNotaFiscal) {
150
                this.numeroNotaFiscal = numeroNotaFiscal;
151
        }
152
 
153
        @Column(name="cod_nota_fiscal")
154
        public String getChave() {
155
                return chave;
156
        }
157
        public void setChave(String chave) {
158
                this.chave = chave;
159
        }
160
 
161
        @Transient
162
        public String getTipoNotaFiscalNaturezaOperacao() {
163
                return tipoNotaFiscalNaturezaOperacao;
164
        }
165
        public void setTipoNotaFiscalNaturezaOperacao(String tipoNotaFiscalNaturezaOperacao) {
166
                this.tipoNotaFiscalNaturezaOperacao = tipoNotaFiscalNaturezaOperacao;
167
        }
168
        @Transient
169
        public String descricaoTipoNotaFiscalNaturezaOperacao() {
170
                return VerificadorUtil.naoEstaNuloOuVazio(getTipoNotaFiscalNaturezaOperacao())? TipoNotaFiscalNaturezaOperacao.parse(getTipoNotaFiscalNaturezaOperacao()).getDescricao() : null;
171
        }
172
 
173
        @Transient
174
        public String getTipoNotaFiscalPresencaComprador() {
175
                return tipoNotaFiscalPresencaComprador;
176
        }
177
        public void setTipoNotaFiscalPresencaComprador(String tipoNotaFiscalPresencaComprador) {
178
                this.tipoNotaFiscalPresencaComprador = tipoNotaFiscalPresencaComprador;
179
        }
180
        @Transient
181
        public String descricaoTipoNotaFiscalPresencaComprador() {
182
                return VerificadorUtil.naoEstaNuloOuVazio(getTipoNotaFiscalPresencaComprador())? TipoNotaFiscalPresencaComprador.parse(getTipoNotaFiscalPresencaComprador()).getDescricao() : null;
183
        }
184
 
185
        @ManyToOne
186
        @ForeignKey(name = "fk_notafiscal_venda")
187
        @JoinColumn(name="seq_venda", referencedColumnName="seq_venda", insertable=true, updatable=false)
188
        public Venda getVenda() {
189
                return venda;
190
        }
191
        public void setVenda(Venda venda) {
192
                this.venda = venda;
193
        }
194
 
195
        @ManyToOne
196
        @ForeignKey(name = "fk_notafiscal_emitente")
197
        @JoinColumn(name="seq_pessoa_emitente", referencedColumnName="seq_pessoa", insertable=true, updatable=true)
198
        public Pessoa getPessoaEmitente() {
199
                return pessoaEmitente;
200
        }
201
        public void setPessoaEmitente(Pessoa pessoaEmitente) {
202
                this.pessoaEmitente = pessoaEmitente;
203
        }
204
 
205
        @ManyToOne
206
        @ForeignKey(name = "fk_notafiscal_destinatario")
207
        @JoinColumn(name="seq_pessoa_destinatario", referencedColumnName="seq_pessoa", insertable=true, updatable=true)
208
        public Pessoa getPessoaDestinatario() {
209
                return pessoaDestinatario;
210
        }
211
        public void setPessoaDestinatario(Pessoa pessoaDestinatario) {
212
                this.pessoaDestinatario = pessoaDestinatario;
213
        }
214
 
215
        @Column(name="dsc_obs_venda")
216
        @Size(max = 100, message = "Limite de caracteres ultrapassado: Observação da Venda")
217
        public String getObservacaoVenda() {
218
                return observacaoVenda;
219
        }
220
        public void setObservacaoVenda(String observacaoVenda) {
221
                this.observacaoVenda = observacaoVenda;
222
        }
223
 
224
        @Column(name="dsc_complementares")
225
        @Size(max = 1500, message = "Limite de caracteres ultrapassado: Descrição Complementares")
226
        public String getDescricaoComplementares() {
227
                return descricaoComplementares;
228
        }
229
        public void setDescricaoComplementares(String descricaoComplementares) {
230
                this.descricaoComplementares = descricaoComplementares;
231
        }
232
 
465 blopes 233
        @Column(name="dth_emissao")
259 espaco 234
        public Date getDataHoraEmissao() {
235
                return dataHoraEmissao;
236
        }
237
        public void setDataHoraEmissao(Date dataHoraEmissao) {
238
                this.dataHoraEmissao = dataHoraEmissao;
239
        }
240
 
241
        @Column(name="txt_xml")
242
        public String getTextoXml() {
243
                return textoXml;
244
        }
245
        public void setTextoXml(String textoXml) {
246
                this.textoXml = textoXml;
247
        }
248
 
249
        @Column(name="tip_nota_fiscal", nullable=false)
250
        @NotNull(message="Obrigatório informar o tipo da nota fiscal", groups={Cadastrar.class, Alterar.class})
251
        public String getTipoNotaFiscal() {
252
                return tipoNotaFiscal;
253
        }
254
        public void setTipoNotaFiscal(String tipoNotaFiscal) {
255
                this.tipoNotaFiscal = tipoNotaFiscal;
256
        }
257
        @Transient
258
        public String getDescricaoDoTipoNotaFiscal() {
259
                return VerificadorUtil.naoEstaNuloOuVazio(getTipoNotaFiscal())? TipoNotaFiscal.parse(getTipoNotaFiscal()).getDescricao() : null;
260
        }
261
 
262
        @Column(name="tip_modelo_notafiscal", nullable=false)
263
        @NotNull(message="Obrigatório informar o tipo do modelo da nota fiscal", groups={Cadastrar.class, Alterar.class})
264
        public String getTipoModeloNotaFiscal() {
265
                return tipoModeloNotaFiscal;
266
        }
267
        public void setTipoModeloNotaFiscal(String tipoModeloNotaFiscal) {
268
                this.tipoModeloNotaFiscal = tipoModeloNotaFiscal;
269
        }
270
        @Transient
271
        public String getDescricaoDoTipoModeloNotaFiscal() {
272
                return VerificadorUtil.naoEstaNuloOuVazio(getTipoModeloNotaFiscal())? TipoModeloNotaFiscal.parse(getTipoModeloNotaFiscal()).getDescricao() : null;
273
        }
274
 
275
        @Column(name="dsc_protocolo_autorizacao")
276
        @Size(max = 100, message = "Limite de caracteres ultrapassado: Protocolo da Autorização")
277
        public String getProtocoloAutorizacao() {
278
                return protocoloAutorizacao;
279
        }
280
        public void setProtocoloAutorizacao(String protocoloAutorizacao) {
281
                this.protocoloAutorizacao = protocoloAutorizacao;
282
        }
283
 
284
        @Column(name="dsc_caminho_qrcode")
285
        @Size(max = 500, message = "Limite de caracteres ultrapassado: Caminho QRCode")
286
        public String getCaminhoQrcode() {
287
                return caminhoQrcode;
288
        }
289
        public void setCaminhoQrcode(String caminhoQrcode) {
290
                this.caminhoQrcode = caminhoQrcode;
291
        }
292
 
293
        @Column(name="dsc_status_retorno")
294
        @Size(max = 100, message = "Limite de caracteres ultrapassado: Status do Retorno")
295
        public String getStatusRetorno() {
296
                return statusRetorno;
297
        }
298
        public void setStatusRetorno(String statusRetorno) {
299
                this.statusRetorno = statusRetorno;
300
        }
301
        @Transient
302
        public String resultadoStatusRetorno() {
303
                TipoNotaFiscalStatusRetorno tipoStatus = TipoNotaFiscalStatusRetorno.parse(new Long(getStatusRetorno()));
304
                return VerificadorUtil.naoEstaNulo(tipoStatus)? tipoStatus.getDescricao() : getStatusRetorno();
305
        }
306
 
307
        @Column(name="dsc_motivo_retorno")
308
        @Size(max = 100, message = "Limite de caracteres ultrapassado: Motivo do Retorno")
309
        public String getMotivoRetorno() {
310
                return motivoRetorno;
311
        }
312
        public void setMotivoRetorno(String motivoRetorno) {
313
                this.motivoRetorno = motivoRetorno;
314
        }
315
 
316
        @Column(name="dth_evento")
317
        public Date getDataHoraEvento() {
318
                return dataHoraEvento;
319
        }
320
        public void setDataHoraEvento(Date dataHoraEvento) {
321
                this.dataHoraEvento = dataHoraEvento;
322
        }
323
 
324
        @Column(name="txt_xml_evento", nullable=false)
325
        public String getTextoXmlEvento() {
326
                return textoXmlEvento;
327
        }
328
        public void setTextoXmlEvento(String textoXmlEvento) {
329
                this.textoXmlEvento = textoXmlEvento;
330
        }
331
 
474 blopes 332
        @OneToOne
333
        @JoinColumn(name="seq_transporte", referencedColumnName="seq_transporte", insertable=true, updatable=true,  nullable=true)
334
        public Transporte getTransporte() {
335
                return transporte;
336
        }
337
        public void setTransporte(Transporte transporte) {
338
                this.transporte = transporte;
339
        }
340
 
341
        /********************************************/
342
 
259 espaco 343
        @Transient
344
        public Boolean temPessoaJuridica() {
345
                if (VerificadorUtil.estaNulo(getVenda())) return false;
346
                if (VerificadorUtil.estaNulo(getVenda().getLoja())) return false;
347
                return VerificadorUtil.naoEstaNulo(getVenda().getLoja().getPessoaJuridica());
348
        }
349
 
350
        @Transient
351
        public String getRazaoSocialDaLoja() {
352
                return temPessoaJuridica()? getVenda().getLoja().getPessoaJuridica().getRazaoSocial() : "";
353
        }
354
 
355
        @Transient
356
        public String getCnpjDaLoja() {
357
                return temPessoaJuridica()? StringUtil.formatarCnpj(getVenda().getLoja().getPessoaJuridica().getCpfCnpj()) : "";
358
        }
359
 
360
        @Transient
361
        public byte[] getArquivoXml() {
362
                return arquivoXml;
363
        }
364
        public void setArquivoXml(byte[] arquivoXml) {
365
                this.arquivoXml = arquivoXml;
366
        }
367
 
368
        /*
369
        @Transient
370
        public List<Parcela> getListaParcelas() {
371
                return listaParcelas;
372
        }
373
        public void setListaParcelas(List<Parcela> listaParcelas) {
374
                this.listaParcelas = listaParcelas;
375
        }
376
        */
377
 
378
        /*
379
        @Transient
380
        public List<CompraProduto> getListaCompraProduto() {
381
                return listaCompraProduto;
382
        }
383
        public void setListaCompraProduto(List<CompraProduto> listaCompraProduto) {
384
                this.listaCompraProduto = listaCompraProduto;
385
        }
386
        */
387
 
388
        @Transient
389
        public List<Lancamento> getListaLancamento() {
390
                return listaLancamento;
391
        }
392
        public void setListaLancamento(List<Lancamento> listaLancamento) {
393
                this.listaLancamento = listaLancamento;
394
        }
395
 
396
        @Transient
397
        public List<VendaFormaPagamento> getListaFormaPagamento() {
398
                return listaFormaPagamento;
399
        }
400
        public void setListaFormaPagamento(List<VendaFormaPagamento> listaFormaPagamento) {
401
                this.listaFormaPagamento = listaFormaPagamento;
402
        }
403
 
449 blopes 404
 
405
//      @OneToMany(mappedBy="notaFiscal", cascade=CascadeType.ALL, orphanRemoval=true)
259 espaco 406
        @Transient
449 blopes 407
        public List<NotaFiscalProdutoDTO> getListaProdutosVinculadosDTO() {
408
                return listaProdutosVinculadosDTO;
409
        }
410
        public void setListaProdutosVinculadosDTO(List<NotaFiscalProdutoDTO> listaProdutosVinculadosDTO) {
411
                this.listaProdutosVinculadosDTO = listaProdutosVinculadosDTO;
412
        }
413
 
414
        @Transient
259 espaco 415
        public Boolean getNotaFiscalPendente() {
416
                return notaFiscalPendente;
417
        }
418
        public void setNotaFiscalPendente(Boolean notaFiscalPendente) {
419
                this.notaFiscalPendente = notaFiscalPendente;
420
        }
421
 
422
        @Override
423
        public int hashCode() {
424
                final int prime = 31;
425
                int result = 1;
426
                result = prime * result + ((chave == null) ? 0 : chave.hashCode());
427
                return result;
428
        }
429
 
430
        @Override
431
        public boolean equals(Object obj) {
432
                if (this == obj)
433
                        return true;
434
                if (obj == null)
435
                        return false;
436
                if (getClass() != obj.getClass())
437
                        return false;
438
                NotaFiscal other = (NotaFiscal) obj;
439
                if (chave == null) {
440
                        if (other.chave != null)
441
                                return false;
442
                } else if (!chave.equals(other.chave))
443
                        return false;
444
                return true;
445
        }
446
 
447
        @Transient
448
        public Double getTotalLancamentos() {
449
                Double total = 0.0;
450
                if (!VerificadorUtil.isListaNulaOuVazia(getListaLancamento())) {
451
                        for (Lancamento lancamento : getListaLancamento()) {
452
                                total = total + lancamento.getValorVenda();
453
                        }
454
                }
455
                return total;  
456
        }
457
 
458
        @Transient
459
        public Double getTotalPago() {
460
                Double total = 0.0;
461
                if (!VerificadorUtil.isListaNulaOuVazia(getListaFormaPagamento())) {
462
                        for (VendaFormaPagamento vendaFormaPagamento : getListaFormaPagamento()) {
463
                                total = total + vendaFormaPagamento.getValorPagamento();
464
                        }
465
                }
466
                return total;  
467
        }
468
 
469
        @Transient
470
        public Double getValorNotaFiscal() {
471
                if (VerificadorUtil.naoEstaNuloOuVazio(getTextoXml())) {
472
                        if (getTextoXml().indexOf("<vNF>") > 0) {
473
                                String valorLocalizado = getTextoXml().substring(getTextoXml().indexOf("<vNF>"), getTextoXml().indexOf("</vNF>"))
474
                                                                                        .replace("<vNF>", "").replace("</vNF>", "");
475
                                return new Double(valorLocalizado);
476
                        }
477
                }
478
                return 0.0;
479
        }
480
 
481
        /*
482
        @Transient
483
        public Double getTotalValorProdutosRemessa() {
484
                Double total = new Double(0.0);
485
                if (VerificadorUtil.naoEstaNuloOuVazio(getListaNFRemessaProdutos())) {
486
                        for (NotaFiscalProduto notaFiscalProduto : getListaNFRemessaProdutos()) {
487
                                total = total + notaFiscalProduto.getProduto().getValorCompra() * notaFiscalProduto.getQuantidade();
488
                        }
489
                }
490
                return total;
491
        }
492
        */
493
 
494
        @Transient
495
        public Boolean ehNotaFiscalDeRemessa() {
496
                return VerificadorUtil.naoEstaNulo(getTipoNotaFiscal()) ? getTipoNotaFiscal().equals(TipoNotaFiscal.NFE_REMESSA.getValor()) : false;
497
        }
498
 
499
        @Transient
500
        public byte[] criarArquivoXml() {
501
                ByteArrayInputStream in = null;
502
                ByteArrayOutputStream bos = null;
503
                try {
504
                        in = new ByteArrayInputStream(getTextoXml().getBytes());
505
                        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
506
                        DocumentBuilder builder = dbf.newDocumentBuilder();
507
                        Document xml = builder.parse(in);
508
 
509
                        bos = new ByteArrayOutputStream();
510
                        TransformerFactory transformerFactory = TransformerFactory.newInstance();
511
                        Transformer transformer = transformerFactory.newTransformer();
512
                        DOMSource source = new DOMSource(xml);
513
                        StreamResult result = new StreamResult(bos);
514
                        transformer.transform(source, result);
515
 
516
                        DefaultStreamedContent arquivo = (DefaultStreamedContent) RelatorioUtils.gerarArquivo(bos.toByteArray(), "ArquivoXML", "xml");
517
                        return IOUtils.toByteArray(arquivo.getStream());
518
                } catch (Exception e) {
519
                        e.printStackTrace();
520
                } finally {
521
                        try {
522
                                in.close();
523
                                bos.close();
524
                        } catch (IOException e) {
525
                                e.printStackTrace();
526
                        }
527
                }
528
                return null;
529
        }
530
 
531
        @Transient
532
        public byte[] getRetornarArquivoXml() {
533
                setArquivoXml(criarArquivoXml());
534
                return getArquivoXml();
535
        }
536
 
537
        @Transient
538
        public void gerarChaveAcessoNfe(String codigoUFEmitente, String dataAAMM, String cnpjCpfEmitente, String modeloNf,
539
                        String serieNF, String tpEmissao, String numeroNF) {
540
                try {
541
            StringBuilder chave = new StringBuilder();
542
            chave.append(StringUtil.lpadTo(codigoUFEmitente, 2, '0'));
543
            chave.append(StringUtil.lpadTo(dataAAMM, 4, '0'));
544
            chave.append(StringUtil.lpadTo(cnpjCpfEmitente.replaceAll("\\D",""), 14, '0'));
545
            chave.append(StringUtil.lpadTo(modeloNf, 2, '0'));
546
            chave.append(StringUtil.lpadTo(serieNF, 3, '0'));
547
            chave.append(StringUtil.lpadTo(String.valueOf(numeroNF), 9, '0'));
548
            chave.append(StringUtil.lpadTo(tpEmissao, 1, '0'));
549
            chave.append(StringUtil.lpadTo(numeroNF, 8, '0'));
550
            chave.append(StringUtil.modulo11(chave.toString()));
551
            chave.insert(0, "NFe");
552
            setChave(chave.toString());
553
        } catch (Exception e) {
554
                System.out.println(e.toString());
555
                throw new NegocioException(e.getMessage());
556
        }
557
        }
558
 
559
        @Transient
560
        public Long getSequencialDaVenda() {
561
                return VerificadorUtil.naoEstaNulo(getVenda())? getVenda().getSequencial() : null;
562
        }
563
 
564
        @Transient
565
        public void preencherNumeroPelaChave() {
566
                if (VerificadorUtil.naoEstaNuloOuVazio(getChave())) {
567
                        setNumeroNotaFiscal(new Long(getChave().substring(25, 34)));
568
                }
569
        }
570
 
571
        @Transient
572
        public void preencherMotivoPadrao() {
573
                setMotivoRetorno("Autorizado o uso da NF-e");
574
        }
575
 
576
        @Transient
577
        public void preencherSeriePadrao() {
578
                setSerie("1");
579
        }
580
 
581
        @Transient
582
        public void preencherStatusPadrao() {
583
                setStatusRetorno("100");
584
        }
585
 
586
        @Transient
587
        public void preencherQRCodePadrao() {
588
                setCaminhoQrcode("http://nfce.sefaz.al.gov.br/QRCode/consultarNFCe.jsp?p=" + getChave() + "|2|1|1|437A52AD9DE9BDD04D6BFF55ED997C5199ECC64D");
589
        }
590
 
591
        @Transient
592
        public String retornarCodigoNumerico() {
593
                if (VerificadorUtil.naoEstaNuloOuVazio(getChave())) {
594
                        if (getChave().length() > 42) {
595
                                return getChave().substring(35, 43);
596
                        }
597
                }
598
                return "";
599
        }
600
 
601
        @Transient
602
        public void preencherComXML() {
603
                if (VerificadorUtil.naoEstaNuloOuVazio(this.getTextoXml())) {
604
                        TNfeProc tNfeProc = unmarshal(this.getTextoXml());
605
                        preencher(tNfeProc);
606
                }
607
 
608
        }
609
 
610
        @Transient
611
        public void preencher(TNfeProc nfeProc) {
612
                if (VerificadorUtil.naoEstaNulo(nfeProc)) {
613
                        if (VerificadorUtil.naoEstaNulo(nfeProc.getNFe())) {
614
                                if (VerificadorUtil.naoEstaNulo(nfeProc.getNFe().getInfNFe())) {
615
                                        if (VerificadorUtil.naoEstaNulo(nfeProc.getNFe().getInfNFe().getIde())) {
616
                                                //this.setCodigoNotaFiscal(new Long(nfeProc.getNFe().getInfNFe().getIde().getCNF()));
617
                                                this.setNumeroNotaFiscal(new Long(nfeProc.getNFe().getInfNFe().getIde().getNNF()));
618
                                                this.setSerie(nfeProc.getNFe().getInfNFe().getIde().getSerie());
619
                                                this.setDataHoraEmissao(DataUtil.retornarDataApartirString("yyyy-MM-dd'T'HH:mm:ss", nfeProc.getNFe().getInfNFe().getIde().getDhEmi()));
620
                                        }
621
                                        if (VerificadorUtil.naoEstaNulo(nfeProc.getNFe().getInfNFe().getInfAdic())) {
622
                                                this.setDescricaoComplementares(nfeProc.getNFe().getInfNFe().getInfAdic().getInfCpl());
623
                                        }
624
                                }
625
                                if (VerificadorUtil.naoEstaNulo(nfeProc.getNFe().getInfNFeSupl())) {}
626
                                if (VerificadorUtil.naoEstaNulo(nfeProc.getNFe().getSignature())) {}
627
                        }
628
                        if (VerificadorUtil.naoEstaNulo(nfeProc.getProtNFe())) {
629
                                if (VerificadorUtil.naoEstaNulo(nfeProc.getProtNFe().getInfProt())) {
630
                                        this.setChave(nfeProc.getProtNFe().getInfProt().getChNFe());
631
                                        this.setDataHoraEvento(DataUtil.retornarDataApartirString("yyyy-MM-dd'T'HH:mm:ss", nfeProc.getProtNFe().getInfProt().getDhRecbto()));
632
                                        this.setProtocoloAutorizacao(nfeProc.getProtNFe().getInfProt().getNProt());
633
                                        this.setStatusRetorno(nfeProc.getProtNFe().getInfProt().getCStat());
634
                                        this.setMotivoRetorno(nfeProc.getProtNFe().getInfProt().getXMotivo());
635
                                }
636
                        }
637
                }
638
        }
639
 
640
        @Transient
641
        public TNfeProc unmarshal(String stringXml) {
642
        JAXBContext context = null;
643
        try {
644
            context = JAXBContext.newInstance(nfce.TNfeProc.class);
645
            Unmarshaller unmarshaller = context.createUnmarshaller();
646
            return (TNfeProc) unmarshaller.unmarshal(new StreamSource(new StringReader(stringXml)));
647
        } catch (JAXBException e) {
648
            e.printStackTrace();
649
        }
650
        return null;
651
    }
652
 
653
}