function fechaDiffDiasCompletos($fechaDesde, $fechaHasta)
 {
     $dias = array();
     // Mas de una semana, todos los dias
     if (FechaHelper::fechaDiffSemanaCompleta($fechaDesde, $fechaHasta)) {
         $dias[] = CONST_DIA_LUNES;
         $dias[] = CONST_DIA_MARTES;
         $dias[] = CONST_DIA_MIERCOLES;
         $dias[] = CONST_DIA_JUEVES;
         $dias[] = CONST_DIA_VIERNES;
         $dias[] = CONST_DIA_SABADO;
         $dias[] = CONST_DIA_DOMINGO;
         return $dias;
     }
     $diaDesde = $fechaDesde->diaDeLaSemana;
     $diaHasta = $fechaHasta->diaDeLaSemana;
     // Mismo dia
     if ($diaDesde == $diaHasta) {
         return $dias;
     }
     // Dias en el medio enteros
     $diaCorrido = $diaDesde + 1;
     if ($diaCorrido == 7) {
         $diaCorrido = 0;
     }
     while ($diaCorrido != $diaHasta) {
         $dias[] = FechaHelper::diaDeLaSemanaToString($diaCorrido);
         $diaCorrido++;
         if ($diaCorrido == 7) {
             $diaCorrido = 0;
         }
     }
     return $dias;
 }
 function filterByFecha($fechaDesde, $fechaHasta)
 {
     // Si se pasa un rango inconsistente no se devuelve ninguna planificación
     if ($fechaDesde->toString() > $fechaHasta->toString()) {
         return array();
     }
     $sql = "SELECT * ";
     $sql .= "FROM planificacion ";
     $sql .= "WHERE baja_logica = '" . FALSE_ . "' ";
     $sql .= "AND fecha_vigencia >= '" . $fechaDesde->toString() . "' ";
     $sql .= "AND (";
     $diaDesde = $fechaDesde->diaDeLaSemana;
     $diaHasta = $fechaHasta->diaDeLaSemana;
     $nombreDiaDesde = FechaHelper::diaDeLaSemanaToString($diaDesde);
     $nombreDiaHasta = FechaHelper::diaDeLaSemanaToString($diaHasta);
     $conector = $nombreDiaDesde == $nombreDiaHasta ? "AND" : "OR";
     // Busqueda por fecha absoluta
     $sql .= "( dia_absoluto IS NOT NULL AND dia_semana IS NULL AND hora IS NOT NULL AND (";
     $sql .= "DATE_ADD(dia_absoluto,INTERVAL hora HOUR_SECOND) > '" . $fechaDesde->toString() . "' ";
     $sql .= "AND DATE_ADD(dia_absoluto,INTERVAL hora HOUR_SECOND) <= '" . $fechaHasta->toString() . "')";
     $sql .= ")";
     // Busqueda por fecha semanal
     $sql .= " OR (dia_absoluto IS NULL AND dia_semana IS NOT NULL AND hora IS NOT NULL AND (";
     $condiciones = array();
     $dias_enteros = FechaHelper::fechaDiffDiasCompletos($fechaDesde, $fechaHasta);
     if (!empty($dias_enteros)) {
         $condiciones[] = "(dia_semana IN ('" . implode("','", $dias_enteros) . "') )";
         // Si hubo algun dia entero, son todos los diariamente
     }
     $condiciones[] = "(dia_semana = '" . FechaHelper::diaDeLaSemanaToString($diaDesde) . "' AND hora > '" . $fechaDesde->timeToString() . "' " . $conector . " dia_semana = '" . FechaHelper::diaDeLaSemanaToString($diaHasta) . "' AND hora <= '" . $fechaHasta->timeToString() . "')";
     $sql .= implode(" OR ", $condiciones);
     $sql .= " )) ";
     // Busqueda por fecha diaria
     $sql .= " OR (dia_semana IS NULL AND dia_absoluto IS NULL AND hora IS NOT NULL ";
     if (empty($dias_enteros)) {
         $sql .= " AND (hora > '" . $fechaDesde->timeToString() . "' " . $conector . " hora <= '" . $fechaHasta->timeToString() . "') ";
     }
     $sql .= ") ";
     // Cierro query global
     $sql .= ")";
     $entity = $this->getEntity();
     // *** Realizar la consutla y devolver el resultado *** //
     $res = $entity->_db->leer($sql);
     // *** Convertir el record set en un array asociativo y devolverlo ***
     return $this->_rs2Collection($res);
 }