package gcom.gui.faturamento.debito;
import gcom.faturamento.debito.DebitoTipo;
import gcom.faturamento.debito.FiltroDebitoTipo;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.util.ConstantesSistema;
import gcom.util.Util;
import gcom.util.filtro.ComparacaoTexto;
import gcom.util.filtro.ComparacaoTextoCompleto;
import gcom.util.filtro.MaiorQue;
import gcom.util.filtro.MenorQue;
import gcom.util.filtro.ParametroSimples;
import java.util.Collection;
import java.util.Map;
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;
/**
* Descri��o da classe
*
* @author Administrador
* @date 09/03/2006
*/
public class PesquisarTipoDebitoAction extends GcomAction {
/**
* <Breve descri��o sobre o caso de uso>
*
* <Identificador e nome do caso de uso>
*
* <Breve descri��o sobre o subfluxo>
*
* <Identificador e nome do subfluxo>
*
* <Breve descri��o sobre o fluxo secund�rio>
*
* <Identificador e nome do fluxo secund�rio>
*
* @author Administrador
* @date 09/03/2006
*
* @param actionMapping
* @param actionForm
* @param httpServletRequest
* @param httpServletResponse
* @return
*/
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm,
HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
//seta o mapeamento de retorno para a tela de resultado da pesquisa de tipo de d�bito
ActionForward retorno = actionMapping.findForward("listaTipoDebito");
//cria uma inst�ncia da fachada
//Fachada fachada = Fachada.getInstancia();
//cria uma inst�ncia da sess�o
HttpSession sessao = httpServletRequest.getSession(false);
//recupera o form de pesquisa de tipo de d�bito
PesquisarTipoDebitoActionForm pesquisarTipoDebitoActionForm = (PesquisarTipoDebitoActionForm) actionForm;
// Recupera os par�metros do form
String idTipoDebito = pesquisarTipoDebitoActionForm.getIdTipoDebito();
String descricao = pesquisarTipoDebitoActionForm.getDescricao();
String[] idTipoFinanciamento = pesquisarTipoDebitoActionForm.getIdTipoFinanciamento();
String[] idLancamentoItemContabil = pesquisarTipoDebitoActionForm.getIdItemLancamentoContabil();
String intervaloValorLimiteInicial = pesquisarTipoDebitoActionForm.getIntervaloValorLimiteInicial();
String intervaloValorLimiteFinal = pesquisarTipoDebitoActionForm.getIntervaloValorLimiteFinal();
String tipoPesquisa = pesquisarTipoDebitoActionForm.getTipoPesquisa();
//cria o filtro de tipo de d�bito que vai conter os par�metros da pesquisa
FiltroDebitoTipo filtroDebitoTipo = new FiltroDebitoTipo();
//seta a ordena��o do retorno da pesquisa
filtroDebitoTipo.setCampoOrderBy(FiltroDebitoTipo.DESCRICAO);
//cria a flag que vai indicar se o uus�rio informou um par�metro para pesquisa
boolean peloMenosUmParametroInformado = false;
//seta no filtro o indicador de gera��o
filtroDebitoTipo.adicionarParametro(new ParametroSimples(FiltroDebitoTipo.INDICADOR_GERACAO_AUTOMATICA, new Integer("2")));
//se o usu�rio informar o c�digo do tipo de d�bito
if(idTipoDebito != null && !idTipoDebito.trim().equalsIgnoreCase("")){
peloMenosUmParametroInformado = true;
filtroDebitoTipo.adicionarParametro(new ParametroSimples(FiltroDebitoTipo.ID,idTipoDebito));
}
//se o usu�rio informar a descri��o do tipo do d�bito
if(descricao != null && !descricao.trim().equalsIgnoreCase("")){
peloMenosUmParametroInformado = true;
if (tipoPesquisa != null && tipoPesquisa.equals(ConstantesSistema.TIPO_PESQUISA_COMPLETA.toString())) {
filtroDebitoTipo.adicionarParametro(new ComparacaoTextoCompleto(FiltroDebitoTipo.DESCRICAO,descricao));
} else {
filtroDebitoTipo.adicionarParametro(new ComparacaoTexto(FiltroDebitoTipo.DESCRICAO,descricao));
}
}
//Caso o usu�rio indicar os tipos de financiamentos para pesquisar os tipos de d�bito
if(idTipoFinanciamento != null && !idTipoFinanciamento[0].equals("-1")
&&idTipoFinanciamento.length >0 ){
//Indica que o usu�rio informou um par�metro para pesquisar
peloMenosUmParametroInformado = true;
//La�o para inserir no filtro todos os tipos de financiamentos informados
for(int i=0; i< idTipoFinanciamento.length; i++ ){
if(! (new Integer(idTipoFinanciamento[i]).equals(new Integer(ConstantesSistema.NUMERO_NAO_INFORMADO)))){
if(idTipoFinanciamento.length==1){
filtroDebitoTipo.adicionarParametro(new ParametroSimples(FiltroDebitoTipo.FINANCIAMENTO_TIPO,idTipoFinanciamento[i]));
}else{
if( i == 0 ){
filtroDebitoTipo.adicionarParametro(new ParametroSimples(FiltroDebitoTipo.FINANCIAMENTO_TIPO,idTipoFinanciamento[i], ParametroSimples.CONECTOR_OR,idTipoFinanciamento.length ));
}else{
if( i == (idTipoFinanciamento.length - 1) ){
filtroDebitoTipo.adicionarParametro(new ParametroSimples(FiltroDebitoTipo.FINANCIAMENTO_TIPO,idTipoFinanciamento[i]));
}else{
filtroDebitoTipo.adicionarParametro(new ParametroSimples(FiltroDebitoTipo.FINANCIAMENTO_TIPO,idTipoFinanciamento[i], ParametroSimples.CONECTOR_OR));
}
}
}
}
}
}
//Caso o usu�rio indicar os tipos de financiamentos para pesquisar os tipos de d�bito
if(idLancamentoItemContabil != null && !idLancamentoItemContabil[0].equals("-1")
&& idLancamentoItemContabil.length >0){
//Indica que o usu�rio informou um par�metro para pesquisar
peloMenosUmParametroInformado = true;
//La�o para inserir no filtro todos os tipos de financiamentos informados
for(int i=0; i< idLancamentoItemContabil.length; i++ ){
if(! (new Integer(idLancamentoItemContabil[i]).equals(new Integer(ConstantesSistema.NUMERO_NAO_INFORMADO)))){
if(idLancamentoItemContabil.length==1){
filtroDebitoTipo.adicionarParametro(new ParametroSimples(FiltroDebitoTipo.LANCAMENTO_ITEM_CONTABIL_ID,idLancamentoItemContabil[i]));
}else{
if( i == 0 ){
filtroDebitoTipo.adicionarParametro(new ParametroSimples(FiltroDebitoTipo.LANCAMENTO_ITEM_CONTABIL_ID,idLancamentoItemContabil[i], ParametroSimples.CONECTOR_OR,idLancamentoItemContabil.length ));
}else{
if( i == (idLancamentoItemContabil.length - 1) ){
filtroDebitoTipo.adicionarParametro(new ParametroSimples(FiltroDebitoTipo.LANCAMENTO_ITEM_CONTABIL_ID,idLancamentoItemContabil[i]));
}else{
filtroDebitoTipo.adicionarParametro(new ParametroSimples(FiltroDebitoTipo.LANCAMENTO_ITEM_CONTABIL_ID,idLancamentoItemContabil[i], ParametroSimples.CONECTOR_OR));
}
}
}
}
}
}
//se o usu�rio informar o intervalo inicial do valor de limite
if (intervaloValorLimiteInicial != null && !intervaloValorLimiteInicial.trim().equalsIgnoreCase("")) {
//se o usu�rio n�o informar o intervalo final do valor de limite
if(intervaloValorLimiteFinal == null || intervaloValorLimiteFinal.trim().equalsIgnoreCase("")){
//o intervalo final do valor de limite vai receber o valor do intervalo inicial
intervaloValorLimiteFinal = intervaloValorLimiteInicial;
//se o usu�rio informar o intervalo final do valor de limite
}else{
//se o intervalo final do valor de limite for menor que o inicial
if((Util.formatarMoedaRealparaBigDecimal(intervaloValorLimiteInicial)).doubleValue() > ( (Util.formatarMoedaRealparaBigDecimal(intervaloValorLimiteFinal))).doubleValue()){
//levanta a exce��o para a pr�xima camada
throw new ActionServletException("atencao.valorlimitefinal.menorque");
}
}
//se o usu�rio n�o informar o intervalo inicial do valor de limite
} else{
//seta o intervalo final do valor de limite para null
intervaloValorLimiteFinal = null;
}
//se o intervalo final do valor de limite n�o estiver nulo ou em branco
if (intervaloValorLimiteFinal != null && !intervaloValorLimiteFinal.trim().equalsIgnoreCase("")) {
peloMenosUmParametroInformado = true;
//seta no filtro para retornar os tipos de d�bito entre os valores informados
filtroDebitoTipo.adicionarParametro(new MaiorQue(FiltroDebitoTipo.VALOR_LIMITE, Util.formatarMoedaRealparaBigDecimal(intervaloValorLimiteInicial), ParametroSimples.CONECTOR_AND));
filtroDebitoTipo.adicionarParametro(new MenorQue(FiltroDebitoTipo.VALOR_LIMITE, Util.formatarMoedaRealparaBigDecimal(intervaloValorLimiteFinal)));
}
// erro caso o usu�rio mandou filtrar sem nenhum par�metro
if (!peloMenosUmParametroInformado) {
throw new ActionServletException("atencao.filtro.nenhum_parametro_informado");
}
//carrega os objetos necess�rios da pesquisa
filtroDebitoTipo.adicionarCaminhoParaCarregamentoEntidade("financiamentoTipo");
filtroDebitoTipo.adicionarCaminhoParaCarregamentoEntidade("lancamentoItemContabil");
//pesquisa a cole��o de tipos d�bitos, de acordo com os par�metros existentes no filtro
//Collection colecaoTipoDebitos = fachada.pesquisar(filtroDebitoTipo,DebitoTipo.class.getName());
Map resultado = controlarPaginacao(httpServletRequest, retorno,
filtroDebitoTipo, DebitoTipo.class.getName());
Collection colecaoTipoDebitos = (Collection) resultado.get("colecaoRetorno");
retorno = (ActionForward) resultado.get("destinoActionForward");
//se a pesquisa n�o retornou nenhum tipo de d�bito
if (colecaoTipoDebitos == null || colecaoTipoDebitos.isEmpty()) {
throw new ActionServletException("atencao.pesquisa.nenhumresultado", null, "Tipo de D�bito");
//se a pesquisa retornou uma quantidade de registros maior que a permitida para a pesquisa
} else if (colecaoTipoDebitos.size() > ConstantesSistema.NUMERO_MAXIMO_REGISTROS_PESQUISA) {
//muitos registros encontrados
throw new ActionServletException("atencao.pesquisa.muitosregistros");
} else {
//manda a cole��o de tipos de d�bitos pesquisados para a p�gian de sucesso na sess�o
sessao.setAttribute("colecaoTipoDebitos", colecaoTipoDebitos);
}
//retorna o mapeamento contido na vari�vel retorno
return retorno;
}
}