CREATE OR REPLACE FUNCTION INDICADOR_TIPO_VOO_DELIVERY(
  P_CDFILIAL          IN DELIVERYM.CDFILIAL%TYPE,
  P_CDCIA             IN DELIVERYM.CDCIA%TYPE,
  P_NRVOO             IN DELIVERYM.NRVOO%TYPE,
  P_CDTRECHO          IN DELIVERYM.CDTRECHO%TYPE,
  P_SGPREFIXO         IN PLANOVOOM.SGPREFIXO%TYPE,
  P_CDEQUIP           IN PLANOVOOM.CDEQUIP%TYPE,
  P_NRDELIVERY        IN DELIVERYM.NRDELIVERY%TYPE,
  P_DTHRPLAVOOPV      IN DELIVERYM.DTHRPLAVOOPV%TYPE,
  P_NRORG             IN DELIVERYM.NRORG%TYPE
) RETURN VARCHAR2 
AS 
  V_INDICADORTIPOVOO VARCHAR2(1);
  V_AGRDELIVERY  VARCHAR2(4);
BEGIN
  
    V_AGRDELIVERY      := NULL;
    V_INDICADORTIPOVOO := NULL;

    /*Se a configuracao do Tipo de Voo nao for por Voo
      procura a configuracao por:
         Trecho;
         Prefixo;
         Equipamento;
    */
        /*Seta o Agrupamento de Delivery do Delivery selecionado*/
        SELECT MAX(CDAGRDECO)
          INTO V_AGRDELIVERY
        FROM SERVPLANOM
        WHERE CDFILIAL     = P_CDFILIAL
        AND   CDCIA        = P_CDCIA
        AND   NRVOO        = P_NRVOO
        AND   CDTRECHO     = P_CDTRECHO
        AND   DTHRPLAVOOPV = P_DTHRPLAVOOPV
        AND   NRDELIVERY   = P_NRDELIVERY;

        /*Busca a Configuracao do Indicador do Tipo de Voo por Agrupamento de Delivery*/

          /*Configuracao por Voo/Trecho*/
          SELECT MAX(CDEXPTIPOVOO)
              INTO V_INDICADORTIPOVOO
          FROM TIPOVOOCONFIGVOO
          WHERE CDFILIAL = P_CDFILIAL
          AND   CDCIA    = P_CDCIA
          AND   NRVOO    = P_NRVOO
          AND   CDTRECHO = P_CDTRECHO
          AND   CDAGRDEL = V_AGRDELIVERY
          AND   NRORG    = P_NRORG;

          IF V_INDICADORTIPOVOO IS NULL THEN 
              /*Configuracao por Prefixo*/
              SELECT MAX(CDEXPTIPOVOO)
                  INTO V_INDICADORTIPOVOO
              FROM TIPOVOOCONFIGPREF
              WHERE CDFILIAL  = P_CDFILIAL
              AND   CDCIA     = P_CDCIA
              AND   SGPREFIXO = P_SGPREFIXO
              AND   CDAGRDEL  = V_AGRDELIVERY
              AND   NRORG     = P_NRORG;

              IF V_INDICADORTIPOVOO IS NULL THEN 
                  /*Configuracao por Equipamento*/
                  SELECT MAX(CDEXPTIPOVOO)
                      INTO V_INDICADORTIPOVOO
                  FROM TIPOVOOCONFIGEQUIP
                  WHERE CDFILIAL  = P_CDFILIAL
                  AND   CDCIA     = P_CDCIA
                  AND   CDEQUIP   = P_CDEQUIP
                  AND   CDAGRDEL  = V_AGRDELIVERY
                  AND   NRORG     = P_NRORG;
                  
                  IF V_INDICADORTIPOVOO IS NULL THEN
                       /*Indicador do Tipo de Voo configurado por Voo*/
                        SELECT CDEXPTIPOVOO 
                          INTO V_INDICADORTIPOVOO
                        FROM VOO
                        WHERE CDFILIAL = P_CDFILIAL
                        AND   CDCIA    = P_CDCIA
                        AND   NRVOO    = P_NRVOO
                        AND   NRORG    = P_NRORG;
                  END IF;
              END IF;
          END IF;
  
  RETURN NVL(V_INDICADORTIPOVOO, ' ');
END;
/