Subversion Repositories Integrator Subversion

Rev

Rev 195 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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.core.generic.GenericService;
import br.com.ec.core.util.DataUtils;
import br.com.ec.core.util.VerificadorUtil;
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.com.ec.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);
                Double valorReceitaBruta = 0.0;
                for (IndicadorDRE indicador : dreVigenciaTotal.getIndicadores()) {
                        try {
                                IndicadorDRE indicadorMedia = indicador.clone();
                                indicadorMedia.setValorTotal(indicadorMedia.getValorTotal()/quantidadeVigencias);
                                if (VerificadorUtil.naoEstaNulo(indicador.getCodigo())) {
                                        if (indicadorMedia.getCodigo().equals(new Long(ConstantesSEC.DRE.RECEITA_OPERACIONAL_BRUTA_1))) {
                                                valorReceitaBruta = indicadorMedia.getValorTotal();
                                        }
                                }
                                indicadorMedia.setMargem(indicadorMedia.getValorTotal()/valorReceitaBruta);
                                dreVigenciaMedias.getIndicadores().add(indicadorMedia);
                        } catch (CloneNotSupportedException e) {
                                e.printStackTrace();
                        }
                }
                return dreVigenciaMedias;
        }
       
}