@SkipValidation
  public String examinarSolicitud() {

    if (!sessionValidate()) return INPUT;
    session = ActionContext.getContext().getSession();
    Usuario user = (Usuario) session.get("usuario");
    solicitud = (SolicitudSuscripcion) read(solicitud, id_solicitud_suscripcion);
    // Valida que un trol quiera acceder a las solicitudes de otros entes
    if (!detalles_respuesta) {
      if (user.getId_ente() != solicitud.getId_ente_proveedor()) return INPUT;
    } else {
      if (user.getId_ente() != solicitud.getId_ente_solicitante()) return INPUT;
    }
    // Guardo que la solicitud ya ha sido revisada y por quien fue leida
    if (!solicitud.isLeido()) {
      solicitud.setLeido(true);
      solicitud.setId_usuario(user.getId_usuario());
      update(solicitud, id_solicitud_suscripcion);
    }
    if (!detalles_respuesta) {
      detalles_solicitud = true;
      ente = (Ente) read(ente, solicitud.getId_ente_solicitante());
    } else {
      ente = (Ente) read(ente, solicitud.getId_ente_proveedor());
    }
    servicio = (ServicioInformacion) read(servicio, solicitud.getId_servicio_informacion());
    return SUCCESS;
  }
  @SkipValidation
  public String listaSuscripcionesPendientes() {

    if (!sessionValidate()) return INPUT;
    // Lista solicitudes en base a las no leidas, pendientes,
    session = ActionContext.getContext().getSession();
    Usuario user = (Usuario) session.get("usuario");
    solicitudes =
        (List<SubscriptionRequest>) getSolicitudesSuscripcionPendientes(user.getId_ente(), ASC);
    ListarSuscricionesPendientes = true;
    return SUCCESS;
  }
  private void prepareRequest() {

    session = ActionContext.getContext().getSession();
    Usuario user = (Usuario) session.get("usuario");
    ente = (Ente) session.get("ente");
    solicitud.setId_ente_proveedor(
        ((ServicioInformacion) read(servicio, id_servicio)).getId_ente());
    solicitud.setId_ente_solicitante(user.getId_ente());
    solicitud.setId_servicio_informacion(id_servicio);
    solicitud.setId_usuario(user.getId_usuario());
    solicitud.setSentencia(PENDIENTE);
  }
  @SkipValidation
  public String listarSolicitudesAceptadasRechazadas() {

    if (!sessionValidate()) return INPUT;
    // Lista solicitudes en base a las no leidas, pendientes,
    session = ActionContext.getContext().getSession();
    Usuario user = (Usuario) session.get("usuario");
    setSolicitudesRespondidas(
        (List<SubscriptionResponse>)
            getlistaSolicitudesAceptadasRechazadas(user.getId_ente(), ASC));
    ListarSuscricionesAceptadasRechazadas = true;
    return SUCCESS;
  }
  // TODO Enviar notificación por correo, falta colocar el mensaje registro
  // exitoso para la vista
  @SkipValidation
  public String aprobarRechazarSuscripcion() {

    if (!sessionValidate()) return INPUT;
    boolean err = false;
    String motivo_proveedor;
    int decision;
    // validar datos y guardar
    motivo_proveedor = solicitud.getMotivo_proveedor();
    decision = solicitud.getSentencia();
    session = ActionContext.getContext().getSession();
    Usuario user = (Usuario) session.get("usuario");
    if (solicitud.getMotivo_proveedor().trim().isEmpty()) {
      addFieldError(
          "motivo_proveedor",
          error.getProperties().getProperty("error.suscripcion.motivo_proveedor"));
      err = true;
    } else if (!solicitud.getMotivo_proveedor().toUpperCase().matches(REGEX_TITLE)) {
      addFieldError("motivo_proveedor", error.getProperties().getProperty("error.regex.title"));
      err = true;
    }
    if (!(solicitud.getSentencia() >= 1 && solicitud.getSentencia() <= 2)) {
      addFieldError("sentencia", error.getProperties().getProperty("error.suscripcion.sentencia"));
      err = true;
    }
    solicitud = (SolicitudSuscripcion) read(solicitud, id_solicitud_suscripcion);
    solicitud.setSentencia(decision);
    solicitud.setMotivo_proveedor(motivo_proveedor);
    ente = (Ente) read(ente, solicitud.getId_ente_solicitante());
    servicio = (ServicioInformacion) read(servicio, solicitud.getId_servicio_informacion());
    if (err) return INPUT;
    // Valida que un trol quiera acceder a las solicitudes de otros entes
    if (user.getId_ente() != solicitud.getId_ente_proveedor()) return INPUT;
    // Valida que la solicitud.sentencia sea igual a cero (0 = pendiente).
    if (solicitud.getSentencia() == 0) return INPUT;
    // Si la desición es ACEPTADO se crea el registro suscrito
    if (decision == 1) {
      Suscrito suscrito = new Suscrito();
      suscrito.setId_ente(solicitud.getId_ente_solicitante());
      suscrito.setId_servicio_informacion(solicitud.getId_servicio_informacion());
      create(suscrito);
    }
    // Coloco a false leido para utilizarlo con el ente solicitante, en las
    // notificaciones.
    solicitud.setLeido(false);
    // Actualiza la solicitud de suscripción
    update(solicitud, solicitud.getId_solicitud_suscripcion());
    addActionMessage("EL VEREDICTO DE LA SOLICITUD DE SUSCRIPCIÓN HA SIDO PROCESADA CORRECTAMENTE");
    aprobarRechazar = false;
    return SUCCESS;
  }
  @SkipValidation
  public String prepararAprobarRechazarSuscripcion() {

    if (!sessionValidate()) return INPUT;
    // Lee los detalles de la suscripción
    session = ActionContext.getContext().getSession();
    Usuario user = (Usuario) session.get("usuario");
    solicitud = (SolicitudSuscripcion) read(solicitud, id_solicitud_suscripcion);
    // Valida que un trol quiera acceder a las solicitudes de otros entes
    if (user.getId_ente() != solicitud.getId_ente_proveedor()) return INPUT;
    // Valida que la solicitud.sentencia sea igual a cero (0 = pendiente).
    if (!(solicitud.getSentencia() == 0)) return INPUT;
    ente = (Ente) read(ente, solicitud.getId_ente_solicitante());
    servicio = (ServicioInformacion) read(servicio, solicitud.getId_servicio_informacion());
    // Variable necesaria para la vista.
    aprobarRechazar = true;
    return SUCCESS;
  }