package gcom.gui.arrecadacao;
import gcom.arrecadacao.FiltroConsultarDadosDiariosArrecadacaoAuxiliar;
import gcom.arrecadacao.FiltroConsultarDadosDiariosArrecadacaoAuxiliar.GROUP_BY_AUX;
import gcom.arrecadacao.bean.FiltrarDadosDiariosArrecadacaoHelper;
import gcom.batch.FiltroFuncionalidadeIniciada;
import gcom.batch.FuncionalidadeIniciada;
import gcom.batch.FuncionalidadeSituacao;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.seguranca.acesso.Funcionalidade;
import gcom.util.ConstantesSistema;
import gcom.util.Util;
import gcom.util.filtro.ConectorOr;
import gcom.util.filtro.ParametroSimples;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.Map;
import java.util.TreeMap;
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;
public class FiltrarDadosDiariosArrecadacaoComTarifaAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
// Seta o mapeamento de retorno
ActionForward retorno = null;
Fachada fachada = Fachada.getInstancia();
// Mudar isso quando tiver esquema de seguran�a
HttpSession sessao = httpServletRequest.getSession(false);
Collection<BigDecimal> colecaoValorTotal = new ArrayList<BigDecimal>();
BigDecimal valorTotalPeriodo = new BigDecimal(0.0);
String dataAtualAux = null;
/** filtro para verificar se a funcionalidade de gerar dados di�rios de arrecada��o esta executando */
FiltroFuncionalidadeIniciada filtroFuncionalidadeIniciada = new FiltroFuncionalidadeIniciada();
filtroFuncionalidadeIniciada.adicionarParametro(new ParametroSimples(FiltroFuncionalidadeIniciada.FUNCIONALIDADE_ID,Funcionalidade.GERAR_DADOS_DIARIOS_ARRECADACAO));
filtroFuncionalidadeIniciada.adicionarParametro(new ParametroSimples(FiltroFuncionalidadeIniciada.FUNCIONALIDADE_SITUACAO,FuncionalidadeSituacao.EM_ESPERA, ConectorOr.CONECTOR_OR, 2));
filtroFuncionalidadeIniciada.adicionarParametro(new ParametroSimples(FiltroFuncionalidadeIniciada.FUNCIONALIDADE_SITUACAO,FuncionalidadeSituacao.EM_PROCESSAMENTO));
Collection<FuncionalidadeIniciada> colecaoFuncionalidadeEmProcessamento = fachada.pesquisar(filtroFuncionalidadeIniciada,FuncionalidadeIniciada.class.getName());
/*
* Caso a funcionalidade esteja emprocessamento ou em espera
* envia uma mensagem ao usu�rio negando o acesso a consulta.
*/
if(colecaoFuncionalidadeEmProcessamento != null && !colecaoFuncionalidadeEmProcessamento.isEmpty()){
throw new ActionServletException("atencao.funcionalidade.processando");
}
retorno = actionMapping.findForward("consultarDadosDiariosArrecadacaoComTarifa");
// Pega o formul�rio
FiltrarDadosDiariosArrecadacaoComTarifaActionForm filtrarDadosDiariosArrecadacaoComTarifaActionForm = (FiltrarDadosDiariosArrecadacaoComTarifaActionForm) actionForm;
// Recupera os par�metros do form
String periodoArrecadacaoInicial = filtrarDadosDiariosArrecadacaoComTarifaActionForm.getPeriodoArrecadacaoInicio();
String periodoArrecadacaoFinal = filtrarDadosDiariosArrecadacaoComTarifaActionForm.getPeriodoArrecadacaoFim();
String localidade = filtrarDadosDiariosArrecadacaoComTarifaActionForm.getLocalidade();
String idArrecadador = filtrarDadosDiariosArrecadacaoComTarifaActionForm.getIdArrecadador();
String idGerenciaRegional = filtrarDadosDiariosArrecadacaoComTarifaActionForm.getIdGerenciaRegional();
String idElo = filtrarDadosDiariosArrecadacaoComTarifaActionForm.getIdElo();
String[] idsDocumentosTipos = filtrarDadosDiariosArrecadacaoComTarifaActionForm.getDocumentoTipo();
verificaPeloMenosUmParametroInformado(
filtrarDadosDiariosArrecadacaoComTarifaActionForm,
periodoArrecadacaoInicial, localidade, idArrecadador,
idGerenciaRegional, idElo, idsDocumentosTipos);
FiltroConsultarDadosDiariosArrecadacaoAuxiliar filtro = new FiltroConsultarDadosDiariosArrecadacaoAuxiliar();
filtro.setAgrupamento(GROUP_BY_AUX.ANO_MES);
filtro.setIdArrecadador(idArrecadador);
filtro.setIdElo(idElo);
filtro.setIdGerenciaRegional(idGerenciaRegional);
filtro.setIdLocalidade(localidade);
filtro.setIdsDocumentoTipoAgregador(idsDocumentosTipos);
verificarExistenciaDadosDiariosArrecadacaoAuxiliar(fachada,
filtro, periodoArrecadacaoInicial, periodoArrecadacaoFinal);
sessao.setAttribute("filtroConsultarDadosDiariosArrecadacaoAuxiliar", filtro);
sessao.setAttribute("periodoArrecadacaoInicial",
Util.formatarMesAnoComBarraParaAnoMes(periodoArrecadacaoInicial));
sessao.setAttribute("periodoArrecadacaoFinal",
Util.formatarMesAnoComBarraParaAnoMes(periodoArrecadacaoFinal));
if (filtro != null){
filtro = filtro.clone();
Integer periodoArrecadacaoInicialInt = Util.formatarMesAnoComBarraParaAnoMes(periodoArrecadacaoInicial);
Integer periodoArrecadacaoFinalInt = Util.formatarMesAnoComBarraParaAnoMes(periodoArrecadacaoFinal);
filtro.setAgrupamento(GROUP_BY_AUX.ANO_MES);
Map<Integer, Collection<FiltrarDadosDiariosArrecadacaoHelper>>
mapDadosDiariosAnoMes = fachada.filtrarDadosDiariosArrecadacaoAuxiliar(
periodoArrecadacaoInicialInt,
periodoArrecadacaoFinalInt,
filtro);
Map<Integer, FiltrarDadosDiariosArrecadacaoHelper> mapDadosProcessamento =
new TreeMap<Integer, FiltrarDadosDiariosArrecadacaoHelper>();
for(Integer itemAnoMes : mapDadosDiariosAnoMes.keySet()){
BigDecimal valorTotal = new BigDecimal(0.0);
for (FiltrarDadosDiariosArrecadacaoHelper helper : mapDadosDiariosAnoMes.get(itemAnoMes)){
valorTotal = valorTotal.add(helper.getValorArrecadacaoLiquida());
}
colecaoValorTotal.add(valorTotal);
valorTotalPeriodo = valorTotalPeriodo.add(valorTotal);
Date dataMesInformado = fachada.pesquisarDataProcessamentoMes(itemAnoMes);
Date dataAtual = fachada.pesquisarDataProcessamentoMes(this.getSistemaParametro().getAnoMesArrecadacao());
FiltrarDadosDiariosArrecadacaoHelper helperDadasProcessamento =
new FiltrarDadosDiariosArrecadacaoHelper();
if(dataMesInformado!=null){
helperDadasProcessamento
.setUltimoProcessamentoMesInformado(Util.formatarDataComHora(dataMesInformado));
}
if(dataAtual!=null){
helperDadasProcessamento
.setUltimoProcessamentoAtualSistema(Util.formatarDataComHora(dataAtual));
dataAtualAux = Util.formatarDataComHora(dataAtual);
}
if ( itemAnoMes >= this.getSistemaParametro().getAnoMesArrecadacao() ){
// httpServletRequest.setAttribute("tipoProcessamento","provisorio");
helperDadasProcessamento.setTipoProcessamento("provisorio");
}else{
// httpServletRequest.setAttribute("tipoProcessamento","definitivo");
helperDadasProcessamento.setTipoProcessamento("definitivo");
}
mapDadosProcessamento.put(itemAnoMes, helperDadasProcessamento);
}
if ( dataAtualAux != null ){
httpServletRequest.setAttribute("dataAtual", dataAtualAux);
}
httpServletRequest.setAttribute("mapDadosDiariosAnoMes", mapDadosDiariosAnoMes);
httpServletRequest.setAttribute("colecaoValorTotal", colecaoValorTotal);
httpServletRequest.setAttribute("valorTotalPeriodo", valorTotalPeriodo);
}
// Devolve o mapeamento de retorno
return retorno;
}
public void verificaPeloMenosUmParametroInformado(
FiltrarDadosDiariosArrecadacaoComTarifaActionForm filtrarDadosDiariosArrecadacaoComTarifaActionForm,
String periodoArrecadacaoInicial, String localidade,
String idArrecadador, String idGerenciaRegional, String idElo,
String[] idsDocumentosTipos) {
boolean peloMenosUmParametroInformado = false;
// Per�odo Arrecada��o
if (periodoArrecadacaoInicial != null
&& !periodoArrecadacaoInicial.equals("")) {
peloMenosUmParametroInformado = true;
}
// Localidade
if (localidade != null
&& !localidade.equals("") && !localidade
.equals(ConstantesSistema.NUMERO_NAO_INFORMADO)) {
peloMenosUmParametroInformado = true;
}
else{
filtrarDadosDiariosArrecadacaoComTarifaActionForm.setLocalidade("");
filtrarDadosDiariosArrecadacaoComTarifaActionForm.setDescricaoLocalidade("");
}
// Gerencia Regional
if (idGerenciaRegional != null
&& !idGerenciaRegional.equals("") && (!(idGerenciaRegional
.equals(new Integer(ConstantesSistema.NUMERO_NAO_INFORMADO).toString())))
) {
peloMenosUmParametroInformado = true;
}
else{
filtrarDadosDiariosArrecadacaoComTarifaActionForm.setIdGerenciaRegional("");
filtrarDadosDiariosArrecadacaoComTarifaActionForm.setNomeGerenciaRegional("");
}
// Arrecadador
if (idArrecadador != null
&& !idArrecadador.equals("") && !idArrecadador
.equals(ConstantesSistema.NUMERO_NAO_INFORMADO)) {
peloMenosUmParametroInformado = true;
}
else{
filtrarDadosDiariosArrecadacaoComTarifaActionForm.setIdArrecadador("");
filtrarDadosDiariosArrecadacaoComTarifaActionForm.setNomeArrecadador("");
}
// Elo
if (idElo != null
&& !idElo.equals("") && !idElo
.equals(ConstantesSistema.NUMERO_NAO_INFORMADO)) {
peloMenosUmParametroInformado = true;
}
else{
filtrarDadosDiariosArrecadacaoComTarifaActionForm.setIdElo("");
filtrarDadosDiariosArrecadacaoComTarifaActionForm.setNomeElo("");
}
// Tipo do Documento
int i = 0;
i = 0;
if (idsDocumentosTipos != null) {
while (i < idsDocumentosTipos.length) {
if (!idsDocumentosTipos[i].equals("")) {
peloMenosUmParametroInformado = true;
}
i++;
}
}
// Erro caso o usu�rio mandou filtrar sem nenhum par�metro
if (!peloMenosUmParametroInformado) {
throw new ActionServletException(
"atencao.filtro.nenhum_parametro_informado");
}
}
public void verificarExistenciaDadosDiariosArrecadacaoAuxiliar( Fachada fachada,
FiltroConsultarDadosDiariosArrecadacaoAuxiliar filtro,
String periodoArrecadacaoInicial, String periodoArrecadacaoFinal) {
boolean existeDados =
fachada.verificarExistenciaDadosDiariosArrecadacaoAuxiliar(
Util.formatarMesAnoComBarraParaAnoMes(periodoArrecadacaoInicial),
Util.formatarMesAnoComBarraParaAnoMes(periodoArrecadacaoFinal),
filtro);
if (!existeDados) {
// Nenhum dados diarios de arrecadacao cadastrado
throw new ActionServletException("atencao.pesquisa.nenhumresultado");
}
}
}