CREATE OR REPLACE PROCEDURE CONEXAO_COM_SUBGRU_PLANOVOOM
(P_CDFILIAL IN VARCHAR2,
 P_CDCIA IN VARCHAR2,
 P_NRVOO IN VARCHAR2,
 P_CDTRECHO IN VARCHAR2,
 P_DTHRPLAVOOPV IN DATE,
 P_NRSERVICOCIAFILI IN NUMBER,
 P_CDCLASSE IN VARCHAR2,
 P_CDCICLO IN VARCHAR2,
 P_DTREF IN DATE, /*Data de verificacao da vigencia do menu grid (DTHRABASTPV)*/
 P_VALIDACAO IN VARCHAR2, /*Passar N para incluir na tabela CONEXAOSUBGRUPO*/
 P_NRITEMPLANSP IN NUMBER,
 P_CDOPERADOR IN VARCHAR2,
 P_NRORG IN NUMBER DEFAULT 1,
 P_MSGERRO OUT VARCHAR2) /*Preenchido quando P_VALIDACAO = 'S'*/
AS
   V_CDMANCIA VARCHAR2(4);   
   V_MANUAIS_ATIVOS NUMBER;
   V_NRTABPRECO VARCHAR2(3);
   V_TABPRECO_ATIVAS NUMBER;
   V_NRSERVICOCIAFILI NUMBER;
   V_QTSERVICOS NUMBER;
   V_SUBGRUPOS NUMBER;
   V_SUBGRU_ATIVOS NUMBER;
   V_IDSERVICO VARCHAR2(1);   
   V_IDVINCULOMANUAL VARCHAR2(1);
   V_DSSERVICOCIAFILI VARCHAR2(250);
   V_SGCLASSE VARCHAR2(5);
   V_IDCICLO VARCHAR2(10);
   V_SERVICO VARCHAR2(2000);
   V_SEQ VARCHAR2(20);
   V_NRCONEXAOSUBGRUPO NUMBER;
   V_SGCIA COMPANHIA.SGCIA%TYPE;
   V_ITEM_TAB_PRECO NUMBER;
   V_NRSEQPRECO NUMBER;   
   V_DSMANUAL VARCHAR2(2000);
   V_MANUAL VARCHAR2(2000); 
   V_MENU_APROVADO VARCHAR2(1);
   V_MENU_VIGENTE VARCHAR2(1);

   V_SUBGRU_EXPIRADO VARCHAR2(1);
   V_NRSEQSUBGRUSEMAM_NOVO NUMBER; 
   V_EXISTE_SUBGRU_NOVO NUMBER;
   V_EXISTE_VINCULO NUMBER;
   V_VIGENCIA_ALTERADA VARCHAR2(1);
   V_DESC_VOO VARCHAR2(50);
BEGIN
   P_MSGERRO := NULL;

   SELECT MAX(IDVINCULOMANUAL)
     INTO V_IDVINCULOMANUAL
     FROM CIAFILI
    WHERE CDFILIAL = P_CDFILIAL
      AND CDCIA = P_CDCIA;

   SELECT MAX(SGCIA) INTO V_SGCIA FROM COMPANHIA WHERE CDCIA = P_CDCIA;

   SELECT MAX(SG.IDSERVICO), MAX(DSSERVICOCIAFILI), MAX(CL.SGCLASSE), MAX(CI.IDCICLO)
    INTO V_IDSERVICO, V_DSSERVICOCIAFILI, V_SGCLASSE, V_IDCICLO
    FROM SERVICOCIAFILI S
         INNER JOIN SERVICOGEN SG ON SG.NRSERVICOGEN = S.NRSERVICOGEN
         INNER JOIN SERVCICLO SC ON SC.CDFILIAL = S.CDFILIAL AND
                                    SC.CDCIA = S.CDCIA AND
                                    SC.NRSERVICOCIAFILI = S.NRSERVICOCIAFILI                   
         INNER JOIN CLASSE CL ON CL.CDCLASSE = SC.CDCLASSE
         INNER JOIN CICLO CI ON CI.CDCICLO = SC.CDCICLO
   WHERE S.CDFILIAL = P_CDFILIAL
     AND S.CDCIA = P_CDCIA
     AND S.NRSERVICOCIAFILI = P_NRSERVICOCIAFILI
     AND SC.CDFILIAL = P_CDFILIAL
     AND SC.CDCIA = P_CDCIA
     AND SC.NRSERVICOCIAFILI = P_NRSERVICOCIAFILI     
     AND SC.CDCLASSE = P_CDCLASSE
     AND SC.CDCICLO = P_CDCICLO;

   V_DESC_VOO := V_SGCIA || '-' || P_NRVOO;
   /*Se HANDLING, nao considerar*/
   IF V_IDSERVICO IN ('3', '5') THEN
     RETURN;
   END IF;

   V_SERVICO := V_DSSERVICOCIAFILI||'$$'||V_SGCLASSE||'$$'||V_IDCICLO;
    
   BEGIN
    SELECT COUNT(*), MAX(NRTABPRECO)
    INTO V_TABPRECO_ATIVAS, V_NRTABPRECO
    FROM TABPRECOSEM
    WHERE (CDFILIAL = P_CDFILIAL) AND
          (CDCIA    = P_CDCIA   ) AND
          (P_DTREF BETWEEN DTINIVIGTAB AND DTFIMVIGTAB);
   EXCEPTION
    WHEN NO_DATA_FOUND THEN
     V_TABPRECO_ATIVAS := NULL;
   END;
   IF (NVL(V_TABPRECO_ATIVAS, 0) < 1) THEN
     IF P_VALIDACAO = 'S' THEN
        /* --Sem tabela de preco ativa na data */
        P_MSGERRO := 'APPERRMSGSTR' || 'APP-00043' || '$$' || V_SGCIA || '$$' ||TO_CHAR(P_DTREF, 'DD/MM/YYYY') || 'APPERRMSGEND';
     ELSE
        /* --Sem tabela de preco ativa na data */
        RAISE_APPLICATION_ERROR(-20501, 'APPERRMSGSTR' || 'APP-00043' || '$$' || V_SGCIA || '$$' ||TO_CHAR(P_DTREF, 'DD/MM/YYYY') || 'APPERRMSGEND', TRUE);
     END IF;
   END IF;

   IF (V_TABPRECO_ATIVAS > 1) THEN
     IF P_VALIDACAO = 'S' THEN
        /* -- Mais de uma tabela de preco ativa para a companhia */
        P_MSGERRO := 'APPERRMSGSTR' || 'APP-00009' || '$$' ||V_SGCIA || 'APPERRMSGEND';
     ELSE
        /* -- Mais de uma tabela de preco ativa para a companhia */
        RAISE_APPLICATION_ERROR(-20501, 'APPERRMSGSTR' || 'APP-00009' || '$$' ||V_SGCIA || 'APPERRMSGEND', TRUE);
     END IF;         
     
   END IF;

   IF P_MSGERRO IS NOT NULL THEN
     RETURN;
   END IF;

   SELECT COUNT(P.NRSEQPRECO),MIN(P.NRSEQPRECO), MAX(P.CDMANCIA)
    INTO V_ITEM_TAB_PRECO,V_NRSEQPRECO, V_CDMANCIA
    FROM PRECOSECIAM P
   WHERE (P.CDFILIAL   = P_CDFILIAL  ) AND
         (P.CDCIA      = P_CDCIA     ) AND
         (P.NRTABPRECO = V_NRTABPRECO) AND
         (P.NRSERVICOCIAFILI  = P_NRSERVICOCIAFILI ) AND
         (P.CDCLASSE  = P_CDCLASSE ) AND
         (P.CDCICLO   = P_CDCICLO ) AND
         (P_DTREF BETWEEN P.DTINIVIGSE AND P.DTFIMVIGSE);
   IF (V_ITEM_TAB_PRECO > 1) THEN
     IF P_VALIDACAO = 'S' THEN        
        P_MSGERRO := 'APPERRMSGSTR' || 'APP-00010'|| '$$' || V_SERVICO || '$$' || V_DESC_VOO || 'APPERRMSGEND';
     ELSE
        RAISE_APPLICATION_ERROR(-20501, 'APPERRMSGSTR' || 'APP-00010'|| '$$' || V_SERVICO || '$$' || V_DESC_VOO || 'APPERRMSGEND', TRUE);
     END IF;
   END IF;

   IF (V_ITEM_TAB_PRECO = 0) THEN
     IF P_VALIDACAO = 'S' THEN
        P_MSGERRO := 'APPERRMSGSTR' || 'APP-00008'|| '$$' || V_SERVICO || '$$' || V_DESC_VOO || 'APPERRMSGEND';
     ELSE
        RAISE_APPLICATION_ERROR(-20501, 'APPERRMSGSTR' || 'APP-00008'|| '$$' || V_SERVICO || '$$' || V_DESC_VOO || 'APPERRMSGEND', TRUE);
     END IF;
   END IF;

   IF P_MSGERRO IS NOT NULL THEN
     RETURN;
   END IF;


   /*Verifica se o menu grid esta vigente*/
   SELECT MAX(DSMANUAL), MAX(CASE WHEN IDSITUAPROPCIA = 'A' THEN 'S' ELSE 'N' END), MAX(CASE WHEN P_DTREF BETWEEN DTINIVGMA AND DTFIMVGMA THEN 'S'
                                                                                                           ELSE 'N'
                                                                                                      END)
    INTO V_DSMANUAL, V_MENU_APROVADO, V_MENU_VIGENTE
    FROM MANUALCIAM
   WHERE CDFILIAL = P_CDFILIAL
     AND CDCIA = P_CDCIA
     AND CDMANCIA = V_CDMANCIA;

   IF V_IDVINCULOMANUAL = 'S' THEN
     IF V_CDMANCIA IS NULL THEN
        SELECT MAX(M.CDMANCIA), MAX(M.DSMANUAL)
          INTO V_CDMANCIA, V_DSMANUAL
          FROM PRECOSESUBGRU P
               INNER JOIN MANUALCIAM M ON M.CDFILIAL = P.CDFILIAL 
                                      AND M.CDCIA = P.CDCIA 
                                      AND M.CDMANCIA = P.CDMANCIA
         WHERE P.CDFILIAL = P_CDFILIAL
           AND P.CDCIA = P_CDCIA
           AND P.NRSERVICOCIAFILIPRECO = P_NRSERVICOCIAFILI
           AND P.CDCLASSE = P_CDCLASSE
           AND P.CDCICLO = P_CDCICLO
           AND M.IDSITUAPROPCIA = 'A'
           AND P_DTREF BETWEEN M.DTINIVGMA AND M.DTFIMVGMA;

        V_MANUAL := V_CDMANCIA || ' - ' || V_DSMANUAL;           

        IF V_CDMANCIA IS NULL THEN        
          IF P_VALIDACAO = 'S' THEN
             P_MSGERRO := 'APPERRMSGSTR' || 'APP-00060'|| '$$' || V_SERVICO || '$$' || V_DESC_VOO ||  'APPERRMSGEND';
          ELSE
            /* Operacao bloqueada. O servico $param[0] da classe: $param[1] e ciclo: $param[2] do voo nao esta vinculado a um menu grid vigente. */
            RAISE_APPLICATION_ERROR(-20501,'APPERRMSGSTR' || 'APP-00060'|| '$$' || V_SERVICO || '$$' || V_DESC_VOO ||  'APPERRMSGEND', TRUE);
          END IF;
        ELSE
          IF P_VALIDACAO = 'S' THEN
             /* Operacao bloqueada. O servico $param[0] da classe: $param[1] e ciclo: $param[2] do voo esta vinculado ao menu grid $param[3] mas esta relacao nao esta indicada na tabela de precos. */
             P_MSGERRO := 'APPERRMSGSTR' || 'APP-00076'|| '$$' ||  V_SERVICO || '$$' || V_DESC_VOO || '$$' || V_MANUAL || 'APPERRMSGEND';
          ELSE
            /* Operacao bloqueada. O servico $param[0] da classe: $param[1] e ciclo: $param[2] do voo esta vinculado ao menu grid $param[3] mas esta relacao nao esta indicada na tabela de precos. */
            RAISE_APPLICATION_ERROR(-20501,'APPERRMSGSTR' || 'APP-00076'|| '$$' ||  V_SERVICO || '$$' || V_DESC_VOO || '$$' || V_MANUAL || 'APPERRMSGEND', TRUE);
          END IF;
        END IF;
     ELSE
        V_MANUAL := V_CDMANCIA || ' - ' || V_DSMANUAL;

        IF V_MENU_APROVADO <> 'S' THEN
           IF P_VALIDACAO = 'S' THEN
              /* Operacao bloqueada. O servico $param[0] da classe: $param[1] e ciclo: $param[2] do voo esta vinculado ao menu grid $param[3] mas o mesmo nao se encontra aprovado. */
              P_MSGERRO := 'APPERRMSGSTR' || 'APP-00077'|| '$$' ||  V_SERVICO || '$$' || V_DESC_VOO || '$$' || V_MANUAL || 'APPERRMSGEND';
           ELSE
             /* Operacao bloqueada. O servico $param[0] da classe: $param[1] e ciclo: $param[2] do voo esta vinculado ao menu grid $param[3] mas o mesmo nao se encontra aprovado. */
             RAISE_APPLICATION_ERROR(-20501,'APPERRMSGSTR' || 'APP-00077'|| '$$' ||  V_SERVICO || '$$' || V_DESC_VOO || '$$' || V_MANUAL || 'APPERRMSGEND', TRUE);
           END IF;
        END IF;

        IF V_MENU_VIGENTE <> 'S' THEN
           IF P_VALIDACAO = 'S' THEN
              /* Operacao bloqueada. O servico $param[0] da classe: $param[1] e ciclo: $param[2] do voo esta vinculado ao menu grid $param[3] mas o mesmo nao se encontra vigente. */
              P_MSGERRO := 'APPERRMSGSTR' || 'APP-00078'|| '$$' ||  V_SERVICO || '$$' || V_DESC_VOO || '$$' || V_MANUAL || 'APPERRMSGEND';
           ELSE
             /* Operacao bloqueada. O servico $param[0] da classe: $param[1] e ciclo: $param[2] do voo esta vinculado ao menu grid $param[3] mas o mesmo nao se encontra vigente. */
             RAISE_APPLICATION_ERROR(-20501,'APPERRMSGSTR' || 'APP-00078'|| '$$' ||  V_SERVICO || '$$' || V_DESC_VOO || '$$' || V_MANUAL || 'APPERRMSGEND', TRUE);
           END IF;
        END IF;
     END IF;
   END IF;

   IF P_MSGERRO IS NOT NULL THEN
     RETURN;
   END IF;

   V_SUBGRUPOS := 0;
   V_SUBGRU_ATIVOS := 0;
  

   FOR C_SUBGRU_ITENS IN
   (
   SELECT DISTINCT S.NRSERVICOCIAFILI, S.CDSUBGRU, SG.DSSUBGRU
    FROM SUBGRUTABPRECOM S
         INNER JOIN SERVICOCIAFILI SF ON SF.CDFILIAL = S.CDFILIAL AND
                                         SF.CDCIA = S.CDCIA AND
                                         SF.NRSERVICOCIAFILI = S.NRSERVICOCIAFILI
         INNER JOIN SUBGRUPOM SG ON SG.CDSUBGRU = S.CDSUBGRU
   WHERE S.CDFILIAL = P_CDFILIAL
    AND S.CDCIA = P_CDCIA
    AND S.NRTABPRECO = V_NRTABPRECO     
    AND S.NRSERVICOCIAFILIPRECO = P_NRSERVICOCIAFILI
    AND S.CDCLASSE = P_CDCLASSE
    AND S.CDCICLO = P_CDCICLO
    AND S.NRSEQPRECO = V_NRSEQPRECO
   ) LOOP

      V_SUBGRU_EXPIRADO := 'S';
      V_VIGENCIA_ALTERADA := 'N';

      FOR C_SUBGRU IN 
      (
      SELECT P.CDSUBGRU, P.NRSEQSUBGRUSEMAM,
             CASE WHEN P_DTREF BETWEEN S.DTINIVGSUMA AND S.DTFIMVGSUMA THEN 'S' ELSE 'N' END AS VIGENTE,
             S.DTINIVGSUMA, S.DTFIMVGSUMA,
             P.DTINIVGSUMAINCLUSAO, P.DTFIMVGSUMAINCLUSAO
        FROM SUBGRUTABPRECOM P
             INNER JOIN SUBGRUSEMAM S ON S.CDFILIAL = P.CDFILIAL AND
                                         S.CDCIA = P.CDCIA AND
                                         S.CDMANCIA = P.CDMANCIA AND
                                         S.NRSERVICOCIAFILI = P.NRSERVICOCIAFILI AND
                                         S.CDCLASSE = P.CDCLASSE AND
                                         S.CDSUBGRU = P.CDSUBGRU AND
                                         S.NRSEQSUBGRUSEMAM = P.NRSEQSUBGRUSEMAM
       WHERE P.CDFILIAL = P_CDFILIAL
         AND P.CDCIA = P_CDCIA
         AND P.NRTABPRECO = V_NRTABPRECO     
         AND P.NRSERVICOCIAFILIPRECO = P_NRSERVICOCIAFILI
         AND P.CDCLASSE = P_CDCLASSE
         AND P.CDCICLO = P_CDCICLO
         AND P.NRSEQPRECO = V_NRSEQPRECO
         AND P.NRSERVICOCIAFILI = C_SUBGRU_ITENS.NRSERVICOCIAFILI
         AND P.CDSUBGRU = C_SUBGRU_ITENS.CDSUBGRU
       ORDER BY P.DTFIMVGSUMAINCLUSAO DESC, P.DTINIVGSUMAINCLUSAO DESC
      ) LOOP
         V_SUBGRUPOS := V_SUBGRUPOS + 1;

         /*Indica se algum dos subgrupos relacionados teve sua vigencia alterada*/
         IF C_SUBGRU.DTFIMVGSUMAINCLUSAO IS NOT NULL THEN
            IF C_SUBGRU.DTFIMVGSUMAINCLUSAO <> C_SUBGRU.DTFIMVGSUMA THEN
               V_VIGENCIA_ALTERADA := 'S';
            END IF;
         END IF;

         IF C_SUBGRU.VIGENTE = 'S' THEN
            V_SUBGRU_EXPIRADO := 'N';
            V_VIGENCIA_ALTERADA := 'N';

            V_SUBGRU_ATIVOS := V_SUBGRU_ATIVOS + 1;

            NOVO_CODIGO_NT('CONEXAOSUBGRUPO' || P_CDFILIAL || P_CDCIA || P_NRVOO || P_CDTRECHO,V_SEQ);
            V_NRCONEXAOSUBGRUPO := TO_NUMBER(V_SEQ);

            IF P_VALIDACAO <> 'S' THEN
              INSERT INTO CONEXAOSUBGRUPO
              (CDFILIAL, CDCIA, NRVOO, CDTRECHO, DTHRPLAVOOPV,
               NRSERVICOCIAFILISP, CDCLASSESP, CDCICLOSP, NRITEMPLANSP, NRCONEXAOSUBGRUPO,
               CDMANCIA, NRSERVICOCIAFILI, CDCLASSE, 
               CDSUBGRU, NRSEQSUBGRUSEMAM, CDCICLO,
               NRORG, NRORGINCLUSAO, NRORGULTATU,
               CDOPERINCLUSAO, CDOPERULTATU,
               DTINCLUSAO, DTULTATU, IDATIVO)
              VALUES
              (P_CDFILIAL, P_CDCIA, P_NRVOO, P_CDTRECHO, P_DTHRPLAVOOPV,
               P_NRSERVICOCIAFILI, P_CDCLASSE, P_CDCICLO, P_NRITEMPLANSP, V_NRCONEXAOSUBGRUPO,
               V_CDMANCIA, C_SUBGRU_ITENS.NRSERVICOCIAFILI, P_CDCLASSE, 
               C_SUBGRU.CDSUBGRU, C_SUBGRU.NRSEQSUBGRUSEMAM, P_CDCICLO,
               P_NRORG, P_NRORG, P_NRORG,
               P_CDOPERADOR, P_CDOPERADOR,
               SYSDATE, SYSDATE, 'S');
            END IF;       
         END IF;
      END LOOP;

      IF V_SUBGRU_EXPIRADO = 'S' THEN
         /*Verifica se existe manutencao no menu para o subgrupo*/
         SELECT MAX(S.NRSEQSUBGRUSEMAM), COUNT(1)
           INTO V_NRSEQSUBGRUSEMAM_NOVO, V_EXISTE_SUBGRU_NOVO
           FROM SUBGRUSEMAM S
                INNER JOIN CICLOSUBGRUSEMAM C ON C.CDFILIAL = S.CDFILIAL AND
                                                 C.CDCIA = S.CDCIA AND
                                                 C.CDMANCIA = S.CDMANCIA AND
                                                 C.NRSERVICOCIAFILI = S.NRSERVICOCIAFILI AND
                                                 C.CDCLASSE = S.CDCLASSE AND
                                                 C.CDSUBGRU = S.CDSUBGRU AND
                                                 C.NRSEQSUBGRUSEMAM = S.NRSEQSUBGRUSEMAM
          WHERE C.CDFILIAL = P_CDFILIAL
            AND C.CDCIA = P_CDCIA
            AND C.CDMANCIA = V_CDMANCIA
            AND C.NRSERVICOCIAFILI = C_SUBGRU_ITENS.NRSERVICOCIAFILI
            AND C.CDCLASSE = P_CDCLASSE
            AND C.CDSUBGRU = C_SUBGRU_ITENS.CDSUBGRU
            AND C.CDCICLO = P_CDCICLO
            AND P_DTREF BETWEEN S.DTINIVGSUMA AND S.DTFIMVGSUMA;
         
         /*Verifica se existe vinculo do subgrupo revisado com o item de faturamento*/
         SELECT COUNT(1)
           INTO V_EXISTE_VINCULO
           FROM PRECOSESUBGRU
          WHERE CDFILIAL = P_CDFILIAL
            AND CDCIA = P_CDCIA
            AND CDMANCIA = V_CDMANCIA
            AND NRSERVICOCIAFILIPRECO = P_NRSERVICOCIAFILI
            AND NRSERVICOCIAFILI = C_SUBGRU_ITENS.NRSERVICOCIAFILI
            AND CDCLASSE = P_CDCLASSE
            AND CDSUBGRU = C_SUBGRU_ITENS.CDSUBGRU
            AND NRSEQSUBGRUSEMAM = V_NRSEQSUBGRUSEMAM_NOVO
            AND CDCICLO = P_CDCICLO;

         IF V_EXISTE_SUBGRU_NOVO > 0 THEN
            IF V_EXISTE_VINCULO > 0 THEN
               IF P_VALIDACAO = 'S' THEN
                  /* O item de faturamento $param[0] da classe $param[1] e ciclo $param[2] da companhia $param[3] esta relacionado ao subgrupo $param[4] expirado do menu grid $param[5] que possui manutencao nao relacionada ao item na tabela de precos. */
                  P_MSGERRO := P_MSGERRO || '>><<' ||  'APPERRMSGSTR' || 'APP-00151'|| '$$' ||  
                                                        V_SERVICO || '$$' ||
                                                        V_DESC_VOO || '$$' ||
                                                        C_SUBGRU_ITENS.DSSUBGRU || '$$' ||
                                                        V_MANUAL || 'APPERRMSGEND';
               ELSE
                  /* O item de faturamento $param[0] da classe $param[1] e ciclo $param[2] da companhia $param[3] esta relacionado ao subgrupo $param[4] expirado do menu grid $param[5] que possui manutencao nao relacionada ao item na tabela de precos. */
                  RAISE_APPLICATION_ERROR(-20000,'APPERRMSGSTR' || 'APP-00151'|| '$$' ||  
                                                  V_SERVICO || '$$' ||
                                                  V_DESC_VOO || '$$' ||
                                                  C_SUBGRU_ITENS.DSSUBGRU || '$$' ||
                                                  V_MANUAL || 'APPERRMSGEND');
               END IF;
            ELSE
               IF P_VALIDACAO = 'S' THEN
                  /* O item de faturamento $param[0] da classe $param[1] e ciclo $param[2] da companhia $param[3] esta relacionado ao subgrupo $param[4] expirado do menu grid $param[5] que possui manutencao nao vinculada ao item de faturamento. */
                  P_MSGERRO := P_MSGERRO || '>><<' || 'APPERRMSGSTR' || 'APP-00152'|| '$$' ||  
                                                      V_SERVICO || '$$' ||
                                                      V_DESC_VOO || '$$' ||
                                                      C_SUBGRU_ITENS.DSSUBGRU || '$$' ||
                                                      V_MANUAL || 'APPERRMSGEND';
               ELSE
                  /* O item de faturamento $param[0] da classe $param[1] e ciclo $param[2] da companhia $param[3] esta relacionado ao subgrupo $param[4] expirado do menu grid $param[5] que possui manutencao nao vinculada na tabela de precos. */
                  RAISE_APPLICATION_ERROR(-20000,'APPERRMSGSTR' || 'APP-00152'|| '$$' ||  
                                                 V_SERVICO || '$$' ||
                                                 V_DESC_VOO || '$$' ||
                                                 C_SUBGRU_ITENS.DSSUBGRU || '$$' ||
                                                 V_MANUAL || 'APPERRMSGEND');
               END IF;
            END IF;
         /*Se algum dos subgrupos exipirados possui vigencia alterada*/
         ELSIF V_VIGENCIA_ALTERADA = 'S' THEN
            IF P_VALIDACAO = 'S' THEN
                /* O item de faturamento $param[0] da classe $param[1] e ciclo $param[2] da companhia $param[3] esta relacionado ao subgrupo $param[4] expirado do menu grid $param[5] cuja vigencia foi modificada apos sua relacao no item de faturamento */
                P_MSGERRO := P_MSGERRO || '>><<' || 'APPERRMSGSTR' || 'APP-00159'|| '$$' ||  
                                                    V_SERVICO || '$$' ||
                                                    V_DESC_VOO || '$$' ||
                                                    C_SUBGRU_ITENS.DSSUBGRU || '$$' ||
                                                    V_MANUAL || 'APPERRMSGEND';
            ELSE
                /* O item de faturamento $param[0] da classe $param[1] e ciclo $param[2] da companhia $param[3] esta relacionado ao subgrupo $param[4] expirado do menu grid $param[5] cuja vigencia foi modificada apos sua relacao no item de faturamento */
                RAISE_APPLICATION_ERROR(-20000,'APPERRMSGSTR' || 'APP-00159'|| '$$' ||  
                                               V_SERVICO || '$$' ||
                                               V_DESC_VOO || '$$' ||
                                               C_SUBGRU_ITENS.DSSUBGRU || '$$' ||
                                               V_MANUAL || 'APPERRMSGEND');
            END IF;
         END IF;
      END IF;

   END LOOP;

   IF P_MSGERRO IS NOT NULL THEN
    RETURN;
   END IF;    

   IF V_SUBGRU_ATIVOS = 0 THEN
    IF V_IDVINCULOMANUAL = 'S' THEN
       IF V_SUBGRUPOS > 0 THEN
          IF P_VALIDACAO = 'S' THEN
             /* Operacao bloqueada. O servico $param[0] da classe: $param[1] e ciclo: $param[2] do voo esta vinculado a subgrupos do menu grid $param[3] mas nao ha subgrupo vigente. */
             P_MSGERRO := 'APPERRMSGSTR' || 'APP-00081'|| '$$' ||  V_SERVICO || '$$' || V_DESC_VOO || '$$' || V_MANUAL || 'APPERRMSGEND';
          ELSE
             /* Operacao bloqueada. O servico $param[0] da classe: $param[1] e ciclo: $param[2] do voo esta vinculado a subgrupos do menu grid $param[3] mas nao ha subgrupo vigente. */
             RAISE_APPLICATION_ERROR(-20000,'APPERRMSGSTR' || 'APP-00081'|| '$$' ||  V_SERVICO || '$$' || V_DESC_VOO || '$$' || V_MANUAL || 'APPERRMSGEND');
          END IF;
       ELSE
          IF P_VALIDACAO = 'S' THEN

             /* Operacao bloqueada. O servico $param[0] da classe: $param[1] e ciclo: $param[2] do voo nao esta vinculado a um subgrupo de menu grid. */
             P_MSGERRO := 'APPERRMSGSTR' || 'APP-00079'|| '$$' ||  V_SERVICO || '$$' || V_DESC_VOO || '$$' || V_MANUAL || 'APPERRMSGEND';
          ELSE
             /* Operacao bloqueada. O servico $param[0] da classe: $param[1] e ciclo: $param[2] do voo nao esta vinculado a um subgrupo de menu grid. */
             RAISE_APPLICATION_ERROR(-20000,'APPERRMSGSTR' || 'APP-00079'|| '$$' ||  V_SERVICO || '$$' || V_DESC_VOO || '$$' || V_MANUAL || 'APPERRMSGEND');
          END IF;
       END IF;
    END IF;
   END IF;

END;
/