Subversion Repositories Integrator Subversion

Rev

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