]> git.llucax.com Git - mecon/meconlib.git/blobdiff - lib/MECON/Feriado.php
Se eliminan los trigger_error de MECON_Usuario.
[mecon/meconlib.git] / lib / MECON / Feriado.php
index 442caf99697d82595a8a0533c1fce92e72a8fed1..8f4e9184486260a579d2c0adb0d53edc3cc56751 100644 (file)
@@ -26,6 +26,7 @@ $Id$
 
 require_once 'Date.php';
 require_once 'Date/Span.php';
+require_once 'PEAR.php';
 
 /**
  * Información sobre feriados.
@@ -297,6 +298,67 @@ class MECON_Feriado extends Date {
 
     }
 
+    /**
+     * Busca dias habiles en un rango de fechas y los devuelve en un array.
+     *
+     * Ejemplo:
+     * @code
+     * $diasHabiles = $feriado->buscarDiasHabiles('2002/10/01', '2002/12/31');
+     * if (count($diasHabiles)) {
+     *     echo 'Cantidad de dias habiles en le rango: '. count($diasHabiles);
+     *     foreach ($diasHabiles as $diaHabil) {
+     *         print '<PRE>';var_dump($diaHabil);print '</PRE>';
+     *     }
+     * }
+     * @endcode
+     *
+     * @param  DB    $db    Conexión a la base de datos.
+     * @param  mixed $ini   Fecha de inicio del rango en donde buscar (por
+     *                      defecto el primer día del mes en curso). Puede ser
+     *                      un objeto Date.
+     * @param  mixed $fin   Fecha de fin del rango en donde buscar (por
+     *                      defecto el día del mes en curso). Puede ser un 
+     *                      objeto Date.
+     *
+     * @return mixed
+     * @static
+     */
+    function buscarDiasHabiles($db, $ini = '', $fin = '') {
+        //Acomodo las fechas pasadas por parametro
+        $ini = empty( $ini ) ? strftime( '%Y-%m-01', time() ) : $ini;
+        $fin = empty( $fin ) ? strftime( '%Y-%m-%d', time() ) : $fin;
+        $ini = (is_string($ini)) ? new Date($ini) : $ini;
+        $fin = (is_string($fin)) ? new Date($fin) : $fin;
+        
+        //Valido que $ini < $fin
+        if ($ini->after($fin)) {
+            return new PEAR_Error ('La fecha de fin debe ser anterior a la '.
+                    'fecha de inicio.');
+        }
+        
+        //Obtener los dias feriados entre $ini y $fin
+        $sql = "SELECT fecha FROM novedades.feriados WHERE YEAR(fecha) = ". 
+            $db->quote($ini->format("%Y")) . " OR YEAR(fecha) = " . 
+            $db->quote($ini->format("%Y"));
+
+        $feriados = $db->getCol($sql);
+        if (DB::IsError($feriados)) {
+            return $feriados;
+        }
+        
+        //Verifico fecha por fecha si es o no un dia habil
+        $ini =& $ini->getPrevDay();
+        while (!$ini->equals($fin)) {
+            $ini =& $ini->getNextDay();
+            //Verifico que la fecha no sea feriado ni sabado o domingo.
+            if (!in_array($ini->format("%Y-%m-%d"), $feriados) &&
+                    ($ini->getDayOfWeek() != 0) && 
+                    ($ini->getDayOfWeek() != 6)) {
+                $res[] = $ini;
+            }
+        }
+        return $res;
+    }
 }
 
 // $Id$