package gcom.gui.gerencial;
import gcom.fachada.Fachada;
import gcom.gerencial.bean.InformarDadosGeracaoRelatorioConsultaHelper;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.util.Util;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/**
* Action respons�vel por exibir a p�gina de compara��o entre os resumos
* do faturamento,arrecada��o e da pend�ncia.
* Exibi tamb�m os percentuais do valor e da quantidade de contas entre
* o faturamenro e a arrecada��o.
*
* @author Pedro Alexandre
* @date 07/06/2006
*
*/
public class ExibirResultadoConsultarComparativoResumoArrecadacaoFaturamentoPendenciaAction extends GcomAction {
/**
* Action respons�vel por exibir a p�gina de compara��o entre os resumos
* do faturamento,arrecada��o e da pend�ncia.
* Exibi tamb�m os percentuais do valor e da quantidade de contas entre
* o faturamenro e a arrecada��o.
*
* [UC0350] - Consultar Comparativo entre os Resumos do Faturamento, Arrecada��o e da Pend�ncia.
*
* @author Pedro Alexandre
* @date 07/03/2006
*
* @param actionMapping
* @param actionForm
* @param httpServletRequest
* @param httpServletResponse
* @return
*/
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm,
HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
//Seta o amapeamento de retorno para a tela do comparativo dos resumos
ActionForward retorno = actionMapping.findForward("resultadoComparativoResumosFaturamentoArrecadacaoPendencia");
//Cria uma inst�ncia da fachada.
Fachada fachada = Fachada.getInstancia();
// Cria uma inst�ncia da sess�o
HttpSession sessao = httpServletRequest.getSession(false);
//Recupera os dados do filtro do resumo da sess�o.
InformarDadosGeracaoRelatorioConsultaHelper informarDadosGeracaoRelatorioConsultaHelper =
(InformarDadosGeracaoRelatorioConsultaHelper)sessao.getAttribute("informarDadosGeracaoRelatorioConsultaHelper");
//Inst�ncia as vari�veis que iram armazenar os dados da exibi��o
Integer contasFaturamento = 0;
BigDecimal valorFaturamento = BigDecimal.ZERO;
Integer contasArrecadacao = 0;
BigDecimal valorArrecadacao = BigDecimal.ZERO;
Integer contasPendencia = 0;
BigDecimal valorPendencia = BigDecimal.ZERO;
double contasPercentual = 0.0;
double valorPercentual = 0.0;
double contasNumeroVezesFaturamento = 0.0;
double valorNumeroVezesFaturamento = 0.0;
//Cria o objeto de consulta dos resumos s� com o ano/m�s de refer�ncia informado
//para verificar se existe resumo de faturamento, arrecada��o e pend�ncia
//para o ano/m�s de refer�ncia informado.
InformarDadosGeracaoRelatorioConsultaHelper verificarExistenciaResumosParaAnoMesReferencia = new InformarDadosGeracaoRelatorioConsultaHelper();
verificarExistenciaResumosParaAnoMesReferencia.setAnoMesReferencia(informarDadosGeracaoRelatorioConsultaHelper.getAnoMesReferencia());
verificarExistenciaResumosParaAnoMesReferencia.setColecaoCategoria(null);
verificarExistenciaResumosParaAnoMesReferencia.setColecaoEsferaPoder(null);
verificarExistenciaResumosParaAnoMesReferencia.setColecaoImovelPerfil(null);
verificarExistenciaResumosParaAnoMesReferencia.setColecaoLigacaoAguaSituacao(null);
verificarExistenciaResumosParaAnoMesReferencia.setColecaoLigacaoEsgotoSituacao(null);
verificarExistenciaResumosParaAnoMesReferencia.setDescricaoOpcaoTotalizacao("ESTADO");
verificarExistenciaResumosParaAnoMesReferencia.setEloPolo(null);
verificarExistenciaResumosParaAnoMesReferencia.setFaturamentoGrupo(null);
verificarExistenciaResumosParaAnoMesReferencia.setGerarRelatorio(false);
verificarExistenciaResumosParaAnoMesReferencia.setQuadra(null);
verificarExistenciaResumosParaAnoMesReferencia.setSetorComercial(null);
verificarExistenciaResumosParaAnoMesReferencia.setTipoAnaliseFaturamento(null);
verificarExistenciaResumosParaAnoMesReferencia.setTipoRelatorio(null);
//Pesquisa os resumos para o ano/m�s de refer�ncia informado
List resultadoConsultaResumoFaturamentoParaAnoMesReferencia = fachada.consultarResumoFaturamento(verificarExistenciaResumosParaAnoMesReferencia);
List resultadoConsultaResumoArrecadacaoParaAnoMesReferencia = fachada.consultarResumoArrecadacao(verificarExistenciaResumosParaAnoMesReferencia);
List resultadoConsultaResumoPendenciaParaAnoMesReferencia = fachada.consultarResumoComparativoPendencia(verificarExistenciaResumosParaAnoMesReferencia);
//Recupera o ano/m�s de refer�ncia e formato para apresentar na menssagem de erro
String mesAnoReferencia = Util.formatarAnoMesParaMesAno(verificarExistenciaResumosParaAnoMesReferencia.getAnoMesReferencia());
//[FS0006] - Verificar exist�ncia de dados de simula��o do faturamento para o ano/m�s de refer�ncia retornado.
if(resultadoConsultaResumoFaturamentoParaAnoMesReferencia != null){
Iterator iteratorResultadoResumoFaturamentoParaAnoMesReferencia = resultadoConsultaResumoFaturamentoParaAnoMesReferencia.iterator();
Object[] arrayResultadoConsultaResumoFaturamentoParaAnoMesReferencia = (Object[])iteratorResultadoResumoFaturamentoParaAnoMesReferencia.next();
contasFaturamento = (Integer)arrayResultadoConsultaResumoFaturamentoParaAnoMesReferencia[0];
valorFaturamento = (BigDecimal)arrayResultadoConsultaResumoFaturamentoParaAnoMesReferencia[1];
if(contasFaturamento == null && valorFaturamento == null){
throw new ActionServletException("atencao.resumo.faturamento.inexistente",null,mesAnoReferencia);
}
}else{
throw new ActionServletException("atencao.resumo.faturamento.inexistente",null,mesAnoReferencia);
}
//[FS0007] - Verificar exist�ncia de dados de arrecada��o dados di�rios para o ano/m�s de refer�ncia retornado.
if(resultadoConsultaResumoArrecadacaoParaAnoMesReferencia != null){
Iterator iteratorResultadoResumoArrecadacaoParaAnoMesReferencia = resultadoConsultaResumoArrecadacaoParaAnoMesReferencia.iterator();
Object[] arrayResultadoConsultaResumoArrecadacaoParaAnoMesReferencia = (Object[])iteratorResultadoResumoArrecadacaoParaAnoMesReferencia.next();
contasFaturamento = (Integer)arrayResultadoConsultaResumoArrecadacaoParaAnoMesReferencia[0];
valorFaturamento = (BigDecimal)arrayResultadoConsultaResumoArrecadacaoParaAnoMesReferencia[1];
if(contasFaturamento == null && valorFaturamento == null){
throw new ActionServletException("atencao.resumo.arrecadacao.inexistente",null,mesAnoReferencia);
}
}else{
throw new ActionServletException("atencao.resumo.arrecadacao.inexistente",null,mesAnoReferencia);
}
//[FS0008] - Verificar exist�ncia de dados de pend�ncia para o ano/m�s de refer�ncia retornado.
if(resultadoConsultaResumoPendenciaParaAnoMesReferencia != null){
Iterator iteratorResultadoResumoPendenciaParaAnoMesReferencia = resultadoConsultaResumoPendenciaParaAnoMesReferencia.iterator();
Object[] arrayResultadoConsultaResumoPendenciaParaAnoMesReferencia = (Object[])iteratorResultadoResumoPendenciaParaAnoMesReferencia.next();
contasFaturamento = (Integer)arrayResultadoConsultaResumoPendenciaParaAnoMesReferencia[0];
valorFaturamento = (BigDecimal)arrayResultadoConsultaResumoPendenciaParaAnoMesReferencia[1];
if(contasFaturamento == null && valorFaturamento == null){
throw new ActionServletException("atencao.resumo.pendencia.inexistente",null,mesAnoReferencia);
}
}else{
throw new ActionServletException("atencao.resumo.pendencia.inexistente",null,mesAnoReferencia);
}
//Pesquisa na base de dados os resumos do faturamento, arrecada��o e pend�ncia para
List resultadoConsultaResumoFaturamento = fachada.consultarResumoFaturamento(informarDadosGeracaoRelatorioConsultaHelper);
List resultadoConsultaResumoArrecadacao = fachada.consultarResumoArrecadacao(informarDadosGeracaoRelatorioConsultaHelper);
List resultadoConsultaResumoPendencia = fachada.consultarResumoComparativoPendencia(informarDadosGeracaoRelatorioConsultaHelper);
//Recupera o form
ConsultarComparativoResumosFaturamentoArrecadacaoPendenciaActionForm consultarComparativoResumosFaturamentoArrecadacaoPendenciaActionForm = (ConsultarComparativoResumosFaturamentoArrecadacaoPendenciaActionForm) actionForm;
//Pesquisa a cole��o de argumentos de agrupamento da sess�o.
Collection colecaoAgrupamento = fachada.criarColecaoAgrupamentoResumos(informarDadosGeracaoRelatorioConsultaHelper);
//Seta a cole��o de agrupmento na sess�o para ser utilizado na jsp deo comparativo
sessao.setAttribute("colecaoAgrupamento", colecaoAgrupamento);
//Caso exista resumo de faturamento com os par�metros de pesquisa informado
//recupera o valor do faturamento e a quantidade de contas
//Caso contr�rio seta os valores para (0)zero
if(resultadoConsultaResumoFaturamento != null){
Iterator iteratorResultadoResumoFaturamento = resultadoConsultaResumoFaturamento.iterator();
Object[] arrayResultadoConsultaResumoFaturamento = (Object[])iteratorResultadoResumoFaturamento.next();
contasFaturamento = (Integer)arrayResultadoConsultaResumoFaturamento[0];
valorFaturamento = (BigDecimal)arrayResultadoConsultaResumoFaturamento[1];
}else{
contasFaturamento = 0;
valorFaturamento = new BigDecimal("0.00");
}
//Caso exista resumo de arrecada��o com os par�metros de pesquisa informado
//recupera o valor da arrecada��o e a quantidade de contas
//Caso contr�rio seta os valores para (0)zero
if(resultadoConsultaResumoArrecadacao != null){
Iterator iteratorResultadoResumoArrecadacao = resultadoConsultaResumoArrecadacao.iterator();
Object[] arrayResultadoConsultaResumoArrecadacao = (Object[])iteratorResultadoResumoArrecadacao.next();
contasArrecadacao = (Integer)arrayResultadoConsultaResumoArrecadacao[0];
valorArrecadacao = (BigDecimal)arrayResultadoConsultaResumoArrecadacao[1];
}else{
contasArrecadacao = 0;
valorArrecadacao = new BigDecimal("0.00");
}
//Caso exista resumo de pend�ncia com os par�metros de pesquisa informado
//recupera o valor da pend�ncia e a quantidade de contas
//Caso contr�rio seta os valores para (0)zero
if(resultadoConsultaResumoPendencia != null){
Iterator iteratorResultadoResumoPendencia = resultadoConsultaResumoPendencia.iterator();
Object[] arrayResultadoConsultaResumoPendencia = (Object[])iteratorResultadoResumoPendencia.next();
contasPendencia = (Integer)arrayResultadoConsultaResumoPendencia[0];
valorPendencia = (BigDecimal)arrayResultadoConsultaResumoPendencia[1];
}else{
contasPendencia = 0;
valorPendencia = new BigDecimal("0.00");
}
//Caso exista contas do faturamento calcula o percentual das contas - ((n�contasArrecadacao/n�contasFaturamento) * 100)
if(contasFaturamento != null && contasFaturamento > 0 && contasArrecadacao != null){
contasPercentual =Double.parseDouble(Util.calcularPercentual(""+contasArrecadacao, ""+contasFaturamento));
}
//Caso exista contas do faturamento calcula o n� de vezes do faturamento - (contasPendencia/contasFaturamento)
if(contasFaturamento != null && contasFaturamento > 0 && contasPendencia != null){
contasNumeroVezesFaturamento = contasPendencia.doubleValue()/contasFaturamento.doubleValue();
}
//Caso exista contas do faturamento calcula os percentuais do valor do faturamento - ((valorArrecadacao/valorFaturamento) * 100)
if(valorFaturamento != null && valorFaturamento.doubleValue() > 0 && valorArrecadacao != null){
valorPercentual = ((valorArrecadacao.divide(valorFaturamento, BigDecimal.ROUND_UNNECESSARY,2)).multiply(new BigDecimal(100))).doubleValue();
}
//Caso exista valor do faturamento e seja maior que 0(zero), calcula o n� de vezes do valor do faturamento - (valorPendencia/valorFaturamento)
if(valorFaturamento != null && valorFaturamento.doubleValue() > 0 && valorPendencia != null){
valorNumeroVezesFaturamento = (valorPendencia.divide(valorFaturamento, BigDecimal.ROUND_UNNECESSARY,2)).doubleValue();
}
/*
* Cria as vari�veis que iram armazenar os valores das percentuais com a formata��o certa
* e o n� de vezes do faturamento, caso n�o exista valor ou n�o exista contas para o faturamento
* exibe uma string vazia.
*/
String percentualContasString = null;
String percentualValorString = null;
String nContasFaturamentoContasString = null;
String nValorFaturamentoContasString = null;
/*
* Bloco para verificar se alguma valor est� null,
* caso ocorra seta o valor para 0(zero),para n�o ser
* exibida a descri��o "NULL"
*/
if(contasFaturamento == null){
contasFaturamento = 0;
percentualContasString = "";
nContasFaturamentoContasString = "";
}else{
percentualContasString = Util.formatarMoedaReal(new BigDecimal(contasPercentual));
nContasFaturamentoContasString = Util.formatarMoedaReal(new BigDecimal(contasNumeroVezesFaturamento));
}
if(valorFaturamento == null){
valorFaturamento = BigDecimal.ZERO;
percentualValorString = "";
nValorFaturamentoContasString = "";
}else{
percentualValorString = Util.formatarMoedaReal(new BigDecimal(valorPercentual));
nValorFaturamentoContasString =Util.formatarMoedaReal(new BigDecimal(valorNumeroVezesFaturamento));
}
if(contasArrecadacao == null){
contasArrecadacao = 0;
}
if(valorArrecadacao == null){
valorArrecadacao = BigDecimal.ZERO;
}
if(contasPendencia == null){
contasPendencia = 0;
}
if(valorPendencia == null){
valorPendencia = BigDecimal.ZERO;
}
//Seta os valores no form para exibi��o na p�gina
consultarComparativoResumosFaturamentoArrecadacaoPendenciaActionForm.setQuantidadeContasFaturamento(contasFaturamento);
consultarComparativoResumosFaturamentoArrecadacaoPendenciaActionForm.setValorFaturamento(Util.formatarMoedaReal(valorFaturamento));
consultarComparativoResumosFaturamentoArrecadacaoPendenciaActionForm.setQuantidadeContasArrecadacao(contasArrecadacao);
consultarComparativoResumosFaturamentoArrecadacaoPendenciaActionForm.setValorArrecadacao(Util.formatarMoedaReal(valorArrecadacao));
consultarComparativoResumosFaturamentoArrecadacaoPendenciaActionForm.setQuantidadeContasPendencia(contasPendencia);
consultarComparativoResumosFaturamentoArrecadacaoPendenciaActionForm.setValorPendencia(Util.formatarMoedaReal(valorPendencia));
consultarComparativoResumosFaturamentoArrecadacaoPendenciaActionForm.setQuantidadeContasPercentual(percentualContasString);
consultarComparativoResumosFaturamentoArrecadacaoPendenciaActionForm.setValorPercentual(percentualValorString);
consultarComparativoResumosFaturamentoArrecadacaoPendenciaActionForm.setQuantidadeContasNumeroVezesFaturamento(nContasFaturamentoContasString);
consultarComparativoResumosFaturamentoArrecadacaoPendenciaActionForm.setValorNumeroVezesFaturamento(nValorFaturamentoContasString);
return retorno;
}
}