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.springframework.context.annotation.Scope;
import br.com.ec.domain.dto.DreDTO;
import br.com.ec.domain.dto.DreVigenciaDTO;
import br.com.ec.domain.dto.ParametrosConsultaLancamentosDTO;
import br.com.ec.domain.dto.ParametrosConsultaVendasDTO;
import br.com.ec.domain.model.IndicadorDRE;
import br.com.ec.domain.model.Loja;
import br.com.ec.domain.model.Vigencia;
import br.com.ec.domain.service.dre.IndicadorDREService;
import br.com.ec.domain.service.parcela.ParcelaService;
import br.com.ec.domain.service.venda.VendaService;
import br.com.ec.domain.shared.ConstantesSEC;
import br.edu.cesmac.core.generic.GenericService;
import br.edu.cesmac.core.util.DataUtils;
import br.edu.cesmac.core.util.VerificadorUtil;
import br.edu.cesmac.web.generic.AbstractBean;
@Named
@Scope
("view")
public class DreBean
extends AbstractBean
<DreDTO
> implements Serializable {
private static final long serialVersionUID = 1L
;
private List<Vigencia
> vigencias
;
private Vigencia vigencia
;
private List<DreVigenciaDTO
> dreVigencias
;
private Loja centroDeCustosSelecionado
;
private List<IndicadorDRE
> indicadoresDRE
;
private List<IndicadorDRE
> indicadores
;
private IndicadorDREService indicadorDREService
;
private ParcelaService parcelaService
;
private VendaService vendaService
;
@Inject
public DreBean
(IndicadorDREService indicadorDREService, ParcelaService parcelaService, VendaService vendaService
) {
this.
indicadorDREService = indicadorDREService
;
this.
parcelaService = parcelaService
;
this.
vendaService = vendaService
;
}
@
Override
public void preCarregamento
() {
setEntidade
(new DreDTO
(DataUtils.
getPrimeiroDiaDoAnoAtual(), DataUtils.
getUltimoDiaDoAnoAtual()));
}
@
Override
public void limparEntidade
() {
setEntidade
(new DreDTO
());
}
@
Override
public GenericService
<DreDTO
> getService
() {
return null;
}
@
Override
public DreDTO getEntidade
() {
return entidade
;
}
@
Override
public DreDTO getId
() {
return getEntidade
();
}
/********************************************************************/
public List<Vigencia
> getVigencias
() {
return vigencias
;
}
public void setVigencias
(List<Vigencia
> vigencias
) {
this.
vigencias = vigencias
;
}
public Vigencia getVigencia
() {
return vigencia
;
}
public void setVigencia
(Vigencia vigencia
) {
this.
vigencia = vigencia
;
}
public List<IndicadorDRE
> getIndicadoresDRE
() {
if (VerificadorUtil.
estaNulo(indicadoresDRE
)) {
setIndicadoresDRE
(indicadorDREService.
consultarIndicadores());
}
return indicadoresDRE
;
}
public void setIndicadoresDRE
(List<IndicadorDRE
> indicadoresDRE
) {
this.
indicadoresDRE = indicadoresDRE
;
}
public List<IndicadorDRE
> getIndicadores
() {
return indicadores
;
}
public void setIndicadores
(List<IndicadorDRE
> indicadores
) {
this.
indicadores = indicadores
;
}
public List<DreVigenciaDTO
> getDreVigencias
() {
return dreVigencias
;
}
public void setDreVigencias
(List<DreVigenciaDTO
> dreVigencias
) {
this.
dreVigencias = dreVigencias
;
}
public Loja getCentroDeCustosSelecionado
() {
return centroDeCustosSelecionado
;
}
public void setCentroDeCustosSelecionado
(Loja centroDeCustosSelecionado
) {
this.
centroDeCustosSelecionado = centroDeCustosSelecionado
;
}
public void consultarDRE
() {
List<DreVigenciaDTO
> dreVigencias =
new ArrayList<DreVigenciaDTO
>();
for (Vigencia vigenciaSelecionada : getVigencias
()) {
DreVigenciaDTO dre =
new DreVigenciaDTO
();
dre.
setVigencia(vigenciaSelecionada
);
List<IndicadorDRE
> indicadores =
new ArrayList<IndicadorDRE
>();
Double valorReceitaBruta =
0.0;
Double valorResultante =
0.0;
for (IndicadorDRE indicadorDRE : getIndicadoresDRE
()) {
IndicadorDRE indicador =
null;
try {
indicador = indicadorDRE.
clone();
} catch (CloneNotSupportedException e
) {e.
printStackTrace();}
ParametrosConsultaLancamentosDTO parametros =
new ParametrosConsultaLancamentosDTO
();
parametros.
setVigencia(vigenciaSelecionada
);
parametros.
setIndicadorDRE(indicador
);
parametros.
setCentroDeCustos(getCentroDeCustosSelecionado
());
Double valorTotal = parcelaService.
obterValorPassandoParametrosConsulta(parametros
);
if (VerificadorUtil.
estaNulo(valorTotal
)) {
valorTotal =
0.0;
}
ParametrosConsultaVendasDTO parametrosConsultaVendas =
new ParametrosConsultaVendasDTO
();
parametrosConsultaVendas.
setDataInicial(vigenciaSelecionada.
getDataInicio());
parametrosConsultaVendas.
setDataFinal(vigenciaSelecionada.
getDataFim());
parametrosConsultaVendas.
setLoja(getCentroDeCustosSelecionado
());
if (indicador.
getCodigo().
equals(ConstantesSEC.
DRE.
RECEITA_OPERACIONAL_BRUTA_1)) {
indicador.
setObservacao(ConstantesSEC.
DRE.
RECEITA_OPERACIONAL_BRUTA_1_INFO);
valorTotal = valorTotal + vendaService.
obterValorTotalBrutoDeVendasPorLojaEePeriodo(parametrosConsultaVendas
);
valorResultante = valorResultante + valorTotal
;
valorReceitaBruta = valorTotal
;
}
if (indicador.
getCodigo().
equals(ConstantesSEC.
DRE.
DEDUCOES_ABATIMENTOS_2)) {
indicador.
setObservacao(ConstantesSEC.
DRE.
DEDUCOES_ABATIMENTOS_2_INFO);
Double valorBruto = vendaService.
obterValorTotalBrutoDeVendasPorLojaEePeriodo(parametrosConsultaVendas
);
valorTotal = valorTotal +
(valorBruto - vendaService.
obterValorTotalLiquidoDeVendasPorLojaEePeriodo(parametrosConsultaVendas
));
}
if (indicador.
getCodigo().
equals(ConstantesSEC.
DRE.
CUSTO_PRODUTOS_VENDIDOS_SERVICOS_PRESTADOS_3)) {
indicador.
setObservacao(ConstantesSEC.
DRE.
CUSTO_PRODUTOS_VENDIDOS_SERVICOS_PRESTADOS_3_INFO);
valorTotal = valorTotal + vendaService.
obterValorProdutosUtilizadosEmVendasPorLojaEePeriodo(parametrosConsultaVendas
);
}
if (indicador.
getCodigo().
equals(ConstantesSEC.
DRE.
DESPESAS_OPERACIONAIS_VENDAS_VARIAVEIS_4)) {
indicador.
setObservacao(ConstantesSEC.
DRE.
DESPESAS_OPERACIONAIS_VENDAS_VARIAVEIS_4_INFO);
}
if (indicador.
getCodigo().
equals(ConstantesSEC.
DRE.
DESPESAS_GERAIS_ADMINISTRATIVAS_5)) {
indicador.
setObservacao(ConstantesSEC.
DRE.
DESPESAS_GERAIS_ADMINISTRATIVAS_5_INFO);
}
if (indicador.
getCodigo().
equals(ConstantesSEC.
DRE.
DESPESAS_FINANCEIRAS_6)) {
indicador.
setObservacao(ConstantesSEC.
DRE.
DESPESAS_FINANCEIRAS_6_INFO);
}
if (indicador.
getCodigo().
equals(ConstantesSEC.
DRE.
DESPESAS_DEPRECIACAO_7)) {
indicador.
setObservacao(ConstantesSEC.
DRE.
DESPESAS_DEPRECIACAO_7_INFO);
}
if (indicador.
getCodigo().
equals(ConstantesSEC.
DRE.
IMPOSTO_RENDA_JURIDICA_8)) {
indicador.
setObservacao(ConstantesSEC.
DRE.
IMPOSTO_RENDA_JURIDICA_8_INFO);
}
if (indicador.
getCodigo().
equals(ConstantesSEC.
DRE.
CONTRIBUICAO_SOCIAL_LUCRO_CSLL_9)) {
indicador.
setObservacao(ConstantesSEC.
DRE.
CONTRIBUICAO_SOCIAL_LUCRO_CSLL_9_INFO);
}
if (indicador.
getCodigo().
equals(ConstantesSEC.
DRE.
PRO_LABORE_10)) {
indicador.
setObservacao(ConstantesSEC.
DRE.
PRO_LABORE_10_INFO);
}
if (indicador.
getCodigo().
equals(ConstantesSEC.
DRE.
PARTICIPACAO_NOS_LUCROS_11)) {
indicador.
setObservacao(ConstantesSEC.
DRE.
PARTICIPACAO_NOS_LUCROS_11_INFO);
}
indicador.
setValorTotal(valorTotal
);
indicador.
setMargem(indicador.
getValorTotal()/valorReceitaBruta
);
indicadores.
add(indicador
);
if (!indicador.
getCodigo().
equals(ConstantesSEC.
DRE.
RECEITA_OPERACIONAL_BRUTA_1)) {
valorResultante = valorResultante - valorTotal
;
}
IndicadorDRE ind =
new IndicadorDRE
();
ind.
setValorTotal(valorResultante
);
ind.
setMargem(ind.
getValorTotal()/valorReceitaBruta
);
if (indicador.
getCodigo().
equals(ConstantesSEC.
DRE.
DEDUCOES_ABATIMENTOS_2)) {
ind.
setDescricao(ConstantesSEC.
DRE.
RECEITA_OPERACIONAL_LIQUIDA);
ind.
setObservacao(ConstantesSEC.
DRE.
RECEITA_OPERACIONAL_LIQUIDA_INFO);
}
if (indicador.
getCodigo().
equals(ConstantesSEC.
DRE.
CUSTO_PRODUTOS_VENDIDOS_SERVICOS_PRESTADOS_3)) {
ind.
setDescricao(ConstantesSEC.
DRE.
RESULTADO_OPERACIONAL_BRUTO_LUCRO_BRUTO);
ind.
setObservacao(ConstantesSEC.
DRE.
RESULTADO_OPERACIONAL_BRUTO_LUCRO_BRUTO_INFO);
}
if (indicador.
getCodigo().
equals(ConstantesSEC.
DRE.
DESPESAS_OPERACIONAIS_VENDAS_VARIAVEIS_4)) {
ind.
setDescricao(ConstantesSEC.
DRE.
MARGEM_CONTRIBUICAO);
ind.
setObservacao(ConstantesSEC.
DRE.
MARGEM_CONTRIBUICAO_INFO);
}
if (indicador.
getCodigo().
equals(ConstantesSEC.
DRE.
DESPESAS_GERAIS_ADMINISTRATIVAS_5)) {
ind.
setDescricao(ConstantesSEC.
DRE.
EBITDA);
ind.
setObservacao(ConstantesSEC.
DRE.
EBITDA_INFO);
}
if (indicador.
getCodigo().
equals(ConstantesSEC.
DRE.
DESPESAS_DEPRECIACAO_7)) {
ind.
setDescricao(ConstantesSEC.
DRE.
RESULTADO_OPERACIONAL_LIQUIDO_ANTES_IRPJ_CSLL);
ind.
setObservacao(ConstantesSEC.
DRE.
RESULTADO_OPERACIONAL_LIQUIDO_ANTES_IRPJ_CSLL_INFO);
}
if (indicador.
getCodigo().
equals(ConstantesSEC.
DRE.
CONTRIBUICAO_SOCIAL_LUCRO_CSLL_9)) {
ind.
setDescricao(ConstantesSEC.
DRE.
LUCRO_LIQUIDO_ANTES_PARTICIPACOES);
ind.
setObservacao(ConstantesSEC.
DRE.
LUCRO_LIQUIDO_ANTES_PARTICIPACOES_INFO);
}
if (indicador.
getCodigo().
equals(ConstantesSEC.
DRE.
PARTICIPACAO_NOS_LUCROS_11)) {
ind.
setDescricao(ConstantesSEC.
DRE.
RESULTADO_LIQUIDO_EXERCICIO);
ind.
setObservacao(ConstantesSEC.
DRE.
RESULTADO_LIQUIDO_EXERCICIO_INFO);
}
if (VerificadorUtil.
naoEstaNuloOuVazio(ind.
getDescricao()) &&
(!indicador.
getCodigo().
equals(ConstantesSEC.
DRE.
DESPESAS_FINANCEIRAS_6) ||
!indicador.
getCodigo().
equals(ConstantesSEC.
DRE.
IMPOSTO_RENDA_JURIDICA_8) ||
!indicador.
getCodigo().
equals(ConstantesSEC.
DRE.
PRO_LABORE_10))) {
indicadores.
add(ind
);
}
}
dre.
setIndicadores(indicadores
);
dreVigencias.
add(dre
);
setIndicadores
(indicadores
);
}
DreVigenciaDTO dreVigenciaTotal = montarTotal
(dreVigencias
);
DreVigenciaDTO dreVigenciaMedia = montarMedias
(dreVigenciaTotal, dreVigencias.
size());
dreVigencias.
add(dreVigenciaMedia
);
dreVigencias.
add(dreVigenciaTotal
);
setDreVigencias
(dreVigencias
);
}
private DreVigenciaDTO montarTotal
(List<DreVigenciaDTO
> dreVigencias
) {
DreVigenciaDTO dreVigenciaTotal =
new DreVigenciaDTO
();
dreVigenciaTotal.
setIndicadores(new ArrayList<IndicadorDRE
>());
Vigencia vigencia =
new Vigencia
();
vigencia.
setDescricao("TOTAL");
dreVigenciaTotal.
setVigencia(vigencia
);
for (DreVigenciaDTO dreVigencia : dreVigencias
) {
for (IndicadorDRE indicador : dreVigencia.
getIndicadores()) {
try {
dreVigenciaTotal.
acrescentarValorIndicador(indicador.
clone());
} catch (CloneNotSupportedException e
) {
e.
printStackTrace();
}
}
}
return dreVigenciaTotal
;
}
private DreVigenciaDTO montarMedias
(DreVigenciaDTO dreVigenciaTotal,
Integer quantidadeVigencias
) {
DreVigenciaDTO dreVigenciaMedias =
new DreVigenciaDTO
();
dreVigenciaMedias.
setIndicadores(new ArrayList<IndicadorDRE
>());
Vigencia vigencia =
new Vigencia
();
vigencia.
setDescricao("MÉDIA");
dreVigenciaMedias.
setVigencia(vigencia
);
for (IndicadorDRE indicador : dreVigenciaTotal.
getIndicadores()) {
try {
IndicadorDRE indicadorMedia = indicador.
clone();
indicadorMedia.
setValorTotal(indicadorMedia.
getValorTotal()/quantidadeVigencias
);
indicadorMedia.
setMargem(indicadorMedia.
getMargem()/quantidadeVigencias
);
dreVigenciaMedias.
getIndicadores().
add(indicadorMedia
);
} catch (CloneNotSupportedException e
) {
e.
printStackTrace();
}
}
return dreVigenciaMedias
;
}
/* ANTERIOR
public void consultarDRE() {
List<DreVigenciaDTO> dreVigencias = new ArrayList<DreVigenciaDTO>();
// setVigencias(new ArrayList<Vigencia>());
// getVigencias().add(getVigencia());
// CRIAR COLUNA DE DESCRIÇÕES
// CRIAR COLUNAS DOS VALORES POR VIGÊNCIA
for (Vigencia vigenciaSelecionada : getVigencias()) {
DreVigenciaDTO dre = new DreVigenciaDTO();
dre.setVigencia(vigenciaSelecionada);
List<IndicadorDRE> indicadores = new ArrayList<IndicadorDRE>();
Double valorReceitaBruta = 0.0;
Double valorResultante = 0.0;
for (IndicadorDRE indicador : getIndicadoresDRE()) {
ParametrosConsultaLancamentosDTO parametros = new ParametrosConsultaLancamentosDTO();
parametros.setVigencia(vigenciaSelecionada);
parametros.setIndicadorDRE(indicador);
Double valorTotal = parcelaService.obterValorPassandoParametrosConsulta(parametros);
if (VerificadorUtil.estaNulo(valorTotal)) {
valorTotal = 0.0;
}
ParametrosConsultaVendasDTO parametrosConsultaVendas = new ParametrosConsultaVendasDTO();
parametrosConsultaVendas.setDataInicial(vigenciaSelecionada.getDataInicio());
parametrosConsultaVendas.setDataFinal(vigenciaSelecionada.getDataFim());
if (indicador.getCodigo().equals(ConstantesSEC.DRE.RECEITA_OPERACIONAL_BRUTA_1)) {
indicador.setObservacao(ConstantesSEC.DRE.RECEITA_OPERACIONAL_BRUTA_1_INFO);
valorTotal = valorTotal + vendaService.obterValorTotalBrutoDeVendasPorLojaEePeriodo(parametrosConsultaVendas);
valorResultante = valorResultante + valorTotal;
valorReceitaBruta = valorTotal;
}
if (indicador.getCodigo().equals(ConstantesSEC.DRE.DEDUCOES_ABATIMENTOS_2)) {
indicador.setObservacao(ConstantesSEC.DRE.DEDUCOES_ABATIMENTOS_2_INFO);
Double valorBruto = vendaService.obterValorTotalBrutoDeVendasPorLojaEePeriodo(parametrosConsultaVendas);
valorTotal = valorTotal + (valorBruto - vendaService.obterValorTotalLiquidoDeVendasPorLojaEePeriodo(parametrosConsultaVendas));
}
if (indicador.getCodigo().equals(ConstantesSEC.DRE.CUSTO_PRODUTOS_VENDIDOS_SERVICOS_PRESTADOS_3)) {
indicador.setObservacao(ConstantesSEC.DRE.CUSTO_PRODUTOS_VENDIDOS_SERVICOS_PRESTADOS_3_INFO);
valorTotal = valorTotal + vendaService.obterValorProdutosUtilizadosEmVendasPorLojaEePeriodo(parametrosConsultaVendas);
}
if (indicador.getCodigo().equals(ConstantesSEC.DRE.DESPESAS_OPERACIONAIS_VENDAS_VARIAVEIS_4)) {
indicador.setObservacao(ConstantesSEC.DRE.DESPESAS_OPERACIONAIS_VENDAS_VARIAVEIS_4_INFO);
}
if (indicador.getCodigo().equals(ConstantesSEC.DRE.DESPESAS_GERAIS_ADMINISTRATIVAS_5)) {
indicador.setObservacao(ConstantesSEC.DRE.CUSTO_PRODUTOS_VENDIDOS_SERVICOS_PRESTADOS_3_INFO);
}
if (indicador.getCodigo().equals(ConstantesSEC.DRE.DESPESAS_FINANCEIRAS_6)) {
indicador.setObservacao(ConstantesSEC.DRE.DESPESAS_FINANCEIRAS_6_INFO);
}
if (indicador.getCodigo().equals(ConstantesSEC.DRE.DESPESAS_DEPRECIACAO_7)) {
indicador.setObservacao(ConstantesSEC.DRE.DESPESAS_DEPRECIACAO_7_INFO);
}
if (indicador.getCodigo().equals(ConstantesSEC.DRE.IMPOSTO_RENDA_JURIDICA_8)) {
indicador.setObservacao(ConstantesSEC.DRE.IMPOSTO_RENDA_JURIDICA_8_INFO);
}
if (indicador.getCodigo().equals(ConstantesSEC.DRE.CONTRIBUICAO_SOCIAL_LUCRO_CSLL_9)) {
indicador.setObservacao(ConstantesSEC.DRE.CONTRIBUICAO_SOCIAL_LUCRO_CSLL_9_INFO);
}
if (indicador.getCodigo().equals(ConstantesSEC.DRE.PRO_LABORE_10)) {
indicador.setObservacao(ConstantesSEC.DRE.PRO_LABORE_10_INFO);
}
if (indicador.getCodigo().equals(ConstantesSEC.DRE.PARTICIPACAO_NOS_LUCROS_11)) {
indicador.setObservacao(ConstantesSEC.DRE.PARTICIPACAO_NOS_LUCROS_11_INFO);
}
indicador.setValorTotal(valorTotal);
indicador.setMargem(indicador.getValorTotal()/valorReceitaBruta);
indicadores.add(indicador);
if (!indicador.getCodigo().equals(ConstantesSEC.DRE.RECEITA_OPERACIONAL_BRUTA_1)) {
valorResultante = valorResultante - valorTotal;
}
IndicadorDRE ind = new IndicadorDRE();
ind.setValorTotal(valorResultante);
ind.setMargem(ind.getValorTotal()/valorReceitaBruta);
if (indicador.getCodigo().equals(ConstantesSEC.DRE.DEDUCOES_ABATIMENTOS_2)) {
ind.setDescricao(ConstantesSEC.DRE.RECEITA_OPERACIONAL_LIQUIDA);
ind.setObservacao(ConstantesSEC.DRE.RECEITA_OPERACIONAL_LIQUIDA_INFO);
}
if (indicador.getCodigo().equals(ConstantesSEC.DRE.CUSTO_PRODUTOS_VENDIDOS_SERVICOS_PRESTADOS_3)) {
ind.setDescricao(ConstantesSEC.DRE.RESULTADO_OPERACIONAL_BRUTO_LUCRO_BRUTO);
ind.setObservacao(ConstantesSEC.DRE.RESULTADO_OPERACIONAL_BRUTO_LUCRO_BRUTO_INFO);
}
if (indicador.getCodigo().equals(ConstantesSEC.DRE.DESPESAS_OPERACIONAIS_VENDAS_VARIAVEIS_4)) {
ind.setDescricao(ConstantesSEC.DRE.MARGEM_CONTRIBUICAO);
ind.setObservacao(ConstantesSEC.DRE.MARGEM_CONTRIBUICAO_INFO);
}
if (indicador.getCodigo().equals(ConstantesSEC.DRE.DESPESAS_GERAIS_ADMINISTRATIVAS_5)) {
ind.setDescricao(ConstantesSEC.DRE.EBITDA);
ind.setObservacao(ConstantesSEC.DRE.EBITDA_INFO);
}
if (indicador.getCodigo().equals(ConstantesSEC.DRE.DESPESAS_DEPRECIACAO_7)) {
ind.setDescricao(ConstantesSEC.DRE.RESULTADO_OPERACIONAL_LIQUIDO_ANTES_IRPJ_CSLL);
ind.setObservacao(ConstantesSEC.DRE.RESULTADO_OPERACIONAL_LIQUIDO_ANTES_IRPJ_CSLL_INFO);
}
if (indicador.getCodigo().equals(ConstantesSEC.DRE.CONTRIBUICAO_SOCIAL_LUCRO_CSLL_9)) {
ind.setDescricao(ConstantesSEC.DRE.LUCRO_LIQUIDO_ANTES_PARTICIPACOES);
ind.setObservacao(ConstantesSEC.DRE.LUCRO_LIQUIDO_ANTES_PARTICIPACOES_INFO);
}
if (indicador.getCodigo().equals(ConstantesSEC.DRE.PARTICIPACAO_NOS_LUCROS_11)) {
ind.setDescricao(ConstantesSEC.DRE.RESULTADO_LIQUIDO_EXERCICIO);
ind.setObservacao(ConstantesSEC.DRE.RESULTADO_LIQUIDO_EXERCICIO_INFO);
}
if (VerificadorUtil.naoEstaNuloOuVazio(ind.getDescricao()) &&
(!indicador.getCodigo().equals(ConstantesSEC.DRE.DESPESAS_FINANCEIRAS_6) ||
!indicador.getCodigo().equals(ConstantesSEC.DRE.IMPOSTO_RENDA_JURIDICA_8) ||
!indicador.getCodigo().equals(ConstantesSEC.DRE.PRO_LABORE_10))) {
indicadores.add(ind);
}
}
dre.setIndicadores(indicadores);
dreVigencias.add(dre);
setIndicadores(indicadores);
for (IndicadorDRE indicador : indicadores) {
System.out.println(indicador.getDescricao());
System.out.println(indicador.getValorTotal());
System.out.println("----");
}
}
setDreVigencias(dreVigencias);
}
*/
}