/**
   * Pesquisa Cliente
   *
   * @author Leonardo Regis
   * @date 23/09/2006
   * @param form
   * @param os
   */
  private void pesquisarCliente(EfetuarCorteLigacaoAguaActionForm form, OrdemServico ordemServico) {
    // Filtro para carregar o Cliente
    FiltroClienteImovel filtroClienteImovel = new FiltroClienteImovel();

    // Comentado por Raphael Rossiter em 28/02/2007
    // filtroClienteImovel.adicionarParametro(new ParametroSimples(FiltroClienteImovel.IMOVEL_ID,
    // ordemServico.getRegistroAtendimento().getImovel().getId()));
    filtroClienteImovel.adicionarParametro(
        new ParametroSimples(FiltroClienteImovel.IMOVEL_ID, ordemServico.getImovel().getId()));

    filtroClienteImovel.adicionarParametro(
        new ParametroSimples(FiltroClienteImovel.CLIENTE_RELACAO_TIPO, ClienteRelacaoTipo.USUARIO));
    filtroClienteImovel.adicionarParametro(new ParametroNulo(FiltroClienteImovel.DATA_FIM_RELACAO));
    filtroClienteImovel.adicionarCaminhoParaCarregamentoEntidade("cliente");

    Collection colecaoClienteImovel =
        this.getFachada().pesquisar(filtroClienteImovel, ClienteImovel.class.getName());
    if (colecaoClienteImovel != null && !colecaoClienteImovel.isEmpty()) {

      ClienteImovel clienteImovel = (ClienteImovel) colecaoClienteImovel.iterator().next();
      Cliente cliente = clienteImovel.getCliente();

      String documento = "";
      if (cliente.getCpf() != null && !cliente.getCpf().equals("")) {
        documento = cliente.getCpfFormatado();
      } else {
        documento = cliente.getCnpjFormatado();
      }
      // Cliente Nome/CPF-CNPJ
      form.setClienteUsuario(cliente.getNome());
      form.setCpfCnpjCliente(documento);
    } else {
      throw new ActionServletException("atencao.naocadastrado", null, "Cliente");
    }
  }
  /**
   * @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
    ActionForward retorno = actionMapping.findForward("exibirManterGuiaDevolucaoCliente");

    HttpSession sessao = httpServletRequest.getSession(false);

    Fachada fachada = Fachada.getInstancia();

    ManterGuiaDevolucaoActionForm manterGuiaDevolucaoActionForm =
        (ManterGuiaDevolucaoActionForm) actionForm;

    // Limpa o atributo se o usuário voltou para o manter
    if (sessao.getAttribute("guiaDevolucaoAtualizar") != null) {
      sessao.removeAttribute("guiaDevolucaoAtualizar");
    }
    FiltroGuiaDevolucao filtroGuiaDevolucao = null;

    if (sessao.getAttribute("filtroGuiaDevolucaoCliente") != null) {
      filtroGuiaDevolucao = (FiltroGuiaDevolucao) sessao.getAttribute("filtroGuiaDevolucaoCliente");
      sessao.setAttribute("filtroGuiaDevolucaoCliente", filtroGuiaDevolucao);
      Cliente cliente = (Cliente) sessao.getAttribute("cliente");
      sessao.setAttribute("cliente", cliente);

      manterGuiaDevolucaoActionForm.setIdCliente(cliente.getId().toString());
      manterGuiaDevolucaoActionForm.setNomeCliente(cliente.getNome());

      // Verifica o tipo do cliente para setar o cpf ou cnpj e profissão
      // ou ramo atividade
      if (cliente.getClienteTipo().getId().equals(ClienteTipo.INDICADOR_PESSOA_FISICA)) {
        manterGuiaDevolucaoActionForm.setCpfCnpj(cliente.getCpfFormatado());
        if (cliente.getProfissao() != null) {
          manterGuiaDevolucaoActionForm.setProfissao(cliente.getProfissao().getDescricao());
        }
      } else {
        manterGuiaDevolucaoActionForm.setCpfCnpj(cliente.getCnpjFormatado());
        if (cliente.getRamoAtividade() != null) {
          manterGuiaDevolucaoActionForm.setRamoAtividade(cliente.getRamoAtividade().getDescricao());
        }
      }

    } else {
      filtroGuiaDevolucao = (FiltroGuiaDevolucao) sessao.getAttribute("filtroGuiaDevolucaoImovel");
      sessao.setAttribute("filtroGuiaDevolucaoImovel", filtroGuiaDevolucao);
      Imovel imovel = (Imovel) sessao.getAttribute("imovel");
      sessao.setAttribute("imovel", imovel);

      manterGuiaDevolucaoActionForm.setIdImovel(imovel.getId().toString());
      manterGuiaDevolucaoActionForm.setInscricao(imovel.getInscricaoFormatada());

      FiltroClienteImovel filtroClienteImovel = new FiltroClienteImovel();
      filtroClienteImovel.adicionarParametro(
          new ParametroSimples(FiltroClienteImovel.IMOVEL_ID, imovel.getId()));
      filtroClienteImovel.adicionarParametro(
          new ParametroSimples(
              FiltroClienteImovel.CLIENTE_RELACAO_TIPO, ClienteRelacaoTipo.USUARIO));
      filtroClienteImovel.adicionarParametro(
          new ParametroNulo(FiltroClienteImovel.DATA_FIM_RELACAO));
      filtroClienteImovel.adicionarCaminhoParaCarregamentoEntidade("cliente");

      Collection colecaoClienteImovel =
          fachada.pesquisar(filtroClienteImovel, ClienteImovel.class.getName());

      if (colecaoClienteImovel != null && !colecaoClienteImovel.isEmpty()) {
        ClienteImovel clienteImovel = (ClienteImovel) colecaoClienteImovel.iterator().next();
        manterGuiaDevolucaoActionForm.setNomeCliente(clienteImovel.getCliente().getNome());
      }

      if (imovel.getLigacaoAguaSituacao() != null) {
        manterGuiaDevolucaoActionForm.setSituacaoLigacaoAgua(
            imovel.getLigacaoAguaSituacao().getDescricao());
      }

      if (imovel.getLigacaoEsgotoSituacao() != null) {
        manterGuiaDevolucaoActionForm.setSituacaoLigacaoEsgoto(
            imovel.getLigacaoEsgotoSituacao().getDescricao());
      }

      retorno = actionMapping.findForward("exibirManterGuiaDevolucaoImovel");
    }

    // 1º Passo - Pegar o total de registros através de um count da consulta
    // que aparecerá na tela
    Integer totalRegistros = fachada.pesquisarGuiaDevolucaoCount(filtroGuiaDevolucao);

    // 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
    // Faz os carregamentos necessários
    filtroGuiaDevolucao.adicionarCaminhoParaCarregamentoEntidade(
        "registroAtendimento.imovel.localidade");
    filtroGuiaDevolucao.adicionarCaminhoParaCarregamentoEntidade(
        "registroAtendimento.imovel.setorComercial");
    filtroGuiaDevolucao.adicionarCaminhoParaCarregamentoEntidade(
        "registroAtendimento.imovel.quadra");
    //		filtroGuiaDevolucao
    //				.adicionarCaminhoParaCarregamentoEntidade("registroAtendimento.cliente");
    filtroGuiaDevolucao.adicionarCaminhoParaCarregamentoEntidade(
        "ordemServico.servicoTipo.debitoTipo");
    filtroGuiaDevolucao.adicionarCaminhoParaCarregamentoEntidade("localidade");
    filtroGuiaDevolucao.adicionarCaminhoParaCarregamentoEntidade("debitoTipo");
    filtroGuiaDevolucao.adicionarCaminhoParaCarregamentoEntidade("imovel.localidade");
    filtroGuiaDevolucao.adicionarCaminhoParaCarregamentoEntidade("imovel.setorComercial");
    filtroGuiaDevolucao.adicionarCaminhoParaCarregamentoEntidade("imovel.quadra");
    filtroGuiaDevolucao.adicionarCaminhoParaCarregamentoEntidade("cliente");
    filtroGuiaDevolucao.adicionarCaminhoParaCarregamentoEntidade("conta");
    filtroGuiaDevolucao.adicionarCaminhoParaCarregamentoEntidade("guiaPagamento.debitoTipo");
    filtroGuiaDevolucao.adicionarCaminhoParaCarregamentoEntidade(
        "debitoACobrarGeral.debitoACobrar.debitoTipo");
    filtroGuiaDevolucao.adicionarCaminhoParaCarregamentoEntidade("creditoTipo");
    filtroGuiaDevolucao.adicionarCaminhoParaCarregamentoEntidade("documentoTipo");
    filtroGuiaDevolucao.adicionarCaminhoParaCarregamentoEntidade("debitoCreditoSituacaoAtual");
    filtroGuiaDevolucao.adicionarCaminhoParaCarregamentoEntidade("debitoCreditoSituacaoAnterior");
    filtroGuiaDevolucao.adicionarCaminhoParaCarregamentoEntidade("lancamentoItemContabil");

    filtroGuiaDevolucao.setCampoOrderBy(
        FiltroGuiaDevolucao.CREDITO_TIPO_ID, FiltroGuiaDevolucao.DOCUMENTO_TIPO_ID);

    Collection colecaoGuiaDevolucao =
        fachada.pesquisarGuiaDevolucao(
            filtroGuiaDevolucao,
            ((Integer) httpServletRequest.getAttribute("numeroPaginasPesquisa")));

    filtroGuiaDevolucao.limparCamposOrderBy();

    if (colecaoGuiaDevolucao != null && !colecaoGuiaDevolucao.isEmpty()) {
      //			if (colecaoGuiaDevolucao.size() == 1
      //					&& (httpServletRequest.getParameter("page.offset") == null || httpServletRequest
      //							.getParameter("page.offset").equals("1"))) {
      //				if (httpServletRequest.getParameter("atualizar") != null) {
      //					retorno = actionMapping
      //							.findForward("exibirAtualizarGuiaDevolucao");
      //					GuiaDevolucao guiaDevolucao = (GuiaDevolucao) colecaoGuiaDevolucao
      //							.iterator().next();
      //					sessao.setAttribute("guiaDevolucao", guiaDevolucao);
      //				} else {
      //					httpServletRequest.setAttribute("colecaoGuiaDevolucao",
      //							colecaoGuiaDevolucao);
      //				}
      //			} else {
      httpServletRequest.setAttribute("colecaoGuiaDevolucao", colecaoGuiaDevolucao);
      //			}
    } else {
      // Nenhuma resolução de diretoria cadastrada
      throw new ActionServletException("atencao.pesquisa.nenhumresultado");
    }

    return retorno;
  }