Subversion Repositories Integrator Subversion

Rev

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

Rev Author Line No. Line
1 espaco 1
package br.com.ec.domain.dto.nfce;
2
 
3
import java.io.Serializable;
4
import java.text.ParseException;
5
import java.text.SimpleDateFormat;
6
import java.util.ArrayList;
7
import java.util.Date;
8
import java.util.List;
9
 
10
import br.com.ec.domain.dto.NfceItemDTO;
11
import br.com.ec.domain.dto.NfcePagamentoDTO;
12
import br.com.ec.domain.model.Endereco;
13
import br.com.ec.domain.model.Lancamento;
14
import br.com.ec.domain.model.NotaFiscal;
15
import br.com.ec.domain.model.Pessoa;
16
import br.com.ec.domain.model.Venda;
17
import br.com.ec.domain.model.VendaFormaPagamento;
18
import br.edu.cesmac.core.util.StringUtil;
19
import br.edu.cesmac.core.util.VerificadorUtil;
20
import br.edu.cesmac.web.converters.FormatarUtil;
21
import br.edu.cesmac.web.util.DataUtil;
22
import nfce.java.TNfeProc;
23
 
24
public class NotaFiscalDTO implements Serializable {
25
 
26
        private static final long serialVersionUID = 1L;
27
 
28
        private Long sequencialNotaFiscal;
29
        private Venda venda;
30
 
31
        private Pessoa pessoaJuridica;
32
        private Endereco enderecoEmitente;
33
        private List<NfceItemDTO> itens = new ArrayList<NfceItemDTO>();
34
        private List<NfcePagamentoDTO> pagamentos = new ArrayList<NfcePagamentoDTO>();
35
 
36
        private String numero = "";
37
        private String serie = "";
38
        private String dataHoraEmissao = "";
39
        private String chave = "";
40
        private String protocoloAutorizacao = "";
41
        private String cpfCnpjConsumidor = "";
42
        private String caminhoQrCode = "";
43
 
44
        public NotaFiscalDTO() {}
45
 
46
        public NotaFiscalDTO(Venda venda) {
47
                this.venda = venda;
48
                if (VerificadorUtil.naoEstaNulo(venda.getCliente())) {
49
                        this.setCpfCnpjConsumidor(venda.getCliente().getCpfCnpj());
50
                } else {
51
                        this.setCpfCnpjConsumidor("NÃO INFORMADO");
52
                }
53
        }
54
 
55
        public NotaFiscalDTO(NotaFiscal notaFiscal) {
56
                this.setVenda(notaFiscal.getVenda());
57
                this.setNumero("" + notaFiscal.getNumeroNotaFiscal());
58
                this.setSerie(notaFiscal.getSerie());
59
                this.setChave(notaFiscal.getChave());
60
                this.setCaminhoQrCode(notaFiscal.getCaminhoQrcode());
61
                this.setCpfCnpjConsumidor("NÃO INFORMADO");
62
                if (VerificadorUtil.naoEstaNulo(notaFiscal.getVenda())) {
63
                        if (VerificadorUtil.naoEstaNulo(notaFiscal.getVenda().getCliente())) {
64
                                this.setCpfCnpjConsumidor(notaFiscal.getVenda().getCliente().getCpfCnpj());
65
                        }
66
                }
67
        this.setDataHoraEmissao(DataUtil.retornarDataFormatadaEmFormatoTexto("yyyy-MM-dd HH:mm:ss", notaFiscal.getDataHoraEmissao()));
68
        this.setProtocoloAutorizacao(notaFiscal.getProtocoloAutorizacao());
69
        }
70
 
71
        public NotaFiscalDTO(TNfeProc nfeProc, Venda vendaCompleta) {
72
                Pessoa pessoaJuridica = new Pessoa();
73
                pessoaJuridica.setCpfCnpj(nfeProc.getNFe().getInfNFe().getEmit().getCNPJ());
74
                this.setPessoaJuridica(pessoaJuridica);
75
 
76
                Endereco enderecoEmitente = new Endereco();
77
                enderecoEmitente.setLogradouro(nfeProc.getNFe().getInfNFe().getEmit().getEnderEmit().getXLgr());
78
                enderecoEmitente.setNumero(nfeProc.getNFe().getInfNFe().getEmit().getEnderEmit().getNro());
79
                enderecoEmitente.setComplemento(nfeProc.getNFe().getInfNFe().getEmit().getEnderEmit().getXCpl());
80
                enderecoEmitente.setBairro(nfeProc.getNFe().getInfNFe().getEmit().getEnderEmit().getXBairro());
81
                enderecoEmitente.setMunicipio(nfeProc.getNFe().getInfNFe().getEmit().getEnderEmit().getXMun());
82
                enderecoEmitente.setUnidadeFederativa(nfeProc.getNFe().getInfNFe().getEmit().getEnderEmit().getUF().name());
83
                this.setEnderecoEmitente(enderecoEmitente);
84
 
85
                List<NfceItemDTO> itens = new ArrayList<NfceItemDTO>();
86
                for (nfce.java.TNFe.InfNFe.Det detalhe : nfeProc.getNFe().getInfNFe().getDet()) {
87
                        NfceItemDTO item = new NfceItemDTO();
88
                        item.setSequencial(new Integer(detalhe.getNItem()));
89
 
90
                        StringBuilder descricaoCompleta = new StringBuilder();
91
                        descricaoCompleta.append(detalhe.getProd().getCProd());
92
                        descricaoCompleta.append(" - ");
93
                        descricaoCompleta.append(detalhe.getProd().getXProd());
94
                        descricaoCompleta.append(" 1 UN X R$");
95
                        descricaoCompleta.append(formatarValor(new Double(detalhe.getProd().getVUnCom())));
96
                        descricaoCompleta.append(" R$");
97
                        descricaoCompleta.append(formatarValor(new Double(detalhe.getProd().getVProd())));
98
                        item.setDescricao(descricaoCompleta.toString());
99
                        item.setQuantidade(new Integer(detalhe.getProd().getQCom().substring(0, detalhe.getProd().getQCom().indexOf("."))));
100
                        item.setValorUnitario(new Double(detalhe.getProd().getVUnCom()));
101
                        itens.add(item);
102
                }
103
                this.setItens(itens);
104
 
105
                // TODO: AINDA PREENCHENDO COM PAGAMENTOS DA VENDA
106
                this.preencherPagamentos(vendaCompleta.getVendaFormaPagamentos());
107
 
108
                this.setNumero(nfeProc.getNFe().getInfNFe().getIde().getNNF());
109
                this.setSerie(nfeProc.getNFe().getInfNFe().getIde().getSerie());
110
                this.setChave(nfeProc.getProtNFe().getInfProt().getChNFe());
111
                this.setCaminhoQrCode(nfeProc.getNFe().getInfNFeSupl().getQrCode());
112
                this.setCpfCnpjConsumidor("NÃO INFORMADO");
113
 
114
                if (VerificadorUtil.naoEstaNulo(nfeProc.getNFe().getInfNFe().getDest())) {
115
                        String cpfCnpjFormatado = "";
116
                        if (VerificadorUtil.naoEstaNuloOuVazio(nfeProc.getNFe().getInfNFe().getDest().getCPF())) {
117
                                cpfCnpjFormatado = StringUtil.formatarCpf(nfeProc.getNFe().getInfNFe().getDest().getCPF());
118
                        } else if (VerificadorUtil.naoEstaNuloOuVazio(nfeProc.getNFe().getInfNFe().getDest().getCNPJ())) {
119
                                cpfCnpjFormatado = StringUtil.formatarCnpj(nfeProc.getNFe().getInfNFe().getDest().getCNPJ());
120
                        }
121
                        this.setCpfCnpjConsumidor(cpfCnpjFormatado);
122
                }
123
                Date data;
124
                try {
125
                        data = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'-03:00'").parse(nfeProc.getNFe().getInfNFe().getIde().getDhEmi());
126
                        this.setDataHoraEmissao(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(data));
127
                } catch (ParseException e) {
128
                        e.printStackTrace();
129
                }
130
        this.setProtocoloAutorizacao(nfeProc.getProtNFe().getInfProt().getNProt());
131
        }
132
 
133
        public Long getSequencialNotaFiscal() {
134
                return sequencialNotaFiscal;
135
        }
136
        public void setSequencialNotaFiscal(Long sequencialNotaFiscal) {
137
                this.sequencialNotaFiscal = sequencialNotaFiscal;
138
        }
139
 
140
        public Venda getVenda() {
141
                return venda;
142
        }
143
        public void setVenda(Venda venda) {
144
                this.venda = venda;
145
        }
146
        public Long getSequencialDaVenda() {
147
                return VerificadorUtil.naoEstaNulo(getVenda())? getVenda().getSequencial() : null;
148
        }
149
 
150
        public Pessoa getPessoaJuridica() {
151
                return pessoaJuridica;
152
        }
153
        public void setPessoaJuridica(Pessoa pessoaJuridica) {
154
                this.pessoaJuridica = pessoaJuridica;
155
        }
156
 
157
        public Endereco getEnderecoEmitente() {
158
                return enderecoEmitente;
159
        }
160
        public void setEnderecoEmitente(Endereco enderecoEmitente) {
161
                this.enderecoEmitente = enderecoEmitente;
162
        }
163
 
164
        public List<NfceItemDTO> getItens() {
165
                return itens;
166
        }
167
        public void setItens(List<NfceItemDTO> itens) {
168
                this.itens = itens;
169
        }
170
 
171
        public List<NfcePagamentoDTO> getPagamentos() {
172
                return pagamentos;
173
        }
174
        public void setPagamentos(List<NfcePagamentoDTO> pagamentos) {
175
                this.pagamentos = pagamentos;
176
        }
177
 
178
        public String getNumero() {
179
                return numero;
180
        }
181
        public void setNumero(String numero) {
182
                this.numero = numero;
183
        }
184
 
185
        public String getSerie() {
186
                return serie;
187
        }
188
        public void setSerie(String serie) {
189
                this.serie = serie;
190
        }
191
 
192
        public String getDataHoraEmissao() {
193
                return dataHoraEmissao;
194
        }
195
        public void setDataHoraEmissao(String dataHoraEmissao) {
196
                this.dataHoraEmissao = dataHoraEmissao;
197
        }
198
 
199
        public String getChave() {
200
                return chave;
201
        }
202
        public void setChave(String chave) {
203
                this.chave = formatarChave(chave);
204
        }
205
 
206
        public String getProtocoloAutorizacao() {
207
                return protocoloAutorizacao;
208
        }
209
        public void setProtocoloAutorizacao(String protocoloAutorizacao) {
210
                this.protocoloAutorizacao = protocoloAutorizacao;
211
        }
212
 
213
        public String getCpfCnpjConsumidor() {
214
                if (VerificadorUtil.estaNulo(cpfCnpjConsumidor)) {
215
                        return "NÃO INFORMADO";
216
                }
217
                return cpfCnpjConsumidor;
218
        }
219
        public void setCpfCnpjConsumidor(String cpfCnpjConsumidor) {
220
                this.cpfCnpjConsumidor = cpfCnpjConsumidor;
221
        }
222
 
223
        public String getCpfCnpjConsumidorFormatado() {
224
                if (VerificadorUtil.estaNulo(cpfCnpjConsumidor)) {
225
                        return "NÃO INFORMADO";
226
                }
227
                return FormatarUtil.retornarCpfCnpjFormatado(StringUtil.retornarApenasNumeros(cpfCnpjConsumidor));
228
        }
229
 
230
        public String getCaminhoQrCode() {
231
                return caminhoQrCode;
232
        }
233
        public void setCaminhoQrCode(String caminhoQrCode) {
234
                this.caminhoQrCode = caminhoQrCode;
235
        }
236
 
237
        /*******************************************************************/
238
 
239
        public String getRazaoSocialDaLoja() {
240
                return VerificadorUtil.naoEstaNulo(getPessoaJuridica())? getPessoaJuridica().getRazaoSocial() : "";
241
        }
242
 
243
        public String getCnpjDaLoja() {
244
                return VerificadorUtil.naoEstaNulo(getPessoaJuridica())? StringUtil.formatarCnpj(getPessoaJuridica().getCpfCnpj()) : "";
245
        }
246
 
247
        //TODO: ALTERAÇÃO PROVISÓRIA
248
        public String getEnderecoDoEmitente() {
249
                String numero = getEnderecoEmitente().getNumero();
250
                if (numero.equals("2650")) {
251
                        numero = "2990";
252
                }
253
                return getEnderecoEmitente().getLogradouro() + ", " + numero + ", " + getEnderecoEmitente().getComplemento() + ", " +
254
                                getEnderecoEmitente().getBairro() + ", " + getEnderecoEmitente().getMunicipio() + ", " + getEnderecoEmitente().getUnidadeFederativa();
255
        }
256
 
257
        public void preencherItens(List<Lancamento> lancamentos) {
258
                Integer sequencial = 1;
259
                for (Lancamento lancamento : lancamentos) {
260
                        NfceItemDTO item = new NfceItemDTO();
261
                        item.setSequencial(sequencial);
262
                        item.setSequencialProduto(lancamento.getProduto().getSequencial());
263
                        item.setDescricao(montagemDescricaoDoItem(lancamento));
264
                        item.setQuantidade(1);
265
                        item.setValorUnitario(lancamento.getValorVenda());
266
                        getItens().add(item);
267
                        sequencial++;
268
                }
269
        }
270
 
271
        public String montagemDescricaoDoItem(Lancamento lancamento) {
272
                StringBuilder descricaoCompleta = new StringBuilder();
273
                descricaoCompleta.append(lancamento.getProduto().getCodigo());
274
                descricaoCompleta.append(" - ");
275
                descricaoCompleta.append(lancamento.getDescricaoNotaFiscal());
276
                descricaoCompleta.append("  1 UN X ");
277
                descricaoCompleta.append(formatarValor(lancamento.getValorVenda()));
278
                descricaoCompleta.append("  R$");
279
                descricaoCompleta.append(formatarValor(lancamento.getValorVenda() * 1));
280
                return descricaoCompleta.toString();
281
        }
282
 
283
        public void preencherItensComanda(List<Lancamento> lancamentos) {
284
                Integer sequencial = 1;
285
                for (Lancamento lancamento : lancamentos) {
286
                        NfceItemDTO item = new NfceItemDTO();
287
                        item.setSequencial(sequencial);
288
                        item.setSequencialProduto(lancamento.getProduto().getSequencial());
289
                        item.setDescricao(montagemDescricaoDoItemComanda(lancamento));
290
                        item.setQuantidade(1);
291
                        item.setValorUnitario(lancamento.getValorVenda());
292
                        getItens().add(item);
293
                        sequencial++;
294
                }
295
        }
296
 
297
        public String montagemDescricaoDoItemComanda(Lancamento lancamento) {
298
                StringBuilder descricaoCompleta = new StringBuilder();
299
                descricaoCompleta.append(lancamento.getDescricaoComanda());
300
                descricaoCompleta.append("  R$");
301
                descricaoCompleta.append(formatarValor(lancamento.getValorVenda()));
302
                return descricaoCompleta.toString();
303
        }
304
 
305
        public void preencherPagamentos(List<VendaFormaPagamento> pagamentos) {
306
                for (VendaFormaPagamento vendaFormaPagamento : pagamentos) {
307
                        NfcePagamentoDTO pagamento = new NfcePagamentoDTO();
308
                        String formaDePagamento = vendaFormaPagamento.getFormaPagamento().getDescricao();
309
                        if (VerificadorUtil.naoEstaNulo(vendaFormaPagamento.getBandeiraCartao())) {
310
                                formaDePagamento = formaDePagamento + " (" + vendaFormaPagamento.getBandeiraCartao().getDescricao() + ") ";
311
                        }
312
                        pagamento.setFormaDePagamento(formaDePagamento);
313
                        pagamento.setValor(formatarValor(vendaFormaPagamento.getValorPagamento()));
314
                        getPagamentos().add(pagamento);
315
                }
316
        }
317
 
318
        public String getValorTotal() {
319
                Double total = 0.0;
320
                if (!VerificadorUtil.isListaNulaOuVazia(getItens())) {
321
                        for (NfceItemDTO item : getItens()) {
322
                                total = total + item.getValorTotal();
323
                        }
324
                }
325
                return formatarValor(total);
326
        }
327
 
328
        public String formatarChave(String chaveAcessoNF) {
329
                chaveAcessoNF = chaveAcessoNF.replace("NFe", "");
330
                return chaveAcessoNF.substring(0, 4) + " " +
331
                           chaveAcessoNF.substring(4, 8) + " " +
332
                           chaveAcessoNF.substring(8, 12) + " " +
333
                           chaveAcessoNF.substring(12, 16) + " " +
334
                           chaveAcessoNF.substring(16, 20) + " " +
335
                           chaveAcessoNF.substring(20, 24) + " " +
336
                           chaveAcessoNF.substring(24, 28) + " " +
337
                           chaveAcessoNF.substring(28, 32) + " " +
338
                           chaveAcessoNF.substring(32, 36) + " " +
339
                           chaveAcessoNF.substring(36, 40) + " " +
340
                           chaveAcessoNF.substring(40, 44);
341
        }
342
 
343
//      Número: 1 Série: 1 Emissão: 25/03/2018 16:28:40
344
//      Protocolo de Autorização: 327180000056573   25/03/2018 16:28:42
345
//      http://nfce.sefaz.al.gov.br/QRCode/consultarNFCe.jsp?chNFe=27180321494821000100650010000000011000000011&nVersao=100&tpAmb=2&cDest=06256954459&dhEmi=323031382d30332d32355431363a32383a34302d30333a3030&vNF=11.50&vICMS=0.00&digVal=4e35376b3876386a4d3931483269386843546f4a767443354d41453d&cIdToken=000002&cHashQRCode=A0FC7AB12F30E66649C3FFFB275323FCD2AA0AD7
346
 
347
        /*
348
        public String getNumeroSerieEmissao() {
349
                StringBuilder numeroSerieEmissao = new StringBuilder();
350
                numeroSerieEmissao.append("NÚMERO: ");
351
                numeroSerieEmissao.append(getNumero());
352
                numeroSerieEmissao.append(" SÉRIE: ");
353
                numeroSerieEmissao.append(getSerie());
354
                numeroSerieEmissao.append(" EMISSÃO: ");
355
                numeroSerieEmissao.append(getDataHoraEmissao());
356
                return numeroSerieEmissao.toString();
357
        }
358
 
359
        public String getProtocoloAutorizacaoDataHoraEmissao() {
360
                return "PROTOCOLO DE AUTORIZAÇÃO: " + getProtocoloAutorizacao();
361
        }
362
        */
363
        private String formatarValor(Double valor) {
364
                return String.format("%.2f", valor);
365
        }
366
 
367
        /*
368
        @Transient
369
        public Double getTotalLancamentos() {
370
                Double total = 0.0;
371
                if (!VerificadorUtil.isListaNulaOuVazia(getListaLancamento())) {
372
                        for (Lancamento lancamento : getListaLancamento()) {
373
                                total = total + lancamento.getValorVenda();
374
                        }
375
                }
376
                return total;  
377
        }
378
 
379
        @Transient
380
        public Double getTotalPago() {
381
                Double total = 0.0;
382
                if (!VerificadorUtil.isListaNulaOuVazia(getListaFormaPagamento())) {
383
                        for (VendaFormaPagamento vendaFormaPagamento : getListaFormaPagamento()) {
384
                                total = total + vendaFormaPagamento.getValorPagamento();
385
                        }
386
                }
387
                return total;  
388
        }
389
        */
390
 
391
}