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

IF EXISTS (SELECT * FROM SYSOBJECTS O, SYSUSERS U
           WHERE O.NAME = 'EVOLUCAO_FLUXO_CAIXA' AND
                 TYPE = 'P' 		       AND
	              U.UID = O.UID            AND
	              U.NAME = USER)
DROP PROCEDURE EVOLUCAO_FLUXO_CAIXA
GO

CREATE PROCEDURE EVOLUCAO_FLUXO_CAIXA
(@P_CDEMPRESA VARCHAR(2000),
 @P_DTMOVFLUXO DATETIME)

AS
   DECLARE @V_IDAJUSTE    VARCHAR(1);
   DECLARE @V_VRMOVFLUXO  NUMERIC(16,2);
   DECLARE @V_IDMOVFLUXO  VARCHAR(1);
   DECLARE @V_DTMOVFLUXO  DATETIME;

   DECLARE @V_CHAVFIBOL VARCHAR(06);
   DECLARE @V_CHAVNRBOL VARCHAR(06);
   DECLARE @V_CLASSE VARCHAR(06);
   DECLARE @V_EMPRESA VARCHAR(02);
   DECLARE @V_FILIAL VARCHAR(04);
   DECLARE @V_DATA DATETIME;
   DECLARE @V_IDENTIFICADOR VARCHAR(01);
   DECLARE @V_VALORFLUXO NUMERIC(16,2);
   DECLARE @V_NMTABELA VARCHAR(20);
   DECLARE @V_CODIGO VARCHAR(02);
   DECLARE @V_IDSITMOV VARCHAR(01);
   DECLARE @V_CDFILIAL VARCHAR(04);
   DECLARE @V_NRLANCTONF VARCHAR(10);
   DECLARE @V_NRSEQVEN VARCHAR(02);
   DECLARE @V_NRPARCELA VARCHAR(02);
   DECLARE @V_DTAJUSTE DATETIME;
   DECLARE @V_IDSTATUSDOC VARCHAR(01);

   DECLARE @V_NRLANBOLPAG VARCHAR(10);
   DECLARE @V_CDAJUCTPAG VARCHAR(04);
   DECLARE @V_VRAJBOLPAG NUMERIC(16,2);
   DECLARE @V_CDCLASSFINA VARCHAR(06);
   DECLARE @V_CDEMPRESA VARCHAR(02);
   DECLARE @V_CDFIMOVFLPAG VARCHAR(04);
   DECLARE @V_2_DTMOVFLUXO DATETIME;
   DECLARE @V_2_IDMOVFLUXO VARCHAR(01);
   DECLARE @V_IDAJUCTPAG VARCHAR(01);
   DECLARE @V_IDSTATPAG VARCHAR(01);
   DECLARE @V_VRRATAJBOLPAG NUMERIC(16,2);

   DECLARE @V_NRLANBOLREC VARCHAR(10);
   DECLARE @V_VRAJBOLREC NUMERIC(16,2);
   DECLARE @V_CDAJUCTREC VARCHAR(02);
   DECLARE @V_CDFIMOVFLREC VARCHAR(04);
   DECLARE @V_IDAJUCTREC VARCHAR(01);
   DECLARE @V_IDSTATREC VARCHAR(01);
   DECLARE @V_VRRATAJBOLREC NUMERIC(16,2);

BEGIN

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

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

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

   SET @V_VRMOVFLUXO = 0;

   DECLARE C_MOVIMENTO CURSOR FOR (
   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 CHARINDEX(CDEMPRESA,@P_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 CHARINDEX(CDEMPRESA,@P_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 CHARINDEX(CDEMPRESA,@P_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 CHARINDEX(TF.CDEMPRESA,@P_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 CHARINDEX(CDEMPRESA,@P_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 CHARINDEX(CDEMPRESA,@P_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 CHARINDEX(CDEMPRESA,@P_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)

   OPEN C_MOVIMENTO;
   FETCH NEXT FROM C_MOVIMENTO INTO @V_CHAVFIBOL, @V_CHAVNRBOL, @V_CLASSE,
                                 @V_EMPRESA, @V_FILIAL, @V_DATA, @V_IDENTIFICADOR,
                                 @V_VALORFLUXO,  @V_NMTABELA, @V_CODIGO, @V_IDSITMOV,
                                 @V_CDFILIAL, @V_NRLANCTONF, @V_NRSEQVEN, @V_NRPARCELA,
                                 @V_DTAJUSTE, @V_IDSTATUSDOC;

   WHILE (@@FETCH_STATUS = 0) BEGIN

      IF @V_NMTABELA = 'AJCTPAGAR' BEGIN
         SELECT @V_IDAJUSTE = IDAJUCTPAG
         FROM TIPOAJPAGAR
         WHERE (CDAJUCTPAG = @V_CODIGO);

         IF @V_IDAJUSTE = 'D' BEGIN
            SET @V_VRMOVFLUXO = ROUND(@V_VALORFLUXO * (-1),2);
         END
         ELSE BEGIN
            SET @V_VRMOVFLUXO = ROUND(@V_VALORFLUXO,2);
         END;
      END;

      IF @V_NMTABELA = 'AJCTRECEBER' BEGIN
         SELECT @V_IDAJUSTE = IDAJUCTREC
         FROM TIPOAJRECEBER
         WHERE (CDAJUCTREC = @V_CODIGO);

         IF @V_IDAJUSTE = 'D' BEGIN
            SET @V_VRMOVFLUXO = ROUND(@V_VALORFLUXO * (-1),2);
         END
         ELSE BEGIN
            SET @V_VRMOVFLUXO = ROUND(@V_VALORFLUXO,2);
         END;
      END;

      SET @V_IDMOVFLUXO = '';

       IF @V_IDSTATUSDOC IN ('A', 'E') BEGIN
          IF @V_IDSITMOV = 'A' BEGIN
             SET @V_IDMOVFLUXO = 'E';
          END
          ELSE IF @V_IDSITMOV = 'B' BEGIN
             SET @V_IDMOVFLUXO = 'R';
          END
          ELSE IF @V_IDSITMOV = 'P' BEGIN
             SET @V_IDMOVFLUXO = 'E';
          END;
       END
       ELSE BEGIN IF @V_IDSTATUSDOC IN ('V', 'R') BEGIN
          IF @V_IDSITMOV = 'A' BEGIN
             SET @V_IDMOVFLUXO = 'P';
          END
          ELSE IF @V_IDSITMOV = 'R' BEGIN
             SET @V_IDMOVFLUXO = 'R';
          END;
       END;
       END;

       SET @V_DTMOVFLUXO = @V_DATA;

       IF @V_IDSITMOV IN ('B', 'P') BEGIN
          IF @V_NMTABELA IN ('CONTAPAGAR', 'AJCTPAGAR') BEGIN
             SELECT @V_DTMOVFLUXO = MAX(BX.DTBAIXAPAG)
             FROM BOLETPAGAR BO, BAIXAPAGA  BX
             WHERE (BO.CDFILIAL     = @V_CHAVFIBOL) AND
                   (BO.NRLANBOLPAG  = @V_CHAVNRBOL) AND
                   (BO.CDFILIBAIPAG = BX.CDFILIAL)           AND
                   (BO.NRBAIXAPAG   = BX.NRBAIXAPAG);

             IF @V_DTMOVFLUXO IS NULL BEGIN
                SET @V_DTMOVFLUXO = @V_DATA;
             END;
          END;

          IF @V_NMTABELA IN ('CONTARECEBER', 'AJCTRECEBER') BEGIN
             SELECT @V_DTMOVFLUXO = MAX(BX.DTBAIXAREC)
             FROM BOLETRECEBER  BO, BAIXARECEBIDA BX
             WHERE (BO.CDFILIAL     = @V_CHAVFIBOL) AND
                   (BO.NRLANBOLREC  = @V_CHAVNRBOL) AND
                   (BO.CDFILIBAIREC = BX.CDFILIAL)           AND
                   (BO.NRBAIXAREC   = BX.NRBAIXAREC);

             IF @V_DTMOVFLUXO IS NULL BEGIN
                SET @V_DTMOVFLUXO = @V_DATA;
             END;
          END;
       END;

       IF (@V_NMTABELA <> 'AJCTPAGAR') AND (@V_NMTABELA <> 'AJCTRECEBER') BEGIN
          SET @V_VRMOVFLUXO = ROUND(@V_VALORFLUXO,2);
       END;

       IF (@V_NMTABELA IN ('AJCTPAGAR', 'CONTAPAGAR', 'MOVDEBBANC')) OR
          ((@V_NMTABELA = 'TRANSFBANC') AND (@V_CODIGO = 'D')) BEGIN

          IF (@V_EMPRESA IS NOT NULL)  AND
             (@V_FILIAL IS NOT NULL)   AND
             (@V_CLASSE IS NOT NULL)   AND
             (@V_DTMOVFLUXO IS NOT NULL)         AND
             (@V_VRMOVFLUXO IS NOT NULL)         AND
             (@V_IDMOVFLUXO IS NOT NULL)         BEGIN

             EXEC ATUALIZA_FLUXO_DE_CAIXA
               @V_EMPRESA, @V_FILIAL,
                @V_DTMOVFLUXO, @V_IDMOVFLUXO, @V_CLASSE,
                0, @V_VRMOVFLUXO;

             IF @V_NMTABELA = 'CONTAPAGAR' BEGIN
                UPDATE CONTAPAGAR
                SET CDEMPRESA    = @V_EMPRESA,
                    CDCLASSFINA  = @V_CLASSE,
                    CDFIMOVFLPAG = @V_FILIAL,
                    DTMOVFLUXO   = @V_DTMOVFLUXO,
                    IDMOVFLUXO   = @V_IDMOVFLUXO
                WHERE CDFILIAL     = @V_CDFILIAL   AND
                      NRLANCTONF   = @V_NRLANCTONF AND
                      NRSEQVENPAG  = @V_NRSEQVEN   AND
                      NRPARCELAPAG = @V_NRPARCELA;
             END;

             IF @V_NMTABELA = 'AJCTPAGAR' BEGIN
                UPDATE AJCTPAGAR
                SET CDCLASSFINA  = @V_CLASSE,
                    CDEMMFAJCNTP = @V_EMPRESA,
                    CDFIMFAJCNTP = @V_FILIAL,
                    DTMOVFLUXO   = @V_DTMOVFLUXO,
                    IDMOVFLUXO   = @V_IDMOVFLUXO
                WHERE CDFILIAL     = @V_CDFILIAL   AND
                      NRLANCTONF   = @V_NRLANCTONF AND
                      NRSEQVENPAG  = @V_NRSEQVEN   AND
                      NRPARCELAPAG = @V_NRPARCELA  AND
                      DTAJUSTEPAG  = @V_DTAJUSTE   AND
                      CDAJUCTPAG   = @V_CODIGO;
             END;

             IF @V_NMTABELA = 'CONTARECEBER' BEGIN
                UPDATE CONTARECEBER
                SET CDEMPRESA    = @V_EMPRESA,
                    CDCLASSFINA  = @V_CLASSE,
                    CDFIMOVFLREC = @V_FILIAL,
                    DTMOVFLUXO   = @V_DTMOVFLUXO,
                    IDMOVFLUXO   = @V_IDMOVFLUXO
                WHERE CDFILIAL     = @V_CDFILIAL   AND
                      NRLANCTONF   = @V_NRLANCTONF AND
                      NRSEQVENREC  = @V_NRSEQVEN   AND
                      NRPARCELAREC = @V_NRPARCELA;
             END;

             IF @V_NMTABELA = 'AJCTRECEBER' BEGIN
                UPDATE AJCTRECEBER
                SET CDCLASSFINA  = @V_CLASSE,
                    CDEMMFAJCNTR = @V_EMPRESA,
                    CDFIMFAJCNTR = @V_FILIAL,
                    DTMOVFLUXO   = @V_DTMOVFLUXO,
                    IDMOVFLUXO   = @V_IDMOVFLUXO
                WHERE CDFILIAL     = @V_CDFILIAL   AND
                      NRLANCTONF   = @V_NRLANCTONF AND
                      NRSEQVENREC  = @V_NRSEQVEN   AND
                      NRPARCELAREC = @V_NRPARCELA  AND
                      DTAJUSTEREC  = @V_DTAJUSTE   AND
                      CDAJUCTREC   = @V_CODIGO;
             END;
          END;
       END
       ELSE IF (@V_NMTABELA IN ('MOVCREDBANC', 'CONTARECEBER', 'AJCTRECEBER')) OR
             ((@V_NMTABELA = 'TRANSFBANC') AND (@V_CODIGO = 'C')) BEGIN

          IF (@V_EMPRESA IS NOT NULL)  AND
             (@V_FILIAL IS NOT NULL)   AND
             (@V_CLASSE IS NOT NULL)   AND
             (@V_DTMOVFLUXO IS NOT NULL)         AND
             (@V_VRMOVFLUXO IS NOT NULL)         AND
             (@V_IDMOVFLUXO IS NOT NULL)         BEGIN

             EXEC ATUALIZA_FLUXO_DE_CAIXA
               @V_EMPRESA, @V_FILIAL,
                @V_DTMOVFLUXO, @V_IDMOVFLUXO, @V_CLASSE,
                @V_VRMOVFLUXO, 0;

             IF @V_NMTABELA = 'CONTAPAGAR' BEGIN
                UPDATE CONTAPAGAR
                SET CDEMPRESA    = @V_EMPRESA,
                    CDCLASSFINA  = @V_CLASSE,
                    CDFIMOVFLPAG = @V_FILIAL,
                    DTMOVFLUXO   = @V_DTMOVFLUXO,
                    IDMOVFLUXO   = @V_IDMOVFLUXO
                WHERE CDFILIAL     = @V_CDFILIAL   AND
                      NRLANCTONF   = @V_NRLANCTONF AND
                      NRSEQVENPAG  = @V_NRSEQVEN   AND
                      NRPARCELAPAG = @V_NRPARCELA;
             END;

             IF @V_NMTABELA = 'AJCTPAGAR' BEGIN
                UPDATE AJCTPAGAR
                SET CDCLASSFINA  = @V_CLASSE,
                    CDEMMFAJCNTP = @V_EMPRESA,
                    CDFIMFAJCNTP = @V_FILIAL,
                    DTMOVFLUXO   = @V_DTMOVFLUXO,
                    IDMOVFLUXO   = @V_IDMOVFLUXO
                WHERE CDFILIAL     = @V_CDFILIAL   AND
                      NRLANCTONF   = @V_NRLANCTONF AND
                      NRSEQVENPAG  = @V_NRSEQVEN   AND
                      NRPARCELAPAG = @V_NRPARCELA  AND
                      DTAJUSTEPAG  = @V_DTAJUSTE   AND
                      CDAJUCTPAG   = @V_CODIGO;
             END;

             IF @V_NMTABELA = 'CONTARECEBER' BEGIN
                UPDATE CONTARECEBER
                SET CDEMPRESA    = @V_EMPRESA,
                    CDCLASSFINA  = @V_CLASSE,
                    CDFIMOVFLREC = @V_FILIAL,
                    DTMOVFLUXO   = @V_DTMOVFLUXO,
                    IDMOVFLUXO   = @V_IDMOVFLUXO
                WHERE CDFILIAL     = @V_CDFILIAL   AND
                      NRLANCTONF   = @V_NRLANCTONF AND
                      NRSEQVENREC  = @V_NRSEQVEN   AND
                      NRPARCELAREC = @V_NRPARCELA;
             END;

             IF @V_NMTABELA = 'AJCTRECEBER' BEGIN
                UPDATE AJCTRECEBER
                SET CDCLASSFINA  = @V_CLASSE,
                    CDEMMFAJCNTR = @V_EMPRESA,
                    CDFIMFAJCNTR = @V_FILIAL,
                    DTMOVFLUXO   = @V_DTMOVFLUXO,
                    IDMOVFLUXO   = @V_IDMOVFLUXO
                WHERE CDFILIAL     = @V_CDFILIAL   AND
                      NRLANCTONF   = @V_NRLANCTONF AND
                      NRSEQVENREC  = @V_NRSEQVEN   AND
                      NRPARCELAREC = @V_NRPARCELA  AND
                      DTAJUSTEREC  = @V_DTAJUSTE   AND
                      CDAJUCTREC   = @V_CODIGO;
             END;
          END;
       END;
   FETCH NEXT FROM C_MOVIMENTO INTO @V_CHAVFIBOL, @V_CHAVNRBOL, @V_CLASSE,
                                 @V_EMPRESA, @V_FILIAL, @V_DATA, @V_IDENTIFICADOR,
                                 @V_VALORFLUXO,  @V_NMTABELA, @V_CODIGO, @V_IDSITMOV,
                                 @V_CDFILIAL, @V_NRLANCTONF, @V_NRSEQVEN, @V_NRPARCELA,
                                 @V_DTAJUSTE, @V_IDSTATUSDOC;
   END;
   CLOSE C_MOVIMENTO;
   DEALLOCATE C_MOVIMENTO;
   
   SET @V_VRMOVFLUXO = 0;
   DECLARE C_RATP CURSOR FOR (SELECT AJ.CDFILIAL, AJ.NRLANBOLPAG, AJ.CDAJUCTPAG,
                    AJ.VRAJBOLPAG,   TCP.CDCLASSFINA, CP.CDEMPRESA,
                    CP.CDFIMOVFLPAG, CP.DTMOVFLUXO,  CP.IDMOVFLUXO,
                    TA.IDAJUCTPAG,   CP.IDSTATPAG,
                    CASE MAX(BP.VRBOLPAG) WHEN 0 THEN 0
                         ELSE (MAX(AJ.VRAJBOLPAG) * SUM(CP.VRATUAPAG))/ MAX(BP.VRBOLPAG) END VRRATAJBOLPAG
                  FROM CONTAPAGAR  CP, BOLETPAGAR BP, TIPOCTPAGAR TCP,
                       TIPOAJPAGAR TA, AJBOLPAG   AJ
                  WHERE (@P_CDEMPRESA = 'T' OR CHARINDEX(BP.CDEMPRESA,@P_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)
   OPEN C_RATP;
   FETCH NEXT FROM C_RATP INTO @V_CDFILIAL, @V_NRLANBOLPAG, @V_CDAJUCTPAG,
                          @V_VRAJBOLPAG, @V_CDCLASSFINA, @V_CDEMPRESA,
                          @V_CDFIMOVFLPAG, @V_2_DTMOVFLUXO, @V_2_IDMOVFLUXO,
                          @V_IDAJUCTPAG, @V_IDSTATPAG, @V_VRRATAJBOLPAG;

   WHILE (@@FETCH_STATUS = 0) BEGIN

      IF @V_CDCLASSFINA IS NOT NULL BEGIN
         IF @V_IDAJUCTPAG = 'A' BEGIN
            SET @V_VRMOVFLUXO = ROUND(@V_VRRATAJBOLPAG, 2);
         END
         ELSE BEGIN
            SET @V_VRMOVFLUXO = ROUND(@V_VRRATAJBOLPAG * -1, 2);
         END;

         EXEC ATUALIZA_FLUXO_DE_CAIXA @V_CDEMPRESA,   @V_CDFIMOVFLPAG,
                                 @V_2_DTMOVFLUXO,  @V_2_IDMOVFLUXO,
                                 @V_CDCLASSFINA, 0, @V_VRMOVFLUXO;
      END;

      INSERT INTO MOVFXAJBOLP
         (CDCLASSFINA, CDEMPRESA,  CDFILIAL,
          DTMOVFLUXO,  IDMOVFLUXO, CDFILIBOLPAG,
          NRLANBOLPAG, CDAJUCTPAG, VRFXAJBOLPAG)
      VALUES
         (@V_CDCLASSFINA, @V_CDEMPRESA,  @V_CDFIMOVFLPAG,
          @V_2_DTMOVFLUXO,  @V_2_IDMOVFLUXO, @V_CDFILIAL,
          @V_NRLANBOLPAG, @V_CDAJUCTPAG, ROUND(@V_VRRATAJBOLPAG, 2));
   FETCH NEXT FROM C_RATP INTO @V_CDFILIAL, @V_NRLANBOLPAG, @V_CDAJUCTPAG,
                          @V_VRAJBOLPAG, @V_CDCLASSFINA, @V_CDEMPRESA,
                          @V_CDFIMOVFLPAG, @V_2_DTMOVFLUXO, @V_2_IDMOVFLUXO,
                          @V_IDAJUCTPAG, @V_IDSTATPAG, @V_VRRATAJBOLPAG;
   END;
   CLOSE C_RATP;
   DEALLOCATE C_RATP;
   
   DECLARE C_RATR CURSOR FOR (SELECT AJ.CDFILIAL, AJ.NRLANBOLREC, AJ.CDAJUCTREC,
                    AJ.VRAJBOLREC,   TCR.CDCLASSFINA, CR.CDEMPRESA,
                    CR.CDFIMOVFLREC, CR.DTMOVFLUXO,  CR.IDMOVFLUXO,
                    TA.IDAJUCTREC, CR.IDSTATREC,
                    CASE MAX(BR.VRBOLREC) WHEN 0 THEN 0
                         ELSE (MAX(AJ.VRAJBOLREC) * SUM(CR.VRATUAREC))/ MAX(BR.VRBOLREC) END VRRATAJBOLREC
                  FROM CONTARECEBER  CR, BOLETRECEBER BR, TIPOCTRECEBER TCR,
                       TIPOAJRECEBER TA, AJBOLREC   AJ
                  WHERE (@P_CDEMPRESA = 'T' OR CHARINDEX(BR.CDEMPRESA,@P_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)

   OPEN C_RATR;
   FETCH NEXT FROM C_RATR INTO @V_CDFILIAL, @V_NRLANBOLREC, @V_CDAJUCTREC,
                          @V_VRAJBOLREC, @V_CDCLASSFINA, @V_CDEMPRESA,
                          @V_CDFIMOVFLREC, @V_2_DTMOVFLUXO, @V_2_IDMOVFLUXO,
                          @V_IDAJUCTREC, @V_IDSTATREC, @V_VRRATAJBOLREC;

   WHILE (@@FETCH_STATUS = 0) BEGIN

      IF @V_CDCLASSFINA IS NOT NULL BEGIN
         IF @V_IDAJUCTREC = 'A' BEGIN
            SET @V_VRMOVFLUXO = ROUND(@V_VRRATAJBOLREC, 2);
         END
         ELSE BEGIN
            SET @V_VRMOVFLUXO = ROUND(@V_VRRATAJBOLREC * -1, 2);
         END;

         EXEC ATUALIZA_FLUXO_DE_CAIXA @V_CDEMPRESA,   @V_CDFIMOVFLREC,
                                 @V_2_DTMOVFLUXO,  @V_2_IDMOVFLUXO,
                                 @V_CDCLASSFINA, @V_VRMOVFLUXO, 0;
      END;

      INSERT INTO MOVFXAJBOLR
         (CDCLASSFINA, CDEMPRESA,  CDFILIAL,
          DTMOVFLUXO,  IDMOVFLUXO, CDFILIBOLREC,
          NRLANBOLREC, CDAJUCTREC, VRFXAJBOLREC)
      VALUES
         (@V_CDCLASSFINA, @V_CDEMPRESA,  @V_CDFIMOVFLREC,
          @V_2_DTMOVFLUXO,  @V_2_IDMOVFLUXO, @V_CDFILIAL,
          @V_NRLANBOLREC, @V_CDAJUCTREC, ROUND(@V_VRRATAJBOLREC, 2));
   FETCH NEXT FROM C_RATR INTO @V_CDFILIAL, @V_NRLANBOLREC, @V_CDAJUCTREC,
                          @V_VRAJBOLREC, @V_CDCLASSFINA, @V_CDEMPRESA,
                          @V_CDFIMOVFLREC, @V_2_DTMOVFLUXO, @V_2_IDMOVFLUXO,
                          @V_IDAJUCTREC, @V_IDSTATREC, @V_VRRATAJBOLREC;
   END;
   CLOSE C_RATR;
   DEALLOCATE C_RATR;
END;
GO

-- VERSAO --
EXEC ATUVEROBJ 'EVOLUCAO_FLUXO_CAIXA','4.11.176';
GO
