package br.com.ec.controller.managedbean;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Named;
import org.primefaces.model.StreamedContent;
import org.springframework.context.annotation.Scope;
import br.com.ec.domain.dto.ConsolidadoDTO;
import br.com.ec.domain.dto.ConsolidadoPessoaJuridicaDTO;
import br.com.ec.domain.dto.ParametrosConsultaNotaFiscalDTO;
import br.com.ec.domain.model.NotaFiscal;
import br.com.ec.domain.model.Pessoa;
import br.com.ec.domain.model.tipos.TipoNotaFiscal;
import br.com.ec.domain.service.notafiscal.NotaFiscalService;
import br.edu.cesmac.core.consulta.ParametrosConsulta;
import br.edu.cesmac.core.generic.GenericService;
import br.edu.cesmac.core.util.VerificadorUtil;
import br.edu.cesmac.web.exception.VerificadorLancamentoException;
import br.edu.cesmac.web.exception.VerificadorLancamentoException.CommandRelatorioStreamedContent;
import br.edu.cesmac.web.generic.AbstractBean;
@Named
@Scope
("view")
public class ConsolidadoBean
extends AbstractBean
<ConsolidadoDTO
> implements Serializable {
private static final long serialVersionUID = 1L
;
private NotaFiscalService notaFiscalService
;
@Inject
public ConsolidadoBean
(NotaFiscalService notaFiscalService
) {
this.
notaFiscalService = notaFiscalService
;
}
@
Override
public void preCarregamento
() {
entidade =
new ConsolidadoDTO
();
parametrosConsulta =
new ParametrosConsulta
<ConsolidadoDTO
>();
parametrosConsulta.
setEntidade(entidade
);
}
@
Override
public void limparEntidade
() {
ConsolidadoDTO ConsolidadoVigencia =
new ConsolidadoDTO
();
setEntidade
(ConsolidadoVigencia
);
}
@
Override
public GenericService
<ConsolidadoDTO
> getService
() {
return null;
}
@
Override
public ConsolidadoDTO getEntidade
() {
return entidade
;
}
@
Override
public ConsolidadoDTO getId
() {
return getEntidade
();
}
/*******************************************************/
public void consultarValoresNotasFiscais
() {
ParametrosConsultaNotaFiscalDTO parametros =
new ParametrosConsultaNotaFiscalDTO
();
parametros.
setEntidade(new NotaFiscal
());
if (VerificadorUtil.
naoEstaNulo(getEntidade
().
getVigencia())) {
parametros.
setDataInicial(getEntidade
().
getVigencia().
getDataInicio());
parametros.
setDataFinal(getEntidade
().
getVigencia().
getDataFim());
}
List<NotaFiscal
> notasFiscais = notaFiscalService.
consultarNotasFiscais(parametros
);
Integer notasRecebidas =
0;
Double valorTotalRecebido =
0.0;
for (NotaFiscal nf : notasFiscais
) {
if (VerificadorUtil.
naoEstaNulo(nf.
getValorNotaFiscal())) {
if (nf.
getTipoNotaFiscal().
equals(TipoNotaFiscal.
NFE_RECEBIDA.
getValor())) {
notasRecebidas++
;
valorTotalRecebido = valorTotalRecebido + nf.
getValorNotaFiscal();
}
}
}
getEntidade
().
setValorTotalNotasFiscaisRecebidas(valorTotalRecebido
);
getEntidade
().
setNotasFiscaisRecebidas(notasRecebidas
);
Integer notasRemessas =
0;
Double valorTotalRemessas =
0.0;
for (NotaFiscal nf : notasFiscais
) {
if (VerificadorUtil.
naoEstaNulo(nf.
getValorNotaFiscal())) {
if (nf.
getTipoNotaFiscal().
equals(TipoNotaFiscal.
NFE_REMESSA.
getValor())) {
notasRemessas++
;
valorTotalRemessas = valorTotalRemessas + nf.
getValorNotaFiscal();
}
}
}
getEntidade
().
setValorTotalNotasFiscaisRemessas(valorTotalRemessas
);
getEntidade
().
setNotasFiscaisRemessas(notasRemessas
);
List<ConsolidadoPessoaJuridicaDTO
> pessoasJuridicasEmitidas = preencherNotasPorPessoaJuridica
(notasFiscais
);
for (ConsolidadoPessoaJuridicaDTO consolidadoPessoaJuridica : pessoasJuridicasEmitidas
) {
Integer notasEmitidas =
0;
Double valorTotalEmitido =
0.0;
for (NotaFiscal nf : notasFiscais
) {
if (VerificadorUtil.
naoEstaNulo(nf.
getPessoaJuridicaEmitente())) {
if (nf.
getPessoaJuridicaEmitente().
equals(consolidadoPessoaJuridica.
getPessoaJuridica())) {
if (nf.
getTipoNotaFiscal().
equals(TipoNotaFiscal.
NFCE_EMITIDA.
getValor())) {
notasEmitidas++
;
valorTotalEmitido = valorTotalEmitido + nf.
getValorNotaFiscal();
}
}
}
}
consolidadoPessoaJuridica.
setNotasFiscaisEmitidas(notasEmitidas
);
consolidadoPessoaJuridica.
setValorTotalNotasFiscaisEmitidas(valorTotalEmitido
);
}
getEntidade
().
setConsolidadosPessoaJuridica(pessoasJuridicasEmitidas
);
}
private List<ConsolidadoPessoaJuridicaDTO
> preencherNotasPorPessoaJuridica
(List<NotaFiscal
> notasFiscais
) {
List<Pessoa
> pessoas =
new ArrayList<Pessoa
>();
for (NotaFiscal notaFiscal : notasFiscais
) {
if (VerificadorUtil.
naoEstaNulo(notaFiscal.
getPessoaJuridicaEmitente())) {
if (!pessoas.
contains(notaFiscal.
getPessoaJuridicaEmitente())) {
pessoas.
add(notaFiscal.
getPessoaJuridicaEmitente());
}
}
}
List<ConsolidadoPessoaJuridicaDTO
> consolidadosPJ =
new ArrayList<ConsolidadoPessoaJuridicaDTO
>();
for (Pessoa pessoa : pessoas
) {
ConsolidadoPessoaJuridicaDTO consolidadoPessoaJuridica =
new ConsolidadoPessoaJuridicaDTO
();
consolidadoPessoaJuridica.
setPessoaJuridica(pessoa
);
consolidadosPJ.
add(consolidadoPessoaJuridica
);
}
return consolidadosPJ
;
}
public StreamedContent downloadXmlsNotasFiscaisEmitidas
() {
return new VerificadorLancamentoException
().
verificarLancamentoException(new CommandRelatorioStreamedContent
() {
@
Override
public StreamedContent execute
() {
return notaFiscalService.
downloadXmls(getEntidade
().
getVigencia().
getDataInicio(), getEntidade
().
getVigencia().
getDataFim(), TipoNotaFiscal.
NFCE_EMITIDA.
getValor(),
null);
}
});
}
public StreamedContent downloadXmlsNotasFiscaisEmitidas
(final Pessoa pessoaEmissor
) {
return new VerificadorLancamentoException
().
verificarLancamentoException(new CommandRelatorioStreamedContent
() {
@
Override
public StreamedContent execute
() {
return notaFiscalService.
downloadXmls(getEntidade
().
getVigencia().
getDataInicio(), getEntidade
().
getVigencia().
getDataFim(), TipoNotaFiscal.
NFCE_EMITIDA.
getValor(), pessoaEmissor
);
}
});
}
public StreamedContent downloadXmlsNotasFiscaisRecebidas
() {
return new VerificadorLancamentoException
().
verificarLancamentoException(new CommandRelatorioStreamedContent
() {
@
Override
public StreamedContent execute
() {
return notaFiscalService.
downloadXmls(getEntidade
().
getVigencia().
getDataInicio(), getEntidade
().
getVigencia().
getDataFim(), TipoNotaFiscal.
NFE_RECEBIDA.
getValor(),
null);
}
});
}
public StreamedContent downloadXmlsNotasFiscaisRemessa
() {
return new VerificadorLancamentoException
().
verificarLancamentoException(new CommandRelatorioStreamedContent
() {
@
Override
public StreamedContent execute
() {
return notaFiscalService.
downloadXmls(getEntidade
().
getVigencia().
getDataInicio(), getEntidade
().
getVigencia().
getDataFim(), TipoNotaFiscal.
NFE_REMESSA.
getValor(),
null);
}
});
}
}