create or replace FUNCTION BUSCA_DTENTREGA_PED(
    P_CDFILIAL      IN FILIAL.CDFILIAL%TYPE,
    P_CDMUNICIPIO   IN MUNICIPIO.CDMUNICIPIO%TYPE,
    P_CDPAIS        IN MUNICIPIO.CDPAIS%TYPE,
    P_SGESTADO      IN MUNICIPIO.SGESTADO%TYPE,
    P_DTPEDIDO      IN PEDIDO.DTPEDIDO%TYPE,
    P_CDCLIENTE     IN CLIENTE.CDCLIENTE%TYPE,
    P_NRINSJURTRAN  IN TRANSPORT.NRINSJURTRAN%TYPE,
    P_IDTPIJURTRAN  IN TRANSPORT.IDTPIJURTRAN%TYPE)
    
RETURN DATE IS

    V_NRDIASENTMUN		 MUNICIPIO.NRDIASENTMUN%TYPE;
    V_NRDIASENTREG		 REGIAOPED.NRDIASENTREG%TYPE;
    V_NRDIASENTTRANSP	 TRANSPORT.NRDIASENTTRANSP%TYPE;
    V_NRDIASENTCLIE		 CLIENTE.NRDIASENTCLIE%TYPE;
    V_NRDIASENTPED		 PARAMPEDIDO.NRDIASENTPED%TYPE;

    V_NRDIASENT          INTEGER;
    V_DTFINAL            DATE;
    BODIAUTIL            BOOLEAN;

BEGIN
    BEGIN
        SELECT NRDIASENTMUN 
            INTO V_NRDIASENTMUN
        FROM MUNICIPIO  
          WHERE CDMUNICIPIO = P_CDMUNICIPIO AND 
                SGESTADO = P_SGESTADO AND
                CDPAIS = P_CDPAIS;
    EXCEPTION
        WHEN NO_DATA_FOUND THEN
               V_NRDIASENTMUN := NULL;
    END;
   IF   (V_NRDIASENTMUN IS NULL)  THEN 
        BEGIN
            SELECT M.NRDIASENTMUN
                INTO V_NRDIASENTMUN
            FROM MUNICIPIO  M , ENDECLIE E
              WHERE M.CDMUNICIPIO = E.CDMUNICIPIO
                  AND E.CDCLIENTE = P_CDCLIENTE
                  AND M.SGESTADO = E.SGESTADO
                  AND M.CDPAIS = E.CDPAIS
                  AND (E.IDTPENDECLIE = 'T');
        EXCEPTION
            WHEN NO_DATA_FOUND THEN
                 V_NRDIASENTMUN := NULL;
        END;
   END IF;
   IF (V_NRDIASENTMUN IS NULL)  THEN
       BEGIN
            SELECT M.NRDIASENTMUN
                INTO V_NRDIASENTMUN
            FROM MUNICIPIO  M , ENDECLIE E
              WHERE M.CDMUNICIPIO = E.CDMUNICIPIO
                  AND E.CDCLIENTE = P_CDCLIENTE
                   AND M.SGESTADO = E.SGESTADO
                  AND M.CDPAIS = E.CDPAIS
                  AND (E.IDTPENDECLIE = 'P');
        EXCEPTION
            WHEN NO_DATA_FOUND THEN
                 V_NRDIASENTMUN := NULL;
        END;
   END IF;
    
  BEGIN
        SELECT R.NRDIASENTREG
            INTO V_NRDIASENTREG
        FROM  REGIAOPED R JOIN CLIENTE C                    
                ON R.CDREGIAOPED = C.CDREGIAOPED  
        WHERE CDCLIENTE = P_CDCLIENTE;
    EXCEPTION
       WHEN NO_DATA_FOUND THEN
            V_NRDIASENTREG := NULL;
    END;
    
    BEGIN
        SELECT NRDIASENTTRANSP
            INTO V_NRDIASENTTRANSP
        FROM  TRANSPORT  
        WHERE NRINSJURTRAN = P_NRINSJURTRAN AND
              IDTPIJURTRAN = P_IDTPIJURTRAN;
    EXCEPTION
       WHEN NO_DATA_FOUND THEN
           V_NRDIASENTTRANSP := NULL;
    END;
    
    BEGIN
        SELECT NRDIASENTCLIE
            INTO V_NRDIASENTCLIE
        FROM  CLIENTE  
        WHERE CDCLIENTE = P_CDCLIENTE;
    EXCEPTION
       WHEN NO_DATA_FOUND THEN
           V_NRDIASENTCLIE := NULL;
    END;
    
    BEGIN 
        SELECT NRDIASENTPED
            INTO V_NRDIASENTPED
        FROM  PARAMPEDIDO  
        WHERE CDFILIAL = P_CDFILIAL;
    EXCEPTION
       WHEN NO_DATA_FOUND THEN
           V_NRDIASENTPED := NULL;
    END;
    
    IF(V_NRDIASENTMUN IS NOT NULL) AND (V_NRDIASENTMUN > 0) THEN
        V_NRDIASENT := V_NRDIASENTMUN;
    ELSIF  (V_NRDIASENTREG IS NOT NULL) AND (V_NRDIASENTREG > 0)  THEN
        V_NRDIASENT := V_NRDIASENTREG;
    ELSIF  (V_NRDIASENTTRANSP IS NOT NULL) AND (V_NRDIASENTTRANSP > 0)  THEN
        V_NRDIASENT := V_NRDIASENTTRANSP;
    ELSIF  (V_NRDIASENTCLIE IS NOT NULL) AND (V_NRDIASENTCLIE > 0)  THEN
        V_NRDIASENT := V_NRDIASENTCLIE;
    ELSIF (V_NRDIASENTPED IS NOT NULL) AND (V_NRDIASENTPED > 0)  THEN
        V_NRDIASENT := V_NRDIASENTPED;
    ELSE
        V_NRDIASENT := 0;
    END IF;

    V_DTFINAL   := P_DTPEDIDO;
    IF V_NRDIASENT > 0 THEN
        V_DTFINAL   := V_DTFINAL + 1;
    END IF;   
    BODIAUTIL := TRUE;
    WHILE NOT DIAUTIL(P_CDFILIAL, V_DTFINAL)  LOOP
         V_DTFINAL   := V_DTFINAL + 1;
    END LOOP;
    IF V_NRDIASENT > 0 THEN
        IF DIAUTIL(P_CDFILIAL, V_DTFINAL) THEN
            V_NRDIASENT  := V_NRDIASENT  - 1;
        END IF;
    END IF;
    WHILE V_NRDIASENT  > 0 LOOP
        V_DTFINAL   := V_DTFINAL + 1;
        IF DIAUTIL(P_CDFILIAL, V_DTFINAL) THEN
            V_NRDIASENT  := V_NRDIASENT  - 1;
        END IF;
    END LOOP;

    RETURN(V_DTFINAL);

END;