IF EXISTS (SELECT * FROM SYSOBJECTS O, SYSUSERS U
            WHERE O.NAME = 'CONTABILIZA_RET_ESTOQUE' AND
                    TYPE = 'P' 	                     AND
	           U.UID = O.UID                     AND
	          U.NAME = USER)	
   DROP PROCEDURE CONTABILIZA_RET_ESTOQUE
GO
                                                                                                           
CREATE PROCEDURE CONTABILIZA_RET_ESTOQUE (
   @P_NRLISTA    VARCHAR(10))
AS
BEGIN
   DECLARE @V_CDCONTCTBL       VARCHAR(20);
   DECLARE @V_IDCONTCCUS       VARCHAR(01);
   DECLARE @V_CDLOTE           VARCHAR(20);
   DECLARE @V_NRLANCLOTE       VARCHAR(06);
   DECLARE @V_CDEMPRESA        VARCHAR(04);
   DECLARE @V_CDHISTPADRETEST  VARCHAR(05);
   DECLARE @V_DSHISTPADR       VARCHAR(1000);
                                                                                                           
   /* VARIAVEIS DO CURSOR C_RETIRADA */
   DECLARE @C_RETIRADA_VRCUSTPROD       DOUBLE PRECISION;
   DECLARE @C_RETIRADA_CDFILIMOVI       VARCHAR(4);
   DECLARE @C_RETIRADA_CDHISTPADR       VARCHAR(4);
   DECLARE @C_RETIRADA_DSHISTPADR       VARCHAR(60);
   DECLARE @C_RETIRADA_CDTIPORETI       VARCHAR(2);
   DECLARE @C_RETIRADA_CDCENTCUSTDB     VARCHAR(4);
   DECLARE @C_RETIRADA_CDCENTCUSTCR     VARCHAR;
   DECLARE @C_RETIRADA_CDCTBLENTRPR     VARCHAR;
   DECLARE @C_RETIRADA_CDCONTCTBL       VARCHAR(20);
   DECLARE @C_RETIRADA_VRCUSTPRODAJUST  DOUBLE PRECISION;
   DECLARE @C_RETIRADA_DTLANCMOVI       DATETIME;
   DECLARE @C_RETIRADA_NRLANCESTQ       VARCHAR(10);
   DECLARE @C_RETIRADA_CDFILIAL         VARCHAR(04);
                                                                                                           
                                                                                                           
   EXEC EXCLUI_LANCCONTABIL '02', @P_NRLISTA;

   DECLARE C_RETIRADA  CURSOR FOR 
        SELECT SUM(TEKNISA.CUSTO_PRODUTO_LCEST(IT.CDFILIMOVI, IT.CDPRODMOVI, 3, IT.DTLANCMOVI,
                   GETDATE(), IT.CDALMOXARIFE, IT.CDLOCALESTOQ,  IT.NRLOTEESTQ,
                   IT.NRSUBLOTE) * IT.QTLANCTOEST) AS VRCUSTPROD,
               IT.CDFILIMOVI AS CDFILIMOVI, TR.CDHISTPADR AS CDHISTPADR, HP.DSHISTPADR AS DSHISTPADR,
               IT.CDTIPORETI AS CDTIPORETI, S.CDCENTCUST CDCENTCUSTDB,
               TEKNISA.CENTCUST_PRODUTO(IT.CDFILIMOVI, PR.CDARVPROD, 'S') AS CDCENTCUSTCR,
               TEKNISA.CTBL_PRODUTO(PR.CDPRODUTO,'E') AS CDCTBLENTRPR,
               (CASE TR.IDCONTABCMV WHEN 'S' THEN TEKNISA.CTBL_CMV(PR.CDPRODUTO) ELSE TR.CDCONTCTBL END) CDCONTCTBL,
               IT.DTLANCMOVI, IT.NRLANCESTQ,IT.CDFILIAL
          FROM ITLANCTOEST IT, PRODUTO PR, ITREQUESTO IR,
               LOCALESTOQUE LE, TIPORETI TR,  PARAMAN PM, HISTPADR HP,
               RETIRADAESTO R, SETOR S, LANCTOESTOQ L, LISTA LI
         WHERE (PR.CDPRODUTO    = IT.CDPRODUTO)
           AND (IT.IDTIPOMOVI   = '3')
           AND (IT.CDFILIMOVI   = LE.CDFILIAL)
           AND (PM.CDFILIAL     = IT.CDFILIMOVI)
           AND (PM.CDTIPORETI   <> IT.CDTIPORETI)
           AND (IT.CDALMOXARIFE = LE.CDALMOXARIFE)
           AND (IT.CDLOCALESTOQ = LE.CDLOCALESTOQ)
           AND (L.CDFILIAL      = R.CDFILIALLAN)
           AND (L.NRLANCESTQ    = R.NRLANCESTQ)
           AND (R.CDSETOR       = S.CDSETOR)
           AND (R.CDCENTCUST    = S.CDCENTCUST)
           AND (IT.CDFILIAL     = L.CDFILIAL)
           AND (IT.NRLANCESTQ   = L.NRLANCESTQ)
           AND ((R.CDCENTCUST   IS NOT NULL) OR (R.CDCENTCUST <> ''))
           AND (ISNULL(IT.IDEVOLESTOQ,'S') = 'S')
           AND (IT.CDTIPORETI   = TR.CDTIPORETI)
           AND (IT.CDFILIAL    *= IR.CDFILILANC)
           AND (HP.CDHISTPADR   = TR.CDHISTPADR)
           AND (IT.NRLANCESTQ  *= IR.NRLANCESTQ) 
           AND (IT.NRSEQUITEM  *= IR.NRSEQUITEM)
           AND (IT.CDPRODUTO   *= IR.CDPRODUTO)
           AND (IT.NRLANCESTQ   = SUBSTRING(LI.CDLISTA, 05, 10))
           AND (IT.CDFILIAL     = SUBSTRING(LI.CDLISTA, 01, 04))
           AND (LI.NRLISTA      = @P_NRLISTA)
         GROUP BY
               IT.CDFILIMOVI, TR.CDHISTPADR, HP.DSHISTPADR,
               IT.CDTIPORETI, S.CDCENTCUST,
               IT.IDTIPOMOVI,
               TEKNISA.CENTCUST_PRODUTO(IT.CDFILIMOVI, PR.CDARVPROD, 'S'),
               TEKNISA.CTBL_PRODUTO(PR.CDPRODUTO,'E') ,
               (CASE TR.IDCONTABCMV WHEN 'S' THEN TEKNISA.CTBL_CMV(PR.CDPRODUTO) ELSE TR.CDCONTCTBL END),
               IT.DTLANCMOVI, IT.NRLANCESTQ, IT.CDFILIAL
        UNION ALL
        SELECT SUM(TEKNISA.CUSTO_PRODUTO_LCEST(IT.CDFILIMOVI, IT.CDPRODMOVI, 3, IT.DTLANCMOVI,
                   GETDATE(), IT.CDALMOXARIFE, IT.CDLOCALESTOQ,  IT.NRLOTEESTQ,
               IT.NRSUBLOTE) * IT.QTLANCTOEST) AS VRCUSTPROD,
               IT.CDFILIMOVI AS CDFILIMOVI, TR.CDHISTPADR AS CDHISTPADR, HP.DSHISTPADR AS DSHISTPADR,
               IT.CDTIPORETI AS CDTIPORETI, F.CDCENTCUST CDCENTCUSTDB,
               TEKNISA.CENTCUST_PRODUTO(IT.CDFILIMOVI, PR.CDARVPROD, 'S') AS CDCENTCUSTCR,
               TEKNISA.CTBL_PRODUTO(PR.CDPRODUTO,'E') AS CDCTBLENTRPR,
               (CASE TR.IDCONTABCMV WHEN 'S' THEN TEKNISA.CTBL_CMV(PR.CDPRODUTO) ELSE TR.CDCONTCTBL END) CDCONTCTBL,
               IT.DTLANCMOVI,IT.NRLANCESTQ,IT.CDFILIAL
          FROM ITLANCTOEST IT, PRODUTO PR,
               LOCALESTOQUE LE, TIPORETI TR, HISTPADR HP,
               RETIRADA RE, LANCTOESTOQ L, FILIAL F, LISTA LI 
         WHERE (PR.CDPRODUTO    = IT.CDPRODUTO)
           AND (IT.IDTIPOMOVI   = '3')
           AND (IT.CDFILIMOVI   = LE.CDFILIAL)
           AND (IT.CDALMOXARIFE = LE.CDALMOXARIFE) 
           AND (IT.CDLOCALESTOQ = LE.CDLOCALESTOQ)
           AND (RE.CDFILANCESTQ = F.CDFILIAL)
           AND (L.CDFILIAL      = RE.CDFILANCESTQ)
           AND (L.NRLANCESTQ    = RE.NRLANCESTQ)
           AND (IT.CDFILIAL     = L.CDFILIAL) 
           AND (IT.NRLANCESTQ   = L.NRLANCESTQ)
           AND (ISNULL(IT.IDEVOLESTOQ, 'S') = 'S')
           AND (IT.CDTIPORETI   = TR.CDTIPORETI)
           AND (HP.CDHISTPADR   = TR.CDHISTPADR)
           AND (IT.NRLANCESTQ   = SUBSTRING(LI.CDLISTA, 05, 10))
           AND (IT.CDFILIAL     = SUBSTRING(LI.CDLISTA, 01, 04))
           AND (LI.NRLISTA      = @P_NRLISTA)
         GROUP BY
               IT.CDFILIMOVI  ,  TR.CDHISTPADR, HP.DSHISTPADR,
               IT.CDTIPORETI,F.CDCENTCUST,
               IT.IDTIPOMOVI,
               TEKNISA.CENTCUST_PRODUTO(IT.CDFILIMOVI, PR.CDARVPROD, 'S'),
               TEKNISA.CTBL_PRODUTO(PR.CDPRODUTO,'E') ,
               (CASE TR.IDCONTABCMV WHEN 'S' THEN TEKNISA.CTBL_CMV(PR.CDPRODUTO) ELSE TR.CDCONTCTBL END),
               IT.DTLANCMOVI,IT.NRLANCESTQ, IT.CDFILIAL
         ORDER BY 5, 9
                                                                                                           
   OPEN C_RETIRADA;
   FETCH NEXT FROM C_RETIRADA INTO @C_RETIRADA_VRCUSTPROD,   @C_RETIRADA_CDFILIMOVI,      @C_RETIRADA_CDHISTPADR,   
                                   @C_RETIRADA_DSHISTPADR,   @C_RETIRADA_CDTIPORETI,      @C_RETIRADA_CDCENTCUSTDB,    
                                   @C_RETIRADA_CDCENTCUSTCR, @C_RETIRADA_CDCTBLENTRPR,    @C_RETIRADA_CDCONTCTBL, 
                                   @C_RETIRADA_DTLANCMOVI,   @C_RETIRADA_NRLANCESTQ,      @C_RETIRADA_CDFILIAL;
                                                                                                           
   WHILE (@@FETCH_STATUS = 0) BEGIN
       SELECT @V_CDEMPRESA = CDEMPRESA
         FROM FILIAL
        WHERE CDFILIAL = @C_RETIRADA_CDFILIMOVI;
                                                                                                           
       IF (@C_RETIRADA_CDHISTPADR IS NULL) BEGIN
          IF NOT EXISTS(SELECT CDHISTPADRETEST, DSHISTPADR
                          FROM PARAMESTOQUE, HISTPADR
                         WHERE CDHISTPADRETEST = CDHISTPADR) BEGIN
               SET @V_CDHISTPADRETEST = '';
               SET @V_DSHISTPADR      = '';
          END
          ELSE BEGIN
               SELECT @V_CDHISTPADRETEST = CDHISTPADRETEST, 
                      @V_DSHISTPADR      = DSHISTPADR
                 FROM PARAMESTOQUE, HISTPADR
                WHERE CDHISTPADRETEST = CDHISTPADR;
          END;
       END
       ELSE BEGIN
          SET @V_CDHISTPADRETEST = @C_RETIRADA_CDHISTPADR;
          SET @V_DSHISTPADR      = @C_RETIRADA_DSHISTPADR;
       END;
                                                                                                           
       EXEC GERA_LOTECONTABIL @V_CDEMPRESA, '02', '', @C_RETIRADA_CDFILIMOVI, @C_RETIRADA_DTLANCMOVI, '', '',
                              @V_CDLOTE, @V_NRLANCLOTE;
                                                                                                           
       SET @C_RETIRADA_VRCUSTPRODAJUST = ROUND(@C_RETIRADA_VRCUSTPROD * -1,2);
       EXEC  NOVA_PARTIDA @V_CDEMPRESA, @V_CDLOTE, @C_RETIRADA_DTLANCMOVI, @V_NRLANCLOTE, @C_RETIRADA_CDCONTCTBL,
                          @V_CDHISTPADRETEST, @V_DSHISTPADR, @C_RETIRADA_VRCUSTPRODAJUST, '', '', '02',
                          @C_RETIRADA_NRLANCESTQ, 'N';
                                                                                                           
       SELECT @V_CDCONTCTBL = CDCONTCTBL, 
              @V_IDCONTCCUS = IDCONTCCUS
         FROM CONTCTBL
        WHERE CDCONTCTBL = @C_RETIRADA_CDCONTCTBL;
                                                                                                           
       IF (@C_RETIRADA_CDCENTCUSTDB IS NOT NULL) BEGIN
          IF (@V_IDCONTCCUS <> 'O') BEGIN
             SET @C_RETIRADA_VRCUSTPRODAJUST = ROUND(@C_RETIRADA_VRCUSTPROD * -1,2);
             EXEC RATEIO_PARTIDA @V_CDEMPRESA, @V_CDLOTE, @C_RETIRADA_DTLANCMOVI, @V_NRLANCLOTE, @C_RETIRADA_CDFILIMOVI,
                                 @C_RETIRADA_CDCENTCUSTDB, @C_RETIRADA_VRCUSTPRODAJUST;
          END;
       END;
                                                                                                           
       SET @C_RETIRADA_VRCUSTPRODAJUST = ROUND(@C_RETIRADA_VRCUSTPROD,2);
       EXEC NOVA_PARTIDA @V_CDEMPRESA, @V_CDLOTE, @C_RETIRADA_DTLANCMOVI, @V_NRLANCLOTE, @C_RETIRADA_CDCTBLENTRPR,
                         @V_CDHISTPADRETEST, @V_DSHISTPADR, @C_RETIRADA_VRCUSTPRODAJUST, '', '', '02',
                         @C_RETIRADA_NRLANCESTQ, 'N';
                                                                                                           
       SELECT @V_CDCONTCTBL = CDCONTCTBL, 
              @V_IDCONTCCUS = IDCONTCCUS
         FROM CONTCTBL
        WHERE CDCONTCTBL = @C_RETIRADA_CDCONTCTBL;
                                                                                                           
       IF (@C_RETIRADA_CDCENTCUSTCR IS NOT NULL) BEGIN
          IF (@V_IDCONTCCUS <> 'O') BEGIN
             SET @C_RETIRADA_VRCUSTPRODAJUST = ROUND(@C_RETIRADA_VRCUSTPROD,2);
             EXEC RATEIO_PARTIDA @V_CDEMPRESA, @V_CDLOTE, @C_RETIRADA_DTLANCMOVI, @V_NRLANCLOTE, @C_RETIRADA_CDFILIMOVI,
                                 @C_RETIRADA_CDCENTCUSTCR, @C_RETIRADA_VRCUSTPRODAJUST;
          END;
       END;
                                                                                                           
       INSERT INTO RELALESTLANCLOT
          (CDEMPRESA, CDLOTE, NRLANCLOTE, NRSEQLANLOTE, CDFILIAL, NRLANCESTQ)
       VALUES
          (@V_CDEMPRESA, @V_CDLOTE, @V_NRLANCLOTE, '00001', @C_RETIRADA_CDFILIAL, @C_RETIRADA_NRLANCESTQ);
                                                                                                           
       IF (TEKNISA.CONFERE_PARTIDA(@V_CDEMPRESA, @V_CDLOTE, @V_NRLANCLOTE, @C_RETIRADA_DTLANCMOVI) = 'V') BEGIN
          UPDATE LANCTOESTOQ 
             SET IDSTATUSCTBEST = 'C'
           WHERE CDFILIAL       = @C_RETIRADA_CDFILIAL
             AND NRLANCESTQ     = @C_RETIRADA_NRLANCESTQ;
       END
       ELSE BEGIN
          UPDATE LANCTOESTOQ 
             SET IDSTATUSCTBEST = 'E'
           WHERE CDFILIAL       = @C_RETIRADA_CDFILIAL
             AND NRLANCESTQ     = @C_RETIRADA_NRLANCESTQ;
       END;
                                                                                                           
   FETCH NEXT FROM C_RETIRADA INTO @C_RETIRADA_VRCUSTPROD,   @C_RETIRADA_CDFILIMOVI,      @C_RETIRADA_CDHISTPADR,   
                                   @C_RETIRADA_DSHISTPADR,   @C_RETIRADA_CDTIPORETI,      @C_RETIRADA_CDCENTCUSTDB,    
                                   @C_RETIRADA_CDCENTCUSTCR, @C_RETIRADA_CDCTBLENTRPR,    @C_RETIRADA_CDCONTCTBL, 
                                   @C_RETIRADA_DTLANCMOVI,   @C_RETIRADA_NRLANCESTQ,      @C_RETIRADA_CDFILIAL;
   END;
   CLOSE C_RETIRADA;
   DEALLOCATE C_RETIRADA;
                                                                                                           
   DELETE FROM LISTA
    WHERE NRLISTA = @P_NRLISTA;
END
GO
  