package gcom.gui.cadastro.cliente;
import gcom.cadastro.cliente.Cliente;
import gcom.cadastro.cliente.ClienteTipo;
import gcom.cadastro.cliente.FiltroCliente;
import gcom.cadastro.cliente.bean.PesquisarClienteResponsavelSuperiorHelper;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.util.ConstantesSistema;
import gcom.util.filtro.ComparacaoTexto;
import gcom.util.filtro.ComparacaoTextoCompleto;
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;
import org.apache.struts.validator.DynaValidatorForm;
/**
* Realiza a pesquisa de responsavel superior de acordo com os par�metros
* informados
*
* @author S�vio Luiz
* @created 25 de Abril de 2005
*/
public class PesquisarResponsavelSuperiorAction extends GcomAction {
/**
* Description of the Method
*
* @param actionMapping
* Description of the Parameter
* @param actionForm
* Description of the Parameter
* @param httpServletRequest
* Description of the Parameter
* @param httpServletResponse
* Description of the Parameter
* @return Description of the Return Value
*/
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = actionMapping
.findForward("listaResponsavelSuperior");
// Mudar isso quando tiver esquema de seguran�a
HttpSession sessao = httpServletRequest.getSession(false);
DynaValidatorForm pesquisarActionForm = (DynaValidatorForm) actionForm;
Fachada fachada = Fachada.getInstancia();
boolean peloMenosUmParametroInformado = false;
// Recupera os par�metros do form
String nome = (String) pesquisarActionForm.get("nome");
String tipoPesquisa = (String) pesquisarActionForm.get("tipoPesquisa");
String cnpj = (String) pesquisarActionForm.get("cnpj");
String idEsferaPoder = (String) pesquisarActionForm
.get("idEsferaPoder");
String indicadorUso = (String) pesquisarActionForm.get("indicadorUso");
if (nome == null || nome.equalsIgnoreCase("")) {
nome = (String) sessao.getAttribute("nome");
}
if (cnpj == null || cnpj.equalsIgnoreCase("")) {
cnpj = (String) sessao.getAttribute("cnpj");
}
if (tipoPesquisa == null || tipoPesquisa.equalsIgnoreCase("")) {
tipoPesquisa = (String) sessao.getAttribute("tipoPesquisa");
}
if (idEsferaPoder == null || idEsferaPoder.equalsIgnoreCase("")) {
idEsferaPoder = (String) sessao.getAttribute("idEsferaPoder");
}
if (indicadorUso == null || indicadorUso.equalsIgnoreCase("")) {
indicadorUso = (String) sessao.getAttribute("indicadorUso");
}
FiltroCliente filtroCliente = new FiltroCliente();
filtroCliente.setCampoOrderBy(FiltroCliente.NOME);
PesquisarClienteResponsavelSuperiorHelper helper = new PesquisarClienteResponsavelSuperiorHelper();
// Insere os par�metros informados no filtro
if (nome != null && !nome.trim().equalsIgnoreCase("")) {
peloMenosUmParametroInformado = true;
helper.setNome(nome);
if (tipoPesquisa != null
&& tipoPesquisa
.equals(ConstantesSistema.TIPO_PESQUISA_COMPLETA
.toString())) {
helper
.setTipoPesquisa(ConstantesSistema.TIPO_PESQUISA_COMPLETA);
filtroCliente.adicionarParametro(new ComparacaoTextoCompleto(
FiltroCliente.NOME, nome));
} else {
helper.setTipoPesquisa(ConstantesSistema.TIPO_PESQUISA_INICIAL);
filtroCliente.adicionarParametro(new ComparacaoTexto(
FiltroCliente.NOME, nome));
}
}
if (cnpj != null && !cnpj.trim().equalsIgnoreCase("")) {
peloMenosUmParametroInformado = true;
helper.setCnpj(cnpj);
filtroCliente.adicionarParametro(new ParametroSimples(
FiltroCliente.CNPJ, cnpj));
}
if (idEsferaPoder != null
&& !idEsferaPoder.trim().equals(
"" + ConstantesSistema.NUMERO_NAO_INFORMADO)) {
peloMenosUmParametroInformado = true;
helper.setIdEsferaPoder(new Integer(idEsferaPoder));
filtroCliente.adicionarParametro(new ParametroSimples(
FiltroCliente.ESFERA_PODER_ID, idEsferaPoder));
}
if (indicadorUso != null && !indicadorUso.trim().equals("")) {
peloMenosUmParametroInformado = true;
helper.setIndicadorUso(new Short(indicadorUso));
filtroCliente.adicionarParametro(new ParametroSimples(
FiltroCliente.INDICADOR_USO, indicadorUso));
}
filtroCliente.adicionarParametro(new ParametroSimples(
FiltroCliente.TIPOCLIENTE_IPFJ,
ClienteTipo.INDICADOR_PESSOA_JURIDICA));
// filtroCliente.adicionarParametro(new ParametroSimples(
// FiltroCliente.INDICADOR_USO,
// ConstantesSistema.INDICADOR_USO_ATIVO));
// Erro caso o usu�rio mandou filtrar sem nenhum par�metro
Collection responsavelSuperiores = null;
// Aciona o controle de pagina��o para que sejam pesquisados apenas
// os registros que aparecem na p�gina
if (sessao.getAttribute("pesquisaSuperior") != null
&& !sessao.getAttribute("pesquisaSuperior").equals("")) {
// 1� Passo - Pegar o total de registros atrav�s de um count
// da
// consulta que aparecer� na tela
Integer totalRegistros = fachada
.pesquisarClienteResponsavelSuperiorParaPaginacaoCount(helper);
// 2� Passo - Chamar a fun��o de Pagina��o passando o total
// de registros
retorno = this.controlarPaginacao(httpServletRequest, retorno,
totalRegistros);
// 3� Passo - Obter a cole��o da consulta que aparecer� na
// tela
// passando o numero de paginas da pesquisa que est� no
// request
responsavelSuperiores = fachada
.pesquisarClienteResponsavelSuperiorParaPaginacao(helper,
(Integer) httpServletRequest
.getAttribute("numeroPaginasPesquisa"));
} else {
Map resultado = controlarPaginacao(httpServletRequest, retorno,
filtroCliente, Cliente.class.getName());
responsavelSuperiores = (Collection) resultado
.get("colecaoRetorno");
retorno = (ActionForward) resultado.get("destinoActionForward");
}
if (responsavelSuperiores == null || responsavelSuperiores.isEmpty()) {
// Nenhuma empresa cadastrada
throw new ActionServletException(
"atencao.pesquisa.nenhumresultado", null, "cliente");
} else {
if (peloMenosUmParametroInformado) {
// Coloca a cole��o na sess�o
sessao.setAttribute("colecaoResponsavelSuperiores",
responsavelSuperiores);
sessao.setAttribute("nome", nome);
sessao.setAttribute("cnpj", cnpj);
sessao.setAttribute("idEsferaPoder", idEsferaPoder);
sessao.setAttribute("indicadorUso", indicadorUso);
sessao.setAttribute("tipoPesquisa", tipoPesquisa);
}
}
if (!peloMenosUmParametroInformado) {
throw new ActionServletException(
"atencao.filtro.nenhum_parametro_informado");
}
pesquisarActionForm.set("nome", "");
pesquisarActionForm.set("cnpj", "");
//Coloca na sessao o parametro tipoConsulta
String tipoConsulta = httpServletRequest.getParameter("tipoConsulta");
if(tipoConsulta == null || tipoConsulta.equals("")){
tipoConsulta = (String) sessao.getAttribute("tipoConsulta");
}
if(tipoConsulta != null && !tipoConsulta.equals("")){
sessao.setAttribute("tipoConsulta", tipoConsulta);
}else{
sessao.removeAttribute("tipoConsulta");
}
return retorno;
}
}