/******************************************************************************/
/* Sistemas Integrados TECNISA                                                */
/*                                                                            */
/* Suprimentos                                                                */
/*                                                                            */
/******************************************************************************/
/*                                                                            */
/* Nome: 0201_GERSTP_PROJETA_ESTOQUE.SQL                                      */
/*                                                                            */
/* Descri��o:                                                                 */
/*    Faz a proje��o de estoque futuro considerando solicita��es de compras,  */
/*    AF's, Romaneios(NF's previstas)                                         */
/*                                                                            */
/* Cria��o:                                                                   */
/*   04/07/2001 - Adriano de Ara�jo                                           */
/*                                                                            */
/******************************************************************************/
/******************************************************************************/
/* SQL PLUS @C:\WIN_PRJ\SQL\ORACLE\0201_GERSTP_PROJETA_ESTOQUE.SQL            */
/*  PROJETA_ESTOQUE('9999','9999','01/09/2001','30/09/2001','1','2','9999','N','S','S','S', 'S', '9999', '00001') */
/******************************************************************************/

/* Par�metros                                                                 */
/*  P_FILIPROC  -> Filial de Processamento                                    */
/*  P_CDFILIAL  -> Filial que possui a Solicita��o Consolidada, AF's          */
/*  P_DTLEVINI  -> Per�odo Inicial de Levantamento  e considera o estoque     */
/*                 at� esta data.                                             */
/*  P_DTLEVFIN  -> Per�odo Final   de Levantamento                            */
/*  P_PRODINI   -> Produto Inicial                                            */
/*  P_PRODFIN   -> Produto Final                                              */
/*  P_FILESTOQ  -> Filiais ser considerado o estoque                          */
/*  P_IDGERSOL  -> Gera Solicita��o de Compras                                */
/*  P_CONSSOL   -> Considerar Solicita��o de Compras                          */
/*  P_CONSAF    -> Considerar Autoriza��o de Fornecimento                     */
/*  P_CONSEST   -> Considerar Estoque                                         */
/*  P_CONSROM   -> Considerar Romaneio(NF Prevista)                           */
/*  P_FILIROM   -> Filiais a ser considerado o Romaneio(NF Prevista)          */
/*  P_SERIROM   -> S�ries de NF a ser considerado o Romaneio(NF Prevista)     */

IF EXISTS(SELECT * FROM sysobjects O, sysusers U
          WHERE
            o.name = 'PROJETA_ESTOQUE'  and
            type = 'P'                  and
            u.uid = o.uid               and
            u.name = USER)
DROP PROCEDURE PROJETA_ESTOQUE
GO
CREATE PROCEDURE PROJETA_ESTOQUE(
                              @P_FILIPROC     VARCHAR(4),
                              @P_CDFILIAL     VARCHAR(4),
                              @P_DTLEVINI     DATETIME,
                              @P_DTLEVFIN     DATETIME,
                              @P_PRODINI      VARCHAR(20),
                              @P_PRODFIN      VARCHAR(20),
                              @P_FILESTOQ     VARCHAR(2000),
                              @P_IDGERSOL     VARCHAR(1),
                              @P_CONSSOL      VARCHAR(1),
                              @P_CONSAF       VARCHAR(1),
                              @P_CONSEST      VARCHAR(1),
                              @P_CONSROM      VARCHAR(1),
                              @P_FILIROM      VARCHAR(2000),
                              @P_SERIROM      VARCHAR(2000),
                              @P_OPERADOR     VARCHAR(12),
                              @P_NRSEQESTPROJ VARCHAR(10) OUTPUT)
AS
  DECLARE @V_NRESTPROJET VARCHAR(20);
  DECLARE @V_NRSOLICMP   VARCHAR(20);
  DECLARE @V_QTESTOQUE  NUMERIC(15,5);
  DECLARE @V_ESTOQFILI  NUMERIC(15,5);
  DECLARE @V_CDPRODPREF VARCHAR(10);
  DECLARE @V_EXISTE     INT;
  DECLARE @V_VRFATOCONV NUMERIC(10,4);
  DECLARE @V_VRARREDCMP NUMERIC(10,3);
  DECLARE @V_QTACOMPRAR NUMERIC(15,5);
  DECLARE @V_CDSEQUENCIAL VARCHAR(20);
  DECLARE @V_DATA_DTDATA DATETIME;
  DECLARE @V_ITEMAUTF_CDPRODESTO VARCHAR(10);
  DECLARE @V_ITEMAUTF_QTPROGENTAF NUMERIC(15,5);
  DECLARE @V_ITEMSOLI_CDPRODESTO VARCHAR(10);
  DECLARE @V_ITEMSOLI_QTSOLIPROD NUMERIC(15,5);
  DECLARE @V_ITEMROMANEIO_CDPRODESTO VARCHAR(10);
  DECLARE @V_ITEMROMANEIO_QTITEMROMA NUMERIC(15,5);
  DECLARE @V_ITEMPRODUTO_CDPRODESTO VARCHAR(10);
  DECLARE @V_ITEMPRODUTO_QTITEMPROD NUMERIC(15,5);
  DECLARE @V_ESTPROJ_DTPRIFALTEST DATETIME;
  DECLARE @V_ESTPROJ_CDPROESTPROJ VARCHAR(10);
  DECLARE @V_ESTPROJ_QTPROJESTPRO NUMERIC(15,5);
  DECLARE @V_NOVO_CODIGO VARCHAR(18);
  DECLARE @V_FILIAL_CDFILIAL VARCHAR(4);
  DECLARE @V_ITEMREQ_CDPRODESTO VARCHAR(10);
  DECLARE @V_ITEMREQ_QTSOLIPROD NUMERIC(15,5);
  DECLARE @V_ITEMREQ_CDPRODUTO VARCHAR(10);
  DECLARE @V_ITEMREQ_QTCONSPLAN NUMERIC(15,5);

  DECLARE C_FILIAL CURSOR FOR
  SELECT
      CDFILIAL
   FROM
     FILIAL
   WHERE
     CHARINDEX(CDFILIAL, ISNULL(@P_FILESTOQ, CDFILIAL))<>0;
BEGIN
  SET @V_EXISTE     = 0;
  SET @V_VRFATOCONV = 0;
  SET @V_VRARREDCMP = 0;

  SET @V_NRESTPROJET = NULL;
  SET @V_NOVO_CODIGO = 'TRAB_ESTPROJET' + @P_CDFILIAL;
  EXEC NOVO_CODIGO @V_NOVO_CODIGO, @P_SEQUENCIAL = @V_NRESTPROJET OUTPUT, @P_QTDE = 1;
  SET @P_NRSEQESTPROJ = SUBSTRING(@V_NRESTPROJET, 11, 10);
  
  IF @P_CONSSOL = 'R' BEGIN
     SET @V_NOVO_CODIGO = 'CONSPLAN' + @P_CDFILIAL;
     EXEC NOVO_CODIGO @V_NOVO_CODIGO, @P_SEQUENCIAL = @V_CDSEQUENCIAL OUTPUT, @P_QTDE = 1;
     SET @V_CDSEQUENCIAL = SUBSTRING(@V_CDSEQUENCIAL, 11, 10);

     /*PREENCHE OS DADOS NECESS�RIOS PARA CUSTO PLANEJADO - TABELA CONSPLAN*/
     EXEC TEKNISA.CONSUMO_PLANEJADO_PLA @P_CDFILIAL,
                                        'T',
                                        @P_DTLEVINI,
                                        @P_DTLEVFIN,
                                        'T',
                                        'CFP',
                                        'N',
                                        0,
                                        'N',
                                        @V_CDSEQUENCIAL,
                                        '0',
                                        'zzzzzzzzzz',
                                        '', --> Nenhum operador ser� necess�rio aqui
                                        NULL,
                                        NULL;

  END;


  DECLARE C_DATA CURSOR FOR   /* Seleciona as Datas do Per�odo Informado */
   SELECT
      DTDATA
    FROM
      DATA
    WHERE
      DTDATA BETWEEN @P_DTLEVINI AND @P_DTLEVFIN;
  OPEN C_DATA;
  FETCH NEXT FROM C_DATA INTO @V_DATA_DTDATA;
  WHILE (@@FETCH_STATUS = 0)
  BEGIN
    IF @P_CONSAF = 'S' BEGIN
      DECLARE C_ITEMAUTF CURSOR FOR
       SELECT
          PRODUTO.CDPRODESTO,
          ISNULL(SUM(ITEMAUTF.QTPROGENTAF * PRODUTO.VRFATOCONV),0) AS QTPROGENTAF
        FROM
           PRODUTO,
           ITEMAUTF
        WHERE
          ITEMAUTF.CDFILDEST   = @P_CDFILIAL      AND
          ITEMAUTF.DTPROGENTAF = @V_DATA_DTDATA   AND
          PRODUTO.CDARVPROD BETWEEN @P_PRODINI  AND @P_PRODFIN AND
          ITEMAUTF.CDPRODUTO = PRODUTO.CDPRODUTO AND
          ISNULL (ITEMAUTF.IDBAIXITMAF, '1') = '1'    AND   
          NOT EXISTS
             (SELECT
                 CDFILLANC
              FROM
                 AUTOFORNE
              WHERE
                 AUTOFORNE.CDFILLANC  = ITEMAUTF.CDFILLANC AND
                 AUTOFORNE.CDFILDEST  = ITEMAUTF.CDFILDEST AND
                 AUTOFORNE.NRAUTOFORN = ITEMAUTF.NRAUTOFORN AND
                 AUTOFORNE.IDBAIXAAF  IN ('4','5','6'))
        GROUP BY
          PRODUTO.CDPRODESTO
      OPEN C_ITEMAUTF;
      FETCH NEXT FROM C_ITEMAUTF INTO  @V_ITEMAUTF_CDPRODESTO,
                                       @V_ITEMAUTF_QTPROGENTAF;
      WHILE (@@FETCH_STATUS = 0)
      BEGIN
        SELECT
          @V_EXISTE = COUNT(*)
        FROM
          TRAB_ESTPROJET
        WHERE
          CDFILESTPROJ = @P_CDFILIAL     AND
          NRSEQESTPROJ = SUBSTRING(@V_NRESTPROJET, 11, 10)  AND
          CDPROESTPROJ = @V_ITEMAUTF_CDPRODESTO;

        IF @V_EXISTE = 0 BEGIN

          SET @V_QTESTOQUE = 0;
          IF @P_CONSEST = 'S' BEGIN
            SET @P_DTLEVINI = @P_DTLEVINI + 1;          

            OPEN C_FILIAL;
            FETCH NEXT FROM C_FILIAL INTO @V_FILIAL_CDFILIAL;
            WHILE (@@FETCH_STATUS = 0)
            BEGIN
              SET @V_ESTOQFILI = 0;
              EXEC CALC_ESTOQ_PREV @V_FILIAL_CDFILIAL, @V_ITEMAUTF_CDPRODESTO, @P_DTLEVINI, @P_CALC_ESTOQ_PREV = @V_ESTOQFILI OUTPUT;

              SET @V_QTESTOQUE = @V_QTESTOQUE + @V_ESTOQFILI;

              FETCH NEXT FROM C_FILIAL INTO @V_FILIAL_CDFILIAL;
            END;
            CLOSE C_FILIAL;
          END;

          INSERT INTO TRAB_ESTPROJET
             (CDFILESTPROJ,
              NRSEQESTPROJ,
              CDPROESTPROJ,
              QTPRODESTOQ,
              QTPRODLANCAF,
              QTPROJESTPRO)
          VALUES
             (@P_CDFILIAL,
              SUBSTRING(@V_NRESTPROJET, 11, 10),
              @V_ITEMAUTF_CDPRODESTO,
              ISNULL(@V_QTESTOQUE,0),
              @V_ITEMAUTF_QTPROGENTAF,
              ISNULL(@V_QTESTOQUE,0) + @V_ITEMAUTF_QTPROGENTAF);
        END
        ELSE BEGIN
          UPDATE TRAB_ESTPROJET
          SET QTPRODLANCAF = ISNULL(QTPRODLANCAF,0) + @V_ITEMAUTF_QTPROGENTAF,
              QTPROJESTPRO = ISNULL(QTPROJESTPRO,0) + @V_ITEMAUTF_QTPROGENTAF
          WHERE
            CDFILESTPROJ = @P_CDFILIAL     AND
            NRSEQESTPROJ = SUBSTRING(@V_NRESTPROJET, 11, 10)  AND
            CDPROESTPROJ = @V_ITEMAUTF_CDPRODESTO;
        END;
        FETCH NEXT FROM C_ITEMAUTF INTO @V_ITEMAUTF_CDPRODESTO,
                                       @V_ITEMAUTF_QTPROGENTAF;
      END;
      CLOSE C_ITEMAUTF;
      DEALLOCATE C_ITEMAUTF;
    END;
    IF @P_CONSSOL = 'S' BEGIN
      DECLARE C_ITEMSOLI CURSOR FOR
       SELECT
          PRODUTO.CDPRODESTO,
          ISNULL(SUM(ITEMSOLI.QTSOLIPROD * PRODUTO.VRFATOCONV),0) AS QTSOLIPROD
        FROM
          PRODUTO,
          ITEMSOLI
        WHERE
          ITEMSOLI.CDFILSOLI  = @P_CDFILIAL        AND
          PRODUTO.CDARVPROD BETWEEN @P_PRODINI   AND @P_PRODFIN AND
          ITEMSOLI.CDPRODUTO  = PRODUTO.CDPRODUTO  AND
          ITEMSOLI.DTPROGENTR = @V_DATA_DTDATA
        GROUP BY
          PRODUTO.CDPRODESTO
      OPEN C_ITEMSOLI;

      FETCH NEXT FROM C_ITEMSOLI INTO @V_ITEMSOLI_CDPRODESTO,
                                      @V_ITEMSOLI_QTSOLIPROD;
      WHILE (@@FETCH_STATUS = 0)
      BEGIN
        SELECT
          @V_EXISTE = COUNT(*)
        FROM
          TRAB_ESTPROJET
        WHERE
          CDFILESTPROJ = @P_CDFILIAL     AND
          NRSEQESTPROJ = SUBSTRING(@V_NRESTPROJET, 11, 10)  AND
          CDPROESTPROJ = @V_ITEMSOLI_CDPRODESTO;

       IF @V_EXISTE = 0 BEGIN

          SET @V_QTESTOQUE = 0;
          IF @P_CONSEST = 'S' BEGIN
            SET @P_DTLEVINI = @P_DTLEVINI + 1;

            OPEN C_FILIAL;
            FETCH NEXT FROM C_FILIAL INTO @V_FILIAL_CDFILIAL;
            WHILE (@@FETCH_STATUS = 0)
            BEGIN
              SET @V_ESTOQFILI = 0;
              EXEC CALC_ESTOQ_PREV @V_FILIAL_CDFILIAL, @V_ITEMSOLI_CDPRODESTO, @P_DTLEVINI, @P_CALC_ESTOQ_PREV = @V_ESTOQFILI OUTPUT;

              SET @V_QTESTOQUE = @V_QTESTOQUE + @V_ESTOQFILI;
	     
              FETCH NEXT FROM C_FILIAL INTO @V_FILIAL_CDFILIAL;
            END;
            CLOSE C_FILIAL;
          END;

          INSERT INTO TRAB_ESTPROJET
             (CDFILESTPROJ,
              NRSEQESTPROJ,
              CDPROESTPROJ,
              QTPRODESTOQ,
              QTPRODSOLI,
              QTPROJESTPRO)
          VALUES
             (@P_CDFILIAL,
              SUBSTRING(@V_NRESTPROJET, 11, 10),
              @V_ITEMSOLI_CDPRODESTO,
              ISNULL(@V_QTESTOQUE,0),
              @V_ITEMSOLI_QTSOLIPROD,
              ISNULL(@V_QTESTOQUE,0) - @V_ITEMSOLI_QTSOLIPROD);

          IF (ISNULL(@V_QTESTOQUE,0) - @V_ITEMSOLI_QTSOLIPROD) < 0 BEGIN
            UPDATE TRAB_ESTPROJET
            SET DTPRIFALTEST = @V_DATA_DTDATA
            WHERE
            QTPROJESTPRO < 0               AND
            DTPRIFALTEST IS NULL           AND
            CDFILESTPROJ = @P_CDFILIAL     AND
            NRSEQESTPROJ = SUBSTRING(@V_NRESTPROJET, 11, 10)  AND
            CDPROESTPROJ = @V_ITEMSOLI_CDPRODESTO;
          END;
        END
        ELSE BEGIN
          UPDATE TRAB_ESTPROJET
          SET QTPRODSOLI   = ISNULL(QTPRODSOLI,0)   + @V_ITEMSOLI_QTSOLIPROD,
              QTPROJESTPRO = ISNULL(QTPROJESTPRO,0) - @V_ITEMSOLI_QTSOLIPROD
          WHERE
            CDFILESTPROJ = @P_CDFILIAL     AND
            NRSEQESTPROJ = SUBSTRING(@V_NRESTPROJET, 11, 10)  AND
            CDPROESTPROJ = @V_ITEMSOLI_CDPRODESTO;

          UPDATE TRAB_ESTPROJET
          SET DTPRIFALTEST = @V_DATA_DTDATA
          WHERE
            QTPROJESTPRO < 0               AND
            DTPRIFALTEST IS NULL           AND
            CDFILESTPROJ = @P_CDFILIAL     AND
            NRSEQESTPROJ = SUBSTRING(@V_NRESTPROJET, 11, 10)  AND
            CDPROESTPROJ = @V_ITEMSOLI_CDPRODESTO;
        END;
        FETCH NEXT FROM C_ITEMSOLI INTO @V_ITEMSOLI_CDPRODESTO,
                                        @V_ITEMSOLI_QTSOLIPROD;
      END;
      CLOSE C_ITEMSOLI;
      DEALLOCATE C_ITEMSOLI;
    END;
   
    IF @P_CONSSOL = 'R' BEGIN /* CONSIDERAR REQUISICAO DO PERIODO */

      DECLARE C_ITEMREQ CURSOR FOR
       SELECT
          PRODUTO.CDPRODUTO,
          SUM(CONSPLAN.QTCONSPLAN) AS QTCONSPLAN
        FROM
          PRODUTO,
          CONSPLAN,
	  SERVICO
        WHERE CONSPLAN.NRCONSPLAN = @V_CDSEQUENCIAL
           AND CONSPLAN.CDFILICPLA = @P_CDFILIAL
           AND PRODUTO.CDARVPROD BETWEEN @P_PRODINI  AND @P_PRODFIN
           AND CONSPLAN.CDPRODCPLA = PRODUTO.CDPRODUTO
           AND CONSPLAN.DTCONSPLAN = @V_DATA_DTDATA
	   AND CONSPLAN.CDSERVCPLA = SERVICO.CDSERVFILI
           AND CONSPLAN.CDFILICPLA = SERVICO.CDFILIAL
           AND SERVICO.IDSERVATIV = 'S'
        GROUP BY
          PRODUTO.CDPRODUTO
      OPEN C_ITEMREQ;

      FETCH NEXT FROM C_ITEMREQ INTO @V_ITEMREQ_CDPRODUTO,
                                     @V_ITEMREQ_QTCONSPLAN;
      WHILE (@@FETCH_STATUS = 0)
      BEGIN 
        SELECT
          @V_EXISTE = COUNT(*)
        FROM
          TRAB_ESTPROJET
        WHERE
          CDFILESTPROJ = @P_CDFILIAL     AND
          NRSEQESTPROJ = SUBSTRING(@V_NRESTPROJET, 11, 10)  AND
          CDPROESTPROJ = @V_ITEMREQ_CDPRODUTO;

        IF @V_EXISTE = 0 BEGIN

          SET @V_QTESTOQUE = 0;
            IF @P_CONSEST = 'S' BEGIN
	    SET @P_DTLEVINI = @P_DTLEVINI + 1;          
            OPEN C_FILIAL;

            FETCH NEXT FROM C_FILIAL INTO @V_FILIAL_CDFILIAL;
            WHILE (@@FETCH_STATUS = 0)
            BEGIN	
	       SET @V_ESTOQFILI = 0;
               EXEC CALC_ESTOQ_PREV @V_FILIAL_CDFILIAL, @V_ITEMREQ_CDPRODUTO, @P_DTLEVINI, @P_CALC_ESTOQ_PREV  = @V_ESTOQFILI OUTPUT;	     
             
              SET @V_QTESTOQUE = @V_QTESTOQUE + @V_ESTOQFILI;

              FETCH NEXT FROM C_FILIAL INTO @V_FILIAL_CDFILIAL;
            END;
               CLOSE C_FILIAL;
          END;


          INSERT INTO TRAB_ESTPROJET
             (CDFILESTPROJ,
              NRSEQESTPROJ,
              CDPROESTPROJ,
              QTPRODESTOQ,
              QTPRODSOLI,
              QTPROJESTPRO)
          VALUES
             (@P_CDFILIAL,
              SUBSTRING(@V_NRESTPROJET,11,10),
              @V_ITEMREQ_CDPRODUTO,
              ISNULL(@V_QTESTOQUE, 0),
              @V_ITEMREQ_QTCONSPLAN,
              ISNULL(@V_QTESTOQUE, 0) - @V_ITEMREQ_QTCONSPLAN);

          IF (ISNULL(@V_QTESTOQUE, 0) - @V_ITEMREQ_QTCONSPLAN) <0 BEGIN
             UPDATE TRAB_ESTPROJET
             SET DTPRIFALTEST = @V_DATA_DTDATA
             WHERE
               QTPROJESTPRO < 0                            AND
               DTPRIFALTEST IS NULL                        AND
               CDFILESTPROJ = @P_CDFILIAL                   AND
               NRSEQESTPROJ = SUBSTRING(@V_NRESTPROJET,11,10)  AND
               CDPROESTPROJ = @V_ITEMREQ_CDPRODUTO;
          END;
        END
        ELSE BEGIN
          UPDATE TRAB_ESTPROJET
          SET QTPRODSOLI   = ISNULL(QTPRODSOLI,0)   + @V_ITEMREQ_QTCONSPLAN,
              QTPROJESTPRO = ISNULL(QTPROJESTPRO,0) - @V_ITEMREQ_QTCONSPLAN
          WHERE
            CDFILESTPROJ = @P_CDFILIAL                   AND
            NRSEQESTPROJ = SUBSTRING(@V_NRESTPROJET,11,10)  AND
            CDPROESTPROJ = @V_ITEMREQ_CDPRODUTO;

          UPDATE TRAB_ESTPROJET
          SET DTPRIFALTEST = @V_DATA_DTDATA
          WHERE
            QTPROJESTPRO < 0                            AND
            DTPRIFALTEST IS NULL                        AND
            CDFILESTPROJ = @P_CDFILIAL                   AND
            NRSEQESTPROJ = SUBSTRING(@V_NRESTPROJET,11,10)  AND
            CDPROESTPROJ = @V_ITEMREQ_CDPRODUTO;
        END;
	FETCH NEXT FROM C_ITEMREQ INTO @V_ITEMREQ_CDPRODUTO,
                                       @V_ITEMREQ_QTCONSPLAN;
      END;
      CLOSE C_ITEMREQ;
      DEALLOCATE C_ITEMREQ;

    END;
    /*
    DECLARE C_ITEMROMANEIO CURSOR FOR
     (SELECT
        PRODUTO.CDPRODESTO,
        ISNULL(SUM(ITEMROMANEIO.QTITEMROMA * PRODUTO.VRFATOCONV),0) AS QTITEMROMA
      FROM
        PRODUTO,
        ROMANEIO,
        ITEMROMANEIO
      WHERE
        ROMANEIO.CDFILIEMITRO   = @P_CDFILIAL       AND
        ROMANEIO.DTROMANEIO     = @V_DATA_DTDATA    AND
        ITEMROMANEIO.CDPRODUTO  BETWEEN @P_PRODINI  AND @P_PRODFIN AND
        ITEMROMANEIO.CDPRODUTO  = PRODUTO.CDPRODUTO              AND
        ROMANEIO.CDFILIAL       = ITEMROMANEIO.CDFILIAL          AND
        ROMANEIO.NRROMANEIO     = ITEMROMANEIO.NRROMANEIO
      GROUP BY PRODUTO.CDPRODESTO)
    OPEN C_ITEMROMANEIO;

    FETCH NEXT FROM C_ITEMROMANEIO INTO @V_ITEMROMANEIO_CDPRODESTO,
                                        @V_ITEMROMANEIO_QTITEMROMA;
    WHILE (@@FETCH_STATUS = 0)
    BEGIN
      SELECT
        @V_EXISTE = COUNT(*)
      FROM
        TRAB_ESTPROJET
      WHERE
        CDFILESTPROJ = @P_FILIPROC     AND
        NRSEQESTPROJ = @V_NRESTPROJET  AND
        CDPROESTPROJ = @V_ITEMROMANEIO_CDPRODESTO;
      IF @V_EXISTE = 0 BEGIN
         SET @V_QTESTOQUE = 0;
         SET @P_DTLEVINI = @P_DTLEVINI + 1;
         EXEC CALC_ESTOQ_PREV @P_FILESTOQ, @V_ITEMROMANEIO_CDPRODESTO, @P_DTLEVINI, @P_CALC_ESTOQ_PREV = @V_QTESTOQUE OUTPUT;

         INSERT INTO TRAB_ESTPROJET
           (CDFILESTPROJ,
            NRSEQESTPROJ,
            CDPROESTPROJ,
            QTPRODESTOQ,
            QTPRODROMA,
            QTPROJESTPRO)
        VALUES
           (@P_FILIPROC,
            @V_NRESTPROJET,
            @V_ITEMROMANEIO_CDPRODESTO,
            ISNULL(@V_QTESTOQUE,0),
            @V_ITEMROMANEIO_QTITEMROMA,
            ISNULL(@V_QTESTOQUE,0) - @V_ITEMROMANEIO_QTITEMROMA);

        IF (ISNULL(@V_QTESTOQUE,0) - @V_ITEMROMANEIO_QTITEMROMA) < 0 BEGIN
          UPDATE TRAB_ESTPROJET
          SET DTPRIFALTEST = @V_DATA_DTDATA
          WHERE
            QTPROJESTPRO < 0               AND
            DTPRIFALTEST IS NULL           AND
            CDFILESTPROJ = @P_FILIPROC     AND
            NRSEQESTPROJ = @V_NRESTPROJET  AND
            CDPROESTPROJ = @V_ITEMROMANEIO_CDPRODESTO;
        END;
      END
      ELSE BEGIN
        UPDATE TRAB_ESTPROJET
        SET QTPRODROMA   = ISNULL(QTPRODROMA,0)   + @V_ITEMROMANEIO_QTITEMROMA,
            QTPROJESTPRO = ISNULL(QTPROJESTPRO,0) - @V_ITEMROMANEIO_QTITEMROMA
        WHERE
          CDFILESTPROJ = @P_FILIPROC     AND
          NRSEQESTPROJ = @V_NRESTPROJET  AND
          CDPROESTPROJ = @V_ITEMROMANEIO_CDPRODESTO;
        UPDATE TRAB_ESTPROJET
        SET DTPRIFALTEST = @V_DATA_DTDATA
        WHERE
          QTPROJESTPRO < 0               AND
          DTPRIFALTEST IS NULL           AND
          CDFILESTPROJ = @P_FILIPROC     AND
          NRSEQESTPROJ = @V_NRESTPROJET  AND
          CDPROESTPROJ = @V_ITEMROMANEIO_CDPRODESTO;
      END;
      FETCH NEXT FROM C_ITEMROMANEIO INTO @V_ITEMROMANEIO_CDPRODESTO,
                                          @V_ITEMROMANEIO_QTITEMROMA;
    END;
    CLOSE C_ITEMROMANEIO;
    DEALLOCATE C_ITEMROMANEIO;*/
    IF @P_CONSROM = 'S' BEGIN
      DECLARE C_ITEMPRODUTO CURSOR FOR
       (SELECT
          PRODUTO.CDPRODESTO,
          ISNULL(SUM(ITEMPRODUTO.QTITEMPROD * PRODUTO.VRFATOCONV),0) AS QTITEMPROD
        FROM
          PRODUTO,
          ITEMPRODUTO,
          NOTAFISCAL,
          LANCTOESTOQ,
          ITLANCTOEST,
          SERIENF,
          FILIAL
        WHERE
          ITLANCTOEST.IDEVOLESTOQ = 'N'                    AND
          ITLANCTOEST.CDFILIAL    = LANCTOESTOQ.CDFILIAL   AND
          ITLANCTOEST.NRLANCESTQ  = LANCTOESTOQ.NRLANCESTQ AND
          LANCTOESTOQ.CDFILIAL    = NOTAFISCAL.CDFILIAL    AND
          LANCTOESTOQ.NRLANCTONF  = NOTAFISCAL.NRLANCTONF  AND
          NOTAFISCAL.IDENTRSAIDOP = 'S'                    AND
          CHARINDEX(FILIAL.CDFILIAL, ISNULL(@P_FILIROM, FILIAL.CDFILIAL))<>0 AND
          SERIENF.CDEMPRESA       = FILIAL.CDEMPRESA       AND
          SERIENF.CDINSCESTA      = FILIAL.CDINSCESTA      AND
          SERIENF.CDINSCMUNI      = FILIAL.CDINSCMUNI      AND
          CHARINDEX(SERIENF.CDSERIE, ISNULL(@P_SERIROM, SERIENF.CDSERIE))<>0 AND
          NOTAFISCAL.CDFILIEMIT   = FILIAL.CDFILIAL        AND
          NOTAFISCAL.CDSERIE      = SERIENF.CDSERIE        AND
          NOTAFISCAL.DTENTRSAID   = @V_DATA_DTDATA          AND
          PRODUTO.CDARVPROD BETWEEN @P_PRODINI  AND @P_PRODFIN AND
          ITEMPRODUTO.CDPRODUTO   = PRODUTO.CDPRODUTO      AND
          ITEMPRODUTO.CDFILIAL    = NOTAFISCAL.CDFILIAL    AND
          ITEMPRODUTO.NRLANCTONF  = NOTAFISCAL.NRLANCTONF
        GROUP BY
          PRODUTO.CDPRODESTO)
      OPEN C_ITEMPRODUTO;

      FETCH NEXT FROM C_ITEMPRODUTO INTO @V_ITEMPRODUTO_CDPRODESTO,
                                         @V_ITEMPRODUTO_QTITEMPROD;
      WHILE (@@FETCH_STATUS = 0)
      BEGIN
        SELECT
           @V_EXISTE = COUNT(*)
        FROM
          TRAB_ESTPROJET
        WHERE
          CDFILESTPROJ = @P_CDFILIAL     AND
          NRSEQESTPROJ = SUBSTRING(@V_NRESTPROJET, 11, 10)  AND
          CDPROESTPROJ = @V_ITEMPRODUTO_CDPRODESTO;

        IF @V_EXISTE = 0 BEGIN

          SET @V_QTESTOQUE = 0;
          IF @P_CONSEST = 'S' BEGIN
            SET @P_DTLEVINI = @P_DTLEVINI + 1;

            OPEN C_FILIAL;
            FETCH NEXT FROM C_FILIAL INTO @V_FILIAL_CDFILIAL;
            WHILE (@@FETCH_STATUS = 0)
            BEGIN
              SET @V_ESTOQFILI = 0;
              EXEC CALC_ESTOQ_PREV @V_FILIAL_CDFILIAL, @V_ITEMPRODUTO_CDPRODESTO, @P_DTLEVINI, @P_CALC_ESTOQ_PREV = @V_ESTOQFILI OUTPUT;

              SET @V_QTESTOQUE = @V_QTESTOQUE + @V_ESTOQFILI;

              FETCH NEXT FROM C_FILIAL INTO @V_FILIAL_CDFILIAL;
            END;
            CLOSE C_FILIAL;
          END;

          INSERT INTO TRAB_ESTPROJET
             (CDFILESTPROJ,
              NRSEQESTPROJ,
              CDPROESTPROJ,
              QTPRODESTOQ,
              QTPRODNFPREV,
              QTPROJESTPRO)
          VALUES
             (@P_CDFILIAL,
              SUBSTRING(@V_NRESTPROJET, 11, 10),
              @V_ITEMPRODUTO_CDPRODESTO,
              ISNULL(@V_QTESTOQUE,0),
              @V_ITEMPRODUTO_QTITEMPROD,
              ISNULL(@V_QTESTOQUE,0) - @V_ITEMPRODUTO_QTITEMPROD);

          IF (ISNULL(@V_QTESTOQUE,0) - @V_ITEMPRODUTO_QTITEMPROD) < 0 BEGIN
            UPDATE TRAB_ESTPROJET
            SET DTPRIFALTEST = @V_DATA_DTDATA
            WHERE
              QTPROJESTPRO < 0              AND
              DTPRIFALTEST IS NULL          AND
              CDFILESTPROJ = @P_CDFILIAL     AND
              NRSEQESTPROJ = SUBSTRING(@V_NRESTPROJET, 11, 10)  AND
              CDPROESTPROJ = @V_ITEMPRODUTO_CDPRODESTO;
          END;
        END
        ELSE BEGIN
          UPDATE TRAB_ESTPROJET
          SET QTPRODNFPREV = ISNULL(QTPRODNFPREV,0) + @V_ITEMPRODUTO_QTITEMPROD,
              QTPROJESTPRO = ISNULL(QTPROJESTPRO,0) - @V_ITEMPRODUTO_QTITEMPROD
          WHERE
            CDFILESTPROJ = @P_CDFILIAL     AND
            NRSEQESTPROJ = SUBSTRING(@V_NRESTPROJET, 11, 10)  AND
            CDPROESTPROJ = @V_ITEMPRODUTO_CDPRODESTO;
          UPDATE TRAB_ESTPROJET
          SET DTPRIFALTEST = @V_DATA_DTDATA
          WHERE
            QTPROJESTPRO < 0              AND
            DTPRIFALTEST IS NULL          AND
            CDFILESTPROJ = @P_CDFILIAL     AND
            NRSEQESTPROJ = SUBSTRING(@V_NRESTPROJET, 11, 10)  AND
            CDPROESTPROJ = @V_ITEMPRODUTO_CDPRODESTO;
        END;
        FETCH NEXT FROM C_ITEMPRODUTO INTO @V_ITEMPRODUTO_CDPRODESTO,
                                           @V_ITEMPRODUTO_QTITEMPROD;
      END;
      CLOSE C_ITEMPRODUTO;
      DEALLOCATE C_ITEMPRODUTO;
    END;
    FETCH NEXT FROM C_DATA INTO @V_DATA_DTDATA;
  END;
  CLOSE C_DATA;
  DEALLOCATE C_DATA;
  DEALLOCATE C_FILIAL;

  IF @P_IDGERSOL = 'S' BEGIN
    SET @V_NRSOLICMP = NULL;

    DECLARE C_ESTPROJ CURSOR FOR
     (SELECT
        DTPRIFALTEST,
        CDPROESTPROJ,
        QTPROJESTPRO
      FROM
        TRAB_ESTPROJET
      WHERE
        QTPROJESTPRO  < 0          AND
        CDFILESTPROJ = @P_CDFILIAL  AND
        NRSEQESTPROJ = SUBSTRING(@V_NRESTPROJET, 11, 10));
    OPEN C_ESTPROJ;

    FETCH NEXT FROM C_ESTPROJ INTO @V_ESTPROJ_DTPRIFALTEST,
                                   @V_ESTPROJ_CDPROESTPROJ,
                                   @V_ESTPROJ_QTPROJESTPRO;
    WHILE (@@FETCH_STATUS = 0)
    BEGIN

      IF @V_NRSOLICMP IS NULL BEGIN
        SET @V_NOVO_CODIGO = 'SOLICOMP' + @P_CDFILIAL + @P_FILIPROC;
        EXEC NOVO_CODIGO @V_NOVO_CODIGO, @P_SEQUENCIAL = @V_NRSOLICMP OUTPUT, @P_QTDE = 1;

        INSERT INTO SOLICITA
         (CDFILSOLI,
          CDFILLANCA,
          NRSOLICMP,
          DTSOLCMP,
          IDTIPLAN,
          CDFILCENT,
          CDOPERLANC)
        SELECT
          @P_CDFILIAL,
          @P_FILIPROC,
          SUBSTRING(@V_NRSOLICMP, 11, 10),
          CONVERT(DATETIME, CONVERT(VARCHAR, GETDATE(), 103)),
          'A',
          ISNULL(CDFILCENTCMP, @P_CDFILIAL),
          @P_OPERADOR
        FROM
          FILIAL
        WHERE
          FILIAL.CDFILIAL   = @P_CDFILIAL;
      END;

      SET @V_CDPRODPREF = NULL;
      SELECT
        @V_CDPRODPREF = MAX(PRODPREFMED.CDPRODPREF)
      FROM
        PRODPREFMED
      WHERE
        PRODPREFMED.CDPRODUTO = @V_ESTPROJ_CDPROESTPROJ;

      SELECT
        @V_VRFATOCONV = ISNULL(MAX(VRFATOCONV),1),
        @V_VRARREDCMP = ISNULL(MAX(VRARREDCMP),1)
      FROM
        PRODUTO
      WHERE
        PRODUTO.CDPRODUTO = ISNULL(@V_CDPRODPREF, @V_ESTPROJ_CDPROESTPROJ);

      SET @V_QTACOMPRAR = (@V_ESTPROJ_QTPROJESTPRO * - 1)/@V_VRFATOCONV;
      IF (@V_VRARREDCMP > 0)
      BEGIN
         IF (((CAST(@V_QTACOMPRAR AS NUMERIC) / @V_VRARREDCMP)  - (ROUND(@V_QTACOMPRAR / @V_VRARREDCMP, 0, 1))) <> 0)
            BEGIN
               SET @V_QTACOMPRAR = CEILING(CAST(@V_QTACOMPRAR AS NUMERIC) / @V_VRARREDCMP) * @V_VRARREDCMP;
            END;
      END;

      IF @V_QTACOMPRAR <= 9999999 BEGIN
        INSERT INTO ITEMSOLI
         (CDFILSOLI,
          CDFILLAN,
          NRSOLICMP,
          DTPROGENTR,
          CDPRODUTO,
          QTSOLIPROD,
          DTUTILIZA)
        SELECT
          @P_CDFILIAL,
          @P_FILIPROC,
          SUBSTRING(@V_NRSOLICMP, 11, 10),
          @V_ESTPROJ_DTPRIFALTEST,
          ISNULL(@V_CDPRODPREF, @V_ESTPROJ_CDPROESTPROJ),
          @V_QTACOMPRAR,
          @V_ESTPROJ_DTPRIFALTEST
        FROM
          PRODUTO
        WHERE
          PRODUTO.CDPRODUTO = ISNULL(@V_CDPRODPREF, @V_ESTPROJ_CDPROESTPROJ);
      END;
      FETCH NEXT FROM C_ESTPROJ INTO @V_ESTPROJ_DTPRIFALTEST,
                                     @V_ESTPROJ_CDPROESTPROJ,
                                     @V_ESTPROJ_QTPROJESTPRO;
    END;
    CLOSE C_ESTPROJ;
    DEALLOCATE C_ESTPROJ;
  END;

   IF @P_CONSSOL = 'R' BEGIN /* CONSIDERAR REQUISICAO DO PERIODO */
     DELETE FROM CONSPLAN
     WHERE CDFILICPLA = @P_CDFILIAL
       AND NRCONSPLAN = @V_CDSEQUENCIAL;
  END; 	
END;
GO

-- VERSAO --
EXEC ATUVEROBJ 'PROJETA_ESTOQUE','6.49.005';
GO
