IF EXISTS(SELECT name FROM sysobjects
          WHERE name = 'CONTABILIZA_BCO_LANCCORR' AND type = 'P')
DROP PROCEDURE CONTABILIZA_BCO_LANCCORR
GO

CREATE PROCEDURE CONTABILIZA_BCO_LANCCORR @P_NRLISTA VARCHAR(10)
AS
DECLARE @V_CDFILIRAT  VARCHAR(4);
DECLARE @V_STCONTCTBL VARCHAR(20);
DECLARE @V_DSHISTPADR VARCHAR(1000);
DECLARE @V_CDLOTE     VARCHAR(20);
DECLARE @V_CDCENTCUST VARCHAR(04);
DECLARE @V_NRLANCLOTE VARCHAR(06);
DECLARE @V_CDFILIAL   VARCHAR(04);
  
DECLARE @V_CONT      INTEGER;
DECLARE @V_COUNT     INTEGER;
DECLARE @V_INPARTIDA INTEGER;

DECLARE @V_RATEIO FLOAT;
DECLARE @DOVRRAT  FLOAT;

DECLARE @V_MULTIPLICA FLOAT;
DECLARE @V_SUBTRAI FLOAT;

--VARIAVEIS DO C_BCO_LANCCORR

DECLARE @V_DATA          DATETIME;
DECLARE @V_TIPO          VARCHAR(30);
DECLARE @V_CDHISTPADR    VARCHAR(4);
DECLARE @V_CDCONTCTBL    VARCHAR(20);
DECLARE @V_CDTIPO        VARCHAR(2);
DECLARE @V_LANCCONT      VARCHAR(12);
DECLARE @V_DSMOVICRED    VARCHAR(40);
DECLARE @V_VALOR         FLOAT;
DECLARE @V_NUMERO        VARCHAR(10);
DECLARE @V_CDEMPRESA     VARCHAR(2);
DECLARE @V_CDFILIAL_C    VARCHAR(4);
DECLARE @V_CDFILILANCA   VARCHAR(4);
DECLARE @V_IDCONTABILIZA VARCHAR(1);
DECLARE @V_NMRAZSOCCLIE  VARCHAR(50);
DECLARE @V_NMFANTCLIE    VARCHAR(50);
DECLARE @V_NMRAZSOCFORN  VARCHAR(40);
DECLARE @V_NMFANTFORN    VARCHAR(40);
DECLARE @V_DEBCRED       FLOAT;
DECLARE @V_CDREDUCONT    VARCHAR(3);
DECLARE @V_NRMOVBANC     VARCHAR(10);

--VARIAVEIS DO C_RATTPCRED

DECLARE @V_CDTPCREDBANC VARCHAR(2);
DECLARE @V_CDCENTCUST_R VARCHAR(4);
DECLARE @V_CDFILIAL_R   VARCHAR(4);
DECLARE @V_VRPERATTPCRE FLOAT;

BEGIN
   DECLARE C_BCO_LANCCORR CURSOR FOR
      SELECT M.DTMOVICRED AS DATA, C.DSTPCREDBANC AS TIPO, C.CDHISTPADR, C.CDCONTCTBL, M.CDTPCREDBANC AS CDTIPO,
             M.NRLCTBMCRED AS LANCCONT, M.DSMOVICRED, M.VRMOVICRED AS VALOR, M.NRMOVICRED AS NUMERO,
             M.CDEMPRESA, M.CDFILIAL, M.CDFILILANCRE AS CDFILILANCA, C.IDCTBLCRBANC AS IDCONTABILIZA,
             L.NMRAZSOCCLIE, L.NMFANTCLIE, O.NMRAZSOCFORN, O.NMFANTFORN,
             -1 AS DEBCRED, M.CDREDUCONT, M.NRMOVBANC
        FROM TPCREDBANC C, MOVBANCARIO B, MOVCREDBANC M LEFT JOIN CLIENTE L ON(M.CDCLIENTE = L.CDCLIENTE)
                                                        LEFT JOIN FORNECEDOR O ON(M.CDFORNECED = O.CDFORNECED),
             LISTA LI
       WHERE (C.CDTPCREDBANC = M.CDTPCREDBANC)
         AND (M.NRMOVBANC    = B.NRMOVBANC)
         AND (B.CDREDUCONT   = M.CDREDUCONT)
         AND (M.CDREDUCONT   = SUBSTRING(LI.CDLISTA,1,3))
         AND (M.NRMOVBANC    = SUBSTRING(LI.CDLISTA,4,10))
         AND (LI.NRLISTA     = @P_NRLISTA)
       UNION ALL
      SELECT M.DTMOVIDEBI AS DATA, C.DSTPDEBIBANC AS TIPO, C.CDHISTPADR, C.CDCONTCTBL, M.CDTPDEBIBANC AS CDTIPO,
             M.NRLCTBMDEB AS LANCCONT, M.DSMOVIDEBI, M.VRMOVIDEBI AS VALOR, M.NRMOVIDEBI AS NUMERO,
             M.CDEMPRESA, M.CDFILIAL, M.CDFILILANDEB AS CDFILILANCA, C.IDCTBLDBBANC AS IDCONTABILIZA,
             L.NMRAZSOCCLIE, L.NMFANTCLIE, O.NMRAZSOCFORN, O.NMFANTFORN,
             1 AS DEBCRED, M.CDREDUCONT, M.NRMOVBANC
        FROM TPDEBIBANC C, MOVDEBBANC M LEFT JOIN MOVBANCARIO B ON(M.CDREDUCONT = B.CDREDUCONT)
                                        LEFT JOIN CLIENTE L ON(M.CDCLIENTE = L.CDCLIENTE)
                                        LEFT JOIN FORNECEDOR O ON(M.CDFORNECED = O.CDFORNECED), LISTA LI
       WHERE (C.CDTPDEBIBANC = M.CDTPDEBIBANC)
         AND (M.NRMOVBANC    = B.NRMOVBANC)         
         AND (M.CDREDUCONT   = SUBSTRING(LI.CDLISTA,1,3))
         AND (M.NRMOVBANC    = SUBSTRING(LI.CDLISTA,4,10))
         AND (LI.NRLISTA     = @P_NRLISTA);

   OPEN C_BCO_LANCCORR;

   FETCH NEXT FROM C_BCO_LANCCORR INTO @V_DATA, @V_TIPO, @V_CDHISTPADR, @V_CDCONTCTBL, @V_CDTIPO, @V_LANCCONT,
                                       @V_DSMOVICRED, @V_VALOR, @V_NUMERO, @V_CDEMPRESA, @V_CDFILIAL_C, @V_CDFILILANCA,
                                       @V_IDCONTABILIZA, @V_NMRAZSOCCLIE, @V_NMFANTCLIE, @V_NMRAZSOCFORN, @V_NMFANTFORN,
                                       @V_DEBCRED, @V_CDREDUCONT, @V_NRMOVBANC;
   WHILE (@@FETCH_STATUS = 0)
   BEGIN
      SELECT @V_STCONTCTBL = C.CDCONTCTBL
        FROM CONTCORR C
       WHERE (C.CDREDUCONT = ISNULL(@V_CDREDUCONT, C.CDREDUCONT))
       ORDER BY C.CDREDUCONT;
   
   SET @V_MULTIPLICA = @V_VALOR * @V_DEBCRED;  

   EXEC MONTA_HISTORICO @V_CDREDUCONT, @V_NRMOVBANC, @V_CDHISTPADR,'','','08','', @V_DSHISTPADR;

   EXEC NOVA_PARTIDA @V_CDEMPRESA, @V_CDLOTE, @V_DATA, @V_NRLANCLOTE, @V_STCONTCTBL, @V_CDHISTPADR,
                     @V_DSHISTPADR, @V_MULTIPLICA, 'B', @V_CDREDUCONT, '08', 'N';

      SET @V_INPARTIDA = 1;

      SELECT @V_CDCENTCUST = CDCENTCUST
        FROM FILIAL
       WHERE CDFILIAL = @V_CDFILILANCA;

      IF @V_CDCENTCUST IS NULL
      BEGIN
         SELECT @V_CDCENTCUST = CDCENTCUST
           FROM EMPRESA
          WHERE CDEMPRESA = @V_CDEMPRESA;
      END;

      IF @V_CDCENTCUST IS NULL
      BEGIN
         SET @V_MULTIPLICA = @V_VALOR * @V_DEBCRED;
         EXEC RATEIO_PARTIDA @V_CDEMPRESA, @V_CDLOTE, @V_DATA, @V_NRLANCLOTE, @V_CDFILILANCA,
                             @V_CDCENTCUST, @V_MULTIPLICA;
      END;
    
      SET @V_MULTIPLICA = @V_VALOR * @V_DEBCRED;

      EXEC NOVA_PARTIDA @V_CDEMPRESA, @V_CDLOTE, @V_DATA, @V_NRLANCLOTE, @V_CDCONTCTBL, @V_CDHISTPADR,
                        @V_DSHISTPADR, @V_MULTIPLICA, 'B', @V_CDREDUCONT, '08', 'N';

      SELECT @V_CDFILIAL = CDFILIAL
        FROM RATTPCRED
       WHERE CDTPCREDBANC = @V_CDTIPO;

      SELECT @V_CONT = COUNT(*)
        FROM RATTPCRED
       WHERE CDTPCREDBANC = @V_CDTIPO;

      SET @DOVRRAT = 0;

      IF @V_CDFILIAL IS NOT NULL
      BEGIN
         DECLARE C_RATTPCRED CURSOR FOR SELECT CDTPCREDBANC, CDCENTCUST, CDFILIAL, VRPERATTPCRE
                                          FROM RATTPCRED
                                         WHERE CDTPCREDBANC = @V_CDTIPO;
         OPEN C_RATTPCRED;

         FETCH NEXT FROM C_RATTPCRED INTO @V_CDTPCREDBANC, @V_CDCENTCUST_R, @V_CDFILIAL_R, @V_VRPERATTPCRE;

         WHILE (@@FETCH_STATUS = 0)
         BEGIN
            SET @DOVRRAT = @DOVRRAT + ROUND(@V_VALOR * @V_VRPERATTPCRE/100,2);

            SET @V_RATEIO = ROUND(@V_VALOR * @V_VRPERATTPCRE/100,2);

            IF @V_INPARTIDA = @V_COUNT
            BEGIN
               IF @V_VALOR <> @DOVRRAT
               BEGIN
                  SET @V_SUBTRAI = @V_VALOR - @DOVRRAT;
                  SET @V_RATEIO = @V_RATEIO + @V_SUBTRAI;
               END;
            END;

            IF @V_CDFILIAL_R IS NULL
            BEGIN
               SET @V_MULTIPLICA = @DOVRRAT * @V_DEBCRED;
               EXEC RATEIO_PARTIDA @V_CDEMPRESA, @V_CDLOTE, @V_DATA, @V_NRLANCLOTE, @V_CDFILIAL_R,
                                   @V_CDCENTCUST_R, @V_MULTIPLICA;
            END
            ELSE
            BEGIN
               SET @V_MULTIPLICA = @DOVRRAT * @V_DEBCRED;
               EXEC RATEIO_PARTIDA @V_CDEMPRESA, @V_CDLOTE, @V_DATA, @V_NRLANCLOTE, @V_CDFILILANCA,
                                   @V_CDCENTCUST_R, @V_MULTIPLICA;
            END;

            SET @V_INPARTIDA = @V_INPARTIDA + 1;

            FETCH NEXT FROM C_RATTPCRED INTO @V_CDTPCREDBANC, @V_CDCENTCUST, @V_CDFILIAL_R, @V_VRPERATTPCRE;
         END;
         CLOSE C_RATTPCRED;
         DEALLOCATE C_RATTPCRED;
      END
      ELSE
      BEGIN
         SET @V_MULTIPLICA = @V_VALOR * @V_DEBCRED;

         EXEC RATEIO_PARTIDA @V_CDEMPRESA, @V_CDLOTE, @V_DATA, @V_NRLANCLOTE, @V_CDFILILANCA, @V_CDCENTCUST,
                             @V_MULTIPLICA;
      END;
      FETCH NEXT FROM C_BCO_LANCCORR INTO @V_DATA, @V_TIPO, @V_CDHISTPADR, @V_CDCONTCTBL, @V_CDTIPO, @V_LANCCONT,
                                          @V_DSMOVICRED, @V_VALOR, @V_NUMERO, @V_CDEMPRESA, @V_CDFILIAL_C, @V_CDFILILANCA,
                                          @V_IDCONTABILIZA, @V_NMRAZSOCCLIE, @V_NMFANTCLIE, @V_NMRAZSOCFORN, @V_NMFANTFORN,
                                          @V_DEBCRED, @V_CDREDUCONT, @V_NRMOVBANC;
   END;
   CLOSE      C_BCO_LANCCORR;
   DEALLOCATE C_BCO_LANCCORR;
END;
GO