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;
  V_IDORIGEMCONS    CONSISTORCAMENTO.IDORIGEMCONS%TYPE;
  V_CDDESPPREV      CONSISTORCAMENTO.CDDESPPREV%TYPE;
  V_NRCONFIGALCADA  CONFIGALCADA.NRCONFIGALCADA%TYPE;
BEGIN
   P_ENVIAREMAIL := 'N';
   FOR C_AUTOFORNE IN (SELECT AUTOFORNE.CDFILDEST, AUTOFORNE.CDFILLANC, AUTOFORNE.NRAUTOFORN, ITEMAUTF.DTPROGENTAF,
                              MAX(CONFIGALCADA.NRCONFIGALCADA) NRCONFIGALCADA, AUTOFORNE.IDAUTOFORNEX, AUTOFORNE.IDTIPOLANCAF,
                              CASE
                                 WHEN AUTOFORNE.CDFILLANC = NVL(FILIAL.CDFILCENTCMP, FILIAL.CDFILIAL)
                                 THEN 'MATRIZ'
                                 ELSE 'UNIDADE'
                              END  IDTPLANC
                         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,
                                 AUTOFORNE.IDAUTOFORNEX, AUTOFORNE.IDTIPOLANCAF,
                                 CASE
                                    WHEN AUTOFORNE.CDFILLANC = NVL(FILIAL.CDFILCENTCMP, FILIAL.CDFILIAL)
                                    THEN 'MATRIZ'
                                    ELSE 'UNIDADE'
                                 END
                        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);
      SELECT NVL(MAX(IDORIGEMCONS), 'CONSUMO'), NVL(MAX(CDDESPPREV), 'T')
        INTO V_IDORIGEMCONS, V_CDDESPPREV
        FROM CONSISTORCAMENTO
       WHERE NRCONSISTORCAMENTO IN (SELECT NRCONSISTORCAMENTO
                                      FROM (SELECT NRCONSISTORCAMENTO
                                              FROM CONSISTORCAMENTO
                                             WHERE CDFILDEST = C_AUTOFORNE.CDFILDEST
                                               AND CDFILLANC = C_AUTOFORNE.CDFILLANC
                                               AND NRDEMANDA = C_AUTOFORNE.NRAUTOFORN
                                               AND IDTPDEMANDA = 'AF'
                                             ORDER BY NRCONSISTORCAMENTO DESC)
                                     WHERE ROWNUM = 1);
      IF V_IDORIGEMCONS <> 'CONSUMO' THEN
         SELECT 'DESPESA', CDDESPPREV
           INTO V_IDORIGEMCONS, V_CDDESPPREV
           FROM PRODDESPPREV, PRODUTO PRODUTOPREV
          WHERE PRODDESPPREV.CDPRODUTO = PRODUTOPREV.CDPRODUTO
            AND PRODUTOPREV.CDARVPROD IN (SELECT MAX(PRODUTOPREV.CDARVPROD) CDARVPROD
                                            FROM PRODDESPPREV, PRODUTO PRODUTOPREV, ITEMAUTF, PRODUTO
                                           WHERE ITEMAUTF.CDPRODUTO = PRODUTO.CDPRODUTO
                                             AND PRODDESPPREV.CDPRODUTO = PRODUTOPREV.CDPRODUTO
                                             AND PRODUTO.CDARVPROD LIKE PRODUTOPREV.CDARVPROD || '%'
                                             AND CDFILDEST = C_AUTOFORNE.CDFILDEST
                                             AND CDFILLANC = C_AUTOFORNE.CDFILLANC
                                             AND NRAUTOFORN = C_AUTOFORNE.NRAUTOFORN)
                                           ORDER BY CDDESPPREV DESC;
      END IF;
      IF V_RETORNO = 'N' THEN
         P_ENVIAREMAIL := 'S';
         SELECT NVL(MAX(C.NRCONFIGALCADA), C_AUTOFORNE.NRCONFIGALCADA) AS NRCONFIGALCADA
           INTO V_NRCONFIGALCADA
           FROM CONFIGALCADA C, FILIALCADA F
          WHERE C.NRCONFIGALCADA = F.NRCONFIGALCADA
            AND F.CDFILIAL = C_AUTOFORNE.CDFILDEST
            AND ( ( C.IDLANCAFEXTRA = C_AUTOFORNE.IDAUTOFORNEX ) OR ( C.IDLANCAFEXTRA = 'AMBOS' ) )
            AND ( ( C.IDTIPOAF = C_AUTOFORNE.IDTIPOLANCAF ) OR ( C.IDTIPOAF = 'AMBOS' ) )
            AND ( ( C.IDTPLANC = C_AUTOFORNE.IDTPLANC )  OR ( C.IDTPLANC = 'AMBOS' ) )
            AND ( ( C.IDTIPORCAOP = V_IDORIGEMCONS) AND ( NVL(C.CDDESPPREV, 'T') = CDDESPPREV ) )
            AND EXISTS (SELECT 1
                          FROM ALCADAGERFILI
                         WHERE ALCADAGERFILI.NRCONFIGALCADA = F.NRCONFIGALCADA
                           AND ALCADAGERFILI.CDFILIAL = F.CDFILIAL);
         DELETE
           FROM APROVALCADA
          WHERE NRCONFIGALCADA = V_NRCONFIGALCADA
             AND CDFILDEST     = C_AUTOFORNE.CDFILDEST
             AND CDFILLANC     = C_AUTOFORNE.CDFILLANC
             AND NRDEMANDA     = C_AUTOFORNE.NRAUTOFORN;

         UPDATE AUTOFORNE
            SET NRCONFIGALCADA = V_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 = V_NRCONFIGALCADA;

         SELECT MAX(CDOPERADOR)
           INTO V_CDOPERADOR
           FROM ALCADAGERFILI
          WHERE ALCADAGERFILI.CDFILIAL       = C_AUTOFORNE.CDFILDEST
            AND ALCADAGERFILI.NRCONFIGALCADA = V_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), V_NRCONFIGALCADA, C_AUTOFORNE.CDFILDEST,
                C_AUTOFORNE.CDFILLANC, C_AUTOFORNE.NRAUTOFORN, V_CDOPERADOR, TRUNC(SYSDATE),
                'AF', 'PADRAO', 'LANCAMENTO', 'PENDENTE');
      END IF;
   END LOOP;
END;
/