package br.com.ec.domain.dto.nfce;
import java.io.Serializable;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import br.com.ec.core.util.StringUtil;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.domain.dto.NfceItemDTO;
import br.com.ec.domain.dto.NfcePagamentoDTO;
import br.com.ec.domain.model.Endereco;
import br.com.ec.domain.model.Lancamento;
import br.com.ec.domain.model.NotaFiscal;
import br.com.ec.domain.model.Pessoa;
import br.com.ec.domain.model.Venda;
import br.com.ec.domain.model.VendaFormaPagamento;
import br.com.ec.web.converters.FormatarUtil;
import br.com.ec.web.util.DataUtil;
import nfce.java.TNfeProc;
public class NotaFiscalDTO
implements Serializable {
private static final long serialVersionUID = 1L
;
private Long sequencialNotaFiscal
;
private Venda venda
;
private Pessoa pessoaJuridica
;
private Endereco enderecoEmitente
;
private List<NfceItemDTO
> itens =
new ArrayList<NfceItemDTO
>();
private List<NfcePagamentoDTO
> pagamentos =
new ArrayList<NfcePagamentoDTO
>();
private String numero =
"";
private String serie =
"";
private String dataHoraEmissao =
"";
private String chave =
"";
private String protocoloAutorizacao =
"";
private String cpfCnpjConsumidor =
"";
private String caminhoQrCode =
"";
public NotaFiscalDTO
() {}
public NotaFiscalDTO
(Venda venda
) {
this.
venda = venda
;
if (VerificadorUtil.
naoEstaNulo(venda.
getCliente())) {
this.
setCpfCnpjConsumidor(venda.
getCliente().
getCpfCnpj());
} else {
this.
setCpfCnpjConsumidor("NÃO INFORMADO");
}
}
public NotaFiscalDTO
(NotaFiscal notaFiscal
) {
this.
setVenda(notaFiscal.
getVenda());
this.
setNumero("" + notaFiscal.
getNumeroNotaFiscal());
this.
setSerie(notaFiscal.
getSerie());
this.
setChave(notaFiscal.
getChave());
this.
setCaminhoQrCode(notaFiscal.
getCaminhoQrcode());
this.
setCpfCnpjConsumidor("NÃO INFORMADO");
if (VerificadorUtil.
naoEstaNulo(notaFiscal.
getVenda())) {
if (VerificadorUtil.
naoEstaNulo(notaFiscal.
getVenda().
getCliente())) {
this.
setCpfCnpjConsumidor(notaFiscal.
getVenda().
getCliente().
getCpfCnpj());
}
}
this.
setDataHoraEmissao(DataUtil.
retornarDataFormatadaEmFormatoTexto("yyyy-MM-dd HH:mm:ss", notaFiscal.
getDataHoraEmissao()));
this.
setProtocoloAutorizacao(notaFiscal.
getProtocoloAutorizacao());
}
public NotaFiscalDTO
(TNfeProc nfeProc, Venda vendaCompleta
) {
Pessoa pessoaJuridica =
new Pessoa
();
pessoaJuridica.
setCpfCnpj(nfeProc.
getNFe().
getInfNFe().
getEmit().
getCNPJ());
this.
setPessoaJuridica(pessoaJuridica
);
Endereco enderecoEmitente =
new Endereco
();
enderecoEmitente.
setLogradouro(nfeProc.
getNFe().
getInfNFe().
getEmit().
getEnderEmit().
getXLgr());
enderecoEmitente.
setNumero(nfeProc.
getNFe().
getInfNFe().
getEmit().
getEnderEmit().
getNro());
enderecoEmitente.
setComplemento(nfeProc.
getNFe().
getInfNFe().
getEmit().
getEnderEmit().
getXCpl());
enderecoEmitente.
setBairro(nfeProc.
getNFe().
getInfNFe().
getEmit().
getEnderEmit().
getXBairro());
enderecoEmitente.
setMunicipio(nfeProc.
getNFe().
getInfNFe().
getEmit().
getEnderEmit().
getXMun());
enderecoEmitente.
setUnidadeFederativa(nfeProc.
getNFe().
getInfNFe().
getEmit().
getEnderEmit().
getUF().
name());
this.
setEnderecoEmitente(enderecoEmitente
);
List<NfceItemDTO
> itens =
new ArrayList<NfceItemDTO
>();
for (nfce.
java.
TNFe.
InfNFe.
Det detalhe : nfeProc.
getNFe().
getInfNFe().
getDet()) {
NfceItemDTO item =
new NfceItemDTO
();
item.
setSequencial(new Integer(detalhe.
getNItem()));
StringBuilder descricaoCompleta =
new StringBuilder();
descricaoCompleta.
append(detalhe.
getProd().
getCProd());
descricaoCompleta.
append(" - ");
descricaoCompleta.
append(detalhe.
getProd().
getXProd());
descricaoCompleta.
append(" 1 UN X R$");
descricaoCompleta.
append(formatarValor
(new Double(detalhe.
getProd().
getVUnCom())));
descricaoCompleta.
append(" R$");
descricaoCompleta.
append(formatarValor
(new Double(detalhe.
getProd().
getVProd())));
item.
setDescricao(descricaoCompleta.
toString());
item.
setQuantidade(new Integer(detalhe.
getProd().
getQCom().
substring(0, detalhe.
getProd().
getQCom().
indexOf("."))));
item.
setValorUnitario(new Double(detalhe.
getProd().
getVUnCom()));
itens.
add(item
);
}
this.
setItens(itens
);
// TODO: AINDA PREENCHENDO COM PAGAMENTOS DA VENDA
this.
preencherPagamentos(vendaCompleta.
getVendaFormaPagamentos());
this.
setNumero(nfeProc.
getNFe().
getInfNFe().
getIde().
getNNF());
this.
setSerie(nfeProc.
getNFe().
getInfNFe().
getIde().
getSerie());
this.
setChave(nfeProc.
getProtNFe().
getInfProt().
getChNFe());
this.
setCaminhoQrCode(nfeProc.
getNFe().
getInfNFeSupl().
getQrCode());
this.
setCpfCnpjConsumidor("NÃO INFORMADO");
if (VerificadorUtil.
naoEstaNulo(nfeProc.
getNFe().
getInfNFe().
getDest())) {
String cpfCnpjFormatado =
"";
if (VerificadorUtil.
naoEstaNuloOuVazio(nfeProc.
getNFe().
getInfNFe().
getDest().
getCPF())) {
cpfCnpjFormatado = StringUtil.
formatarCpf(nfeProc.
getNFe().
getInfNFe().
getDest().
getCPF());
} else if (VerificadorUtil.
naoEstaNuloOuVazio(nfeProc.
getNFe().
getInfNFe().
getDest().
getCNPJ())) {
cpfCnpjFormatado = StringUtil.
formatarCnpj(nfeProc.
getNFe().
getInfNFe().
getDest().
getCNPJ());
}
this.
setCpfCnpjConsumidor(cpfCnpjFormatado
);
}
Date data
;
try {
data =
new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'-03:00'").
parse(nfeProc.
getNFe().
getInfNFe().
getIde().
getDhEmi());
this.
setDataHoraEmissao(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").
format(data
));
} catch (ParseException e
) {
e.
printStackTrace();
}
this.
setProtocoloAutorizacao(nfeProc.
getProtNFe().
getInfProt().
getNProt());
}
public Long getSequencialNotaFiscal
() {
return sequencialNotaFiscal
;
}
public void setSequencialNotaFiscal
(Long sequencialNotaFiscal
) {
this.
sequencialNotaFiscal = sequencialNotaFiscal
;
}
public Venda getVenda
() {
return venda
;
}
public void setVenda
(Venda venda
) {
this.
venda = venda
;
}
public Long getSequencialDaVenda
() {
return VerificadorUtil.
naoEstaNulo(getVenda
())? getVenda
().
getSequencial() :
null;
}
public Pessoa getPessoaJuridica
() {
return pessoaJuridica
;
}
public void setPessoaJuridica
(Pessoa pessoaJuridica
) {
this.
pessoaJuridica = pessoaJuridica
;
}
public Endereco getEnderecoEmitente
() {
return enderecoEmitente
;
}
public void setEnderecoEmitente
(Endereco enderecoEmitente
) {
this.
enderecoEmitente = enderecoEmitente
;
}
public List<NfceItemDTO
> getItens
() {
return itens
;
}
public void setItens
(List<NfceItemDTO
> itens
) {
this.
itens = itens
;
}
public List<NfcePagamentoDTO
> getPagamentos
() {
return pagamentos
;
}
public void setPagamentos
(List<NfcePagamentoDTO
> pagamentos
) {
this.
pagamentos = pagamentos
;
}
public String getNumero
() {
return numero
;
}
public void setNumero
(String numero
) {
this.
numero = numero
;
}
public String getSerie
() {
return serie
;
}
public void setSerie
(String serie
) {
this.
serie = serie
;
}
public String getDataHoraEmissao
() {
return dataHoraEmissao
;
}
public void setDataHoraEmissao
(String dataHoraEmissao
) {
this.
dataHoraEmissao = dataHoraEmissao
;
}
public String getChave
() {
return chave
;
}
public void setChave
(String chave
) {
this.
chave = formatarChave
(chave
);
}
public String getProtocoloAutorizacao
() {
return protocoloAutorizacao
;
}
public void setProtocoloAutorizacao
(String protocoloAutorizacao
) {
this.
protocoloAutorizacao = protocoloAutorizacao
;
}
public String getCpfCnpjConsumidor
() {
if (VerificadorUtil.
estaNulo(cpfCnpjConsumidor
)) {
return "NÃO INFORMADO";
}
return cpfCnpjConsumidor
;
}
public void setCpfCnpjConsumidor
(String cpfCnpjConsumidor
) {
this.
cpfCnpjConsumidor = cpfCnpjConsumidor
;
}
public String getCpfCnpjConsumidorFormatado
() {
if (VerificadorUtil.
estaNulo(cpfCnpjConsumidor
)) {
return "NÃO INFORMADO";
}
return FormatarUtil.
retornarCpfCnpjFormatado(StringUtil.
retornarApenasNumeros(cpfCnpjConsumidor
));
}
public String getCaminhoQrCode
() {
return caminhoQrCode
;
}
public void setCaminhoQrCode
(String caminhoQrCode
) {
this.
caminhoQrCode = caminhoQrCode
;
}
/*******************************************************************/
public String getRazaoSocialDaLoja
() {
return VerificadorUtil.
naoEstaNulo(getPessoaJuridica
())? getPessoaJuridica
().
getRazaoSocial() :
"";
}
public String getCnpjDaLoja
() {
return VerificadorUtil.
naoEstaNulo(getPessoaJuridica
())? StringUtil.
formatarCnpj(getPessoaJuridica
().
getCpfCnpj()) :
"";
}
public String getCnpjMatrizDaLojaSemAcentos
() {
String cnpjMatriz = VerificadorUtil.
naoEstaNulo(getPessoaJuridica
())? getPessoaJuridica
().
getCpfCnpj() :
"";
return VerificadorUtil.
naoEstaNuloOuVazio(cnpjMatriz
)? cnpjMatriz.
substring(0,
8) :
"";
}
//TODO: ALTERAÇÃO PROVISÓRIA
public String getEnderecoDoEmitente
() {
String numero = getEnderecoEmitente
().
getNumero();
if (numero.
equals("2650")) {
numero =
"2990";
}
return getEnderecoEmitente
().
getLogradouro() +
", " + numero +
", " + getEnderecoEmitente
().
getComplemento() +
", " +
getEnderecoEmitente
().
getBairro() +
", " + getEnderecoEmitente
().
getMunicipio() +
", " + getEnderecoEmitente
().
getUnidadeFederativa();
}
public void preencherItens
(List<Lancamento
> lancamentos
) {
Integer sequencial =
1;
for (Lancamento lancamento : lancamentos
) {
NfceItemDTO item =
new NfceItemDTO
();
item.
setSequencial(sequencial
);
item.
setSequencialProduto(lancamento.
getProduto().
getSequencial());
item.
setDescricao(montagemDescricaoDoItem
(lancamento
));
item.
setQuantidade(1);
item.
setValorUnitario(lancamento.
getValorVenda());
getItens
().
add(item
);
sequencial++
;
}
}
public String montagemDescricaoDoItem
(Lancamento lancamento
) {
StringBuilder descricaoCompleta =
new StringBuilder();
descricaoCompleta.
append(lancamento.
getProduto().
getCodigo());
descricaoCompleta.
append(" - ");
descricaoCompleta.
append(lancamento.
getDescricaoNotaFiscal());
descricaoCompleta.
append(" 1 UN X ");
descricaoCompleta.
append(formatarValor
(lancamento.
getValorVenda()));
descricaoCompleta.
append(" R$");
descricaoCompleta.
append(formatarValor
(lancamento.
getValorVenda() * 1));
return descricaoCompleta.
toString();
}
public void preencherItensComanda
(List<Lancamento
> lancamentos
) {
Integer sequencial =
1;
for (Lancamento lancamento : lancamentos
) {
NfceItemDTO item =
new NfceItemDTO
();
item.
setSequencial(sequencial
);
item.
setSequencialProduto(lancamento.
getProduto().
getSequencial());
item.
setDescricao(montagemDescricaoDoItemComanda
(lancamento
));
item.
setQuantidade(1);
item.
setValorUnitario(lancamento.
getValorVenda());
getItens
().
add(item
);
sequencial++
;
}
}
public String montagemDescricaoDoItemComanda
(Lancamento lancamento
) {
StringBuilder descricaoCompleta =
new StringBuilder();
descricaoCompleta.
append(lancamento.
getDescricaoComanda());
descricaoCompleta.
append(" R$");
descricaoCompleta.
append(formatarValor
(lancamento.
getValorVenda()));
return descricaoCompleta.
toString();
}
public void preencherPagamentos
(List<VendaFormaPagamento
> pagamentos
) {
for (VendaFormaPagamento vendaFormaPagamento : pagamentos
) {
NfcePagamentoDTO pagamento =
new NfcePagamentoDTO
();
String formaDePagamento = vendaFormaPagamento.
getFormaPagamento().
getDescricao();
if (VerificadorUtil.
naoEstaNulo(vendaFormaPagamento.
getBandeiraCartao())) {
formaDePagamento = formaDePagamento +
" (" + vendaFormaPagamento.
getBandeiraCartao().
getDescricao() +
") ";
}
pagamento.
setFormaDePagamento(formaDePagamento
);
pagamento.
setValor(formatarValor
(vendaFormaPagamento.
getValorPagamento()));
getPagamentos
().
add(pagamento
);
}
}
public String getValorTotal
() {
Double total =
0.0;
if (!VerificadorUtil.
isListaNulaOuVazia(getItens
())) {
for (NfceItemDTO item : getItens
()) {
total = total + item.
getValorTotal();
}
}
return formatarValor
(total
);
}
public String formatarChave
(String chaveAcessoNF
) {
chaveAcessoNF = chaveAcessoNF.
replace("NFe",
"");
return chaveAcessoNF.
substring(0,
4) +
" " +
chaveAcessoNF.
substring(4,
8) +
" " +
chaveAcessoNF.
substring(8,
12) +
" " +
chaveAcessoNF.
substring(12,
16) +
" " +
chaveAcessoNF.
substring(16,
20) +
" " +
chaveAcessoNF.
substring(20,
24) +
" " +
chaveAcessoNF.
substring(24,
28) +
" " +
chaveAcessoNF.
substring(28,
32) +
" " +
chaveAcessoNF.
substring(32,
36) +
" " +
chaveAcessoNF.
substring(36,
40) +
" " +
chaveAcessoNF.
substring(40,
44);
}
// Número: 1 Série: 1 Emissão: 25/03/2018 16:28:40
// Protocolo de Autorização: 327180000056573 25/03/2018 16:28:42
// 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
/*
public String getNumeroSerieEmissao() {
StringBuilder numeroSerieEmissao = new StringBuilder();
numeroSerieEmissao.append("NÚMERO: ");
numeroSerieEmissao.append(getNumero());
numeroSerieEmissao.append(" SÉRIE: ");
numeroSerieEmissao.append(getSerie());
numeroSerieEmissao.append(" EMISSÃO: ");
numeroSerieEmissao.append(getDataHoraEmissao());
return numeroSerieEmissao.toString();
}
public String getProtocoloAutorizacaoDataHoraEmissao() {
return "PROTOCOLO DE AUTORIZAÇÃO: " + getProtocoloAutorizacao();
}
*/
private String formatarValor
(Double valor
) {
return String.
format("%.2f", valor
);
}
/*
@Transient
public Double getTotalLancamentos() {
Double total = 0.0;
if (!VerificadorUtil.isListaNulaOuVazia(getListaLancamento())) {
for (Lancamento lancamento : getListaLancamento()) {
total = total + lancamento.getValorVenda();
}
}
return total;
}
@Transient
public Double getTotalPago() {
Double total = 0.0;
if (!VerificadorUtil.isListaNulaOuVazia(getListaFormaPagamento())) {
for (VendaFormaPagamento vendaFormaPagamento : getListaFormaPagamento()) {
total = total + vendaFormaPagamento.getValorPagamento();
}
}
return total;
}
*/
}