-- ** TITULO      : Crear función de postgres func_holidays.
-- ** OBJETIVO	  : Determinar si un día es laboral o no.  Adicionalmente, permite identificar si el día no es laboral cuando es sábado o Domingo.
-- ** DESCRIPCION :
--                  Se elimina la función func_holidays si existe.
--					Se crea la función func_holidays.  Posee un parámetro opcional para realizar diferentes validaciones teniendo en cuenta los días de la semana.
--					La opción 0 (por defecto) solo verifica si es un día no laboral en la tabla calendario
--					La opción 1 verifica si no es laboral o Domingo.
--					La opción 2 verifica si no es laboral, Domingo o Sábado.
--					Nota: Si el tipo está fuera del rango, la función retorna null.

DROP FUNCTION IF EXISTS func_holidays;

CREATE OR REPLACE FUNCTION func_holidays(
	fecha DATE,
	tipo_validacion INTEGER DEFAULT 0,
	OUT respuesta boolean)
AS $$

BEGIN

	IF tipo_validacion = 0	THEN

		IF exists (SELECT 1 FROM calendar where actual_date = fecha AND working_day = false) 	THEN
			respuesta := true;
		ELSE
			respuesta := false;
		END IF;

	ELSEIF 	tipo_validacion = 1 THEN

		IF exists (SELECT 1 FROM calendar where actual_date = fecha AND working_day = false OR (actual_date = fecha AND day_of_week = 7)) 	THEN
			respuesta := true;
		ELSE
			respuesta := false;
		END IF;

	ELSEIF 	tipo_validacion = 2 THEN

		IF exists (SELECT 1 FROM calendar where actual_date = fecha AND working_day = false OR (actual_date = fecha AND day_of_week = 7) OR (actual_date = fecha AND day_of_week = 6)) 	THEN
			respuesta := true;
		ELSE
			respuesta := false;
		END IF;

	END IF;


END; $$
LANGUAGE plpgsql;