Subversion Repositories Integrator Subversion

Rev

Rev 545 | Details | Compare with Previous | Last modification | View Log | RSS feed

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