Subversion Repositories Integrator Subversion

Rev

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