IF EXISTS (SELECT * FROM SYSOBJECTS O, SYSUSERS U
           WHERE O.NAME = 'CONTABILIZA_RET_PROD' AND
                   TYPE = 'P' 	                 AND
	          U.UID = O.UID                  AND
	         U.NAME = USER)
   DROP PROCEDURE CONTABILIZA_RET_PROD
GO
                                                                                                           
CREATE PROCEDURE CONTABILIZA_RET_PROD(
   @P_NRLISTA             VARCHAR(10))
AS
BEGIN
   DECLARE @V_CDHISTPADR     VARCHAR(04);
   DECLARE @V_DSHISTPADR     VARCHAR(1000);
   DECLARE @V_IDCONTCCUS     VARCHAR(01);
   DECLARE @V_CDLOTE         VARCHAR(20);
   DECLARE @V_NRLANCLOTE     VARCHAR(06);
   DECLARE @V_CDEMPRESA      VARCHAR(02);
                                                                                                           
   /* VARIAVEIS DO CURSOR C_RET_PROD */
   DECLARE @C_RET_PROD_CDFILIAL          VARCHAR(04);
   DECLARE @C_RET_PROD_CDCENTCUST        VARCHAR(04);
   DECLARE @C_RET_PROD_CDCONTCTBL        VARCHAR(20);     
   DECLARE @C_RET_PROD_CDCTBLPRODPR      VARCHAR(20);     
   DECLARE @C_RET_PROD_VRAPRCUSTOP       DOUBLE PRECISION;
   DECLARE @C_RET_PROD_NRORDPROD         VARCHAR(10);
   DECLARE @C_RET_PROD_NRSUBORDPROD      VARCHAR(01);
   DECLARE @C_RET_PROD_CDETAPAPROD       VARCHAR(10);
   DECLARE @C_RET_PROD_NRAPRCUSTOP       VARCHAR(10);
   DECLARE @C_RET_PROD_DTHRFIMREAOP      DATETIME;
   DECLARE @C_RET_PROD_VRAPRCUSTOPAJUST  DOUBLE PRECISION;
                                                                                                           
   /* VARIAVEIS DO CURSOR C_PRODACABADO */
   DECLARE @C_PRODACABADO_CDCTBLENTRPR      VARCHAR(20);
   DECLARE @C_PRODACABADO_CDCONTCTBL        VARCHAR(20);
   DECLARE @C_PRODACABADO_VRPRACABADO       DOUBLE PRECISION;
   DECLARE @C_PRODACABADO_CDFILIAL          VARCHAR(04);
   DECLARE @C_PRODACABADO_CDCENTCUST        VARCHAR(04);
   DECLARE @C_PRODACABADO_IDCONTCCUS        VARCHAR(01);
   DECLARE @C_PRODACABADO_NRORDPROD         VARCHAR(10);
   DECLARE @C_PRODACABADO_NRSUBORDPROD      VARCHAR(01);
   DECLARE @C_PRODACABADO_CDETAPAPROD       VARCHAR(10);
   DECLARE @C_PRODACABADO_NRAPRCUSTOP       VARCHAR(10);
   DECLARE @C_PRODACABADO_DTHRFIMREAOP      DATETIME;
   DECLARE @C_PRODACABADO_VRPRACABADOAJUST  DOUBLE PRECISION;
                                                                                                           
                                                                                                           
   EXEC EXCLUI_LANCCONTABIL '03', @P_NRLISTA;
                                                                                                           
   DECLARE C_RET_PROD CURSOR FOR 
      SELECT AP.CDFILIAL, AP.CDCENTCUST, TEKNISA.CTBL_PRODUTO(PR.CDPRODUTO,'E') AS CDCONTCTBL, TEKNISA.CTBL_PRODPRODUCAO(PR.CDPRODUTO) AS CDCTBLPRODPR,
             SUM(ROUND(ISNULL(AP.QTAPRCUSTOP * AP.VRAPRCUSTOP, 0),2)) VRAPRCUSTOP,
             AP.NRORDPROD, AP.NRSUBORDPROD, AP.CDETAPAPROD, AP.NRAPRCUSTOP, CONVERT(VARCHAR, OP.DTHRFIMREAOP, 103) AS DTHRFIMREAOP
        FROM APRCUSTOP AP, ORDPRODUCAO OP, PRODUTO PR, LISTA L
       WHERE (AP.CDFILIAL      = OP.CDFILIAL)                             
         AND (AP.NRORDPROD     = OP.NRORDPROD)                    
         AND (AP.NRSUBORDPROD  = OP.NRSUBORDPROD)                          
         AND (OP.IDSITORDPROD  = '3') 
         AND (AP.CDFUNCUSTO    <> '099')
         AND (AP.CDAPRCUSTOP   = PR.CDPRODUTO)
         AND (AP.CDFILIAL      = SUBSTRING(L.CDLISTA,1,4))
         AND (AP.NRORDPROD     = SUBSTRING(L.CDLISTA,5,10))
         AND (AP.NRSUBORDPROD  = SUBSTRING(L.CDLISTA,15,1))
         AND (AP.CDETAPAPROD   = SUBSTRING(L.CDLISTA,16,10))
         AND (AP.NRAPRCUSTOP   = SUBSTRING(L.CDLISTA,26,10))
         AND (L.NRLISTA        = @P_NRLISTA)
       GROUP BY AP.CDFILIAL, AP.CDCENTCUST, TEKNISA.CTBL_PRODUTO(PR.CDPRODUTO,'E'), TEKNISA.CTBL_PRODPRODUCAO(PR.CDPRODUTO),
                AP.NRORDPROD, AP.NRSUBORDPROD, AP.CDETAPAPROD, AP.NRAPRCUSTOP, CONVERT(VARCHAR, OP.DTHRFIMREAOP, 103)
       ORDER BY 3, 5;
                                                                                                           
   OPEN C_RET_PROD;
   FETCH NEXT FROM C_RET_PROD INTO @C_RET_PROD_CDFILIAL,    @C_RET_PROD_CDCENTCUST, @C_RET_PROD_CDCONTCTBL,   @C_RET_PROD_CDCTBLPRODPR,
                                   @C_RET_PROD_VRAPRCUSTOP, @C_RET_PROD_NRORDPROD,  @C_RET_PROD_NRSUBORDPROD, @C_RET_PROD_CDETAPAPROD,
                                   @C_RET_PROD_NRAPRCUSTOP, @C_RET_PROD_DTHRFIMREAOP;
                                                                                                           
   WHILE (@@FETCH_STATUS = 0) BEGIN
       SELECT @V_CDEMPRESA = CDEMPRESA
         FROM FILIAL
        WHERE CDFILIAL = @C_RET_PROD_CDFILIAL;
                                                                                                           
       IF NOT EXISTS(SELECT CDHISTPADRETPRO, DSHISTPADR
                       FROM PARAMESTOQUE, HISTPADR
                      WHERE CDHISTPADRETPRO = CDHISTPADR) BEGIN
          SET @V_CDHISTPADR = '';
          SET @V_DSHISTPADR = '';  
       END
       ELSE BEGIN
          SELECT @V_CDHISTPADR = CDHISTPADRETPRO, 
                 @V_DSHISTPADR = DSHISTPADR
            FROM PARAMESTOQUE, HISTPADR
           WHERE CDHISTPADRETPRO = CDHISTPADR;
       END;
                                                                                                           
       EXEC GERA_LOTECONTABIL @V_CDEMPRESA, '03', '', @C_RET_PROD_CDFILIAL, @C_RET_PROD_DTHRFIMREAOP, '', '', 
                              @V_CDLOTE, @V_NRLANCLOTE;
                                                                                                           
       IF (@C_RET_PROD_VRAPRCUSTOP <> 0.0) BEGIN
           SET @C_RET_PROD_VRAPRCUSTOPAJUST = ROUND(@C_RET_PROD_VRAPRCUSTOP, 02);
           EXEC NOVA_PARTIDA @V_CDEMPRESA, @V_CDLOTE, @C_RET_PROD_DTHRFIMREAOP, @V_NRLANCLOTE, @C_RET_PROD_CDCONTCTBL,
                             @V_CDHISTPADR, @V_DSHISTPADR, @C_RET_PROD_VRAPRCUSTOPAJUST, '', '', '03',
                             @C_RET_PROD_NRAPRCUSTOP, 'N';
                                                                                                           
           IF (@C_RET_PROD_CDCENTCUST IS NOT NULL) BEGIN
               SELECT @V_IDCONTCCUS = IDCONTCCUS
                 FROM CONTCTBL
                WHERE CDCONTCTBL = @C_RET_PROD_CDCONTCTBL;
                                                                                                           
               IF (@V_IDCONTCCUS <> 'O') BEGIN
                  SET @C_RET_PROD_VRAPRCUSTOPAJUST = ROUND(@C_RET_PROD_VRAPRCUSTOP, 02);
                  EXEC RATEIO_PARTIDA @V_CDEMPRESA, @V_CDLOTE, @C_RET_PROD_DTHRFIMREAOP, @V_NRLANCLOTE,
                                      @C_RET_PROD_CDFILIAL, @C_RET_PROD_CDCENTCUST, @C_RET_PROD_VRAPRCUSTOPAJUST;
               END;
           END;
                                                                                                           
           SET @C_RET_PROD_VRAPRCUSTOPAJUST = ROUND(@C_RET_PROD_VRAPRCUSTOP * -1, 02);
           EXEC NOVA_PARTIDA @V_CDEMPRESA, @V_CDLOTE, @C_RET_PROD_DTHRFIMREAOP, @V_NRLANCLOTE, @C_RET_PROD_CDCTBLPRODPR,
                             @V_CDHISTPADR, @V_DSHISTPADR, @C_RET_PROD_VRAPRCUSTOPAJUST, '', '', '03', 
                             @C_RET_PROD_NRAPRCUSTOP, 'N';
       END;
                                                                                                           
       INSERT INTO RELACAPRLANCLOT
          (CDEMPRESA, CDLOTE, NRLANCLOTE, NRSEQLANLOTE,CDFILIAL, NRORDPROD, NRSUBORDPROD, CDETAPAPROD, NRAPRCUSTOP)
       VALUES
          (@V_CDEMPRESA, @V_CDLOTE, @V_NRLANCLOTE, '00001', @C_RET_PROD_CDFILIAL, @C_RET_PROD_NRORDPROD, @C_RET_PROD_NRSUBORDPROD,@C_RET_PROD_CDETAPAPROD, @C_RET_PROD_NRAPRCUSTOP);
                                                                                                           
       IF (TEKNISA.CONFERE_PARTIDA(@V_CDEMPRESA, @V_CDLOTE, @V_NRLANCLOTE, @C_RET_PROD_DTHRFIMREAOP) = 'V') BEGIN
          UPDATE APRCUSTOP
             SET IDSTATUSCTBOP = 'C'
           WHERE CDFILIAL      = @C_RET_PROD_CDFILIAL
             AND NRORDPROD     = @C_RET_PROD_NRORDPROD
             AND NRSUBORDPROD  = @C_RET_PROD_NRSUBORDPROD
             AND CDETAPAPROD   = @C_RET_PROD_CDETAPAPROD
             AND NRAPRCUSTOP   = @C_RET_PROD_NRAPRCUSTOP;
       END
       ELSE BEGIN
          UPDATE APRCUSTOP 
             SET IDSTATUSCTBOP = 'E'
           WHERE CDFILIAL      = @C_RET_PROD_CDFILIAL
             AND NRORDPROD     = @C_RET_PROD_NRORDPROD
             AND NRSUBORDPROD  = @C_RET_PROD_NRSUBORDPROD
             AND CDETAPAPROD   = @C_RET_PROD_CDETAPAPROD
             AND NRAPRCUSTOP   = @C_RET_PROD_NRAPRCUSTOP;
       END;
                                                                                                           
       FETCH NEXT FROM C_RET_PROD INTO @C_RET_PROD_CDFILIAL,    @C_RET_PROD_CDCENTCUST, @C_RET_PROD_CDCONTCTBL,  @C_RET_PROD_CDCTBLPRODPR,
                                       @C_RET_PROD_VRAPRCUSTOP, @C_RET_PROD_NRORDPROD,  @C_RET_PROD_NRSUBORDPROD, @C_RET_PROD_CDETAPAPROD,
                                       @C_RET_PROD_NRAPRCUSTOP, @C_RET_PROD_DTHRFIMREAOP;
   END;
   CLOSE C_RET_PROD;
   DEALLOCATE C_RET_PROD;
                                                                                                            
   DECLARE C_PRODACABADO CURSOR FOR 
      SELECT TEKNISA.CTBL_PRODUTO(OP.CDPRODUTO, 'E') AS CDCTBLENTRPR,
             TEKNISA.CTBL_PRODPRODUCAO(OP.CDPRODUTO) AS CDCONTCTBL,
             SUM(ROUND(ISNULL(AP.QTAPRCUSTOP * AP.VRAPRCUSTOP, 0),2)) AS VRPRACABADO, AP.CDFILIAL, FL.CDCENTCUST, CONT.IDCONTCCUS,
             AP.NRORDPROD, AP.NRSUBORDPROD, AP.CDETAPAPROD, AP.NRAPRCUSTOP, CONVERT(VARCHAR, OP.DTHRFIMREAOP, 103) AS DTHRFIMREAOP
        FROM ORDPRODUCAO OP, FILIAL FL, CONTCTBL CONT, APRCUSTOP AP, LISTA L
       WHERE (FL.CDFILIAL = AP.CDFILIAL)
         AND (CONT.CDCONTCTBL = TEKNISA.CTBL_PRODUTO(OP.CDPRODUTO, 'E'))
         AND (OP.IDSITORDPROD = '3')
         AND (AP.CDFILIAL     = OP.CDFILIAL)
         AND (AP.NRORDPROD    = OP.NRORDPROD)
         AND (AP.NRSUBORDPROD = OP.NRSUBORDPROD)
         AND (AP.CDFILIAL     = SUBSTRING(L.CDLISTA, 01, 04))
         AND (AP.NRORDPROD    = SUBSTRING(L.CDLISTA, 05, 10))
         AND (AP.NRSUBORDPROD = SUBSTRING(L.CDLISTA, 15, 01))
         AND (AP.CDETAPAPROD  = SUBSTRING(L.CDLISTA, 16, 10))
         AND (AP.NRAPRCUSTOP  = SUBSTRING(L.CDLISTA, 26, 10))
         AND (L.NRLISTA       = @P_NRLISTA)
       GROUP BY TEKNISA.CTBL_PRODUTO(OP.CDPRODUTO, 'E'), TEKNISA.CTBL_PRODPRODUCAO(OP.CDPRODUTO), AP.CDFILIAL, FL.CDCENTCUST, CONT.IDCONTCCUS,
                AP.NRORDPROD, AP.NRSUBORDPROD, AP.CDETAPAPROD, AP.NRAPRCUSTOP, CONVERT(VARCHAR, OP.DTHRFIMREAOP, 103)
       ORDER BY 1, 2
                                                                                                           
   OPEN C_PRODACABADO;
   FETCH NEXT FROM C_PRODACABADO INTO @C_PRODACABADO_CDCTBLENTRPR, @C_PRODACABADO_CDCONTCTBL,  @C_PRODACABADO_VRPRACABADO, @C_PRODACABADO_CDFILIAL,
                                      @C_PRODACABADO_CDCENTCUST,   @C_PRODACABADO_IDCONTCCUS,  @C_PRODACABADO_NRORDPROD,   @C_PRODACABADO_NRSUBORDPROD,
                                      @C_PRODACABADO_CDETAPAPROD,  @C_PRODACABADO_NRAPRCUSTOP, @C_PRODACABADO_DTHRFIMREAOP;
                                                                                                           
   WHILE (@@FETCH_STATUS = 0) BEGIN
       SELECT @V_CDEMPRESA = CDEMPRESA
         FROM FILIAL
        WHERE CDFILIAL = @C_PRODACABADO_CDFILIAL;
                                                                                                           
       EXEC GERA_LOTECONTABIL @V_CDEMPRESA, '03', '', @C_PRODACABADO_CDFILIAL, '', '', '', @V_CDLOTE, V_NRLANCLOTE;
                                                                                                           
       IF (@C_PRODACABADO_VRPRACABADO <> 0.0) BEGIN
          SET @C_PRODACABADO_VRPRACABADOAJUST = ROUND(@C_PRODACABADO_VRPRACABADO * -1,2);
          EXEC NOVA_PARTIDA @V_CDEMPRESA, @V_CDLOTE, @C_PRODACABADO_DTHRFIMREAOP, @V_NRLANCLOTE,
                            @C_PRODACABADO_CDCTBLENTRPR, @V_CDHISTPADR, @V_DSHISTPADR, @C_PRODACABADO_VRPRACABADOAJUST,
                            '', '', '03', @C_PRODACABADO_NRORDPROD, 'N';
                                                                                                           
          IF (@C_PRODACABADO_CDCENTCUST IS NOT NULL) BEGIN  
              IF (@C_PRODACABADO_IDCONTCCUS <> 'O') BEGIN
                 SET @C_PRODACABADO_VRPRACABADOAJUST = ROUND(@C_PRODACABADO_VRPRACABADO * -1,2);
                 EXEC RATEIO_PARTIDA @V_CDEMPRESA, @V_CDLOTE, @C_PRODACABADO_DTHRFIMREAOP, @V_NRLANCLOTE, 
                                     @C_PRODACABADO_CDFILIAL, @C_PRODACABADO_CDCENTCUST, @C_PRODACABADO_VRPRACABADOAJUST;
              END;
          END; 
                                                                                                           
          SET @C_PRODACABADO_VRPRACABADOAJUST = ROUND(@C_PRODACABADO_VRPRACABADO,2);
          EXEC NOVA_PARTIDA @V_CDEMPRESA, @V_CDLOTE, @C_PRODACABADO_DTHRFIMREAOP, @V_NRLANCLOTE, 
                            @C_PRODACABADO_CDCONTCTBL, @V_CDHISTPADR, @V_DSHISTPADR, @C_PRODACABADO_VRPRACABADOAJUST,
                            '', '', '03', @C_PRODACABADO_NRORDPROD, 'N';
       END;
                                                                                                           
       INSERT INTO RELACAPRLANCLOT 
           (CDEMPRESA, CDLOTE, NRLANCLOTE, NRSEQLANLOTE,CDFILIAL, NRORDPROD, NRSUBORDPROD, CDETAPAPROD, NRAPRCUSTOP)
       VALUES
           (@V_CDEMPRESA, @V_CDLOTE, @V_NRLANCLOTE, '00001', @C_PRODACABADO_CDFILIAL, @C_PRODACABADO_NRORDPROD, @C_PRODACABADO_NRSUBORDPROD, @C_PRODACABADO_CDETAPAPROD, @C_PRODACABADO_NRAPRCUSTOP);
                                                                                                           
        IF (TEKNISA.CONFERE_PARTIDA(@V_CDEMPRESA, @V_CDLOTE, @V_NRLANCLOTE, @C_PRODACABADO_DTHRFIMREAOP) = 'V') BEGIN
           UPDATE APRCUSTOP 
              SET IDSTATUSCTBOP = 'C'
            WHERE CDFILIAL      = @C_PRODACABADO_CDFILIAL
              AND NRORDPROD     = @C_PRODACABADO_NRORDPROD
              AND NRSUBORDPROD  = @C_PRODACABADO_NRSUBORDPROD
              AND CDETAPAPROD   = @C_PRODACABADO_CDETAPAPROD
              AND NRAPRCUSTOP   = @C_PRODACABADO_NRAPRCUSTOP;
        END
        ELSE BEGIN
           UPDATE APRCUSTOP 
              SET IDSTATUSCTBOP = 'E'
            WHERE CDFILIAL      = @C_PRODACABADO_CDFILIAL
              AND NRORDPROD     = @C_PRODACABADO_NRORDPROD
              AND NRSUBORDPROD  = @C_PRODACABADO_NRSUBORDPROD
              AND CDETAPAPROD   = @C_PRODACABADO_CDETAPAPROD
              AND NRAPRCUSTOP   = @C_PRODACABADO_NRAPRCUSTOP;   
        END; 
                                                                                                           
        FETCH NEXT FROM C_PRODACABADO INTO @C_PRODACABADO_CDCTBLENTRPR, @C_PRODACABADO_CDCONTCTBL,  @C_PRODACABADO_VRPRACABADO, @C_PRODACABADO_CDFILIAL,
                                           @C_PRODACABADO_CDCENTCUST,   @C_PRODACABADO_IDCONTCCUS,  @C_PRODACABADO_NRORDPROD,   @C_PRODACABADO_NRSUBORDPROD,
                                           @C_PRODACABADO_CDETAPAPROD,  @C_PRODACABADO_NRAPRCUSTOP, @C_PRODACABADO_DTHRFIMREAOP;
   END;
   CLOSE C_PRODACABADO;
   DEALLOCATE C_PRODACABADO;
                                                                                                           
   DELETE FROM LISTA
    WHERE NRLISTA = @P_NRLISTA;
END
GO