IF EXISTS(SELECT NAME
            FROM SYSOBJECTS
           WHERE NAME = 'TRANSFERE_SALDO_CONTCTBL' AND TYPE = 'P')
   DROP PROCEDURE TRANSFERE_SALDO_CONTCTBL
GO

CREATE PROCEDURE TRANSFERE_SALDO_CONTCTBL (
  @P_CDEMPRESA    VARCHAR(02),
  @P_CDCONTADEST  VARCHAR(20),
  @P_CDHISTPADR   VARCHAR(04),
  @P_DTSALDO      DATETIME,
  @P_CDLOTE       VARCHAR(20),
  @P_NRLISTA      VARCHAR(10))
AS
   DECLARE @V_NRORDREGARQ  INT;
   DECLARE @V_CDLOTE       VARCHAR(20);
   DECLARE @V_SEQUENCIAL   VARCHAR(20);
   DECLARE @V_NRLANCLOTE   VARCHAR(06);
   DECLARE @V_EXISTELOTE   VARCHAR(20);
   DECLARE @V_DTINICIAL    DATETIME;
   DECLARE @V_DTFINAL      DATETIME;
   DECLARE @V_IDCONTCCUS   VARCHAR(01);
   DECLARE @V_DSHISTPADR   VARCHAR(150);
   DECLARE @V_FILRAT       VARCHAR(10);
   DECLARE @V_CENTCUSTRAT  VARCHAR(10);
   DECLARE @V_SOMASALDO    DOUBLE PRECISION;

   /* VARIAVEIS DO CURSOR C_SALDEMPR */
   DECLARE @C_SALDEMPR_CDEMPRESA  VARCHAR(02);
   DECLARE @C_SALDEMPR_CDCONTCTBL VARCHAR(20);
   DECLARE @C_SALDEMPR_DTSALDEMPR DATETIME;
   DECLARE @C_SALDEMPR_VRSALDEMPR DOUBLE PRECISION;

   /* VARIAVEIS DO CURSOR C_RAT */
   DECLARE @C_RAT_CDFILIAL        VARCHAR(04);
   DECLARE @C_RAT_CDCENTCUST      VARCHAR(04);
   DECLARE @C_RAT_VRSALDCCUS      VARCHAR(04);

   /* VARIAVEIS AUXILIARES */
   DECLARE @V_VRSALDEMPR_AUX      DOUBLE PRECISION;
   DECLARE @V_VRSALDCCUS_AUX      DOUBLE PRECISION;
   DECLARE @V_SOMASALDO_AUX       DOUBLE PRECISION;
BEGIN
  SET @V_CDLOTE = @P_CDLOTE;
  
  EXEC TEKNISA.NOVO_CODIGO @V_CDLOTE, @V_SEQUENCIAL OUTPUT, 1;     

  SET @V_CDLOTE = REPLACE(@V_CDLOTE, '[EMP]', @P_CDEMPRESA);
  SET @V_CDLOTE = REPLACE(@V_CDLOTE, '[ANO]', SUBSTRING(CONVERT(VARCHAR, @P_DTSALDO, 103), 7, 4));
  SET @V_CDLOTE = REPLACE(@V_CDLOTE, '[MES]', SUBSTRING(CONVERT(VARCHAR, @P_DTSALDO, 103), 4, 2));
  SET @V_CDLOTE = REPLACE(@V_CDLOTE, '[DIA]', SUBSTRING(CONVERT(VARCHAR, @P_DTSALDO, 103), 1, 2));
  SET @V_CDLOTE = REPLACE(@V_CDLOTE, '[SEQ]', SUBSTRING(@V_SEQUENCIAL, 17, 4));

  SELECT @V_NRLANCLOTE = MAX(NRLANCLOTE)
    FROM LANCLOTE
   WHERE CDEMPRESA = @P_CDEMPRESA
     AND CDLOTE    = @V_CDLOTE;

  IF @V_NRLANCLOTE = '' BEGIN
     SET @V_NRLANCLOTE = NULL;
  END;

  IF @V_NRLANCLOTE IS NULL BEGIN
      SET @V_NRLANCLOTE = '000001';
  END
  ELSE BEGIN
     SET @V_NRLANCLOTE  = RIGHT(REPLICATE('0', 6) + CONVERT(VARCHAR, CONVERT(INT, @V_NRLANCLOTE) + 1), 6);
  END;

  SELECT @V_EXISTELOTE = CDLOTE
    FROM CAPALOTE
   WHERE CDEMPRESA = @P_CDEMPRESA
     AND CDLOTE    = @V_CDLOTE;

  IF @V_EXISTELOTE = '' BEGIN
     SET @V_EXISTELOTE = NULL;
  END;
  SET @V_DTINICIAL = @P_DTSALDO;
  SET @V_DTFINAL = @P_DTSALDO;

  IF @V_DTINICIAL = '' BEGIN
     SET @V_DTINICIAL = NULL;
  END;

  IF @V_DTFINAL   = '' BEGIN
     SET @V_DTFINAL = NULL;
  END;

  IF @V_EXISTELOTE IS NULL BEGIN
    INSERT INTO CAPALOTE
      (CDEMPRESA, CDLOTE, DTINICLOTE, DTFINALOTE, IDTPMOVLOTE,IDLOTE)
    VALUES
      (@P_CDEMPRESA, @V_CDLOTE, @V_DTINICIAL, @V_DTFINAL, NULL, 'D');
  END;

  SELECT @V_DSHISTPADR = DSHISTPADR
    FROM HISTPADR
   WHERE CDHISTPADR = @P_CDHISTPADR;

  IF @V_DSHISTPADR = '' BEGIN
     SET @V_DSHISTPADR = NULL;
  END;

  SET @V_SOMASALDO = 0;
  DECLARE C_SALDEMPR CURSOR FOR
     SELECT CDEMPRESA, CDCONTCTBL, DTSALDEMPR, ROUND(VRSALDEMPR, 2) VRSALDEMPR
       FROM SALDEMPR
      WHERE (CDEMPRESA  = @P_CDEMPRESA)
        AND (CDCONTCTBL IN (SELECT CDLISTA
                              FROM LISTA
                             WHERE NRLISTA = @P_NRLISTA))
         AND (DTSALDEMPR = @P_DTSALDO);

        OPEN C_SALDEMPR;
        FETCH NEXT FROM C_SALDEMPR INTO @C_SALDEMPR_CDEMPRESA, @C_SALDEMPR_CDCONTCTBL, @C_SALDEMPR_DTSALDEMPR, @C_SALDEMPR_VRSALDEMPR;
        WHILE @@FETCH_STATUS = 0 BEGIN
            SET @V_VRSALDEMPR_AUX = ROUND(@C_SALDEMPR_VRSALDEMPR * -1, 2);
            EXEC TEKNISA.NOVA_PARTIDA @P_CDEMPRESA,  @V_CDLOTE,     @P_DTSALDO, @V_NRLANCLOTE, @C_SALDEMPR_CDCONTCTBL,
                                         @P_CDHISTPADR, @V_DSHISTPADR, @V_VRSALDEMPR_AUX,
                                         '','','', '99999999999999999999', 'N';

            SELECT @V_IDCONTCCUS = IDCONTCCUS
              FROM CONTCTBL
             WHERE CDCONTCTBL = @C_SALDEMPR_CDEMPRESA;

            IF @V_IDCONTCCUS = '' BEGIN
               SET @V_IDCONTCCUS = NULL;
            END;

            IF @V_IDCONTCCUS <> 'O' BEGIN
               DECLARE C_RAT CURSOR FOR
                  SELECT CDFILIAL, CDCENTCUST, VRSALDCCUS
                     FROM SALDCCUS
                    WHERE(CDEMPRESA  = @P_CDEMPRESA)   AND
                         (CDCONTCTBL = @C_SALDEMPR_CDCONTCTBL) AND
                         (DTSALDCCUS = @C_SALDEMPR_DTSALDEMPR) AND
                         (VRSALDCCUS <> 0);
                     OPEN C_RAT;
                     FETCH NEXT FROM C_RAT INTO @C_RAT_CDFILIAL, @C_RAT_CDCENTCUST, @C_RAT_VRSALDCCUS;
                     WHILE @@FETCH_STATUS = 0 BEGIN
                        SET @V_VRSALDCCUS_AUX = ROUND(@C_RAT_VRSALDCCUS * -1, 2);
                        EXEC TEKNISA.RATEIO_PARTIDA @P_CDEMPRESA, @V_CDLOTE, @P_DTSALDO, @V_NRLANCLOTE, @C_RAT_CDFILIAL,
                                                       @C_RAT_CDCENTCUST, @V_VRSALDCCUS_AUX;
                        FETCH NEXT FROM C_RAT INTO @C_RAT_CDFILIAL, @C_RAT_CDCENTCUST, @C_RAT_VRSALDCCUS;
                     END;
                     CLOSE C_RAT;
                     DEALLOCATE C_RAT;
             END;
             SET @V_SOMASALDO = @V_SOMASALDO + @C_SALDEMPR_VRSALDEMPR;
            FETCH NEXT FROM C_SALDEMPR INTO @C_SALDEMPR_CDEMPRESA, @C_SALDEMPR_CDCONTCTBL, @C_SALDEMPR_DTSALDEMPR, @C_SALDEMPR_VRSALDEMPR;
        END;
  SET @V_SOMASALDO_AUX = ROUND(@V_SOMASALDO, 2);
  EXEC TEKNISA.NOVA_PARTIDA @P_CDEMPRESA, @V_CDLOTE, @P_DTSALDO, @V_NRLANCLOTE, @P_CDCONTADEST,
                       @P_CDHISTPADR, @V_DSHISTPADR, @V_SOMASALDO_AUX,
                       '','','', '99999999999999999999', 'N';

  UPDATE LANCLOTE
     SET IDTPLANCLOTE = 'T'
   WHERE CDEMPRESA = @P_CDEMPRESA
     AND CDLOTE    = @V_CDLOTE;

  DELETE
    FROM LISTA
   WHERE NRLISTA = @P_NRLISTA;

END;
GO


-- VERSAO --
EXEC TEKNISA.ATUVEROBJ 'TRANSFERE_SALDO_CONTCTBL','5.45.000';
GO

