public void finalizarEncuesta() throws DAOException {

    if (irPreguntaSiguiente()) {

      encuestadoDto.setEstadoDto(
          ApplicationHelper.obtenerParametroPorId(
              ConstantesClima.Parametro.ENCUESTADO_ESTADO_TERMINADO));
      encuestadoDto.setEncuestaDto(dto);

      encuestadoManager.editar(encuestadoDto);

      // validar si la encuesta tiene aun pendientes de encuestar, sino se cierra la encuesta.
      List<EncuestadoDto> listEncuestados =
          encuestadoManager.obtenerEncuestadosNoTerminadosXEncuesta(dto);
      if (listEncuestados == null || listEncuestados.isEmpty()) {

        dto.setEstadoDto(
            ApplicationHelper.obtenerParametroPorId(
                ConstantesClima.Parametro.ENCUESTA_ESTADO_TERMINADO));
        manager.editar(dto);
      }
      RequestContext.getCurrentInstance().addCallbackParam("ok", true);

      try {
        this.lista = encuestadoManager.obtenerEncuestasxPersona(dtoFiltro, personaDto);
      } catch (DAOException ex) {
        logger.error("ERROR DE SISTEMA", ex);
        showError(ex.getMessage());
      }
    } else {
      RequestContext.getCurrentInstance().addCallbackParam("ok", false);
    }
  }
  public boolean irPreguntaSiguiente() throws DAOException {
    if (ConstantesClima.Parametro.PREGUNTA_TIPO_RESPUESTA_UNICA_HORIZONTAL.equals(
            preguntaDto.getTipoPreguntaDto().getId())
        || ConstantesClima.Parametro.PREGUNTA_TIPO_RESPUESTA_UNICA_VERTICAL.equals(
            preguntaDto.getTipoPreguntaDto().getId())
        || ConstantesClima.Parametro.PREGUNTA_TIPO_RESPUESTA_UNICA_DESPLEGABLE.equals(
            preguntaDto.getTipoPreguntaDto().getId())) {
      if (preguntaDto.getEsObligatorio() && preguntaDto.getOpcionSeleted() == null) {
        showError(
            UtilCore.Internacionalizacion.getMensajeInternacional(
                "encuestado.mensaje.validacion.pregunta"));
        return false;
      }
      if (preguntaDto.getOpcionSeleted() != null) {
        RespuestaDto respuestaDto = new RespuestaDto();
        for (int i = 0; i < preguntaDto.getListaOpcionesResp().size(); i++) {
          if (preguntaDto
              .getOpcionSeleted()
              .equals(preguntaDto.getListaOpcionesResp().get(i).getId())) {

            List<RespuestaDto> listResp =
                respuestaManager.obtenerRespuestaxPreguntaEncuestado(preguntaDto, encuestadoDto);
            if (listResp != null && listResp.size() > 0) {
              respuestaDto = listResp.get(0);
              respuestaDto.setOpcionDto(preguntaDto.getListaOpcionesResp().get(i));
              respuestaManager.editar(respuestaDto);
            } else {
              respuestaDto.setOpcionDto(preguntaDto.getListaOpcionesResp().get(i));
              respuestaDto.setPreguntaDto(preguntaDto);
              respuestaDto.setEncuestadoDto(encuestadoDto);
              respuestaManager.nuevo(respuestaDto);
            }
            encuestadoDto.setPreguntaDto(preguntaDto);
            encuestadoDto.setNumeroPregunta(new Long(preguntaActual));
            encuestadoDto.setEncuestaDto(dto);
            encuestadoManager.editar(encuestadoDto);
            break;
          }
        }
      } else { // para las preguntas que no sean obligatorias, si es que habia algo en base de datos
        // se elimina
        List<RespuestaDto> listResp =
            respuestaManager.obtenerRespuestaxPreguntaEncuestado(preguntaDto, encuestadoDto);
        if (listResp != null && listResp.size() > 0) {
          respuestaManager.eliminar(listResp.get(0));
        }
      }
    } else if (ConstantesClima.Parametro.PREGUNTA_TIPO_RESPUESTA_MULTIPLE_HORIZONTAL.equals(
            preguntaDto.getTipoPreguntaDto().getId())
        || ConstantesClima.Parametro.PREGUNTA_TIPO_RESPUESTA_MULTIPLE_VERTICAL.equals(
            preguntaDto.getTipoPreguntaDto().getId())) {
      if (preguntaDto.getEsObligatorio()) {
        boolean sel = false;
        for (int i = 0; i < preguntaDto.getListaOpcionesResp().size(); i++) {
          // System.out.println("opcion: "+ i+ "==>
          // "+preguntaDto.getListaOpcionesResp().get(i).isSelected());
          if (preguntaDto.getListaOpcionesResp().get(i).isSelected()) {
            // showError(UtilCore.Internacionalizacion.getMensajeInternacional("encuestado.mensaje.validacion.pregunta"));
            sel = true;
            break;
          }
        }
        if (!sel) {
          showError(
              UtilCore.Internacionalizacion.getMensajeInternacional(
                  "encuestado.mensaje.validacion.pregunta"));
          return false;
        }
      }

      List<RespuestaDto> listResp =
          respuestaManager.obtenerRespuestaxPreguntaEncuestado(preguntaDto, encuestadoDto);
      for (int j = 0; j < listResp.size(); j++) {
        respuestaManager.eliminar(listResp.get(j));
      }

      for (int i = 0; i < preguntaDto.getListaOpcionesResp().size(); i++) {
        if (preguntaDto.getListaOpcionesResp().get(i).isSelected()) {
          RespuestaDto respuestaDto = new RespuestaDto();
          respuestaDto.setOpcionDto(preguntaDto.getListaOpcionesResp().get(i));
          respuestaDto.setPreguntaDto(preguntaDto);
          respuestaDto.setEncuestadoDto(encuestadoDto);
          respuestaManager.nuevo(respuestaDto);
        }
      }

      encuestadoDto.setPreguntaDto(preguntaDto);
      encuestadoDto.setNumeroPregunta(new Long(preguntaActual));
      encuestadoDto.setEncuestaDto(dto);
      encuestadoManager.editar(encuestadoDto);

    } else if (ConstantesClima.Parametro.PREGUNTA_TIPO_RESPUESTA_ABIERTA.equals(
        preguntaDto.getTipoPreguntaDto().getId())) {
      if (preguntaDto.getEsObligatorio()) {
        if (preguntaDto.getTextInserted() == null
            || preguntaDto.getTextInserted().trim().equals("")) {
          showError(
              UtilCore.Internacionalizacion.getMensajeInternacional(
                  "encuestado.mensaje.validacion.pregunta"));
          return false;
        }
      }

      RespuestaDto respuestaDto = new RespuestaDto();
      List<RespuestaDto> listResp =
          respuestaManager.obtenerRespuestaxPreguntaEncuestado(preguntaDto, encuestadoDto);
      if (listResp != null && listResp.size() > 0) {
        respuestaDto = listResp.get(0);
        respuestaDto.setValor(preguntaDto.getTextInserted());
        respuestaManager.editar(respuestaDto);
      } else {
        respuestaDto.setValor(
            preguntaDto.getTextInserted() == null ? "" : preguntaDto.getTextInserted());
        respuestaDto.setPreguntaDto(preguntaDto);
        respuestaDto.setEncuestadoDto(encuestadoDto);
        respuestaManager.nuevo(respuestaDto);
      }

      encuestadoDto.setPreguntaDto(preguntaDto);
      encuestadoDto.setNumeroPregunta(new Long(preguntaActual));
      encuestadoDto.setEncuestaDto(dto);
      encuestadoManager.editar(encuestadoDto);
    }

    if (preguntaActual < cantTotalPreguntas) {
      preguntaDto = this.dto.getListaPreguntas().get(preguntaActual);
      preguntaActual = preguntaActual + 1;
      cantTotalOpciones = preguntaDto.getListaOpcionesResp().size();
    }
    return true;
  }