CREATE OR REPLACE FUNCTION DATAUTIL(
   P_CDFILIAL     IN FILIAL.CDFILIAL%TYPE,
   P_DTBASE       IN PEDIDO.DTPEDIDO%TYPE,
   P_NRDIASUTEIS  IN INTEGER) RETURN DATE IS

   V_DIASRESTA INTEGER;
   V_DTFINAL   DATE;
   BODIAUTIL   BOOLEAN;
BEGIN
   V_DIASRESTA := P_NRDIASUTEIS;
   V_DTFINAL   := P_DTBASE;

   V_DTFINAL   := V_DTFINAL + 1;

   BODIAUTIL := TRUE;
   WHILE NOT DIAUTIL(P_CDFILIAL, V_DTFINAL)  LOOP
      V_DTFINAL   := V_DTFINAL + 1;
   END LOOP;

   IF V_DIASRESTA > 0 THEN
      IF DIAUTIL(P_CDFILIAL, V_DTFINAL) THEN
         V_DIASRESTA := V_DIASRESTA - 1;
      END IF;
   END IF;
   WHILE V_DIASRESTA > 0 LOOP
      V_DTFINAL   := V_DTFINAL + 1;
      IF DIAUTIL(P_CDFILIAL, V_DTFINAL) THEN
         V_DIASRESTA := V_DIASRESTA - 1;
      END IF;
   END LOOP;
   RETURN(V_DTFINAL);
END;
/