-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- SIU-GUARANI 3
-- Version 3.0.0
-- Function: f_minfechadia
--
--  Retorna la fecha menor de un rango de fechas para un dia de la semana
--  
-- Recibe:  
--  1. fecha desde
--  2. fecha hasta
--  3. Dia de la semana (Lunes, Martes, Miercoles, Jueves, Viernes, Sabado, Domingo)
-- Retorna: 
--  1. Fecha que corresponde con el dia de la semana, la menor de las fechas.
-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- DROP FUNCTION f_minfechadia (date, date, varchar);
CREATE OR REPLACE FUNCTION f_minfechadia (fecha_desde Date, fecha_hasta date, diasemana varchar(10)) 
   RETURNS date AS $$
DECLARE
 fecha_aux date;

BEGIN
fecha_aux := fecha_desde;

WHILE fecha_aux <= fecha_hasta
LOOP
 IF f_diadelasemana(fecha_aux::date, 1::smallint) = diasemana THEN
    RETURN fecha_aux;
 END IF;
 fecha_aux := fecha_aux + 1;
END LOOP;

fecha_aux := NULL;
RETURN fecha_aux;

END;
$$ LANGUAGE plpgsql;

-- ++++++++++++++++++++++++++++++ Fin Function f_minfechadia() ++++++++++++++++

-- REVOKE EXECUTE ON FUNCTION f_minfechadia (date, date, varchar);
GRANT EXECUTE ON FUNCTION f_minfechadia (date, date, varchar) to public;

/*
select * from f_minfechadia ('2011-03-01'::date, '2011-03-15'::date, 'Miercoles')
*/