CREATE OR REPLACE TRIGGER INSERE_RESERVA_SANGRIA
AFTER INSERT  
ON MOVCAIXA FOR EACH ROW 
DECLARE 
  V_IDGERARESESANG VARCHAR2(01);
  V_NRMOVBANC      VARCHAR2(20);
  V_NRMOVCRED      VARCHAR2(20);
  V_CDREDUCONT     VARCHAR2(03);
  V_IDTIPORECE     VARCHAR2(01);
  V_CDEMPRESA      VARCHAR2(02);
  V_CDCLASSFINA    CONTARECEBER.CDCLASSFINA%TYPE;
  V_CDCENTCUST     FILIAL.CDCENTCUST%TYPE;
  V_VRATUAL        FLOAT;
  V_DTSALDO        DATE;
  V_CDTPCREDBANC   MOVCREDBANC.CDTPCREDBANC%TYPE;
BEGIN
   BEGIN
     SELECT IDGERALANCREDSAN, CDTPCREDBANCSAN, CDREDUCONTSAN
       INTO V_IDGERARESESANG, V_CDTPCREDBANC, V_CDREDUCONT 
       FROM PARAVEND
      WHERE CDFILIAL = :NEW.CDFILIAL;
   EXCEPTION
        WHEN NO_DATA_FOUND THEN
        V_IDGERARESESANG := NULL;
        V_CDTPCREDBANC   := NULL;
        V_CDREDUCONT     := NULL;
   END;
   IF (INSERTING) AND (NVL(V_IDGERARESESANG,'N') = 'S') AND (:NEW.IDTIPOMOVIVE = 'G') THEN
      BEGIN
        SELECT IDTIPORECE
          INTO V_IDTIPORECE
          FROM TIPORECE
         WHERE CDTIPORECE = :NEW.CDTIPORECE;
      EXCEPTION
           WHEN NO_DATA_FOUND THEN
           V_IDTIPORECE := NULL;
      END;
      BEGIN
        SELECT CDCENTCUST, CDEMPRESA
          INTO V_CDCENTCUST, V_CDEMPRESA 
          FROM FILIAL
         WHERE CDFILIAL = :NEW.CDFILIAL;
      EXCEPTION
           WHEN NO_DATA_FOUND THEN
           V_CDCENTCUST := NULL;
           V_CDEMPRESA  := NULL;
      END;
      BEGIN
        SELECT CDCLASSFINA
          INTO V_CDCLASSFINA
          FROM TPCREDBANC
         WHERE CDTPCREDBANC = V_CDTPCREDBANC;
      EXCEPTION
           WHEN NO_DATA_FOUND THEN
           V_CDCLASSFINA := NULL;
      END;
      
      IF V_IDTIPORECE = '4' THEN
         NOVO_CODIGO_NT('MOVBANCARIO' || V_CDREDUCONT, V_NRMOVBANC);
         NOVO_CODIGO_NT('MOVCREDBANC' || V_CDREDUCONT, V_NRMOVCRED);
         V_NRMOVBANC := SUBSTR(V_NRMOVBANC, 11, 10);
         V_NRMOVCRED := SUBSTR(V_NRMOVCRED, 11, 10);
         ATUALIZA_FLUXO_DE_CAIXA(V_CDEMPRESA,
                                 :NEW.CDFILIAL,
                                 :NEW.DTMOVIMCAIXA,
                                 'R',
                                 V_CDCLASSFINA,
                                 :NEW.VRMOVIVEND,
                                 0);

         INSERT INTO MOVBANCARIO
            (CDREDUCONT, NRMOVBANC, DTMOVBANC,
             IDMOVBANC,NRDOCMBANC, DSHISMBANC,
             VRMOVBANC,IDORIGMBANC,IDSTCONEXT)
         VALUES
            (V_CDREDUCONT, V_NRMOVBANC, :NEW.DTMOVIMCAIXA,
             'C', NULL, 'CREDITO SANGRIA FILIAL: '||:NEW.CDFILIAL||' CAIXA: '||:NEW.CDCAIXA,
             :NEW.VRMOVIVEND,'C', '0');
         INSERT INTO MOVCREDBANC
            (CDREDUCONT, NRMOVICRED, CDCLASSFINA, CDEMPRESA, CDFILIAL, DTMOVFLUXO,
             IDMOVFLUXO, NRMOVBANC, CDTPCREDBANC, DTMOVICRED, DSMOVICRED, VRMOVICRED,
             CDECTBMCRED, CDFILILANCRE, CDCLIENTE, CDFORNECED, CDCENTCUST)
         VALUES
            (V_CDREDUCONT, V_NRMOVCRED, V_CDCLASSFINA, V_CDEMPRESA, :NEW.CDFILIAL, :NEW.DTMOVIMCAIXA,
             'R', V_NRMOVBANC, V_CDTPCREDBANC, :NEW.DTMOVIMCAIXA, 'CREDITO SANGRIA FILIAL: '||:NEW.CDFILIAL||' CAIXA: '||:NEW.CDCAIXA, :NEW.VRMOVIVEND,
             V_CDEMPRESA, :NEW.CDFILIAL, NULL, NULL, V_CDCENTCUST);
             /*Atualiza saldo da conta corrente*/
             SELECT MAX(DTSDOCCORR)
               INTO V_DTSALDO
               FROM SDOCCORR
              WHERE CDREDUCONT = V_CDREDUCONT
                AND DTSDOCCORR <= :NEW.DTMOVIMCAIXA;

             SELECT MAX(VRSDOCCORR)
               INTO V_VRATUAL
               FROM SDOCCORR
              WHERE CDREDUCONT = V_CDREDUCONT
                AND DTSDOCCORR = :NEW.DTMOVIMCAIXA;

             V_VRATUAL := NVL(V_VRATUAL,0) + NVL(:NEW.VRMOVIVEND,0);

             IF :NEW.DTMOVIMCAIXA =  V_DTSALDO THEN
                UPDATE SDOCCORR
                   SET VRSDOCCORR = V_VRATUAL,
                       VRSDOIMPLA = NULL
                 WHERE CDREDUCONT = V_CDREDUCONT
                   AND DTSDOCCORR = V_DTSALDO;
             ELSE
                INSERT INTO SDOCCORR
                   (CDREDUCONT, DTSDOCCORR, VRSDOCCORR, VRSDOIMPLA)
                VALUES
                   (V_CDREDUCONT, :NEW.DTMOVIMCAIXA, V_VRATUAL, NULL);
             END IF;
      END IF;
   END IF;
  /* IF DELETING THEN

   END IF; */
END;