--@C:\Web_409\Sql\End_Conv\Oracle\1080_FINSTPO_EVOLUCAO_FLUXO_CAIXA.SQL

CREATE OR REPLACE PROCEDURE EVOLUCAO_FLUXO_CAIXA
(P_CDEMPRESA  IN VARCHAR2,
 P_DTMOVFLUXO IN MOVFLUXO.DTMOVFLUXO%TYPE)

IS

   V_IDAJUSTE    TIPOAJPAGAR.IDAJUCTPAG%TYPE;
   V_VRMOVFLUXO  MOVFLUXO.VRENTMFLUXO%TYPE;
   V_IDMOVFLUXO  MOVFLUXO.IDMOVFLUXO%TYPE;
   V_DTMOVFLUXO  MOVFLUXO.DTMOVFLUXO%TYPE;

BEGIN

   UPDATE MOVFLUXO
   SET VRENTMFLUXO = 0,
       VRSAIMFLUXO = 0
   WHERE (P_CDEMPRESA = 'T' OR INSTR(P_CDEMPRESA, CDEMPRESA) > 0) AND
         (DTMOVFLUXO >= P_DTMOVFLUXO);

   DELETE FROM MOVFXAJBOLR
   WHERE (P_CDEMPRESA = 'T' OR INSTR(P_CDEMPRESA, CDEMPRESA) > 0) AND
         (DTMOVFLUXO >= P_DTMOVFLUXO);

   DELETE FROM MOVFXAJBOLP
   WHERE (P_CDEMPRESA = 'T' OR INSTR(P_CDEMPRESA, CDEMPRESA) > 0) AND
         (DTMOVFLUXO >= P_DTMOVFLUXO);

   V_VRMOVFLUXO := 0;
   
   FOR C_MOVIMENTO IN (
   SELECT
      CHAVFIBOL, CHAVNRBOL, CLASSE, EMPRESA,
      FILIAL, DATA, IDENTIFICADOR, SUM(VALORFLUXO) VALORFLUXO,
      NMTABELA, CODIGO, IDSITMOV, CDFILIAL, NRLANCTONF,
      NRSEQVEN, NRPARCELA, DTAJUSTE, IDSTATUSDOC
   FROM
      (SELECT
          PG.CDFILIBPAG    CHAVFIBOL,     PG.NRLANBOLPAG   CHAVNRBOL,
          TCP.CDCLASSFINA  CLASSE,        PG.CDEMPRESA     EMPRESA,
          PG.CDFIMOVFLPAG  FILIAL,        PG.DTATUAVENPAG  DATA,
          PG.IDMOVFLUXO    IDENTIFICADOR, AJ.VRAJUSTEPAG   VALORFLUXO,
          'AJCTPAGAR'      NMTABELA,      AJ.CDAJUCTPAG    CODIGO,
          PG.IDSTATPAG     IDSITMOV,      AJ.CDFILIAL,     AJ.NRLANCTONF,
          AJ.NRSEQVENPAG   NRSEQVEN,      AJ.NRPARCELAPAG  NRPARCELA,
          AJ.DTAJUSTEPAG   DTAJUSTE,      'A'              IDSTATUSDOC
       FROM
          CONTAPAGAR PG, AJCTPAGAR AJ, TIPOCTPAGAR TCP,
          (SELECT CDEMPRESA
           FROM EMPRESA
           WHERE (P_CDEMPRESA = 'T' OR INSTR(P_CDEMPRESA, CDEMPRESA) > 0)) EM
       WHERE
          (AJ.CDEMMFAJCNTP = EM.CDEMPRESA)   AND
          (AJ.DTMOVFLUXO  >= P_DTMOVFLUXO)   AND
          (PG.CDFILIAL     = AJ.CDFILIAL)    AND
          (PG.NRLANCTONF   = AJ.NRLANCTONF)  AND
          (PG.NRSEQVENPAG  = AJ.NRSEQVENPAG) AND
          (PG.NRPARCELAPAG = AJ.NRPARCELAPAG)AND
          (PG.CDTPCTPAGAR = TCP.CDTPCTPAGAR) AND
          (PG.IDSTATPAG <> 'C')
       UNION ALL
       SELECT
          PG.CDFILIBPAG    CHAVFIBOL,     PG.NRLANBOLPAG   CHAVNRBOL,
          TCP.CDCLASSFINA   CLASSE,        PG.CDEMPRESA     EMPRESA,
          PG.CDFIMOVFLPAG  FILIAL,        PG.DTATUAVENPAG  DATA,
          PG.IDMOVFLUXO    IDENTIFICADOR, PG.VRORIGPAG     VALORFLUXO,
          'CONTAPAGAR'     NMTABELA,      'TECNISA'        CODIGO,
          PG.IDSTATPAG     IDSITMOV,      PG.CDFILIAL,     PG.NRLANCTONF,
          PG.NRSEQVENPAG   NRSEQVEN,      PG.NRPARCELAPAG  NRPARCELA,
          PG.DTATUAVENPAG  DTAJUSTE,      NF.IDSTATUS      IDSTATUSDOC
       FROM
          NOTAFISCAL NF, CONTAPAGAR PG, TIPOCTPAGAR TCP,
          (SELECT CDEMPRESA
           FROM EMPRESA
           WHERE (P_CDEMPRESA = 'T' OR INSTR(P_CDEMPRESA, CDEMPRESA) > 0)) EM
       WHERE
          (PG.CDEMPRESA   = EM.CDEMPRESA)  AND
          (PG.DTMOVFLUXO >= P_DTMOVFLUXO)  AND
          (NF.CDFILIAL    = PG.CDFILIAL)   AND
          (NF.NRLANCTONF  = PG.NRLANCTONF) AND
          (NF.IDSTATUS IN ('A', 'V'))      AND
          (PG.CDTPCTPAGAR = TCP.CDTPCTPAGAR) AND
          (PG.IDSTATPAG <> 'C')
       UNION ALL
       SELECT
          ''             CHAVFIBOL,     ''            CHAVNRBOL,
          TDB.CDCLASSFINA CLASSE,        DB.CDEMPRESA  EMPRESA,
          DB.CDFILIAL    FILIAL,        DB.DTMOVFLUXO DATA,
          DB.IDMOVFLUXO  IDENTIFICADOR, DB.VRMOVIDEBI VALORFLUXO,
          'MOVDEBBANC'   NMTABELA,      'TECNISA'     CODIGO,
          'R'            IDSITMOV,      ''            CDFILIAL,
          ''             NRLANCTONF,    ''            NRSEQVEN,
          ''             NRPARCELA,     DB.DTMOVFLUXO DTAJUSTE,
          'R'            IDSTATUSDOC
       FROM
          MOVDEBBANC DB, TPDEBIBANC TDB,
          (SELECT CDEMPRESA
           FROM EMPRESA
           WHERE (P_CDEMPRESA = 'T' OR INSTR(P_CDEMPRESA, CDEMPRESA) > 0)) EM
       WHERE
          (DB.CDEMPRESA   = EM.CDEMPRESA) AND
          (DB.CDTPDEBIBANC = TDB.CDTPDEBIBANC) AND
          (DB.DTMOVFLUXO >= P_DTMOVFLUXO)
       UNION ALL
       SELECT
          ''             CHAVFIBOL,     ''             CHAVNRBOL,
          GFC.CDCLASSFINA CLASSE,        TF.CDEMPRESA   EMPRESA,
          TF.CDFILIAL    FILIAL,        TF.DTTRANBANC  DATA,
          TF.IDMOVFLUXO  IDENTIFICADOR, TF.VRTRANBANC  VALORFLUXO,
          'TRANSFBANC'   NMTABELA,      IT.IDMOVITBANC CODIGO,
          'R'            IDSITMOV,      ''             CDFILIAL,
          ''             NRLANCTONF,    ''             NRSEQVEN,
          ''             NRPARCELA,     TF.DTTRANBANC  DTAJUSTE,
          'R'            IDSTATUSDOC
       FROM
          TRANSFBANC   TF,  ITTRANSFBANC IT,  CONTCORR CT, GERAL_FCX GFC
       WHERE
          (P_CDEMPRESA  = 'T' OR INSTR(P_CDEMPRESA, TF.CDEMPRESA) > 0) AND
          (TF.DTMOVFLUXO >= P_DTMOVFLUXO)  AND
          (TF.CDEMPRESA   = IT.CDEMPRESA)  AND
          (TF.NRTRANBANC  = IT.NRTRANBANC) AND
          (IT.CDEMPRESA   = CT.CDEMPRESA)  AND
          (IT.CDREDUCONT  = CT.CDREDUCONT) AND
          (CT.IDTIPOCCORR = 'C')
       UNION ALL
       SELECT
          ''             CHAVFIBOL,     ''             CHAVNRBOL,
          TCR.CDCLASSFINA CLASSE,        CR.CDEMPRESA   EMPRESA,
          CR.CDFILIAL    FILIAL,        CR.DTMOVFLUXO  DATA,
          CR.IDMOVFLUXO  IDENTIFICADOR, CR.VRMOVICRED  VALORFLUXO,
          'MOVCREDBANC'  NMTABELA,      'TECNISA'      CODIGO,
          'R'            IDSITMOV,      ''             CDFILIAL,
          ''             NRLANCTONF,    ''             NRSEQVEN,
          ''             NRPARCELA,     CR.DTMOVFLUXO  DTAJUSTE,
          'R'            IDSTATUSDOC
       FROM
          MOVCREDBANC CR, TPCREDBANC TCR,
          (SELECT CDEMPRESA
           FROM EMPRESA
           WHERE (P_CDEMPRESA = 'T' OR INSTR(P_CDEMPRESA, CDEMPRESA) > 0)) EM
       WHERE
          (CR.CDEMPRESA   = EM.CDEMPRESA) AND
          (CR.CDTPCREDBANC = TCR.CDTPCREDBANC) AND
          (CR.DTMOVFLUXO >= P_DTMOVFLUXO)
       UNION ALL
       SELECT
          CR.CDFILIBOLREC CHAVFIBOL,     CR.NRLANBOLREC   CHAVNRBOL,
          TCR.CDCLASSFINA  CLASSE,        CR.CDEMPRESA     EMPRESA,
          CR.CDFIMOVFLREC FILIAL,        CR.DTATUAVENREC  DATA,
          CR.IDMOVFLUXO   IDENTIFICADOR, CR.VRORIGREC     VALORFLUXO,
          'CONTARECEBER'  NMTABELA,      'TECNISA'        CODIGO,
          CR.IDSTATREC    IDSITMOV,      CR.CDFILIAL,     CR.NRLANCTONF,
          CR.NRSEQVENREC  NRSEQVEN,      CR.NRPARCELAREC  NRPARCELA,
          CR.DTATUAVENREC DTAJUSTE,      NF.IDSTATUS      IDSTATUSDOC
       FROM
          NOTAFISCAL   NF, CONTARECEBER CR, TIPOCTRECEBER TCR,
          (SELECT CDEMPRESA
           FROM EMPRESA
           WHERE (P_CDEMPRESA = 'T' OR INSTR(P_CDEMPRESA, CDEMPRESA) > 0)) EM
       WHERE
          (CR.CDEMPRESA   = EM.CDEMPRESA)  AND
          (CR.DTMOVFLUXO >= P_DTMOVFLUXO)  AND
          (NF.CDFILIAL    = CR.CDFILIAL)   AND
          (NF.NRLANCTONF  = CR.NRLANCTONF) AND
          (NF.IDSTATUS IN ('A', 'E', 'V')) AND
          (CR.IDSTATREC <> 'C') AND
          (CR.CDTPCTRECEB = TCR.CDTPCTRECEB) AND
          (CR.IDSTATREC <> 'D')
       UNION ALL
       SELECT
          CR.CDFILIBOLREC  CHAVFIBOL,     CR.NRLANBOLREC   CHAVNRBOL,
          TCR.CDCLASSFINA  CLASSE,        CR.CDEMPRESA     EMPRESA,
          CR.CDFIMOVFLREC FILIAL,        CR.DTATUAVENREC  DATA,
          CR.IDMOVFLUXO   IDENTIFICADOR, AJ.VRAJUSTEREC   VALORFLUXO,
          'AJCTRECEBER'   NMTABELA,      AJ.CDAJUCTREC    CODIGO,
          CR.IDSTATREC    IDSITMOV,      AJ.CDFILIAL,     AJ.NRLANCTONF,
          AJ.NRSEQVENREC  NRSEQVEN,      AJ.NRPARCELAREC  NRPARCELA,
          AJ.DTAJUSTEREC  DTAJUSTE,      'A'              IDSTATUSDOC
       FROM
          CONTARECEBER CR, AJCTRECEBER AJ, TIPOCTRECEBER TCR,
          (SELECT CDEMPRESA
           FROM EMPRESA
           WHERE (P_CDEMPRESA = 'T' OR INSTR(P_CDEMPRESA, CDEMPRESA) > 0)) EM
       WHERE
          (AJ.CDEMMFAJCNTR = EM.CDEMPRESA)   AND
          (AJ.DTMOVFLUXO  >= P_DTMOVFLUXO)   AND
          (CR.CDFILIAL     = AJ.CDFILIAL)    AND
          (CR.NRLANCTONF   = AJ.NRLANCTONF)  AND
          (CR.NRSEQVENREC  = AJ.NRSEQVENREC) AND
          (CR.NRPARCELAREC = AJ.NRPARCELAREC)AND
          (CR.IDSTATREC <> 'C') AND
          (CR.CDTPCTRECEB = TCR.CDTPCTRECEB) AND
          (CR.IDSTATREC <> 'D')
      ) A
   GROUP BY
      CHAVFIBOL, CHAVNRBOL, CLASSE, EMPRESA,
      FILIAL, DATA, IDENTIFICADOR,  NMTABELA,
      CODIGO, IDSITMOV, CDFILIAL, NRLANCTONF,
      NRSEQVEN, NRPARCELA, DTAJUSTE,IDSTATUSDOC) LOOP

      IF C_MOVIMENTO.NMTABELA = 'AJCTPAGAR' THEN
         SELECT IDAJUCTPAG
         INTO V_IDAJUSTE
         FROM TIPOAJPAGAR
         WHERE (CDAJUCTPAG = C_MOVIMENTO.CODIGO);

         IF V_IDAJUSTE = 'D' THEN
            V_VRMOVFLUXO := ROUND(C_MOVIMENTO.VALORFLUXO * (-1),2);
         ELSE
            V_VRMOVFLUXO := ROUND(C_MOVIMENTO.VALORFLUXO,2);
         END IF;
      END IF;

      IF C_MOVIMENTO.NMTABELA = 'AJCTRECEBER' THEN
         SELECT IDAJUCTREC
         INTO V_IDAJUSTE
         FROM TIPOAJRECEBER
         WHERE (CDAJUCTREC = C_MOVIMENTO.CODIGO);

         IF V_IDAJUSTE = 'D' THEN
            V_VRMOVFLUXO := ROUND(C_MOVIMENTO.VALORFLUXO * (-1),2);
         ELSE
            V_VRMOVFLUXO := ROUND(C_MOVIMENTO.VALORFLUXO,2);
         END IF;
      END IF;

      V_IDMOVFLUXO := '';

       IF C_MOVIMENTO.IDSTATUSDOC IN ('A', 'E') THEN
          IF C_MOVIMENTO.IDSITMOV = 'A' THEN
             V_IDMOVFLUXO := 'E';
          ELSIF C_MOVIMENTO.IDSITMOV = 'B' THEN
             V_IDMOVFLUXO := 'R';
          ELSIF C_MOVIMENTO.IDSITMOV = 'P' THEN
             V_IDMOVFLUXO := 'E';
          END IF;

       ELSIF C_MOVIMENTO.IDSTATUSDOC IN ('V', 'R') THEN
          IF C_MOVIMENTO.IDSITMOV = 'A' THEN
             V_IDMOVFLUXO := 'P';
          ELSIF C_MOVIMENTO.IDSITMOV = 'R' THEN
             V_IDMOVFLUXO := 'R';
          END IF;
       END IF;

       V_DTMOVFLUXO := C_MOVIMENTO.DATA;

       IF C_MOVIMENTO.IDSITMOV IN ('B', 'P') THEN 
          IF C_MOVIMENTO.NMTABELA IN ('CONTAPAGAR', 'AJCTPAGAR')  THEN
             SELECT MAX(BX.DTBAIXAPAG)
             INTO V_DTMOVFLUXO
             FROM BOLETPAGAR BO, BAIXAPAGA  BX
             WHERE (BO.CDFILIAL     = C_MOVIMENTO.CHAVFIBOL) AND
                   (BO.NRLANBOLPAG  = C_MOVIMENTO.CHAVNRBOL) AND
                   (BO.CDFILIBAIPAG = BX.CDFILIAL)           AND
                   (BO.NRBAIXAPAG   = BX.NRBAIXAPAG);

             IF V_DTMOVFLUXO IS NULL THEN
                V_DTMOVFLUXO := C_MOVIMENTO.DATA;
             END IF;
          END IF;

          IF C_MOVIMENTO.NMTABELA IN ('CONTARECEBER', 'AJCTRECEBER')  THEN
             SELECT MAX(BX.DTBAIXAREC)
             INTO V_DTMOVFLUXO
             FROM BOLETRECEBER  BO, BAIXARECEBIDA BX
             WHERE (BO.CDFILIAL     = C_MOVIMENTO.CHAVFIBOL) AND
                   (BO.NRLANBOLREC  = C_MOVIMENTO.CHAVNRBOL) AND
                   (BO.CDFILIBAIREC = BX.CDFILIAL)           AND
                   (BO.NRBAIXAREC   = BX.NRBAIXAREC);

             IF V_DTMOVFLUXO IS NULL THEN
                V_DTMOVFLUXO := C_MOVIMENTO.DATA;
             END IF;
          END IF;
       END IF;

       IF (C_MOVIMENTO.NMTABELA <> 'AJCTPAGAR') AND (C_MOVIMENTO.NMTABELA <> 'AJCTRECEBER') THEN
          V_VRMOVFLUXO := ROUND(C_MOVIMENTO.VALORFLUXO,2);
       END IF;

       IF (C_MOVIMENTO.NMTABELA IN ('AJCTPAGAR', 'CONTAPAGAR', 'MOVDEBBANC')) OR
          ((C_MOVIMENTO.NMTABELA = 'TRANSFBANC') AND (C_MOVIMENTO.CODIGO = 'D')) THEN

          IF (C_MOVIMENTO.EMPRESA IS NOT NULL)  AND
             (C_MOVIMENTO.FILIAL IS NOT NULL)   AND
             (C_MOVIMENTO.CLASSE IS NOT NULL)   AND
             (V_DTMOVFLUXO IS NOT NULL)         AND
             (V_VRMOVFLUXO IS NOT NULL)         AND
             (V_IDMOVFLUXO IS NOT NULL)         THEN

             ATUALIZA_FLUXO_DE_CAIXA
               (C_MOVIMENTO.EMPRESA, C_MOVIMENTO.FILIAL,
                V_DTMOVFLUXO, V_IDMOVFLUXO, C_MOVIMENTO.CLASSE,
                0, V_VRMOVFLUXO);

             IF C_MOVIMENTO.NMTABELA = 'CONTAPAGAR' THEN
                UPDATE CONTAPAGAR
                SET CDEMPRESA    = C_MOVIMENTO.EMPRESA,
                    CDCLASSFINA  = C_MOVIMENTO.CLASSE,
                    CDFIMOVFLPAG = C_MOVIMENTO.FILIAL,
                    DTMOVFLUXO   = V_DTMOVFLUXO,
                    IDMOVFLUXO   = V_IDMOVFLUXO
                WHERE CDFILIAL     = C_MOVIMENTO.CDFILIAL   AND
                      NRLANCTONF   = C_MOVIMENTO.NRLANCTONF AND
                      NRSEQVENPAG  = C_MOVIMENTO.NRSEQVEN   AND
                      NRPARCELAPAG = C_MOVIMENTO.NRPARCELA;
             END IF;

             IF C_MOVIMENTO.NMTABELA = 'AJCTPAGAR' THEN
                UPDATE AJCTPAGAR
                SET CDCLASSFINA  = C_MOVIMENTO.CLASSE,
                    CDEMMFAJCNTP = C_MOVIMENTO.EMPRESA,
                    CDFIMFAJCNTP = C_MOVIMENTO.FILIAL,
                    DTMOVFLUXO   = V_DTMOVFLUXO,
                    IDMOVFLUXO   = V_IDMOVFLUXO
                WHERE CDFILIAL     = C_MOVIMENTO.CDFILIAL   AND
                      NRLANCTONF   = C_MOVIMENTO.NRLANCTONF AND
                      NRSEQVENPAG  = C_MOVIMENTO.NRSEQVEN   AND
                      NRPARCELAPAG = C_MOVIMENTO.NRPARCELA  AND
                      DTAJUSTEPAG  = C_MOVIMENTO.DTAJUSTE   AND
                      CDAJUCTPAG   = C_MOVIMENTO.CODIGO;
             END IF;

             IF C_MOVIMENTO.NMTABELA = 'CONTARECEBER' THEN
                UPDATE CONTARECEBER
                SET CDEMPRESA    = C_MOVIMENTO.EMPRESA,
                    CDCLASSFINA  = C_MOVIMENTO.CLASSE,
                    CDFIMOVFLREC = C_MOVIMENTO.FILIAL,
                    DTMOVFLUXO   = V_DTMOVFLUXO,
                    IDMOVFLUXO   = V_IDMOVFLUXO
                WHERE CDFILIAL     = C_MOVIMENTO.CDFILIAL   AND
                      NRLANCTONF   = C_MOVIMENTO.NRLANCTONF AND
                      NRSEQVENREC  = C_MOVIMENTO.NRSEQVEN   AND
                      NRPARCELAREC = C_MOVIMENTO.NRPARCELA;
             END IF;

             IF C_MOVIMENTO.NMTABELA = 'AJCTRECEBER' THEN
                UPDATE AJCTRECEBER
                SET CDCLASSFINA  = C_MOVIMENTO.CLASSE,
                    CDEMMFAJCNTR = C_MOVIMENTO.EMPRESA,
                    CDFIMFAJCNTR = C_MOVIMENTO.FILIAL,
                    DTMOVFLUXO   = V_DTMOVFLUXO,
                    IDMOVFLUXO   = V_IDMOVFLUXO
                WHERE CDFILIAL     = C_MOVIMENTO.CDFILIAL   AND
                      NRLANCTONF   = C_MOVIMENTO.NRLANCTONF AND
                      NRSEQVENREC  = C_MOVIMENTO.NRSEQVEN   AND
                      NRPARCELAREC = C_MOVIMENTO.NRPARCELA  AND
                      DTAJUSTEREC  = C_MOVIMENTO.DTAJUSTE   AND
                      CDAJUCTREC   = C_MOVIMENTO.CODIGO;
             END IF;
          END IF;
       ELSIF (C_MOVIMENTO.NMTABELA IN ('MOVCREDBANC', 'CONTARECEBER', 'AJCTRECEBER')) OR
             ((C_MOVIMENTO.NMTABELA = 'TRANSFBANC') AND (C_MOVIMENTO.CODIGO = 'C')) THEN

          IF (C_MOVIMENTO.EMPRESA IS NOT NULL)  AND
             (C_MOVIMENTO.FILIAL IS NOT NULL)   AND
             (C_MOVIMENTO.CLASSE IS NOT NULL)   AND
             (V_DTMOVFLUXO IS NOT NULL)         AND
             (V_VRMOVFLUXO IS NOT NULL)         AND
             (V_IDMOVFLUXO IS NOT NULL)         THEN

             ATUALIZA_FLUXO_DE_CAIXA
               (C_MOVIMENTO.EMPRESA, C_MOVIMENTO.FILIAL,
                V_DTMOVFLUXO, V_IDMOVFLUXO, C_MOVIMENTO.CLASSE,
                V_VRMOVFLUXO, 0);

             IF C_MOVIMENTO.NMTABELA = 'CONTAPAGAR' THEN
                UPDATE CONTAPAGAR
                SET CDEMPRESA    = C_MOVIMENTO.EMPRESA,
                    CDCLASSFINA  = C_MOVIMENTO.CLASSE,
                    CDFIMOVFLPAG = C_MOVIMENTO.FILIAL,
                    DTMOVFLUXO   = V_DTMOVFLUXO,
                    IDMOVFLUXO   = V_IDMOVFLUXO
                WHERE CDFILIAL     = C_MOVIMENTO.CDFILIAL   AND
                      NRLANCTONF   = C_MOVIMENTO.NRLANCTONF AND
                      NRSEQVENPAG  = C_MOVIMENTO.NRSEQVEN   AND
                      NRPARCELAPAG = C_MOVIMENTO.NRPARCELA;
             END IF;

             IF C_MOVIMENTO.NMTABELA = 'AJCTPAGAR' THEN
                UPDATE AJCTPAGAR
                SET CDCLASSFINA  = C_MOVIMENTO.CLASSE,
                    CDEMMFAJCNTP = C_MOVIMENTO.EMPRESA,
                    CDFIMFAJCNTP = C_MOVIMENTO.FILIAL,
                    DTMOVFLUXO   = V_DTMOVFLUXO,
                    IDMOVFLUXO   = V_IDMOVFLUXO
                WHERE CDFILIAL     = C_MOVIMENTO.CDFILIAL   AND
                      NRLANCTONF   = C_MOVIMENTO.NRLANCTONF AND
                      NRSEQVENPAG  = C_MOVIMENTO.NRSEQVEN   AND
                      NRPARCELAPAG = C_MOVIMENTO.NRPARCELA  AND
                      DTAJUSTEPAG  = C_MOVIMENTO.DTAJUSTE   AND
                      CDAJUCTPAG   = C_MOVIMENTO.CODIGO;
             END IF;

             IF C_MOVIMENTO.NMTABELA = 'CONTARECEBER' THEN
                UPDATE CONTARECEBER
                SET CDEMPRESA    = C_MOVIMENTO.EMPRESA,
                    CDCLASSFINA  = C_MOVIMENTO.CLASSE,
                    CDFIMOVFLREC = C_MOVIMENTO.FILIAL,
                    DTMOVFLUXO   = V_DTMOVFLUXO,
                    IDMOVFLUXO   = V_IDMOVFLUXO
                WHERE CDFILIAL     = C_MOVIMENTO.CDFILIAL   AND
                      NRLANCTONF   = C_MOVIMENTO.NRLANCTONF AND
                      NRSEQVENREC  = C_MOVIMENTO.NRSEQVEN   AND
                      NRPARCELAREC = C_MOVIMENTO.NRPARCELA;
             END IF;

             IF C_MOVIMENTO.NMTABELA = 'AJCTRECEBER' THEN
                UPDATE AJCTRECEBER
                SET CDCLASSFINA  = C_MOVIMENTO.CLASSE,
                    CDEMMFAJCNTR = C_MOVIMENTO.EMPRESA,
                    CDFIMFAJCNTR = C_MOVIMENTO.FILIAL,
                    DTMOVFLUXO   = V_DTMOVFLUXO,
                    IDMOVFLUXO   = V_IDMOVFLUXO
                WHERE CDFILIAL     = C_MOVIMENTO.CDFILIAL   AND
                      NRLANCTONF   = C_MOVIMENTO.NRLANCTONF AND
                      NRSEQVENREC  = C_MOVIMENTO.NRSEQVEN   AND
                      NRPARCELAREC = C_MOVIMENTO.NRPARCELA  AND
                      DTAJUSTEREC  = C_MOVIMENTO.DTAJUSTE   AND
                      CDAJUCTREC   = C_MOVIMENTO.CODIGO;
             END IF;
          END IF;
       END IF;
   END LOOP;
   
   V_VRMOVFLUXO := 0;
   FOR C_RATP IN (SELECT AJ.CDFILIAL, AJ.NRLANBOLPAG, AJ.CDAJUCTPAG,
                    AJ.VRAJBOLPAG,   TCP.CDCLASSFINA, CP.CDEMPRESA,
                    CP.CDFIMOVFLPAG, CP.DTMOVFLUXO,  CP.IDMOVFLUXO,
                    TA.IDAJUCTPAG,   CP.IDSTATPAG,
                    DECODE(MAX(BP.VRBOLPAG), 0, 0,
                          (MAX(AJ.VRAJBOLPAG) * SUM(CP.VRATUAPAG))/ MAX(BP.VRBOLPAG)) VRRATAJBOLPAG
                  FROM CONTAPAGAR  CP, BOLETPAGAR BP, TIPOCTPAGAR TCP,
                       TIPOAJPAGAR TA, AJBOLPAG   AJ
                  WHERE (P_CDEMPRESA = 'T' OR INSTR(P_CDEMPRESA, BP.CDEMPRESA) > 0) AND
                        (CP.DTMOVFLUXO  >= P_DTMOVFLUXO)   AND
                        (CP.CDTPCTPAGAR = TCP.CDTPCTPAGAR) AND
                        (TA.CDAJUCTPAG   = AJ.CDAJUCTPAG)  AND
                        (BP.CDFILIAL     = AJ.CDFILIAL)    AND
                        (BP.NRLANBOLPAG  = AJ.NRLANBOLPAG) AND
                        (CP.CDFILIBPAG   = BP.CDFILIAL)    AND
                        (CP.NRLANBOLPAG  = BP.NRLANBOLPAG)
                  GROUP BY AJ.CDFILIAL,     AJ.NRLANBOLPAG, AJ.CDAJUCTPAG,
                           AJ.VRAJBOLPAG,   TCP.CDCLASSFINA, CP.CDEMPRESA,
                           CP.CDFIMOVFLPAG, CP.DTMOVFLUXO,  CP.IDMOVFLUXO,
                           TA.IDAJUCTPAG,   CP.IDSTATPAG) LOOP

      IF C_RATP.CDCLASSFINA IS NOT NULL THEN
         IF C_RATP.IDAJUCTPAG = 'A' THEN
            V_VRMOVFLUXO := ROUND(C_RATP.VRRATAJBOLPAG, 2);
         ELSE
            V_VRMOVFLUXO := ROUND(C_RATP.VRRATAJBOLPAG * -1, 2);
         END IF;

         ATUALIZA_FLUXO_DE_CAIXA(C_RATP.CDEMPRESA,   C_RATP.CDFIMOVFLPAG,
                                 C_RATP.DTMOVFLUXO,  C_RATP.IDMOVFLUXO,
                                 C_RATP.CDCLASSFINA, 0, V_VRMOVFLUXO);
      END IF;

      INSERT INTO MOVFXAJBOLP
         (CDCLASSFINA, CDEMPRESA,  CDFILIAL,
          DTMOVFLUXO,  IDMOVFLUXO, CDFILIBOLPAG,
          NRLANBOLPAG, CDAJUCTPAG, VRFXAJBOLPAG)
      VALUES
         (C_RATP.CDCLASSFINA, C_RATP.CDEMPRESA,  C_RATP.CDFIMOVFLPAG,
          C_RATP.DTMOVFLUXO,  C_RATP.IDMOVFLUXO, C_RATP.CDFILIAL,
          C_RATP.NRLANBOLPAG, C_RATP.CDAJUCTPAG, ROUND(C_RATP.VRRATAJBOLPAG, 2));
   END LOOP;
   
   FOR C_RATR IN (SELECT AJ.CDFILIAL, AJ.NRLANBOLREC, AJ.CDAJUCTREC,
                    AJ.VRAJBOLREC,   TCR.CDCLASSFINA, CR.CDEMPRESA,
                    CR.CDFIMOVFLREC, CR.DTMOVFLUXO,  CR.IDMOVFLUXO,
                    TA.IDAJUCTREC, CR.IDSTATREC,
                    DECODE(MAX(BR.VRBOLREC), 0, 0,
                          (MAX(AJ.VRAJBOLREC) * SUM(CR.VRATUAREC))/ MAX(BR.VRBOLREC)) VRRATAJBOLREC
                  FROM CONTARECEBER  CR, BOLETRECEBER BR, TIPOCTRECEBER TCR,
                       TIPOAJRECEBER TA, AJBOLREC   AJ
                  WHERE (P_CDEMPRESA = 'T' OR INSTR(P_CDEMPRESA, BR.CDEMPRESA) > 0) AND
                        (CR.DTMOVFLUXO  >= P_DTMOVFLUXO)   AND
                        (CR.CDTPCTRECEB = TCR.CDTPCTRECEB) AND
                        (TA.CDAJUCTREC   = AJ.CDAJUCTREC)  AND
                        (BR.CDFILIAL     = AJ.CDFILIAL)    AND
                        (BR.NRLANBOLREC  = AJ.NRLANBOLREC) AND
                        (CR.CDFILIBOLREC = BR.CDFILIAL)    AND
                        (CR.NRLANBOLREC  = BR.NRLANBOLREC)
                  GROUP BY AJ.CDFILIAL,     AJ.NRLANBOLREC, AJ.CDAJUCTREC,
                           AJ.VRAJBOLREC,   TCR.CDCLASSFINA, CR.CDEMPRESA,
                           CR.CDFIMOVFLREC, CR.DTMOVFLUXO,  CR.IDMOVFLUXO,
                           TA.IDAJUCTREC,   CR.IDSTATREC) LOOP

      IF C_RATR.CDCLASSFINA IS NOT NULL THEN
         IF C_RATR.IDAJUCTREC = 'A' THEN
            V_VRMOVFLUXO := ROUND(C_RATR.VRRATAJBOLREC, 2);
         ELSE
            V_VRMOVFLUXO := ROUND(C_RATR.VRRATAJBOLREC * -1, 2);
         END IF;

         ATUALIZA_FLUXO_DE_CAIXA(C_RATR.CDEMPRESA,   C_RATR.CDFIMOVFLREC,
                                 C_RATR.DTMOVFLUXO,  C_RATR.IDMOVFLUXO,
                                 C_RATR.CDCLASSFINA, V_VRMOVFLUXO, 0);
      END IF;

      INSERT INTO MOVFXAJBOLR
         (CDCLASSFINA, CDEMPRESA,  CDFILIAL,
          DTMOVFLUXO,  IDMOVFLUXO, CDFILIBOLREC,
          NRLANBOLREC, CDAJUCTREC, VRFXAJBOLREC)
      VALUES
         (C_RATR.CDCLASSFINA, C_RATR.CDEMPRESA,  C_RATR.CDFIMOVFLREC,
          C_RATR.DTMOVFLUXO,  C_RATR.IDMOVFLUXO, C_RATR.CDFILIAL,
          C_RATR.NRLANBOLREC, C_RATR.CDAJUCTREC, ROUND(C_RATR.VRRATAJBOLREC, 2));
   END LOOP;
END;
/


-- VERSAO --
BEGIN ATUVEROBJ('EVOLUCAO_FLUXO_CAIXA','4.09.091'); END;
/

