CREATE OR REPLACE PROCEDURE CONCLUI_WORKFLOW_CMP(P_NRAUTOFORN     IN VARCHAR2,
                                                 P_NRSEQAPURAF    IN VARCHAR2,
                                                 P_DSMOTVAFALCADA IN VARCHAR2,
                                                 P_ENVIAREMAIL    OUT VARCHAR2)
AS
  V_NRAPROVALCADA   VARCHAR2(20);
  V_RETORNO         VARCHAR2(1);
  V_CDOPERADOR      OPERADOR.CDOPERADOR%TYPE;
  V_VRAPROVCMP      ALCADAGERFILI.VRAPROVCMP%TYPE;
BEGIN
   P_ENVIAREMAIL := 'N';
   FOR C_AUTOFORNE IN (SELECT AUTOFORNE.CDFILDEST, AUTOFORNE.CDFILLANC, AUTOFORNE.NRAUTOFORN, ITEMAUTF.DTPROGENTAF,
                              MAX(CONFIGALCADA.NRCONFIGALCADA) NRCONFIGALCADA
                         FROM AUTOFORNE, FILIAL, ITEMAUTF, CONFIGALCADA, FILIALCADA
                        WHERE AUTOFORNE.CDFILDEST  = ITEMAUTF.CDFILDEST
                          AND AUTOFORNE.CDFILLANC  = ITEMAUTF.CDFILLANC
                          AND AUTOFORNE.NRAUTOFORN = ITEMAUTF.NRAUTOFORN
                          AND AUTOFORNE.CDFILDEST  = FILIAL.CDFILIAL
                          AND AUTOFORNE.IDSITUATUAAF IS NULL
                          AND AUTOFORNE.IDAFFORALIM = 'N'
                          AND (INSTR('_'||NVL(P_NRAUTOFORN, AUTOFORNE.NRAUTOFORN)||'_', AUTOFORNE.NRAUTOFORN) > 0)
                          AND NVL(AUTOFORNE.NRSEQAPURAF, 'T') = NVL(P_NRSEQAPURAF, NVL(AUTOFORNE.NRSEQAPURAF, 'T'))
                          AND CONFIGALCADA.NRCONFIGALCADA = FILIALCADA.NRCONFIGALCADA
                          AND FILIALCADA.CDFILIAL = AUTOFORNE.CDFILDEST
                          AND ((CONFIGALCADA.IDLANCAFEXTRA = AUTOFORNE.IDAUTOFORNEX) OR (CONFIGALCADA.IDLANCAFEXTRA = 'AMBOS'))
                          AND ((CONFIGALCADA.IDTIPOAF = AUTOFORNE.IDTIPOLANCAF)      OR (CONFIGALCADA.IDTIPOAF = 'AMBOS'))
                          AND ((CONFIGALCADA.IDTPLANC = CASE
                                                           WHEN AUTOFORNE.CDFILLANC = NVL(FILIAL.CDFILCENTCMP, FILIAL.CDFILIAL)
                                                           THEN 'MATRIZ'
                                                           ELSE 'UNIDADE'
                                                         END  )               OR (CONFIGALCADA.IDTPLANC = 'AMBOS'))
                          AND EXISTS(SELECT 1
                                           FROM ALCADAGERFILI
                                          WHERE ALCADAGERFILI.CDFILIAL       = AUTOFORNE.CDFILDEST
                                            AND ALCADAGERFILI.NRCONFIGALCADA = CONFIGALCADA.NRCONFIGALCADA)
                        GROUP BY AUTOFORNE.CDFILDEST, AUTOFORNE.CDFILLANC, AUTOFORNE.NRAUTOFORN, ITEMAUTF.DTPROGENTAF
                        ORDER BY AUTOFORNE.CDFILDEST, AUTOFORNE.CDFILLANC, AUTOFORNE.NRAUTOFORN, ITEMAUTF.DTPROGENTAF)
   LOOP
      CONSISTE_ORCAMENTO_GOP(C_AUTOFORNE.CDFILDEST, C_AUTOFORNE.CDFILLANC, C_AUTOFORNE.NRAUTOFORN, V_RETORNO, 1, C_AUTOFORNE.DTPROGENTAF);
      IF V_RETORNO = 'N' THEN
         P_ENVIAREMAIL := 'S';
          DELETE
           FROM APROVALCADA
          WHERE NRCONFIGALCADA = C_AUTOFORNE.NRCONFIGALCADA
             AND CDFILDEST     = C_AUTOFORNE.CDFILDEST
             AND CDFILLANC     = C_AUTOFORNE.CDFILLANC
             AND NRDEMANDA     = C_AUTOFORNE.NRAUTOFORN;

         UPDATE AUTOFORNE
            SET NRCONFIGALCADA = C_AUTOFORNE.NRCONFIGALCADA, IDSITAFALCADA = 'PENDENTE', IDBAIXAAF = '3'
          WHERE CDFILDEST  = C_AUTOFORNE.CDFILDEST
            AND CDFILLANC  = C_AUTOFORNE.CDFILLANC
            AND NRAUTOFORN = C_AUTOFORNE.NRAUTOFORN;
         NOVO_CODIGO_NT('APROVALCADA', V_NRAPROVALCADA);

         SELECT MIN(VRAPROVCMP)
           INTO V_VRAPROVCMP
           FROM ALCADAGERFILI
          WHERE ALCADAGERFILI.CDFILIAL       = C_AUTOFORNE.CDFILDEST
            AND ALCADAGERFILI.NRCONFIGALCADA = C_AUTOFORNE.NRCONFIGALCADA;

         SELECT MAX(CDOPERADOR)
           INTO V_CDOPERADOR
           FROM ALCADAGERFILI
          WHERE ALCADAGERFILI.CDFILIAL       = C_AUTOFORNE.CDFILDEST
            AND ALCADAGERFILI.NRCONFIGALCADA = C_AUTOFORNE.NRCONFIGALCADA
            AND ALCADAGERFILI.VRAPROVCMP     = V_VRAPROVCMP;
         INSERT
           INTO APROVALCADA(NRAPROVALCADA, NRCONFIGALCADA, CDFILDEST,
                            CDFILLANC, NRDEMANDA, CDOPERADOR, DTINCLUSAO,
                            IDTPDEMANDA, IDCLASSIFIC, IDOPERACAOALC, IDAPROVADO)
         VALUES (TO_NUMBER(V_NRAPROVALCADA), C_AUTOFORNE.NRCONFIGALCADA, C_AUTOFORNE.CDFILDEST,
                C_AUTOFORNE.CDFILLANC, C_AUTOFORNE.NRAUTOFORN, V_CDOPERADOR, TRUNC(SYSDATE),
                'AF', 'PADRAO', 'LANCAMENTO', 'PENDENTE');
      END IF;
   END LOOP;
END;
/