/* Sistemas Integrados TECNISA
   Compras e Suprimentos

Nome:  EXCLUI_CONTAPAGAR_PREVISTA

Descrição:
Rotina destinada à exclusão da conta a pagar prevista da AF

P_CDFILDEST  Filial Destino
P_CDFILLANC  Filial de Lançamento
P_NRAUTOFORN Número da AF

Criação:
14/01/2013 Marcelo Alexsandro Souza Silva

*/

CREATE OR REPLACE PROCEDURE EXCLUI_CONTAPAGAR_PREVISTA
                     (P_CDFILDEST  AUTOFORNE.CDFILDEST%TYPE,
                      P_CDFILLANC  AUTOFORNE.CDFILLANC%TYPE,
                      P_NRAUTOFORN AUTOFORNE.NRAUTOFORN%TYPE,
                      P_RESULTADO OUT VARCHAR2)
IS
   V_RESULTADO    NUMBER;
   V_CDFORNECED   FORNECEDOR.CDFORNECED%TYPE;
   V_IDGERCONTPGT FORNECEDOR.CDFORNECED%TYPE;
BEGIN
   UPDATE AUTOFORNE
      SET IDORCAFINULTRAP = 'N'
    WHERE CDFILDEST  = P_CDFILDEST
      AND CDFILLANC  = P_CDFILLANC
      AND NRAUTOFORN = P_NRAUTOFORN
      AND NVL(IDORCAFINULTRAP, 'N') <> 'N';
   SELECT MAX(CDFORNECED)
     INTO V_CDFORNECED
     FROM AUTOFORNE
    WHERE AUTOFORNE.CDFILDEST = P_CDFILDEST
      AND AUTOFORNE.CDFILLANC = P_CDFILLANC
      AND AUTOFORNE.NRAUTOFORN = P_NRAUTOFORN;
   SELECT NVL(MAX(IDGERCONTPGT), 'N')
     INTO V_IDGERCONTPGT
     FROM FORNECEDOR
    WHERE CDFORNECED = V_CDFORNECED;
   IF V_IDGERCONTPGT = 'S' THEN
     FOR C_MOVFLUXO IN
       (SELECT
          MOVFLUXAF.CDFILDEST,
          MOVFLUXAF.CDFILLANC,
          MOVFLUXAF.NRAUTOFORN,
          MOVFLUXAF.DTENTMOVAF,
          MOVFLUXAF.DTPREVVENC,
          MOVFLUXAF.CDCLASSFINAF,
          MOVFLUXAF.VRPREVAF,
          AUTOFORNE.CDEMPRESA
        FROM
          MOVFLUXAF,
          AUTOFORNE
        WHERE AUTOFORNE.CDFILDEST  = P_CDFILDEST
          AND AUTOFORNE.CDFILLANC  = P_CDFILLANC
          AND AUTOFORNE.NRAUTOFORN = P_NRAUTOFORN
          AND AUTOFORNE.CDFILDEST  = MOVFLUXAF.CDFILDEST
          AND AUTOFORNE.CDFILLANC  = MOVFLUXAF.CDFILLANC
          AND AUTOFORNE.NRAUTOFORN = MOVFLUXAF.NRAUTOFORN)
     LOOP
        /*VERIFICA SE O VALOR DO VENCIMENTO NÃO SUPERA O VALOR ORÇADO*/
        ORCAMENTO_OK(C_MOVFLUXO.CDEMPRESA,
                     C_MOVFLUXO.CDFILDEST,
                     C_MOVFLUXO.CDCLASSFINAF,
                     C_MOVFLUXO.DTPREVVENC,
                     C_MOVFLUXO.VRPREVAF,
                     V_RESULTADO);
        IF V_RESULTADO = 0 THEN
           P_RESULTADO := 'CNT_SUP_VRORC'; /*CONTA A PAGAR SUPERA O VALOR ORÇADO*/
           RETURN;
        END IF;

        /*ATUALIZA FLUXO DE CAIXA DO AJUSTE*/
        ATUALIZA_FLUXO_DE_CAIXA(C_MOVFLUXO.CDEMPRESA,
                                C_MOVFLUXO.CDFILDEST,
                                C_MOVFLUXO.DTPREVVENC,
                                'P',
                                C_MOVFLUXO.CDCLASSFINAF,
                                0,
                                C_MOVFLUXO.VRPREVAF);
     END LOOP;

     /* Apos a atualizacao do fluxo, deletar os dados da MovFluxAF */
     DELETE FROM MOVFLUXAF
     WHERE CDFILDEST  = P_CDFILDEST
       AND CDFILLANC  = P_CDFILLANC
       AND NRAUTOFORN = P_NRAUTOFORN;

     /*Busca NF geradas pelos Items*/
     FOR C_NF IN
       (SELECT DISTINCT
          NOTAFISCAL.CDFILIAL,
          NOTAFISCAL.NRLANCTONF,
          NOTAFISCAL.DTENTRSAID,
          NOTAFISCAL.CDEMPRESA,
          NOTAFISCAL.VRPRODUTOS,
          NOTAFISCAL.VRNOTAFISC - NVL(IMPRETER.TOTIMPRET,0) AS VRNOTAFISC
        FROM NOTAFISCAL, ITEMAUTF,
        (
        SELECT
         IMPITMAF.DTPROGENTAF,
         SUM(IMPITMAF.VRIMPITMAF) AS TOTIMPRET
        FROM
         IMPOSTO, IMPITMAF
        WHERE IMPITMAF.CDFILDEST  = P_CDFILDEST
          AND IMPITMAF.CDFILLANC  = P_CDFILLANC
          AND IMPITMAF.NRAUTOFORN = P_NRAUTOFORN
          AND IMPOSTO.CDIMPOSTO   = IMPITMAF.CDIMPOSTO
          AND IMPOSTO.IDTRATIMPO  = 'R'
        GROUP BY
         IMPITMAF.DTPROGENTAF) IMPRETER
        WHERE ITEMAUTF.CDFILDEST    = P_CDFILDEST
          AND ITEMAUTF.CDFILLANC    = P_CDFILLANC
          AND ITEMAUTF.NRAUTOFORN   = P_NRAUTOFORN
          AND NOTAFISCAL.CDFILIAL   = ITEMAUTF.CDFILLANC
          AND NOTAFISCAL.NRLANCTONF = ITEMAUTF.NRLANCTONF
          AND NOTAFISCAL.IDSISTEMA  = 'CMP'
          AND IMPRETER.DTPROGENTAF (+) = NOTAFISCAL.DTENTRSAID)
     LOOP
        /*Deletando Contas a pagar*/
        DELETE FROM CONTAPAGAR
        WHERE (CDFILIAL, NRLANCTONF) IN
        (SELECT CDFILIAL, NRLANCTONF
           FROM NOTAFISCAL
          WHERE CDFILIAL   = C_NF.CDFILIAL
            AND NRLANCTONF = C_NF.NRLANCTONF);

        /*Limpa o Campo NRLANCTONF da tabela de ItemAutF*/
        UPDATE ITEMAUTF
           SET NRLANCTONF = NULL
        WHERE CDFILLANC = C_NF.CDFILIAL
          AND NRLANCTONF = C_NF.NRLANCTONF;

        /*Deleta Nota Fiscal*/
        DELETE FROM NOTAFISCAL
        WHERE CDFILIAL   = C_NF.CDFILIAL
          AND NRLANCTONF = C_NF.NRLANCTONF
          AND IDSISTEMA  = 'CMP';
     END LOOP;
  END IF;
END;
/