/**
   * enlista las actividades por el estado seleccionado y el grupo actual refresca el datatable
   *
   * @param event
   */
  public void onNodeSelect(NodeSelectEvent event) {

    int j = 0;

    activi = new Actividad();
    activi.setEstado(event.getTreeNode().toString());
    actividad = consultarActividades(idusu, activi);
    actividades = new ArrayList<Actividad>();
    if (actividad.getActividads().isEmpty()) {
      actividades = null;
    }
    Grupo g = new Grupo();
    for (int i = 0; i < grupos.size(); i++) {
      if (grupos.get(i).getNombre().compareTo(GrupoPanel) == 0) {
        g = grupos.get(i);
        indice = i;
      }
    }
    while (actividad.getActividads().size() > j) {
      act = actividad.getActividads().get(j);
      if (act.getIdInstancia().getIdPeriodoGrupoProceso().getIdGrupo().getId().compareTo(g.getId())
          != 0) {
      } else {
        actividades.add(act);
      }

      j++;
    }
  }
  /**
   * Cambio de pestaña de los grupo, enlista las actividades por el grupo seleccionado y refresca el
   * datatable
   *
   * @param event
   */
  public void onTabChange(TabChangeEvent event) {
    activi = new Actividad();
    Grupo gSeleccionado = (Grupo) event.getData();
    grupoSeleccionado = gSeleccionado;
    activi.setEstado(estadoSeleccionado.getData().toString());
    actividad = consultarActividades(idusu, activi);
    actividades = new ArrayList<Actividad>();
    if (actividad.getActividads().isEmpty()) {
      actividades = null;
    }
    Grupo g = new Grupo();
    for (int i = 0; i < grupos.size(); i++) {
      if (grupos.get(i).getNombre().compareTo(gSeleccionado.getNombre()) == 0) {
        g = grupos.get(i);
        indice = i;
      }
    }

    int j = 0;

    while (actividad.getActividads().size() > j) {
      act = actividad.getActividads().get(j);
      if (act.getIdInstancia().getIdPeriodoGrupoProceso().getIdGrupo().getId().compareTo(g.getId())
          == 0) {
        actividades.add(act);
      }

      j++;
    }
  }
  /**
   * cambia el estado de la actividad pendiente a abierta, inicia la actividad y refresca el
   * datatable
   *
   * @param evento
   */
  public void cambiarEstado(CloseEvent evento) {

    resul = iniciarActividad(act, sesion_actual);
    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(resul.getEstatus()));
    int j = 0;
    activi = new Actividad();
    activi.setEstado(estadoSeleccionado.toString());
    actividad = consultarActividades(idusu, activi);
    actividades = new ArrayList<Actividad>();
    if (actividad.getActividads().isEmpty()) {
      actividades = null;
    }
    while (actividad.getActividads().size() > j) {
      act = actividad.getActividads().get(j);
      actividades.add(act);
      j++;
    }
  }
  /** se toma la condicion, la sesion y la actividad y se cierra la actividad a dedo */
  public void cerraractividad() {

    ses = new Sesion();
    ses.setIdUsuario(idusu);
    cond = new Condicion();
    cond.setEstado("activa");
    resul = finalizarActividad(act, ses, cond);

    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(resul.getEstatus()));
    int j = 0;
    activi = new Actividad();
    activi.setEstado(estadoSeleccionado.toString());
    actividad = consultarActividades(idusu, activi);
    actividades = new ArrayList<Actividad>();
    if (actividad.getActividads().isEmpty()) {
      actividades = null;
    }
    while (actividad.getActividads().size() > j) {
      act = actividad.getActividads().get(j);
      actividades.add(act);
      j++;
    }
  }
  /**
   * @param actividadxx
   * @return
   * @throws DatatypeConfigurationException
   */
  public String sombreadoc(Actividad actividadxx) throws DatatypeConfigurationException {
    if (actividadxx != null) {
      WrActividad actividadx = consultarActividad(actividadxx);
      if (actividadx.getActividads().get(0).getFechaCierre() != null
          && actividadx.getActividads().get(0).getFechaApertura() != null) {
        XMLGregorianCalendar FC1;
        XMLGregorianCalendar FA1;
        FC1 = actividadx.getActividads().get(0).getFechaCierre();
        FA1 = actividadx.getActividads().get(0).getFechaApertura();
        long duracion = actividadx.getActividads().get(0).getDuracion().longValue();
        equivalencia = actividadx.getActividads().get(0).getIdEquivalenciasTiempo().getNombre();
        UT = actividadx.getActividads().get(0).getIdEquivalenciasTiempo().getMinutos();
        long f = FC1.toGregorianCalendar().getTimeInMillis();
        long f2 = FA1.toGregorianCalendar().getTimeInMillis();
        long resta = f - f2;

        if ("Minuto".equals(equivalencia)) {
          long minutos = resta / (60 * 1000);
          if (minutos > duracion) {
            return "background-color:  #FF8888;";
          }
        }
        if ("Hora".equals(equivalencia)) {
          long horas = resta / (60 * 60 * 1000);
          if (horas > duracion) {
            return "background-color:  #FF8888;";
          }
        }
        if ("Dia".equals(equivalencia)) {
          long dias = resta / (24 * 60 * 60 * 1000);
          if (dias > duracion) {
            return "background-color:  #FF8888;";
          }
        }
        if ("Semana".equals(equivalencia)) {
          long semanas = resta / (7 * 24 * 60 * 60 * 1000);
          if (semanas > duracion) {
            return "background-color:  #FF8888;";
          }
        }
      }
      return " background-color: white";
    }
    return " background-color: white;";
  }
  /**
   * @param actividadxx
   * @return
   * @throws DatatypeConfigurationException
   */
  public String sombreado(Actividad actividadxx) throws DatatypeConfigurationException {
    if (actividadxx != null) {
      WrActividad actividadx = consultarActividad(actividadxx);
      if (actividadx.getActividads().get(0).getFechaApertura() != null) {
        XMLGregorianCalendar FC1;
        XMLGregorianCalendar FA1;
        XMLGregorianCalendar FAA;
        FC1 = actividadx.getActividads().get(0).getFechaApertura();
        GregorianCalendar gregorianCalendar = new GregorianCalendar();
        DatatypeFactory datatypeFactory = DatatypeFactory.newInstance();
        FA1 = datatypeFactory.newXMLGregorianCalendar(gregorianCalendar);
        long duracion = actividadx.getActividads().get(0).getDuracion().longValue();
        equivalencia = actividadx.getActividads().get(0).getIdEquivalenciasTiempo().getNombre();
        UT = actividadx.getActividads().get(0).getIdEquivalenciasTiempo().getMinutos();
        long f = FC1.toGregorianCalendar().getTimeInMillis();
        long f2 = FA1.toGregorianCalendar().getTimeInMillis();
        long resta = f2 - f;

        if ("Minuto".equals(equivalencia)) {
          long minutos = resta / (60 * 1000);
          if (minutos > duracion) {
            return "background-color:  #FF8888";
          } else if (actividadx.getActividads().get(0).getFechaAlerta() != null) {
            FAA = actividadx.getActividads().get(0).getFechaAlerta();
            long f3 = FAA.toGregorianCalendar().getTimeInMillis();
            long resta2 = f2 - f3;
            if (resta2 > resta) {
              return "background-color: orange;";
            }
            return "background-color: white";
          }
        }

        if ("Hora".equals(equivalencia)) {
          long horas = resta / (60 * 60 * 1000);
          if (horas > duracion) {
            return "background-color:  #FF8888";
          } else if (actividadx.getActividads().get(0).getFechaAlerta() != null) {
            FAA = actividadx.getActividads().get(0).getFechaAlerta();
            long f3 = FAA.toGregorianCalendar().getTimeInMillis();
            long resta2 = f2 - f3;
            if (resta2 > resta) {
              return "background-color: orange;";
            }
            return "background-color: white";
          }
        }
        if ("Dia".equals(equivalencia)) {
          long dias = resta / (24 * 60 * 60 * 1000);
          if (dias > duracion) {
            return "background-color:  #FF8888";
          } else if (actividadx.getActividads().get(0).getFechaAlerta() != null) {
            FAA = actividadx.getActividads().get(0).getFechaAlerta();
            long f3 = FAA.toGregorianCalendar().getTimeInMillis();
            long resta2 = f2 - f3;
            if (resta2 > resta) {
              return "background-color: orange;";
            }
            return "background-color: white";
          }
        }
        if ("Semana".equals(equivalencia)) {
          long semanas = resta / (7 * 24 * 60 * 60 * 1000);
          if (semanas > duracion) {
            return "background-color:  #FF8888";
          } else if (actividadx.getActividads().get(0).getFechaAlerta() != null) {
            FAA = actividadx.getActividads().get(0).getFechaAlerta();
            long f3 = FAA.toGregorianCalendar().getTimeInMillis();
            long resta2 = f2 - f3;
            if (resta2 > resta) {
              return "background-color: orange;";
            }
            return "background-color: white";
          }
        }
      }
      return " background-color: white;";
    }
    return " background-color: white;";
  }
  /**
   * enlista los estados, muestra por defecto las actividades el primer estado que conigue las
   * actividades y del primer grupo de consigue.
   */
  @PostConstruct
  public void init() {

    if (verificarLogueo()) {
      Redireccionar();
    } else {
      estact = new DefaultTreeNode("root", null);
      idusu = new Usuario();
      FacesContext fc = FacesContext.getCurrentInstance();
      ExternalContext ec = fc.getExternalContext();
      HttpSession sesion = (HttpSession) ec.getSession(true);
      sesion_actual = (Sesion) (sesion.getAttribute("Sesion"));
      idusu = (Usuario) (sesion.getAttribute("Usuario"));
      String icono;
      // bande=consultarBandejas(idusu);
      estados = buscarEstados();
      int i = 0;

      while (estados.size() > i) {
        if ("abierta".equals(estados.get(i))) {
          icono = "s";
        } else if ("pendiente".equals(estados.get(i))) {
          icono = "i";
        } else if ("cerrada".equals(estados.get(i))) {
          icono = "t";
        } else {
          icono = "j";
        }
        TreeNode inbox = new DefaultTreeNode(icono, estados.get(i), estact);
        i++;
      }

      grupos = this.gruposUsuario(idusu);
      estadoSeleccionado = estact.getChildren().get(0);
      indice = 0;
      estact.getChildren().get(0).setSelected(true);
      int j = 0;
      activi = new Actividad();
      activi.setEstado(estados.get(j));
      actividad = consultarActividades(idusu, activi);
      actividades = new ArrayList<Actividad>();
      grupoSeleccionado = grupos.get(0);
      GrupoPanel = grupoSeleccionado.getNombre();
      if (actividad.getActividads().isEmpty()) {
        actividades = null;
      }
      while (actividad.getActividads().size() > j) {
        act = actividad.getActividads().get(j);
        if (act.getIdInstancia()
                .getIdPeriodoGrupoProceso()
                .getIdGrupo()
                .getId()
                .compareTo(grupoSeleccionado.getId())
            != 0) {
        } else {
          actividades.add(act);
        }

        j++;
      }
    }
  }