private double minutosTardanzaRefrigerio(List<DetalleAsistencia> detalleAsistenciaList) {
   double tardanza = 0;
   for (int i = 1; i < detalleAsistenciaList.size(); i++) {
     DetalleAsistencia detalleEntrada = detalleAsistenciaList.get(i);
     if (detalleEntrada.isBandera() && detalleEntrada.getHoraEvento() != null) {
       tardanza +=
           tardanzaMin(
               FechaUtil.soloHora(detalleEntrada.getHoraEvento()),
               FechaUtil.soloHora(detalleEntrada.getHoraReferenciaTolerancia()));
     }
   }
   return tardanza;
 }
  private double minutosPermisos(List<DetalleAsistencia> detalles) {
    double total = 0;
    int posicion = 0;
    while (posicion < detalles.size()) {
      DetalleAsistencia permisoI = detalles.get(posicion);
      DetalleAsistencia permisoF = detalles.get(posicion + 1);

      total +=
          (permisoF.getHoraReferencia().getTime() - permisoI.getHoraReferencia().getTime())
              / (60 * 1000);

      posicion += 2;
    }
    return total;
  }
 private double minutosTardanza(List<DetalleAsistencia> detalleAsistenciaList, int conteo) {
   double tardanza = 0;
   DetalleAsistencia detalleEntrada = detalleAsistenciaList.get(0);
   if (detalleEntrada.getHoraEvento() == null) {
   } else if (detalleEntrada.isBandera()) {
     System.out.println(
         "HORA EVENTO: "
             + detalleEntrada.getHoraEvento()
             + " HORA TOLERANCIA "
             + detalleEntrada.getHoraReferenciaTolerancia()
             + " BANDERA: "
             + detalleEntrada.isBandera());
     tardanza +=
         tardanzaMin(
             FechaUtil.soloHora(detalleEntrada.getHoraEvento()),
             FechaUtil.soloHora(detalleEntrada.getHoraReferenciaTolerancia()));
   }
   return tardanza;
 }
  private double obtenerHorasLaboradas(List<DetalleAsistencia> detalles) {
    double totalHoras = 0;
    System.out.println("ENTRO A HORAS LABORADAS");
    int posicion = 0;
    while (posicion < detalles.size()) {
      System.out.println("ENTRO AL WHILE");
      DetalleAsistencia ingreso = detalles.get(posicion);
      DetalleAsistencia salida = detalles.get(posicion + 1);

      if (!(ingreso.isPermiso() || salida.isPermiso())) {
        System.out.println("ESTA OBTENIENDO HORAS");
        long salidaMilis;
        //                        = salida.getHoraEvento() == null ?
        // salida.getHoraReferencia().getTime() : salida.getHoraEvento().getTime();
        long ingresoMilis;
        //                        = ingreso.getHoraEvento() == null ?
        // ingreso.getHoraReferencia().getTime() : ingreso.getHoraEvento().getTime();
        if (salida.getHoraEvento() == null) {
          salidaMilis = salida.getHoraReferencia().getTime();
        } else if (FechaUtil.soloHora(salida.getHoraEvento()).compareTo(salida.getHoraReferencia())
            > 0) {
          salidaMilis = salida.getHoraReferencia().getTime();
        } else {
          salidaMilis = FechaUtil.soloHora(salida.getHoraEvento()).getTime();
        }
        if (ingreso.getHoraEvento() == null) {
          ingresoMilis = ingreso.getHoraReferencia().getTime();
        } else if (FechaUtil.soloHora(ingreso.getHoraEvento())
                .compareTo(ingreso.getHoraReferencia())
            < 0) {
          ingresoMilis = ingreso.getHoraReferencia().getTime();
        } else {
          ingresoMilis = FechaUtil.soloHora(ingreso.getHoraEvento()).getTime();
        }

        totalHoras += (salidaMilis - ingresoMilis);
        Date ingresod = new Date(ingresoMilis);
        Date salidad = new Date(salidaMilis);
        System.out.println("CONTEO DE: " + ingresod + " - " + salidad);
      }

      posicion += 2;
    }
    return totalHoras / (60 * 1000 * 60);
  }
  private int obtenerTipo(
      List<DetalleAsistencia> detalleAsistenciaList,
      int conteo,
      List<DetalleAsistencia> permisoList) {

    //        System.out.println("CONTEO: "+conteo.intValue());
    //        int marcacionesPendientes = 0;
    //        boolean hayTardanza = false;
    //        for (int i = 0; i < conteo; i++) {
    //            DetalleAsistencia detalle = detalleAsistenciaList.get(i);
    //
    //            if (detalle.getHoraEvento() == null) {
    //                if (!detalle.isPermiso()) {
    //                    marcacionesPendientes++;
    //                }
    //            } else {
    //                hayTardanza
    //                        = hayTardanza
    //                        || detalle.isBandera() &&
    // tardanzaMin(FechaUtil.soloHora(detalle.getHoraEvento()),
    // FechaUtil.soloHora(detalle.getHoraReferenciaTolerancia())) > 1;
    //            }
    //        }
    //
    //        if (marcacionesPendientes > 0) {
    //            return AnalizadorAsistencia.INASISTENCIA;
    //        } else if (hayTardanza) {
    //            return AnalizadorAsistencia.TARDANZA;
    //        } else {
    //            return AnalizadorAsistencia.REGULAR;
    //        }
    int marcacionesPendientes = 0;
    boolean hayTardanza = false;
    DetalleAsistencia entrada = detalleAsistenciaList.get(0);
    DetalleAsistencia salida = detalleAsistenciaList.get(detalleAsistenciaList.size() - 1);

    if ((entrada.getHoraEvento() != null || entrada.isPermiso())
        && (salida.getHoraEvento() != null || salida.isPermiso())) {
      hayTardanza =
          (!entrada.isPermiso()
              && tardanzaMin(
                      FechaUtil.soloHora(entrada.getHoraEvento()),
                      FechaUtil.soloHora(entrada.getHoraReferenciaTolerancia()))
                  > 1);

      if (hayTardanza) {
        return AnalizadorAsistencia.TARDANZA;
      } else {
        return AnalizadorAsistencia.REGULAR;
      }
    } else {
      if ((entrada.getHoraEvento() == null && !entrada.isPermiso())
          && (salida.getHoraEvento() == null && !salida.isPermiso())) {
        /*
        PUEDE SER FALTA, SE HA DE COMPROBAR INCONSISTENCIA
        */
        if (permisoList != null) {
          if (!permisoList.isEmpty()) {
            return AnalizadorAsistencia.INCONSISTENCIA;
          }
        }

        if (conteo > 2) {
          for (int i = 1; i < detalleAsistenciaList.size() - 1; i++) {
            DetalleAsistencia refrigerio = detalleAsistenciaList.get(i);
            if (refrigerio.getHoraEvento() != null) {
              return AnalizadorAsistencia.INCONSISTENCIA;
            }
          }
          return AnalizadorAsistencia.INASISTENCIA;
        } else {
          return AnalizadorAsistencia.INASISTENCIA;
        }
      } else {
        return AnalizadorAsistencia.INCONSISTENCIA;
      }
    }
  }