Subversion Repositories Integrator Subversion

Rev

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

Rev Author Line No. Line
259 espaco 1
package br.com.ec.domain.model;
2
 
3
import java.io.ByteArrayInputStream;
4
import java.io.ByteArrayOutputStream;
5
import java.io.IOException;
6
import java.io.Serializable;
7
import java.io.StringReader;
8
import java.util.Date;
9
import java.util.List;
10
 
11
import javax.persistence.Column;
12
import javax.persistence.Entity;
13
import javax.persistence.GeneratedValue;
14
import javax.persistence.GenerationType;
15
import javax.persistence.Id;
16
import javax.persistence.JoinColumn;
17
import javax.persistence.ManyToOne;
474 blopes 18
import javax.persistence.OneToOne;
259 espaco 19
import javax.persistence.SequenceGenerator;
20
import javax.persistence.Table;
21
import javax.persistence.Transient;
22
import javax.validation.constraints.NotNull;
23
import javax.validation.constraints.Size;
24
import javax.xml.bind.JAXBContext;
25
import javax.xml.bind.JAXBException;
26
import javax.xml.bind.Unmarshaller;
27
import javax.xml.parsers.DocumentBuilder;
28
import javax.xml.parsers.DocumentBuilderFactory;
29
import javax.xml.transform.Transformer;
30
import javax.xml.transform.TransformerFactory;
31
import javax.xml.transform.dom.DOMSource;
32
import javax.xml.transform.stream.StreamResult;
33
import javax.xml.transform.stream.StreamSource;
34
 
35
import org.apache.commons.io.IOUtils;
36
import org.hibernate.annotations.ForeignKey;
37
import org.primefaces.model.DefaultStreamedContent;
38
import org.w3c.dom.Document;
39
 
40
import br.com.ec.core.exception.NegocioException;
41
import br.com.ec.core.generic.identidade.Identidade;
42
import br.com.ec.core.interfaces.Alterar;
43
import br.com.ec.core.interfaces.Cadastrar;
44
import br.com.ec.core.util.StringUtil;
45
import br.com.ec.core.util.VerificadorUtil;
449 blopes 46
import br.com.ec.domain.dto.NotaFiscalProdutoDTO;
259 espaco 47
import br.com.ec.domain.model.nfe.TipoModeloNotaFiscal;
48
import br.com.ec.domain.model.nfe.TipoNotaFiscal;
492 blopes 49
import br.com.ec.domain.model.nfe.TipoNotaFiscalConsumidorFinal;
489 blopes 50
import br.com.ec.domain.model.nfe.TipoNotaFiscalDestino;
492 blopes 51
import br.com.ec.domain.model.nfe.TipoNotaFiscalFinalidadeOperacao;
489 blopes 52
import br.com.ec.domain.model.nfe.TipoNotaFiscalIntermediario;
259 espaco 53
import br.com.ec.domain.model.nfe.TipoNotaFiscalNaturezaOperacao;
54
import br.com.ec.domain.model.nfe.TipoNotaFiscalPresencaComprador;
55
import br.com.ec.domain.model.nfe.TipoNotaFiscalStatusRetorno;
492 blopes 56
import br.com.ec.domain.shared.ConstantesSEC;
259 espaco 57
import br.com.ec.relatorio.util.RelatorioUtils;
58
import br.com.ec.web.util.DataUtil;
492 blopes 59
import nfce.TNfeProc;
60
import nfe.util.ConstantesUtil;
259 espaco 61
 
62
@Entity
63
@Table(name="sec_nota_fiscal", schema="sc_sec")
64
public class NotaFiscal implements Serializable, Identidade {
65
 
66
        private static final long serialVersionUID = 1L;
67
 
68
        private Long sequencial;
492 blopes 69
        private String codigoNotaFiscal;
259 espaco 70
        private String tipoModeloNotaFiscal;
71
        private String serie;
72
        private Long numeroNotaFiscal;
73
        private Date dataHoraEmissao;
74
 
75
        private String chave;
76
 
492 blopes 77
        private String tipoNotaFiscalConsumidorFinal;
78
        private String tipoNotaFiscalNaturezaOperacao;
79
        private String tipoNotaFiscalPresencaComprador;
80
        private String tipoNotaFiscalIntermediario;
81
        private String tipoNotaFiscalDestino;
82
        private String tipoNotaFiscalFinalidade;
259 espaco 83
 
84
        private Venda venda;
85
        private Pessoa pessoaEmitente;
86
        private Pessoa pessoaDestinatario;
87
        private String observacaoVenda;
474 blopes 88
 
259 espaco 89
        private String descricaoComplementares;
90
 
91
        private String textoXml;
92
        private String tipoNotaFiscal;
93
 
94
        private String protocoloAutorizacao;
95
        private String caminhoQrcode;
96
 
97
        private String statusRetorno;
98
        private String motivoRetorno;
99
        private Date dataHoraEvento;
100
        private String textoXmlEvento;
101
 
492 blopes 102
        private String statusRetornoUltimo;
103
        private String motivoRetornoUltimo;
104
        private Date dataHoraEventoUltimo;
105
        private String textoXmlEventoUltimo;
106
 
474 blopes 107
        private Double valorFrete;
108
        private Double valorSeguro;
109
        private Double valorDesconto;
110
        private Double outrasDespesas;
111
 
112
        private Transporte transporte;
113
 
259 espaco 114
        private byte[] arquivoXml;
115
 
116
//      private List<Parcela> listaParcelas;
117
//      private List<CompraProduto> listaCompraProduto;
118
        private List<Lancamento> listaLancamento;
119
        private List<VendaFormaPagamento> listaFormaPagamento;
120
 
449 blopes 121
        private List<NotaFiscalProdutoDTO> listaProdutosVinculadosDTO;
122
 
259 espaco 123
        private Boolean notaFiscalPendente;
492 blopes 124
        private String versaoEmissor;
125
        private String tipoImpressao;
259 espaco 126
 
414 espaco 127
        public NotaFiscal() {}
128
 
129
        public NotaFiscal(Long sequencial) {
130
                this.sequencial = sequencial;
131
        }
132
 
259 espaco 133
        @Override
134
        @Transient
135
        public Object getId() {
136
                return this.getSequencial();
137
        }
138
        @Override
139
        public void setId(Object id) {
140
                this.sequencial = (Long) id;
141
        }
142
 
143
        @Id
144
        @SequenceGenerator(name = "sq_notafiscal")
145
        @GeneratedValue(strategy = GenerationType.IDENTITY)
146
        @Column(name="seq_nota_fiscal", nullable=false)
147
        public Long getSequencial() {
148
                return sequencial;
149
        }
150
        public void setSequencial(Long sequencial) {
151
                this.sequencial = sequencial;
152
        }
153
 
492 blopes 154
        @Column(name="cod_notafiscal")
155
        public String getCodigoNotaFiscal() {
156
                return codigoNotaFiscal;
157
        }
158
        public void setCodigoNotaFiscal(String codigoNotaFiscal) {
159
                this.codigoNotaFiscal = codigoNotaFiscal;
160
        }
161
 
259 espaco 162
        @Column(name="dsc_serie")
163
        public String getSerie() {
164
                return serie;
165
        }
166
        public void setSerie(String serie) {
167
                this.serie = serie;
168
        }
169
 
170
        @Column(name="num_nota_fiscal", nullable=false)
171
        public Long getNumeroNotaFiscal() {
172
                return numeroNotaFiscal;
173
        }
174
        public void setNumeroNotaFiscal(Long numeroNotaFiscal) {
175
                this.numeroNotaFiscal = numeroNotaFiscal;
176
        }
177
 
178
        @Column(name="cod_nota_fiscal")
179
        public String getChave() {
180
                return chave;
181
        }
182
        public void setChave(String chave) {
183
                this.chave = chave;
184
        }
185
 
492 blopes 186
        @Column(name="tip_consumidorfinal")
187
        public String getTipoNotaFiscalConsumidorFinal() {
188
                return tipoNotaFiscalConsumidorFinal;
189
        }
190
        public void setTipoNotaFiscalConsumidorFinal(String tipoNotaFiscalConsumidorFinal) {
191
                this.tipoNotaFiscalConsumidorFinal = tipoNotaFiscalConsumidorFinal;
192
        }
259 espaco 193
        @Transient
492 blopes 194
        public String descricaoTipoNotaFiscalConsumidorFinal() {
195
                return VerificadorUtil.naoEstaNuloOuVazio(getTipoNotaFiscalConsumidorFinal())? TipoNotaFiscalConsumidorFinal.parse(getTipoNotaFiscalConsumidorFinal()).getDescricao() : null;
196
        }
197
 
198
        @Column(name="tip_naturezaoperacao")
259 espaco 199
        public String getTipoNotaFiscalNaturezaOperacao() {
200
                return tipoNotaFiscalNaturezaOperacao;
201
        }
202
        public void setTipoNotaFiscalNaturezaOperacao(String tipoNotaFiscalNaturezaOperacao) {
203
                this.tipoNotaFiscalNaturezaOperacao = tipoNotaFiscalNaturezaOperacao;
204
        }
205
        @Transient
206
        public String descricaoTipoNotaFiscalNaturezaOperacao() {
207
                return VerificadorUtil.naoEstaNuloOuVazio(getTipoNotaFiscalNaturezaOperacao())? TipoNotaFiscalNaturezaOperacao.parse(getTipoNotaFiscalNaturezaOperacao()).getDescricao() : null;
208
        }
209
 
492 blopes 210
        @Column(name="tip_presencacomprador")
259 espaco 211
        public String getTipoNotaFiscalPresencaComprador() {
212
                return tipoNotaFiscalPresencaComprador;
213
        }
214
        public void setTipoNotaFiscalPresencaComprador(String tipoNotaFiscalPresencaComprador) {
215
                this.tipoNotaFiscalPresencaComprador = tipoNotaFiscalPresencaComprador;
216
        }
217
        @Transient
218
        public String descricaoTipoNotaFiscalPresencaComprador() {
219
                return VerificadorUtil.naoEstaNuloOuVazio(getTipoNotaFiscalPresencaComprador())? TipoNotaFiscalPresencaComprador.parse(getTipoNotaFiscalPresencaComprador()).getDescricao() : null;
220
        }
221
 
492 blopes 222
        @Column(name="tip_intermediario")
489 blopes 223
        public String getTipoNotaFiscalIntermediario() {
224
                return tipoNotaFiscalIntermediario;
225
        }
226
        public void setTipoNotaFiscalIntermediario(String tipoNotaFiscalIntermediario) {
227
                this.tipoNotaFiscalIntermediario = tipoNotaFiscalIntermediario;
228
        }
229
        @Transient
230
        public String descricaoTipoNotaFiscalIntermediario() {
231
                return VerificadorUtil.naoEstaNuloOuVazio(getTipoNotaFiscalIntermediario())? TipoNotaFiscalIntermediario.parse(getTipoNotaFiscalIntermediario()).getDescricao() : null;
232
        }
233
 
492 blopes 234
        @Column(name="tip_destino")
489 blopes 235
        public String getTipoNotaFiscalDestino() {
236
                return tipoNotaFiscalDestino;
237
        }
238
        public void setTipoNotaFiscalDestino(String tipoNotaFiscalDestino) {
239
                this.tipoNotaFiscalDestino = tipoNotaFiscalDestino;
240
        }
241
        @Transient
242
        public String descricaoTipoNotaFiscalDestino() {
243
                return VerificadorUtil.naoEstaNuloOuVazio(getTipoNotaFiscalDestino())? TipoNotaFiscalDestino.parse(getTipoNotaFiscalDestino()).getDescricao() : null;
244
        }
245
 
492 blopes 246
        @Column(name="tip_finalidade")
247
        public String getTipoNotaFiscalFinalidade() {
248
                return tipoNotaFiscalFinalidade;
249
        }
250
        public void setTipoNotaFiscalFinalidade(String tipoNotaFiscalFinalidade) {
251
                this.tipoNotaFiscalFinalidade = tipoNotaFiscalFinalidade;
252
        }
253
        @Transient
254
        public String descricaoTipoNotaFiscalFinalidade() {
255
                return VerificadorUtil.naoEstaNuloOuVazio(getTipoNotaFiscalFinalidade())? TipoNotaFiscalFinalidadeOperacao.parse(getTipoNotaFiscalFinalidade()).getDescricao() : null;
256
        }
257
 
259 espaco 258
        @ManyToOne
259
        @ForeignKey(name = "fk_notafiscal_venda")
260
        @JoinColumn(name="seq_venda", referencedColumnName="seq_venda", insertable=true, updatable=false)
261
        public Venda getVenda() {
262
                return venda;
263
        }
264
        public void setVenda(Venda venda) {
265
                this.venda = venda;
266
        }
267
 
268
        @ManyToOne
269
        @ForeignKey(name = "fk_notafiscal_emitente")
270
        @JoinColumn(name="seq_pessoa_emitente", referencedColumnName="seq_pessoa", insertable=true, updatable=true)
271
        public Pessoa getPessoaEmitente() {
272
                return pessoaEmitente;
273
        }
274
        public void setPessoaEmitente(Pessoa pessoaEmitente) {
275
                this.pessoaEmitente = pessoaEmitente;
276
        }
277
 
278
        @ManyToOne
279
        @ForeignKey(name = "fk_notafiscal_destinatario")
280
        @JoinColumn(name="seq_pessoa_destinatario", referencedColumnName="seq_pessoa", insertable=true, updatable=true)
281
        public Pessoa getPessoaDestinatario() {
282
                return pessoaDestinatario;
283
        }
284
        public void setPessoaDestinatario(Pessoa pessoaDestinatario) {
285
                this.pessoaDestinatario = pessoaDestinatario;
286
        }
287
 
288
        @Column(name="dsc_obs_venda")
289
        @Size(max = 100, message = "Limite de caracteres ultrapassado: Observação da Venda")
290
        public String getObservacaoVenda() {
291
                return observacaoVenda;
292
        }
293
        public void setObservacaoVenda(String observacaoVenda) {
492 blopes 294
                this.observacaoVenda = StringUtil.setarUpperCaseComTrim(observacaoVenda);
259 espaco 295
        }
296
 
297
        @Column(name="dsc_complementares")
298
        @Size(max = 1500, message = "Limite de caracteres ultrapassado: Descrição Complementares")
299
        public String getDescricaoComplementares() {
300
                return descricaoComplementares;
301
        }
302
        public void setDescricaoComplementares(String descricaoComplementares) {
303
                this.descricaoComplementares = descricaoComplementares;
304
        }
305
 
465 blopes 306
        @Column(name="dth_emissao")
259 espaco 307
        public Date getDataHoraEmissao() {
308
                return dataHoraEmissao;
309
        }
310
        public void setDataHoraEmissao(Date dataHoraEmissao) {
311
                this.dataHoraEmissao = dataHoraEmissao;
312
        }
313
 
314
        @Column(name="txt_xml")
315
        public String getTextoXml() {
316
                return textoXml;
317
        }
318
        public void setTextoXml(String textoXml) {
319
                this.textoXml = textoXml;
320
        }
321
 
322
        @Column(name="tip_nota_fiscal", nullable=false)
323
        @NotNull(message="Obrigatório informar o tipo da nota fiscal", groups={Cadastrar.class, Alterar.class})
324
        public String getTipoNotaFiscal() {
325
                return tipoNotaFiscal;
326
        }
327
        public void setTipoNotaFiscal(String tipoNotaFiscal) {
328
                this.tipoNotaFiscal = tipoNotaFiscal;
329
        }
330
        @Transient
331
        public String getDescricaoDoTipoNotaFiscal() {
332
                return VerificadorUtil.naoEstaNuloOuVazio(getTipoNotaFiscal())? TipoNotaFiscal.parse(getTipoNotaFiscal()).getDescricao() : null;
333
        }
334
 
335
        @Column(name="tip_modelo_notafiscal", nullable=false)
336
        @NotNull(message="Obrigatório informar o tipo do modelo da nota fiscal", groups={Cadastrar.class, Alterar.class})
337
        public String getTipoModeloNotaFiscal() {
338
                return tipoModeloNotaFiscal;
339
        }
340
        public void setTipoModeloNotaFiscal(String tipoModeloNotaFiscal) {
341
                this.tipoModeloNotaFiscal = tipoModeloNotaFiscal;
342
        }
343
        @Transient
344
        public String getDescricaoDoTipoModeloNotaFiscal() {
345
                return VerificadorUtil.naoEstaNuloOuVazio(getTipoModeloNotaFiscal())? TipoModeloNotaFiscal.parse(getTipoModeloNotaFiscal()).getDescricao() : null;
346
        }
347
 
348
        @Column(name="dsc_protocolo_autorizacao")
349
        @Size(max = 100, message = "Limite de caracteres ultrapassado: Protocolo da Autorização")
350
        public String getProtocoloAutorizacao() {
351
                return protocoloAutorizacao;
352
        }
353
        public void setProtocoloAutorizacao(String protocoloAutorizacao) {
354
                this.protocoloAutorizacao = protocoloAutorizacao;
355
        }
356
 
357
        @Column(name="dsc_caminho_qrcode")
358
        @Size(max = 500, message = "Limite de caracteres ultrapassado: Caminho QRCode")
359
        public String getCaminhoQrcode() {
360
                return caminhoQrcode;
361
        }
362
        public void setCaminhoQrcode(String caminhoQrcode) {
363
                this.caminhoQrcode = caminhoQrcode;
364
        }
365
 
366
        @Column(name="dsc_status_retorno")
367
        @Size(max = 100, message = "Limite de caracteres ultrapassado: Status do Retorno")
368
        public String getStatusRetorno() {
369
                return statusRetorno;
370
        }
371
        public void setStatusRetorno(String statusRetorno) {
372
                this.statusRetorno = statusRetorno;
373
        }
374
        @Transient
375
        public String resultadoStatusRetorno() {
376
                TipoNotaFiscalStatusRetorno tipoStatus = TipoNotaFiscalStatusRetorno.parse(new Long(getStatusRetorno()));
377
                return VerificadorUtil.naoEstaNulo(tipoStatus)? tipoStatus.getDescricao() : getStatusRetorno();
378
        }
379
 
380
        @Column(name="dsc_motivo_retorno")
381
        @Size(max = 100, message = "Limite de caracteres ultrapassado: Motivo do Retorno")
382
        public String getMotivoRetorno() {
383
                return motivoRetorno;
384
        }
385
        public void setMotivoRetorno(String motivoRetorno) {
386
                this.motivoRetorno = motivoRetorno;
387
        }
388
 
389
        @Column(name="dth_evento")
390
        public Date getDataHoraEvento() {
391
                return dataHoraEvento;
392
        }
393
        public void setDataHoraEvento(Date dataHoraEvento) {
394
                this.dataHoraEvento = dataHoraEvento;
395
        }
396
 
397
        @Column(name="txt_xml_evento", nullable=false)
398
        public String getTextoXmlEvento() {
399
                return textoXmlEvento;
400
        }
401
        public void setTextoXmlEvento(String textoXmlEvento) {
402
                this.textoXmlEvento = textoXmlEvento;
403
        }
404
 
492 blopes 405
        @Column(name="dsc_status_retorno_ultimo")
406
        @Size(max = 100, message = "Limite de caracteres ultrapassado: Status do Retorno (Último)")
407
        public String getStatusRetornoUltimo() {
408
                return statusRetornoUltimo;
409
        }
410
        public void setStatusRetornoUltimo(String statusRetornoUltimo) {
411
                this.statusRetornoUltimo = statusRetornoUltimo;
412
        }
413
 
414
        @Transient
415
        public String resultadoStatusRetornoUltimo() {
416
                TipoNotaFiscalStatusRetorno tipoStatus = TipoNotaFiscalStatusRetorno.parse(new Long(getStatusRetornoUltimo()));
417
                return VerificadorUtil.naoEstaNulo(tipoStatus)? tipoStatus.getDescricao() : getStatusRetornoUltimo();
418
        }
419
 
420
        @Column(name="dsc_motivo_retorno_ultimo")
421
        @Size(max = 100, message = "Limite de caracteres ultrapassado: Motivo do Retorno (Último)")
422
        public String getMotivoRetornoUltimo() {
423
                return motivoRetornoUltimo;
424
        }
425
        public void setMotivoRetornoUltimo(String motivoRetornoUltimo) {
426
                this.motivoRetornoUltimo = motivoRetornoUltimo;
427
        }
428
 
429
        @Column(name="dth_evento_ultimo")
430
        public Date getDataHoraEventoUltimo() {
431
                return dataHoraEventoUltimo;
432
        }
433
        public void setDataHoraEventoUltimo(Date dataHoraEventoUltimo) {
434
                this.dataHoraEventoUltimo = dataHoraEventoUltimo;
435
        }
436
 
437
        @Column(name="txt_xml_evento_ultimo")
438
        public String getTextoXmlEventoUltimo() {
439
                return textoXmlEventoUltimo;
440
        }
441
        public void setTextoXmlEventoUltimo(String textoXmlEventoUltimo) {
442
                this.textoXmlEventoUltimo = textoXmlEventoUltimo;
443
        }
444
 
480 blopes 445
        @Column(name="val_frete")
446
        public Double getValorFrete() {
447
                return valorFrete;
448
        }
449
        public void setValorFrete(Double valorFrete) {
450
                this.valorFrete = valorFrete;
451
        }
452
 
453
        @Column(name="val_seguro")
454
        public Double getValorSeguro() {
455
                return valorSeguro;
456
        }
457
        public void setValorSeguro(Double valorSeguro) {
458
                this.valorSeguro = valorSeguro;
459
        }
460
 
461
        @Column(name="val_desconto")
462
        public Double getValorDesconto() {
463
                return valorDesconto;
464
        }
465
        public void setValorDesconto(Double valorDesconto) {
466
                this.valorDesconto = valorDesconto;
467
        }
468
 
469
        @Column(name="val_outrasdespesas")
470
        public Double getOutrasDespesas() {
471
                return outrasDespesas;
472
        }
473
        public void setOutrasDespesas(Double outrasDespesas) {
474
                this.outrasDespesas = outrasDespesas;
475
        }
476
 
474 blopes 477
        @OneToOne
478
        @JoinColumn(name="seq_transporte", referencedColumnName="seq_transporte", insertable=true, updatable=true,  nullable=true)
479
        public Transporte getTransporte() {
480
                return transporte;
481
        }
482
        public void setTransporte(Transporte transporte) {
483
                this.transporte = transporte;
484
        }
485
 
486
        /********************************************/
487
 
259 espaco 488
        @Transient
489
        public Boolean temPessoaJuridica() {
490
                if (VerificadorUtil.estaNulo(getVenda())) return false;
491
                if (VerificadorUtil.estaNulo(getVenda().getLoja())) return false;
492
                return VerificadorUtil.naoEstaNulo(getVenda().getLoja().getPessoaJuridica());
493
        }
494
 
495
        @Transient
496
        public String getRazaoSocialDaLoja() {
497
                return temPessoaJuridica()? getVenda().getLoja().getPessoaJuridica().getRazaoSocial() : "";
498
        }
499
 
500
        @Transient
501
        public String getCnpjDaLoja() {
502
                return temPessoaJuridica()? StringUtil.formatarCnpj(getVenda().getLoja().getPessoaJuridica().getCpfCnpj()) : "";
503
        }
504
 
505
        @Transient
506
        public byte[] getArquivoXml() {
507
                return arquivoXml;
508
        }
509
        public void setArquivoXml(byte[] arquivoXml) {
510
                this.arquivoXml = arquivoXml;
511
        }
512
 
513
        /*
514
        @Transient
515
        public List<Parcela> getListaParcelas() {
516
                return listaParcelas;
517
        }
518
        public void setListaParcelas(List<Parcela> listaParcelas) {
519
                this.listaParcelas = listaParcelas;
520
        }
521
        */
522
 
523
        /*
524
        @Transient
525
        public List<CompraProduto> getListaCompraProduto() {
526
                return listaCompraProduto;
527
        }
528
        public void setListaCompraProduto(List<CompraProduto> listaCompraProduto) {
529
                this.listaCompraProduto = listaCompraProduto;
530
        }
531
        */
532
 
533
        @Transient
534
        public List<Lancamento> getListaLancamento() {
535
                return listaLancamento;
536
        }
537
        public void setListaLancamento(List<Lancamento> listaLancamento) {
538
                this.listaLancamento = listaLancamento;
539
        }
540
 
541
        @Transient
542
        public List<VendaFormaPagamento> getListaFormaPagamento() {
543
                return listaFormaPagamento;
544
        }
545
        public void setListaFormaPagamento(List<VendaFormaPagamento> listaFormaPagamento) {
546
                this.listaFormaPagamento = listaFormaPagamento;
547
        }
548
 
449 blopes 549
 
550
//      @OneToMany(mappedBy="notaFiscal", cascade=CascadeType.ALL, orphanRemoval=true)
259 espaco 551
        @Transient
449 blopes 552
        public List<NotaFiscalProdutoDTO> getListaProdutosVinculadosDTO() {
553
                return listaProdutosVinculadosDTO;
554
        }
555
        public void setListaProdutosVinculadosDTO(List<NotaFiscalProdutoDTO> listaProdutosVinculadosDTO) {
556
                this.listaProdutosVinculadosDTO = listaProdutosVinculadosDTO;
557
        }
558
 
559
        @Transient
259 espaco 560
        public Boolean getNotaFiscalPendente() {
561
                return notaFiscalPendente;
562
        }
563
        public void setNotaFiscalPendente(Boolean notaFiscalPendente) {
564
                this.notaFiscalPendente = notaFiscalPendente;
565
        }
566
 
492 blopes 567
        @Transient
568
        public String getVersaoEmissor() {
569
                return versaoEmissor;
570
        }
571
        public void setVersaoEmissor(String versaoEmissor) {
572
                this.versaoEmissor = versaoEmissor;
573
        }
574
 
575
        @Transient
576
        public String getTipoImpressao() {
577
                return tipoImpressao;
578
        }
579
        public void setTipoImpressao(String tipoImpressao) {
580
                this.tipoImpressao = tipoImpressao;
581
        }
582
 
259 espaco 583
        @Override
584
        public int hashCode() {
585
                final int prime = 31;
586
                int result = 1;
587
                result = prime * result + ((chave == null) ? 0 : chave.hashCode());
588
                return result;
589
        }
590
 
591
        @Override
592
        public boolean equals(Object obj) {
593
                if (this == obj)
594
                        return true;
595
                if (obj == null)
596
                        return false;
597
                if (getClass() != obj.getClass())
598
                        return false;
599
                NotaFiscal other = (NotaFiscal) obj;
600
                if (chave == null) {
601
                        if (other.chave != null)
602
                                return false;
603
                } else if (!chave.equals(other.chave))
604
                        return false;
605
                return true;
606
        }
607
 
608
        @Transient
609
        public Double getTotalLancamentos() {
610
                Double total = 0.0;
611
                if (!VerificadorUtil.isListaNulaOuVazia(getListaLancamento())) {
612
                        for (Lancamento lancamento : getListaLancamento()) {
613
                                total = total + lancamento.getValorVenda();
614
                        }
615
                }
616
                return total;  
617
        }
618
 
619
        @Transient
620
        public Double getTotalPago() {
621
                Double total = 0.0;
622
                if (!VerificadorUtil.isListaNulaOuVazia(getListaFormaPagamento())) {
623
                        for (VendaFormaPagamento vendaFormaPagamento : getListaFormaPagamento()) {
624
                                total = total + vendaFormaPagamento.getValorPagamento();
625
                        }
626
                }
627
                return total;  
628
        }
629
 
630
        @Transient
631
        public Double getValorNotaFiscal() {
632
                if (VerificadorUtil.naoEstaNuloOuVazio(getTextoXml())) {
633
                        if (getTextoXml().indexOf("<vNF>") > 0) {
634
                                String valorLocalizado = getTextoXml().substring(getTextoXml().indexOf("<vNF>"), getTextoXml().indexOf("</vNF>"))
635
                                                                                        .replace("<vNF>", "").replace("</vNF>", "");
636
                                return new Double(valorLocalizado);
637
                        }
638
                }
639
                return 0.0;
640
        }
641
 
642
        @Transient
480 blopes 643
        public Double getTotalValorProdutosVinculados() {
259 espaco 644
                Double total = new Double(0.0);
480 blopes 645
                if (VerificadorUtil.naoEstaNuloOuVazio(getListaProdutosVinculadosDTO())) {
646
                        for (NotaFiscalProdutoDTO notaFiscalProdutoDTO : getListaProdutosVinculadosDTO()) {
485 blopes 647
                                total = total + (notaFiscalProdutoDTO.getValor() * notaFiscalProdutoDTO.getQuantidade());
259 espaco 648
                        }
649
                }
650
                return total;
651
        }
652
 
480 blopes 653
 
259 espaco 654
        @Transient
655
        public Boolean ehNotaFiscalDeRemessa() {
492 blopes 656
                return VerificadorUtil.naoEstaNulo(getTipoNotaFiscal()) ? getTipoNotaFiscal().equals(TipoNotaFiscal.NFE_REMESSA_SAIDA.getValor()) : false;
259 espaco 657
        }
658
 
659
        @Transient
541 blopes 660
        public Boolean ehNotaFiscalDeDevolucao() {
661
                return VerificadorUtil.naoEstaNulo(getTipoNotaFiscal()) ? getTipoNotaFiscal().equals(TipoNotaFiscal.NFE_DEVOLUCAO.getValor()) : false;
662
        }
663
 
664
        @Transient
665
        public Boolean ehNotaFiscalDeImportacao() {
666
                return VerificadorUtil.naoEstaNulo(getTipoNotaFiscal()) ? getTipoNotaFiscal().equals(TipoNotaFiscal.NFE_IMPORTACAO.getValor()) : false;
667
        }
668
 
669
        @Transient
259 espaco 670
        public byte[] criarArquivoXml() {
671
                ByteArrayInputStream in = null;
672
                ByteArrayOutputStream bos = null;
673
                try {
674
                        in = new ByteArrayInputStream(getTextoXml().getBytes());
675
                        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
676
                        DocumentBuilder builder = dbf.newDocumentBuilder();
677
                        Document xml = builder.parse(in);
678
 
679
                        bos = new ByteArrayOutputStream();
680
                        TransformerFactory transformerFactory = TransformerFactory.newInstance();
681
                        Transformer transformer = transformerFactory.newTransformer();
682
                        DOMSource source = new DOMSource(xml);
683
                        StreamResult result = new StreamResult(bos);
684
                        transformer.transform(source, result);
685
 
686
                        DefaultStreamedContent arquivo = (DefaultStreamedContent) RelatorioUtils.gerarArquivo(bos.toByteArray(), "ArquivoXML", "xml");
687
                        return IOUtils.toByteArray(arquivo.getStream());
688
                } catch (Exception e) {
689
                        e.printStackTrace();
690
                } finally {
691
                        try {
692
                                in.close();
693
                                bos.close();
694
                        } catch (IOException e) {
695
                                e.printStackTrace();
696
                        }
697
                }
698
                return null;
699
        }
700
 
701
        @Transient
702
        public byte[] getRetornarArquivoXml() {
703
                setArquivoXml(criarArquivoXml());
704
                return getArquivoXml();
705
        }
706
 
707
        @Transient
708
        public void gerarChaveAcessoNfe(String codigoUFEmitente, String dataAAMM, String cnpjCpfEmitente, String modeloNf,
709
                        String serieNF, String tpEmissao, String numeroNF) {
710
                try {
711
            StringBuilder chave = new StringBuilder();
712
            chave.append(StringUtil.lpadTo(codigoUFEmitente, 2, '0'));
713
            chave.append(StringUtil.lpadTo(dataAAMM, 4, '0'));
714
            chave.append(StringUtil.lpadTo(cnpjCpfEmitente.replaceAll("\\D",""), 14, '0'));
715
            chave.append(StringUtil.lpadTo(modeloNf, 2, '0'));
716
            chave.append(StringUtil.lpadTo(serieNF, 3, '0'));
717
            chave.append(StringUtil.lpadTo(String.valueOf(numeroNF), 9, '0'));
718
            chave.append(StringUtil.lpadTo(tpEmissao, 1, '0'));
719
            chave.append(StringUtil.lpadTo(numeroNF, 8, '0'));
720
            chave.append(StringUtil.modulo11(chave.toString()));
721
            chave.insert(0, "NFe");
722
            setChave(chave.toString());
723
        } catch (Exception e) {
724
                System.out.println(e.toString());
725
                throw new NegocioException(e.getMessage());
726
        }
727
        }
728
 
729
        @Transient
730
        public Long getSequencialDaVenda() {
731
                return VerificadorUtil.naoEstaNulo(getVenda())? getVenda().getSequencial() : null;
732
        }
733
 
734
        @Transient
735
        public void preencherNumeroPelaChave() {
736
                if (VerificadorUtil.naoEstaNuloOuVazio(getChave())) {
737
                        setNumeroNotaFiscal(new Long(getChave().substring(25, 34)));
738
                }
739
        }
740
 
741
        @Transient
742
        public void preencherMotivoPadrao() {
743
                setMotivoRetorno("Autorizado o uso da NF-e");
744
        }
745
 
746
        @Transient
747
        public void preencherSeriePadrao() {
748
                setSerie("1");
749
        }
750
 
751
        @Transient
752
        public void preencherStatusPadrao() {
753
                setStatusRetorno("100");
754
        }
755
 
756
        @Transient
757
        public void preencherQRCodePadrao() {
758
                setCaminhoQrcode("http://nfce.sefaz.al.gov.br/QRCode/consultarNFCe.jsp?p=" + getChave() + "|2|1|1|437A52AD9DE9BDD04D6BFF55ED997C5199ECC64D");
759
        }
760
 
761
        @Transient
762
        public String retornarCodigoNumerico() {
763
                if (VerificadorUtil.naoEstaNuloOuVazio(getChave())) {
764
                        if (getChave().length() > 42) {
765
                                return getChave().substring(35, 43);
766
                        }
767
                }
768
                return "";
769
        }
770
 
771
        @Transient
772
        public void preencherComXML() {
773
                if (VerificadorUtil.naoEstaNuloOuVazio(this.getTextoXml())) {
774
                        TNfeProc tNfeProc = unmarshal(this.getTextoXml());
775
                        preencher(tNfeProc);
776
                }
777
 
778
        }
779
 
780
        @Transient
781
        public void preencher(TNfeProc nfeProc) {
782
                if (VerificadorUtil.naoEstaNulo(nfeProc)) {
783
                        if (VerificadorUtil.naoEstaNulo(nfeProc.getNFe())) {
784
                                if (VerificadorUtil.naoEstaNulo(nfeProc.getNFe().getInfNFe())) {
785
                                        if (VerificadorUtil.naoEstaNulo(nfeProc.getNFe().getInfNFe().getIde())) {
786
                                                //this.setCodigoNotaFiscal(new Long(nfeProc.getNFe().getInfNFe().getIde().getCNF()));
787
                                                this.setNumeroNotaFiscal(new Long(nfeProc.getNFe().getInfNFe().getIde().getNNF()));
788
                                                this.setSerie(nfeProc.getNFe().getInfNFe().getIde().getSerie());
789
                                                this.setDataHoraEmissao(DataUtil.retornarDataApartirString("yyyy-MM-dd'T'HH:mm:ss", nfeProc.getNFe().getInfNFe().getIde().getDhEmi()));
790
                                        }
791
                                        if (VerificadorUtil.naoEstaNulo(nfeProc.getNFe().getInfNFe().getInfAdic())) {
792
                                                this.setDescricaoComplementares(nfeProc.getNFe().getInfNFe().getInfAdic().getInfCpl());
793
                                        }
794
                                }
795
                                if (VerificadorUtil.naoEstaNulo(nfeProc.getNFe().getInfNFeSupl())) {}
796
                                if (VerificadorUtil.naoEstaNulo(nfeProc.getNFe().getSignature())) {}
797
                        }
798
                        if (VerificadorUtil.naoEstaNulo(nfeProc.getProtNFe())) {
799
                                if (VerificadorUtil.naoEstaNulo(nfeProc.getProtNFe().getInfProt())) {
800
                                        this.setChave(nfeProc.getProtNFe().getInfProt().getChNFe());
801
                                        this.setDataHoraEvento(DataUtil.retornarDataApartirString("yyyy-MM-dd'T'HH:mm:ss", nfeProc.getProtNFe().getInfProt().getDhRecbto()));
802
                                        this.setProtocoloAutorizacao(nfeProc.getProtNFe().getInfProt().getNProt());
803
                                        this.setStatusRetorno(nfeProc.getProtNFe().getInfProt().getCStat());
804
                                        this.setMotivoRetorno(nfeProc.getProtNFe().getInfProt().getXMotivo());
805
                                }
806
                        }
807
                }
808
        }
809
 
810
        @Transient
811
        public TNfeProc unmarshal(String stringXml) {
812
        JAXBContext context = null;
813
        try {
814
            context = JAXBContext.newInstance(nfce.TNfeProc.class);
815
            Unmarshaller unmarshaller = context.createUnmarshaller();
816
            return (TNfeProc) unmarshaller.unmarshal(new StreamSource(new StringReader(stringXml)));
817
        } catch (JAXBException e) {
818
            e.printStackTrace();
819
        }
820
        return null;
821
    }
822
 
492 blopes 823
        @Transient
541 blopes 824
        public void prepararNotaFiscalConsumidor() {
825
                this.tipoModeloNotaFiscal = TipoModeloNotaFiscal.MODELO_NFCE_65.getValor();
826
                this.versaoEmissor = ConstantesUtil.VERSAO.NFE;
827
                this.tipoImpressao = ConstantesSEC.NotaFiscal.TipoImpressao.IMPRESSAO_DANFE_NFCE_4;
828
        }
829
 
830
        @Transient
831
        public void prepararNotaFiscalEletronica() {
832
                this.tipoModeloNotaFiscal = TipoModeloNotaFiscal.MODELO_NFE_55.getValor();
833
                this.versaoEmissor = ConstantesUtil.VERSAO.NFE;
834
                this.tipoImpressao = ConstantesSEC.NotaFiscal.TipoImpressao.IMPRESSAO_DANFE_RETRATO_1;
835
                this.tipoNotaFiscalFinalidade = TipoNotaFiscalFinalidadeOperacao.NORMAL_1.getValor();
836
        }
837
 
838
        @Transient
492 blopes 839
        public void prepararNotaFiscalConsumidorVenda() {
541 blopes 840
                prepararNotaFiscalConsumidor();
492 blopes 841
                this.tipoNotaFiscal = TipoNotaFiscal.NFCE_SAIDA.getValor();
842
                this.tipoNotaFiscalNaturezaOperacao = TipoNotaFiscalNaturezaOperacao.VENDA_NFCE_1.getValor();
843
                this.serie = TipoNotaFiscal.NFCE_SAIDA.getSerie();
844
                this.tipoNotaFiscalDestino = TipoNotaFiscalDestino.DESTINO_DENTRO_DO_ESTADO_1.getValor();
845
                this.tipoNotaFiscalConsumidorFinal = TipoNotaFiscalConsumidorFinal.CONSUMIDOR_FINAL_1.getValor();
846
                this.tipoNotaFiscalPresencaComprador = TipoNotaFiscalPresencaComprador.OPERACAO_PRESENCIAL_1.getValor();
847
                this.tipoNotaFiscalIntermediario = TipoNotaFiscalIntermediario.OPERACAO_SEM_INTERMEDIADOR_0.getValor();
848
                this.tipoNotaFiscalFinalidade = TipoNotaFiscalFinalidadeOperacao.NORMAL_1.getValor();
849
                //tpNF 0 - Entrada e 1 - Saída
850
        }
851
 
852
        @Transient
853
        public void prepararNotaFiscalEletronicaVenda() {
541 blopes 854
                prepararNotaFiscalEletronica();
492 blopes 855
                this.tipoNotaFiscal = TipoNotaFiscal.NFE_SAIDA.getValor();
856
                this.tipoNotaFiscalNaturezaOperacao = TipoNotaFiscalNaturezaOperacao.VENDA_NFE_2.getValor();
857
                this.serie = TipoNotaFiscal.NFE_SAIDA.getSerie();
858
        }
859
 
860
        @Transient
861
        public void prepararNotaFiscalEletronicaRemessa() {
541 blopes 862
                prepararNotaFiscalEletronica();
492 blopes 863
                this.tipoNotaFiscal = TipoNotaFiscal.NFE_REMESSA_SAIDA.getValor();
541 blopes 864
                this.tipoNotaFiscalNaturezaOperacao = TipoNotaFiscalNaturezaOperacao.REMESSA_4.getValor();
492 blopes 865
                this.serie = TipoNotaFiscal.NFE_REMESSA_SAIDA.getSerie();
866
                this.tipoNotaFiscalIntermediario = TipoNotaFiscalIntermediario.OPERACAO_SEM_INTERMEDIADOR_0.getValor();
541 blopes 867
        }
868
 
869
        @Transient
870
        public void prepararNotaFiscalEletronicaDevolucao() {
871
                prepararNotaFiscalEletronica();
872
                this.tipoNotaFiscal = TipoNotaFiscal.NFE_DEVOLUCAO.getValor();
546 blopes 873
                this.tipoNotaFiscalNaturezaOperacao = TipoNotaFiscalNaturezaOperacao.DEVOLUCAO_9.getValor();
541 blopes 874
                this.serie = TipoNotaFiscal.NFE_DEVOLUCAO.getSerie();
875
                this.tipoNotaFiscalIntermediario = TipoNotaFiscalIntermediario.OPERACAO_SEM_INTERMEDIADOR_0.getValor();
537 blopes 876
                this.tipoNotaFiscalFinalidade = TipoNotaFiscalFinalidadeOperacao.DEVOLUCAO_4.getValor();
492 blopes 877
        }
541 blopes 878
 
879
        @Transient
880
        public void prepararNotaFiscalEletronicaImportacao() {
881
                prepararNotaFiscalEletronica();
882
                this.tipoNotaFiscal = TipoNotaFiscal.NFE_IMPORTACAO.getValor();
883
                this.tipoNotaFiscalNaturezaOperacao = TipoNotaFiscalNaturezaOperacao.IMPORTACAO_3102_10.getValor();
884
                this.serie = TipoNotaFiscal.NFE_IMPORTACAO.getSerie();
885
                this.tipoNotaFiscalIntermediario = TipoNotaFiscalIntermediario.OPERACAO_SEM_INTERMEDIADOR_0.getValor();
886
        }
492 blopes 887
 
259 espaco 888
}