Subversion Repositories Integrator Subversion

Rev

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