CREATE OR REPLACE FUNCTION "FUN_CALCOLA_DATA"
( nome_file       IN VARCHAR2
, orario_chiusura IN VARCHAR2
, data_default    IN DATE
) RETURN DATE AS data_finale DATE;
  
  chiusura_finestra DATE;

BEGIN

  data_finale := to_timestamp(substr(nome_file,5,14),'YYYYMMDDHH24MISS');

  -- verifico se data finale sia un giorno lavorativo
  IF data_finale = FUN_DATE_FESTIVE(data_finale) THEN
    -- imposto l'ora di chiusura di un giorno lavorativo
    chiusura_finestra := to_timestamp(
      substr(nome_file,5,8) || orario_chiusura, 'YYYYMMDDHH24MISS');
  ELSE
    -- nei festivi la finestra ? SEMPRE chiusa
    chiusura_finestra := to_timestamp(
      substr(nome_file,5,8) || '000000', 'YYYYMMDDHH24MISS');
  END IF ;

  --DBMS_OUTPUT.put_line('Chiusura = '|| chiusura_finestra);

  -- ora verifico se la data finale supera la chiusura
  IF data_finale > chiusura_finestra THEN
    -- la supera, quindi devo aggiungere un giorno lavorativo
    data_finale := FUN_DATE_FESTIVE_SUCC(data_finale+1);
  END IF;

  RETURN data_finale;

  EXCEPTION
   WHEN OTHERS
   THEN
      DBMS_OUTPUT.put_line ('Errore in FUN_CALCOLA_DATA ' || SQLERRM);
      RETURN  data_default;

END FUN_CALCOLA_DATA;
/
